@extends('layouts.dashboard')
@section('content')
@php
/**
* Platform Analytics → Promotions: what discounting costs the business —
* coupon redemptions, reductions applied by hand, loyalty rewards, and who
* ultimately pays for each of them.
*
* @var array $totalCost @var array $couponCost @var array $manualCost
* @var array $loyaltyCost @var array $platformCost @var array $vendorCost
* @var array $redemptions @var array $manualCount @var array $discountRate
* @var array $pointsRedeemed
* @var array $couponRows @var array $couponPager @var array $manualRows
* @var array $vendorRows
* @var array $costChart @var array $costMeta @var array $rateChart @var array $rateMeta
* @var array $pointsChart @var array $pointsMeta @var array $fundingChart @var array $fundingMeta
* @var array $typeChart @var array $typeMeta @var array $topCouponChart @var array $topCouponMeta
* @var array $shapeChart @var array $shapeMeta
* @var int $rangeDays @var string $rangeMode @var array $rangeLinks
*/
$kpiMeta = static fn (array $m, string $caption): string =>
kpi_trend((int) $m['pct'], (string) $m['dir']) . '' . $caption . '';
@endphp
@php /* .qm-d2: the dashboard density standard (app.css §35) */
@endphp
{{ t_raw('dashboard.sec.snapshot') }}
{{ t_raw('admin.analytics.promotions_sub') }}
@foreach ($rangeLinks['options'] as $val => $text)
@php $on = ((string) $val === $rangeLinks['selected']); @endphp
{{ $text }}
@endforeach
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'rose', 'icon' => 'fa-tags', 'label' => t_raw('admin.analytics.kpi_discount_cost'),
'value' => money($totalCost['total']), 'spark' => $totalCost['cur'],
'meta' => $kpiMeta($totalCost, t('admin.analytics.meta_all_discount_types'))])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'amber', 'icon' => 'fa-percent', 'label' => t_raw('admin.analytics.kpi_discount_rate'),
'value' => number_format($discountRate['total'], 1) . '%', 'spark' => $discountRate['cur'],
'meta' => $kpiMeta($discountRate, t('admin.analytics.meta_of_basket_value'))])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'blue', 'icon' => 'fa-ticket-alt', 'label' => t_raw('admin.analytics.kpi_coupon_redemptions'),
'value' => number_format($redemptions['total']), 'href' => route('admin.deals'), 'spark' => $redemptions['cur'],
'meta' => $kpiMeta($redemptions, t('admin.analytics.meta_coupon_cost', [':cost' => money($couponCost['total'])]))])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'violet', 'icon' => 'fa-gift', 'label' => t_raw('admin.analytics.kpi_loyalty_cost'),
'value' => money($loyaltyCost['total']), 'href' => route('admin.loyalty'), 'spark' => $loyaltyCost['cur'],
'meta' => $kpiMeta($pointsRedeemed, t('admin.analytics.meta_points_redeemed', [':n' => number_format($pointsRedeemed['total'])]))])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'orange', 'icon' => 'fa-hand-paper', 'label' => t_raw('admin.analytics.kpi_manual_discounts'),
'value' => money($manualCost['total']), 'spark' => $manualCost['cur'],
'meta' => $kpiMeta($manualCount, t('admin.analytics.meta_applied_by_staff', [':n' => number_format($manualCount['total'])]))])
@partial('kpi-card', ['variant' => 'panel', 'accent' => 'teal', 'icon' => 'fa-hand-holding-usd', 'label' => t_raw('admin.analytics.kpi_platform_funded'),
'value' => money($platformCost['total']), 'spark' => $platformCost['cur'],
'meta' => $kpiMeta($platformCost, t('admin.analytics.meta_vendor_funded', [':amount' => money($vendorCost['total'])]))])
{{ t_raw('dashboard.sec.trends') }}
@partial('chart-card', ['heading' => t_raw('admin.analytics.chart_discount_cost'), 'sub' => t_raw('admin.analytics.chart_discount_cost_caption'), 'cfg' => $costChart, 'meta' => $costMeta, 'icon' => 'fa-tags', 'accent' => 'rose', 'opts' => ['id' => 'admPromoCostChart', 'url' => route('admin.chart-series', ['chart' => 'promoCost']), 'selected' => $rangeLinks['selected'], 'options' => $rangeLinks['options'], 'control' => 'compact']])
@partial('chart-card', ['heading' => t_raw('admin.analytics.chart_discount_rate'), 'sub' => t_raw('admin.analytics.chart_discount_rate_caption'), 'cfg' => $rateChart, 'meta' => $rateMeta, 'icon' => 'fa-percent', 'accent' => 'amber', 'opts' => ['id' => 'admPromoRateChart', 'url' => route('admin.chart-series', ['chart' => 'promoRate']), 'selected' => $rangeLinks['selected'], 'options' => $rangeLinks['options'], 'control' => 'compact']])
@partial('chart-card', ['heading' => t_raw('admin.analytics.chart_loyalty_points'), 'sub' => t_raw('admin.analytics.chart_loyalty_points_caption'), 'cfg' => $pointsChart, 'meta' => $pointsMeta, 'icon' => 'fa-gift', 'accent' => 'violet', 'opts' => ['id' => 'admPromoPointsChart', 'url' => route('admin.chart-series', ['chart' => 'promoPoints']), 'selected' => $rangeLinks['selected'], 'options' => $rangeLinks['options'], 'control' => 'compact']])
@partial('chart-card', ['heading' => t_raw('admin.analytics.chart_top_coupons'), 'sub' => t_raw('admin.analytics.chart_top_coupons_caption'), 'cfg' => $topCouponChart, 'meta' => $topCouponMeta, 'icon' => 'fa-chart-bar', 'accent' => 'blue', 'opts' => ['id' => 'admPromoTopCouponChart', 'url' => route('admin.chart-series', ['chart' => 'promoTopCoupon']), 'selected' => $rangeLinks['selected'], 'options' => $rangeLinks['options'], 'control' => 'compact']])
{{ t_raw('dashboard.sec.breakdown') }}
@partial('chart-card', ['heading' => t_raw('admin.analytics.chart_who_funds'), 'sub' => t_raw('admin.analytics.chart_who_funds_caption'), 'cfg' => $fundingChart, 'meta' => $fundingMeta, 'icon' => 'fa-chart-pie', 'accent' => 'teal'])
@partial('chart-card', ['heading' => t_raw('admin.analytics.chart_discount_types'), 'sub' => t_raw('admin.analytics.chart_discount_types_caption'), 'cfg' => $typeChart, 'meta' => $typeMeta, 'icon' => 'fa-chart-pie', 'accent' => 'rose'])
@partial('chart-card', ['heading' => t_raw('admin.analytics.chart_offer_shape'), 'sub' => t_raw('admin.analytics.chart_offer_shape_caption'), 'cfg' => $shapeChart, 'meta' => $shapeMeta, 'icon' => 'fa-chart-pie', 'accent' => 'violet'])
{{ t_raw('admin.analytics.caption_coupons') }}
| {{ t_raw('admin.analytics.col_coupon') }} |
{{ t_raw('admin.analytics.col_funded_by') }} |
{{ t_raw('common.value') }} |
{{ t_raw('admin.analytics.col_redemptions') }} |
{{ t_raw('admin.analytics.col_cost') }} |
{{ t_raw('admin.analytics.col_orders_value') }} |
{{ t_raw('admin.analytics.col_last_used') }} |
@if ($couponRows)
@foreach ($couponRows as $row)
@php $vendorFunded = $row['restaurant_id'] !== null; @endphp
{{ $row['code'] }}{!! or_dash($row['title']) !!}
|
@if ($vendorFunded)
{{ t_raw('admin.analytics.funding_vendor') }}
@else
{{ t_raw('admin.analytics.funding_platform') }}
@endif
|
{{ (string) $row['type'] === 'percent' ? number_format((float) $row['value'], 0) . '%' : money($row['value']) }} |
{{ number_format((int) $row['redemptions']) }} |
{!! (float) $row['cost'] > 0 ? money($row['cost']) : dash() !!} |
{!! (float) $row['revenue'] > 0 ? money($row['revenue']) : dash() !!} |
{!! $row['last_used'] ? fmt_day($row['last_used']) : dash() !!} |
@endforeach
@else
@partial('table-empty', ['colspan' => 7, 'icon' => 'fa-ticket-alt', 'msg' => t('admin.analytics.empty_no_coupons')])
@endif
@partial('table-toolbar', ['pager' => $couponPager, 'base' => '/admin/analytics/promotions'])
{{ t_raw('admin.analytics.h_manual_discounts') }}
{{ t_raw('admin.analytics.caption_manual_discounts') }}
| {{ t_raw('admin.analytics.col_reason') }} |
{{ t_raw('common.orders') }} |
{{ t_raw('admin.analytics.col_cost') }} |
{{ t_raw('admin.analytics.col_last_used') }} |
@if ($manualRows)
@foreach ($manualRows as $row)
| {{ $row['reason'] }} |
{{ number_format((int) $row['orders_c']) }} |
{{ money($row['cost']) }} |
{!! fmt_day($row['last_used']) !!} |
@endforeach
@else
@partial('table-empty', ['colspan' => 4, 'icon' => 'fa-hand-paper', 'msg' => t('admin.analytics.empty_no_manual_discounts')])
@endif
{{ t_raw('admin.analytics.caption_vendor_funded') }}
| {{ t_raw('common.restaurant') }} |
{{ t_raw('admin.analytics.col_cost') }} |
{{ t_raw('admin.analytics.kpi_loyalty_cost') }} |
{{ t_raw('admin.analytics.kpi_discount_rate') }} |
@if ($vendorRows)
@foreach ($vendorRows as $row)
@php $cost = (float) $row['coupon_cost'] + (float) $row['manual_cost'] + (float) $row['loyalty_cost']; @endphp
{!! restaurant_logo_html($row, 'md') !!}
{{ $row['name'] }}{{ t_raw('admin.analytics.n_orders', [':n' => number_format((int) $row['orders_c'])]) }}
|
{{ money($cost) }} |
{!! (float) $row['loyalty_cost'] > 0 ? money($row['loyalty_cost']) : dash() !!} |
{!! (float) $row['gross'] > 0 ? number_format($cost / (float) $row['gross'] * 100, 1) . '%' : dash() !!} |
@endforeach
@else
@partial('table-empty', ['colspan' => 4, 'icon' => 'fa-store', 'msg' => t('admin.analytics.empty_no_vendor_discounts')])
@endif
@partial('table-toolbar', ['pager' => $vendorPager, 'base' => '/admin/analytics/promotions'])
@php /* /.qm-d2 */
@endphp
@endsection