diff --git a/app/Http/Controllers/Sales/SalesDashboardController.php b/app/Http/Controllers/Sales/SalesDashboardController.php index 5c659c9d..6e45df69 100644 --- a/app/Http/Controllers/Sales/SalesDashboardController.php +++ b/app/Http/Controllers/Sales/SalesDashboardController.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Controller; use App\Models\Sales\SalesCommission; +use App\Models\Sales\SalesContractProduct; use App\Models\Sales\SalesPartner; use App\Models\Sales\SalesTenantManagement; use App\Models\Sales\TenantProspect; @@ -141,6 +142,46 @@ private function getDashboardData(Request $request): array ], ]; + // === 인계(handover) 완료된 가망고객의 수당 계산 === + // 내가 등록한 가망고객 중 인계 완료된 것들의 계약 금액 조회 + $handoverProspectIds = TenantProspect::whereIn('registered_by', $partnerIds) + ->pluck('id') + ->toArray(); + + // 인계 완료된 가망고객의 management_id 조회 + $handoverManagements = SalesTenantManagement::whereIn('prospect_id', $handoverProspectIds) + ->where('hq_status', SalesTenantManagement::HQ_STATUS_HANDOVER) + ->get(); + + // 인계 완료된 계약의 가입비 합계 + $handoverManagementIds = $handoverManagements->pluck('id')->toArray(); + $handoverTotalRegFee = SalesContractProduct::whereIn('management_id', $handoverManagementIds) + ->sum('registration_fee'); + + // 수당 계산: 가입비 × 50% × 20% = 가입비 × 10% + $handoverPartnerCommission = (int)($handoverTotalRegFee * 0.10); + + // 내가 매니저로 지정된 인계 완료 건의 수당 계산 + $managedHandoverManagements = SalesTenantManagement::where('manager_user_id', $currentUserId) + ->where('hq_status', SalesTenantManagement::HQ_STATUS_HANDOVER) + ->get(); + $managedHandoverManagementIds = $managedHandoverManagements->pluck('id')->toArray(); + $managedHandoverTotalRegFee = SalesContractProduct::whereIn('management_id', $managedHandoverManagementIds) + ->sum('registration_fee'); + + // 매니저 수당: 가입비 × 50% × 5% = 가입비 × 2.5% + $handoverManagerCommission = (int)($managedHandoverTotalRegFee * 0.025); + + // 기존 수당에 인계 완료 수당 추가 + $partnerCommissionTotal += $handoverPartnerCommission; + $managerCommissionTotal += $handoverManagerCommission; + $totalMembershipFee += $handoverTotalRegFee; + $totalCommission = $partnerCommissionTotal + $managerCommissionTotal; + + // 역할별 수당 업데이트 + $commissionByRole[0]['amount'] = $partnerCommissionTotal; + $commissionByRole[1]['amount'] = $managerCommissionTotal; + // 총 가입비 대비 수당 비율 $totalCommissionRatio = $totalMembershipFee > 0 ? round(($totalCommission / $totalMembershipFee) * 100, 1) : 0; @@ -153,27 +194,42 @@ private function getDashboardData(Request $request): array // 2) 내가 매니저로 지정된 tenant_id (5% 수당) $managedTenantIds = SalesTenantManagement::where('manager_user_id', $currentUserId) + ->whereNotNull('tenant_id') ->pluck('tenant_id') ->toArray(); // 두 목록 합치기 (중복 제거) $convertedTenantIds = array_unique(array_merge($registeredTenantIds, $managedTenantIds)); - // 3) 내가 등록한 가망고객 (아직 전환되지 않은 것 - active 상태) + // 3) 인계 완료된 가망고객 ID 조회 + $handoverCompletedProspectIds = SalesTenantManagement::whereNotNull('prospect_id') + ->where('hq_status', SalesTenantManagement::HQ_STATUS_HANDOVER) + ->pluck('prospect_id') + ->toArray(); + + // 4) 내가 등록한 가망고객 (아직 인계 완료되지 않은 것) $prospects = TenantProspect::whereIn('registered_by', $partnerIds) ->whereIn('status', [TenantProspect::STATUS_ACTIVE, TenantProspect::STATUS_EXPIRED]) + ->whereNotIn('id', $handoverCompletedProspectIds) ->orderBy('created_at', 'desc') ->get(); + // 인계 완료된 가망고객 수 + $handoverProspectCount = count($handoverManagementIds); + // 수익 및 테넌트 관리 통계 (실제 데이터) $tenantStats = [ - 'total_tenants' => count($convertedTenantIds), // 관리 테넌트 - 'total_prospects' => $prospects->count(), // 진행중 가망고객 - 'total_membership_revenue' => $totalMembershipFee, // 총 가입비 실적 - 'total_commission_accumulated' => $totalCommission, // 누적 수당 - 'confirmed_commission' => $paidCommission, // 확정(지급완료) 수당 + 'total_tenants' => count($convertedTenantIds) + $handoverProspectCount, // 관리 테넌트 + 인계완료 + 'total_prospects' => $prospects->count(), // 진행중 가망고객 + 'total_membership_revenue' => $totalMembershipFee, // 총 가입비 실적 + 'total_commission_accumulated' => $totalCommission, // 누적 수당 + 'confirmed_commission' => $paidCommission, // 확정(지급완료) 수당 ]; + // 통계 업데이트 + $stats['total_membership_fee'] = $totalMembershipFee; + $stats['total_commission'] = $totalCommission; + // 전환된 테넌트만 조회 (최신순, 페이지네이션) $tenants = Tenant::whereIn('id', $convertedTenantIds) ->orderBy('created_at', 'desc') diff --git a/resources/views/sales/dashboard/partials/stats.blade.php b/resources/views/sales/dashboard/partials/stats.blade.php index 74ed886b..1e030c9a 100644 --- a/resources/views/sales/dashboard/partials/stats.blade.php +++ b/resources/views/sales/dashboard/partials/stats.blade.php @@ -20,8 +20,8 @@ -
{{ $tenants->total() }}개
-등록된 업체 수
+{{ $tenantStats['total_tenants'] ?? 0 }}개
+인계 완료 업체 수