update
This commit is contained in:
parent
46b30277ef
commit
1bceae010b
@ -68,7 +68,7 @@ func (o *InquiryRequest) GetPaymentProvider() string {
|
|||||||
|
|
||||||
type OrderItemRequest struct {
|
type OrderItemRequest struct {
|
||||||
ProductID int64 `json:"product_id" validate:"required"`
|
ProductID int64 `json:"product_id" validate:"required"`
|
||||||
Quantity int `json:"quantity" validate:"required,min=1"`
|
Quantity int `json:"quantity"`
|
||||||
Notes string `json:"notes"`
|
Notes string `json:"notes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,6 +22,7 @@ type OrderRepository interface {
|
|||||||
CreateOrder(ctx mycontext.Context, order *entity.Order, tx *gorm.DB) (*entity.Order, error)
|
CreateOrder(ctx mycontext.Context, order *entity.Order, tx *gorm.DB) (*entity.Order, error)
|
||||||
CreateOrderItems(ctx mycontext.Context, orderID int64, items []entity.OrderItem, tx *gorm.DB) error
|
CreateOrderItems(ctx mycontext.Context, orderID int64, items []entity.OrderItem, tx *gorm.DB) error
|
||||||
CreateOrderItem(ctx mycontext.Context, orderID int64, item *entity.OrderItem) error
|
CreateOrderItem(ctx mycontext.Context, orderID int64, item *entity.OrderItem) error
|
||||||
|
DeleteOrderItem(ctx mycontext.Context, orderItemID int64) error
|
||||||
GetListByPartnerID(ctx mycontext.Context, partnerID int64, limit, offset int, status string) ([]*entity.Order, error)
|
GetListByPartnerID(ctx mycontext.Context, partnerID int64, limit, offset int, status string) ([]*entity.Order, error)
|
||||||
GetOrderPaymentMethodBreakdown(ctx mycontext.Context, partnerID int64, req entity.SearchRequest) ([]entity.PaymentMethodBreakdown, error)
|
GetOrderPaymentMethodBreakdown(ctx mycontext.Context, partnerID int64, req entity.SearchRequest) ([]entity.PaymentMethodBreakdown, error)
|
||||||
GetRevenueOverview(ctx mycontext.Context, req entity.RevenueOverviewRequest) ([]entity.RevenueOverviewItem, error)
|
GetRevenueOverview(ctx mycontext.Context, req entity.RevenueOverviewRequest) ([]entity.RevenueOverviewItem, error)
|
||||||
@ -994,6 +995,20 @@ func (r *orderRepository) UpdateOrderItem(ctx mycontext.Context, orderItemID int
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *orderRepository) DeleteOrderItem(ctx mycontext.Context, orderItemID int64) error {
|
||||||
|
result := r.db.Where("order_item_id = ?", orderItemID).Delete(&models.OrderItemDB{})
|
||||||
|
|
||||||
|
if result.Error != nil {
|
||||||
|
return errors.Wrap(result.Error, "failed to delete order item")
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.RowsAffected == 0 {
|
||||||
|
logger.ContextLogger(ctx).Warn("no order item deleted")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *orderRepository) UpdateOrderTotals(ctx mycontext.Context, orderID int64, amount, tax, total float64) error {
|
func (r *orderRepository) UpdateOrderTotals(ctx mycontext.Context, orderID int64, amount, tax, total float64) error {
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
|
|
||||||
|
|||||||
@ -114,20 +114,18 @@ func (s *orderSvc) VoidOrderRequest(ctx mycontext.Context, partnerID, orderID in
|
|||||||
}
|
}
|
||||||
|
|
||||||
if voidType == "ALL" {
|
if voidType == "ALL" {
|
||||||
// Void all items - create new VOIDED items for all existing items
|
|
||||||
for _, orderItem := range order.OrderItems {
|
for _, orderItem := range order.OrderItems {
|
||||||
if orderItem.Status == "ACTIVE" && orderItem.Quantity > 0 {
|
if orderItem.Status == "ACTIVE" && orderItem.Quantity > 0 {
|
||||||
// Create new VOIDED order item with the voided quantity
|
|
||||||
voidedItem := &entity.OrderItem{
|
voidedItem := &entity.OrderItem{
|
||||||
OrderID: orderID,
|
OrderID: orderID,
|
||||||
ItemID: orderItem.ItemID,
|
ItemID: orderItem.ItemID,
|
||||||
ItemType: orderItem.ItemType,
|
ItemType: orderItem.ItemType,
|
||||||
Price: orderItem.Price,
|
Price: orderItem.Price,
|
||||||
Quantity: orderItem.Quantity, // Void the full quantity
|
Quantity: orderItem.Quantity,
|
||||||
Status: "VOIDED",
|
Status: "VOIDED",
|
||||||
CreatedBy: orderItem.CreatedBy,
|
CreatedBy: orderItem.CreatedBy,
|
||||||
ItemName: orderItem.ItemName,
|
ItemName: orderItem.ItemName,
|
||||||
Notes: reason, // Use the reason as notes for tracking
|
Notes: reason,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.repo.CreateOrderItem(ctx, orderID, voidedItem)
|
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))
|
logger.ContextLogger(ctx).Error("failed to create voided order item", zap.Error(err))
|
||||||
return 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)
|
err = s.repo.UpdateOrder(ctx, orderID, "VOIDED", reason)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.ContextLogger(ctx).Error("failed to void order", zap.Error(err))
|
logger.ContextLogger(ctx).Error("failed to void order", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recalculate order totals (should be 0 for voided order)
|
|
||||||
err = s.repo.UpdateOrderTotals(ctx, orderID, 0, 0, 0)
|
err = s.repo.UpdateOrderTotals(ctx, orderID, 0, 0, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.ContextLogger(ctx).Error("failed to update order totals", zap.Error(err))
|
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" {
|
} else if voidType == "ITEM" {
|
||||||
// Void specific items
|
|
||||||
orderItemMap := make(map[int64]*entity.OrderItem)
|
orderItemMap := make(map[int64]*entity.OrderItem)
|
||||||
for i := range order.OrderItems {
|
for i := range order.OrderItems {
|
||||||
orderItemMap[order.OrderItems[i].ID] = &order.OrderItems[i]
|
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 {
|
for _, voidItem := range items {
|
||||||
orderItem := orderItemMap[voidItem.OrderItemID]
|
orderItem := orderItemMap[voidItem.OrderItemID]
|
||||||
|
|
||||||
// Create new VOIDED order item with the voided quantity
|
|
||||||
voidedItem := &entity.OrderItem{
|
voidedItem := &entity.OrderItem{
|
||||||
OrderID: orderID,
|
OrderID: orderID,
|
||||||
ItemID: orderItem.ItemID,
|
ItemID: orderItem.ItemID,
|
||||||
ItemType: orderItem.ItemType,
|
ItemType: orderItem.ItemType,
|
||||||
Price: orderItem.Price,
|
Price: orderItem.Price,
|
||||||
Quantity: voidItem.Quantity, // Void the requested quantity
|
Quantity: voidItem.Quantity,
|
||||||
Status: "VOIDED",
|
Status: "VOIDED",
|
||||||
CreatedBy: orderItem.CreatedBy,
|
CreatedBy: orderItem.CreatedBy,
|
||||||
ItemName: orderItem.ItemName,
|
ItemName: orderItem.ItemName,
|
||||||
Notes: reason, // Use the reason as notes for tracking
|
Notes: reason,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.repo.CreateOrderItem(ctx, orderID, voidedItem)
|
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))
|
logger.ContextLogger(ctx).Error("failed to create voided order item", zap.Error(err))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update original item quantity
|
|
||||||
newQuantity := orderItem.Quantity - voidItem.Quantity
|
newQuantity := orderItem.Quantity - voidItem.Quantity
|
||||||
err = s.repo.UpdateOrderItem(ctx, voidItem.OrderItemID, newQuantity)
|
|
||||||
if err != nil {
|
if newQuantity > 0 {
|
||||||
logger.ContextLogger(ctx).Error("failed to update order item", zap.Error(err))
|
err = s.repo.UpdateOrderItem(ctx, voidItem.OrderItemID, newQuantity)
|
||||||
return err
|
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)
|
GetOrderHistoryByUserID(ctx mycontext.Context, userID int64, req entity.SearchRequest) ([]*entity.Order, int64, error)
|
||||||
FindByIDAndPartnerID(ctx mycontext.Context, id int64, partnerID int64) (*entity.Order, error)
|
FindByIDAndPartnerID(ctx mycontext.Context, id int64, partnerID int64) (*entity.Order, error)
|
||||||
FindByIDAndCustomerID(ctx mycontext.Context, id int64, customerID 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 {
|
type ProductService interface {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user