feat:대시보드 통계를 실제 데이터로 구현
- 총 가입비, 총 수당, 지급 완료 비율 등 실제 계산 - 판매자(20%) / 매니저(5%) 역할별 수당 상세 - 영업파트너로서의 수당 + 매니저로서의 수당 모두 집계 - 테넌트 통계 (관리 테넌트 수, 누적 수당, 확정 수당) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\Sales;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Sales\SalesCommission;
|
||||
use App\Models\Sales\SalesPartner;
|
||||
use App\Models\Sales\SalesTenantManagement;
|
||||
use App\Models\Sales\TenantProspect;
|
||||
@@ -64,28 +65,71 @@ private function getDashboardData(Request $request): array
|
||||
$endDate = now()->endOfMonth()->format('Y-m-d');
|
||||
}
|
||||
|
||||
// 통계 데이터 (임시 데이터 - 추후 실제 데이터로 교체)
|
||||
$currentUserId = auth()->id();
|
||||
$childrenIds = auth()->user()->children()->pluck('id')->toArray();
|
||||
$partnerIds = array_merge([$currentUserId], $childrenIds);
|
||||
|
||||
// 현재 사용자의 영업파트너 정보 조회
|
||||
$partner = SalesPartner::where('user_id', $currentUserId)->first();
|
||||
$partnerId = $partner?->id;
|
||||
|
||||
// 나와 관련된 모든 수당 조회 (영업파트너로서 + 매니저로서)
|
||||
$myCommissionsAsPartner = $partnerId
|
||||
? SalesCommission::forPartner($partnerId)->get()
|
||||
: collect();
|
||||
$myCommissionsAsManager = SalesCommission::forManager($currentUserId)->get();
|
||||
|
||||
// 판매자(영업파트너) 수당 계산
|
||||
$partnerCommissionTotal = $myCommissionsAsPartner->sum('partner_commission');
|
||||
$partnerCommissionPaid = $myCommissionsAsPartner->where('status', SalesCommission::STATUS_PAID)->sum('partner_commission');
|
||||
$partnerCommissionPending = $myCommissionsAsPartner->where('status', SalesCommission::STATUS_PENDING)->sum('partner_commission');
|
||||
$partnerCommissionApproved = $myCommissionsAsPartner->where('status', SalesCommission::STATUS_APPROVED)->sum('partner_commission');
|
||||
|
||||
// 매니저 수당 계산
|
||||
$managerCommissionTotal = $myCommissionsAsManager->sum('manager_commission');
|
||||
$managerCommissionPaid = $myCommissionsAsManager->where('status', SalesCommission::STATUS_PAID)->sum('manager_commission');
|
||||
$managerCommissionPending = $myCommissionsAsManager->where('status', SalesCommission::STATUS_PENDING)->sum('manager_commission');
|
||||
$managerCommissionApproved = $myCommissionsAsManager->where('status', SalesCommission::STATUS_APPROVED)->sum('manager_commission');
|
||||
|
||||
// 총 수당 계산 (중복 제거: 동일 commission에서 partner + manager인 경우)
|
||||
$allCommissionIds = $myCommissionsAsPartner->pluck('id')->merge($myCommissionsAsManager->pluck('id'))->unique();
|
||||
$totalContracts = $allCommissionIds->count();
|
||||
|
||||
// 통계 데이터 (실제 데이터)
|
||||
$totalMembershipFee = $myCommissionsAsPartner->sum('payment_amount') + $myCommissionsAsManager->sum('payment_amount');
|
||||
$totalCommission = $partnerCommissionTotal + $managerCommissionTotal;
|
||||
$paidCommission = $partnerCommissionPaid + $managerCommissionPaid;
|
||||
$commissionRate = $totalCommission > 0 ? round(($paidCommission / $totalCommission) * 100, 1) : 0;
|
||||
|
||||
$stats = [
|
||||
'total_membership_fee' => 0, // 총 가입비
|
||||
'total_commission' => 0, // 총 수당
|
||||
'commission_rate' => 0, // 지급 승인 완료 비율
|
||||
'total_contracts' => 0, // 전체 건수
|
||||
'pending_membership_approval' => 0, // 가입 승인 대기
|
||||
'pending_payment_approval' => 0, // 지급 승인 대기
|
||||
'total_membership_fee' => $totalMembershipFee, // 총 가입비
|
||||
'total_commission' => $totalCommission, // 총 수당
|
||||
'commission_rate' => $commissionRate, // 지급 완료 비율
|
||||
'total_contracts' => $totalContracts, // 전체 건수
|
||||
'pending_membership_approval' => $myCommissionsAsPartner->where('status', SalesCommission::STATUS_PENDING)->count()
|
||||
+ $myCommissionsAsManager->where('status', SalesCommission::STATUS_PENDING)->count(),
|
||||
'pending_payment_approval' => $myCommissionsAsPartner->where('status', SalesCommission::STATUS_APPROVED)->count()
|
||||
+ $myCommissionsAsManager->where('status', SalesCommission::STATUS_APPROVED)->count(),
|
||||
];
|
||||
|
||||
// 역할별 수당 상세
|
||||
// 역할별 수당 상세 (실제 데이터)
|
||||
$commissionByRole = [
|
||||
[
|
||||
'name' => '판매자',
|
||||
'rate' => 20,
|
||||
'amount' => 0,
|
||||
'amount' => $partnerCommissionTotal,
|
||||
'paid' => $partnerCommissionPaid,
|
||||
'pending' => $partnerCommissionPending,
|
||||
'approved' => $partnerCommissionApproved,
|
||||
'color' => 'green',
|
||||
],
|
||||
[
|
||||
'name' => '관리자',
|
||||
'rate' => 5,
|
||||
'amount' => 0,
|
||||
'amount' => $managerCommissionTotal,
|
||||
'paid' => $managerCommissionPaid,
|
||||
'pending' => $managerCommissionPending,
|
||||
'approved' => $managerCommissionApproved,
|
||||
'color' => 'blue',
|
||||
],
|
||||
[
|
||||
@@ -96,23 +140,8 @@ private function getDashboardData(Request $request): array
|
||||
],
|
||||
];
|
||||
|
||||
// 총 가입비 대비 수당
|
||||
$totalCommissionRatio = 0;
|
||||
|
||||
// 수익 및 테넌트 관리 통계 (임시 데이터 - 추후 실제 데이터로 교체)
|
||||
$tenantStats = [
|
||||
'total_tenants' => 0, // 관리 테넌트
|
||||
'total_membership_revenue' => 0, // 총 가입비 실적
|
||||
'total_commission_accumulated' => 0, // 누적 가입비 수당
|
||||
'confirmed_commission' => 0, // 확정 가입비 수당
|
||||
];
|
||||
|
||||
// 테넌트 목록 (나와 연결된 계약만)
|
||||
// 1. 내가 등록하거나 내 하위 영업파트너가 등록한 가망고객
|
||||
// 2. 내가 매니저로 지정된 계약
|
||||
$currentUserId = auth()->id();
|
||||
$childrenIds = auth()->user()->children()->pluck('id')->toArray();
|
||||
$partnerIds = array_merge([$currentUserId], $childrenIds);
|
||||
// 총 가입비 대비 수당 비율
|
||||
$totalCommissionRatio = $totalMembershipFee > 0 ? round(($totalCommission / $totalMembershipFee) * 100, 1) : 0;
|
||||
|
||||
// 1) 내가 등록한 가망고객에서 전환된 tenant_id (20% 수당)
|
||||
$registeredTenantIds = TenantProspect::whereNotNull('tenant_id')
|
||||
@@ -129,6 +158,14 @@ private function getDashboardData(Request $request): array
|
||||
// 두 목록 합치기 (중복 제거)
|
||||
$convertedTenantIds = array_unique(array_merge($registeredTenantIds, $managedTenantIds));
|
||||
|
||||
// 수익 및 테넌트 관리 통계 (실제 데이터)
|
||||
$tenantStats = [
|
||||
'total_tenants' => count($convertedTenantIds), // 관리 테넌트
|
||||
'total_membership_revenue' => $totalMembershipFee, // 총 가입비 실적
|
||||
'total_commission_accumulated' => $totalCommission, // 누적 수당
|
||||
'confirmed_commission' => $paidCommission, // 확정(지급완료) 수당
|
||||
];
|
||||
|
||||
// 전환된 테넌트만 조회 (최신순, 페이지네이션)
|
||||
$tenants = Tenant::whereIn('id', $convertedTenantIds)
|
||||
->orderBy('created_at', 'desc')
|
||||
|
||||
Reference in New Issue
Block a user