167 lines
3.4 KiB
Go
167 lines
3.4 KiB
Go
|
|
package entity
|
||
|
|
|
||
|
|
import (
|
||
|
|
"furtuna-be/internal/constants/order"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Order struct {
|
||
|
|
ID int64
|
||
|
|
BranchID int64
|
||
|
|
BranchName string
|
||
|
|
Status order.OrderStatus
|
||
|
|
Amount float64
|
||
|
|
CustomerName string `gorm:"column:customer_name" json:"customer_name"`
|
||
|
|
CustomerPhone string `gorm:"column:customer_phone" json:"customer_phone"`
|
||
|
|
Pax int `gorm:"column:pax" json:"pax"`
|
||
|
|
CreatedAt time.Time
|
||
|
|
UpdatedAt time.Time
|
||
|
|
CreatedBy int64
|
||
|
|
UpdatedBy int64
|
||
|
|
Transaction Transaction
|
||
|
|
OrderItem []OrderItem
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderSearch struct {
|
||
|
|
Search string
|
||
|
|
StatusActive order.OrderSearchStatus
|
||
|
|
Status order.OrderStatus
|
||
|
|
BranchID int64
|
||
|
|
Limit int
|
||
|
|
Offset int
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderTotalRevenueSearch struct {
|
||
|
|
Year int
|
||
|
|
Month int
|
||
|
|
BranchID int64
|
||
|
|
DateStart *time.Time
|
||
|
|
DateEnd *time.Time
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderYearlyRevenueList []OrderYearlyRevenue
|
||
|
|
type OrderYearlyRevenue struct {
|
||
|
|
ItemType string `gorm:"column:item_type"`
|
||
|
|
Month int `gorm:"column:month_number"`
|
||
|
|
Amount float64 `gorm:"column:total_amount"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderBranchRevenueSearch struct {
|
||
|
|
DateStart *time.Time
|
||
|
|
DateEnd *time.Time
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderBranchRevenueList []OrderBranchRevenue
|
||
|
|
type OrderBranchRevenue struct {
|
||
|
|
BranchID string `gorm:"column:branch_id"`
|
||
|
|
BranchName string `gorm:"column:name"`
|
||
|
|
BranchLocation string `gorm:"column:location"`
|
||
|
|
TotalTransaction int `gorm:"column:total_trans"`
|
||
|
|
TotalAmount float64 `gorm:"column:total_amount"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderList []*OrderDB
|
||
|
|
|
||
|
|
type OrderDB struct {
|
||
|
|
Order
|
||
|
|
}
|
||
|
|
|
||
|
|
func (b *Order) ToOrderDB() *OrderDB {
|
||
|
|
var amount float64
|
||
|
|
for _, i := range b.OrderItem {
|
||
|
|
amount = amount + (i.Price * float64(i.Qty))
|
||
|
|
}
|
||
|
|
b.Amount = amount
|
||
|
|
b.Transaction.Amount = amount
|
||
|
|
|
||
|
|
return &OrderDB{
|
||
|
|
Order: *b,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (OrderDB) TableName() string {
|
||
|
|
return "orders"
|
||
|
|
}
|
||
|
|
|
||
|
|
func (e *OrderDB) ToOrder() *Order {
|
||
|
|
return &Order{
|
||
|
|
ID: e.ID,
|
||
|
|
Status: e.Status,
|
||
|
|
BranchID: e.BranchID,
|
||
|
|
BranchName: e.BranchName,
|
||
|
|
Amount: e.Amount,
|
||
|
|
CustomerName: e.CustomerName,
|
||
|
|
CustomerPhone: e.CustomerPhone,
|
||
|
|
Pax: e.Pax,
|
||
|
|
Transaction: e.Transaction,
|
||
|
|
OrderItem: e.OrderItem,
|
||
|
|
CreatedAt: e.CreatedAt,
|
||
|
|
UpdatedAt: e.UpdatedAt,
|
||
|
|
CreatedBy: e.CreatedBy,
|
||
|
|
UpdatedBy: e.UpdatedBy,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (b *OrderList) ToOrderList() []*Order {
|
||
|
|
var Orders []*Order
|
||
|
|
for _, order := range *b {
|
||
|
|
Orders = append(Orders, order.ToOrder())
|
||
|
|
}
|
||
|
|
return Orders
|
||
|
|
}
|
||
|
|
|
||
|
|
func (o *OrderDB) ToUpdatedOrder(updatedby int64, req Order) {
|
||
|
|
o.UpdatedBy = updatedby
|
||
|
|
|
||
|
|
if req.Amount > 0 {
|
||
|
|
o.Amount = req.Amount
|
||
|
|
}
|
||
|
|
|
||
|
|
if req.Status != "" {
|
||
|
|
o.Status = req.Status
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderItem struct {
|
||
|
|
OrderItemID int64
|
||
|
|
OrderID int64
|
||
|
|
ItemID int64
|
||
|
|
ItemType order.ItemType
|
||
|
|
ItemName string
|
||
|
|
Price float64
|
||
|
|
Qty int64
|
||
|
|
CreatedAt time.Time
|
||
|
|
UpdatedAt time.Time
|
||
|
|
CreatedBy int64
|
||
|
|
UpdatedBy int64
|
||
|
|
}
|
||
|
|
|
||
|
|
type OrderItemDB struct {
|
||
|
|
OrderItem
|
||
|
|
}
|
||
|
|
|
||
|
|
func (b *OrderItem) ToOrderItemDB() *OrderItemDB {
|
||
|
|
return &OrderItemDB{
|
||
|
|
OrderItem: *b,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (OrderItemDB) TableName() string {
|
||
|
|
return "order_items"
|
||
|
|
}
|
||
|
|
|
||
|
|
func (e *OrderItemDB) ToOrderItem() *OrderItem {
|
||
|
|
return &OrderItem{
|
||
|
|
OrderItemID: e.OrderItemID,
|
||
|
|
OrderID: e.OrderID,
|
||
|
|
ItemID: e.ItemID,
|
||
|
|
ItemType: e.ItemType,
|
||
|
|
Price: e.Price,
|
||
|
|
Qty: e.Qty,
|
||
|
|
CreatedAt: e.CreatedAt,
|
||
|
|
UpdatedAt: e.UpdatedAt,
|
||
|
|
CreatedBy: e.CreatedBy,
|
||
|
|
UpdatedBy: e.UpdatedBy,
|
||
|
|
}
|
||
|
|
}
|