@extends('layouts.finance') @section('title', 'Dashboard') @section('subtitle', 'Consolidated view across US, Pakistan & Australia') @section('content') @php $settings = $data['settings']; $accounts = $data['bank_accounts']; $walletAccounts = $accounts->filter(fn($account) => trim((string) ($account->transaction_category ?? '')) === 'Wallets'); $usAccounts = $accounts ->where('currency', 'USD') ->reject(fn($account) => trim((string) ($account->transaction_category ?? '')) === 'Wallets'); $pkAccounts = $accounts->where('currency', 'PKR'); $auAccounts = $accounts->where('currency', 'AUD'); $cards = $data['credit_cards']; $inventoryProducts = $data['inventory_products'] ?? collect(); $inventoryUnits = $inventoryProducts->sum(fn($p) => $p->stock); $kpis = $data['kpis']; $kuickpayToday = $data['kuickpay_today'] ?? ['total' => 0, 'count' => 0, 'fee' => 0, 'payout_date' => null, 'received' => false]; $kuickpayPendingYesterday = $data['kuickpay_pending_yesterday'] ?? ['date' => null, 'remaining' => 0, 'net' => 0, 'fee' => 0, 'gross' => 0, 'status' => null]; $kuickpayBacklog = $data['kuickpay_pending_backlog'] ?? ['total' => 0, 'count' => 0]; $verification = $data['verification'] ?? [ 'currency' => 'PKR', 'business_total' => 0, 'business_total_before_liabilities' => 0, 'inventory_amount' => 0, 'lent_amount' => 0, 'transit_amount' => 0, 'credit_card_debt' => 0, 'loan_debt' => 0, 'liabilities_total' => 0, 'bank_balance' => 0, 'kuickpay_today_amount' => 0, 'kuickpay_today_fee' => 0, 'kuickpay_today_net' => 0, 'store_credit_amount' => 0, 'store_credit_source' => null, 'kuickpay_pending_balance' => 0, 'kuickpay_pending_gross' => 0, ]; $displayCurrency = 'PKR'; $displayMoney = fn($amount) => $metrics->moneyIn($amount, 'USD', $displayCurrency); $agentPointCards = app(\App\Support\AgentPointsReportService::class)->dashboardCards(); $kuickpayPendingTotal = (float) ($verification['kuickpay_pending_balance'] ?? (($kuickpayPendingYesterday['remaining'] ?? 0) + ($kuickpayBacklog['total'] ?? 0))); $kuickpayPendingGross = (float) ($verification['kuickpay_pending_gross'] ?? 0); // Before-fee (gross) equivalent of yesterday's unsettled remaining, proportional. $kuickpayYesterdayGross = (($kuickpayPendingYesterday['net'] ?? 0) > 0) ? (float) ($kuickpayPendingYesterday['gross'] ?? 0) * (($kuickpayPendingYesterday['remaining'] ?? 0) / $kuickpayPendingYesterday['net']) : 0.0; $kuickpayPendingDayCount = (int) ($kuickpayBacklog['count'] ?? 0) + (((float) ($kuickpayPendingYesterday['remaining'] ?? 0)) > 0 ? 1 : 0); // PayFast settlement mirror (same shape as KuickPay). $payfastToday = $data['payfast_today'] ?? ['total' => 0, 'count' => 0, 'fee' => 0, 'payout_date' => null, 'received' => false]; $payfastPendingYesterday = $data['payfast_pending_yesterday'] ?? ['date' => null, 'remaining' => 0, 'net' => 0, 'fee' => 0, 'gross' => 0, 'status' => null]; $payfastBacklog = $data['payfast_pending_backlog'] ?? ['total' => 0, 'count' => 0]; $payfastTodayNet = max(0.0, (float) ($payfastToday['total'] ?? 0) - (float) ($payfastToday['fee'] ?? 0)); $payfastPendingTotal = (float) ($verification['payfast_pending_balance'] ?? (($payfastPendingYesterday['remaining'] ?? 0) + ($payfastBacklog['total'] ?? 0))); $payfastPendingGross = (float) ($verification['payfast_pending_gross'] ?? 0); $payfastPendingDayCount = (int) ($payfastBacklog['count'] ?? 0) + (((float) ($payfastPendingYesterday['remaining'] ?? 0)) > 0 ? 1 : 0); $kuickpayProviderCards = collect($metrics->kuickpayProviders())->map(function ($provider, $key) use ($metrics) { $today = $metrics->kuickpayToday($key); return [ 'key' => $key, 'label' => $provider['label'], 'prefix' => $provider['prefix'], 'today' => $today, 'net' => max(0.0, (float) ($today['total'] ?? 0) - (float) ($today['fee'] ?? 0)), ]; }); $usSubtotal = $usAccounts->sum(fn($a) => $a->current_balance); $walletSubtotal = $walletAccounts->sum(fn($a) => $a->current_balance); $pkSubtotal = $pkAccounts->sum(fn($a) => $a->current_balance); $auSubtotal = $auAccounts->sum(fn($a) => $a->current_balance); $cardPayable = $cards->sum(fn($c) => $metrics->usd($c->payable_balance, $c->currency)); $cardLimit = $cards->sum(fn($c) => $metrics->usd($c->credit_limit, $c->currency)); $runningProfit = $data['running_profit'] ?? ['years' => [], 'current_year_profit' => 0]; $currentYearExpense = (float) ($runningProfit['years'][0]['expenses'] ?? 0); $currentYearProfit = (float) ($runningProfit['current_year_profit'] ?? ($kpis['running_profit_year'] ?? 0)); $bankLogo = fn($account) => strtoupper(substr($account->bank_name ?: $account->name, 0, 4)); $bankColor = fn($currency) => $currency === 'PKR' ? '#1e3a8a' : ($currency === 'AUD' ? '#0d9488' : '#6366f1'); @endphp

