package entity import ( "time" ) type Order struct { ID int64 `gorm:"primaryKey;autoIncrement;column:id"` PartnerID int64 `gorm:"type:int;column:partner_id"` Status string `gorm:"type:varchar;column:status"` Amount float64 `gorm:"type:numeric;not null;column:amount"` Total float64 `gorm:"type:numeric;not null;column:total"` Tax float64 `gorm:"type:numeric;not null;column:tax"` CustomerID *int64 CustomerName string InquiryID *string Site *Site `gorm:"foreignKey:SiteID;constraint:OnDelete:CASCADE;"` CreatedAt time.Time `gorm:"autoCreateTime;column:created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime;column:updated_at"` CreatedBy int64 `gorm:"type:int;column:created_by"` PaymentType string `gorm:"type:varchar;column:payment_type"` PaymentProvider string `gorm:"type:varchar;column:payment_provider"` UpdatedBy int64 `gorm:"type:int;column:updated_by"` OrderItems []OrderItem `gorm:"foreignKey:OrderID;constraint:OnDelete:CASCADE;"` Payment Payment `gorm:"foreignKey:OrderID;constraint:OnDelete:CASCADE;"` User User `gorm:"foreignKey:CreatedBy;constraint:OnDelete:CASCADE;"` Source string `gorm:"type:varchar;column:source"` OrderType string `gorm:"type:varchar;column:order_type"` CashierSessionID int64 `gorm:"type:varchar;column:cashier_session_id"` TableNumber string InProgressOrderID int64 } func (o *Order) IsMemberOrder() bool { return o.CustomerID != nil && *o.CustomerID > 0 } type OrderDB struct { Order } func (b *Order) ToOrderDB() *OrderDB { return &OrderDB{ Order: *b, } } func (e *OrderDB) ToSumAmount() *Order { return &Order{ Amount: e.Amount, } } type OrderResponse struct { Order *Order } type CheckinResponse struct { Order *Order Token string } type CheckinExecute struct { Order *Order Token string } type ExecuteOrderResponse struct { Order *Order QRCode string VirtualAccount string BankName string BankCode string PaymentToken string RedirectURL string } func (Order) TableName() string { return "orders" } type OrderItem struct { ID int64 `gorm:"primaryKey;autoIncrement;column:order_item_id"` OrderID int64 `gorm:"type:int;column:order_id"` ItemID int64 `gorm:"type:int;column:item_id"` ItemType string `gorm:"type:varchar;column:item_type"` Price float64 `gorm:"type:numeric;not null;column:price"` Quantity int `gorm:"type:int;column:quantity"` CreatedAt time.Time `gorm:"autoCreateTime;column:created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime;column:updated_at"` CreatedBy int64 `gorm:"type:int;column:created_by"` UpdatedBy int64 `gorm:"type:int;column:updated_by"` Product *Product `gorm:"foreignKey:ItemID;references:ID"` ItemName string `gorm:"type:varchar;column:item_name"` Description string `gorm:"type:varchar;column:description"` Notes string `gorm:"type:varchar;column:notes"` } func (OrderItem) TableName() string { return "order_items" } type OrderRequest struct { Source string CreatedBy int64 PartnerID int64 PaymentMethod string OrderItems []OrderItemRequest CustomerID *int64 CustomerName string CustomerEmail string CustomerPhoneNumber string TableNumber string PaymentProvider string OrderType string ID int64 CashierSessionID int64 } type OrderItemRequest struct { ProductID int64 `json:"product_id" validate:"required"` Quantity int `json:"quantity" validate:"required"` Description string `json:"description"` Notes string `json:"notes"` } type OrderExecuteRequest struct { CreatedBy int64 PartnerID int64 Token string } func (o *Order) SetExecutePaymentStatus() { o.Status = "PAID" } type CallbackRequest struct { TransactionStatus string `json:"transaction_status"` TransactionID string `json:"transaction_id"` } type HistoryOrder struct { ID int64 `gorm:"primaryKey;autoIncrement;column:id"` Employee string `gorm:"type:varchar;column:employee"` Site string `gorm:"type:varchar;column:site"` Timestamp time.Time `gorm:"autoCreateTime;column:timestamp"` BookingTime time.Time `gorm:"autoCreateTime;column:booking_time"` Tickets []string `gorm:"-"` RawTickets string `gorm:"type:text;column:tickets"` PaymentType string `gorm:"type:varchar;column:payment_type"` Status string `gorm:"type:varchar;column:status"` Amount float64 `gorm:"type:numeric;column:amount"` VisitDate time.Time `gorm:"type:date;column:visit_date"` TicketStatus string `gorm:"type:varchar;column:ticket_status"` Source string `gorm:"type:numeric;column:source"` } func (h *HistoryOrder) GetPaymentStatus() string { if h.Status == "PAID" { return "E-TICKET TELAH TERBIT" } if h.Status == "PENDING" { return "MENUNGGU PEMBAYARAN" } if h.Status == "EXPIRED" { return "KADALUWARSA" } return "" } type HistoryOrderDB struct { HistoryOrder } type OrderSearch struct { PartnerID *int64 SiteID *int64 IsAdmin bool CreatedBy int64 PaymentType string Status string Limit int Offset int StartDate string EndDate string Period string IsCustomer bool Source string } type HistoryOrderList []*HistoryOrderDB func (b *HistoryOrder) ToHistoryOrderDB() *HistoryOrderDB { return &HistoryOrderDB{ HistoryOrder: *b, } } func (e *HistoryOrderDB) ToHistoryOrder() *HistoryOrder { return &HistoryOrder{ ID: e.ID, Employee: e.Employee, Site: e.Site, Timestamp: e.Timestamp, BookingTime: e.BookingTime, Tickets: e.Tickets, RawTickets: e.RawTickets, PaymentType: e.PaymentType, Status: e.Status, Amount: e.Amount, VisitDate: e.VisitDate, TicketStatus: e.TicketStatus, Source: e.Source, } } func (b *HistoryOrderList) ToHistoryOrderList() []*HistoryOrder { var HistoryOrders []*HistoryOrder for _, historyOrder := range *b { if historyOrder.Status != "NEW" && historyOrder.Tickets != nil { HistoryOrders = append(HistoryOrders, historyOrder.ToHistoryOrder()) } } return HistoryOrders } type TicketSold struct { Count int64 `gorm:"type:int;column:count"` } type TicketSoldDB struct { TicketSold } func (b *TicketSold) ToTicketSoldDB() *TicketSoldDB { return &TicketSoldDB{ TicketSold: *b, } } func (e *TicketSoldDB) ToTicketSold() *TicketSold { return &TicketSold{ Count: e.Count, } } type ProductDailySales struct { Day time.Time SiteID int64 SiteName string PaymentType string Total float64 } type PaymentTypeDistribution struct { PaymentType string Count int } type OrderPrintDetail struct { ID int64 `gorm:"column:id"` Logo string `gorm:"logo"` PartnerName string `gorm:"column:partner_name"` SiteName string `gorm:"column:site_name"` OrderID string `gorm:"column:order_id"` VisitDate time.Time `gorm:"column:visit_date"` PaymentType string `gorm:"column:payment_type"` OrderItems []OrderItem `gorm:"foreignKey:OrderID;constraint:OnDelete:CASCADE;"` Source string `gorm:"column:source"` TicketStatus string `gorm:"column:ticket_status"` Total float64 `gorm:"column:total"` Fee float64 `gorm:"column:fee"` } func (o *OrderPrintDetail) GetPaymanetType() string { if o.PaymentType == "CASH" { return "TUNAI" } return o.PaymentType }