fix:tenant 기반 매니저 지정도 유치 파트너 현황에 표시

- prospect_id가 NULL이고 tenant_id만 있는 매니저 지정도 조회
- type 필드로 prospect/tenant 기반 구분
- tenant 기반은 "계약 고객" 배지로 표시
- 진행률 대신 계약 완료 상태 표시

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-02 14:46:53 +09:00
parent 1c02874982
commit 7e47f086e9
2 changed files with 89 additions and 34 deletions

View File

@@ -623,21 +623,47 @@ private function getPartnerActivitiesDetail($recruitedPartners, int $currentUser
->orderBy('created_at', 'desc')
->get();
// 파트너가 매니저로 참여하는 가망고객 (다른 사람이 등록, 이 파트너가 매니저)
// 파트너가 매니저로 참여하는 (다른 사람이 등록, 이 파트너가 매니저)
$managerProspects = collect();
$managerManagements = SalesTenantManagement::where('manager_user_id', $partner->id)
// 1. prospect 기반 매니저 지정 (가망고객 단계)
$prospectManagements = SalesTenantManagement::where('manager_user_id', $partner->id)
->whereNotNull('tenant_prospect_id')
->with(['tenantProspect.registeredBy'])
->get();
foreach ($managerManagements as $mgmt) {
foreach ($prospectManagements as $mgmt) {
$prospect = $mgmt->tenantProspect;
// 본인이 등록한 건은 제외 (이미 allProspects에 포함됨)
if ($prospect && $prospect->registered_by !== $partner->id) {
$managerProspects->push([
'type' => 'prospect',
'prospect' => $prospect,
'management' => $mgmt,
'registeredBy' => $prospect->registeredBy,
'company_name' => $prospect->company_name,
'business_number' => $prospect->business_number,
]);
}
}
// 2. tenant 기반 매니저 지정 (이미 계약된 테넌트)
$tenantManagements = SalesTenantManagement::where('manager_user_id', $partner->id)
->whereNull('tenant_prospect_id')
->whereNotNull('tenant_id')
->with(['tenant'])
->get();
foreach ($tenantManagements as $mgmt) {
$tenant = $mgmt->tenant;
if ($tenant) {
$managerProspects->push([
'type' => 'tenant',
'tenant' => $tenant,
'management' => $mgmt,
'registeredBy' => null, // 테넌트는 등록자 정보 없음
'company_name' => $tenant->company_name,
'business_number' => $tenant->business_number,
]);
}
}

View File

@@ -279,54 +279,83 @@
<div class="space-y-2">
@foreach($activity['manager_prospects'] as $item)
@php
$mProspect = $item['prospect'];
$mManagement = $item['management'];
$mRegisteredBy = $item['registeredBy'];
$mProgress = \App\Models\Sales\SalesScenarioChecklist::getProspectProgress($mProspect->id);
$mCompanyName = $item['company_name'];
$mBusinessNumber = $item['business_number'];
$mType = $item['type'] ?? 'prospect';
$mHqStatuses = \App\Models\Sales\SalesTenantManagement::$hqStatusLabels;
$mHqStatusOrder = \App\Models\Sales\SalesTenantManagement::$hqStatusOrder;
$mCurrentHqStep = $mHqStatusOrder[$mManagement->hq_status ?? 'pending'] ?? 0;
$isMHqEnabled = $mProgress['sales']['percentage'] >= 100 && $mProgress['manager']['percentage'] >= 100;
// prospect 기반인 경우 진행률 조회
$mProgress = null;
$isMHqEnabled = false;
if ($mType === 'prospect' && isset($item['prospect'])) {
$mProgress = \App\Models\Sales\SalesScenarioChecklist::getProspectProgress($item['prospect']->id);
$isMHqEnabled = $mProgress['sales']['percentage'] >= 100 && $mProgress['manager']['percentage'] >= 100;
} elseif ($mType === 'tenant') {
// tenant 기반은 이미 계약 완료
$isMHqEnabled = true;
}
@endphp
<div class="bg-white rounded-lg p-3 border border-green-200">
<div class="flex items-center justify-between mb-2">
<div>
<p class="font-medium text-gray-900 text-sm">{{ $mProspect->company_name }}</p>
<p class="text-xs text-gray-500">{{ $mProspect->business_number ?? '-' }}</p>
<p class="font-medium text-gray-900 text-sm">{{ $mCompanyName }}</p>
<p class="text-xs text-gray-500">{{ $mBusinessNumber ?? '-' }}</p>
</div>
<div class="flex items-center gap-2">
<span class="px-2 py-0.5 text-xs font-medium rounded-full bg-green-100 text-green-700">
매니저만 진행
</span>
@if($mType === 'tenant')
<span class="px-2 py-0.5 text-xs font-medium rounded-full bg-emerald-100 text-emerald-700">
계약 고객
</span>
@else
<span class="px-2 py-0.5 text-xs font-medium rounded-full bg-green-100 text-green-700">
매니저만 진행
</span>
@endif
</div>
</div>
{{-- 등록자 정보 --}}
<div class="flex items-center gap-2 text-xs text-gray-500 mb-2">
<span>등록자:</span>
<span class="font-medium text-gray-700">{{ $mRegisteredBy?->name ?? '-' }}</span>
</div>
{{-- 영업/매니저 진행률 --}}
<div class="grid grid-cols-2 gap-4">
<div class="opacity-50">
<div class="flex items-center gap-2 mb-1">
<span class="text-xs font-medium text-blue-600">영업</span>
<span class="text-xs text-gray-400">({{ $mProgress['sales']['percentage'] }}%)</span>
@if($mRegisteredBy)
{{-- 등록자 정보 (prospect 기반인 경우) --}}
<div class="flex items-center gap-2 text-xs text-gray-500 mb-2">
<span>등록자:</span>
<span class="font-medium text-gray-700">{{ $mRegisteredBy->name }}</span>
</div>
@endif
@if($mType === 'prospect' && $mProgress)
{{-- 영업/매니저 진행률 (prospect 기반) --}}
<div class="grid grid-cols-2 gap-4">
<div class="opacity-50">
<div class="flex items-center gap-2 mb-1">
<span class="text-xs font-medium text-blue-600">영업</span>
<span class="text-xs text-gray-400">({{ $mProgress['sales']['percentage'] }}%)</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-blue-300 h-2 rounded-full" style="width: {{ $mProgress['sales']['percentage'] }}%"></div>
</div>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-blue-300 h-2 rounded-full" style="width: {{ $mProgress['sales']['percentage'] }}%"></div>
<div>
<div class="flex items-center gap-2 mb-1">
<span class="text-xs font-medium text-green-600">매니저</span>
<span class="text-xs text-gray-500">{{ $mProgress['manager']['percentage'] }}%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-green-500 h-2 rounded-full transition-all" style="width: {{ $mProgress['manager']['percentage'] }}%"></div>
</div>
</div>
</div>
<div>
<div class="flex items-center gap-2 mb-1">
<span class="text-xs font-medium text-green-600">매니저</span>
<span class="text-xs text-gray-500">{{ $mProgress['manager']['percentage'] }}%</span>
</div>
<div class="w-full bg-gray-200 rounded-full h-2">
<div class="bg-green-500 h-2 rounded-full transition-all" style="width: {{ $mProgress['manager']['percentage'] }}%"></div>
</div>
@elseif($mType === 'tenant')
{{-- 계약 고객 상태 표시 --}}
<div class="flex items-center gap-2 text-xs text-emerald-600 mb-2">
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd" />
</svg>
<span class="font-medium">계약 완료 고객</span>
</div>
</div>
{{-- 개발 진행 상태 (100% 완료 ) --}}
@endif
{{-- 개발 진행 상태 --}}
@if($isMHqEnabled)
<div class="mt-2 pt-2 border-t border-gray-100">
<div class="flex items-center gap-2">