fix projectflock approval with dto

This commit is contained in:
ragilap
2025-12-11 11:27:50 +07:00
parent 3ada837b8b
commit f60564d673
3 changed files with 117 additions and 81 deletions
@@ -432,16 +432,30 @@ func (s projectFlockKandangService) Closing(c *fiber.Ctx, id uint, req *validati
}
if s.ApprovalSvc != nil {
closeAction := entity.ApprovalActionApproved
if _, aerr := s.ApprovalSvc.CreateApproval(
c.Context(),
utils.ApprovalWorkflowProjectFlockKandang,
id,
utils.ProjectFlockKandangStepClosed,
&closeAction,
actorID,
nil,
); aerr != nil {
return nil, aerr
// Hindari duplikasi jika approval terakhir sudah Closed + Approved
latestPFK, lerr := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, id, nil)
if lerr != nil {
return nil, lerr
}
shouldCreate := true
if latestPFK != nil &&
latestPFK.StepNumber == uint16(utils.ProjectFlockKandangStepClosed) &&
latestPFK.Action != nil && *latestPFK.Action == closeAction {
shouldCreate = false
}
if shouldCreate {
if _, aerr := s.ApprovalSvc.CreateApproval(
c.Context(),
utils.ApprovalWorkflowProjectFlockKandang,
id,
utils.ProjectFlockKandangStepClosed,
&closeAction,
actorID,
nil,
); aerr != nil {
return nil, aerr
}
}
// Jika semua kandang dalam project sudah ditutup, set approval project flock ke SELESAI.
@@ -500,17 +514,31 @@ func (s projectFlockKandangService) Closing(c *fiber.Ctx, id uint, req *validati
}
}
if s.ApprovalSvc != nil {
reopenAction := entity.ApprovalActionApproved
if _, aerr := s.ApprovalSvc.CreateApproval(
c.Context(),
utils.ApprovalWorkflowProjectFlockKandang,
id,
utils.ProjectFlockKandangStepDisetujui,
&reopenAction,
actorID,
nil,
); aerr != nil && !errors.Is(aerr, gorm.ErrDuplicatedKey) {
return nil, aerr
reopenAction := entity.ApprovalActionUpdated
// Hindari duplikasi jika approval terakhir sudah Disetujui + Updated
latestPFK, lerr := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, id, nil)
if lerr != nil {
return nil, lerr
}
shouldCreate := true
if latestPFK != nil &&
latestPFK.StepNumber == uint16(utils.ProjectFlockKandangStepDisetujui) &&
latestPFK.Action != nil && *latestPFK.Action == reopenAction {
shouldCreate = false
}
if shouldCreate {
if _, aerr := s.ApprovalSvc.CreateApproval(
c.Context(),
utils.ApprovalWorkflowProjectFlockKandang,
id,
utils.ProjectFlockKandangStepDisetujui,
&reopenAction,
actorID,
nil,
); aerr != nil && !errors.Is(aerr, gorm.ErrDuplicatedKey) {
return nil, aerr
}
}
}
default: