feat:단체(그룹) 수당 체계 통합 (단체 30%, 유치 3%, 매니저 0%)

- SalesPartner: referrer_partner_id, referrer/referredGroups 관계, isGroup() 헬퍼
- SalesCommission: 유치수당 필드, referrerPartner 관계, 지급 추적 메서드
- SalesCommissionService: 단체/개인 분기 수당 계산 로직
- SalesManagerService: 단체 등록 시 수당률 자동 설정
- SalesManagerController: 유형 선택 및 유치 파트너 지정 기능
- 대시보드: 유치수당 카드 표시 및 합산
- UI: purple 색상 처리 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-14 19:42:51 +09:00
parent eafd81d97a
commit f1f31d5f70
8 changed files with 207 additions and 21 deletions

View File

@@ -84,6 +84,15 @@ private function getDashboardData(Request $request): array
: collect();
$myCommissionsAsManager = SalesCommission::forManager($currentUserId)->get();
// 유치수당 계산 (내가 유치 파트너인 건)
$myCommissionsAsReferrer = $partnerId
? SalesCommission::where('referrer_partner_id', $partnerId)->get()
: collect();
$referrerCommissionTotal = $myCommissionsAsReferrer->sum('referrer_commission');
$referrerCommissionPaid = $myCommissionsAsReferrer->where('status', SalesCommission::STATUS_PAID)->sum('referrer_commission');
$referrerCommissionPending = $myCommissionsAsReferrer->where('status', SalesCommission::STATUS_PENDING)->sum('referrer_commission');
$referrerCommissionApproved = $myCommissionsAsReferrer->where('status', SalesCommission::STATUS_APPROVED)->sum('referrer_commission');
// 판매자(영업파트너) 수당 계산
$partnerCommissionTotal = $myCommissionsAsPartner->sum('partner_commission');
$partnerCommissionPaid = $myCommissionsAsPartner->where('status', SalesCommission::STATUS_PAID)->sum('partner_commission');
@@ -102,8 +111,8 @@ private function getDashboardData(Request $request): array
// 통계 데이터 (실제 데이터)
$totalMembershipFee = $myCommissionsAsPartner->sum('payment_amount') + $myCommissionsAsManager->sum('payment_amount');
$totalCommission = $partnerCommissionTotal + $managerCommissionTotal;
$paidCommission = $partnerCommissionPaid + $managerCommissionPaid;
$totalCommission = $partnerCommissionTotal + $managerCommissionTotal + $referrerCommissionTotal;
$paidCommission = $partnerCommissionPaid + $managerCommissionPaid + $referrerCommissionPaid;
$commissionRate = $totalCommission > 0 ? round(($paidCommission / $totalCommission) * 100, 1) : 0;
$stats = [
@@ -139,9 +148,12 @@ private function getDashboardData(Request $request): array
'color' => 'blue',
],
[
'name' => '협업지원금',
'rate' => null, // 메뉴당 2,000원
'amount' => null, // 개발비 완납 시 계산
'name' => '유치수당',
'rate' => 3,
'amount' => $referrerCommissionTotal,
'paid' => $referrerCommissionPaid,
'pending' => $referrerCommissionPending,
'approved' => $referrerCommissionApproved,
'color' => 'purple',
],
];

View File

@@ -4,6 +4,7 @@
use App\Http\Controllers\Controller;
use App\Models\Sales\SalesManagerDocument;
use App\Models\Sales\SalesPartner;
use App\Models\User;
use App\Services\Sales\SalesManagerService;
use Illuminate\Http\Request;
@@ -52,7 +53,13 @@ public function create(): View
// 문서 타입 목록
$documentTypes = SalesManagerDocument::DOCUMENT_TYPES;
return view('sales.managers.create', compact('roles', 'documentTypes'));
// 활성 개인 파트너 목록 (유치 파트너 선택용)
$activePartners = SalesPartner::active()
->with('user')
->where('partner_type', 'individual')
->get();
return view('sales.managers.create', compact('roles', 'documentTypes', 'activePartners'));
}
/**
@@ -71,6 +78,8 @@ public function store(Request $request)
'company_name' => 'nullable|string|max:100',
'biz_no' => 'nullable|string|max:20',
'address' => 'nullable|string|max:255',
'partner_type' => 'nullable|in:individual,corporate',
'referrer_partner_id' => 'nullable|exists:sales_partners,id',
'documents' => 'nullable|array',
'documents.*.file' => 'nullable|file|max:10240',
'documents.*.document_type' => 'nullable|string',