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:
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user