Fix Split Bill

This commit is contained in:
Aditya Siregar
2025-08-07 22:45:02 +07:00
parent 3696451dc6
commit 93a3b29ae9
24 changed files with 894 additions and 197 deletions
+65 -28
View File
@@ -8,42 +8,65 @@ import (
"github.com/google/uuid"
)
// Entity to Response mappers
func OrderEntityToResponse(order *entities.Order) *models.OrderResponse {
if order == nil {
return nil
}
response := &models.OrderResponse{
ID: order.ID,
OrganizationID: order.OrganizationID,
OutletID: order.OutletID,
UserID: order.UserID,
CustomerID: order.CustomerID,
OrderNumber: order.OrderNumber,
TableNumber: order.TableNumber,
OrderType: constants.OrderType(order.OrderType),
Status: constants.OrderStatus(order.Status),
Subtotal: order.Subtotal,
TaxAmount: order.TaxAmount,
DiscountAmount: order.DiscountAmount,
TotalAmount: order.TotalAmount,
TotalCost: order.TotalCost,
PaymentStatus: constants.PaymentStatus(order.PaymentStatus),
RefundAmount: order.RefundAmount,
IsVoid: order.IsVoid,
IsRefund: order.IsRefund,
VoidReason: order.VoidReason,
VoidedAt: order.VoidedAt,
VoidedBy: order.VoidedBy,
RefundReason: order.RefundReason,
RefundedAt: order.RefundedAt,
RefundedBy: order.RefundedBy,
Metadata: map[string]interface{}(order.Metadata),
CreatedAt: order.CreatedAt,
UpdatedAt: order.UpdatedAt,
ID: order.ID,
OrganizationID: order.OrganizationID,
OutletID: order.OutletID,
UserID: order.UserID,
CustomerID: order.CustomerID,
OrderNumber: order.OrderNumber,
TableNumber: order.TableNumber,
OrderType: constants.OrderType(order.OrderType),
Status: constants.OrderStatus(order.Status),
Subtotal: order.Subtotal,
TaxAmount: order.TaxAmount,
DiscountAmount: order.DiscountAmount,
TotalAmount: order.TotalAmount,
TotalCost: order.TotalCost,
RemainingAmount: order.RemainingAmount,
PaymentStatus: constants.PaymentStatus(order.PaymentStatus),
RefundAmount: order.RefundAmount,
IsVoid: order.IsVoid,
IsRefund: order.IsRefund,
VoidReason: order.VoidReason,
VoidedAt: order.VoidedAt,
VoidedBy: order.VoidedBy,
RefundReason: order.RefundReason,
RefundedAt: order.RefundedAt,
RefundedBy: order.RefundedBy,
Metadata: map[string]interface{}(order.Metadata),
CreatedAt: order.CreatedAt,
UpdatedAt: order.UpdatedAt,
}
// Calculate payment summary and determine split type
var totalPaid float64
var paymentCount int
var splitType *string
if order.Payments != nil {
paymentCount = len(order.Payments)
for _, payment := range order.Payments {
if payment.Status == entities.PaymentTransactionStatusCompleted {
totalPaid += payment.Amount
}
// Determine split type from the first split payment
if splitType == nil && payment.SplitType != nil && payment.SplitTotal > 1 {
st := string(*payment.SplitType)
splitType = &st
}
}
}
response.TotalPaid = totalPaid
response.PaymentCount = paymentCount
response.SplitType = splitType
// Map order items
if order.OrderItems != nil {
response.OrderItems = make([]models.OrderItemResponse, len(order.OrderItems))
@@ -119,6 +142,7 @@ func PaymentEntityToResponse(payment *entities.Payment) *models.PaymentResponse
TransactionID: payment.TransactionID,
SplitNumber: payment.SplitNumber,
SplitTotal: payment.SplitTotal,
SplitType: (*string)(payment.SplitType),
SplitDescription: payment.SplitDescription,
RefundAmount: payment.RefundAmount,
RefundReason: payment.RefundReason,
@@ -129,6 +153,12 @@ func PaymentEntityToResponse(payment *entities.Payment) *models.PaymentResponse
UpdatedAt: payment.UpdatedAt,
}
// Add payment method information if available
if payment.PaymentMethod.ID != uuid.Nil {
response.PaymentMethodName = payment.PaymentMethod.Name
response.PaymentMethodType = constants.PaymentMethodType(payment.PaymentMethod.Type)
}
// Map payment order items
if payment.PaymentOrderItems != nil {
response.PaymentOrderItems = make([]models.PaymentOrderItemResponse, len(payment.PaymentOrderItems))
@@ -201,6 +231,12 @@ func CreatePaymentRequestToEntity(req *models.CreatePaymentRequest) *entities.Pa
return nil
}
var splitType *entities.SplitType
if req.SplitType != nil {
st := entities.SplitType(*req.SplitType)
splitType = &st
}
payment := &entities.Payment{
OrderID: req.OrderID,
PaymentMethodID: req.PaymentMethodID,
@@ -209,6 +245,7 @@ func CreatePaymentRequestToEntity(req *models.CreatePaymentRequest) *entities.Pa
TransactionID: req.TransactionID,
SplitNumber: req.SplitNumber,
SplitTotal: req.SplitTotal,
SplitType: splitType,
SplitDescription: req.SplitDescription,
Metadata: entities.Metadata(req.Metadata),
}