From e006f254278ebb5ec63ca45fc8301f94680ae321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Wed, 4 Mar 2026 20:29:25 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[approval]=20=EC=A7=80=EC=B6=9C?= =?UTF-8?q?=EA=B2=B0=EC=9D=98=EC=84=9C=20=EB=B2=95=EC=9D=B8=EC=B9=B4?= =?UTF-8?q?=EB=93=9C/=EC=86=A1=EA=B8=88=20=EA=B3=84=EC=A2=8C=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 법인카드 선택 시 카드 목록 패널 슬라이드-다운 표시 - 송금 선택 시 출금 계좌 목록 표시, 대표계좌 자동 선택 - 선택된 카드/계좌 정보를 content JSON에 스냅샷 저장 - 상세 페이지에서 선택된 카드/계좌 정보 읽기전용 표시 --- app/Http/Controllers/ApprovalController.php | 26 +++- resources/views/approvals/create.blade.php | 6 +- resources/views/approvals/edit.blade.php | 2 + .../partials/_expense-form.blade.php | 111 +++++++++++++++++- .../partials/_expense-show.blade.php | 36 ++++++ 5 files changed, 176 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/ApprovalController.php b/app/Http/Controllers/ApprovalController.php index 21ac1a42..4b75d2be 100644 --- a/app/Http/Controllers/ApprovalController.php +++ b/app/Http/Controllers/ApprovalController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Models\Finance\BankAccount; +use App\Models\Finance\CorporateCard; use App\Services\ApprovalService; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -36,8 +38,9 @@ public function create(Request $request): View|Response $forms = $this->service->getApprovalForms(); $lines = $this->service->getApprovalLines(); + [$cards, $accounts] = $this->getCardAndAccountData(); - return view('approvals.create', compact('forms', 'lines')); + return view('approvals.create', compact('forms', 'lines', 'cards', 'accounts')); } /** @@ -57,8 +60,9 @@ public function edit(Request $request, int $id): View|Response $forms = $this->service->getApprovalForms(); $lines = $this->service->getApprovalLines(); + [$cards, $accounts] = $this->getCardAndAccountData(); - return view('approvals.edit', compact('approval', 'forms', 'lines')); + return view('approvals.edit', compact('approval', 'forms', 'lines', 'cards', 'accounts')); } /** @@ -110,4 +114,22 @@ public function completed(Request $request): View|Response return view('approvals.completed'); } + + private function getCardAndAccountData(): array + { + $tenantId = session('selected_tenant_id'); + + $cards = CorporateCard::forTenant($tenantId) + ->active() + ->select('id', 'card_name', 'card_company', 'card_number', 'card_holder_name') + ->get(); + + $accounts = BankAccount::where('tenant_id', $tenantId) + ->active() + ->ordered() + ->select('id', 'bank_name', 'account_number', 'account_holder', 'is_primary') + ->get(); + + return [$cards, $accounts]; + } } diff --git a/resources/views/approvals/create.blade.php b/resources/views/approvals/create.blade.php index e2e70d0c..428b58a8 100644 --- a/resources/views/approvals/create.blade.php +++ b/resources/views/approvals/create.blade.php @@ -82,7 +82,11 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:outline- {{-- 지출결의서 전용 폼 --}} - @include('approvals.partials._expense-form', ['initialData' => []]) + @include('approvals.partials._expense-form', [ + 'initialData' => [], + 'cards' => $cards ?? collect(), + 'accounts' => $accounts ?? collect(), + ]) {{-- 액션 버튼 --}}
diff --git a/resources/views/approvals/edit.blade.php b/resources/views/approvals/edit.blade.php index 5ed73930..b0146824 100644 --- a/resources/views/approvals/edit.blade.php +++ b/resources/views/approvals/edit.blade.php @@ -124,6 +124,8 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg text-sm focus:outline- @include('approvals.partials._expense-form', [ 'initialData' => $approval->content ?? [], 'initialFiles' => $existingFiles, + 'cards' => $cards ?? collect(), + 'accounts' => $accounts ?? collect(), ]) {{-- 액션 버튼 --}} diff --git a/resources/views/approvals/partials/_expense-form.blade.php b/resources/views/approvals/partials/_expense-form.blade.php index 0bad50d7..d3f6d0c2 100644 --- a/resources/views/approvals/partials/_expense-form.blade.php +++ b/resources/views/approvals/partials/_expense-form.blade.php @@ -3,15 +3,20 @@ Props: $initialData (array|null) - 기존 content JSON (edit 시) $initialFiles (array|null) - 기존 첨부파일 [{id, name, size, mime_type}] (edit 시) + $cards (Collection|null) - 법인카드 목록 + $accounts (Collection|null) - 회사 계좌 목록 --}} @php $initialData = $initialData ?? []; $initialFiles = $initialFiles ?? []; + $cards = $cards ?? collect(); + $accounts = $accounts ?? collect(); $userName = auth()->user()->name ?? ''; @endphp
+ {{-- 법인카드 선택 패널 --}} +
+
+ + +
+ +
+
+
+ + {{-- 송금 계좌 선택 패널 --}} +
+
+ + +
+ +
+
+
+ {{-- 세금계산서 --}}
@@ -207,7 +281,7 @@ class="border-2 border-dashed rounded-lg p-4 text-center transition-colors curso