@php $global = $this->getGlobalStats(); $campaigns = $this->getCampaignData(); $failed = $this->getFailedPayments(); $upcoming = $this->getUpcomingPayments(); $quality = $this->getDataQuality(); @endphp {{-- ── Current Season Overview ─────────────────────────────── --}}
Ramadan {{ now()->year }} — Current Season
{{ number_format($global['current_subscribers']) }}
Active This Season
{{ number_format($global['expired_subscribers']) }} from past seasons
£{{ number_format($global['current_collected'], 0) }}
Collected This Season
£{{ number_format($global['all_time_collected'], 0) }} all-time
£{{ number_format($global['current_pending'], 0) }}
Pending
@if ($global['current_failed'] > 0)
{{ $global['current_failed'] }} failed
@endif
{{ $global['collection_rate'] }}%
Collection Rate
{{-- ── Campaign Cards ──────────────────────────────────────── --}}
@foreach ($campaigns as $data) @php $c = $data['campaign']; $hasCurrent = $data['current_subscribers'] > 0; $progressPct = $data['current_payments'] > 0 ? round($data['current_paid'] / $data['current_payments'] * 100) : 0; @endphp
{{ $c->title }} @if ($hasCurrent) ● Active @else ○ No current season @endif
@if ($hasCurrent) {{-- Current Season --}}
This Season
Subscribers
{{ $data['current_subscribers'] }}
Avg / Night
£{{ number_format($data['avg_per_night'], 2) }}
Collected
£{{ number_format($data['current_collected'], 0) }}
Pending
£{{ number_format($data['current_pending_amount'], 0) }}
{{-- Payment progress bar --}}
{{ number_format($data['current_paid']) }} / {{ number_format($data['current_payments']) }} payments {{ $progressPct }}%
Nights
{{ $data['total_nights'] }}
Completed
{{ $data['fully_completed'] }}
Failed
{{ $data['current_failed'] }}
@endif {{-- All-time summary --}}
All Time
{{ $data['all_time_subscribers'] }} subscribers ({{ $data['expired_subscribers'] }} expired) £{{ number_format($data['all_time_collected'], 0) }}
@endforeach
{{-- ── Upcoming Payments ───────────────────────────────────── --}} @if (count($upcoming) > 0)
Upcoming Payments (Next 48h)
@foreach ($upcoming as $u)
{{ $u->campaign }}
{{ $u->payment_count }} payments
£{{ number_format($u->total_amount, 2) }}
{{ \Carbon\Carbon::parse($u->earliest)->diffForHumans() }}
@endforeach
@endif {{-- ── Failed Payments ─────────────────────────────────────── --}} @if (count($failed) > 0)
Failed Payments — This Season ({{ count($failed) }})
@foreach ($failed as $f) @endforeach
Donor Campaign Amount Expected Attempts
{{ $f->donor_name }}
{{ $f->donor_email }}
{{ $f->campaign }} £{{ number_format($f->amount / 100, 2) }} {{ \Carbon\Carbon::parse($f->expected_at)->format('d M') }} {{ $f->attempts }}× View →
@endif {{-- ── Data Quality ────────────────────────────────────────── --}}
Data Quality

{{ number_format($quality['total_records']) }} total records in database. Only {{ number_format($global['total_subscribers']) }} are real subscribers with payments. The rest are incomplete sign-ups, test data, or soft-deleted.

{{ number_format($quality['soft_deleted']) }}
Soft-deleted
{{ number_format($quality['no_customer']) }}
No customer
{{ number_format($quality['no_payments']) }}
No payments
{{ number_format($quality['zero_amount']) }}
Zero amount