aditya.siregar 93ddfdaecc update order
2025-05-06 00:40:43 +07:00

281 lines
7.5 KiB
Go

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"`
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"`
}
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
}
type OrderItemRequest struct {
ProductID int64 `json:"product_id" validate:"required"`
Quantity int `json:"quantity" validate:"required"`
Description string `json:"description"`
}
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
}