add notes description
This commit is contained in:
parent
ebb33186b8
commit
53014d90ab
@ -50,6 +50,7 @@ type AddItemOrderRequest struct {
|
|||||||
type InProgressOrderItemRequest struct {
|
type InProgressOrderItemRequest 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" validate:"required,min=1"`
|
||||||
|
Notes string `json:"notes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateInProgressOrderRequest struct {
|
type UpdateInProgressOrderRequest struct {
|
||||||
@ -83,6 +84,7 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) {
|
|||||||
orderItems[i] = entity.OrderItemRequest{
|
orderItems[i] = entity.OrderItemRequest{
|
||||||
ProductID: item.ProductID,
|
ProductID: item.ProductID,
|
||||||
Quantity: item.Quantity,
|
Quantity: item.Quantity,
|
||||||
|
Notes: item.Notes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +100,7 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) {
|
|||||||
Source: "POS",
|
Source: "POS",
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := h.service.Save(ctx, order)
|
resp, err := h.service.Save(ctx, order)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
response.ErrorWrapper(c, err)
|
response.ErrorWrapper(c, err)
|
||||||
return
|
return
|
||||||
@ -107,6 +109,9 @@ func (h *InProgressOrderHandler) Save(c *gin.Context) {
|
|||||||
c.JSON(http.StatusCreated, response.BaseResponse{
|
c.JSON(http.StatusCreated, response.BaseResponse{
|
||||||
Success: true,
|
Success: true,
|
||||||
Status: http.StatusCreated,
|
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{
|
orderItems[i] = entity.OrderItemRequest{
|
||||||
ProductID: item.ProductID,
|
ProductID: item.ProductID,
|
||||||
Quantity: item.Quantity,
|
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 {
|
if err != nil {
|
||||||
response.ErrorWrapper(c, err)
|
response.ErrorWrapper(c, err)
|
||||||
return
|
return
|
||||||
@ -142,6 +148,9 @@ func (h *InProgressOrderHandler) Add(c *gin.Context) {
|
|||||||
c.JSON(http.StatusCreated, response.BaseResponse{
|
c.JSON(http.StatusCreated, response.BaseResponse{
|
||||||
Success: true,
|
Success: true,
|
||||||
Status: http.StatusCreated,
|
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,
|
Price: product.Price,
|
||||||
ItemType: product.Type,
|
ItemType: product.Type,
|
||||||
Description: product.Description,
|
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)
|
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 {
|
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,
|
ProductID: oi.ItemID,
|
||||||
Quantity: oi.Quantity,
|
Quantity: oi.Quantity,
|
||||||
|
Notes: oi.Notes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Merge new items into map
|
||||||
for _, ni := range newItems {
|
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
|
existing.Quantity += ni.Quantity
|
||||||
itemMap[ni.ProductID] = existing
|
itemMap[key] = existing
|
||||||
} else {
|
} else {
|
||||||
itemMap[ni.ProductID] = ni
|
itemMap[key] = ni
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prepare merged items
|
||||||
mergedItems := make([]entity.OrderItemRequest, 0, len(itemMap))
|
mergedItems := make([]entity.OrderItemRequest, 0, len(itemMap))
|
||||||
for _, item := range itemMap {
|
for _, item := range itemMap {
|
||||||
mergedItems = append(mergedItems, item)
|
mergedItems = append(mergedItems, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save updated order
|
||||||
req := &entity.OrderRequest{
|
req := &entity.OrderRequest{
|
||||||
ID: existingOrder.ID,
|
ID: existingOrder.ID,
|
||||||
PartnerID: existingOrder.PartnerID,
|
PartnerID: existingOrder.PartnerID,
|
||||||
@ -167,7 +182,22 @@ func (s *inProgressOrderSvc) AddItems(ctx mycontext.Context, orderID int64, newI
|
|||||||
OrderItems: mergedItems,
|
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) {
|
func (s *inProgressOrderSvc) GetOrderByOrderAndPartnerID(ctx mycontext.Context, partnerID int64, orderID int64) (*entity.Order, error) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user