mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-24 23:35:43 +00:00
feat(BE-287):adjustment purchase restrict unfinished
This commit is contained in:
@@ -310,9 +310,6 @@ func (b *expenseBridge) OnItemsReceived(c *fiber.Ctx, purchaseID uint, updates [
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if cnt == 1 {
|
if cnt == 1 {
|
||||||
if item.Warehouse == nil || item.Warehouse.KandangId == nil || *item.Warehouse.KandangId == 0 {
|
|
||||||
return fiber.NewError(fiber.StatusBadRequest, "Warehouse not connect to kandangs")
|
|
||||||
}
|
|
||||||
newNonstockID, err := b.findExpeditionNonstockID(ctx, supplierID)
|
newNonstockID, err := b.findExpeditionNonstockID(ctx, supplierID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -332,7 +329,9 @@ func (b *expenseBridge) OnItemsReceived(c *fiber.Ctx, purchaseID uint, updates [
|
|||||||
"price": pricePerItem,
|
"price": pricePerItem,
|
||||||
"notes": note,
|
"notes": note,
|
||||||
"nonstock_id": newNonstockID,
|
"nonstock_id": newNonstockID,
|
||||||
"kandang_id": uint64(*item.Warehouse.KandangId),
|
}
|
||||||
|
if item.Warehouse != nil && item.Warehouse.KandangId != nil && *item.Warehouse.KandangId != 0 {
|
||||||
|
updateBody["kandang_id"] = uint64(*item.Warehouse.KandangId)
|
||||||
}
|
}
|
||||||
if err := b.db.WithContext(ctx).
|
if err := b.db.WithContext(ctx).
|
||||||
Model(&entity.ExpenseNonstock{}).
|
Model(&entity.ExpenseNonstock{}).
|
||||||
@@ -550,18 +549,27 @@ func (b *expenseBridge) createExpenseViaService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
kandangID := items[0].kandangID
|
kandangID := items[0].kandangID
|
||||||
if kandangID == nil || *kandangID == 0 {
|
var locationID uint64
|
||||||
return nil, fiber.NewError(fiber.StatusBadRequest, "Warehouse not connect to kandangs")
|
var expenseKandangID *uint64
|
||||||
}
|
if kandangID != nil && *kandangID != 0 {
|
||||||
|
kandang, err := b.kandangRepo.GetByID(ctx, *kandangID, func(db *gorm.DB) *gorm.DB {
|
||||||
kandang, err := b.kandangRepo.GetByID(ctx, *kandangID, func(db *gorm.DB) *gorm.DB {
|
return db.Select("id, location_id")
|
||||||
return db.Select("id, location_id")
|
})
|
||||||
})
|
if err != nil {
|
||||||
if err != nil {
|
return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Kandang not found: %d", *kandangID))
|
||||||
return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Kandang not found: %d", *kandangID))
|
}
|
||||||
}
|
if kandang == nil {
|
||||||
if kandang == nil {
|
return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Kandang not found: %d", *kandangID))
|
||||||
return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Kandang not found: %d", *kandangID))
|
}
|
||||||
|
locationID = uint64(kandang.LocationId)
|
||||||
|
id := uint64(*kandangID)
|
||||||
|
expenseKandangID = &id
|
||||||
|
} else {
|
||||||
|
warehouse := items[0].item.Warehouse
|
||||||
|
if warehouse == nil || warehouse.LocationId == nil || *warehouse.LocationId == 0 {
|
||||||
|
return nil, fiber.NewError(fiber.StatusBadRequest, "Warehouse location is required for expense")
|
||||||
|
}
|
||||||
|
locationID = uint64(*warehouse.LocationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
costItems := make([]expenseValidation.CostItem, 0, len(items))
|
costItems := make([]expenseValidation.CostItem, 0, len(items))
|
||||||
@@ -584,9 +592,9 @@ func (b *expenseBridge) createExpenseViaService(
|
|||||||
TransactionDate: utils.FormatDate(expenseDate),
|
TransactionDate: utils.FormatDate(expenseDate),
|
||||||
Category: "BOP",
|
Category: "BOP",
|
||||||
SupplierID: uint64(supplierID),
|
SupplierID: uint64(supplierID),
|
||||||
LocationID: uint64(kandang.LocationId),
|
LocationID: locationID,
|
||||||
ExpenseNonstocks: []expenseValidation.ExpenseNonstock{{
|
ExpenseNonstocks: []expenseValidation.ExpenseNonstock{{
|
||||||
KandangID: func() *uint64 { id := uint64(*kandangID); return &id }(),
|
KandangID: expenseKandangID,
|
||||||
CostItems: costItems,
|
CostItems: costItems,
|
||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -246,22 +246,25 @@ func (s *purchaseService) CreateOne(c *fiber.Ctx, req *validation.CreatePurchase
|
|||||||
s.Log.Errorf("Failed to get warehouse %d: %+v", id, err)
|
s.Log.Errorf("Failed to get warehouse %d: %+v", id, err)
|
||||||
return nil, nil, utils.Internal("Failed to get warehouse")
|
return nil, nil, utils.Internal("Failed to get warehouse")
|
||||||
}
|
}
|
||||||
if warehouse.KandangId == nil || *warehouse.KandangId == 0 {
|
|
||||||
return nil, nil, utils.BadRequest(fmt.Sprintf("%s is not linked to a kandang", warehouse.Name))
|
|
||||||
}
|
|
||||||
var pfkID *uint
|
var pfkID *uint
|
||||||
if s.ProjectFlockKandangRepo != nil {
|
isKandang := strings.EqualFold(strings.TrimSpace(warehouse.Type), "KANDANG")
|
||||||
if pfk, err := s.ProjectFlockKandangRepo.GetActiveByKandangID(c.Context(), uint(*warehouse.KandangId)); err == nil && pfk != nil {
|
if isKandang {
|
||||||
if pfk.ClosedAt != nil {
|
if warehouse.KandangId == nil || *warehouse.KandangId == 0 {
|
||||||
return nil, nil, utils.BadRequest("Project sudah closing")
|
return nil, nil, utils.BadRequest(fmt.Sprintf("%s is not linked to a kandang", warehouse.Name))
|
||||||
|
}
|
||||||
|
if s.ProjectFlockKandangRepo != nil {
|
||||||
|
if pfk, err := s.ProjectFlockKandangRepo.GetActiveByKandangID(c.Context(), uint(*warehouse.KandangId)); err == nil && pfk != nil {
|
||||||
|
if pfk.ClosedAt != nil {
|
||||||
|
return nil, nil, utils.BadRequest("Project sudah closing")
|
||||||
|
}
|
||||||
|
idCopy := uint(pfk.Id)
|
||||||
|
pfkID = &idCopy
|
||||||
|
} else if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
return nil, nil, utils.BadRequest(fmt.Sprintf("%s has no active project flock", warehouse.Name))
|
||||||
|
} else if err != nil {
|
||||||
|
s.Log.Errorf("Failed to validate project flock for warehouse %d: %+v", id, err)
|
||||||
|
return nil, nil, utils.Internal("Failed to validate project flock")
|
||||||
}
|
}
|
||||||
idCopy := uint(pfk.Id)
|
|
||||||
pfkID = &idCopy
|
|
||||||
} else if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
||||||
return nil, nil, utils.BadRequest(fmt.Sprintf("%s has no active project flock", warehouse.Name))
|
|
||||||
} else if err != nil {
|
|
||||||
s.Log.Errorf("Failed to validate project flock for warehouse %d: %+v", id, err)
|
|
||||||
return nil, nil, utils.Internal("Failed to validate project flock")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user