@extends('layouts.dashboard')
@section('content')
@php
/**
* @var array $kpis @var array $revenueChart @var array $kpiSparks
* @var array $revenuePage the page of the per-restaurant breakdown
* @var array $revenuePager pagination metadata for $revenuePage
*/
@endphp
@php /* .qm-d2: the dashboard density standard (app.css §35) */
@endphp
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'green', 'icon' => 'fa-coins', 'label' => t_raw('admin.campaign_revenue.kpi_total_revenue'), 'value' => money($kpis['totalRevenue']), 'href' => route('admin.campaigns'), 'spark' => $kpiSparks['revenue'] ?? [],
'meta' => '' . t('admin.campaign_revenue.cap_all_time') . ''])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'violet', 'icon' => 'fa-bullhorn', 'label' => t_raw('admin.campaign_revenue.kpi_active_campaigns'), 'value' => number_format($kpis['activeCount']), 'href' => route('admin.campaigns'), 'spark' => $kpiSparks['active'] ?? [],
'meta' => '' . t('admin.campaign_revenue.kpi_active_campaigns_cap') . ''])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'blue', 'icon' => 'fa-receipt', 'label' => t_raw('admin.campaign_revenue.kpi_paid_campaigns'), 'value' => number_format($kpis['paidCount']), 'href' => route('admin.campaigns'), 'spark' => $kpiSparks['paid'] ?? [],
'meta' => '' . t('admin.campaign_revenue.cap_all_time') . ''])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'teal', 'icon' => 'fa-store', 'label' => t_raw('admin.campaign_revenue.kpi_advertisers'), 'value' => number_format((int) ($revenuePager['total'] ?? 0)), 'href' => route('admin.campaigns'), 'spark' => $kpiSparks['paid'] ?? [],
'meta' => '' . t('admin.campaign_revenue.kpi_advertisers_cap') . ''])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'amber', 'icon' => 'fa-chart-line', 'label' => t_raw('admin.campaign_revenue.kpi_avg_campaign'), 'value' => $kpis['paidCount'] > 0 ? money($kpis['totalRevenue'] / $kpis['paidCount']) : '—', 'spark' => $kpiSparks['revenue'] ?? [],
'meta' => '' . t('admin.campaign_revenue.kpi_avg_campaign_cap') . ''])
@php
// Does the 90-day series carry any revenue? Drives the no-data fallback.
$hasChartData = false;
foreach (($revenueChart['series'][0]['data'] ?? []) as $pt) {
if ((float) $pt > 0) { $hasChartData = true; break; }
}
@endphp
@php /* Chart and per-restaurant breakdown share one row, 6/6, equal heights;
they restack below xl where two half-width cards would crush the table. */
@endphp
@partial('chart-card', [
'heading' => t_raw('admin.campaign_revenue.chart_title'),
'sub' => t_raw('admin.campaign_revenue.chart_sub'),
'cfg' => $revenueChart,
'meta' => ['has' => $hasChartData, 'label' => t_raw('admin.campaign_revenue.chart_caption', [':total' => money($kpis['totalRevenue']), ':count' => (int) $kpis['paidCount']])],
'icon' => 'fa-coins',
'accent' => 'green',
])
{{ t_raw('admin.campaign_revenue.table_title') }}
| {{ t_raw('common.restaurant') }} | {{ t_raw('admin.campaign_revenue.kpi_paid_campaigns') }} | {{ t_raw('common.revenue') }} |
@if ($revenuePage)
@foreach ($revenuePage as $r)
{!! restaurant_logo_html($r, 'md') !!}
{{ $r['name'] }}
|
{{ number_format((int) $r['cnt']) }} |
{{ money($r['revenue']) }} |
@endforeach
@else
@partial('table-empty', ['colspan' => 3, 'icon' => 'fa-receipt', 'msg' => t_raw('admin.campaign_revenue.empty_no_campaigns')])
@endif
@partial('table-toolbar', ['pager' => $revenuePager, 'base' => '/admin/campaigns/revenue'])
@php /* /.qm-d2 */
@endphp
@endsection