diff --git a/app/Http/Controllers/Sales/SalesDashboardController.php b/app/Http/Controllers/Sales/SalesDashboardController.php index cf111b16..b65d35d7 100644 --- a/app/Http/Controllers/Sales/SalesDashboardController.php +++ b/app/Http/Controllers/Sales/SalesDashboardController.php @@ -255,6 +255,9 @@ private function getDashboardData(Request $request): array ->where('is_active', true) ->get(['id', 'name', 'email']); + // 내가 매니저로만 참여하는 건 (다른 사람이 등록, 내가 매니저) + $managerOnlyProspects = $this->getManagerOnlyProspects($currentUserId); + return compact( 'stats', 'commissionByRole', @@ -265,6 +268,7 @@ private function getDashboardData(Request $request): array 'handoverProspects', 'managements', 'allManagers', + 'managerOnlyProspects', 'period', 'year', 'month', diff --git a/app/Http/Controllers/Sales/SalesScenarioController.php b/app/Http/Controllers/Sales/SalesScenarioController.php index 8a1ad2f4..fee9fe69 100644 --- a/app/Http/Controllers/Sales/SalesScenarioController.php +++ b/app/Http/Controllers/Sales/SalesScenarioController.php @@ -179,6 +179,7 @@ public function prospectSalesScenario(int $prospectId, Request $request): View|R $steps = config('sales_scenario.sales_steps'); $currentStep = (int) $request->input('step', 1); $icons = config('sales_scenario.icons'); + $readonly = $request->boolean('readonly', false); // 가망고객 영업 관리 정보 조회 또는 생성 $management = SalesTenantManagement::findOrCreateByProspect($prospectId); @@ -201,6 +202,7 @@ public function prospectSalesScenario(int $prospectId, Request $request): View|R 'icons' => $icons, 'management' => $management, 'isProspect' => true, + 'readonly' => $readonly, ]); } @@ -213,6 +215,7 @@ public function prospectSalesScenario(int $prospectId, Request $request): View|R 'icons' => $icons, 'management' => $management, 'isProspect' => true, + 'readonly' => $readonly, ]); } diff --git a/resources/views/sales/dashboard/partials/data-container.blade.php b/resources/views/sales/dashboard/partials/data-container.blade.php index 19e96714..ed18ffc6 100644 --- a/resources/views/sales/dashboard/partials/data-container.blade.php +++ b/resources/views/sales/dashboard/partials/data-container.blade.php @@ -78,6 +78,11 @@ class="px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg- +{{-- 매니저로 참여 중인 건 --}} +@if(isset($managerOnlyProspects) && count($managerOnlyProspects) > 0) + @include('sales.dashboard.partials.manager-prospects') +@endif + {{-- 내 계약 현황 --}} @include('sales.dashboard.partials.tenant-list') diff --git a/resources/views/sales/dashboard/partials/manager-prospects.blade.php b/resources/views/sales/dashboard/partials/manager-prospects.blade.php new file mode 100644 index 00000000..2bad97b5 --- /dev/null +++ b/resources/views/sales/dashboard/partials/manager-prospects.blade.php @@ -0,0 +1,144 @@ +{{-- 매니저로 참여 중인 건 --}} +
+
+
+ + + +
+
+

매니저로 참여 중인 건

+

다른 영업파트너가 등록하고 내가 매니저로 지정된 고객

+
+ + {{ count($managerOnlyProspects) }}건 + +
+
+
+ @foreach($managerOnlyProspects as $item) + @php + $prospect = $item['prospect']; + $management = $item['management']; + $registeredBy = $item['registeredBy']; + $progress = $item['progress']; + $hqStatuses = \App\Models\Sales\SalesTenantManagement::$hqStatusLabels; + $hqStatusOrder = \App\Models\Sales\SalesTenantManagement::$hqStatusOrder; + $currentHqStep = $hqStatusOrder[$management->hq_status ?? 'pending'] ?? 0; + $isHqEnabled = $progress['sales']['percentage'] >= 100 && $progress['manager']['percentage'] >= 100; + @endphp +
+
+
+
+

{{ $prospect->company_name }}

+

{{ $prospect->business_number ?? '-' }}

+
+ + 매니저 담당 + +
+
+

등록자

+

{{ $registeredBy?->name ?? '-' }}

+
+
+ + {{-- 시나리오 버튼들 --}} +
+ {{-- 영업 시나리오 (읽기 전용) --}} + + + {{-- 매니저 시나리오 (체크 가능) --}} + +
+ + {{-- 진행률 바 --}} +
+
+
+ 영업 + ({{ $progress['sales']['percentage'] }}%) +
+
+
+
+
+
+
+ 매니저 + {{ $progress['manager']['percentage'] }}% +
+
+
+
+
+
+ + {{-- 개발 진행 상태 (100% 완료 시) --}} + @if($isHqEnabled) +
+
+ 개발 +
+ @foreach($hqStatuses as $statusKey => $statusLabel) + @php + $stepNum = $hqStatusOrder[$statusKey]; + $isCompleted = $stepNum < $currentHqStep; + $isCurrent = $stepNum === $currentHqStep; + @endphp +
+ @endforeach +
+ {{ $management->hq_status_label }} +
+
+ @endif + + {{-- 계약 금액 정보 --}} + @if($item['total_subscription_fee'] > 0) +
+
예상 매니저 수당 (1개월 구독료)
+
{{ number_format($item['total_subscription_fee']) }}원
+
+ @endif +
+ @endforeach +
+ diff --git a/resources/views/sales/modals/scenario-modal.blade.php b/resources/views/sales/modals/scenario-modal.blade.php index 9f19f9a5..3cb77147 100644 --- a/resources/views/sales/modals/scenario-modal.blade.php +++ b/resources/views/sales/modals/scenario-modal.blade.php @@ -4,6 +4,7 @@ $isProspectMode = isset($isProspect) && $isProspect; $entity = $isProspectMode ? $prospect : $tenant; $entityId = $entity->id; + $isReadonly = isset($readonly) && $readonly; @endphp
-

- {{ $scenarioType === 'sales' ? '영업 전략 시나리오' : '매니저 상담 프로세스' }} -

+
+

+ {{ $scenarioType === 'sales' ? '영업 전략 시나리오' : '매니저 상담 프로세스' }} +

+ @if($isReadonly) + 참조용 + @endif +

{{ $entity->company_name }}

diff --git a/resources/views/sales/modals/scenario-step.blade.php b/resources/views/sales/modals/scenario-step.blade.php index b6cd3794..db860d10 100644 --- a/resources/views/sales/modals/scenario-step.blade.php +++ b/resources/views/sales/modals/scenario-step.blade.php @@ -13,6 +13,9 @@ $entity = $isProspectMode ? $prospect : $tenant; $entityId = $entity->id; + // 읽기 전용 모드 확인 + $isReadonly = isset($readonly) && $readonly; + // DB에서 체크된 항목 조회 $checklist = $isProspectMode ? SalesScenarioChecklist::getChecklistByProspect($entityId, $scenarioType) @@ -64,7 +67,9 @@ checked: {{ $isChecked ? 'true' : 'false' }}, isProspect: {{ $isProspectMode ? 'true' : 'false' }}, entityId: {{ $entityId }}, + readonly: {{ $isReadonly ? 'true' : 'false' }}, async toggle() { + if (this.readonly) return; this.checked = !this.checked; try { const url = this.isProspect @@ -114,7 +119,11 @@ class="bg-white border rounded-xl overflow-hidden transition-all duration-200"