select('currency_code') ->selectRaw('SUM(amount) as total_amount') ->selectRaw('SUM(settled_amount) as total_settled') ->selectRaw('SUM(amount - settled_amount) as total_balance') ->selectRaw('COUNT(*) as credit_count') ->groupBy('currency_code') ->orderBy('total_balance', 'desc') ->get() ->map(fn ($r) => [ 'currency_code' => $r->currency_code, 'total_amount' => (float) $r->total_amount, 'total_settled' => (float) $r->total_settled, 'total_balance' => (float) $r->total_balance, 'credit_count' => (int) $r->credit_count, ]); // ─── تعداد کل اعتبارهای باز ─── $totalOpenCredits = CustomerCredit::whereIn('status', ['open', 'partially_settled'])->count(); // ─── تعداد مشتریان بدهکار ─── $totalDebtors = CustomerCredit::whereIn('status', ['open', 'partially_settled']) ->distinct('user_id') ->count('user_id'); // ─── ۵ بدهکار برتر (بر اساس مانده کل به ارز) ─── $topDebtors = CustomerCredit::whereIn('customer_credits.status', ['open', 'partially_settled']) ->join('users', 'customer_credits.user_id', '=', 'users.id') ->select( 'users.id as user_id', 'users.name as user_name', 'users.phone as user_phone', DB::raw('COUNT(customer_credits.id) as credit_count'), DB::raw('GROUP_CONCAT(DISTINCT customer_credits.currency_code) as currencies'), DB::raw('SUM(customer_credits.amount - customer_credits.settled_amount) as total_balance_sum'), DB::raw('MAX(customer_credits.granted_at) as latest_grant') ) ->groupBy('users.id', 'users.name', 'users.phone') ->orderBy('total_balance_sum', 'desc') ->limit(5) ->get(); return [ 'currencySummary' => $currencySummary, 'totalOpenCredits' => $totalOpenCredits, 'totalDebtors' => $totalDebtors, 'topDebtors' => $topDebtors, 'hasDebts' => $currencySummary->isNotEmpty(), ]; } }