This commit is contained in:
Aditya Siregar
2025-10-20 00:32:53 +07:00
parent 7463a86299
commit 92aba06d67
2 changed files with 86 additions and 24 deletions
@@ -573,12 +573,47 @@ func (p *LetterOutgoingProcessorImpl) getApprovalsByStepForRevision(ctx context.
}
// isStepCompleted checks if all required approvals in a step are approved
// For parallel groups, at least one approval per group must be completed
func (p *LetterOutgoingProcessorImpl) isStepCompleted(stepApprovals []entities.LetterOutgoingApproval) bool {
// Group approvals by parallel group
approvalsByParallelGroup := make(map[int][]entities.LetterOutgoingApproval)
for _, approval := range stepApprovals {
if approval.IsRequired && approval.Status != entities.ApprovalStatusApproved {
approvalsByParallelGroup[approval.ParallelGroup] = append(
approvalsByParallelGroup[approval.ParallelGroup],
approval,
)
}
// Check each parallel group
for _, groupApprovals := range approvalsByParallelGroup {
// For each parallel group, check if it has at least one approved
groupHasApproval := false
hasRequiredPending := false
for _, approval := range groupApprovals {
if approval.Status == entities.ApprovalStatusApproved {
groupHasApproval = true
}
if approval.IsRequired && approval.Status != entities.ApprovalStatusApproved {
hasRequiredPending = true
}
}
// If this group has required approvals that are still pending, step is not complete
if hasRequiredPending {
return false
}
// If this group has no approvals at all and contains required approvals, step is not complete
if !groupHasApproval {
for _, approval := range groupApprovals {
if approval.IsRequired {
return false
}
}
}
}
return true
}