From e7ab3890238f00a6690180918f820420d1d91c3e 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 16:01:07 +0900 Subject: [PATCH] =?UTF-8?q?fix:=EB=8B=A8=EC=B2=B4=20=ED=8C=8C=ED=8A=B8?= =?UTF-8?q?=EB=84=88=20=EC=88=98=EB=8B=B9=20-=201=EC=B0=A8/2=EC=B0=A8=20?= =?UTF-8?q?=EB=82=A9=EC=9E=85=20=EC=8B=9C=20deposit/balance=20=EB=A0=88?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EB=B6=84=EB=A6=AC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존에는 management당 하나의 커미션 레코드만 생성되어 수당리스트에 계약금만 표시됨. 이제 1차 필드(first_*)는 deposit 레코드, 2차 필드(second_*)는 balance 레코드로 분리하여 양쪽 모두 수당리스트에 나타남. Co-Authored-By: Claude Opus 4.6 --- .../Sales/AdminProspectController.php | 82 ++++++++++++++----- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/Sales/AdminProspectController.php b/app/Http/Controllers/Sales/AdminProspectController.php index bd4908c0..3d2239a3 100644 --- a/app/Http/Controllers/Sales/AdminProspectController.php +++ b/app/Http/Controllers/Sales/AdminProspectController.php @@ -29,6 +29,51 @@ private function checkAdminAccess(): void } } + /** + * 필드명에 따라 payment_type 결정 (1차→deposit, 2차→balance) + */ + private function getPaymentTypeForField(string $field): string + { + return in_array($field, ['second_payment_at', 'second_partner_paid_at']) + ? SalesCommission::PAYMENT_BALANCE + : SalesCommission::PAYMENT_DEPOSIT; + } + + /** + * deposit/balance 커미션 레코드를 병합하여 뷰용 객체 반환 + */ + private function loadMergedCommission(?SalesTenantManagement $management): ?object + { + if (!$management) { + return null; + } + + $commissions = SalesCommission::where('management_id', $management->id)->get(); + if ($commissions->isEmpty()) { + return null; + } + + $deposit = $commissions->firstWhere('payment_type', SalesCommission::PAYMENT_DEPOSIT); + $balance = $commissions->firstWhere('payment_type', SalesCommission::PAYMENT_BALANCE); + + // balance 레코드가 없으면 기존 단일 레코드 그대로 반환 (하위호환) + if (!$balance) { + return $deposit ?? $commissions->first(); + } + + // 1차 필드는 deposit, 2차 필드는 balance에서 가져옴 + $merged = new \stdClass(); + $merged->first_payment_at = $deposit?->first_payment_at; + $merged->first_partner_paid_at = $deposit?->first_partner_paid_at; + $merged->second_payment_at = $balance->second_payment_at; + $merged->second_partner_paid_at = $balance->second_partner_paid_at; + $merged->first_subscription_at = $deposit?->first_subscription_at; + $merged->manager_paid_at = $deposit?->manager_paid_at; + $merged->referrer_commission = ($deposit?->referrer_commission ?? 0) + ($balance?->referrer_commission ?? 0); + + return $merged; + } + /** * 전체 고객 목록 페이지 */ @@ -147,12 +192,7 @@ private function getIndexData(Request $request): array $prospect->hq_status_label = $management?->hq_status_label ?? '대기'; $prospect->manager_user = $management?->manager; - if ($management) { - $commission = SalesCommission::where('management_id', $management->id)->first(); - $prospect->commission = $commission; - } else { - $prospect->commission = null; - } + $prospect->commission = $this->loadMergedCommission($management); // 파트너 타입: management → registered_by 순으로 조회 $partnerType = $management?->salesPartner?->partner_type; @@ -199,12 +239,7 @@ private function getIndexData(Request $request): array $prospect->manager_user = $management?->manager; // 수당 정보 (management가 있는 경우) - if ($management) { - $commission = SalesCommission::where('management_id', $management->id)->first(); - $prospect->commission = $commission; - } else { - $prospect->commission = null; - } + $prospect->commission = $this->loadMergedCommission($management); // 파트너 타입: management → registered_by 순으로 조회 $partnerType = $management?->salesPartner?->partner_type; @@ -290,12 +325,16 @@ public function updateCommissionDate(int $id, Request $request) $prospect = TenantProspect::findOrFail($id); $management = SalesTenantManagement::findOrCreateByProspect($prospect->id); - // Commission 레코드 조회 또는 생성 + $field = $request->input('field'); + + // 1차 필드 → deposit 레코드, 2차 필드 → balance 레코드 + $paymentType = $this->getPaymentTypeForField($field); + + // Commission 레코드 조회 또는 생성 (payment_type별 분리) $commission = SalesCommission::firstOrCreate( - ['management_id' => $management->id], + ['management_id' => $management->id, 'payment_type' => $paymentType], [ 'tenant_id' => $prospect->tenant_id ?? 1, - 'payment_type' => 'deposit', 'payment_amount' => 0, 'payment_date' => now(), 'base_amount' => 0, @@ -311,8 +350,6 @@ public function updateCommissionDate(int $id, Request $request) 'manager_user_id' => $management->manager_user_id, ] ); - - $field = $request->input('field'); $date = $request->input('date') ?: now()->format('Y-m-d'); // 수당지급일 필드는 개발상태가 '인계'일 때만 저장 가능 @@ -481,13 +518,18 @@ public function clearCommissionDate(int $id, Request $request) return response()->json(['success' => false, 'message' => '관리 정보가 없습니다.']); } - $commission = SalesCommission::where('management_id', $management->id)->first(); + $field = $request->input('field'); + + // 1차 필드 → deposit 레코드, 2차 필드 → balance 레코드 + $paymentType = $this->getPaymentTypeForField($field); + + $commission = SalesCommission::where('management_id', $management->id) + ->where('payment_type', $paymentType) + ->first(); if (!$commission) { return response()->json(['success' => false, 'message' => '수당 정보가 없습니다.']); } - - $field = $request->input('field'); $updateData = [$field => null]; // 납입일 삭제 시 수당지급일도 함께 초기화