templates/common/sidebar.html.twig line 1

Open in your IDE?
  1. {# templates/partials/sidebar.html.twig #}
  2. {# ==== COLORES DINÁMICOS SEGÚN BRANDING ==== #}
  3. {% set sidebarBg = '#101230' %}
  4. {% set sidebarAccent = '#32aaf0' %}
  5. {% if branding_current is defined and branding_current is not null %}
  6.     {% if branding_current.secondaryColor is not empty %}
  7.         {% set sidebarBg = branding_current.secondaryColor %}
  8.     {% elseif branding_current.primaryColor is not empty %}
  9.         {% set sidebarBg = branding_current.primaryColor %}
  10.     {% endif %}
  11.     {% if branding_current.accentColor is not empty %}
  12.         {% set sidebarAccent = branding_current.accentColor %}
  13.     {% elseif branding_current.primaryColor is not empty %}
  14.         {% set sidebarAccent = branding_current.primaryColor %}
  15.     {% endif %}
  16. {% endif %}
  17. {% set iconAccentStyle = 'color: ' ~ sidebarAccent ~ ' !important;' %}
  18. {# Config global de módulos (Configuration guardada en sesión como _modules) #}
  19. {% set modules = app.session.get('_modules') ?? {} %}
  20. {# Permisos finales para mostrar módulos en sidebar #}
  21. {% set canClients   = modules.mcliente %}
  22. {% set canProviders = modules.mproveedor %}
  23. {% set canSpaces    = modules.mspaces %}
  24. {% set canVenues    = modules.mvenues %}
  25. {% set canSage      = modules.msage %}
  26. {% set canSettings  = modules.msettings %}
  27. {% set canCatering  = modules.mcatering %}
  28. {% set canAv        = modules.mav %}
  29. {% set canInventory = modules.minven %}
  30. {% set canLegends   = modules.mlegends %}
  31. {% set canAdmin     = modules.madmin %}
  32. {% set canRrhh         = modules.mrrhh|default(false) %}
  33. {# Tipo de acceso actual (venues / catering / av) #}
  34. {% set current_access = app.session.get('current_access_type') ?? null %}
  35. {% if canRrhh and not canVenues and not canAv %}
  36.     {% set canClients   = false %}
  37.     {% set canProviders = false %}
  38.     {% set canSpaces    = false %}
  39.     {% set canVenues    = false %}
  40.     {% set canSage      = false %}
  41.     {% set canSettings  = false %}
  42.     {% set canAv        = false %}
  43.     {% set canInventory = false %}
  44.     {% set canLegends   = false %}
  45.     {% set canAdmin     = false %}
  46.     {% set canCatering  = false %}
  47. {% endif %}
  48. {# 1. Primero se define _r (esto ya lo tienes en tu archivo, asegúrate de que esté arriba) #}
  49. {% set _r = app.request.get('_route') %}
  50. {# 2. Ahora ya puedes usar _r para el módulo LEGEND #}
  51. {% set legend_routes = [
  52.     'venues_statistics_legends', 'reservation_invoice_legends_list'
  53. ] %}
  54. {% set legends_open = _r in legend_routes %}
  55. {# Ajuste entre los 3 módulos principales:
  56.    - Si está en VENUES   -> no mostramos CATERING ni AV
  57.    - Si está en CATERING -> no mostramos VENUES ni AV
  58.    - Si está en AV       -> no mostramos VENUES ni CATERING
  59. #}
  60. {% if current_access == 'venues' %}
  61.     {% set canCatering = false %}
  62.     {% set canAv       = false %}
  63. {% elseif current_access == 'catering' %}
  64.     {% set canVenues   = false %}
  65.     {% set canAv       = false %}
  66. {% elseif current_access == 'av' %}
  67.     {% set canVenues   = false %}
  68.     {% set canCatering = false %}
  69. {% endif %}
  70. {% block stylesheets %}
  71. <style>
  72.     :root {
  73.         --sidebar-bg: {{ sidebarBg }};
  74.         --sidebar-accent: {{ sidebarAccent }};
  75.     }
  76.     /* === 1. Mantiene el scroll contenido dentro de los bordes redondeados === */
  77.     .sidebar.sidebar-main {
  78.         overflow: hidden !important; 
  79.     }
  80.     .sidebar-content {
  81.         max-height: 100vh;
  82.         overflow-y: auto;
  83.         overflow-x: hidden;
  84.     }
  85.     /* === 2. Scrollbar WebKit (Chrome, Edge, Safari) === */
  86.     .sidebar-content::-webkit-scrollbar {
  87.         width: 8px;
  88.     }
  89.     /* Ocultar botones de flecha molestos de Chrome */
  90.     .sidebar-content::-webkit-scrollbar-button {
  91.         display: none;
  92.         width: 0;
  93.         height: 0;
  94.     }
  95.     /* Fondo track claro (#fafffd) con bordes suavizados */
  96.     .sidebar-content::-webkit-scrollbar-track {
  97.         background: #fafffd;
  98.         border-radius: 0 4px 4px 0;
  99.     }
  100.     /* Tirador de la barra */
  101.     .sidebar-content::-webkit-scrollbar-thumb {
  102.         background: #7f8c8d; /* Gris con buen contraste sobre #fafffd */
  103.         border-radius: 4px;
  104.         border: 2px solid #fafffd; /* Margen interno para separarlo del borde */
  105.     }
  106.     .sidebar-content::-webkit-scrollbar-thumb:hover {
  107.         background: {{ sidebarAccent }}; /* Destaca con el color de acento al pasar el ratón */
  108.     }
  109.     /* === 3. Scrollbar Firefox === */
  110.     .sidebar-content {
  111.         scrollbar-width: thin;
  112.         scrollbar-color: #7f8c8d #101230;
  113.     }
  114. </style>
  115. {% endblock %}
  116. <div class="sidebar sidebar-main" id="sidebar-accordion">
  117.     <div class="sidebar-content">
  118.         
  119.         {# --- LOGO DINÁMICO SEGÚN TIPO DE ACCESO --- #}
  120. {% set defaultLogo = 'Logo_ManteVenues.png' %}
  121. {% if current_access == 'catering' %}
  122.     {% set defaultLogo = 'Logo_ManteCatering.png' %}
  123. {% elseif current_access == 'av' %}
  124.     {% set defaultLogo = 'Logo_ManteAv.png' %}
  125. {% elseif current_access == 'venues' %}
  126.     {% set defaultLogo = 'Logo_ManteVenues.png' %}
  127. {% endif %}
  128. <div class="sidebar-logo" style="text-align: center; padding: 10px 20px; border-bottom: 1px solid rgba(255,255,255,0.1); margin-bottom: 20px; min-height: 60px; display: flex; align-items: center; justify-content: center;">
  129.     <a href="/" style="display: block;">
  130.         {% if branding_current is defined and branding_current is not null and branding_current.logoPath is not empty %}
  131.             <img src="{{ asset(branding_current.logoPath) }}" alt="{{ branding_current.name }}" style="max-height: 60px; max-width: 100%; object-fit: contain;">
  132.         {% else %}
  133.             <img src="{{ asset('assets/images/platform/' ~ defaultLogo) }}" alt="Mante" style="max-height: 60px; max-width: 100%; object-fit: contain;">
  134.         {% endif %}
  135.     </a>
  136. </div>
  137.         {# dejamos mods por compatibilidad puntual si hiciera falta, aunque ya no lo usamos para permisos #}
  138.         {% set mods = app.session.get('_modules') %}
  139.         {# ==== helpers de ruta para abrir el bloque correspondiente ==== #}
  140.         {% set _r = app.request.get('_route') %}
  141.         {# INICIALIZACIÓN POR DEFECTO: Añade estas líneas aquí arriba #}
  142.         {% set current_space_id = null %}
  143.         {% set current_lounge_id = null %}
  144.         {% if space is defined %}
  145.             {# ID del espacio actual (si aplica) #}
  146.             {% set current_space_id = app.request.attributes.get('id') %}
  147.             {% if current_space_id is not null %}
  148.                 {% set current_space_id = current_space_id * 1 %}
  149.             {% endif %}
  150.         {% endif %}
  151.         {# Si nos viene la variable currentSpaceId #}
  152.         {% if currentSpaceId is defined %}
  153.             {% set current_lounge_id = current_space_id %}
  154.             {% set current_space_id = currentSpaceId * 1 %}
  155.         {% endif %}
  156.         {# Flags de apertura por ruta #}
  157.         {% set clients_open   = (_r starts with 'client_') or (_r in ['group_index']) %}
  158.         {% set suppliers_open = (_r starts with 'supplier_') or (_r in ['supplier_group_index']) %}
  159.         {% set venues_routes = [
  160.             'calendar_events_all', 'calendar_events_visits', 'app_space_index','reservations_venues_list_lounges','reservations_blueprints_home',
  161.             'reservations_venues_addvisit','reservations_venues_add',
  162.             'reservations_venues_index','reservation_invoice_list','reservations_venues_edit_general',
  163.             'reservations_venues_list_statistics','reservations_venues_list_stats_quoting','reservations_venues_list_stats_tarif',
  164.             'reservations_venues_list_statistics_client','reservations_venues_list_statistics_products',
  165.             'reservations_venues_services_stat_home','reservations_venues_loaded_reservations', 'reservations_venues_add_simple',
  166.             'app_venues_audit_index', 'app_venues_audit_show'
  167.         ] %}
  168.         {% set venues_open = _r in venues_routes %}
  169.         {% set higotrigo_open = '/higotrigo/' in app.request.pathinfo %}
  170.         {% set inventory_open = '/inventory/' in app.request.pathinfo %}
  171.         {% set sage_routes = [
  172.             'sage_families_list','sage_subfamilies_list','sage_vat_rates_list',
  173.             'sage_articles_list','sage_payment_methods_list','app_sage_payment_index'
  174.         ] %}
  175.         {% set sage_open = _r in sage_routes %}
  176.         {% set settings_routes = [
  177.             'settingsgeneral_index','users','addAction','printIndex','supplier_types'
  178.         ] %}
  179.         {% set settings_open = _r in settings_routes %}
  180.         {# ==== VENUES ==== #}
  181.         {% if canVenues %}
  182.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  183.                 <div class="category-title">
  184.                     <a href="javascript:void(0)"
  185.                        data-toggle="collapse"
  186.                        data-target="#menu-venues"
  187.                        data-parent="#sidebar-accordion"
  188.                        aria-expanded="{{ venues_open or app.session.get('current_access_type') == 'venues' ? 'true' : 'false' }}"
  189.                        class="{{ venues_open or app.session.get('current_access_type') == 'venues' ? '' : 'collapsed' }} text-default">
  190.                         <i class="glyphicon glyphicon-map-marker"></i>
  191.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Venues</span>
  192.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  193.                     </a>
  194.                 </div>
  195.                 <div id="menu-venues" class="category-content collapse {% if venues_open or app.session.get('current_access_type') == 'venues' %}in{% endif %}">
  196.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  197. {#                        <li class="{% if _r == 'calendar_events_all' %}active{% endif %}">#}
  198. {#                            <a href="{{ path('calendar_events_all') }}">#}
  199. {#                                <i class="icon-calendar"></i>#}
  200. {#                                <span style="margin-left:8px">{% trans %}Calendario Unificado{% endtrans %}</span>#}
  201. {#                            </a>#}
  202. {#                        </li>#}
  203.                         <li class="{% if _r == 'calendar_events_visits' %}active{% endif %}">
  204.                             <a href="{{ path('calendar_events_visits') }}">
  205.                                 <i class="icon-calendar5"></i>
  206.                                 <span style="margin-left:8px">{% trans %}Calendario de Visitas{% endtrans %}</span>
  207.                             </a>
  208.                         </li>
  209.                         <li class="{% if _r == 'app_space_index' %}active{% endif %}">
  210.                             <a href="{{ path('app_space_index') }}">
  211.                                 <i class="glyphicon glyphicon-home"></i>
  212.                                 <span style="margin-left:8px">{% trans %}Venues{% endtrans %}</span>
  213.                             </a>
  214.                         </li>
  215.                         <li id="gp-edit-lounges" class="{% if _r == 'reservations_venues_list_lounges' %}active{% endif %}">
  216.                             <a href="{{ path('reservations_venues_list_lounges') }}">
  217.                                 <i class="glyphicon glyphicon-star"></i>
  218.                                 <span style="margin-left: 8px;">{% trans %}Lounges{% endtrans %}</span>
  219.                             </a>
  220.                         </li>
  221.                         <li id="gp-new-visit" class="{% if _r == 'reservations_venues_addvisit' %}active{% endif %}">
  222.                             <a href="{{ path('reservations_venues_addvisit') }}">
  223.                                 <i class="glyphicon glyphicon-bookmark"></i>
  224.                                 <span style="margin-left: 8px;">{% trans %}Visits{% endtrans %}</span>
  225.                             </a>
  226.                         </li>
  227.                         <li id="gp-new-record" class="{% if _r == 'reservations_venues_add_simple' %}active{% endif %}">
  228.                             <a href="{{ path('reservations_venues_add_simple') }}">
  229.                                 <i class="icon-folder-plus"></i>
  230.                                 <span style="margin-left: 8px;">{% trans %}Nuevo Expediente{% endtrans %}</span>
  231.                             </a>
  232.                         </li>
  233.                         <li id="gp-list-records" class="{% if _r == 'reservations_venues_index' %}active{% endif %}">
  234.                             <a href="{{ path('reservations_venues_index') }}">
  235.                                 <i class="glyphicon glyphicon-list"></i>
  236.                                 <span style="margin-left: 8px;">{% trans %}Listado de Expedientes{% endtrans %}</span>
  237.                             </a>
  238.                         </li>
  239.                         <li>
  240.                             <a href="{{ path('reservation_assist') }}">
  241.                                 <i class="icon-calendar5"></i>
  242.                                 <span style="margin-left:8px">{% trans %}Listado de Asistencias{% endtrans %}</span>
  243.                             </a>
  244.                         </li>
  245.                         <li id="gp-invoice-list" class="{% if _r == 'reservation_invoice_list' %}active{% endif %}">
  246.                             <a href="{{ path('reservation_invoice_list') }}">
  247.                                 <i class="glyphicon glyphicon-euro"></i>
  248.                                 <span style="margin-left: 8px;">{% trans %}Facturación{% endtrans %}</span>
  249.                             </a>
  250.                         </li>
  251.                         <li id="gp-edit-tariff" class="{% if _r == 'reservations_venues_edit_general' %}active{% endif %}">
  252.                             <a href="{{ path('reservations_venues_edit_general') }}">
  253.                                 <i class="glyphicon glyphicon-check"></i>
  254.                                 <span style="margin-left: 8px;">{% trans %}Tarifario{% endtrans %}</span>
  255.                             </a>
  256.                         </li>
  257.                         <li id="gp-stats-general" class="{% if _r == 'venues_statistics' %}active{% endif %}">
  258.                             <a href="{{ path('venues_statistics') }}">
  259.                                 <i class="glyphicon glyphicon-signal"></i>
  260.                                 <span style="margin-left: 8px;">{% trans %}Estadísticas{% endtrans %}</span>
  261.                             </a>
  262.                         </li>
  263.                         <li id="gp-stats-general" class="{% if _r == 'app_doc_contract_model_index' %}active{% endif %}">
  264.                             <a href="{{ path('app_doc_contract_model_index') }}">
  265.                                 <i class="glyphicon glyphicon-inbox"></i>
  266.                                 <span style="margin-left: 8px;">{% trans %}Modelos de Contrato{% endtrans %}</span>
  267.                             </a>
  268.                         </li>
  269.                         {# --- Control de Auditoría Venues --- #}
  270.                         {% if is_granted('ROLE_ADMIN') or canAdmin %}
  271.                             <li class="{% if _r in ['app_venues_audit_index', 'app_venues_audit_show'] %}active{% endif %}">
  272.                                 <a class="" href="{{ path('app_venues_audit_index') }}">
  273.                                     <i class="icon-history"></i>
  274.                                     <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Control de Cambios{% endtrans %}</span>
  275.                                 </a>
  276.                             </li>
  277.                         {% endif %}
  278.                     </ul>
  279.                 </div>
  280.             </div>
  281.         {% endif %}
  282.         {# === CATERING === #}
  283.         {% if canCatering %}
  284.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  285.                 <div class="category-title">
  286.                     <a href="javascript:void(0)" data-toggle="collapse" data-target="#menu-higotrigo"
  287.                        data-parent="#sidebar-accordion" aria-expanded="{{ higotrigo_open or app.session.get('current_access_type') == 'catering' ? 'true' : 'false' }}"
  288.                        class="{{ higotrigo_open or app.session.get('current_access_type') == 'catering' ? '' : 'collapsed' }} text-default">
  289.                         <i class="icon-basket"></i>
  290.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Catering</span>
  291.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  292.                     </a>
  293.                 </div>
  294.                 <div id="menu-higotrigo" class="category-content collapse {% if higotrigo_open or app.session.get('current_access_type') == 'catering' %}in{% endif %}">
  295.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  296.                         {# --- Calendario --- #}
  297.                         <li class="{% if _r == 'ht_calendar' %}active{% endif %}">
  298.                             <a href="/higotrigo/calendar">
  299.                                 <i class="icon-calendar"></i>
  300.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Calendario{% endtrans %}</span>
  301.                             </a>
  302.                         </li>
  303.                         {# --- Prueba de Menú / Visitas --- #}
  304.                         <li class="{% if _r == 'app_higotrigo_ht_visit_index' %}active{% endif %}">
  305.                             <a href="{{ path('app_higotrigo_ht_visit_index') }}">
  306.                                 <i class="icon-chair"></i>
  307.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Prueba de Menú{% endtrans %}</span>
  308.                             </a>
  309.                         </li>
  310.                         {# --- Submenú: Expedientes --- #}
  311.                         {% set open_files = _r in ['app_ht_file_index','app_ht_file_new','app_ht_ten_days_ahead','app_ht_invoice_index', 'app_ht_proforma_index'] %}
  312.                         <li>
  313.                         <li class="{% if _r == 'app_ht_file_index' %}active{% endif %}">
  314.                             <a class="" href="{{ path('app_ht_file_index') }}">
  315.                                 <i class="icon-list"></i>
  316.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listar Expedientes{% endtrans %}</span>
  317.                             </a>
  318.                         </li>
  319.                         <li class="{% if _r == 'app_ht_file_new' %}active{% endif %}">
  320.                             <a class="" href="{{ path('app_ht_file_new') }}">
  321.                                 <i class="icon-folder-plus"></i>
  322.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nuevo Expediente{% endtrans %}</span>
  323.                             </a>
  324.                         </li>
  325.                         <li class="{% if _r == 'app_ht_ten_days_ahead' %}active{% endif %}">
  326.                             <a class="" href="{{ path('app_ht_ten_days_ahead') }}">
  327.                                 <i class="icon-eye"></i>
  328.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Previsión Semanal{% endtrans %}</span>
  329.                             </a>
  330.                         </li>
  331.                         <li class="{% if _r == 'app_ht_invoice_index' %}active{% endif %}">
  332.                             <a class="" href="{{ path('app_ht_invoice_index') }}">
  333.                                 <i class="icon-coin-euro"></i>
  334.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Facturación{% endtrans %}</span>
  335.                             </a>
  336.                         </li>
  337.                         <li class="{% if _r == 'app_ht_proforma_index' %}active{% endif %}">
  338.                             <a class="" href="{{ path('app_ht_proforma_index') }}">
  339.                                 <i class="icon-file-text"></i>
  340.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Proformas{% endtrans %}</span>
  341.                             </a>
  342.                         </li>
  343.                         </li>
  344.                         {# --- Submenú: Cocina --- #}
  345.                         {% set open_kitchen = _r in [
  346.                             'app_product_index','app_product_new',
  347.                             'app_family_index','app_family_new',
  348.                             'app_escandallo_index','app_escandallo_new',
  349.                             'app_family_escandallo_index','app_family_escandallo_new',
  350.                             'app_ht_menu_index','app_ht_menu_new'
  351.                         ] %}
  352.                         <li>
  353.                             <a href="javascript:void(0)" data-toggle="collapse" data-target="#submenu-ht-kitchen" aria-expanded="{{ open_kitchen ? 'true' : 'false' }}" class="{{ open_kitchen ? '' : 'collapsed' }}">
  354.                                 <i class="icon-coffee"></i>
  355.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Cocina{% endtrans %}</span>
  356.                                 <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  357.                             </a>
  358.                             <ul id="submenu-ht-kitchen" class="collapse {% if open_kitchen %}in{% endif %}">
  359.                                 <li class="{% if _r == 'app_product_index' %}active{% endif %}">
  360.                                     <a class="" href="{{ path('app_product_index') }}">
  361.                                         <i class="icon-list"></i>
  362.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listar Productos{% endtrans %}</span>
  363.                                     </a>
  364.                                 </li>
  365.                                 <li class="{% if _r == 'app_product_new' %}active{% endif %}">
  366.                                     <a class="" href="{{ path('app_product_new') }}">
  367.                                         <i class="glyphicon glyphicon-plus-sign"></i>
  368.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nuevo Producto{% endtrans %}</span>
  369.                                     </a>
  370.                                 </li>
  371.                                 <li class="{% if _r == 'app_family_index' %}active{% endif %}">
  372.                                     <a class="" href="{{ path('app_family_index') }}">
  373.                                         <i class="icon-list"></i>
  374.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listar Familia de Productos{% endtrans %}</span>
  375.                                     </a>
  376.                                 </li>
  377.                                 <li class="{% if _r == 'app_family_new' %}active{% endif %}">
  378.                                     <a class="" href="{{ path('app_family_new') }}">
  379.                                         <i class="glyphicon glyphicon-plus-sign"></i>
  380.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nueva Familia de Producto{% endtrans %}</span>
  381.                                     </a>
  382.                                 </li>
  383.                                 <li><hr></li>
  384.                                 <li class="{% if _r == 'app_escandallo_index' %}active{% endif %}">
  385.                                     <a class="" href="{{ path('app_escandallo_index') }}">
  386.                                         <i class="icon-list"></i>
  387.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listar Escandallos{% endtrans %}</span>
  388.                                     </a>
  389.                                 </li>
  390.                                 <li class="{% if _r == 'app_escandallo_new' %}active{% endif %}">
  391.                                     <a class="" href="{{ path('app_escandallo_new') }}">
  392.                                         <i class="glyphicon glyphicon-plus-sign"></i>
  393.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nuevo Escandallo{% endtrans %}</span>
  394.                                     </a>
  395.                                 </li>
  396.                                 <li class="{% if _r == 'app_family_escandallo_index' %}active{% endif %}">
  397.                                     <a class="" href="{{ path('app_family_escandallo_index') }}">
  398.                                         <i class="icon-list"></i>
  399.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listar Familia de Escandallos{% endtrans %}</span>
  400.                                     </a>
  401.                                 </li>
  402.                                 <li class="{% if _r == 'app_family_escandallo_new' %}active{% endif %}">
  403.                                     <a class="" href="{{ path('app_family_escandallo_new') }}">
  404.                                         <i class="glyphicon glyphicon-plus-sign"></i>
  405.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nueva Familia de Escandallo{% endtrans %}</span>
  406.                                     </a>
  407.                                 </li>
  408.                                 <li><hr></li>
  409.                                 <li class="{% if _r == 'app_ht_menu_index' %}active{% endif %}">
  410.                                     <a class="" href="{{ path('app_ht_menu_index') }}">
  411.                                         <i class="icon-list"></i>
  412.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listar Menú{% endtrans %}</span>
  413.                                     </a>
  414.                                 </li>
  415.                                 <li class="{% if _r == 'app_ht_menu_new' %}active{% endif %}">
  416.                                     <a class="" href="{{ path('app_ht_menu_new') }}">
  417.                                         <i class="glyphicon glyphicon-plus-sign"></i>
  418.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nuevo Menú{% endtrans %}</span>
  419.                                     </a>
  420.                                 </li>
  421.                             </ul>
  422.                         </li>
  423.                         {# --- Submenú: Estadísticas --- #}
  424.                         {% if canAdmin %}
  425.                             {% set open_stats = _r in ['app_higotrigo_ht_statistics_home','app_higotrigo_ht_statistics_production'] %}
  426.                             <li>
  427.                                 <a href="javascript:void(0)" data-toggle="collapse" data-target="#submenu-ht-stats" aria-expanded="{{ open_stats ? 'true' : 'false' }}" class="{{ open_stats ? '' : 'collapsed' }}">
  428.                                     <i class="icon-stats-bars2"></i>
  429.                                     <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Estadísticas{% endtrans %}</span>
  430.                                     <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  431.                                 </a>
  432.                                 <ul id="submenu-ht-stats" class="collapse {% if open_stats %}in{% endif %}">
  433.                                     <li class="{% if _r == 'app_higotrigo_ht_statistics_home' %}active{% endif %}">
  434.                                         <a class="" href="{{ path('app_higotrigo_ht_statistics_home') }}">
  435.                                             <i class="icon-stairs position-left"></i>
  436.                                             <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Informe de Facturación{% endtrans %}</span>
  437.                                         </a>
  438.                                     </li>
  439.                                     <li class="{% if _r == 'app_higotrigo_ht_statistics_production' %}active{% endif %}">
  440.                                         <a class="" href="{{ path('app_higotrigo_ht_statistics_production') }}">
  441.                                             <i class="icon-stairs position-left"></i>
  442.                                             <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Informe de Producción{% endtrans %}</span>
  443.                                         </a>
  444.                                     </li>
  445.                                 </ul>
  446.                             </li>
  447.                         {% endif %}
  448.                         {# --- Control de Auditoría --- #}
  449.                         {% if is_granted('ROLE_ADMIN') or canAdmin %}
  450.                             <li class="{% if _r in ['app_catering_audit_index', 'app_catering_audit_show'] %}active{% endif %}">
  451.                                 <a class="" href="{{ path('app_catering_audit_index') }}">
  452.                                     <i class="icon-history"></i>
  453.                                     <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Control de Cambios{% endtrans %}</span>
  454.                                 </a>
  455.                             </li>
  456.                         {% endif %}
  457.                     </ul>
  458.                 </div>
  459.             </div>
  460.         {% endif %}
  461.         {# ==== AV EXPRESS ==== #}
  462.         {% set avexpress_routes = [
  463.             'ave_add_file','ave_list_product','ave_calendarav','ave_list_file','ave_list_invoices',
  464.             'ave_new_template','ave_list_template','ave_list_productfilelocation','reservations_venues',
  465.             'ave_monthly_benefits','app_av_audit_index','app_av_audit_show'
  466.         ] %}
  467.         {% set avexpress_open = (_r in avexpress_routes) or ('/avexpress/' in app.request.pathinfo) %}
  468.         {% if canAv %}
  469.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  470.                 <div class="category-title">
  471.                     <a href="javascript:void(0)"
  472.                        data-toggle="collapse"
  473.                        data-target="#menu-avexpress"
  474.                        data-parent="#sidebar-accordion"
  475.                        aria-expanded="{{ avexpress_open or app.session.get('current_access_type') == 'av' ? 'true' : 'false' }}"
  476.                        class="{{ avexpress_open or app.session.get('current_access_type') == 'av' ? '' : 'collapsed' }} text-default">
  477.                         <i class="glyphicon glyphicon-facetime-video"></i>
  478.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">{% trans %}Audiovisuals{% endtrans %}</span>
  479.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  480.                     </a>
  481.                 </div>
  482.                 <div id="menu-avexpress" class="category-content collapse {% if avexpress_open or app.session.get('current_access_type') == 'av' %}in{% endif %}">
  483.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  484.                         <li class="{% if _r == 'ave_add_file' %}active{% endif %}">
  485.                             <a class="" href="{{ path('ave_add_file') }}">
  486.                                 <i class="icon-folder-plus"></i>
  487.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nuevo expediente{% endtrans %}</span>
  488.                             </a>
  489.                         </li>
  490.                         <li class="{% if _r == 'ave_calendarav' %}active{% endif %}">
  491.                             <a class="" href="{{ path('ave_calendarav') }}">
  492.                                 <i class="icon-calendar"></i>
  493.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Calendario{% endtrans %}</span>
  494.                             </a>
  495.                         </li>
  496.                         <li class="{% if _r == 'ave_list_file' %}active{% endif %}">
  497.                             <a class="" href="{{ path('ave_list_file') }}">
  498.                                 <i class="glyphicon glyphicon-list"></i>
  499.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listado de expedientes{% endtrans %}</span>
  500.                             </a>
  501.                         </li>
  502.                         <li class="{% if _r == 'ave_list_product' %}active{% endif %}">
  503.                             <a class="" href="{{ path('ave_list_product') }}">
  504.                                 <i class="glyphicon glyphicon-list-alt"></i>
  505.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Listado de productos{% endtrans %}</span>
  506.                             </a>
  507.                         </li>
  508.                         <li class="{% if _r == 'ave_list_invoices' %}active{% endif %}">
  509.                             <a class="" href="{{ path('ave_list_invoices') }}">
  510.                                 <i class="glyphicon glyphicon-euro"></i>
  511.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Facturación{% endtrans %}</span>
  512.                             </a>
  513.                         </li>
  514.                         {# --- Submenú: Plantillas --- #}
  515.                         {% set av_tpl_open = _r in ['ave_new_template','ave_list_template'] %}
  516.                         <li>
  517.                             <a href="javascript:void(0)"
  518.                                data-toggle="collapse"
  519.                                data-target="#submenu-avexpress-templates"
  520.                                aria-expanded="{{ av_tpl_open ? 'true' : 'false' }}"
  521.                                class="{{ av_tpl_open ? '' : 'collapsed' }}">
  522.                                 <i class="glyphicon glyphicon-duplicate"></i>
  523.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Plantillas{% endtrans %}</span>
  524.                                 <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  525.                             </a>
  526.                             <ul id="submenu-avexpress-templates" class="collapse {% if av_tpl_open %}in{% endif %}">
  527.                                 <li class="{% if _r == 'ave_new_template' %}active{% endif %}">
  528.                                     <a class="" href="{{ path('ave_new_template') }}">
  529.                                         <i class="glyphicon glyphicon-plus"></i>
  530.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Nueva plantilla{% endtrans %}</span>
  531.                                     </a>
  532.                                 </li>
  533.                                 <li class="{% if _r == 'ave_list_template' %}active{% endif %}">
  534.                                     <a class="" href="{{ path('ave_list_template') }}">
  535.                                         <i class="glyphicon glyphicon-edit"></i>
  536.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Modificar plantillas{% endtrans %}</span>
  537.                                     </a>
  538.                                 </li>
  539.                             </ul>
  540.                         </li>
  541.                         {# --- Submenú: Paquetes --- #}
  542.                         {% set av_pck_open = _r in ['ave_package','ave_package_list'] %}
  543.                         <li>
  544.                             <a href="javascript:void(0)"
  545.                                data-toggle="collapse"
  546.                                data-target="#submenu-avexpress-packages"
  547.                                aria-expanded="{{ av_pck_open ? 'true' : 'false' }}"
  548.                                class="{{ av_pck_open ? '' : 'collapsed' }}">
  549.                                 <i class="glyphicon glyphicon-inbox"></i>
  550.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Paquetes{% endtrans %}</span>
  551.                                 <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  552.                             </a>
  553.                             <ul id="submenu-avexpress-packages" class="collapse {% if av_pck_open %}in{% endif %}">
  554.                                 <li class="{% if _r == 'ave_package' %}active{% endif %}">
  555.                                     <a class="" href="{{ path('ave_package') }}">
  556.                                         <i class="glyphicon glyphicon-plus"></i>
  557.                                         <span>{% trans %}Nuevo paquete{% endtrans %}</span>
  558.                                     </a>
  559.                                 </li>
  560.                                 <li class="{% if _r == 'ave_package_list' %}active{% endif %}">
  561.                                     <a class="" href="{{ path('ave_package_list') }}">
  562.                                         <i class="glyphicon glyphicon-edit"></i>
  563.                                         <span>{% trans %}Modificar paquete{% endtrans %}</span>
  564.                                     </a>
  565.                                 </li>
  566.                             </ul>
  567.                         </li>
  568.                         {# --- Submenú: Otros --- #}
  569.                         {% set av_other_open = _r in ['ave_list_productfilelocation','reservations_venues','ave_monthly_benefits'] or ('/avexpress/liststatistics' in app.request.pathinfo) %}
  570.                         <li>
  571.                             <a href="javascript:void(0)"
  572.                                data-toggle="collapse"
  573.                                data-target="#submenu-avexpress-others"
  574.                                aria-expanded="{{ av_other_open ? 'true' : 'false' }}"
  575.                                class="{{ av_other_open ? '' : 'collapsed' }}">
  576.                                 <i class="glyphicon glyphicon-option-horizontal"></i>
  577.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Otros{% endtrans %}</span>
  578.                                 <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  579.                             </a>
  580.                             <ul id="submenu-avexpress-others" class="collapse {% if av_other_open %}in{% endif %}">
  581.                                 <li class="{% if _r == 'ave_list_productfilelocation' %}active{% endif %}">
  582.                                     <a class="" href="{{ path('ave_list_productfilelocation') }}">
  583.                                         <i class="glyphicon glyphicon-map-marker"></i>
  584.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Agregar / Listar Ubicaciones{% endtrans %}</span>
  585.                                     </a>
  586.                                 </li>
  587.                                 <li class="{% if _r == 'ave_monthly_benefits' %}active{% endif %}">
  588.                                     <a class="" href="{{ path('ave_monthly_benefits') }}">
  589.                                         <i class="glyphicon glyphicon-stats"></i>
  590.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Beneficios{% endtrans %}</span>
  591.                                     </a>
  592.                                 </li>
  593.                                 <li class="{% if '/avexpress/liststatistics' in app.request.pathinfo %}active{% endif %}">
  594.                                     <a class="" href="/avexpress/liststatistics">
  595.                                         <i class="glyphicon glyphicon-signal"></i>
  596.                                         <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Estadísticas de Facturación{% endtrans %}</span>
  597.                                     </a>
  598.                                 </li>
  599.                             </ul>
  600.                         </li>
  601.                         {# --- Control de Auditoría Audiovisuales --- #}
  602.                         {% if is_granted('ROLE_ADMIN') or canAdmin %}
  603.                             <li class="{% if _r in ['app_av_audit_index', 'app_av_audit_show'] %}active{% endif %}">
  604.                                 <a class="" href="{{ path('app_av_audit_index') }}">
  605.                                     <i class="icon-history"></i>
  606.                                     <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Control de Cambios{% endtrans %}</span>
  607.                                 </a>
  608.                             </li>
  609.                         {% endif %}
  610.                     </ul>
  611.                 </div>
  612.             </div>
  613.         {% endif %}
  614.         {# ==== ESPACIOS (raíz) ==== #}
  615.         {% if canSpaces %}
  616.             {% for space in spaces %}
  617.                 {% set space_open = (_r starts with 'calendar_by') and (current_space_id == space.id) %}
  618.                 <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  619.                     <div class="category-title">
  620.                         <a href="javascript:void(0)"
  621.                            data-toggle="collapse"
  622.                            data-target="#submenu-space-{{ space.id }}"
  623.                            data-parent="#sidebar-accordion"
  624.                            aria-expanded="{{ space_open ? 'true' : 'false' }}"
  625.                            class="{{ space_open ? '' : 'collapsed' }} text-default">
  626.                             <i class="glyphicon glyphicon-home"></i>
  627.                             <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">{{ space.name }}</span>
  628.                             <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  629.                         </a>
  630.                     </div>
  631.                     <div id="submenu-space-{{ space.id }}" class="category-content collapse {% if space_open %}in{% endif %}">
  632.                         <ul class="nav nav-pills nav-stacked nav-sidebar">
  633.                             <li class="{% if _r == 'calendar_by_space' and current_space_id == space.id %}active{% endif %}">
  634.                                 <a href="{{ path('calendar_by_space', { id: space.id }) }}">
  635.                                     <i class="icon-calendar"></i>
  636.                                     <span style="margin-left:8px">Calendario {{ space.name }}</span>
  637.                                 </a>
  638.                             </li>
  639.                             <li class="{% if _r == 'reservations_venues_space_index' and current_space_id == space.id %}active{% endif %}">
  640.                                 <a href="{{ path('reservations_venues_space_index', { idspace: space.id }) }}">
  641.                                     <i class="glyphicon glyphicon-list"></i>
  642.                                     <span style="margin-left:8px">Listado Expedientes {{ space.name }}</span>
  643.                                 </a>
  644.                             </li>
  645. {#                            {% if space.reservationLounges is defined and space.reservationLounges|length > 0 %}#}
  646. {#                                {% for lounge in space.reservationLounges %}#}
  647. {#                                    {% set current_lounge_id = current_lounge_id is defined ? current_lounge_id : null %}#}
  648. {#                                    <li class="{% if _r == 'calendar_by_lounge' and current_lounge_id == lounge.id %}active{% endif %}">#}
  649. {#                                        <a href="{{ path('calendar_by_lounge', { id: lounge.id }) }}">#}
  650. {#                                            <i class="icon-calendar"></i>#}
  651. {#                                            <span style="margin-left:8px">Calendario {{ lounge.name }}</span>#}
  652. {#                                        </a>#}
  653. {#                                    </li>#}
  654. {#                                {% endfor %}#}
  655. {#                            {% else %}#}
  656. {#                                <li class="disabled">#}
  657. {#                                    <a href="javascript:void(0)">#}
  658. {#                                        <i class="icon-calendar"></i>#}
  659. {#                                        <span style="margin-left:8px">Sin salas</span>#}
  660. {#                                    </a>#}
  661. {#                                </li>#}
  662. {#                            {% endif %}#}
  663.                         </ul>
  664.                     </div>
  665.                 </div>
  666.             {% else %}
  667.                 <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  668.                     <div class="category-title">
  669.                         <span style="margin-left:8px; letter-spacing: 1px;" class="text-muted">No hay venues definidos</span>
  670.                     </div>
  671.                 </div>
  672.             {% endfor %}
  673.         {% endif %}
  674.         {# ==== INVENTARIO ==== #}
  675.         {% if canInventory %}
  676.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  677.                 <div class="category-title">
  678.                     <a
  679.                             href="javascript:void(0)"
  680.                             data-toggle="collapse"
  681.                             data-target="#menu-inventario"
  682.                             data-parent="#sidebar-accordion"
  683.                             aria-expanded="{{ inventory_open ? 'true' : 'false' }}"
  684.                             class="{{ inventory_open ? '' : 'collapsed' }} text-default">
  685.                         <i class="glyphicon glyphicon-user"></i>
  686.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Inventario</span>
  687.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  688.                     </a>
  689.                 </div>
  690.                 <div id="menu-inventario" class="category-content collapse {% if inventory_open %}in{% endif %}">
  691.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  692.                         <li class="{% if _r == 'inventory_item_new' %}active{% endif %}">
  693.                             <a href="{{ path('inventory_item_new') }}">
  694.                                 <i class="glyphicon glyphicon-plus-sign"></i>
  695.                                 <span style="margin-left:8px">Añadir Item</span>
  696.                             </a>
  697.                         </li>
  698.                     </ul>
  699.                 </div>
  700.             </div>
  701.         {% endif %}
  702.         {# ==== SAGE ==== #}
  703.         {% if canSage %}
  704.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  705.                 <div class="category-title">
  706.                     <a href="javascript:void(0)"
  707.                        data-toggle="collapse"
  708.                        data-target="#menu-sage"
  709.                        data-parent="#sidebar-accordion"
  710.                        aria-expanded="{{ sage_open ? 'true' : 'false' }}"
  711.                        class="{{ sage_open ? '' : 'collapsed' }} text-default">
  712.                         <i class="glyphicon glyphicon-list-alt"></i>
  713.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">SAGE</span>
  714.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  715.                     </a>
  716.                 </div>
  717.                 <div id="menu-sage" class="category-content collapse {% if sage_open %}in{% endif %}">
  718.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  719.                         <li class="{% if _r == 'sage_families_list' %}active{% endif %}">
  720.                             <a href="{{ path('sage_families_list') }}">
  721.                                 <i class="glyphicon glyphicon-th-large"></i>
  722.                                 <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Familias</span>
  723.                             </a>
  724.                         </li>
  725.                         <li class="{% if _r == 'sage_subfamilies_list' %}active{% endif %}">
  726.                             <a href="{{ path('sage_subfamilies_list') }}">
  727.                                 <i class="glyphicon glyphicon-th"></i>
  728.                                 <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Subfamilias</span>
  729.                             </a>
  730.                         </li>
  731.                         <li class="{% if _r == 'sage_vat_rates_list' %}active{% endif %}">
  732.                             <a href="{{ path('sage_vat_rates_list') }}">
  733.                                 <i class="glyphicon glyphicon-euro"></i>
  734.                                 <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Tipos de IVA</span>
  735.                             </a>
  736.                         </li>
  737.                         <li class="{% if _r == 'sage_articles_list' %}active{% endif %}">
  738.                             <a href="{{ path('sage_articles_list') }}">
  739.                                 <i class="glyphicon glyphicon-book"></i>
  740.                                 <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Artículos</span>
  741.                             </a>
  742.                         </li>
  743.                         <li class="{% if _r == 'sage_payment_methods_list' %}active{% endif %}">
  744.                             <a href="{{ path('sage_payment_methods_list') }}">
  745.                                 <i class="glyphicon glyphicon-credit-card"></i>
  746.                                 <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Formas de pago</span>
  747.                             </a>
  748.                         </li>
  749.                         <li class="{% if _r == 'sage_financial_account_list' %}active{% endif %}">
  750.                             <a href="{{ path('sage_financial_account_list') }}">
  751.                                 <i class="glyphicon glyphicon-piggy-bank"></i>
  752.                                 <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Cuentas financieras</span>
  753.                             </a>
  754.                         </li>
  755.                         <li id="reservations-add">
  756.                             <a href="{{ path('app_sage_payment_index') }}">
  757.                                 <i class="glyphicon glyphicon-usd"></i>
  758.                                 <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Cobros</span>
  759.                             </a>
  760.                         </li>
  761.                     </ul>
  762.                 </div>
  763.             </div>
  764.         {% endif %}
  765.         {# ==== CLIENTES ==== #}
  766.         {% if canClients %}
  767.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  768.                 <div class="category-title">
  769.                     <a href="javascript:void(0)"
  770.                        data-toggle="collapse"
  771.                        data-target="#menu-clientes"
  772.                        data-parent="#sidebar-accordion"
  773.                        aria-expanded="{{ clients_open ? 'true' : 'false' }}"
  774.                        class="{{ clients_open ? '' : 'collapsed' }} text-default">
  775.                         <i class="glyphicon glyphicon-briefcase iconos"></i>
  776.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Clientes</span>
  777.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  778.                     </a>
  779.                 </div>
  780.                 <div id="menu-clientes" class="category-content collapse {% if clients_open %}in{% endif %}">
  781.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  782.                         <li class="{% if _r == 'client_list_simple_letters' %}active{% endif %}">
  783.                             <a href="{{ path('client_list_simple_letters', {ind:0}) }}">
  784.                                 <i class="glyphicon glyphicon-list-alt"></i>
  785.                                 <span style="margin-left:8px">Listado Clientes (A ~ Z)</span>
  786.                             </a>
  787.                         </li>
  788.                         <li class="{% if _r == 'client_add' %}active{% endif %}">
  789.                             <a href="{{ path('client_add') }}">
  790.                                 <i class="glyphicon glyphicon-plus-sign"></i>
  791.                                 <span style="margin-left:8px">Añadir Cliente</span>
  792.                             </a>
  793.                         </li>
  794.                         <li class="{% if _r == 'client_list_MyClients' %}active{% endif %}">
  795.                             <a href="{{ path('client_list_MyClients') }}">
  796.                                 <i class="glyphicon glyphicon-pushpin"></i>
  797.                                 <span style="margin-left:8px">{% trans %}My Clients{% endtrans %}</span>
  798.                             </a>
  799.                         </li>
  800.                         <li class="{% if _r == 'client_list_NoClient' %}active{% endif %}">
  801.                             <a href="{{ path('client_list_NoClient') }}">
  802.                                 <i class="glyphicon glyphicon-alert"></i>
  803.                                 <span style="margin-left:8px">{% trans %}Not Clients{% endtrans %}</span>
  804.                             </a>
  805.                         </li>
  806.                     </ul>
  807.                 </div>
  808.             </div>
  809.         {% endif %}
  810.         {# ==== PROVEEDORES ==== #}
  811.         {% if canProviders %}
  812.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  813.                 <div class="category-title">
  814.                     <a href="javascript:void(0)"
  815.                        data-toggle="collapse"
  816.                        data-target="#menu-proveedores"
  817.                        data-parent="#sidebar-accordion"
  818.                        aria-expanded="{{ suppliers_open ? 'true' : 'false' }}"
  819.                        class="{{ suppliers_open ? '' : 'collapsed' }} text-default">
  820.                         <i class="glyphicon glyphicon-user"></i>
  821.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Proveedores</span>
  822.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  823.                     </a>
  824.                 </div>
  825.                 <div id="menu-proveedores" class="category-content collapse {% if suppliers_open %}in{% endif %}">
  826.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  827.                         <li class="{% if _r == 'supplier_index_simple_letters' %}active{% endif %}">
  828.                             <a href="{{ path('supplier_index_simple_letters', {ind:0}) }}">
  829.                                 <i class="glyphicon glyphicon-list-alt"></i>
  830.                                 <span style="margin-left:8px">Listado Proveedores (A ~ Z)</span>
  831.                             </a>
  832.                         </li>
  833.                         <li class="{% if _r == 'supplier_add' %}active{% endif %}">
  834.                             <a href="{{ path('supplier_add') }}">
  835.                                 <i class="glyphicon glyphicon-plus-sign"></i>
  836.                                 <span style="margin-left:8px">Añadir Proveedor</span>
  837.                             </a>
  838.                         </li>
  839.                     </ul>
  840.                 </div>
  841.             </div>
  842.         {% endif %}
  843.         {# ==== MODULO LEGEND ==== #}
  844.         {% if canLegends %} {# Usamos canVenues como permiso base, o puedes crear un canLegend #}
  845.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  846.                 <div class="category-title">
  847.                     <a href="javascript:void(0)"
  848.                        data-toggle="collapse"
  849.                        data-target="#menu-legend"
  850.                        data-parent="#sidebar-accordion"
  851.                        aria-expanded="{{ legends_open ? 'true' : 'false' }}"
  852.                        class="{{ legends_open ? '' : 'collapsed' }} text-default">
  853.                         {# Icono de estrella o diamante para diferenciar LEGEND #}
  854.                         <i class="glyphicon glyphicon-star"></i>
  855.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px; letter-spacing: 1px;">ESPACIO LEGENDS</span>
  856.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  857.                     </a>
  858.                 </div>
  859.                 <div id="menu-legend" class="category-content collapse {% if app.user.team.id == 18 %}in{% endif %}">
  860.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  861.                         <li>
  862.                             <a href="/">
  863.                                 <i class="glyphicon glyphicon-calendar"></i>
  864.                                 <span style="margin-left:8px">Calendario LEGENDS</span>
  865.                             </a>
  866.                         </li>
  867.                         <li class="{% if _r == 'venues_statistics_legends' %}active{% endif %}">
  868.                             <a href="{{ path('venues_statistics_legends') }}">
  869.                                 <i class="glyphicon glyphicon-signal"></i>
  870.                                 <span style="margin-left:8px">Estadísticas LEGENDS</span>
  871.                             </a>
  872.                         </li>
  873.                         <li class="{% if _r == 'reservation_invoice_legends_list' %}active{% endif %}">
  874.                             <a href="{{ path('reservation_invoice_legends_list') }}">
  875.                                 <i class="glyphicon glyphicon-euro"></i>
  876.                                 <span style="margin-left:8px">Facturación LEGENDS</span>
  877.                             </a>
  878.                         </li>
  879.                         <li class="{% if _r == 'reservation_quote_legends' %}active{% endif %}">
  880.                             <a href="{{ path('reservation_quotation_legends_list') }}">
  881.                                 <i class="glyphicon glyphicon-bookmark"></i>
  882.                                 <span style="margin-left:8px">Cotización LEGENDS</span>
  883.                             </a>
  884.                         </li>
  885.                         <li>
  886.                     </ul>
  887.                 </div>
  888.             </div>
  889.         {% endif %}
  890.         {# ==== MODULO RRHH ==== #}
  891.         {% if canRrhh %}
  892.             <div class="sidebar-category sidebar-category-visible" style="margin-top:10px;">
  893.                 <div class="category-title">
  894.                     <a href="javascript:void(0)" data-toggle="collapse" data-target="#menu-higotrigo"
  895.                        data-parent="#sidebar-accordion" aria-expanded="{{ higotrigo_open or app.session.get('current_access_type') == 'catering' ? 'true' : 'false' }}"
  896.                        class="{{ higotrigo_open or app.session.get('current_access_type') == 'catering' ? '' : 'collapsed' }} text-default">
  897.                         <i class="icon-basket"></i>
  898.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">Calendario del Catering</span>
  899.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  900.                     </a>
  901.                 </div>
  902.                 <div id="menu-higotrigo" class="category-content collapse {% if higotrigo_open or app.session.get('current_access_type') == 'catering' %}in{% endif %}">
  903.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  904.                         {# --- Calendario --- #}
  905.                         <li class="{% if _r == 'ht_calendar' %}active{% endif %}">
  906.                             <a href="/higotrigo/calendar">
  907.                                 <i class="icon-calendar"></i>
  908.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Calendario{% endtrans %}</span>
  909.                             </a>
  910.                         </li>
  911.                     </ul>
  912.                 </div>
  913.             </div>
  914.         {% endif %}
  915.         {# ==== SETTINGS ==== #}
  916.         {% if canSettings %}
  917.             <hr style="margin: 20px">
  918.             <div class="sidebar-category sidebar-category-visible" style="margin-top:30px;">
  919.                 <div class="category-title">
  920.                     <a href="javascript:void(0)"
  921.                        data-toggle="collapse"
  922.                        data-target="#menu-platform-settings"
  923.                        data-parent="#sidebar-accordion"
  924.                        aria-expanded="{{ settings_open ? 'true' : 'false' }}"
  925.                        class="{{ settings_open ? '' : 'collapsed' }} text-default">
  926.                         <i class="glyphicon glyphicon-cog"></i>
  927.                         <span class="uppercase" style="margin-left:8px; letter-spacing: 1px;">{% trans %}Settings{% endtrans %}</span>
  928.                         <i class="glyphicon pull-right glyphicon-chevron-down"></i>
  929.                     </a>
  930.                 </div>
  931.                 <div id="menu-platform-settings" class="category-content collapse {% if settings_open %}in{% endif %}">
  932.                     <ul class="nav nav-pills nav-stacked nav-sidebar">
  933.                         <li class="{% if _r == 'settingsgeneral_index' %}active{% endif %}">
  934.                             <a href="{{ path('settingsgeneral_index') }}">
  935.                                 <i class="icon-cog position-left"></i>
  936.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}General{% endtrans %}</span>
  937.                             </a>
  938.                         </li>
  939.                         <li class="{% if _r == 'settingsbranding_index' %}active{% endif %}">
  940.                             <a href="{{ path('settingsbranding_index') }}">
  941.                                 <i class="icon-ampersand position-left"></i>
  942.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Branding{% endtrans %}</span>
  943.                             </a>
  944.                         </li>
  945.                         <li class="{% if _r == 'users' %}active{% endif %}">
  946.                             <a href="{{ path('users') }}">
  947.                                 <i class="icon-people position-left"></i>
  948.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Users{% endtrans %}</span>
  949.                             </a>
  950.                         </li>
  951.                         <li class="{% if _r == 'addAction' %}active{% endif %}">
  952.                             <a href="{{ path('addAction') }}">
  953.                                 <i class="icon-key position-left"></i>
  954.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Permissions{% endtrans %}</span>
  955.                             </a>
  956.                         </li>
  957.                         <li class="{% if _r == 'printIndex' %}active{% endif %}">
  958.                             <a href="{{ path('printIndex') }}">
  959.                                 <i class="icon-earth position-left"></i>
  960.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Edit Locations{% endtrans %}</span>
  961.                             </a>
  962.                         </li>
  963.                         <li class="{% if _r == 'supplier_types' %}active{% endif %}">
  964.                             <a href="{{ path('supplier_types') }}">
  965.                                 <i class="icon-users4 position-left"></i>
  966.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Supplier Type{% endtrans %}</span>
  967.                             </a>
  968.                         </li>
  969.                         <li class="{% if _r == 'settings_configuration_edit' %}active{% endif %}">
  970.                             <a href="{{ path('settings_configuration_edit') }}">
  971.                                 <i class="note-icon-menu-check position-left"></i>
  972.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Modules{% endtrans %}</span>
  973.                             </a>
  974.                         </li>
  975.                         <li class="{% if _r == 'status_color_index' %}active{% endif %}">
  976.                             <a href="{{ path('status_color_index') }}">
  977.                                 <i class="icon-paint-format position-left"></i>
  978.                                 <span style="margin-left:8px; letter-spacing: 1px;">{% trans %}Status Colors{% endtrans %}</span>
  979.                             </a>
  980.                         </li>
  981.                     </ul>
  982.                 </div>
  983.                 <br><br><br>
  984.             </div>
  985.         {% endif %}
  986.     </div>
  987. </div>