mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-22 06:15:44 +00:00
Revert "Merge branch 'fix/implement-fifo-v2' into 'dev/fifo-v2'"
This reverts merge request !340
This commit is contained in:
@@ -179,7 +179,6 @@ func calculateAgeFromChickin(projectFlockKandang *entity.ProjectFlockKandang, cu
|
||||
flag == string(utils.FlagTelurPecah) ||
|
||||
flag == string(utils.FlagTelurPutih) ||
|
||||
flag == string(utils.FlagTelurRetak) ||
|
||||
flag == string(utils.FlagAyam) ||
|
||||
flag == string(utils.FlagAyamAfkir) ||
|
||||
flag == string(utils.FlagAyamCulling) ||
|
||||
flag == string(utils.FlagAyamMati) {
|
||||
|
||||
@@ -144,7 +144,6 @@ func (s productWarehouseService) GetAll(c *fiber.Ctx, params *validation.Query)
|
||||
for _, t := range marketingTypes {
|
||||
switch t {
|
||||
case string(utils.MarketingTypeAyamPullet):
|
||||
flagSet[string(utils.FlagAyam)] = struct{}{}
|
||||
flagSet[string(utils.FlagDOC)] = struct{}{}
|
||||
flagSet[string(utils.FlagPullet)] = struct{}{}
|
||||
flagSet[string(utils.FlagLayer)] = struct{}{}
|
||||
|
||||
@@ -50,16 +50,6 @@ type transferService struct {
|
||||
ExpenseBridge TransferExpenseBridge
|
||||
}
|
||||
|
||||
const (
|
||||
transferFunctionCodeIn = "STOCK_TRANSFER_IN"
|
||||
transferFunctionCodeOut = "STOCK_TRANSFER_OUT"
|
||||
)
|
||||
|
||||
type transferRoutePair struct {
|
||||
Stockable commonSvc.FifoStockV2RouteRule
|
||||
Usable commonSvc.FifoStockV2RouteRule
|
||||
}
|
||||
|
||||
func NewTransferService(validate *validator.Validate, stockTransferRepo rStockTransfer.StockTransferRepository, stockTransferDetailRepo rStockTransfer.StockTransferDetailRepository, stockTransferDeliveryRepo rStockTransfer.StockTransferDeliveryRepository, stockTransferDeliveryItemRepo rStockTransfer.StockTransferDeliveryItemRepository, stockLogsRepo rStockLogs.StockLogRepository, productWarehouseRepo rProductWarehouse.ProductWarehouseRepository, supplierRepo rSupplier.SupplierRepository, warehouseRepo warehouseRepo.WarehouseRepository, projectFlockKandangRepo projectFlockKandangRepo.ProjectFlockKandangRepository, documentSvc commonSvc.DocumentService, fifoSvc commonSvc.FifoService, fifoStockV2Svc commonSvc.FifoStockV2Service, expenseBridge TransferExpenseBridge) TransferService {
|
||||
return &transferService{
|
||||
Log: utils.Log,
|
||||
@@ -454,9 +444,9 @@ func (s *transferService) CreateOne(c *fiber.Ctx, req *validation.TransferReques
|
||||
}
|
||||
}
|
||||
|
||||
routePairsByProductID := map[uint]transferRoutePair{}
|
||||
if len(req.Products) > 0 {
|
||||
routePairsByProductID, err = s.resolveTransferRoutes(c.Context(), tx, req.Products)
|
||||
pakanProducts := map[uint]bool{}
|
||||
if s.FifoStockV2Svc != nil && len(req.Products) > 0 {
|
||||
pakanProducts, err = s.resolvePakanProducts(c.Context(), tx, req.Products)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -464,17 +454,10 @@ func (s *transferService) CreateOne(c *fiber.Ctx, req *validation.TransferReques
|
||||
|
||||
for _, product := range req.Products {
|
||||
detail := detailMap[uint64(product.ProductID)]
|
||||
routePair, ok := routePairsByProductID[uint(product.ProductID)]
|
||||
if !ok {
|
||||
return fiber.NewError(
|
||||
fiber.StatusBadRequest,
|
||||
fmt.Sprintf("Konfigurasi FIFO v2 transfer tidak ditemukan untuk produk %d", product.ProductID),
|
||||
)
|
||||
}
|
||||
|
||||
outUsageQty := 0.0
|
||||
outPendingQty := 0.0
|
||||
useFifoV2 := s.FifoStockV2Svc != nil
|
||||
useFifoV2 := s.FifoStockV2Svc != nil && pakanProducts[uint(product.ProductID)]
|
||||
if useFifoV2 {
|
||||
s.Log.Infof(
|
||||
"[fifo-v2][transfer] use reflow movement=%s detail_id=%d product_id=%d source_pw=%d qty=%.3f",
|
||||
@@ -485,12 +468,12 @@ func (s *transferService) CreateOne(c *fiber.Ctx, req *validation.TransferReques
|
||||
product.ProductQty,
|
||||
)
|
||||
reflowResult, err := s.FifoStockV2Svc.Reflow(c.Context(), commonSvc.FifoStockV2ReflowRequest{
|
||||
FlagGroupCode: routePair.Usable.FlagGroupCode,
|
||||
FlagGroupCode: "PAKAN",
|
||||
ProductWarehouseID: uint(*detail.SourceProductWarehouseID),
|
||||
Usable: commonSvc.FifoStockV2Ref{
|
||||
ID: uint(detail.Id),
|
||||
LegacyTypeKey: routePair.Usable.LegacyTypeKey,
|
||||
FunctionCode: routePair.Usable.FunctionCode,
|
||||
LegacyTypeKey: fifo.UsableKeyStockTransferOut.String(),
|
||||
FunctionCode: "STOCK_TRANSFER_OUT",
|
||||
},
|
||||
DesiredQty: product.ProductQty,
|
||||
Tx: tx,
|
||||
@@ -508,12 +491,8 @@ func (s *transferService) CreateOne(c *fiber.Ctx, req *validation.TransferReques
|
||||
outPendingQty,
|
||||
)
|
||||
} else {
|
||||
usableKey := fifo.UsableKey(strings.TrimSpace(routePair.Usable.LegacyTypeKey))
|
||||
if usableKey == "" {
|
||||
usableKey = fifo.UsableKeyStockTransferOut
|
||||
}
|
||||
consumeResult, err := s.FifoSvc.Consume(c.Context(), commonSvc.StockConsumeRequest{
|
||||
UsableKey: usableKey,
|
||||
UsableKey: fifo.UsableKeyStockTransferOut,
|
||||
UsableID: uint(detail.Id),
|
||||
ProductWarehouseID: uint(*detail.SourceProductWarehouseID),
|
||||
Quantity: product.ProductQty,
|
||||
@@ -574,12 +553,8 @@ func (s *transferService) CreateOne(c *fiber.Ctx, req *validation.TransferReques
|
||||
product.ProductQty,
|
||||
)
|
||||
}
|
||||
stockableKey := fifo.StockableKey(strings.TrimSpace(routePair.Stockable.LegacyTypeKey))
|
||||
if stockableKey == "" {
|
||||
stockableKey = fifo.StockableKeyStockTransferIn
|
||||
}
|
||||
replenishResult, err := s.FifoSvc.Replenish(c.Context(), commonSvc.StockReplenishRequest{
|
||||
StockableKey: stockableKey,
|
||||
StockableKey: fifo.StockableKeyStockTransferIn,
|
||||
StockableID: uint(detail.Id),
|
||||
ProductWarehouseID: uint(*detail.DestProductWarehouseID),
|
||||
Quantity: product.ProductQty,
|
||||
@@ -682,72 +657,50 @@ func (s *transferService) CreateOne(c *fiber.Ctx, req *validation.TransferReques
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *transferService) resolveTransferRoutes(
|
||||
func (s *transferService) resolvePakanProducts(
|
||||
ctx context.Context,
|
||||
tx *gorm.DB,
|
||||
products []validation.TransferProduct,
|
||||
) (map[uint]transferRoutePair, error) {
|
||||
out := make(map[uint]transferRoutePair, len(products))
|
||||
) (map[uint]bool, error) {
|
||||
out := make(map[uint]bool, len(products))
|
||||
if len(products) == 0 {
|
||||
return out, nil
|
||||
}
|
||||
|
||||
productIDs := make(map[uint]struct{}, len(products))
|
||||
productIDs := make([]uint, 0, len(products))
|
||||
seen := make(map[uint]struct{}, len(products))
|
||||
for _, product := range products {
|
||||
if product.ProductID == 0 {
|
||||
continue
|
||||
}
|
||||
productIDs[product.ProductID] = struct{}{}
|
||||
if _, ok := seen[product.ProductID]; ok {
|
||||
continue
|
||||
}
|
||||
seen[product.ProductID] = struct{}{}
|
||||
productIDs = append(productIDs, product.ProductID)
|
||||
}
|
||||
if len(productIDs) == 0 {
|
||||
return out, nil
|
||||
}
|
||||
|
||||
for productID := range productIDs {
|
||||
usableRoute, err := commonSvc.ResolveFifoStockV2RouteByProductIDAndLane(
|
||||
ctx,
|
||||
tx,
|
||||
productID,
|
||||
transferFunctionCodeOut,
|
||||
commonSvc.FifoStockV2LaneUsable,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if usableRoute == nil {
|
||||
return nil, fiber.NewError(
|
||||
fiber.StatusBadRequest,
|
||||
fmt.Sprintf("Produk %d tidak mendukung transaksi Transfer Stock (OUT) pada matrix FIFO v2", productID),
|
||||
)
|
||||
}
|
||||
|
||||
stockableRoute, err := commonSvc.ResolveFifoStockV2RouteByProductIDAndLane(
|
||||
ctx,
|
||||
tx,
|
||||
productID,
|
||||
transferFunctionCodeIn,
|
||||
commonSvc.FifoStockV2LaneStockable,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if stockableRoute == nil {
|
||||
return nil, fiber.NewError(
|
||||
fiber.StatusBadRequest,
|
||||
fmt.Sprintf("Produk %d tidak mendukung transaksi Transfer Stock (IN) pada matrix FIFO v2", productID),
|
||||
)
|
||||
}
|
||||
|
||||
if strings.TrimSpace(usableRoute.FlagGroupCode) != strings.TrimSpace(stockableRoute.FlagGroupCode) {
|
||||
return nil, fiber.NewError(
|
||||
fiber.StatusBadRequest,
|
||||
fmt.Sprintf("Konfigurasi matrix FIFO v2 transfer tidak konsisten untuk produk %d", productID),
|
||||
)
|
||||
}
|
||||
|
||||
out[productID] = transferRoutePair{
|
||||
Stockable: *stockableRoute,
|
||||
Usable: *usableRoute,
|
||||
}
|
||||
type row struct {
|
||||
ProductID uint `gorm:"column:product_id"`
|
||||
}
|
||||
var rows []row
|
||||
err := tx.WithContext(ctx).
|
||||
Table("flags f").
|
||||
Select("DISTINCT f.flagable_id AS product_id").
|
||||
Where("f.flagable_type = ?", entity.FlagableTypeProduct).
|
||||
Where("f.name IN ?", []string{"PAKAN", "PRE-STARTER", "STARTER", "FINISHER"}).
|
||||
Where("f.flagable_id IN ?", productIDs).
|
||||
Scan(&rows).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, row := range rows {
|
||||
out[row.ProductID] = true
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user