{{-- Imports --}} @php use App\Helpers\Environment\FacturapiHelper; use App\Helpers\Environment\SystemModulesHelper; use App\Helpers\Environment\SystemEnvHelper; use \App\Helpers\Environment\SystemFeaturesHelper; @endphp {{-- Content --}} @auth {{-- General Variables --}} @php //* Control Variables $role = Auth::user()->role; $modules = [ 'audits' => SystemModulesHelper::getModuleStatus('audits'), 'restaurant' => SystemModulesHelper::getModuleStatus('restaurant'), 'invoicing' => SystemEnvHelper::areCurrentCountries(['MEX']) && SystemModulesHelper::isEstablishmentTaxDataComplete() && FacturapiHelper::isEnabled(), 'otas_connection' => SystemModulesHelper::getModuleStatus('otas_connection'), ]; $has_only_invoicing_system = SystemFeaturesHelper::getFeatureStatus('only_invoicing_system'); //* Data to Render $sidebar_items = [ // Hotel Modules [ 'title' => __('modules')['dashboard']['hotel']['title'], 'roles' => ['administrador','gerente','recepcionista'], 'display' => !$has_only_invoicing_system, 'children'=> [ // Admin ['title'=>__('modules')['dashboard']['hotel']['seasons'], 'icon'=>'season_blue.svg', 'route'=>'seasons.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['hotel']['room_groups'], 'icon'=>'layers.svg', 'route'=>'room-groups.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['hotel']['room_types'], 'icon'=>'double_bed_blue.svg', 'route'=>'room-types.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['hotel']['rooms'], 'icon'=>'single_bed_blue.svg', 'route'=>'rooms.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['hotel']['agencies'], 'icon'=>'agency_blue.svg', 'route'=>'agencies.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['hotel']['reservation_sources'], 'icon'=>'source.svg', 'route'=>'sources.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['hotel']['regimens'], 'icon'=>'regiment.svg', 'route'=>'regimens.index', 'roles'=>['administrador']], // Shared ['title'=>__('modules')['dashboard']['hotel']['clients'], 'icon'=>'traveling_blue.svg', 'route'=>'clients.index'], [ 'title' => __('modules')['dashboard']['hotel']['reservations'], 'icon' => 'checkIn_blue.svg', 'children'=> [ ['title'=>__('modules')['dashboard']['hotel']['reservation_tickets'], 'icon'=>'file_blue.svg', 'route'=>'reservation.tickets.fullStays'], ['title'=>__('modules')['dashboard']['hotel']['consumption_tickets'], 'icon'=>'ticket_blue.svg', 'route'=>'reservation.tickets.hotelConsumptions'], ] ], // Admin-Manager ['title'=>__('modules')['dashboard']['hotel']['reports'], 'icon'=>'paper_blue.svg', 'route'=>'hotel.reports', 'roles'=>['administrador','gerente']], ] ], // Restaurant Modules [ 'title' => __('modules')['dashboard']['restaurant']['title'], 'roles' => ['administrador','gerente','recepcionista'], 'module' => 'restaurant', // Only shows if module is enabled 'display' => !$has_only_invoicing_system, 'children'=> [ ['title'=>__('modules')['dashboard']['restaurant']['tables'], 'icon'=>'table_blue.svg', 'route'=>'tables.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['restaurant']['categories'], 'icon'=>'category_blue.svg', 'route'=>'product-categories.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['restaurant']['products'], 'icon'=>'plate_blue.svg', 'route'=>'products.index', 'roles'=>['administrador']], ['title'=>__('modules')['dashboard']['restaurant']['orders'], 'icon'=>'orden_blue.svg', 'route'=>'orders.index'], ['title'=>__('modules')['dashboard']['restaurant']['reports'], 'icon'=>'paper_blue.svg', 'route'=>'restaurant.reports'], ] ], // Invoicing Modules [ 'title' => __('modules')['dashboard']['invoicing']['title'], 'roles' => ['administrador','gerente','recepcionista'], 'module' => 'invoicing', // Only shows if module is available on configured country 'children'=> [ // Shared ['title'=>__('modules')['dashboard']['invoicing']['invoices'], 'icon'=>'invoice_blue.svg', 'route'=>'invoices.index'], ['title'=>__('modules')['dashboard']['invoicing']['branches'], 'icon'=>'small_hotel_blue.svg', 'route'=>'tax-branches.index', 'roles'=>['administrador', 'gerente']], ['title'=>__('modules')['dashboard']['invoicing']['tax_clients'], 'icon'=>'traveling_blue.svg', 'route'=>'tax-clients.index'], ['title'=>__('modules')['dashboard']['invoicing']['prod_servs'], 'icon'=>'cube_blue.svg', 'route'=>'tax-prod-servs.index', 'roles'=>['administrador', 'gerente']], ['title'=>__('modules')['dashboard']['invoicing']['formats_descriptive'], 'icon'=>'file_stack_blue.svg', 'route'=>'tax-formats.index', 'roles'=>['administrador', 'gerente']], ] ], // Settings Modules [ 'title' => __('modules')['dashboard']['settings']['title'], 'roles' => ['administrador','gerente'], 'children'=> [ ['title'=>__('modules')['dashboard']['settings']['audits'], 'icon'=>'missing_payment_blue.svg', 'route'=>'audits.index', 'module'=>'audits', 'display' => !$has_only_invoicing_system], ['title'=>__('modules')['dashboard']['settings']['otas_connection'], 'icon'=>'api_agency_blue.svg', 'route'=>'otas.index', 'module'=>'otas_connection', 'display' => !$has_only_invoicing_system], ['title'=>__('modules')['dashboard']['settings']['users'], 'icon'=>'user.svg', 'route'=>'users.index'], ['title'=>__('modules')['dashboard']['settings']['establishments'], 'icon'=>'hotel_blue.svg', 'route'=>'establishments.index', 'roles'=>['administrador']], ] ], ]; //* Render Helper $canShow = function(array $item, string $role, array $modules): bool { if (isset($item['roles']) && !in_array($role, $item['roles'])) return false; if (isset($item['module']) && empty($modules[$item['module']] ?? false)) return false; if (array_key_exists('display', $item) && !$item['display']) return false; return true; }; @endphp {{-- Route Helper --}} @php // ¿Coincide la ruta actual? $isRoute = function ($route) { return isset($route) && request()->routeIs($route); }; // Recursivo: ¿este item o alguno de sus hijos está activo? $isItemActive = null; $isItemActive = function (array $item) use (&$isItemActive, $isRoute): bool { if (isset($item['route']) && $isRoute($item['route'])) return true; if (!empty($item['children'])) { foreach ($item['children'] as $child) { if ($isItemActive($child)) return true; } } return false; }; @endphp {{-- Sidebar Structure --}}