@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
{{ t_raw('admin.campaign_revenue.btn_back_to_campaigns') }}
@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') }}

@if ($revenuePage) @foreach ($revenuePage as $r) @endforeach @else @partial('table-empty', ['colspan' => 3, 'icon' => 'fa-receipt', 'msg' => t_raw('admin.campaign_revenue.empty_no_campaigns')]) @endif
{{ t_raw('common.restaurant') }}{{ t_raw('admin.campaign_revenue.kpi_paid_campaigns') }}{{ t_raw('common.revenue') }}
{!! restaurant_logo_html($r, 'md') !!}
{{ $r['name'] }}
{{ number_format((int) $r['cnt']) }} {{ money($r['revenue']) }}
@partial('table-toolbar', ['pager' => $revenuePager, 'base' => '/admin/campaigns/revenue'])
@php /* /.qm-d2 */ @endphp @endsection