From 56811f7c5b0728111eaecfdaaed8dd496a955858 Mon Sep 17 00:00:00 2001 From: aguhh18 Date: Sun, 28 Dec 2025 08:57:35 +0700 Subject: [PATCH] feat[BE]: integrate kandang repository into expense bridge for enhanced expense management --- internal/modules/purchases/module.go | 3 +++ .../modules/purchases/services/expense_bridge.go | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/internal/modules/purchases/module.go b/internal/modules/purchases/module.go index 6daf2a39..fa10559d 100644 --- a/internal/modules/purchases/module.go +++ b/internal/modules/purchases/module.go @@ -12,6 +12,7 @@ import ( expenseRepo "gitlab.com/mbugroup/lti-api.git/internal/modules/expenses/repositories" expenseService "gitlab.com/mbugroup/lti-api.git/internal/modules/expenses/services" rProductWarehouse "gitlab.com/mbugroup/lti-api.git/internal/modules/inventory/product-warehouses/repositories" + rKandang "gitlab.com/mbugroup/lti-api.git/internal/modules/master/kandangs/repositories" rNonstock "gitlab.com/mbugroup/lti-api.git/internal/modules/master/nonstocks/repositories" rProduct "gitlab.com/mbugroup/lti-api.git/internal/modules/master/products/repositories" rSupplier "gitlab.com/mbugroup/lti-api.git/internal/modules/master/suppliers/repositories" @@ -35,6 +36,7 @@ func (PurchaseModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate supplierRepo := rSupplier.NewSupplierRepository(db) productWarehouseRepo := rProductWarehouse.NewProductWarehouseRepository(db) nonstockRepo := rNonstock.NewNonstockRepository(db) + kandangRepo := rKandang.NewKandangRepository(db) expenseRepository := expenseRepo.NewExpenseRepository(db) expenseRealizationRepo := expenseRepo.NewExpenseRealizationRepository(db) projectFlockKandangRepository := projectFlockKandangRepo.NewProjectFlockKandangRepository(db) @@ -67,6 +69,7 @@ func (PurchaseModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate db, purchaseRepo, projectFlockKandangRepository, + kandangRepo, expenseServiceInstance, ) diff --git a/internal/modules/purchases/services/expense_bridge.go b/internal/modules/purchases/services/expense_bridge.go index fd28ada6..146f04f2 100644 --- a/internal/modules/purchases/services/expense_bridge.go +++ b/internal/modules/purchases/services/expense_bridge.go @@ -17,6 +17,7 @@ import ( expenseDto "gitlab.com/mbugroup/lti-api.git/internal/modules/expenses/dto" expenseSvc "gitlab.com/mbugroup/lti-api.git/internal/modules/expenses/services" expenseValidation "gitlab.com/mbugroup/lti-api.git/internal/modules/expenses/validations" + kandangRepo "gitlab.com/mbugroup/lti-api.git/internal/modules/master/kandangs/repositories" projectFlockKandangRepo "gitlab.com/mbugroup/lti-api.git/internal/modules/production/project_flocks/repositories" rPurchase "gitlab.com/mbugroup/lti-api.git/internal/modules/purchases/repositories" "gitlab.com/mbugroup/lti-api.git/internal/utils" @@ -53,6 +54,7 @@ type expenseBridge struct { db *gorm.DB purchaseRepo rPurchase.PurchaseRepository projectFlockKandangRepo projectFlockKandangRepo.ProjectFlockKandangRepository + kandangRepo kandangRepo.KandangRepository expenseSvc expenseSvc.ExpenseService } @@ -60,12 +62,14 @@ func NewExpenseBridge( db *gorm.DB, purchaseRepo rPurchase.PurchaseRepository, projectFlockKandangRepo projectFlockKandangRepo.ProjectFlockKandangRepository, + kandangRepo kandangRepo.KandangRepository, expenseSvc expenseSvc.ExpenseService, ) PurchaseExpenseBridge { return &expenseBridge{ db: db, purchaseRepo: purchaseRepo, projectFlockKandangRepo: projectFlockKandangRepo, + kandangRepo: kandangRepo, expenseSvc: expenseSvc, } } @@ -550,6 +554,16 @@ func (b *expenseBridge) createExpenseViaService( return nil, fiber.NewError(fiber.StatusBadRequest, "Warehouse not connect to kandangs") } + kandang, err := b.kandangRepo.GetByID(ctx, *kandangID, func(db *gorm.DB) *gorm.DB { + return db.Select("id, location_id") + }) + if err != nil { + return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Kandang not found: %d", *kandangID)) + } + if kandang == nil { + return nil, fiber.NewError(fiber.StatusNotFound, fmt.Sprintf("Kandang not found: %d", *kandangID)) + } + costItems := make([]expenseValidation.CostItem, 0, len(items)) for _, gi := range items { note := fmt.Sprintf("purchase_item:%d", gi.payload.PurchaseItemID) @@ -570,6 +584,7 @@ func (b *expenseBridge) createExpenseViaService( TransactionDate: utils.FormatDate(expenseDate), Category: "BOP", SupplierID: uint64(supplierID), + LocationID: uint64(kandang.LocationId), ExpenseNonstocks: []expenseValidation.ExpenseNonstock{{ KandangID: func() *uint64 { id := uint64(*kandangID); return &id }(), CostItems: costItems,