Overall

Core business cards and live monthly / yearly totals

{{ $verification['currency'] }}

Charitable & Zakaat

Giving and obligation estimates

KuickPay

Provider collections, fees, and pending balances

Live

PayFast

Today collections and unsettled pending balance

Live

Factory

Current month factory expense and revenue cards

Monthly

Wallets USD

Live balances across all wallet and gateway accounts

Subtotal
{{ $metrics->money($walletSubtotal) }}
@forelse($walletAccounts as $account)
{{ $account->account_number ? '****'.substr($account->account_number, -4) : 'No #' }}
{{ $account->name }}
{{ $account->bank_name }}
{{ $metrics->money($account->current_balance, $account->currency) }}
@if($account->currency !== 'USD')
{{ $metrics->money($metrics->usd($account->current_balance, $account->currency)) }} USD eq.
@endif
@empty
No wallet accounts yet.
@endforelse
@foreach([ ['title' => 'Balance in US Banks', 'pill' => 'USD', 'pillClass' => 'pill-blue', 'accounts' => $usAccounts, 'subtotal' => $metrics->money($usSubtotal), 'subtitle' => 'Live balances across all American accounts'], ['title' => 'Balance in Pakistan Banks', 'pill' => 'PKR', 'pillClass' => 'pill-amber', 'accounts' => $pkAccounts, 'subtotal' => $metrics->money($pkSubtotal, 'PKR'), 'subtitle' => 'Live balances across all Pakistani accounts'], ['title' => 'Balance in Australian Banks', 'pill' => 'AUD', 'pillClass' => 'pill-teal', 'accounts' => $auAccounts, 'subtotal' => $metrics->money($auSubtotal, 'AUD'), 'subtitle' => 'Live balances across all Australian accounts'], ] as $group)

{{ $group['title'] }} {{ $group['pill'] }}

{{ $group['subtitle'] }}

Subtotal
{{ $group['subtotal'] }}
@if($group['pill'] !== 'USD')
{{ $metrics->money($metrics->usd($group['accounts']->sum(fn($a) => $a->current_balance), $group['pill'])) }} USD eq.
@endif
@forelse($group['accounts'] as $account)
{{ $account->account_number ? '****'.substr($account->account_number, -4) : 'No #'}}
{{ $account->name }}
{{ $account->bank_name }}
{{ $metrics->money($account->current_balance, $account->currency) }}
@if($account->currency !== 'USD')
{{ $metrics->money($metrics->usd($account->current_balance, $account->currency)) }} USD eq.
@endif
@empty
No {{ $group['pill'] }} accounts yet.
@endforelse
@endforeach

Credit Cards Liability

Limits, balances payable, and due dates

Total Payable
{{ $metrics->money($cardPayable) }}
of {{ $metrics->money($cardLimit) }} limit
@forelse($cards as $card) @php $util = (float) $card->credit_limit > 0 ? min(100, ((float) $card->payable_balance / (float) $card->credit_limit) * 100) : 0; @endphp
{{ $card->short_name ?: strtoupper(substr($card->issuer, 0, 4)) }}
Payable
{{ $metrics->money($card->payable_balance, $card->currency) }}
Limit {{ $metrics->money($card->credit_limit, $card->currency) }}
{{ $card->card_name }}{{ number_format($util, 0) }}%
Due {{ $card->due_date?->format('M d') ?: 'Not set' }}
@empty
No credit cards yet.
@endforelse
Inventory Value Vouchers
Rs {{ number_format($metrics->convert($kpis['inventory'], 'USD', 'PKR'), 2, '.', '') }}
Units in stock
{{ $inventoryUnits }}
Avg. cost / unit
{{ $displayMoney($kpis['inventory'] > 0 ? $kpis['inventory'] / max(1, $inventoryUnits) : 0) }}
Amount in Transit Pending
Rs {{ number_format($metrics->convert($kpis['transit'], 'USD', 'PKR'), 2, '.', '') }}
Transit invoices
{{ \App\Models\FinanceInvoice::where('status', 'transit')->count() }}
Source
Invoice status
Overall Net Worth Live
{{ $displayMoney($kpis['net_worth']) }}
Bank balances{{ $displayMoney($kpis['bank_total']) }}
Inventory{{ $displayMoney($kpis['inventory']) }}
In transit{{ $displayMoney($kpis['transit']) }}
Collectible{{ $displayMoney($kpis['collectible']) }}
Total debt-{{ $displayMoney($kpis['debt']) }}
@php $trendData = $metrics->trendMonths(6); $bankChart = $data['charts']['bank_allocation']; $expChart = $data['charts']['expense_breakdown']; // Palette used consistently across all three charts $palette = ['#6366f1','#10b981','#f59e0b','#06b6d4','#ec4899','#ef4444','#8b5cf6','#0d9488','#f97316','#3b82f6']; @endphp
{{-- Bank Allocation doughnut --}}

Bank Allocation

USD eq.
@if(count($bankChart['labels']) > 0)
@else
No accounts with positive balances yet.
@endif
{{-- Expense Breakdown doughnut --}}

Expense Breakdown

This month
@if(count($expChart['labels']) > 0)
@else
No expenses recorded this month.
@endif
{{-- Revenue vs Expenses 6-month bar --}}

Revenue vs. Expenses

Last 6 months
@push('scripts') @endpush @endsection