diff --git a/app/Models/Approvals/Approval.php b/app/Models/Approvals/Approval.php index 00d59515..e2e3c258 100644 --- a/app/Models/Approvals/Approval.php +++ b/app/Models/Approvals/Approval.php @@ -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', diff --git a/app/Services/ApprovalService.php b/app/Services/ApprovalService.php index 44a97eda..6f795135 100644 --- a/app/Services/ApprovalService.php +++ b/app/Services/ApprovalService.php @@ -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, diff --git a/resources/views/approvals/edit.blade.php b/resources/views/approvals/edit.blade.php index b0146824..2ea279cf 100644 --- a/resources/views/approvals/edit.blade.php +++ b/resources/views/approvals/edit.blade.php @@ -35,6 +35,28 @@ @endif + {{-- 반려 이력 (재상신 문서인 경우) --}} + @if(!empty($approval->rejection_history)) +
+

+ 이전 반려 이력 + {{ count($approval->rejection_history) }}회 +

+
+ @foreach($approval->rejection_history as $history) +
+
+ {{ $history['round'] ?? '-' }}차 + {{ $history['approver_name'] ?? '' }} + {{ $history['rejected_at'] ?? '' }} +
+

{{ $history['comment'] ?? '' }}

+
+ @endforeach +
+
+ @endif +

문서 내용

diff --git a/resources/views/approvals/show.blade.php b/resources/views/approvals/show.blade.php index 91e93c8f..71506fa6 100644 --- a/resources/views/approvals/show.blade.php +++ b/resources/views/approvals/show.blade.php @@ -92,6 +92,31 @@ class="bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded-lg transition
+ {{-- 반려 이력 --}} + @if(!empty($approval->rejection_history)) +
+

+ 반려 이력 + {{ count($approval->rejection_history) }}회 +

+
+ @foreach($approval->rejection_history as $history) +
+
+ {{ $history['round'] ?? '-' }}차 반려 + {{ $history['approver_name'] ?? '' }} + @if(!empty($history['approver_position'])) + {{ $history['approver_position'] }} + @endif + {{ $history['rejected_at'] ?? '' }} +
+

{{ $history['comment'] ?? '' }}

+
+ @endforeach +
+
+ @endif + {{-- 결재 의견 --}} @php $stepsWithComments = $approval->steps->filter(fn($s) => $s->comment);