diff --git a/app/Http/Controllers/Sales/AdminProspectController.php b/app/Http/Controllers/Sales/AdminProspectController.php index c2ac1a1b..944bda33 100644 --- a/app/Http/Controllers/Sales/AdminProspectController.php +++ b/app/Http/Controllers/Sales/AdminProspectController.php @@ -209,6 +209,7 @@ private function getIndexData(Request $request): array 'active' => TenantProspect::where('status', TenantProspect::STATUS_ACTIVE)->count(), 'expired' => TenantProspect::where('status', TenantProspect::STATUS_EXPIRED)->count(), 'converted' => TenantProspect::where('status', TenantProspect::STATUS_CONVERTED)->count(), + 'completed' => TenantProspect::where('status', TenantProspect::STATUS_COMPLETED)->count(), 'progress_complete' => $progressCompleteCount, ]; @@ -334,6 +335,34 @@ public function updateCommissionDate(int $id, Request $request) return response()->json($response); } + /** + * 상태 토글 (영업중 ↔ 완료) + */ + public function toggleStatus(int $id) + { + $this->checkAdminAccess(); + + $prospect = TenantProspect::findOrFail($id); + + if ($prospect->status === TenantProspect::STATUS_ACTIVE) { + $prospect->update(['status' => TenantProspect::STATUS_COMPLETED]); + } elseif ($prospect->status === TenantProspect::STATUS_COMPLETED) { + $prospect->update(['status' => TenantProspect::STATUS_ACTIVE]); + } else { + return response()->json([ + 'success' => false, + 'message' => '영업중 또는 완료 상태만 변경할 수 있습니다.', + ], 422); + } + + return response()->json([ + 'success' => true, + 'status' => $prospect->status, + 'status_label' => $prospect->status_label, + 'status_color' => $prospect->status_color, + ]); + } + /** * 가망고객 삭제 (슈퍼관리자 전용) */ diff --git a/app/Models/Sales/TenantProspect.php b/app/Models/Sales/TenantProspect.php index f196a160..bdb38fbc 100644 --- a/app/Models/Sales/TenantProspect.php +++ b/app/Models/Sales/TenantProspect.php @@ -21,6 +21,7 @@ class TenantProspect extends Model public const STATUS_ACTIVE = 'active'; // 영업권 유효 public const STATUS_EXPIRED = 'expired'; // 영업권 만료 public const STATUS_CONVERTED = 'converted'; // 테넌트 전환 완료 + public const STATUS_COMPLETED = 'completed'; // 영업 완료 public const VALIDITY_MONTHS = 2; // 영업권 유효기간 (개월) public const COOLDOWN_MONTHS = 1; // 재등록 대기 기간 (개월) @@ -101,6 +102,14 @@ public function isConverted(): bool return $this->status === self::STATUS_CONVERTED; } + /** + * 영업 완료 여부 + */ + public function isCompleted(): bool + { + return $this->status === self::STATUS_COMPLETED; + } + /** * 재등록 대기 중 여부 */ @@ -126,6 +135,10 @@ public function getStatusLabelAttribute(): string return '계약완료'; } + if ($this->isCompleted()) { + return '완료'; + } + if ($this->isActive()) { return '영업중'; } @@ -146,6 +159,10 @@ public function getStatusColorAttribute(): string return 'bg-green-100 text-green-800'; } + if ($this->isCompleted()) { + return 'bg-emerald-100 text-emerald-800'; + } + if ($this->isActive()) { return 'bg-blue-100 text-blue-800'; } diff --git a/resources/views/sales/admin-prospects/index.blade.php b/resources/views/sales/admin-prospects/index.blade.php index 3fe372ad..e888147e 100644 --- a/resources/views/sales/admin-prospects/index.blade.php +++ b/resources/views/sales/admin-prospects/index.blade.php @@ -101,6 +101,36 @@ class="refresh-btn inline-flex items-center gap-1.5 px-4 py-2 text-sm text-gray- @push('scripts')