feat:구독관리 탭 실제 구독자 데이터 표시 (sales_contract_products 기반)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -269,7 +269,40 @@ public function customerTab(Request $request): View
|
||||
*/
|
||||
public function subscriptionTab(Request $request): View
|
||||
{
|
||||
return view('finance.settlement.partials.subscription-tab');
|
||||
// subscription_fee > 0인 계약상품이 있는 관리건 조회
|
||||
$query = SalesTenantManagement::with([
|
||||
'tenant', 'tenantProspect', 'salesPartner.user',
|
||||
'manager', 'contractProducts.product', 'contractProducts.category',
|
||||
])
|
||||
->contracted()
|
||||
->whereHas('contractProducts', fn($q) => $q->where('subscription_fee', '>', 0));
|
||||
|
||||
// 검색 필터
|
||||
if ($search = $request->input('search')) {
|
||||
$query->where(function ($q) use ($search) {
|
||||
$q->whereHas('tenant', fn($t) => $t->where('company_name', 'like', "%{$search}%"))
|
||||
->orWhereHas('tenantProspect', fn($t) => $t->where('company_name', 'like', "%{$search}%"));
|
||||
});
|
||||
}
|
||||
|
||||
// 상태 필터
|
||||
if ($status = $request->input('status')) {
|
||||
if ($status !== 'all') {
|
||||
$query->where('status', $status);
|
||||
}
|
||||
}
|
||||
|
||||
$managements = $query->orderBy('contracted_at', 'desc')->get();
|
||||
|
||||
// 통계 계산
|
||||
$stats = [
|
||||
'activeCount' => $managements->count(),
|
||||
'monthlyRecurring' => $managements->sum(fn($m) => $m->contractProducts->sum('subscription_fee')),
|
||||
'totalProducts' => $managements->sum(fn($m) => $m->contractProducts->where('subscription_fee', '>', 0)->count()),
|
||||
];
|
||||
$stats['yearlyRecurring'] = $stats['monthlyRecurring'] * 12;
|
||||
|
||||
return view('finance.settlement.partials.subscription-tab', compact('managements', 'stats'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user