'index', 'label' => 'Inicio', 'route' => '/'], ['code' => 'event.index', 'label' => 'Eventos', 'route' => '/'], [ 'code' => 'event.category', 'label' => 'Categoría de eventos', 'route' => '/eventos/categoria/:id', ], [ 'code' => 'event.detail', 'label' => 'Detalle de evento', 'route' => '/evento/:slug', ], [ 'code' => 'product.category', 'label' => 'Categoría de productos', 'route' => '/categoria/:id', ], [ 'code' => 'product.detail', 'label' => 'Detalle de producto', 'route' => '/product/:id', ], ['code' => 'checkout', 'label' => 'Finalizar compra', 'route' => '/checkout'], [ 'code' => 'main.adminapp', 'label' => 'Administración', 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'route' => '/', ], ['code' => 'scanner.inicio', 'label' => 'Inicio', 'route' => '/scanner/inicio'], ['code' => 'scanner.scan', 'label' => 'Escanear', 'route' => '/scanner/scan'], [ 'code' => 'scanner.detail', 'label' => 'Detalle', 'route' => '/scanner/detail/:id', ], [ 'code' => 'onticket.adminapp.event', 'label' => 'Eventos', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/event', ], [ 'code' => 'onticket.adminapp.inicio', 'label' => 'Inicio', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/inicio', ], [ 'code' => 'onticket.adminapp.catalog', 'label' => 'Catálogo', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/catalog', ], [ 'code' => 'onticket.adminapp.combos', 'label' => 'Combos', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/combos', ], [ 'code' => 'onticket.adminapp.categories', 'label' => 'Categorías', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/categories', ], [ 'code' => 'onticket.adminapp.ventas', 'label' => 'Ventas', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/ventas', ], [ 'code' => 'onticket.adminapp.staff', 'label' => 'Usuarios', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/staff', ], [ 'code' => 'onticket.adminapp.tickets', 'label' => 'Tickets', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/tickets', ], [ 'code' => 'onticket.adminapp.fiesta-futbol-infantil.entradas', 'label' => 'Entradas', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/entradas', ], [ 'code' => 'onticket.adminapp.fiesta-futbol-infantil.alojamientos', 'label' => 'Alojamientos', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/alojamientos', ], [ 'code' => 'onticket.adminapp.fiesta-futbol-infantil.merchandising', 'label' => 'Merchandising', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/merchandising', ], [ 'code' => 'onticket.adminapp.fiesta-futbol-infantil.comida', 'label' => 'Comida', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/comidas', ], [ 'code' => 'onticket.adminapp.desfile.entradas', 'label' => 'Entradas', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/desfile/entradas', ], [ 'code' => 'onticket.adminapp.desfile.reservas', 'label' => 'Reserva de Tickets', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/desfile/reservas', ], [ 'code' => 'shopit.adminapp.marca', 'label' => 'Marca', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/marca', ], [ 'code' => 'shopit.adminapp.contacto', 'label' => 'Contacto', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/contacto', ], [ 'code' => 'shopit.adminapp.productos', 'label' => 'Productos', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/productos', ], [ 'code' => 'shopit.adminapp.categorias', 'label' => 'Categorías', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/categorias', ], [ 'code' => 'shopit.adminapp.transacciones', 'label' => 'Transacciones', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/transacciones', ], [ 'code' => 'shopit.adminapp.reportes', 'label' => 'Reportes', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/reportes', ], [ 'code' => 'shopit.adminapp.usuarios_roles', 'label' => 'Usuarios y roles', 'parent_menu_code' => 'main.adminapp', 'route' => '/admin/usuarios-roles', ], [ 'code' => 'account', 'label' => 'Mi cuenta', 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'route' => '/mi-cuenta', ], [ 'code' => 'account.profile', 'label' => 'Datos personales', 'parent_menu_code' => 'account', 'route' => '/mi-cuenta/datos-personales', ], [ 'code' => 'account.purchases', 'label' => 'Mis compras', 'parent_menu_code' => 'account', 'route' => '/mi-cuenta/compras', ], [ 'code' => 'account.tickets', 'label' => 'Mis tickets', 'parent_menu_code' => 'account', 'route' => '/mi-cuenta/tickets', ], [ 'code' => 'help', 'label' => 'Ayuda', 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'route' => '/ayuda', ], [ 'code' => 'help.faq', 'label' => 'Preguntas frecuentes', 'parent_menu_code' => 'help', 'content_type' => Menu::CONTENT_TYPE_STATIC, 'static_content_schema' => [ '*.pregunta' => 'required|string', '*.respuesta' => 'required|string', '*.is_active' => 'sometimes|boolean', ], 'route' => '/ayuda/preguntas-frecuentes', ], [ 'code' => 'help.contact', 'label' => 'Contacto', 'parent_menu_code' => 'help', 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'static_content_schema' => null, 'route' => '/ayuda/contacto', ], [ 'code' => 'help.payment-methods', 'label' => 'Medios de pago', 'parent_menu_code' => 'help', 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'route' => '/ayuda/medios-de-pago', ], [ 'code' => 'help.shipping', 'label' => 'Envíos', 'parent_menu_code' => 'help', 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'route' => '/ayuda/envios', ], [ 'code' => 'help.terms-and-conditions', 'label' => 'Términos y condiciones', 'parent_menu_code' => 'help', 'content_type' => Menu::CONTENT_TYPE_STATIC, 'static_content_schema' => [ 'html' => 'present|nullable|string', ], 'route' => '/ayuda/terminos-y-condiciones', ], ]; foreach ($menus as $menuData) { $menuData = array_merge([ 'parent_menu_code' => null, 'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'static_content_schema' => null, ], $menuData); Menu::updateOrCreate(['code' => $menuData['code']], $menuData); } Menu::query() ->whereIn('code', ['profile', 'purchases', 'tickets']) ->delete(); Menu::query() ->whereIn('code', [ 'admin.event', 'admin.catalog', 'admin.combos', 'admin.categories', 'admin.ventas', 'admin.staff', 'event', 'catalog', 'combos', 'categories', 'ventas', 'staff', ]) ->delete(); Menu::query() ->where('code', 'like', 'adminapp.%') ->delete(); $allRoleMenuCodes = Menu::query()->pluck('code'); $adminAppMenuCodes = Menu::query() ->where('code', 'main.adminapp') ->orWhere('parent_menu_code', 'main.adminapp') ->pluck('code'); $scannerMenuCodes = Menu::query() ->where('code', 'like', 'scanner.%') ->pluck('code'); $userMenuCodes = Menu::query() ->whereNotIn('code', $adminAppMenuCodes->merge($scannerMenuCodes)) ->pluck('code'); Role::query() ->whereIn('codigo', [RoleCode::Admin->value, RoleCode::AdminApp->value]) ->orderBy('codigo') ->each(fn (Role $role) => $role->menus()->sync($allRoleMenuCodes)); Role::query() ->where('codigo', RoleCode::User->value) ->orderBy('codigo') ->each(fn (Role $role) => $role->menus()->sync($userMenuCodes)); Role::query() ->where('codigo', RoleCode::Scanner->value) ->orderBy('codigo') ->each(fn (Role $role) => $role->menus()->sync($scannerMenuCodes)); $tenants = Tenant::all(); $allMenus = Menu::pluck('code')->toArray(); $helpMenuCodes = [ 'help', 'help.faq', 'help.contact', 'help.payment-methods', 'help.shipping', 'help.terms-and-conditions', ]; $helpTenantCodes = [ 'sonder', 'fiesta_futbol_infantil', 'mutual_smep', ]; $ticketAdminMenuCodes = [ 'onticket.adminapp.tickets', ]; $fiestaCategoryMenuCodes = [ 'onticket.adminapp.fiesta-futbol-infantil.entradas', 'onticket.adminapp.fiesta-futbol-infantil.alojamientos', 'onticket.adminapp.fiesta-futbol-infantil.merchandising', 'onticket.adminapp.fiesta-futbol-infantil.comida', ]; $fiestaExcludedAdminMenuCodes = [ 'onticket.adminapp.inicio', 'onticket.adminapp.catalog', 'onticket.adminapp.categories', 'onticket.adminapp.combos', ]; $desfileMenuCodes = [ 'onticket.adminapp.desfile.entradas', 'onticket.adminapp.desfile.reservas', ]; $shopItAdminMenuCodes = Menu::query() ->where('code', 'like', 'shopit.adminapp.%') ->pluck('code') ->all(); $onTicketAdminMenuCodes = Menu::query() ->where('code', 'like', 'onticket.adminapp.%') ->pluck('code') ->all(); $onTicketMenuCodes = [ 'event.index', 'event.category', 'event.detail', ]; $catalogMenuCodes = [ 'product.category', ]; $frequentlyAskedQuestions = [ [ 'pregunta' => '¿Hay algún límite de compra?', 'respuesta' => 'No hay un límite general de compra. La cantidad disponible depende del stock de cada producto.', 'is_active' => true, ], [ 'pregunta' => '¿Cuáles son los medios de pago disponibles?', 'respuesta' => 'Podés consultar y seleccionar los medios de pago habilitados al momento de finalizar tu compra.', 'is_active' => false, ], [ 'pregunta' => 'Necesito asesoramiento antes de comprar el producto, ¿cómo puedo hacer?', 'respuesta' => 'Nuestro equipo comercial está preparado para asesorarte, no dudes en escribirnos por WhatsApp al (0341) 6658247 de lunes a viernes de 8.30 a 20 horas. Los sábados, domingos y feriados te contestaremos lo más rápido posible.', 'is_active' => false, ], ]; $mutualSmepFrequentlyAskedQuestions = [ [ 'pregunta' => '¿Hay algún límite de compra?', 'respuesta' => 'La cantidad disponible depende del stock de cada producto.', 'is_active' => true, ], [ 'pregunta' => '¿Cuáles son los medios de pago disponibles?', 'respuesta' => 'Podés consultar y seleccionar los medios de pago habilitados al finalizar tu compra.', 'is_active' => false, ], [ 'pregunta' => '¿Cómo puedo recibir asesoramiento antes de comprar?', 'respuesta' => 'Podés comunicarte con Mutual SMEP por WhatsApp al +54 9 341 247-4530.', 'is_active' => false, ], ]; foreach ($tenants as $tenant) { $menuCodes = $allMenus; $menuCodes = array_diff( $menuCodes, $tenant->admin_website_type_code === 'shopit' ? $onTicketAdminMenuCodes : $shopItAdminMenuCodes, ); if ($tenant->codigo === 'sonder') { // Sonder NO tiene tickets $menuCodes = array_diff($menuCodes, ['account.tickets']); } else { // Los demás NO tienen product.detail $menuCodes = array_diff($menuCodes, ['product.detail']); } if (! in_array($tenant->codigo, $helpTenantCodes, true)) { $menuCodes = array_diff($menuCodes, $helpMenuCodes); } if (! in_array($tenant->codigo, ['fiesta_futbol_infantil', 'desfile_pura_tendencia'], true)) { $menuCodes = array_diff($menuCodes, $ticketAdminMenuCodes); } if ($tenant->codigo !== 'fiesta_futbol_infantil') { $menuCodes = array_diff($menuCodes, $fiestaCategoryMenuCodes); } else { $menuCodes = array_diff($menuCodes, $fiestaExcludedAdminMenuCodes); } if ($tenant->codigo !== 'desfile_pura_tendencia') { $menuCodes = array_diff($menuCodes, $desfileMenuCodes); } if ($tenant->codigo !== 'onticket') { $menuCodes = array_diff($menuCodes, $onTicketMenuCodes); } else { $menuCodes = array_diff($menuCodes, $catalogMenuCodes); } // Usar sync para asociar los menues al tenant $tenant->menues()->sync($menuCodes); if (in_array($tenant->codigo, $helpTenantCodes, true)) { $tenant->menues()->updateExistingPivot('help.faq', [ 'static_content' => $tenant->codigo === 'mutual_smep' ? $mutualSmepFrequentlyAskedQuestions : $frequentlyAskedQuestions, ]); } } } }