mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-20 13:31:56 +00:00
feat[BE-127] add source and target project flock to transfer laying API
This commit is contained in:
@@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
commonSvc "gitlab.com/mbugroup/lti-api.git/internal/common/service"
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
@@ -106,18 +107,68 @@ func (s *salesOrdersService) CreateOne(c *fiber.Ctx, req *validation.Create) (*e
|
||||
}
|
||||
}
|
||||
|
||||
createBody := &entity.Marketing{
|
||||
CustomerId: req.CustomerId,
|
||||
// parse date
|
||||
soDate, err := utils.ParseDateString(req.Date)
|
||||
if err != nil {
|
||||
return nil, fiber.NewError(fiber.StatusBadRequest, "Invalid date format")
|
||||
}
|
||||
|
||||
err := s.MarketingRepo.DB().WithContext(c.Context()).Transaction(func(dbTransaction *gorm.DB) error {
|
||||
marketingRepoTx := repository.NewMarketingRepository(dbTransaction)
|
||||
// generate SO number
|
||||
soNumber := "SO-" + time.Now().Format("20060102150405")
|
||||
|
||||
if err := marketingRepoTx.CreateOne(c.Context(), createBody, nil); err != nil {
|
||||
var marketing *entity.Marketing
|
||||
|
||||
err = s.Repository.DB().WithContext(c.Context()).Transaction(func(dbTransaction *gorm.DB) error {
|
||||
// create marketing directly (tanpa create SalesOrders)
|
||||
marketingRepoTx := repository.NewMarketingRepository(dbTransaction)
|
||||
marketing = &entity.Marketing{
|
||||
CustomerId: req.CustomerId,
|
||||
SoNumber: soNumber,
|
||||
SoDate: soDate,
|
||||
SalesPersonId: 1,
|
||||
Notes: req.Notes,
|
||||
CreatedBy: 1,
|
||||
}
|
||||
if err := marketingRepoTx.CreateOne(c.Context(), marketing, nil); err != nil {
|
||||
s.Log.Errorf("Failed to create marketing: %+v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Create MarketingProducts and MarketingDeliveryProducts
|
||||
if len(req.MarketingProducts) > 0 {
|
||||
for _, product := range req.MarketingProducts {
|
||||
marketingProduct := &entity.MarketingProduct{
|
||||
MarketingId: marketing.Id,
|
||||
ProductWarehouseId: product.ProductWarehouseId,
|
||||
Qty: product.Qty,
|
||||
UnitPrice: product.UnitPrice,
|
||||
AvgWeight: product.AvgWeight,
|
||||
TotalWeight: product.TotalWeight,
|
||||
TotalPrice: product.TotalPrice,
|
||||
}
|
||||
if err := dbTransaction.Create(marketingProduct).Error; err != nil {
|
||||
s.Log.Errorf("Failed to create marketing product: %+v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// create delivery product with zeroed numeric fields and nil delivery date
|
||||
marketingDeliveryProduct := &entity.MarketingDeliveryProduct{
|
||||
MarketingProductId: marketingProduct.Id,
|
||||
Qty: 0,
|
||||
UnitPrice: 0,
|
||||
TotalWeight: 0,
|
||||
AvgWeight: 0,
|
||||
TotalPrice: 0,
|
||||
DeliveryDate: nil,
|
||||
VehicleNumber: product.VehicleNumber,
|
||||
}
|
||||
if err := dbTransaction.Create(marketingDeliveryProduct).Error; err != nil {
|
||||
s.Log.Errorf("Failed to create marketing delivery product: %+v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
@@ -127,7 +178,16 @@ 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, createBody.Id)
|
||||
createdMarketing, err := s.MarketingRepo.GetByID(c.Context(), marketing.Id, nil)
|
||||
if err != nil {
|
||||
s.Log.Errorf("Failed to fetch created marketing: %+v", err)
|
||||
return nil, fiber.NewError(fiber.StatusInternalServerError, "Failed to fetch created marketing")
|
||||
}
|
||||
|
||||
return &entity.SalesOrders{
|
||||
Id: createdMarketing.Id,
|
||||
Name: createdMarketing.SoNumber,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s salesOrdersService) UpdateOne(c *fiber.Ctx, req *validation.Update, id uint) (*entity.SalesOrders, error) {
|
||||
|
||||
Reference in New Issue
Block a user