add notes description
This commit is contained in:
parent
ebb33186b8
commit
53014d90ab
@ -50,6 +50,7 @@ type AddItemOrderRequest struct {
|
||||
type InProgressOrderItemRequest struct {
|
||||
ProductID int64 `json:"product_id" validate:"required"`
|
||||
Quantity int `json:"quantity" validate:"required,min=1"`
|
||||
Notes string `json:"notes"`
|
||||
}
|
||||
|
||||
type UpdateInProgressOrderRequest struct {
|
||||
@ -83,6 +84,7 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) {
|
||||
orderItems[i] = entity.OrderItemRequest{
|
||||
ProductID: item.ProductID,
|
||||
Quantity: item.Quantity,
|
||||
Notes: item.Notes,
|
||||
}
|
||||
}
|
||||
|
||||
@ -98,7 +100,7 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) {
|
||||
Source: "POS",
|
||||
}
|
||||
|
||||
_, err := h.service.Save(ctx, order)
|
||||
resp, err := h.service.Save(ctx, order)
|
||||
if err != nil {
|
||||
response.ErrorWrapper(c, err)
|
||||
return
|
||||
@ -107,6 +109,9 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) {
|
||||
c.JSON(http.StatusCreated, response.BaseResponse{
|
||||
Success: true,
|
||||
Status: http.StatusCreated,
|
||||
Data: response.MapToOrderResponse(&entity.OrderResponse{
|
||||
Order: resp,
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
@ -130,10 +135,11 @@ func (h *InProgressOrderHandler) Add(c *gin.Context) {
|
||||
orderItems[i] = entity.OrderItemRequest{
|
||||
ProductID: item.ProductID,
|
||||
Quantity: item.Quantity,
|
||||
Notes: item.Notes,
|
||||
}
|
||||
}
|
||||
|
||||
_, err := h.service.AddItems(ctx, req.InProgressOrderID, orderItems)
|
||||
order, err := h.service.AddItems(ctx, req.InProgressOrderID, orderItems)
|
||||
if err != nil {
|
||||
response.ErrorWrapper(c, err)
|
||||
return
|
||||
@ -142,6 +148,9 @@ func (h *InProgressOrderHandler) Add(c *gin.Context) {
|
||||
c.JSON(http.StatusCreated, response.BaseResponse{
|
||||
Success: true,
|
||||
Status: http.StatusCreated,
|
||||
Data: response.MapToOrderResponse(&entity.OrderResponse{
|
||||
Order: order,
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -82,6 +82,7 @@ func (s *inProgressOrderSvc) Save(ctx mycontext.Context, req *entity.OrderReques
|
||||
Price: product.Price,
|
||||
ItemType: product.Type,
|
||||
Description: product.Description,
|
||||
Notes: item.Notes,
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,29 +133,43 @@ func (s *inProgressOrderSvc) AddItems(ctx mycontext.Context, orderID int64, newI
|
||||
return nil, errors.Wrapf(err, "failed to fetch order %d", orderID)
|
||||
}
|
||||
|
||||
itemMap := make(map[int64]entity.OrderItemRequest, len(existingOrder.OrderItems)+len(newItems))
|
||||
type itemKey struct {
|
||||
ProductID int64
|
||||
Notes string
|
||||
}
|
||||
|
||||
itemMap := make(map[itemKey]entity.OrderItemRequest)
|
||||
existingKeys := make(map[itemKey]struct{})
|
||||
|
||||
// Collect existing items
|
||||
for _, oi := range existingOrder.OrderItems {
|
||||
itemMap[oi.ItemID] = entity.OrderItemRequest{
|
||||
key := itemKey{ProductID: oi.ItemID, Notes: oi.Notes}
|
||||
existingKeys[key] = struct{}{}
|
||||
itemMap[key] = entity.OrderItemRequest{
|
||||
ProductID: oi.ItemID,
|
||||
Quantity: oi.Quantity,
|
||||
Notes: oi.Notes,
|
||||
}
|
||||
}
|
||||
|
||||
// Merge new items into map
|
||||
for _, ni := range newItems {
|
||||
if existing, found := itemMap[ni.ProductID]; found {
|
||||
key := itemKey{ProductID: ni.ProductID, Notes: ni.Notes}
|
||||
if existing, found := itemMap[key]; found {
|
||||
existing.Quantity += ni.Quantity
|
||||
itemMap[ni.ProductID] = existing
|
||||
itemMap[key] = existing
|
||||
} else {
|
||||
itemMap[ni.ProductID] = ni
|
||||
itemMap[key] = ni
|
||||
}
|
||||
}
|
||||
|
||||
// Prepare merged items
|
||||
mergedItems := make([]entity.OrderItemRequest, 0, len(itemMap))
|
||||
for _, item := range itemMap {
|
||||
mergedItems = append(mergedItems, item)
|
||||
}
|
||||
|
||||
// Save updated order
|
||||
req := &entity.OrderRequest{
|
||||
ID: existingOrder.ID,
|
||||
PartnerID: existingOrder.PartnerID,
|
||||
@ -167,7 +182,22 @@ func (s *inProgressOrderSvc) AddItems(ctx mycontext.Context, orderID int64, newI
|
||||
OrderItems: mergedItems,
|
||||
}
|
||||
|
||||
return s.Save(ctx, req)
|
||||
savedOrder, err := s.Save(ctx, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
newlyAdded := make([]entity.OrderItem, 0)
|
||||
for _, item := range savedOrder.OrderItems {
|
||||
key := itemKey{ProductID: item.ItemID, Notes: item.Notes}
|
||||
if _, exists := existingKeys[key]; !exists {
|
||||
newlyAdded = append(newlyAdded, item)
|
||||
}
|
||||
}
|
||||
|
||||
savedOrder.OrderItems = newlyAdded
|
||||
|
||||
return savedOrder, nil
|
||||
}
|
||||
|
||||
func (s *inProgressOrderSvc) GetOrderByOrderAndPartnerID(ctx mycontext.Context, partnerID int64, orderID int64) (*entity.Order, error) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user