package entity import ( "gorm.io/datatypes" "time" ) type Order struct { ID int64 `gorm:"primaryKey;autoIncrement;column:id"` RefID string `gorm:"type:varchar;column:ref_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"` Fee float64 `gorm:"type:numeric;not null;column:fee"` SiteID *int64 `gorm:"type:numeric;not null;column:site_id"` 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"` 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"` TicketStatus string `gorm:"type:varchar;column:ticket_status"` VisitDate time.Time `gorm:"type:date;column:visit_date"` Metadata datatypes.JSON `gorm:"type:json;not null;column:metadata"` } 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 Token string } 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 int64 `gorm:"type:int;column:qty"` 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"` } func (OrderItem) TableName() string { return "order_items" } type OrderRequest struct { Source string CreatedBy int64 PartnerID int64 `json:"partner_id" validate:"required"` PaymentMethod string `json:"payment_method" validate:"required"` OrderItems []OrderItemRequest `json:"order_items" validate:"required,dive"` VisitDate string `json:"visit_date"` BankCode string `json:"bank_code"` BankName string `json:"bank_name"` } type OrderItemRequest struct { ProductID int64 `json:"product_id" validate:"required"` Quantity int64 `json:"quantity" validate:"required"` } type OrderExecuteRequest struct { CreatedBy int64 PartnerID int64 Token string } func (o *Order) SetExecutePaymentStatus() { if o.PaymentType == "CASH" { o.Status = "PAID" o.TicketStatus = "USED" return } o.Status = "PENDING" } 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 }