@php $groups = [ 'Overview' => [ ['route' => 'dashboard', 'can' => 'dashboard.view', 'label' => 'Dashboard', 'icon' => 'layout-dashboard'], ], 'Service' => [ ['route' => 'restaurant.tables.index', 'can' => 'restaurant.pos', 'label' => 'Restaurant POS', 'icon' => 'utensils', 'pattern' => ['restaurant.tables.*', 'restaurant.pos.*', 'restaurant.orders.create']], ['route' => 'restaurant.orders.index', 'can' => 'restaurant.orders,restaurant.pos', 'label' => 'Retrieve Orders', 'icon' => 'receipt-text', 'pattern' => 'restaurant.orders.*'], ['route' => 'restaurant.held.index', 'can' => 'restaurant.held', 'label' => 'Held Orders', 'icon' => 'pause-circle', 'pattern' => 'restaurant.held.*'], ['route' => 'kitchen.display', 'can' => 'kitchen.display', 'label' => 'Kitchen Display', 'icon' => 'chef-hat'], ], 'Operations' => [ ['route' => 'inventory.products.index', 'can' => 'products.view', 'label' => 'Products', 'icon' => 'package', 'pattern' => 'inventory.products.*'], ['route' => 'inventory.categories.index', 'can' => 'products.view', 'label' => 'Categories', 'icon' => 'tags', 'pattern' => 'inventory.categories.*'], ['route' => 'inventory.ingredients.index', 'can' => 'ingredients.view', 'label' => 'Ingredients', 'icon' => 'wheat', 'pattern' => 'inventory.ingredients.*'], ['route' => 'inventory.recipes.index', 'can' => 'recipes.view', 'label' => 'Recipes & Production', 'icon' => 'cooking-pot', 'pattern' => 'inventory.recipes.*'], ['route' => 'inventory.stock.index', 'can' => 'stock.view', 'label' => 'Stock', 'icon' => 'boxes', 'pattern' => 'inventory.stock.*'], ['route' => 'inventory.transfers.index', 'can' => 'transfers.view', 'label' => 'Stock Transfers', 'icon' => 'arrow-left-right', 'pattern' => 'inventory.transfers.*'], ['route' => 'inventory.stock-takes.index', 'can' => 'stocktakes.view', 'label' => 'Stock Takes', 'icon' => 'clipboard-list', 'pattern' => 'inventory.stock-takes.*'], ['route' => 'purchasing.suppliers.index', 'can' => 'suppliers.view', 'label' => 'Suppliers', 'icon' => 'truck', 'pattern' => 'purchasing.suppliers.*'], ['route' => 'purchasing.orders.index', 'can' => 'purchase_orders.view', 'label' => 'Purchase Orders', 'icon' => 'shopping-cart', 'pattern' => 'purchasing.orders.*'], ['route' => 'purchasing.returns.index', 'can' => 'supplier_returns.view', 'label' => 'Supplier Returns', 'icon' => 'undo-2', 'pattern' => 'purchasing.returns.*'], ['route' => 'cashier.shifts.index', 'can' => 'shifts.view', 'label' => 'Cashier Shifts', 'icon' => 'wallet'], ['route' => 'sales.customers.index', 'can' => 'customers.view', 'label' => 'Customer Accounts', 'icon' => 'contact', 'pattern' => 'sales.customers.*'], ['route' => 'expenses.index', 'can' => 'expenses.view', 'label' => 'Expenses', 'icon' => 'receipt'], ], 'Compliance' => [ ['route' => 'tax.index', 'can' => 'taxes.view', 'label' => 'Taxes & Levies', 'icon' => 'percent', 'pattern' => 'tax.index'], ['route' => 'tax.vat-report', 'can' => 'vat_report.view', 'label' => 'VAT Report', 'icon' => 'file-text'], ['route' => 'tax.etims.index', 'can' => 'etims.view', 'label' => 'eTIMS', 'icon' => 'file-badge', 'pattern' => 'tax.etims.*'], ], 'Insights' => [ ['route' => 'reports.sales', 'can' => 'reports.sales', 'label' => 'Sales Reports', 'icon' => 'bar-chart-3'], ['route' => 'reports.restaurant', 'can' => 'reports.restaurant', 'label' => 'Restaurant Reports', 'icon' => 'utensils', 'area' => 'floor'], ['route' => 'reports.kitchen', 'can' => 'reports.restaurant', 'label' => 'Kitchen Reports', 'icon' => 'chef-hat', 'area' => 'kitchen'], ['route' => 'reports.bar', 'can' => 'reports.bar', 'label' => 'Bar Reports', 'icon' => 'martini', 'area' => 'bar'], ['route' => 'reports.inventory', 'can' => 'reports.inventory', 'label' => 'Inventory Reports', 'icon' => 'clipboard-list'], ['route' => 'reports.financial', 'can' => 'reports.financial', 'label' => 'Financial Reports (P&L)', 'icon' => 'landmark'], ['route' => 'reports.audit', 'can' => 'reports.audit', 'label' => 'Audit Trail', 'icon' => 'shield-check'], ], 'Help' => [ ['route' => 'guide', 'label' => 'User Guide', 'icon' => 'book-open', 'can' => 'guide.view', 'external' => true], ], 'System' => [ ['route' => 'settings.index', 'can' => 'settings.general', 'label' => 'General Settings', 'icon' => 'settings'], ['route' => 'settings.users.index', 'can' => 'settings.users', 'label' => 'Users', 'icon' => 'users', 'pattern' => 'settings.users.*'], ['route' => 'settings.sections.index', 'can' => 'settings.users', 'label' => 'Sections', 'icon' => 'layout-grid', 'pattern' => 'settings.sections.*'], ['route' => 'settings.roles.index', 'label' => 'Roles & Permissions', 'icon' => 'shield-check', 'pattern' => 'settings.roles.*', 'can' => 'settings.roles'], ['route' => 'settings.payment-methods.index', 'can' => 'settings.payment_methods', 'label' => 'Payment Methods', 'icon' => 'wallet-cards'], ['route' => 'settings.printers.index', 'can' => 'settings.printers', 'label' => 'Printers', 'icon' => 'printer'], ], ]; // Only show the menu items this person's role is allowed to open, and // hide a whole group when nothing in it is allowed. $groups = collect($groups)->map(fn ($items) => collect($items)->filter( fn ($item) => (empty($item['can']) || auth()->user()->hasPermission(...explode(',', $item['can']))) && (empty($item['area']) || in_array($item['area'], auth()->user()->reportAreas(), true)) )->values()->all())->filter(fn ($items) => count($items) > 0)->all(); @endphp @foreach ($groups as $label => $items)

{{ $label }}

@foreach ($items as $item) @php $isActive = request()->routeIs(...(array) ($item['pattern'] ?? $item['route'])); @endphp {{ $item['label'] }} @endforeach
@endforeach