update
This commit is contained in:
@@ -114,20 +114,18 @@ func (s *orderSvc) VoidOrderRequest(ctx mycontext.Context, partnerID, orderID in
|
||||
}
|
||||
|
||||
if voidType == "ALL" {
|
||||
// Void all items - create new VOIDED items for all existing items
|
||||
for _, orderItem := range order.OrderItems {
|
||||
if orderItem.Status == "ACTIVE" && orderItem.Quantity > 0 {
|
||||
// Create new VOIDED order item with the voided quantity
|
||||
voidedItem := &entity.OrderItem{
|
||||
OrderID: orderID,
|
||||
ItemID: orderItem.ItemID,
|
||||
ItemType: orderItem.ItemType,
|
||||
Price: orderItem.Price,
|
||||
Quantity: orderItem.Quantity, // Void the full quantity
|
||||
Quantity: orderItem.Quantity,
|
||||
Status: "VOIDED",
|
||||
CreatedBy: orderItem.CreatedBy,
|
||||
ItemName: orderItem.ItemName,
|
||||
Notes: reason, // Use the reason as notes for tracking
|
||||
Notes: reason,
|
||||
}
|
||||
|
||||
err = s.repo.CreateOrderItem(ctx, orderID, voidedItem)
|
||||
@@ -135,24 +133,15 @@ func (s *orderSvc) VoidOrderRequest(ctx mycontext.Context, partnerID, orderID in
|
||||
logger.ContextLogger(ctx).Error("failed to create voided order item", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
// Update original item quantity to 0
|
||||
err = s.repo.UpdateOrderItem(ctx, orderItem.ID, 0)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to update original order item", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update order status to VOIDED
|
||||
err = s.repo.UpdateOrder(ctx, orderID, "VOIDED", reason)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to void order", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
// Recalculate order totals (should be 0 for voided order)
|
||||
err = s.repo.UpdateOrderTotals(ctx, orderID, 0, 0, 0)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to update order totals", zap.Error(err))
|
||||
@@ -160,7 +149,6 @@ func (s *orderSvc) VoidOrderRequest(ctx mycontext.Context, partnerID, orderID in
|
||||
}
|
||||
|
||||
} else if voidType == "ITEM" {
|
||||
// Void specific items
|
||||
orderItemMap := make(map[int64]*entity.OrderItem)
|
||||
for i := range order.OrderItems {
|
||||
orderItemMap[order.OrderItems[i].ID] = &order.OrderItems[i]
|
||||
@@ -185,17 +173,16 @@ func (s *orderSvc) VoidOrderRequest(ctx mycontext.Context, partnerID, orderID in
|
||||
for _, voidItem := range items {
|
||||
orderItem := orderItemMap[voidItem.OrderItemID]
|
||||
|
||||
// Create new VOIDED order item with the voided quantity
|
||||
voidedItem := &entity.OrderItem{
|
||||
OrderID: orderID,
|
||||
ItemID: orderItem.ItemID,
|
||||
ItemType: orderItem.ItemType,
|
||||
Price: orderItem.Price,
|
||||
Quantity: voidItem.Quantity, // Void the requested quantity
|
||||
Quantity: voidItem.Quantity,
|
||||
Status: "VOIDED",
|
||||
CreatedBy: orderItem.CreatedBy,
|
||||
ItemName: orderItem.ItemName,
|
||||
Notes: reason, // Use the reason as notes for tracking
|
||||
Notes: reason,
|
||||
}
|
||||
|
||||
err = s.repo.CreateOrderItem(ctx, orderID, voidedItem)
|
||||
@@ -203,13 +190,20 @@ func (s *orderSvc) VoidOrderRequest(ctx mycontext.Context, partnerID, orderID in
|
||||
logger.ContextLogger(ctx).Error("failed to create voided order item", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
// Update original item quantity
|
||||
newQuantity := orderItem.Quantity - voidItem.Quantity
|
||||
err = s.repo.UpdateOrderItem(ctx, voidItem.OrderItemID, newQuantity)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to update order item", zap.Error(err))
|
||||
return err
|
||||
|
||||
if newQuantity > 0 {
|
||||
err = s.repo.UpdateOrderItem(ctx, voidItem.OrderItemID, newQuantity)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to update order item", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
err = s.repo.DeleteOrderItem(ctx, voidItem.OrderItemID)
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("failed to delete order item", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ type Repository interface {
|
||||
GetOrderHistoryByUserID(ctx mycontext.Context, userID int64, req entity.SearchRequest) ([]*entity.Order, int64, error)
|
||||
FindByIDAndPartnerID(ctx mycontext.Context, id int64, partnerID int64) (*entity.Order, error)
|
||||
FindByIDAndCustomerID(ctx mycontext.Context, id int64, customerID int64) (*entity.Order, error)
|
||||
DeleteOrderItem(ctx mycontext.Context, orderItemID int64) error
|
||||
}
|
||||
|
||||
type ProductService interface {
|
||||
|
||||
Reference in New Issue
Block a user