Fix Split Bill
This commit is contained in:
@@ -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),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user