@extends('layouts.app') @section('title', 'Restaurant Reports') @section('content')

Restaurant Reports

Kitchen-side performance: food sales, cost, profit, discounts and voids.

@can('data.costs') @endcan
@if ($bestSellers->isNotEmpty())

Top sellers by revenue

@endif

Best-selling meals

@forelse ($bestSellers as $name => $row) @empty @endforelse
ItemQty soldRevenue
{{ $name }}{{ $row['qty'] }}{{ number_format($row['revenue'], 0) }}
No sales in this range.

Voids by reason ({{ $voidedItems->count() }} items)

@forelse ($voidsByReason as $reason => $row) @empty @endforelse
ReasonCountValue
{{ $reason }}{{ $row['count'] }}{{ number_format($row['value'], 0) }}
No voided items in this range.

Complimentary items ({{ $complimentaryItems->count() }})

@forelse ($complimentaryItems->groupBy(fn($i) => $i->product->name) as $name => $group) @empty @endforelse @if ($complimentaryItems->isNotEmpty()) @endif
ItemQtyValue forgone
{{ $name }}{{ $group->sum('quantity') }}{{ number_format($group->sum(fn($i) => $i->quantity * $i->product->selling_price), 0) }}
No complimentary items in this range.
Total forgone{{ number_format($complimentaryValue, 0) }}

Cancelled orders ({{ $cancelledOrders->count() }})

@forelse ($cancelledOrders as $order) @empty @endforelse
Order #TableReasonWhen
{{ $order->order_number }} {{ $order->table->name ?? '—' }} {{ $order->void_reason ?? '—' }} {{ $order->created_at->format('d M Y H:i') }}
No cancelled orders in this range.
@endsection