add approval projectflockkandang closed,expense must be done,stock must empty by flag unfinished:need info approval fix

This commit is contained in:
ragilap
2025-12-03 21:46:02 +07:00
parent d572d04e3b
commit ea294c6a18
6 changed files with 47 additions and 8 deletions
@@ -42,7 +42,7 @@ func (ChickinModule) RegisterRoutes(router fiber.Router, db *gorm.DB, validate *
approvalRepo := commonRepo.NewApprovalRepository(db) approvalRepo := commonRepo.NewApprovalRepository(db)
approvalService := commonSvc.NewApprovalService(approvalRepo) approvalService := commonSvc.NewApprovalService(approvalRepo)
if err := approvalService.RegisterWorkflowSteps(utils.ApprovalWorkflowProjectFlockKandang, utils.ProjectFlockKandangApprovalSteps); err != nil { 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) chickinService := sChickin.NewChickinService(chickinRepo, kandangRepo, warehouseRepo, productWarehouseRepo, projectFlockRepo, projectflockkandangrepo, projectflockpopulationrepo, chickinDetailRepo, validate)
@@ -106,7 +106,7 @@ func (u *ProjectFlockKandangController) Closing(c *fiber.Ctx) error {
Code: fiber.StatusOK, Code: fiber.StatusOK,
Status: "success", Status: "success",
Message: "Status closing kandang diperbarui", Message: "Status closing kandang diperbarui",
// Data: dto.ToProjectFlockKandangDetailDTO(*result), // Data: dto.ProjectFlockKandangDetailDTO(*result),
Data: result, Data: result,
}) })
} }
@@ -32,9 +32,9 @@ func (ProjectFlockKandangModule) RegisterRoutes(router fiber.Router, db *gorm.DB
approvalRepo := commonRepo.NewApprovalRepository(db) approvalRepo := commonRepo.NewApprovalRepository(db)
approvalService := commonSvc.NewApprovalService(approvalRepo) 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 { 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) expenseRepo := rExpense.NewExpenseRepository(db)
@@ -2,6 +2,7 @@ package service
import ( import (
"errors" "errors"
"fmt"
"strings" "strings"
"time" "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") 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 closeTime := now
if req.ClosedDate != nil { if req.ClosedDate != nil {
parsed, perr := utils.ParseDateString(strings.TrimSpace(*req.ClosedDate)) 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(), c.Context(),
utils.ApprovalWorkflowProjectFlockKandang, utils.ApprovalWorkflowProjectFlockKandang,
id, id,
utils.ProjectFlockKandangStepDisetujui, utils.ProjectFlockKandangStepClosed,
&closeAction, &closeAction,
actorID, actorID,
nil, nil,
@@ -297,7 +297,8 @@ func (r *projectFlockKandangRepositoryImpl) HasKandangsLinkedToOtherProject(ctx
} }
q := r.db.WithContext(ctx). q := r.db.WithContext(ctx).
Table("project_flock_kandangs"). Table("project_flock_kandangs").
Where("kandang_id IN ?", kandangIDs) Where("kandang_id IN ?", kandangIDs).
Where("closed_at IS NULL")
if exceptProjectID != nil { if exceptProjectID != nil {
q = q.Where("project_flock_id <> ?", *exceptProjectID) q = q.Where("project_flock_id <> ?", *exceptProjectID)
} }
+18 -2
View File
@@ -163,17 +163,33 @@ var ProjectFlockApprovalSteps = map[approvalutils.ApprovalStep]string{
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Project Flock Kandang Approval // Chickin Approval
// ------------------------------------------------------------------- // -------------------------------------------------------------------
const ( 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 ProjectFlockKandangStepPengajuan approvalutils.ApprovalStep = 1
ProjectFlockKandangStepDisetujui approvalutils.ApprovalStep = 2 ProjectFlockKandangStepDisetujui approvalutils.ApprovalStep = 2
ProjectFlockKandangStepClosed approvalutils.ApprovalStep = 3
) )
var ProjectFlockKandangApprovalSteps = map[approvalutils.ApprovalStep]string{ var ProjectFlockKandangApprovalSteps = map[approvalutils.ApprovalStep]string{
ProjectFlockKandangStepPengajuan: "Pengajuan", ProjectFlockKandangStepPengajuan: "Pengajuan",
ProjectFlockKandangStepDisetujui: "Disetujui", ProjectFlockKandangStepDisetujui: "Disetujui",
ProjectFlockKandangStepClosed: "Closed",
} }
// ------------------------------------------------------------------- // -------------------------------------------------------------------