templates/base.html.twig line 1

  1. <!DOCTYPE html>
  2. <html lang="fr" class="h-100">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>{% block title %}B2BNaturamedicatrix{% endblock %}</title>
  7.     
  8.     <!-- Meta tags pour empêcher le cache des pages HTML -->
  9.     <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
  10.     <meta http-equiv="Pragma" content="no-cache">
  11.     <meta http-equiv="Expires" content="0">
  12.     <meta name="app-version" content="{{ global_version() }}">
  13.     <link rel="icon"
  14.           href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>">
  15.     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
  16.           integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
  17.     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.6.0/css/all.min.css"
  18.           integrity="sha512-Kc323vGBEqzTmouAECnVceyQqyqdsSiqLQISBL29aUW4U/M7pSPA/gEUZQqv1cwx4OnYxTxve5UMg5GT6L4JJg=="
  19.           crossorigin="anonymous" referrerpolicy="no-referrer"/>
  20.     <link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.min.css">
  21.     <link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.4.1/css/buttons.dataTables.min.css">
  22.     <link rel="stylesheet" href="{{ '/css/cart.css?v=' ~ random() }}">
  23.     <link rel="stylesheet" href="{{ '/css/register.css?v=' ~ random() }}">
  24.     <link rel="stylesheet" href="{{ '/css/profile.css?v=' ~ random() }}">
  25.     <link rel="stylesheet" href="{{ '/css/login.css?v=' ~ random() }}">
  26.     <link rel="stylesheet" href="{{ '/css/asidePromo.css?v=' ~ random() }}">
  27.     <link rel="stylesheet" href="{{ '/css/modal.css?v=' ~ random() }}">
  28.     <link rel="stylesheet" href="{{ '/css/products.css?v=' ~ random() }}">
  29.     <link rel="stylesheet" href="{{ '/css/footer.css?v=' ~ random() }}">
  30.     <link rel="stylesheet" href="{{ '/css/nav.css?v=' ~ random() }}">
  31.     <link rel="stylesheet" href="{{ '/css/generalConditions.css?v=' ~ random() }}">
  32.     <link rel="stylesheet" href="{{ '/css/video.css?v=' ~ random() }}">
  33.     <link rel="stylesheet" href="{{ '/css/calendarActionShock.css?v=' ~ random() }}">
  34.     <link rel="stylesheet" href="{{ '/css/main.css?v=' ~ random() }}">
  35.     <link rel="stylesheet" href="{{ '/css/utilities.css?v=' ~ random() }}">
  36.     <link rel="stylesheet" href="{{ '/css/rebate-progress.css?v=' ~ random() }}">
  37.     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto">
  38.     <script src="https://cdn.jsdelivr.net/npm/he/he.js"></script>
  39.     <script src="{{ '/js/main.js?v=' ~ random() }}" defer></script>
  40.     <script src="{{ '/js/nav.js?v=' ~ random() }}" defer></script>
  41.     <script src="{{ '/js/rebate-progress.js?v=' ~ random() }}" defer></script>
  42.     {% block stylesheets %}
  43.         {{ encore_entry_link_tags('app') }}
  44.     {% endblock %}
  45. </head>
  46. <body class="d-flex flex-column h-100 body-content">
  47. {% if is_granted('IS_AUTHENTICATED_FULLY') %}
  48. <nav class="navbarResponsive{% if clients['infocommercial'] != null %} has-extended-control{% endif %}">
  49.     <div class="container">
  50.         <div class="navbarLogo">
  51.             <a href="{{ path('products') }}">
  52.                 <img src="{{ asset('uploads/img/media/logo-naturamedicatrix-pro-v2.png') }}" alt="logo-naturamedicatrix-pro"/>
  53.             </a>
  54.         </div>
  55.         <div class="navbar-bottom-row">
  56.             <div id="navbar">
  57.                 <ul>
  58.                     <li>
  59.                         <a class="navlinkUnderline" href="{{ path('products') }}">
  60.                             <span class="navlinkText backgroundTextNav"><i class="fa-solid fa-house me-2"></i>Commandes produits</span>
  61.                         </a>
  62.                     </li>
  63.                     <li>
  64.                         <a class="navlinkUnderline" href="{{ path('video') }}">
  65.                             <span class="navlinkText backgroundTextNav"><i class="far fa-play-circle me-2"></i>Informations produits</span>
  66.                         </a>
  67.                     </li>
  68.                     <li>
  69.                         <a class="navlinkUnderline" href="#">
  70.                             <span class="navlinkText backgroundTextNav btn-dl-tarif"><i class="far fa-arrow-alt-circle-down me-2"></i>Télécharger les tarifs 2025</span>
  71.                         </a>
  72.                     </li>
  73.                 </ul>
  74.             </div>
  75.             <!-- Mobile menu toggle -->
  76.             <button class="mobile-menu-toggle" id="mobileMenuToggle" aria-label="Menu mobile" aria-expanded="false">
  77.                 <span></span>
  78.                 <span></span>
  79.                 <span></span>
  80.             </button>
  81.             <div class="navPartieUserAndCart">
  82.             {% if is_granted('ROLE_COMMERCIAL') %}
  83.                 <div class="commercialControl{% if clients['infocommercial'] != null %} has-active-control{% endif %}">
  84.                     {% if clients['infocommercial'] != null %}
  85.                         <a class="navAnimate commercial-status" data-bs-toggle="modal" data-bs-target="#takeControlModal" href="#">
  86.                             <i class="fas fa-user-check"></i>
  87.                             <span>{{ clients['infocommercial'].customer ? clients['infocommercial'].customer.email : 'Client inconnu' }}</span>
  88.                         </a>
  89.                     {% else %}
  90.                         <a class="navAnimate commercial-control" data-bs-toggle="modal" data-bs-target="#takeControlModal" href="#">
  91.                             <i class="fas fa-users-cog"></i>
  92.                             <span>Contrôle client</span>
  93.                         </a>
  94.                     {% endif %}
  95.                 </div>
  96.             {% endif %}
  97.             <div class="userCart">
  98.                 <div class="dropdown">
  99.                     <a class="navAnimate dropdown-toggle" href="#" id="userDropdown" role="button"
  100.                        data-bs-toggle="dropdown"
  101.                        aria-haspopup="true" aria-expanded="false">
  102.                         <i class="user-logo fas fa-user"></i>
  103.                         <span>{{ app.user.email }}</span>
  104.                     </a>
  105.                     <div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
  106.                         <a class="dropdown-item" href="{{ path('profile') }}">Mon profil</a>
  107.                         <a class="dropdown-item" href="{{ path('ordersHistory') }}">Historiques des commandes</a>
  108.                         {# <a class="dropdown-item" href="{{ path('profil_invoices') }}">Factures</a> #}
  109.                         <a class="dropdown-item" href="https://naturamedicatrix.photo/" target="_blank">Bibliothèque photos</a>
  110.                         <a class="dropdown-item" href="{{ path('app_logout') }}">Déconnexion</a>
  111.                         {% if is_granted('ROLE_ADMIN') %}
  112.                             <a class="dropdown-item" href="{{ path('admin') }}">Administration</a>
  113.                         {% endif %}
  114. {#                        {% if is_granted('ROLE_COMMERCIAL') %}#}
  115. {#                            <a class="dropdown-item" href="{{ path('commercial_customer_informations') }}">Info client</a>#}
  116. {#                        {% endif %}#}
  117.                     </div>
  118.                 </div>
  119.             </div>
  120.             <div id="myCart">
  121.                 <a class="navAnimate" href="{{ path('cartView') }}"><i id="myCartIcon" class="cart-logo fas fa-shopping-cart"></i>
  122.                     Panier <span id="myCartQuantity" data-no-rebate-qty="{{ noRebateQty }}">{{ basketContents }}</span>
  123.                 </a>
  124.             </div>
  125.         </div>
  126.     </div>
  127.     </div>
  128.     
  129.     <!-- Barre de progression des remises -->
  130.     <div class="rebate-progress-bar" id="rebateProgressBar" style="display: none;">
  131.         <div class="container progress-container">
  132.             <div class="progress-content">
  133.                 <div class="progress-info">
  134.                     <span class="current-status" id="currentStatus">
  135.                         <span id="statusText">Ajoutez des produits pour débloquer les remises</span>
  136.                     </span>
  137.                     <span class="next-target" id="nextTarget">
  138.                         Prochain palier : <strong id="nextPalierText">4 produits → 13%</strong>
  139.                     </span>
  140.                 </div>
  141.                 <div class="progress-container">
  142.                     <div class="progress-track">
  143.                         <div class="progress-fill" id="progressFill" style="width: 0%"></div>
  144.                         <div class="progress-markers" id="progressMarkers"></div>
  145.                     </div>
  146.                     <div class="progress-percentage" id="progressPercentage">0%</div>
  147.                 </div>
  148.             </div>
  149.         </div>
  150.     </div>
  151. </nav>
  152. {% endif %}
  153. {% block body %}{% endblock %}
  154. {% block footer %}
  155.     <!-- Footer -->
  156.     {% if is_granted('IS_AUTHENTICATED_FULLY') %}
  157.     <footer class="bg-dark text-white footer mt-auto">
  158.         <div class="container p-4 pb-0">
  159.             <section class="contactUs row">
  160.                 <div class="footer-address col-md-4 text-center">
  161.                     <i class="fab fa-envira fa-2x"></i>
  162.                     <p class="text-address">Belgique</p>
  163.                     <address>
  164.                         22, rte des Fagnes<br/> B-4190 Ferrières <br/> Belgique
  165.                     </address>
  166.                     <div class="infoContact">
  167.                         <p class="info-tel">
  168.                             <i class="fas fa-mobile-alt"></i> <span>04 268 18 41</span>
  169.                         </p>
  170.                         <p class="info-tel">
  171.                             <i class="fas fa-mobile-alt"></i> <span>04 349 03 03</span>
  172.                         </p>
  173.                         <p class="info-tel">
  174.                             FAX : <span>02 893 02 54</span>
  175.                         </p>
  176.                         <p class="info-mail">
  177.                             <i class="fa-solid fa-envelope"></i> <a href="mailto:commande@naturamedicatrix.be">commande@naturamedicatrix.be</a>
  178.                         </p>
  179.                         <p class="info-tva">TVA&nbsp;: BE 0543.862.766<br/></p>
  180.                         <p class="info-bank">(Belgique)<br/><i class="fa-solid fa-building-columns"></i> BE94 7320 3186 0814 <span class="bank-bic">(BIC: CREGBEBB)</span></p>
  181.                         <img class="img-fluid mb-2" src="{{ asset('img/leafy/leafy4x4.png') }}" alt="Leafy Footer">
  182.                     </div>
  183.                 </div>
  184.                 <div class="footer-address col-md-4 text-center mb-5">
  185.                     <i class="fab fa-envira fa-2x"></i>
  186.                     <p class="text-address">France / Luxembourg</p>
  187.                     <address>
  188.                         8, Hannert dem Duarref<br/> L-9772 Troine (Wincrange)<br/> Grand-Duché de Luxembourg
  189.                     </address>
  190.                     <div class="infoContact">
  191.                         <p class="info-tel">
  192.                             <i class="fas fa-mobile-alt"></i> <span>09 77 42 37 05 (France)</span>
  193.                         </p>
  194.                         <p class="info-tel">
  195.                             <i class="fas fa-mobile-alt"></i> <span>+352 20 88 11 95 (Luxembourg)</span>
  196.                         </p>
  197.                         <p class="info-tel">
  198.                             FAX : <span>+33 9 74 48 31 02</span>
  199.                         </p>
  200.                         <p class="info-mail">
  201.                             <i class="fa-solid fa-envelope"></i> <a href="mailto:commande@naturamedicatrix.fr">commande@naturamedicatrix.fr</a>
  202.                         </p>
  203.                         <p class="info-mail-lu">
  204.                             <i class="fa-solid fa-envelope"></i> <a href="mailto:commande@naturamedicatrix.lu">commande@naturamedicatrix.lu</a>
  205.                         </p>
  206.                         <p class="info-tva"> TVA&nbsp;: LU26788281 <br/> TVA&nbsp;: FR3980213161500014</p>
  207.                     </div>
  208.                     <p class="info-bank">(Luxembourg)<br/><i class="fa-solid fa-building-columns"></i> LU09 0141 6495 2300 0000 <span class="bank-bic">(BIC: CELLLULL)</span></p>
  209.                     <p class="info-bank">(France)<br/><i class="fa-solid fa-building-columns"></i> FR76 1670 6050 0753 9617 1298 620 <span class="bank-bic">(BIC: AGRIFRPP867)</span></p>
  210.                 </div>
  211.                 <div class="footer-address scientific-footer col-md-4 text-center">
  212.                     <i class="fa-solid fa-capsules"></i>
  213.                     <p class="text-address">Une question ? Contactez nos scientifiques</p>
  214.                     <div class="info-scientific">
  215.                         <p class="scientific-name">Anthony-Damien Désirée</p>
  216.                         <p class="scientific-title">PhD</p>
  217.                         <p class="scientific-desc">Doctorat en Biologie, Biochimie, Physiologie de la Nutrition (Université de Bourgogne, France)</p>
  218.                         <p class="info-tel"><i class="fas fa-mobile-alt"></i> +33 (0)3 66 88 02 34 (France)</p>
  219.                         <p class="info-tel"><i class="fas fa-mobile-alt"></i> +32 42 90 00 72 (Reste du monde)</p>
  220.                     </div>
  221.                     <hr/>
  222.                     <div class="info-scientific mt-3" >
  223.                         <p class="scientific-name">Fabien Piasco</p>
  224.                         <p class="scientific-title">Diététicien-nutritionniste</p>
  225.                         <p class="scientific-desc">D.E.S.S. en nutrition Alimentation fonctionnelle et santé (U. Laval, Ca)
  226.                             D.U. Nutrition et maladies métaboliques (U. Rennes I) Diététicien D.E. / Diplômé en neuro-nutrition (SiiN)</p>
  227.                         <p class="info-tel"><i class="fas fa-mobile-alt"></i> 04 85 44 01 24 (France)</p>
  228.                         <p class="info-tel"><i class="fas fa-mobile-alt"></i> 03 66 88 02 34 (France)</p>
  229.                     </div>
  230.                 </div>
  231.             </section>
  232.         </div>
  233.         <div class="footer-copyright text-center p-3">
  234.             © {{ "now"|date("Y") }} Copyright:
  235.             <a class="text-white" href="{{ path('accueil') }}">NATURAMedicatrix</a>
  236.         </div>
  237.     </footer>
  238.     {% endif %}
  239.     <!-- Footer -->
  240.     <div class="modal fade" id="takeControlModal" tabindex="-1" aria-labelledby="takeControlModalLabel" aria-hidden="true">
  241. {#    {{ dump(clients['clients'][7].AdditionalCompanyInformation[0].tva) }}#}
  242.         <div class="modal-dialog modal-dialog-centered">
  243.             <div class="modal-content">
  244.                 <div class="modal-header">
  245.                     <h5 class="modal-title text-center w-100">Prise de contrôle client</h5>
  246.                     <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  247.                 </div>
  248.                 <div class="modal-body p-4">
  249.                     <form action="{{ path('take_control') }}" method="post" class="w-100">
  250.                         <div class="mb-4">
  251.                             <div class="form-floating mb-3">
  252.                                 <input type="text" id="searchInput" placeholder="Rechercher un client..." class="form-control" />
  253.                                 <label for="searchInput">Rechercher un client...</label>
  254.                             </div>
  255.                             
  256.                             <div class="form-floating">
  257.                                 <select class="form-select" name="userControlledId" id="userControlledId">
  258.                                     <option value="">Sélectionner un client</option>
  259.                                     {% for client in clients['clients'] %}
  260.                                         {% for info in client.AdditionalCompanyInformation %}
  261.                                             <option value="{{ client.id }}">{{ info.tva }} - {{ client.email }}</option>
  262.                                         {% endfor %}
  263.                                     {% endfor %}
  264.                                 </select>
  265.                                 <label for="userControlledId">Choisir un client</label>
  266.                             </div>
  267.                         </div>
  268.                         
  269.                         <div class="d-grid gap-2">
  270.                             <button type="submit" class="btn modern-btn-small-primary py-3">
  271.                                 <i class="fas fa-user-check me-2"></i>
  272.                                 Prendre le contrôle du client
  273.                             </button>
  274.                         </div>
  275.                     </form>
  276.                     {% if clients['infocommercial'] != null %}
  277.                     <div class="border-0 pt-0 mt-2">
  278.                         <div class="d-grid w-100">
  279.                             <a href="{{ path('close_control') }}" class="btn btn-back py-3">
  280.                                 <i class="fas fa-user-times me-2"></i>
  281.                                 Arrêter le contrôle du client
  282.                             </a>
  283.                         </div>
  284.                     </div>
  285.                     {% endif %}
  286.                 </div>
  287.                 
  288.                 
  289.             </div>
  290.         </div>
  291.     </div>
  292.     <div class="modal" id="modal-invoices-dl" tabindex="-1">
  293.         <div class="modal-dialog modal-lg">
  294.             <div class="modal-content">
  295.                 <div class="modal-header">
  296.                     <h5 class="modal-title">Télécharger les tarifs 2025.</h5>
  297.                     <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  298.                 </div>
  299.                 <div class="modal-body d-flex align-items-center justify-content-around">
  300.                     <div class="row modalPartPdfTarif align-items-center mb-2">
  301.                         <div class="col-md-12 d-flex flex-column justify-content-center align-items-center mb-3 mt-4">
  302.                             <h3>PDF</h3>
  303.                             <i class="fa-solid fa-file-pdf"></i>
  304.                         </div>
  305.                         <div class="row mb-3 modalTarifNM_Jacob_Olivie justify-content-center align-items-center border-top">
  306.                             <div class="col-md-6 d-flex justify-content-center align-items-center flex-column">
  307.                                 <span style="font-size: 14px;" class="text-nowrap mt-3"><strong>Tarif NaturaMedicatrix-Olivie</strong></span>
  308.                                 <a href="{{ asset('tarifs/TARIF-Professionnel-NaturaMedicatrix-Olivie-2025.pdf') }}" target="_blank">
  309.                                     <button class="btn backgroundTextNav mt-3">Télécharger</button>
  310.                                 </a>
  311.                             </div>
  312.                             <div class="col-md-6 d-flex justify-content-center align-items-center flex-column ">
  313.                                 <span style="font-size: 14px;" class="text-nowrap mt-3"> <strong>Tarif Dr. Jacob’s®</strong></span>
  314.                                 <a href="{{ asset('tarifs/TARIF-Professionnel-JACOB\'s-2025.pdf') }}" target="_blank">
  315.                                     <button class="btn backgroundTextNav mt-3">Télécharger</button>
  316.                                 </a>
  317.                             </div>
  318.                         </div>
  319.                     </div>
  320.                     <div class="row modalPartExcelTarif align-items-center mb-2">
  321.                         <div class="col-md-12 d-flex flex-column justify-content-center align-items-center mb-3 mt-4">
  322.                             <h3>EXCEL</h3>
  323.                             <i class="fa-solid fa-file-excel"></i>
  324.                             {#                            <a href=""><button class="btn backgroundTextNav mt-3 mb-5">Télécharger</button></a>#}
  325.                         </div>
  326.                         <div class="row mb-3">
  327.                             <div class="col-md-12 d-flex justify-content-center align-items-center flex-column border-top ">
  328.                                 <span style="font-size: 14px;" class="mt-3"><strong>Tarif 2025</strong></span>
  329.                                 {% if app.user.AdditionalCompanyInformation is defined %}
  330.                                     {% for data in app.user.AdditionalCompanyInformation %}
  331.                                         {% if data.companyCountry == "France" or data.companyCountry == "Luxembourg" %}
  332.                                             <a href="{{ asset('tarifs/Tarif_professionnel_2025_France.xlsx') }}" target="_blank">
  333.                                                 <button class="btn backgroundTextNav mt-3">Télécharger</button>
  334.                                             </a>
  335.                                         {% else %}
  336.                                             <a href="{{ asset('tarifs/Tarif_professionnel_2025_Belgique.xlsx') }}" target="_blank">
  337.                                                 <button class="btn backgroundTextNav mt-3">Télécharger</button>
  338.                                             </a>
  339.                                         {% endif %}
  340.                                     {% endfor %}
  341.                                 {% endif %}
  342.                             </div>
  343.                         </div>
  344.                     </div>
  345.                 </div>
  346.             </div>
  347.         </div>
  348.     </div>
  349. {% endblock %}
  350. <!-- CDN BOOTSTRAP 5 -->
  351. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
  352.         integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
  353.         crossorigin="anonymous"></script>
  354. <!-- CDN jQuery-->
  355. <script src="https://code.jquery.com/jquery-3.7.0.js" integrity="sha256-JlqSTELeR4TLqP0OG9dxM7yDPqX1ox/HfgiSLBj8+kM="
  356.         crossorigin="anonymous"></script>
  357. <!-- CDN Easing, jQueryUI (animations) -->
  358. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js"></script>
  359. <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
  360. <!-- CDN DATATABLES JS -->
  361. <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.min.js"></script>
  362. <script type="text/javascript" src="https://cdn.datatables.net/buttons/1.4.1/js/dataTables.buttons.min.js"></script>
  363. <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/pdfmake.min.js"></script>
  364. <script type="text/javascript" src="https://cdn.datatables.net/buttons/1.4.1/js/buttons.html5.min.js"></script>
  365. <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
  366. <script>
  367.     $(document).ready(function() {
  368.         $("#myInput").on("keyup", function() {
  369.             var value = $(this).val().toLowerCase();
  370.             $("#table_all_clients tr").filter(function() {
  371.                 $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
  372.             });
  373.         });
  374.         $('.btn-dl-tarif').click(function(e){
  375.             e.preventDefault(); // Empêche le comportement de lien par défaut
  376.             $('#modal-invoices-dl').modal('show'); // Ouvre le modal
  377.         });
  378.         var $options = $("#userControlledId option").clone(); // clone original options
  379.         $("#searchInput").on("keyup", function() {
  380.             var searchVal = this.value.toLowerCase();
  381.             $("#userControlledId").empty(); // remove all options
  382.             $options.each(function() {
  383.                 var text = $(this).text().toLowerCase();
  384.                 if (text.indexOf(searchVal) !== -1) {
  385.                     $("#userControlledId").append(this);
  386.                 }
  387.             });
  388.         });
  389.     });
  390. </script>
  391. {% block javascripts %}
  392.     {{ encore_entry_script_tags('app') }}
  393. {% endblock %}
  394. </body>
  395. </html>