diff --git a/app/Http/Controllers/Sales/SalesDashboardController.php b/app/Http/Controllers/Sales/SalesDashboardController.php index 1bd093c2..6071f138 100644 --- a/app/Http/Controllers/Sales/SalesDashboardController.php +++ b/app/Http/Controllers/Sales/SalesDashboardController.php @@ -139,7 +139,10 @@ private function getDashboardData(Request $request): array 'approved' => $partnerCommissionApproved, 'color' => 'green', ], - [ + ]; + + if (!$isGroupPartner) { + $commissionByRole[] = [ 'name' => '관리자', 'rate' => null, // 1개월 구독료 (퍼센트가 아닌 고정 금액) 'rate_label' => '1개월 구독료', @@ -148,8 +151,8 @@ private function getDashboardData(Request $request): array 'pending' => $managerCommissionPending, 'approved' => $managerCommissionApproved, 'color' => 'blue', - ], - [ + ]; + $commissionByRole[] = [ 'name' => '협업지원금', 'rate' => 3, 'amount' => $referrerCommissionTotal, @@ -157,8 +160,8 @@ private function getDashboardData(Request $request): array 'pending' => $referrerCommissionPending, 'approved' => $referrerCommissionApproved, 'color' => 'purple', - ], - ]; + ]; + } // === 인계(handover) 완료된 가망고객의 수당 계산 === // 내가 등록한 가망고객 중 인계 완료된 것들의 계약 금액 조회 @@ -199,7 +202,9 @@ private function getDashboardData(Request $request): array // 역할별 수당 업데이트 (실제 지급된 수당 기준) // 참고: 예상 수당은 나중에 $totalExpectedCommission으로 별도 계산됨 $commissionByRole[0]['amount'] = $partnerCommissionTotal; - $commissionByRole[1]['amount'] = $managerCommissionTotal; + if (!$isGroupPartner) { + $commissionByRole[1]['amount'] = $managerCommissionTotal; + } // 총 개발비 대비 수당 비율 $totalCommissionRatio = $totalMembershipFee > 0 ? round(($totalCommission / $totalMembershipFee) * 100, 1) : 0; @@ -345,6 +350,7 @@ private function getDashboardData(Request $request): array 'allManagers', 'managerOnlyProspects', 'commissionSummary', + 'isGroupPartner', 'period', 'year', 'month', diff --git a/app/Http/Controllers/Sales/SalesManagerController.php b/app/Http/Controllers/Sales/SalesManagerController.php index 1ad4d605..c75b62f3 100644 --- a/app/Http/Controllers/Sales/SalesManagerController.php +++ b/app/Http/Controllers/Sales/SalesManagerController.php @@ -47,6 +47,10 @@ public function index(Request $request): View|Response */ public function create(): View { + if (auth()->user()->isGroupPartner()) { + abort(403, '단체 파트너는 하위 파트너를 등록할 수 없습니다.'); + } + // 영업 역할 목록 $roles = $this->service->getSalesRoles(); @@ -61,6 +65,10 @@ public function create(): View */ public function store(Request $request) { + if (auth()->user()->isGroupPartner()) { + abort(403, '단체 파트너는 하위 파트너를 등록할 수 없습니다.'); + } + $validated = $request->validate([ 'user_id' => 'nullable|string|max:50|unique:users,user_id', 'name' => 'required|string|max:100', diff --git a/app/Models/User.php b/app/Models/User.php index e6eff6db..f8786e18 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -104,6 +104,14 @@ public function salesPartner(): HasOne return $this->hasOne(\App\Models\Sales\SalesPartner::class, 'user_id'); } + /** + * 단체(corporate) 파트너 여부 확인 + */ + public function isGroupPartner(): bool + { + return $this->salesPartner && $this->salesPartner->isGroup(); + } + /** * 영업파트너 첨부 서류 */ diff --git a/app/Services/SidebarMenuService.php b/app/Services/SidebarMenuService.php index 50ee70ba..58f202d6 100644 --- a/app/Services/SidebarMenuService.php +++ b/app/Services/SidebarMenuService.php @@ -50,6 +50,11 @@ public function getUserMenuTree(?User $user = null): Collection return false; } + // 단체 파트너에게 숨길 메뉴 체크 + if ($menu->getOption('hide_for_group_partner') && $user?->salesPartner?->isGroup()) { + return false; + } + // 부서 권한 체크: 허용된 메뉴 ID만 표시 return in_array($menu->id, $permittedMenuIds); }); diff --git a/resources/views/sales/dashboard/index.blade.php b/resources/views/sales/dashboard/index.blade.php index 6d17bcc3..373952ca 100644 --- a/resources/views/sales/dashboard/index.blade.php +++ b/resources/views/sales/dashboard/index.blade.php @@ -64,6 +64,7 @@ class="whitespace-nowrap py-3 px-1 border-b-2 font-medium text-sm transition-col 내 활동 + @unless($isGroupPartner ?? false) + @unless($isGroupPartner ?? false) + @endunless @@ -123,6 +127,7 @@ class="refresh-btn inline-flex items-center gap-1.5 px-3 py-1.5 text-sm text-gra + @unless($isGroupPartner ?? false)
@@ -136,6 +141,7 @@ class="refresh-btn inline-flex items-center gap-1.5 px-3 py-1.5 text-sm text-gra
+ @endunless {{-- 시나리오 모달용 포털 --}} diff --git a/resources/views/sales/dashboard/partials/commission-by-role.blade.php b/resources/views/sales/dashboard/partials/commission-by-role.blade.php index 85fa6160..2fb558d6 100644 --- a/resources/views/sales/dashboard/partials/commission-by-role.blade.php +++ b/resources/views/sales/dashboard/partials/commission-by-role.blade.php @@ -7,7 +7,7 @@

역할별 수당 상세

-
+
@foreach($commissionByRole as $role)
영업파트너 관리

영업파트너의 등록, 승인, 역할을 관리합니다

+ @unless(auth()->user()->isGroupPartner()) @@ -17,6 +18,7 @@ class="bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg transition 파트너 등록 + @endunless