From e63b6f151276e9c8f3173e08d36b24bd5195e487 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 19 Feb 2026 13:14:36 +0900 Subject: [PATCH] =?UTF-8?q?feat:=EC=98=81=EC=97=85=ED=8C=8C=ED=8A=B8?= =?UTF-8?q?=EB=84=88=20=EA=B3=A0=EA=B0=9D=EA=B4=80=EB=A6=AC=EC=97=90=20?= =?UTF-8?q?=ED=98=91=EC=97=85=EC=A7=80=EC=9B=90=EA=B8=88=20=EC=88=98?= =?UTF-8?q?=EB=8F=99=20=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 개인 파트너: 협업지원금 금액 수정 가능한 number input 추가 - 단체 파트너: "-" 표시 (자동계산 3% 고정, 수동 수정 불가) - AdminProspectController에 updateReferrerCommission 메서드 추가 - firstOrCreate에 referrer_rate, referrer_commission 필드 추가 Co-Authored-By: Claude Opus 4.6 --- .../Sales/AdminProspectController.php | 61 +++++++++++++++++++ .../sales/admin-prospects/index.blade.php | 36 +++++++++++ .../partials/content.blade.php | 19 +++++- routes/web.php | 1 + 4 files changed, 116 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Sales/AdminProspectController.php b/app/Http/Controllers/Sales/AdminProspectController.php index d21c6045..863fd974 100644 --- a/app/Http/Controllers/Sales/AdminProspectController.php +++ b/app/Http/Controllers/Sales/AdminProspectController.php @@ -149,8 +149,10 @@ private function getIndexData(Request $request): array if ($management) { $commission = SalesCommission::where('management_id', $management->id)->first(); $prospect->commission = $commission; + $prospect->partner_type = $management->salesPartner?->partner_type ?? 'individual'; } else { $prospect->commission = null; + $prospect->partner_type = 'individual'; } } @@ -194,8 +196,10 @@ private function getIndexData(Request $request): array if ($management) { $commission = SalesCommission::where('management_id', $management->id)->first(); $prospect->commission = $commission; + $prospect->partner_type = $management->salesPartner?->partner_type ?? 'individual'; } else { $prospect->commission = null; + $prospect->partner_type = 'individual'; } } } @@ -288,6 +292,8 @@ public function updateCommissionDate(int $id, Request $request) 'manager_rate' => 0, 'partner_commission' => 0, 'manager_commission' => 0, + 'referrer_rate' => 3, + 'referrer_commission' => 0, 'scheduled_payment_date' => now()->addMonth()->day(10), 'status' => SalesCommission::STATUS_PENDING, 'partner_id' => $management->sales_partner_id ?? 0, @@ -391,6 +397,61 @@ public function destroy(int $id) ]); } + /** + * 협업지원금(referrer_commission) 금액 수정 + */ + public function updateReferrerCommission(int $id, Request $request) + { + $this->checkAdminAccess(); + + $request->validate([ + 'amount' => 'required|numeric|min:0', + ]); + + $prospect = TenantProspect::findOrFail($id); + $management = SalesTenantManagement::findOrCreateByProspect($prospect->id); + + // 단체 파트너는 수동 수정 불가 + $partner = $management->salesPartner; + if ($partner && $partner->isGroup()) { + return response()->json([ + 'success' => false, + 'message' => '단체 파트너는 협업지원금을 수동 변경할 수 없습니다.', + ], 422); + } + + // Commission 레코드 조회 또는 생성 + $commission = SalesCommission::firstOrCreate( + ['management_id' => $management->id], + [ + 'tenant_id' => $prospect->tenant_id ?? 1, + 'payment_type' => 'deposit', + 'payment_amount' => 0, + 'payment_date' => now(), + 'base_amount' => 0, + 'partner_rate' => 0, + 'manager_rate' => 0, + 'partner_commission' => 0, + 'manager_commission' => 0, + 'referrer_rate' => 3, + 'referrer_commission' => 0, + 'scheduled_payment_date' => now()->addMonth()->day(10), + 'status' => SalesCommission::STATUS_PENDING, + 'partner_id' => $management->sales_partner_id ?? 0, + 'manager_user_id' => $management->manager_user_id, + ] + ); + + $commission->update([ + 'referrer_commission' => $request->input('amount'), + ]); + + return response()->json([ + 'success' => true, + 'amount' => (int) $commission->referrer_commission, + ]); + } + /** * 수당 날짜 삭제 (초기화) */ diff --git a/resources/views/sales/admin-prospects/index.blade.php b/resources/views/sales/admin-prospects/index.blade.php index 8f7e3fa0..5d4c6467 100644 --- a/resources/views/sales/admin-prospects/index.blade.php +++ b/resources/views/sales/admin-prospects/index.blade.php @@ -336,6 +336,42 @@ function confirmDelete() { }); } +// 협업지원금 저장 +function saveReferrerCommission(prospectId, amount) { + const input = document.querySelector(`input[data-prospect-id="${prospectId}"][data-field="referrer_commission"]`); + const numAmount = parseInt(amount) || 0; + + fetch(`/sales/admin-prospects/${prospectId}/referrer-commission`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content, + 'Accept': 'application/json' + }, + body: JSON.stringify({ amount: numAmount }) + }) + .then(response => response.json()) + .then(result => { + if (result.success && input) { + if (numAmount > 0) { + input.value = result.amount; + input.className = input.className.replace(/text-gray-500 bg-gray-50/g, '').replace(/text-orange-600 font-medium bg-orange-50 border-orange-400/g, ''); + input.classList.add('text-orange-600', 'font-medium', 'bg-orange-50', 'border-orange-400'); + } else { + input.value = ''; + input.className = input.className.replace(/text-orange-600 font-medium bg-orange-50 border-orange-400/g, ''); + input.classList.add('text-gray-500', 'bg-gray-50'); + } + } else if (!result.success) { + alert(result.message || '협업지원금 저장에 실패했습니다.'); + } + }) + .catch(error => { + console.error('Error:', error); + alert('협업지원금 저장 중 오류가 발생했습니다.'); + }); +} + // 인계 상태 체크 (수당지급 필드만) const commissionPaidFields = ['first_partner_paid_at', 'second_partner_paid_at', 'manager_paid_at']; diff --git a/resources/views/sales/admin-prospects/partials/content.blade.php b/resources/views/sales/admin-prospects/partials/content.blade.php index 1f5de4fd..df4c1da4 100644 --- a/resources/views/sales/admin-prospects/partials/content.blade.php +++ b/resources/views/sales/admin-prospects/partials/content.blade.php @@ -93,6 +93,7 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none foc 2차 납입 2차 수당 매니저 수당 + 협업지원금 개발 상태 상태 등록일 @@ -190,6 +191,22 @@ class="w-28 h-7 text-xs px-1 border-2 border-gray-300 rounded {{ $commissionDisa {{ $commissionDisabled ? 'disabled' : '' }} onchange="saveCommissionDate({{ $prospect->id }}, 'manager_paid_at', this.value)"> + {{-- 협업지원금 --}} + + @if(($prospect->partner_type ?? 'individual') !== 'corporate') + + @else + - + @endif +