@extends('layouts.panel') @section('title', 'Menú y Catálogo') @section('content') @php // 1. Resolución de Empresa y Sucursal buscando en todos los guards (admin, web) $user = null; $guards = ['admin', 'web']; foreach ($guards as $g) { if (Auth::guard($g)->check()) { $user = Auth::guard($g)->user(); break; } } if (!$user) $user = Auth::user(); // --- LÓGICA DE TEMA DINÁMICO --- $convertColor = function ($color) { if (empty($color)) return null; if (str_starts_with($color, '#')) return $color; if (str_starts_with($color, '0x')) return '#' . substr($color, -6); return $color; }; $getContrastColor = function ($hex) { if (!$hex) return '#ffffff'; $hex = str_replace('#', '', $hex); if (strlen($hex) == 3) $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2]; $r = hexdec(substr($hex, 0, 2)); $g = hexdec(substr($hex, 2, 2)); $b = hexdec(substr($hex, 4, 2)); $yiq = (($r * 299) + ($g * 587) + ($b * 114)) / 1000; return ($yiq >= 128) ? '#0f172a' : '#ffffff'; }; $panelColor = $convertColor($user->color_preferido ?? null) ?? '#020617'; $rawBgColor = $convertColor($user->color_fondo_preferido ?? null); $bgColor = $rawBgColor ?? '#f8fafc'; // --- DETECCIÓN INTELIGENTE DE MODO OSCURO --- // Si el fondo es oscuro, es dark. // Si el fondo es el default (light) pero el panel es "obsidian" (#020617) o negro, // también asumimos dark porque el sistema aplica temas oscuros globales en esos casos. $textColor = $getContrastColor($bgColor); $isDark = ($textColor === '#ffffff'); if (!$rawBgColor && ($panelColor === '#020617' || $panelColor === '#000000')) { $isDark = true; $bgColor = '#0f172a'; // Forzar fondo oscuro si el panel es obsidian y no hay fondo } $bgPage = $bgColor; $accentColor = $panelColor; if ($panelColor === '#020617' || $panelColor === '#000000') { // Mantener el color oscuro si eso fue lo que el usuario eligió, // pero asegurar que no sea negro total para que se vea algo $accentColor = ($panelColor === '#000000') ? '#0f172a' : $panelColor; } if ($isDark) { $bgCard = 'color-mix(in srgb, ' . $bgColor . ', white 2%)'; $bgSurface = 'color-mix(in srgb, ' . $bgColor . ', white 5%)'; $textMain = '#ffffff'; $textMuted = '#94a3b8'; $borderColor = 'rgba(255,255,255,0.05)'; $shadowColor = 'rgba(0,0,0,0.8)'; } else { $bgCard = 'rgba(255, 255, 255, 0.95)'; $bgSurface = '#f8fafc'; $textMain = '#0f172a'; $textMuted = '#64748b'; $borderColor = '#e2e8f0'; $shadowColor = 'rgba(148, 163, 184, 0.15)'; } $sucursalId = session('sucursal_id') ?? Auth::guard('admin')->user()?->sucursal_asignada_id ?? Auth::user()?->sucursal_asignada_id ?? Auth::guard('web')->user()?->sucursal_asignada_id ?? null; $empresaId = session('empresa_id') ?? Auth::guard('admin')->user()?->empresa_id ?? Auth::user()?->empresa_id ?? Auth::guard('web')->user()?->empresa_id ?? null; // --- LÓGICA MULTI-SUCURSAL (ADMIN/DUEÑO) --- // Si no tenemos sucursal asignada (Dueño), buscamos todas las de la empresa. $availableBranches = collect([]); if ($empresaId) { $availableBranches = \Illuminate\Support\Facades\DB::table('Nucleo_Sucursales') ->where('empresa_id', $empresaId) ->where('activo', 1) ->select('id_sucursal', 'nombre') ->get(); } // Resolución de ID Final: // 1. Prioridad: Selector en URL (parametro ?sucursal_id=X) // 2. Sesión o Asignación Directa del Usuario // 3. Fallback: Primera sucursal disponible de la empresa $reqSucursal = request('sucursal_id'); if ($reqSucursal && $availableBranches->contains('id_sucursal', $reqSucursal)) { $sucursalId = $reqSucursal; } elseif (!$sucursalId && $availableBranches->isNotEmpty()) { $sucursalId = $availableBranches->first()->id_sucursal; } @endphp @push('styles') @vite(['src/assets/css/manager/report.css']) @endpush
{{-- Header con Selector de Sucursal --}}

Gestión de Carta

@if($availableBranches->count() > 1)
{{-- Dropdown de Sucursales --}}
@else

{{ $availableBranches->firstWhere('id_sucursal', $sucursalId)->nombre ?? 'SUCURSAL PRINCIPAL' }} • ONLINE

@endif
{{-- Buscador Premium --}}
{{-- Botones de Acción (Papelera Dinámica) --}}
{{-- Switcher de Tabs Estilo Apple --}}
{{-- CONTENIDO TAB 1: MENÚ Y CATÁLOGO --}}
{{-- Categorías --}}
{{-- Las categorías se cargarán dinámicamente aquí --}}

Explorar Todos

{{-- Grid de Productos --}}
{{-- Los productos se cargarán dinámicamente aquí via JS --}}

Cargando carta...

{{-- CONTENIDO TAB 2: GESTOR DE MESAS --}}
{{-- Botones de Acción Flotantes (FAB) --}}
{{-- FLOW DE MODALES --}} {{-- 1. Modal Selección --}} {{-- 2. Modal Nuevo Producto --}} {{-- 3. Modal Gestión de Categorías (Rediseñado) --}} {{-- 4. Modal Nueva Categoría (Overlay Compacto) --}} {{-- 5. Modal Mesa (Restaurado) --}} {{-- 6. Modal Editar COMIDA (Subventana Web - Centrada y Proporcional) --}} {{-- 7. Modal Confirmar Eliminación --}} {{-- 8. Modal Código QR (Premium) --}} {{-- 9. Historial Borrador Menú --}} {{-- 10. Historial Borrador Mesas --}} {{-- Modal de LÍMITE DE PLAN (Premium - Rediseñado) --}} {{-- Modal de ÉXITO (Premium) --}} {{-- Modal Historial (Papelera) --}} {{-- Modal Confirmación Restaurar --}} @endsection @push('scripts') @vite(['src/assets/js/manager/report.js']) @endpush