diff --git a/internal/modules/production/chickins/module.go b/internal/modules/production/chickins/module.go index f6dd554b..d5c13493 100644 --- a/internal/modules/production/chickins/module.go +++ b/internal/modules/production/chickins/module.go @@ -42,7 +42,7 @@ func (ChickinModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate * approvalRepo := commonRepo.NewApprovalRepository(db) approvalService := commonSvc.NewApprovalService(approvalRepo) if err := approvalService.RegisterWorkflowSteps(utils.ApprovalWorkflowProjectFlockKandang, utils.ProjectFlockKandangApprovalSteps); err != nil { - panic(fmt.Sprintf("failed to register project flock kandang approval workflow: %v", err)) + panic(fmt.Sprintf("failed to register chickin approval workflow: %v", err)) } chickinService := sChickin.NewChickinService(chickinRepo, kandangRepo, warehouseRepo, productWarehouseRepo, projectFlockRepo, projectflockkandangrepo, projectflockpopulationrepo, chickinDetailRepo, validate) diff --git a/internal/modules/production/project-flock-kandangs/controllers/project_flock_kandang.controller.go b/internal/modules/production/project-flock-kandangs/controllers/project_flock_kandang.controller.go index 3b00d3b6..dcdb9c82 100644 --- a/internal/modules/production/project-flock-kandangs/controllers/project_flock_kandang.controller.go +++ b/internal/modules/production/project-flock-kandangs/controllers/project_flock_kandang.controller.go @@ -106,7 +106,7 @@ func (u *ProjectFlockKandangController) Closing(c *fiber.Ctx) error { Code: fiber.StatusOK, Status: "success", Message: "Status closing kandang diperbarui", - // Data: dto.ToProjectFlockKandangDetailDTO(*result), + // Data: dto.ProjectFlockKandangDetailDTO(*result), Data: result, }) } diff --git a/internal/modules/production/project-flock-kandangs/module.go b/internal/modules/production/project-flock-kandangs/module.go index becd2b61..5e399ce0 100644 --- a/internal/modules/production/project-flock-kandangs/module.go +++ b/internal/modules/production/project-flock-kandangs/module.go @@ -32,9 +32,9 @@ func (ProjectFlockKandangModule) RegisterRoutes(router fiber.Router, db *gorm.DB approvalRepo := commonRepo.NewApprovalRepository(db) approvalService := commonSvc.NewApprovalService(approvalRepo) - // register workflow steps for project flock kandang approvals + // register workflow steps for chickin approvals if err := approvalService.RegisterWorkflowSteps(utils.ApprovalWorkflowProjectFlockKandang, utils.ProjectFlockKandangApprovalSteps); err != nil { - panic(fmt.Sprintf("failed to register project flock kandang approval workflow: %v", err)) + panic(fmt.Sprintf("failed to register chickin approval workflow: %v", err)) } expenseRepo := rExpense.NewExpenseRepository(db) diff --git a/internal/modules/production/project-flock-kandangs/services/project_flock_kandang.service.go b/internal/modules/production/project-flock-kandangs/services/project_flock_kandang.service.go index fa65d045..021f002e 100644 --- a/internal/modules/production/project-flock-kandangs/services/project_flock_kandang.service.go +++ b/internal/modules/production/project-flock-kandangs/services/project_flock_kandang.service.go @@ -2,6 +2,7 @@ package service import ( "errors" + "fmt" "strings" "time" @@ -219,6 +220,27 @@ func (s projectFlockKandangService) Closing(c *fiber.Ctx, id uint, req *validati return nil, fiber.NewError(fiber.StatusBadRequest, "Masih ada expense belum selesai untuk kandang ini") } } + + if s.WarehouseRepo != nil && s.ProductWarehouseRepo != nil { + warehouse, werr := s.WarehouseRepo.GetByKandangID(c.Context(), pfk.KandangId) + if werr != nil { + return nil, werr + } + + for _, flagName := range []utils.FlagType{utils.FlagPakan, utils.FlagOVK} { + productWarehouses, pwErr := s.ProductWarehouseRepo.GetByFlagAndWarehouseID(c.Context(), string(flagName), warehouse.Id) + if pwErr != nil { + return nil, pwErr + } + + for _, pw := range productWarehouses { + if pw.Quantity > 0 { + return nil, fiber.NewError(fiber.StatusBadRequest, fmt.Sprintf("Stok %s masih tersedia (product warehouse %d: %.2f)", flagName, pw.Id, pw.Quantity)) + } + } + } + } + closeTime := now if req.ClosedDate != nil { parsed, perr := utils.ParseDateString(strings.TrimSpace(*req.ClosedDate)) @@ -236,7 +258,7 @@ func (s projectFlockKandangService) Closing(c *fiber.Ctx, id uint, req *validati c.Context(), utils.ApprovalWorkflowProjectFlockKandang, id, - utils.ProjectFlockKandangStepDisetujui, + utils.ProjectFlockKandangStepClosed, &closeAction, actorID, nil, diff --git a/internal/modules/production/project_flocks/repositories/projectflock_kandang.repository.go b/internal/modules/production/project_flocks/repositories/projectflock_kandang.repository.go index b0863700..cd3f2361 100644 --- a/internal/modules/production/project_flocks/repositories/projectflock_kandang.repository.go +++ b/internal/modules/production/project_flocks/repositories/projectflock_kandang.repository.go @@ -297,7 +297,8 @@ func (r *projectFlockKandangRepositoryImpl) HasKandangsLinkedToOtherProject(ctx } q := r.db.WithContext(ctx). Table("project_flock_kandangs"). - Where("kandang_id IN ?", kandangIDs) + Where("kandang_id IN ?", kandangIDs). + Where("closed_at IS NULL") if exceptProjectID != nil { q = q.Where("project_flock_id <> ?", *exceptProjectID) } diff --git a/internal/utils/constant.go b/internal/utils/constant.go index e9d0d60d..433bd114 100644 --- a/internal/utils/constant.go +++ b/internal/utils/constant.go @@ -163,17 +163,33 @@ var ProjectFlockApprovalSteps = map[approvalutils.ApprovalStep]string{ } // ------------------------------------------------------------------- -// Project Flock Kandang Approval +// Chickin Approval // ------------------------------------------------------------------- const ( - ApprovalWorkflowProjectFlockKandang approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("PROJECT_FLOCK_KANDANGS") + ApprovalWorkflowChickin approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("CHICKINS") + ChickinStepPengajuan approvalutils.ApprovalStep = 1 + ChickinStepDisetujui approvalutils.ApprovalStep = 2 +) + +var ChickinApprovalSteps = map[approvalutils.ApprovalStep]string{ + ChickinStepPengajuan: "Pengajuan", + ChickinStepDisetujui: "Disetujui", +} + +// ------------------------------------------------------------------- +// Project-Flock kandang Approval +// ------------------------------------------------------------------- +const ( + ApprovalWorkflowProjectFlockKandang approvalutils.ApprovalWorkflowKey = approvalutils.ApprovalWorkflowKey("CHICKINS") ProjectFlockKandangStepPengajuan approvalutils.ApprovalStep = 1 ProjectFlockKandangStepDisetujui approvalutils.ApprovalStep = 2 + ProjectFlockKandangStepClosed approvalutils.ApprovalStep = 3 ) var ProjectFlockKandangApprovalSteps = map[approvalutils.ApprovalStep]string{ ProjectFlockKandangStepPengajuan: "Pengajuan", ProjectFlockKandangStepDisetujui: "Disetujui", + ProjectFlockKandangStepClosed: "Closed", } // -------------------------------------------------------------------