diff --git a/internal/modules/production/project_flocks/dto/projectflock.dto.go b/internal/modules/production/project_flocks/dto/projectflock.dto.go index da175b61..509da63d 100644 --- a/internal/modules/production/project_flocks/dto/projectflock.dto.go +++ b/internal/modules/production/project_flocks/dto/projectflock.dto.go @@ -120,6 +120,11 @@ func ToProjectFlockListDTOWithPeriod(e entity.ProjectFlock, period int) ProjectF locationSummary = &mapped } + // Jika period tidak di-pass secara eksplisit (0), derive dari KandangHistory + if period == 0 && len(e.KandangHistory) > 0 { + period = e.KandangHistory[0].Period + } + latestApproval := defaultProjectFlockLatestApproval(e) if e.LatestApproval != nil { snapshot := approvalDTO.ToApprovalDTO(*e.LatestApproval) diff --git a/internal/modules/production/project_flocks/services/projectflock.service.go b/internal/modules/production/project_flocks/services/projectflock.service.go index 3017f49a..ce92d428 100644 --- a/internal/modules/production/project_flocks/services/projectflock.service.go +++ b/internal/modules/production/project_flocks/services/projectflock.service.go @@ -374,19 +374,32 @@ func (s *projectflockService) CreateOne(c *fiber.Ctx, req *validation.Create) (* err = s.Repository.DB().WithContext(c.Context()).Transaction(func(dbTransaction *gorm.DB) error { projectRepo := repository.NewProjectflockRepository(dbTransaction) - periods, err := projectRepo.GetNextPeriodsForKandangs(c.Context(), kandangIDs) - if err != nil { - return err - } - - maxPeriod := 1 - for _, p := range periods { - if p > maxPeriod { - maxPeriod = p + var periods map[uint]int + if req.Periode != nil { + // Pakai periode yang diminta untuk semua kandang + periods = make(map[uint]int, len(kandangIDs)) + for _, kandangID := range kandangIDs { + periods[kandangID] = *req.Periode + } + } else { + periods, err = projectRepo.GetNextPeriodsForKandangs(c.Context(), kandangIDs) + if err != nil { + return err } } - generatedName, _, err := s.generateSequentialFlockName(c.Context(), projectRepo, canonicalBase, maxPeriod, nil) + startPeriod := 1 + if req.Periode != nil { + startPeriod = *req.Periode + } else { + for _, p := range periods { + if p > startPeriod { + startPeriod = p + } + } + } + + generatedName, _, err := s.generateSequentialFlockName(c.Context(), projectRepo, canonicalBase, startPeriod, nil) if err != nil { return err } diff --git a/internal/modules/production/project_flocks/validations/projectflock.validation.go b/internal/modules/production/project_flocks/validations/projectflock.validation.go index d74e3637..1f65a4ed 100644 --- a/internal/modules/production/project_flocks/validations/projectflock.validation.go +++ b/internal/modules/production/project_flocks/validations/projectflock.validation.go @@ -6,6 +6,7 @@ type Create struct { Category string `json:"category" validate:"required_strict"` ProductionStandardId uint `json:"production_standard_id" validate:"required_strict,number,gt=0"` LocationId uint `json:"location_id" validate:"required_strict,number,gt=0"` + Periode *int `json:"periode" validate:"omitempty,gt=0"` KandangIds []uint `json:"kandang_ids" validate:"required,min=1,dive,gt=0"` ProjectBudgets []ProjectBudget `json:"project_budgets" validate:"required,min=1,dive"` }