feat: [approval] 반려 이력 관리 기능 추가

- rejection_history JSON 컬럼으로 반려 이력 누적 저장
- 재상신 시 반려자, 사유, 일시를 이력에 기록
- 상세 페이지에 반려 이력 섹션 표시 (빨간 테두리)
- 수정 페이지에 이전 반려 이력 표시 (주황 배경)
This commit is contained in:
김보곤
2026-03-05 13:50:45 +09:00
parent 5fd69830ca
commit 9727a092e6
4 changed files with 65 additions and 1 deletions

View File

@@ -23,6 +23,7 @@ class Approval extends Model
'drafter_read_at' => 'datetime',
'current_step' => 'integer',
'resubmit_count' => 'integer',
'rejection_history' => 'array',
'is_urgent' => 'boolean',
];
@@ -43,6 +44,7 @@ class Approval extends Model
'drafter_read_at',
'current_step',
'resubmit_count',
'rejection_history',
'attachments',
'recall_reason',
'parent_doc_id',

View File

@@ -243,9 +243,24 @@ public function submit(int $id): Approval
throw new \InvalidArgumentException('결재선을 설정해주세요.');
}
// 반려 후 재상신이면 모든 step 초기화 + 재상신 카운트 증가
// 반려 후 재상신이면 반려 이력 저장 + 모든 step 초기화 + 재상신 카운트 증가
$isResubmit = $approval->status === Approval::STATUS_REJECTED;
if ($isResubmit) {
// 반려 이력 저장
$rejectedStep = $approval->steps
->firstWhere('status', ApprovalStep::STATUS_REJECTED);
if ($rejectedStep) {
$history = $approval->rejection_history ?? [];
$history[] = [
'round' => $approval->resubmit_count + 1,
'approver_name' => $rejectedStep->approver_name ?? ($rejectedStep->approver?->name ?? ''),
'approver_position' => $rejectedStep->approver_position ?? '',
'comment' => $rejectedStep->comment,
'rejected_at' => $rejectedStep->acted_at?->format('Y-m-d H:i:s'),
];
$approval->rejection_history = $history;
}
$approval->steps()->update([
'status' => ApprovalStep::STATUS_PENDING,
'comment' => null,