feat: [approval] 반려 이력 관리 기능 추가
- rejection_history JSON 컬럼으로 반려 이력 누적 저장 - 재상신 시 반려자, 사유, 일시를 이력에 기록 - 상세 페이지에 반려 이력 섹션 표시 (빨간 테두리) - 수정 페이지에 이전 반려 이력 표시 (주황 배경)
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user