MenuKosh
Waiter Dashboard
{{ $orders->count() }} order{{ $orders->count() !== 1 ? 's' : '' }} shown
{{-- Notification Bell --}}
New Orders
No new orders yet
{{-- Refresh --}} {{-- Avatar --}}
{{ strtoupper(substr(auth()->user()->name, 0, 1)) }}
{{-- Logout --}}
@csrf
@php $activeStatus = request('status', 'all'); $activeTable = request('table_id'); $tabCounts = is_array($tabCounts ?? null) ? $tabCounts : []; $orderCounts = is_array($orderCounts ?? null) ? $orderCounts : []; $activeTableJson = (string) request('table_id', ''); $activeStatusJson = (string) request('status', 'all'); $activePhoneJson = preg_replace('/\D/', '', (string) request('phone', '')); $orderCounts = array_replace_recursive([ 'all' => $tabCounts['all'] ?? 0, 'tables' => [], 'take_away' => 0, 'home_delivery' => 0, ], $orderCounts); // Status tab definitions — no emoji, clean labels $statusDefs = [ 'all' => ['Active', 'on-all'], 'pending' => ['Pending', 'on-pending'], 'accepted' => ['Accepted', 'on-accepted'], 'completed' => ['Completed', 'on-completed'], 'rejected' => ['Rejected', 'on-rejected'], ]; @endphp
{{-- Active filter summary --}} @php $filterParts = []; if (request('status') && request('status') !== 'all') $filterParts[] = 'Status: ' . ucfirst(request('status')); if (request('table_id')) { if (request('table_id') === 'takeaway') $filterParts[] = 'Table: Take Away'; elseif (request('table_id') === 'home_delivery') $filterParts[] = 'Table: Home Delivery'; else { $tbl = $tables->firstWhere('id', request('table_id')); if ($tbl) $filterParts[] = 'Table: ' . $tbl->table_name; } } if (request('phone')) $filterParts[] = 'Phone: ' . request('phone'); @endphp @if(count($filterParts))
Showing: @foreach($filterParts as $p) {{ $p }} @endforeach ✕ Clear
@endif {{-- Orders grid --}}
@forelse($orders as $order) @php $simpleStatus = match($order->status) { 'accepted','preparing','ready' => 'accepted', 'served','completed' => 'completed', default => $order->status, }; $isDelivery = in_array($order->order_type, ['delivery','home_delivery']); $isTakeaway = $order->order_type === 'takeaway'; if ($order->table) { $locName = $order->table->table_name; $locType = 'Dine In'; $sourceLabel = $order->table->table_name; $sourceClass = 'table'; } elseif ($isDelivery) { $locName = 'Home Delivery'; $locType = 'Delivery'; $sourceLabel = 'Home Delivery'; $sourceClass = 'delivery'; } else { $locName = 'Take Away'; $locType = 'Take Away'; $sourceLabel = 'Take Away'; $sourceClass = 'takeaway'; } $statusLabels = [ 'pending' => 'Pending', 'accepted' => 'Accepted', 'completed' => 'Completed', 'rejected' => 'Rejected', 'cancelled' => 'Cancelled', ]; @endphp
{{ $sourceLabel }}
{{-- Header: order # | status badge --}}
{{ $order->order_number }}
{{ $order->created_at->format('h:i A') }} · {{ $order->created_at->diffForHumans(null, true) }} ago
{{ $statusLabels[$simpleStatus] ?? ucfirst($simpleStatus) }}
{{-- Location --}}
{{ $locName }} {{ $locType }}
{{-- Delivery address --}} @if($isDelivery && $order->delivery_address)
{{ Str::limit($order->delivery_address, 65) }}
@endif {{-- Customer phone + name --}} @if($order->customer_phone)
{{ $order->customer_phone }} @if($order->customer_name) · {{ $order->customer_name }} @endif
@endif {{-- Items --}}
{{ $order->items->count() }} Item{{ $order->items->count() !== 1 ? 's' : '' }}
@forelse($order->items->take(3) as $item)
{{ $item->quantity }}×{{ $item->item_name }} ₹{{ number_format($item->total_price) }}
@empty
No items recorded
@endforelse @if($order->items->count() > 3)
+{{ $order->items->count() - 3 }} more
@endif
{{-- Special instruction --}} @if($order->special_instruction)
Note: {{ $order->special_instruction }}
@endif {{-- Rejection reason --}} @if($order->status === 'rejected' && $order->rejection_reason)
Rejected: {{ $order->rejection_reason }}
@endif {{-- Total --}}
₹{{ number_format($order->total_amount) }} {{ ucwords(str_replace('_',' ',$order->order_type)) }}
{{-- Action footer --}}
@if($order->status === 'pending')
@csrf
@elseif(in_array($order->status, ['accepted','preparing','ready'])) View
@csrf
@elseif(in_array($simpleStatus, ['rejected','cancelled'])) {{-- Rejected / Cancelled: View + Delete --}} View
@csrf @method('DELETE')
@else View Details @endif
@empty
{{ request()->anyFilled(['status','table_id','phone']) ? '🔍' : '✅' }}
{{ request()->anyFilled(['status','table_id','phone']) ? 'No orders match these filters' : 'All caught up!' }}
{{ request()->anyFilled(['status','table_id','phone']) ? 'Try adjusting the filters above.' : 'New orders will appear here automatically.' }}
@if(request()->anyFilled(['status','table_id','phone'])) ✕ Clear Filters @endif
@endforelse {{-- Phone filter empty fallback --}}
📵
No orders match that phone number
Try a different number.
{{-- New-order polling + sound + browser notification --}} @include('partials.order-notifier')