From 74ec25db5b38714a6adf6fb7507992ecb30f67d3 Mon Sep 17 00:00:00 2001 From: aguhh18 Date: Thu, 13 Nov 2025 09:50:34 +0700 Subject: [PATCH] Feat[BE-222.223.224]: creating create one delivery order and getone delivery order[Unfinished] --- internal/entities/marketing_product.go | 6 +- .../marketing-delivery-products.repository.go | 11 ++ .../marketing/delivery-orderss/module.go | 4 +- .../services/delivery-orders.service.go | 152 +++++++++--------- .../controllers/sales-orders.controller.go | 2 +- .../sales-orders/dto/sales-orders.dto.go | 8 + .../marketing-products.repository.go | 5 + .../services/sales-orders.service.go | 10 +- 8 files changed, 119 insertions(+), 79 deletions(-) diff --git a/internal/entities/marketing_product.go b/internal/entities/marketing_product.go index f0fe7f38..66524bc6 100644 --- a/internal/entities/marketing_product.go +++ b/internal/entities/marketing_product.go @@ -19,7 +19,7 @@ type MarketingProduct struct { UpdatedAt time.Time `gorm:"autoUpdateTime"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` - Marketing Marketing `gorm:"foreignKey:MarketingId;references:Id"` - ProductWarehouse ProductWarehouse `gorm:"foreignKey:ProductWarehouseId;references:Id"` - DeliveryProducts []MarketingDeliveryProduct `gorm:"foreignKey:MarketingProductId;references:Id"` + Marketing Marketing `gorm:"foreignKey:MarketingId;references:Id"` + ProductWarehouse ProductWarehouse `gorm:"foreignKey:ProductWarehouseId;references:Id"` + DeliveryProduct *MarketingDeliveryProduct `gorm:"foreignKey:MarketingProductId;references:Id"` } diff --git a/internal/modules/inventory/marketing-delivery-products/repositories/marketing-delivery-products.repository.go b/internal/modules/inventory/marketing-delivery-products/repositories/marketing-delivery-products.repository.go index 95e9b3bb..ce94a1eb 100644 --- a/internal/modules/inventory/marketing-delivery-products/repositories/marketing-delivery-products.repository.go +++ b/internal/modules/inventory/marketing-delivery-products/repositories/marketing-delivery-products.repository.go @@ -1,6 +1,8 @@ package repository import ( + "context" + "gitlab.com/mbugroup/lti-api.git/internal/common/repository" entity "gitlab.com/mbugroup/lti-api.git/internal/entities" "gorm.io/gorm" @@ -8,6 +10,7 @@ import ( type MarketingDeliveryProductRepository interface { repository.BaseRepository[entity.MarketingDeliveryProduct] + GetByMarketingProductID(ctx context.Context, marketingProductID uint) (*entity.MarketingDeliveryProduct, error) } type MarketingDeliveryProductRepositoryImpl struct { @@ -19,3 +22,11 @@ func NewMarketingDeliveryProductRepository(db *gorm.DB) MarketingDeliveryProduct BaseRepositoryImpl: repository.NewBaseRepository[entity.MarketingDeliveryProduct](db), } } + +func (r *MarketingDeliveryProductRepositoryImpl) GetByMarketingProductID(ctx context.Context, marketingProductID uint) (*entity.MarketingDeliveryProduct, error) { + var deliveryProduct entity.MarketingDeliveryProduct + if err := r.DB().WithContext(ctx).Where("marketing_product_id = ?", marketingProductID).First(&deliveryProduct).Error; err != nil { + return nil, err + } + return &deliveryProduct, nil +} diff --git a/internal/modules/marketing/delivery-orderss/module.go b/internal/modules/marketing/delivery-orderss/module.go index c6932c51..7fcc8ccc 100644 --- a/internal/modules/marketing/delivery-orderss/module.go +++ b/internal/modules/marketing/delivery-orderss/module.go @@ -11,6 +11,7 @@ import ( rDeliveryOrders "gitlab.com/mbugroup/lti-api.git/internal/modules/marketing/delivery-orderss/repositories" sDeliveryOrders "gitlab.com/mbugroup/lti-api.git/internal/modules/marketing/delivery-orderss/services" rMarketing "gitlab.com/mbugroup/lti-api.git/internal/modules/marketing/sales-orders/repositories" + rMarketingProduct "gitlab.com/mbugroup/lti-api.git/internal/modules/marketing/sales-orders/repositories" rUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/repositories" sUser "gitlab.com/mbugroup/lti-api.git/internal/modules/users/services" ) @@ -20,12 +21,13 @@ type DeliveryOrdersModule struct{} func (DeliveryOrdersModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate *validator.Validate) { deliveryOrdersRepo := rDeliveryOrders.NewDeliveryOrdersRepository(db) marketingRepo := rMarketing.NewMarketingRepository(db) + marketingProductRepo := rMarketingProduct.NewMarketingProductRepository(db) marketingDeliveryProductRepo := rMarketingDeliveryProduct.NewMarketingDeliveryProductRepository(db) userRepo := rUser.NewUserRepository(db) approvalRepo := commonRepo.NewApprovalRepository(db) approvalSvc := commonSvc.NewApprovalService(approvalRepo) - deliveryOrdersService := sDeliveryOrders.NewDeliveryOrdersService(deliveryOrdersRepo, marketingRepo, marketingDeliveryProductRepo, approvalSvc, validate) + deliveryOrdersService := sDeliveryOrders.NewDeliveryOrdersService(deliveryOrdersRepo, marketingRepo, marketingProductRepo, marketingDeliveryProductRepo, approvalSvc, validate) userService := sUser.NewUserService(userRepo, validate) DeliveryOrdersRoutes(router, userService, deliveryOrdersService) diff --git a/internal/modules/marketing/delivery-orderss/services/delivery-orders.service.go b/internal/modules/marketing/delivery-orderss/services/delivery-orders.service.go index db238d0f..7a2efa3f 100644 --- a/internal/modules/marketing/delivery-orderss/services/delivery-orders.service.go +++ b/internal/modules/marketing/delivery-orderss/services/delivery-orders.service.go @@ -35,6 +35,7 @@ type deliveryOrdersService struct { Validate *validator.Validate Repository repository.DeliveryOrdersRepository MarketingRepo marketingRepo.MarketingRepository + MarketingProductRepo marketingRepo.MarketingProductRepository MarketingDeliveryProductRepo marketingDeliveryProductRepo.MarketingDeliveryProductRepository ApprovalSvc commonSvc.ApprovalService } @@ -42,6 +43,7 @@ type deliveryOrdersService struct { func NewDeliveryOrdersService( repo repository.DeliveryOrdersRepository, marketingRepo marketingRepo.MarketingRepository, + marketingProductRepo marketingRepo.MarketingProductRepository, marketingDeliveryProductRepo marketingDeliveryProductRepo.MarketingDeliveryProductRepository, approvalSvc commonSvc.ApprovalService, validate *validator.Validate, @@ -51,6 +53,7 @@ func NewDeliveryOrdersService( Validate: validate, Repository: repo, MarketingRepo: marketingRepo, + MarketingProductRepo: marketingProductRepo, MarketingDeliveryProductRepo: marketingDeliveryProductRepo, ApprovalSvc: approvalSvc, } @@ -89,7 +92,7 @@ func (s deliveryOrdersService) GetAll(c *fiber.Ctx, params *validation.Query) ([ result := make([]dto.DeliveryOrdersListDTO, len(marketings)) for i, marketing := range marketings { // Get marketing delivery products - var deliveryProducts []entity.MarketingDeliveryProduct + var allDeliveryProducts []entity.MarketingDeliveryProduct if err := s.Repository.DB().WithContext(c.Context()). Preload("MarketingProduct"). Where("marketing_product_id IN (?)", @@ -97,20 +100,20 @@ func (s deliveryOrdersService) GetAll(c *fiber.Ctx, params *validation.Query) ([ Model(&entity.MarketingProduct{}). Select("id"). Where("marketing_id = ?", marketing.Id)). - Find(&deliveryProducts).Error; err != nil { + Find(&allDeliveryProducts).Error; err != nil { s.Log.Errorf("Failed to load delivery products for marketing %d: %+v", marketing.Id, err) // Continue without products } - // Create dummy DeliveryOrders untuk dto mapping - dummyDO := &entity.DeliveryOrders{ + // Build response DTO + deliveryOrderResponse := &entity.DeliveryOrders{ MarketingId: marketing.Id, CreatedUser: &marketing.CreatedUser, Marketing: &marketing, - DeliveryProducts: deliveryProducts, + DeliveryProducts: allDeliveryProducts, } - result[i] = dto.ToDeliveryOrdersListDTOWithProducts(*dummyDO, deliveryProducts) + result[i] = dto.ToDeliveryOrdersListDTOWithProducts(*deliveryOrderResponse, allDeliveryProducts) } return result, total, nil @@ -133,7 +136,7 @@ func (s deliveryOrdersService) GetOne(c *fiber.Ctx, id uint) (*dto.DeliveryOrder } // Get marketing delivery products - var deliveryProducts []entity.MarketingDeliveryProduct + var allDeliveryProducts []entity.MarketingDeliveryProduct if err := s.Repository.DB().WithContext(c.Context()). Preload("MarketingProduct"). Where("marketing_product_id IN (?)", @@ -141,21 +144,21 @@ func (s deliveryOrdersService) GetOne(c *fiber.Ctx, id uint) (*dto.DeliveryOrder Model(&entity.MarketingProduct{}). Select("id"). Where("marketing_id = ?", marketing.Id)). - Find(&deliveryProducts).Error; err != nil { + Find(&allDeliveryProducts).Error; err != nil { s.Log.Errorf("Failed to load delivery products for marketing %d: %+v", marketing.Id, err) // Continue without products } - // Create dummy DeliveryOrders untuk dto mapping - dummyDO := &entity.DeliveryOrders{ + // Build response DTO + deliveryOrderResponse := &entity.DeliveryOrders{ MarketingId: marketing.Id, CreatedUser: &marketing.CreatedUser, Marketing: marketing, - DeliveryProducts: deliveryProducts, + DeliveryProducts: allDeliveryProducts, } - result := dto.ToDeliveryOrdersListDTOWithProducts(*dummyDO, deliveryProducts) - return &result, nil + responseDTO := dto.ToDeliveryOrdersListDTOWithProducts(*deliveryOrderResponse, allDeliveryProducts) + return &responseDTO, nil } func (s *deliveryOrdersService) CreateOne(c *fiber.Ctx, req *validation.Create) (*dto.DeliveryOrdersListDTO, error) { @@ -163,88 +166,93 @@ func (s *deliveryOrdersService) CreateOne(c *fiber.Ctx, req *validation.Create) return nil, err } - // Validate marketing exists - _, err := s.MarketingRepo.GetByID(c.Context(), req.MarketingId, nil) - if errors.Is(err, gorm.ErrRecordNotFound) { - return nil, fiber.NewError(fiber.StatusNotFound, "Marketing not found") - } - if err != nil { - s.Log.Errorf("Failed to fetch marketing %d: %+v", req.MarketingId, err) - return nil, fiber.NewError(fiber.StatusInternalServerError, "Failed to fetch marketing") + if err := commonSvc.EnsureRelations(c.Context(), + commonSvc.RelationCheck{Name: "Marketing", ID: &req.MarketingId, Exists: s.MarketingRepo.IdExists}, + ); err != nil { + return nil, err + } + + var relationChecks []commonSvc.RelationCheck + for _, requestedProduct := range req.DeliveryProducts { + relationChecks = append(relationChecks, commonSvc.RelationCheck{ + Name: "MarketingProduct", ID: &requestedProduct.MarketingProductId, Exists: s.MarketingProductRepo.IdExists, + }) } - // Validate marketing approval status - harus sudah di approve ke step Sales Order approvalSvc := commonSvc.NewApprovalService(commonRepo.NewApprovalRepository(s.MarketingRepo.DB())) latestApproval, err := approvalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowMarketing, req.MarketingId, nil) if err != nil { return nil, fiber.NewError(fiber.StatusInternalServerError, "Failed to check approval status") } - if latestApproval == nil { return nil, fiber.NewError(fiber.StatusBadRequest, "Marketing has not been submitted for approval") } - - // Cek apakah status approval sudah Sales Order (step 2) atau lebih if latestApproval.StepNumber < uint16(utils.MarketingStepSalesOrder) { return nil, fiber.NewError(fiber.StatusBadRequest, "Marketing must be approved to Sales Order step before creating delivery order") } - if latestApproval.Action == nil || *latestApproval.Action != entity.ApprovalActionApproved { return nil, fiber.NewError(fiber.StatusBadRequest, "Marketing is not approved for delivery") } - // Validate semua delivery products ada dan update mereka - err = s.Repository.DB().WithContext(c.Context()).Transaction(func(dbTx *gorm.DB) error { - for _, product := range req.DeliveryProducts { - // Fetch marketing_product terlebih dahulu untuk pastikan punya marketing_id yang sama - var marketingProduct entity.MarketingProduct - if err := dbTx.Where("id = ? AND marketing_id = ?", product.MarketingProductId, req.MarketingId). - First(&marketingProduct).Error; err != nil { + err = s.Repository.DB().WithContext(c.Context()).Transaction(func(dbTransaction *gorm.DB) error { + + marketingProductRepositoryTx := marketingRepo.NewMarketingProductRepository(dbTransaction) + marketingDeliveryProductRepositoryTx := marketingDeliveryProductRepo.NewMarketingDeliveryProductRepository(dbTransaction) + + for _, requestedProduct := range req.DeliveryProducts { + allMarketingProducts, err := marketingProductRepositoryTx.GetByMarketingID(c.Context(), req.MarketingId) + if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - return fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Marketing product %d not found for this marketing", product.MarketingProductId)) + return fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("No marketing products found for marketing %d", req.MarketingId)) } - s.Log.Errorf("Failed to fetch marketing product: %+v", err) - return fiber.NewError(fiber.StatusInternalServerError, "Failed to fetch marketing product") + s.Log.Errorf("Failed to fetch marketing products: %+v", err) + return fiber.NewError(fiber.StatusInternalServerError, "Failed to fetch marketing products") } - // Fetch marketing_delivery_product by marketing_product_id - var mdp entity.MarketingDeliveryProduct - if err := dbTx.Where("marketing_product_id = ?", marketingProduct.Id). - First(&mdp).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Delivery product for marketing product %d not found", product.MarketingProductId)) + var foundMarketingProduct *entity.MarketingProduct + for i := range allMarketingProducts { + if allMarketingProducts[i].Id == requestedProduct.MarketingProductId { + foundMarketingProduct = &allMarketingProducts[i] + break + } + } + if foundMarketingProduct == nil { + return fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Marketing product %d not found for this marketing", requestedProduct.MarketingProductId)) + } + + deliveryProduct, err := marketingDeliveryProductRepositoryTx.GetByMarketingProductID(c.Context(), foundMarketingProduct.Id) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Delivery product for marketing product %d not found", requestedProduct.MarketingProductId)) } - s.Log.Errorf("Failed to fetch marketing delivery product: %+v", err) return fiber.NewError(fiber.StatusInternalServerError, "Failed to fetch delivery product") } - // Parse delivery date per item (jika ada), atau gunakan default - itemDeliveryDate := time.Now() - if product.DeliveryDate != "" { - parsedItemDate, err := time.Parse("2006-01-02", product.DeliveryDate) + var itemDeliveryDate time.Time + if requestedProduct.DeliveryDate != "" { + parsedDate, err := utils.ParseDateString(requestedProduct.DeliveryDate) if err != nil { - return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Invalid delivery date format for product %d", product.MarketingProductId)) + return fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Invalid delivery date format for product %d: %v", requestedProduct.MarketingProductId, err)) } - itemDeliveryDate = parsedItemDate + itemDeliveryDate = parsedDate + } else { + itemDeliveryDate = time.Now() } - // Update dengan data dari request - PASTIKAN UPDATE LANGSUNG KE FIELD - updates := map[string]interface{}{ - "qty": product.Qty, - "unit_price": product.UnitPrice, - "avg_weight": product.AvgWeight, - "total_weight": product.TotalWeight, - "total_price": product.TotalPrice, - "delivery_date": &itemDeliveryDate, - "vehicle_number": product.VehicleNumber, - } + deliveryProduct.Qty = requestedProduct.Qty + deliveryProduct.UnitPrice = requestedProduct.UnitPrice + deliveryProduct.AvgWeight = requestedProduct.AvgWeight + deliveryProduct.TotalWeight = requestedProduct.TotalWeight + deliveryProduct.TotalPrice = requestedProduct.TotalPrice + deliveryProduct.DeliveryDate = &itemDeliveryDate + deliveryProduct.VehicleNumber = requestedProduct.VehicleNumber - if err := dbTx.Model(&mdp).Updates(updates).Error; err != nil { + if err := marketingDeliveryProductRepositoryTx.UpdateOne(c.Context(), deliveryProduct.Id, deliveryProduct, nil); err != nil { s.Log.Errorf("Failed to update marketing delivery product: %+v", err) return fiber.NewError(fiber.StatusInternalServerError, "Failed to update delivery product") } - s.Log.Infof("Updated MDP %d: qty=%v, unitPrice=%v, totalPrice=%v", mdp.Id, product.Qty, product.UnitPrice, product.TotalPrice) + s.Log.Infof("Updated delivery product %d: qty=%v, unitPrice=%v, totalPrice=%v", deliveryProduct.Id, requestedProduct.Qty, requestedProduct.UnitPrice, requestedProduct.TotalPrice) } return nil @@ -254,9 +262,9 @@ func (s *deliveryOrdersService) CreateOne(c *fiber.Ctx, req *validation.Create) return nil, err } - // Fetch marketing dengan delivery products yang sudah di-update + // Fetch marketing dengan delivery products yang sudah di-updated marketing, err := s.MarketingRepo.GetByID(c.Context(), req.MarketingId, func(db *gorm.DB) *gorm.DB { - return db.Preload("CreatedUser").Preload("Products") + return db.Preload("CreatedUser").Preload("Products.DeliveryProduct") }) if err != nil { s.Log.Errorf("Failed to fetch marketing after update: %+v", err) @@ -264,30 +272,30 @@ func (s *deliveryOrdersService) CreateOne(c *fiber.Ctx, req *validation.Create) } // Get marketing delivery products - var deliveryProducts []entity.MarketingDeliveryProduct - if err := s.Repository.DB().WithContext(c.Context()). + var allDeliveryProducts []entity.MarketingDeliveryProduct + if err := s.MarketingDeliveryProductRepo.DB().WithContext(c.Context()). Preload("MarketingProduct"). Where("marketing_product_id IN (?)", - s.Repository.DB().WithContext(c.Context()). + s.MarketingProductRepo.DB().WithContext(c.Context()). Model(&entity.MarketingProduct{}). Select("id"). Where("marketing_id = ?", req.MarketingId)). - Find(&deliveryProducts).Error; err != nil { + Find(&allDeliveryProducts).Error; err != nil { s.Log.Errorf("Failed to load delivery products: %+v", err) // Continue tanpa delivery products } - // Create dummy DeliveryOrders untuk dipakai dto mapping - dummyDO := &entity.DeliveryOrders{ + // Build response DTO + deliveryOrderResponse := &entity.DeliveryOrders{ MarketingId: req.MarketingId, Notes: req.Notes, CreatedUser: &marketing.CreatedUser, Marketing: marketing, - DeliveryProducts: deliveryProducts, + DeliveryProducts: allDeliveryProducts, } - result := dto.ToDeliveryOrdersListDTOWithProducts(*dummyDO, deliveryProducts) - return &result, nil + responseDTO := dto.ToDeliveryOrdersListDTOWithProducts(*deliveryOrderResponse, allDeliveryProducts) + return &responseDTO, nil } func (s deliveryOrdersService) UpdateOne(c *fiber.Ctx, req *validation.Update, id uint) (*entity.DeliveryOrders, error) { diff --git a/internal/modules/marketing/sales-orders/controllers/sales-orders.controller.go b/internal/modules/marketing/sales-orders/controllers/sales-orders.controller.go index 4c49baeb..a5365787 100644 --- a/internal/modules/marketing/sales-orders/controllers/sales-orders.controller.go +++ b/internal/modules/marketing/sales-orders/controllers/sales-orders.controller.go @@ -98,7 +98,7 @@ func (u *SalesOrdersController) CreateOne(c *fiber.Ctx) error { Code: fiber.StatusCreated, Status: "success", Message: "Create salesOrders successfully", - Data: result, + Data: dto.ToSalesOrdersListDTOFromMarketing(*result), }) } diff --git a/internal/modules/marketing/sales-orders/dto/sales-orders.dto.go b/internal/modules/marketing/sales-orders/dto/sales-orders.dto.go index 920b8d26..79bc6453 100644 --- a/internal/modules/marketing/sales-orders/dto/sales-orders.dto.go +++ b/internal/modules/marketing/sales-orders/dto/sales-orders.dto.go @@ -32,6 +32,7 @@ type MarketingProductDTO struct { Product *productDTO.ProductBaseDTO `json:"product,omitempty"` Warehouse *warehouseDTO.WarehouseBaseDTO `json:"warehouse,omitempty"` } `json:"product_warehouse,omitempty"` + DeliveryProduct *MarketingDeliveryProductDTO `json:"delivery_product,omitempty"` } type MarketingDeliveryProductDTO struct { @@ -104,6 +105,12 @@ func ToMarketingProductDTO(e entity.MarketingProduct) MarketingProductDTO { } } + var deliveryProduct *MarketingDeliveryProductDTO + if e.DeliveryProduct != nil && e.DeliveryProduct.Id != 0 { + mapped := ToMarketingDeliveryProductDTO(*e.DeliveryProduct) + deliveryProduct = &mapped + } + return MarketingProductDTO{ Id: e.Id, Qty: e.Qty, @@ -112,6 +119,7 @@ func ToMarketingProductDTO(e entity.MarketingProduct) MarketingProductDTO { TotalWeight: e.TotalWeight, TotalPrice: e.TotalPrice, ProductWarehouse: productWarehouse, + DeliveryProduct: deliveryProduct, } } diff --git a/internal/modules/marketing/sales-orders/repositories/marketing-products.repository.go b/internal/modules/marketing/sales-orders/repositories/marketing-products.repository.go index d3a6798f..4d5eb43f 100644 --- a/internal/modules/marketing/sales-orders/repositories/marketing-products.repository.go +++ b/internal/modules/marketing/sales-orders/repositories/marketing-products.repository.go @@ -11,6 +11,7 @@ import ( type MarketingProductRepository interface { repository.BaseRepository[entity.MarketingProduct] GetByMarketingID(ctx context.Context, marketingID uint) ([]entity.MarketingProduct, error) + IdExists(ctx context.Context, id uint) (bool, error) } type MarketingProductRepositoryImpl struct { @@ -33,3 +34,7 @@ func (r *MarketingProductRepositoryImpl) GetByMarketingID(ctx context.Context, m } return products, nil } + +func (r *MarketingProductRepositoryImpl) IdExists(ctx context.Context, id uint) (bool, error) { + return repository.Exists[entity.MarketingProduct](ctx, r.DB(), id) +} diff --git a/internal/modules/marketing/sales-orders/services/sales-orders.service.go b/internal/modules/marketing/sales-orders/services/sales-orders.service.go index 67163564..1fb36733 100644 --- a/internal/modules/marketing/sales-orders/services/sales-orders.service.go +++ b/internal/modules/marketing/sales-orders/services/sales-orders.service.go @@ -65,7 +65,7 @@ func (s salesOrdersService) withRelations(db *gorm.DB) *gorm.DB { Preload("SalesPerson"). Preload("Products.ProductWarehouse.Product"). Preload("Products.ProductWarehouse.Warehouse"). - Preload("Products.DeliveryProducts") + Preload("Products.DeliveryProduct") } func (s salesOrdersService) GetAll(c *fiber.Ctx, params *validation.Query) ([]entity.Marketing, int64, error) { @@ -255,7 +255,13 @@ func (s *salesOrdersService) CreateOne(c *fiber.Ctx, req *validation.Create) (*e return nil, fiber.NewError(fiber.StatusInternalServerError, "Failed to create salesOrders") } - return s.GetOne(c, marketing.Id) + marketing, err = s.MarketingRepo.GetByID(c.Context(), marketing.Id, s.withRelations) + if err != nil { + s.Log.Errorf("Failed to fetch created marketing: %+v", err) + return nil, fiber.NewError(fiber.StatusInternalServerError, "Failed to fetch created sales order") + } + + return marketing, nil } func (s salesOrdersService) UpdateOne(c *fiber.Ctx, req *validation.Update, id uint) (*entity.Marketing, error) {