add revision number
This commit is contained in:
@@ -628,7 +628,8 @@ func (s *LetterOutgoingServiceImpl) ApproveOutgoingLetter(ctx context.Context, l
|
||||
return gorm.ErrInvalidData
|
||||
}
|
||||
|
||||
approvals, err := s.processor.GetApprovalsByLetter(ctx, letterID)
|
||||
// Get approvals for the current revision only
|
||||
approvals, err := s.processor.GetApprovalsByLetterAndRevision(ctx, letterID, letter.RevisionNumber)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -651,15 +652,7 @@ func (s *LetterOutgoingServiceImpl) ApproveOutgoingLetter(ctx context.Context, l
|
||||
|
||||
currentApproval.Remarks = req.Remarks
|
||||
|
||||
allApproved := true
|
||||
for _, approval := range approvals {
|
||||
if approval.ID != currentApproval.ID && approval.Status == entities.ApprovalStatusPending {
|
||||
allApproved = false
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
err = s.processor.ProcessApproval(ctx, letterID, currentApproval, userID, allApproved)
|
||||
err = s.processor.ProcessApproval(ctx, letterID, currentApproval, userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -691,7 +684,8 @@ func (s *LetterOutgoingServiceImpl) RejectOutgoingLetter(ctx context.Context, le
|
||||
return gorm.ErrInvalidData
|
||||
}
|
||||
|
||||
approvals, err := s.processor.GetApprovalsByLetter(ctx, letterID)
|
||||
// Get approvals for the current revision only
|
||||
approvals, err := s.processor.GetApprovalsByLetterAndRevision(ctx, letterID, letter.RevisionNumber)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -728,6 +722,35 @@ func (s *LetterOutgoingServiceImpl) RejectOutgoingLetter(ctx context.Context, le
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *LetterOutgoingServiceImpl) ReviseOutgoingLetter(ctx context.Context, letterID uuid.UUID, req *contract.ReviseLetterRequest) error {
|
||||
userID := getUserIDFromContext(ctx)
|
||||
|
||||
letter, err := s.processor.GetOutgoingLetterByID(ctx, letterID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Can only revise rejected letters
|
||||
if letter.Status != entities.LetterOutgoingStatusRejected {
|
||||
return gorm.ErrInvalidData
|
||||
}
|
||||
|
||||
attachment := entities.LetterOutgoingAttachment{
|
||||
LetterID: letterID,
|
||||
FileURL: req.FileURL,
|
||||
FileName: req.FileName,
|
||||
FileType: req.FileType,
|
||||
UploadedBy: &userID,
|
||||
}
|
||||
|
||||
err = s.processor.ProcessRevision(ctx, letterID, attachment, userID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *LetterOutgoingServiceImpl) SendOutgoingLetter(ctx context.Context, letterID uuid.UUID) error {
|
||||
userID := getUserIDFromContext(ctx)
|
||||
|
||||
@@ -968,8 +991,8 @@ func (s *LetterOutgoingServiceImpl) GetLetterApprovalInfo(ctx context.Context, l
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Get all approvals for this letter
|
||||
approvals, err := s.processor.GetApprovalsByLetter(ctx, letterID)
|
||||
// Get all approvals for this letter's current revision
|
||||
approvals, err := s.processor.GetApprovalsByLetterAndRevision(ctx, letterID, letter.RevisionNumber)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1030,6 +1053,15 @@ func (s *LetterOutgoingServiceImpl) GetLetterApprovalInfo(ctx context.Context, l
|
||||
}
|
||||
}
|
||||
|
||||
// Add REVISE action if letter is rejected and user is the creator
|
||||
if letter.Status == entities.LetterOutgoingStatusRejected && letter.CreatedBy == userID {
|
||||
actions = append(actions, contract.ApprovalAction{
|
||||
Type: "REVISE",
|
||||
Href: fmt.Sprintf("/api/v1/letters/outgoing/%s/revise", letterID),
|
||||
Method: "POST",
|
||||
})
|
||||
}
|
||||
|
||||
// Determine overall decision status
|
||||
decisionStatus := "PENDING"
|
||||
|
||||
@@ -1080,8 +1112,8 @@ func (s *LetterOutgoingServiceImpl) GetLetterApprovals(ctx context.Context, lett
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Get all approvals for this letter
|
||||
approvals, err := s.processor.GetApprovalsByLetter(ctx, letterID)
|
||||
// Get all approvals for this letter's current revision
|
||||
approvals, err := s.processor.GetApprovalsByLetterAndRevision(ctx, letterID, letter.RevisionNumber)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -1435,6 +1467,7 @@ func transformLetterToResponse(letter *entities.LetterOutgoing) *contract.Outgoi
|
||||
IssueDate: letter.IssueDate,
|
||||
Status: string(letter.Status),
|
||||
ApprovalFlowID: letter.ApprovalFlowID,
|
||||
RevisionNumber: letter.RevisionNumber,
|
||||
CreatedBy: letter.CreatedBy,
|
||||
CreatedAt: letter.CreatedAt,
|
||||
UpdatedAt: letter.UpdatedAt,
|
||||
@@ -1778,7 +1811,15 @@ func (s *LetterOutgoingServiceImpl) BulkArchiveOutgoingLetters(ctx context.Conte
|
||||
func (s *LetterOutgoingServiceImpl) sendStepApprovalNotifications(ctx context.Context, letterID uuid.UUID, subject string, stepOrder int) {
|
||||
log.Printf("[DEBUG] sendStepApprovalNotifications START - LetterID: %s, StepOrder: %d", letterID.String(), stepOrder)
|
||||
|
||||
approvals, err := s.processor.GetApprovalsByLetter(ctx, letterID)
|
||||
// Get the letter to know the current revision
|
||||
letter, err := s.processor.GetOutgoingLetterByID(ctx, letterID)
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] Failed to get letter: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Get approvals for the current revision only
|
||||
approvals, err := s.processor.GetApprovalsByLetterAndRevision(ctx, letterID, letter.RevisionNumber)
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] Failed to get approvals: %v", err)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user