templates/front/product/single.html.twig line 1

Open in your IDE?
  1. {% extends 'base_front.html.twig' %}
  2. {% block meta %}
  3.     {% if notes['globalNote']['count'] > 0 %}
  4.         {% set globalNote = notes['globalNote']['totalNote'] / notes['globalNote']['count'] %}
  5.     {% else %}
  6.         {% set globalNote = 0 %}
  7.     {% endif %}
  8.     <title>Produit
  9.         {{ product.name }}</title>
  10.     <meta name="description" content="Le produit {{ product.name }} de la catégorie {{ product.subCategories.first.name }} {% if globalNote > 0 %}possède une note de {{ globalNote|number_format(1, '.') }}/5 {% else %}à un stock limité à {{ product.quantity }} articles, dépéchez-vous !{% endif %}">
  11.     {% if not product.isActivated %}
  12.         <meta name="robots" content="noindex">
  13.     {% endif %}
  14. {% endblock %}
  15. {% block style %}
  16.     <link href="{{ asset('css/jquery.rateyo.css') }}" rel="stylesheet">
  17.     <link rel="stylesheet" href="{{ asset('css/jquery.datetimepicker.min.css') }}">
  18.     <link rel="preconnect" href="https://fonts.gstatic.com">
  19.     <link href="https://fonts.googleapis.com/css2?family=Mukta&display=swap" rel="stylesheet">
  20.     <link rel="stylesheet" href="{{ asset('css/formReservation.css') }}">
  21.     <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
  22.     <link rel="stylesheet" href="{{ asset('css/singleProduct/style.css') }}">
  23.     <link rel="stylesheet" href="{{ asset('css/front/promo.css') }}">
  24. {% endblock %}
  25.    
  26. {% form_theme formComment _self %}
  27. {% block body %}
  28.     <!-- Modal options groups -->
  29.     <div class="modal fade" id="modalOptionGP" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
  30.         <div class="modal-dialog myWidth" role="document">
  31.             <div class="modal-content">
  32.                 {# <form action=""> #}
  33.                     <div class="modal-header">
  34.                         <h5 class="modal-title" id="">Modifier les groupes d'options</h5>
  35.                         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  36.                             <span aria-hidden="true">&times;</span>
  37.                         </button>
  38.                     </div>
  39.                     <div class="modal-body">
  40.                         <div class="row">
  41.                             {# <div class="col-lg-6 col-12" >
  42.                                 <div id="optionsimage">
  43.                                     <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ product.photos.toArray()[0].url) }}" alt="">
  44.                                 </div>
  45.                             </div> #}
  46.                             
  47.                             <div class="col-12" id="valeurOpion" style="display: block">
  48.                                 {# <div class="mb-3">
  49.                                     <div class="name_option">Type de visite <span>(choisir une seule option)</span></div>
  50.                                     <div class="cont_valeurs_option">
  51.                                         <div class="cont_one_value">
  52.                                             <div class="custom-control custom-radio">
  53.                                                 <input class="custom-control-input" type="radio" name="flexRadioDefault" id="flexRadioDefault1">
  54.                                                 <label class="custom-control-label one_value" for="flexRadioDefault1">
  55.                                                     <div class="infos_value">Visite thématique (par exemple : Histoire médiévale) <span>10 €</span></div>
  56.                                                 </label>
  57.                                             </div>
  58.                                             <div>
  59.                                                 <label for="flexRadioDefault1" class="labelOneValue">
  60.                                                     <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ product.photos[0].url) }}" alt="" srcset="">
  61.                                                 </label>
  62.                                             </div>
  63.                                         </div>
  64.                                         <div class="cont_one_value">
  65.                                             <div class="custom-control custom-radio">
  66.                                                 <input class="custom-control-input" type="radio" name="flexRadioDefault" id="flexRadioDefault1">
  67.                                                 <label class="custom-control-label one_value" for="flexRadioDefault1">
  68.                                                     <div class="infos_value">Type de visite<span>10 €</span></div>
  69.                                                 </label>
  70.                                             </div>
  71.                                             <div>
  72.                                                 <label for="flexRadioDefault1" class="labelOneValue">
  73.                                                     <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ product.photos[0].url) }}" alt="" srcset="">
  74.                                                 </label>
  75.                                             </div>
  76.                                         </div>
  77.                                         <div class="cont_one_value">
  78.                                             <div class="custom-control custom-radio">
  79.                                                 <input class="custom-control-input" type="radio" name="flexRadioDefault" id="flexRadioDefault1">
  80.                                                 <label class="custom-control-label one_value" for="flexRadioDefault1">
  81.                                                     <div class="infos_value">Type de visite<span>10 €</span></div>
  82.                                                 </label>
  83.                                             </div>
  84.                                             <div>
  85.                                                 <label for="flexRadioDefault1" class="labelOneValue">
  86.                                                     <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ product.photos[0].url) }}" alt="" srcset="">
  87.                                                 </label>
  88.                                             </div>
  89.                                         </div>
  90.                                     </div>
  91.                                 </div>
  92.                                 <div class="mb-3">
  93.                                     <div class="name_option">Options supplémentaires <span>(plusieurs choix possibles)</span></div>
  94.                                     <div class="cont_valeurs_option">
  95.                                         <div class="cont_one_value">
  96.                                             <div class="custom-control custom-checkbox">
  97.                                                 <input class="custom-control-input" type="checkbox" name="flexcheckboxDefault" id="flexcheckboxDefault1">
  98.                                                 <label class="custom-control-label one_value" for="flexcheckboxDefault1">
  99.                                                     <div class="infos_value">Visite thématique (par exemple : Histoire médiévale) <span>10 €</span></div>
  100.                                                 </label>
  101.                                             </div>
  102.                                             <label for="flexcheckboxDefault1" class="labelOneValue">
  103.                                                 <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ product.photos[0].url) }}" alt="" srcset="">
  104.                                             </label>
  105.                                         </div>
  106.                                         <div class="cont_one_value">
  107.                                             <div class="custom-control custom-checkbox">
  108.                                                 <input class="custom-control-input" type="checkbox" name="flexcheckboxDefault" id="flexcheckboxDefault1">
  109.                                                 <label class="custom-control-label one_value" for="flexcheckboxDefault1">
  110.                                                     <div class="infos_value">Type de visite<span>10 €</span></div>
  111.                                                 </label>
  112.                                             </div>
  113.                                             <label for="flexcheckboxDefault1" class="labelOneValue">
  114.                                                 <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ product.photos[0].url) }}" alt="" srcset="">
  115.                                             </label>
  116.                                         </div>
  117.                                         <div class="cont_one_value">
  118.                                             <div class="custom-control custom-checkbox">
  119.                                                 <input class="custom-control-input" type="checkbox" name="flexcheckboxDefault" id="flexcheckboxDefault1">
  120.                                                 <label class="custom-control-label one_value" for="flexcheckboxDefault1">
  121.                                                     <div class="infos_value">Type de visite<span>10 €</span></div>
  122.                                                 </label>
  123.                                             </div>
  124.                                             <label for="flexcheckboxDefault1" class="labelOneValue">
  125.                                                 <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ product.photos[0].url) }}" alt="" srcset="">
  126.                                             </label>
  127.                                         </div>
  128.                                     </div>
  129.                                 </div> #}
  130.                             </div>
  131.                         </div>
  132.                         
  133.                     </div>
  134.                     {# {% endfor %}
  135.                     {% endif %} #}
  136.                     <div class="modal-footer">
  137.                         <button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
  138.                         <button type="submit" class="btn btn-primary" id="" onclick="validemodalgroupe('goptions')">Valider</button>
  139.                     </div>
  140.                 {# </form> #}
  141.             </div>
  142.         </div>
  143.     </div>
  144.     <!-- Fin Modal options groups -->
  145.     <!-- Modal option chambre -->
  146.     <div class="modal fade" id="modalOptionChambre" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
  147.         <div class="modal-dialog myWidth" role="document">
  148.             <div class="modal-content">
  149.                 {# <form action=""> #}
  150.                     <div class="modal-header">
  151.                         <h5 class="modal-title" id="">Selectionner les chambres</h5>
  152.                         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  153.                             <span aria-hidden="true">&times;</span>
  154.                         </button>
  155.                     </div>
  156.                     <div class="modal-body">                        
  157.                         {# Option chambre #}
  158.                     {% if product.typeHebergements is not null %}
  159.                         <div class="container my-3">
  160.                             <div class="row">
  161.                                 {% if product.chambres.toArray()|length > 0 %}
  162.                                     {% for index, chambre in product.chambres %}
  163.                                         {% if chambre.imageChambre %}
  164.                                             <div class="col-lg-6 col-md-6 col-10 mb-4">
  165.                                                 <img src="{{ asset(constant('App\\Services\\File::IMAGE_ROOM_OPTION_DIR') ~ chambre.imageChambre) }}" alt="" class="imageChambre">
  166.                                             </div>
  167.                                         {% else %}
  168.                                             <div class="col-md-6 col-10 mb-4"></div>
  169.                                         {% endif %}
  170.                                         <div class="col-lg-4 col-md-4 col-4 my-auto para">
  171.                                             {# <p class="para-1">Chambre n° {{ index }}</h4> #}
  172.                                             {% if chambre.typeChambre %}
  173.                                                 <p class="para-1">{{ chambre.typeChambre }}</p>
  174.                                             {% endif %}
  175.                                             <p class="para-3"> 
  176.                                                 {% for Typelits, qt in chambre.litChambreData %}
  177.                                                     
  178.                                                     {% if product.typeHebergements.slugTypeHebergm == "hotel" %}
  179.                                                         {% set nbrParticipants = 0 %}
  180.                                                         {% for lit in chambre.typeDeLits.toArray() %}
  181.                                                             {% set nbrParticipants = nbrParticipants + lit.place %}
  182.                                                         {% endfor %}
  183.                                                         <input type="hidden" name="" id="roomParticipant_{{ chambre.id}}" value="{{nbrParticipants}}">
  184.                                                     {% endif %}
  185.                                                 
  186.                                                 {# {% if chambre.nombreLits %} #}
  187.                                                     <span class="span-1">{{ qt }} {{ Typelits }}{{ qt > 1 ? "s" : '' }} </span><br>
  188.                                                 {# {% endif %} #}
  189.                                                 {% endfor %}
  190.                                             </p>
  191.                                             {# Price if hotel #}
  192.                                             {% if product.typeHebergements.slugTypeHebergm == "hotel" %}
  193.                                                 <p>Prix par nuit : {{ chambre.tarifNuit }} €</p>
  194.                                                 <input type="hidden" name="" id="priceRoom_{{ chambre.id }}" value="{{ chambre.tarifNuit }}">
  195.                                                     {# Prix par jour : {{ chambre.tarifJour }} €</p> #}
  196.                                             {% else %} {# if not hotel#}
  197.                                                 {# <p>[prixnothotel]</p> #}
  198.                                             {% endif %}
  199.                                         </div> 
  200.                                         <div class="col-lg-2 col-md-2 col-3 my-auto">
  201.                                             <div class="buttonAdd" class="form-check">
  202.                                                 <input class="form-check-input" type="checkbox" value="" id="roomButton_{{ chambre.id }}">
  203.                                                 <label class="form-check-label" for="defaultCheck1" style="line-height: initial; font-weight: bold;">
  204.                                                     Ajouter
  205.                                                 </label>
  206.                                             </div>
  207.                                         </div>
  208.                                         {# <div class="col-lg-3 col-md-3 col-3 my-auto">
  209.                                             <button class="btn btn-primary btn-sm" id="roomButton{{ roomHebergment.id }}" data-statut="ajouter" onclick="toggleRoomSelection({{ roomHebergment.id }})" style="height: auto;">
  210.                                                 Ajouter
  211.                                             </button>
  212.                                         </div> #}
  213.                                     {% endfor %}
  214.                                 {% else %}
  215.                                     <p class="mx-auto">Pas de chambre...</p>
  216.                                 {% endif %}
  217.                             </div>
  218.                         </div>
  219.                     {% endif %}
  220.                         
  221.                     </div>
  222.                     {# {% endfor %}
  223.                     {% endif %} #}
  224.                     <div class="modal-footer">
  225.                         <button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
  226.                         <button type="submit" class="btn btn-primary" id="" onclick="validemodalgroupe('chambre')">Valider</button>
  227.                     </div>
  228.                 {# </form> #}
  229.             </div>
  230.         </div>
  231.     </div>
  232.     <!-- Fin Modal option chambre -->
  233.     <!-- Modal options -->
  234.     <div class="modal fade" id="modalOption" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
  235.         <div class="modal-dialog myWidth" role="document">
  236.             <div class="modal-content">
  237.                 {# <form action=""> #}
  238.                     <div class="modal-header">
  239.                         <h5 class="modal-title" id="">Modifier les options</h5>
  240.                         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  241.                             <span aria-hidden="true">&times;</span>
  242.                         </button>
  243.                     </div>
  244.                     <div class="modal-body">
  245.                         <div class="row">
  246.                             <input type="hidden" id="id_optionmodal">
  247.                             <input type="hidden" id="name_optionmodal">
  248.                             <input type="hidden" id="image_optionmodal">
  249.                             <div class="col-lg-6 col-12" >
  250.                                 <div id="optionsimage"></div>
  251.                             </div>
  252.                             
  253.                             <div class="col-lg-6 col-12" style="display: block">
  254.                                 <div class="optionscolor">
  255.                                     <label >couleur d'option</label>
  256.                                     <select name="" id="optionscolor" class="form-control wide" style="display: block;">
  257.                                     </select>
  258.                                 </div><br>
  259.                                 <div class="optionsform">
  260.                                     <label for="optionsform">Format</label>
  261.                                     <select name="" id="optionsform" class="form-control wide" style="display: block !important;">    
  262.                                     </select>    
  263.                                 </div><br>
  264.                                 <div class="optionsfinition">
  265.                                     <label for="optionsfinition">Finition :</label>
  266.                                     <select name="" id="optionsfinition" class="form-control wide" style="display: block !important;">
  267.                                     </select>
  268.                                 </div><br>
  269.                                 <div class="optionspapier">
  270.                                     <label for="optionspapier">Papier :</label>
  271.                                     <select name="" id="optionspapier" class="form-control wide"style="display: block !important;">
  272.                                     </select>
  273.                                 </div><br>
  274.                                 <div class="optionsetiquette">
  275.                                     <label for="optionsetiquette">Étiquette :</label>
  276.                                     <select name="" id="optionsetiquette" class="form-control wide" style="display: block !important;">    
  277.                                     </select>
  278.                                 </div><br>
  279.                                 <div class="optionsruban">
  280.                                     <label for="optionsruban">Ruban: :</label>
  281.                                     <select name="" id="optionsruban" class="form-control wide" style="display: block !important;">    
  282.                                     </select>
  283.                                 </div><br>
  284.                                 <div class="optionsquantite">
  285.                                 <label for="optionsquantite">Quantité :</label>
  286.                                 <select name="" id="optionsquantite" class="form-control wide" style="display: block !important;">
  287.                                 </select>
  288.                                 </div><br>
  289.                             </div>
  290.                         </div>
  291.                     </div>
  292.                     {# {% endfor %}
  293.                     {% endif %} #}
  294.                     <div class="modal-footer">
  295.                         <button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
  296.                         <button type="submit" class="btn btn-primary" id="validemodaloption" onclick="validemodaloption()">Ok</button>
  297.                     </div>
  298.                 {# </form> #}
  299.             </div>
  300.         </div>
  301.     </div>
  302.     <!-- Fin Modal options -->
  303.     <!-- Modal Reductions -->
  304.     <div class="modal fade" id="modalReduction" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
  305.             <div class="modal-dialog myWidth" role="document">
  306.                     <div class="modal-content">
  307.                             <div class="modal-header">
  308.                                     <h5 class="modal-title" id="">Les réductions disponibles pour cet hébergement</h5>
  309.                                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  310.                                             <span aria-hidden="true">&times;</span>
  311.                                     </button>
  312.                             </div>
  313.                             <div class="modal-body">
  314.                                     {% for reductionData in product.productReductions %}
  315.                                         <div class="reduction-item">
  316.                                             <p class="p-3">
  317.                                                 - Recevez une réduction de <b>{{ reductionData.reduction }}%</b> 
  318.                                                 si vous faites une réservation à partir de 
  319.                                                 <b>{{ reductionData.startDay }} jours</b>.
  320.                                             </p>
  321.                                         </div>
  322.                                     {% endfor %}
  323.                             </div>
  324.                     </div>
  325.             </div>
  326.     </div>
  327.     <!-- Fin Modal Reductions -->
  328.     <!-- Modal Tarif Degressif -->
  329.     <div class="modal fade" id="modalTarif" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle"
  330.         aria-hidden="true">
  331.         <div class="modal-dialog myWidth" role="document">
  332.             <div class="modal-content">
  333.                 <div class="modal-header">
  334.                     <h5 class="modal-title" id="">Les tarifs degressifs disponibles pour cette activités</h5>
  335.                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  336.                         <span aria-hidden="true">&times;</span>
  337.                     </button>
  338.                 </div>
  339.                 <div class="modal-body">
  340.                     {% for tarif in product.tarifDegressifs %}
  341.                     <div class="tarif-item">
  342.                         <p class="p-3">
  343.                             - Si vous êtes à partir de <b>{{ tarif.nbrPers }} personnes</b>,
  344.                             vous recevriez une réduction de
  345.                             <b>{{ tarif.reduction }}%</b>.
  346.                         </p>
  347.                     </div>
  348.                     {% endfor %}
  349.                 </div>
  350.             </div>
  351.         </div>
  352.     </div>
  353.     <!-- Fin Modal Reductions -->
  354.     <!-- Modal caracteristique hebergement -->
  355.     <div class="modal fade" id="modalCarateristiqHeb" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle"
  356.         aria-hidden="true">
  357.         <div class="modal-dialog modal600" role="document">
  358.             <div class="modal-content">
  359.                 <div class="modal-header">
  360.                     <h5 class="modal-title" id="">Caractéristiques de l'hébergement</h5>
  361.                     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  362.                         <span aria-hidden="true">&times;</span>
  363.                     </button>
  364.                 </div>
  365.                 <div class="modal-body">
  366.                         <div class="card-body info-hebegement">
  367.                             {% set totalChambre = 0 %}
  368.                             {% if product.chambres.toArray() != [] %} {# If the product have chambre #}    
  369.                                 {% for chambre in product.chambres %}
  370.                                     {% set totalChambre = totalChambre + chambre.NumChambre %}
  371.                                 {% endfor %}
  372.                             {% else %}
  373.                                 {% set totalChambre = product.nbChambre %}        
  374.                             {% endif %}
  375.                             
  376.                             <p class="card-text"><i class="fas fa-home" style="color:#FE7708"></i>  Nombre total de chambres: 
  377.                             <span style="color:#0DE8C7">{{ totalChambre }}</span> 
  378.                             </p>
  379.                             {% if product.securities.toArray() != [] %}
  380.                             <p class="card-text"><i class="fas fa-shield-alt" style="color:#FE7708"></i> Sécurité: 
  381.                             {% for securt in product.securities.toArray() %}
  382.                                 <span style="color:#0DE8C7"> {{ securt.labels }} </span>
  383.                                 {% if not loop.last %}, {% endif %}
  384.                             {% endfor %}
  385.                             </p>
  386.                             {% endif %}
  387.                             {% if product.typeLocalisations.toArray() != [] %}
  388.                             <p class="card-text"><i class="fas fa-map-marker-alt" style="color:#FE7708"></i> Localisation:
  389.                             {% for typeLocalisation in product.typeLocalisations.toArray() %}
  390.                                 <span style="color:#0DE8C7">
  391.                                     {{ typeLocalisation.labels }}
  392.                                 </span> {% if not loop.last %}, {% endif %}
  393.                             {% endfor %}
  394.                             </p>
  395.                             {% endif %}
  396.                             {% if product.equipment.toArray() != [] %}
  397.                             <p class="card-text"><i class="fas fa-tools" style="color:#FE7708"></i> Équipements: 
  398.                             {% for equipt in product.equipment.toArray() %}
  399.                                 <span style="color:#0DE8C7"> {{ equipt.labels }} </span>
  400.                                 {% if not loop.last %}, {% endif %}
  401.                             {% endfor %}
  402.                             </p>
  403.                             {% endif %}
  404.                             {% if product.caracteristics.toArray() != [] %}
  405.                             <p class="card-text"><i class="fas fa-cogs" style="color:#FE7708"></i> Confort: 
  406.                             {% for caract in product.caracteristics.toArray() %}
  407.                                 <span style="color:#0DE8C7"> {{ caract.labels }} </span>
  408.                                 {% if not loop.last %}, {% endif %}
  409.                             {% endfor %}
  410.                             </p>
  411.                             {% endif %}
  412.                             {% if product.langueHotes.toArray() != [] %}
  413.                             <p class="card-text"><i class="fa fa-language" style="color:#FE7708"></i> Langage propriétaire:
  414.                             {% for langue in product.langueHotes.toArray() %}
  415.                                 <span style="color:#0DE8C7"> {{ langue.labels }} </span>
  416.                                 {% if not loop.last %}, {% endif %}
  417.                             {% endfor %}
  418.                             </p>
  419.                             {% endif %}
  420.                             {% if product.equipementsCuisines.toArray() != [] %}
  421.                             <p class="card-text"><i class="fas fa-drumstick-bite" style="color:#FE7708"></i> Equipements de cuisine:
  422.                             {% for equipementCuisine in product.equipementsCuisines.toArray() %}
  423.                                 <span style="color:#0DE8C7"> {{ equipementCuisine.labels }} </span>
  424.                                 {% if not loop.last %}, {% endif %}
  425.                             {% endfor %}
  426.                             </p>
  427.                             {% endif %}
  428.                             {% if product.salleDeBains.toArray() != [] %}
  429.                             <p class="card-text"><i class="fas fa-sink" style="color:#FE7708"></i> Salle de bain:
  430.                             {% for oneSalleDeBain in product.salleDeBains.toArray() %}
  431.                                 <span style="color:#0DE8C7"> {{ oneSalleDeBain.labels }} </span>
  432.                                 {% if not loop.last %}, {% endif %}
  433.                             {% endfor %}
  434.                             </p>
  435.                             {% endif %}
  436.                             {% if product.accessoiresDeChambres.toArray() != [] %}
  437.                             <p class="card-text"><i class="fas fa-person-booth" style="color:#FE7708"></i> Accessoires de chambres:
  438.                             {% for oneAccessoiresDeChambres in product.accessoiresDeChambres.toArray() %}
  439.                                 <span style="color:#0DE8C7"> {{ oneAccessoiresDeChambres.labels }} </span>
  440.                                 {% if not loop.last %}, {% endif %}
  441.                             {% endfor %}
  442.                             </p>
  443.                             {% endif %}
  444.                             {% if product.mobilierExterieurs.toArray() != [] %}
  445.                             <p class="card-text"><i class="fas fa-seedling" style="color:#FE7708"></i> Mobilier extérieur:
  446.                             {% for oneMobilierExterieurs in product.mobilierExterieurs.toArray() %}
  447.                                 <span style="color:#0DE8C7"> {{ oneMobilierExterieurs.labels }} </span>
  448.                                 {% if not loop.last %}, {% endif %}
  449.                             {% endfor %}
  450.                             </p>
  451.                             {% endif %}
  452.                         </div>
  453.                     
  454.                 </div>
  455.             </div>
  456.         </div>
  457.     </div>
  458.     <!-- Fin Modal caracteristique hebergement -->
  459.     <div class="list-single-carousel" style="margin-top:90px; position: relative">
  460.         <div class="owl-carousel owl-theme owl-second">
  461.             {% for photo in product.photos %}
  462.                 <div class="item" style="height:400px;background:url({{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ photo.url) }})no-repeat center;background-size: cover" alt="{{ photo.url }}"></div>
  463.             {% endfor %}
  464.         </div>
  465.         <div class="col-md-2 col-12 btnMedia">
  466.             <div class="vendor-head text-xl-right row">
  467.                 {% if product.photos is not empty %}
  468.                     <div class="col-md-12 mb-3">
  469.                         <a href="#" class="btn btn-default btn-sm ml-2 text-center" id="open-popup-images">Voir les photos</a>
  470.                     </div>
  471.                 {% endif %}
  472.                 {% if product.youtubeVideo %}
  473.                     <div class="col-md-12">
  474.                         <a class="popup-youtube btn btn-default btn-sm ml-2 text-center" href="{{ product.youtubeVideo }}">Voir la vidéo</a>
  475.                     </div>
  476.                 {% endif %}
  477.             </div>
  478.         </div>
  479.     </div>
  480.     {% if isPromoAdmin %}
  481.     <div class="bannier-promo mt-5">
  482.         <div class="cont container">
  483.             Promotion
  484.             <span class="percent">{{ isPromoAdmin.value }}%</span>
  485.             {# <svg class="outlined-text" width="80%" height="200" viewBox="0 0 800 200" preserveAspectRatio="xMidYMid meet">
  486.                 <text x="50" y="140">-20%</text>
  487.             </svg> #}
  488.             de commission en cours jusqu'au <span class="date-fin-prom">{{ isPromoAdmin.endAt|format_date('long', locale='fr') }}</span>
  489.             pour tous les serveices
  490.         </div>
  491.     </div>
  492.     {% endif %}    
  493.     <div class="list-single-second mt-1">
  494.         <div class="container">
  495.             <div class="">
  496.                 <h2 class="mb10 card titreProduct">{{ product.name }}</h2>
  497.                 <div class="row">
  498.                     <div class="col-md-6 col-12">
  499.                         <div class="vendor-head text-left">
  500.                             <p class="text-black-50">
  501.                                 <span class="mr-2">
  502.                                     <i class="fas fa-map-marker-alt "></i>
  503.                                 </span>
  504.                                 {% for department in product.departments %}
  505.                                     {{ department.name }}
  506.                                     {% if not loop.last %},
  507.                                     {% endif %}
  508.                                 {% else %}
  509.                                     Dans toute la France
  510.                                 {% endfor %}
  511.                                 <br>Service de la catégorie
  512.                                 <a href="{{ path('front_product_subcategory', {'subCategorySlug': product.subCategories.first.subCategorySlug}) }}" class="btn-default-link">{{ product.subCategories.first.name }}</a>
  513.                             </p>
  514.                             <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter">
  515.                                 Lire  les  conditions générales de vente
  516.                             </button>
  517.                             
  518.                             <!-- Modal -->
  519.                             {% if (product.company.conditionsVente|raw)  is null or (product.company.conditionsVente|raw == '') %}
  520.                                 <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  521.                                     <div class="modal-dialog modal-xl" role="document">
  522.                                         <div class="modal-content">
  523.                                         <div class="modal-header">
  524.                                             <h5 class="modal-title" id="exampleModalCenterTitle">Condition générale de vente</h5>
  525.                                             <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  526.                                             <span aria-hidden="true">&times;</span>
  527.                                             </button>
  528.                                         </div>
  529.                                         <div class="modal-body">
  530.                                                 Veulliez contactez votre prestataire pour connaitre la condition de vente
  531.                                         </div>
  532.                                         </div>
  533.                                     </div>
  534.                                 </div>
  535.                             {% else %}
  536.                                 <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  537.                                     <div class="modal-dialog modal-xl" role="document">
  538.                                         <div class="modal-content">
  539.                                         <div class="modal-header">
  540.                                             <h5 class="modal-title" id="exampleModalCenterTitle">Condition générale de vente</h5>
  541.                                             <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  542.                                             <span aria-hidden="true">&times;</span>
  543.                                             </button>
  544.                                         </div>
  545.                                         <div class="modal-body">
  546.                                                 {{ product.company.conditionsVente | raw }}
  547.                                         </div>
  548.                                         </div>
  549.                                     </div>
  550.                                 </div>                    
  551.                             {% endif %}
  552.                             
  553.                         </div>
  554.                     </div>
  555.                     
  556.                     {# for hebergement only#}
  557.                     {% if product.typeHebergements is not null%}    
  558.                     <div class="col-md-6">
  559.                         <div class="card">
  560.                             <div class="card-body info-hebegement">
  561.                                 {% set totalChambre = 0 %}
  562.                                 {% if product.chambres.toArray() != [] %} {# If the product have chambre #}    
  563.                                     {% for chambre in product.chambres %}
  564.                                         {% set totalChambre = totalChambre + chambre.NumChambre %}
  565.                                     {% endfor %}
  566.                                 {% else %}
  567.                                     {% set totalChambre = product.nbChambre %}        
  568.                                 {% endif %}
  569.                                 
  570.                                 <p class="card-text"><i class="fas fa-home" style="color:#FE7708"></i>  Nombre total de chambres: 
  571.                                 <span style="color:#0DE8C7">{{ totalChambre }}</span> 
  572.                                 </p>
  573.                                 
  574.                                 {% if product.securities.toArray() != [] %}
  575.                                 <p class="card-text"><i class="fas fa-shield-alt" style="color:#FE7708"></i> Sécurité: 
  576.                                 {% for securt in product.securities.toArray() %}
  577.                                     <span style="color:#0DE8C7"> {{ securt.labels }} </span>
  578.                                     {% if not loop.last %}, {% endif %}
  579.                                 {% endfor %}
  580.                                 </p>
  581.                                 {% endif %}
  582.                                 {% if product.typeLocalisations.toArray() != [] %}
  583.                                 <p class="card-text"><i class="fas fa-map-marker-alt" style="color:#FE7708"></i> Localisation:
  584.                                 {% for typeLocalisation in product.typeLocalisations.toArray() %}
  585.                                     <span style="color:#0DE8C7">
  586.                                         {{ typeLocalisation.labels }}
  587.                                     </span> {% if not loop.last %}, {% endif %}
  588.                                 {% endfor %}
  589.                                 </p>
  590.                                 {% endif %}
  591.                                 {% if product.equipment.toArray() != [] %}
  592.                                 <p class="card-text"><i class="fas fa-tools" style="color:#FE7708"></i> Équipements: 
  593.                                 {% for equipt in product.equipment.toArray() %}
  594.                                     <span style="color:#0DE8C7"> {{ equipt.labels }} </span>
  595.                                     {% if not loop.last %}, {% endif %}
  596.                                 {% endfor %}
  597.                                 </p>
  598.                                 {% endif %}
  599.                                 {% if product.caracteristics.toArray() != [] %}
  600.                                 <p class="card-text"><i class="fas fa-cogs" style="color:#FE7708"></i> Confort: 
  601.                                 {% for caract in product.caracteristics.toArray() %}
  602.                                     <span style="color:#0DE8C7"> {{ caract.labels }} </span>
  603.                                     {% if not loop.last %}, {% endif %}
  604.                                 {% endfor %}
  605.                                 </p>
  606.                                 {% endif %}
  607.                                 {% if product.langueHotes.toArray() != [] %}
  608.                                 <p class="card-text"><i class="fa fa-language" style="color:#FE7708"></i> Langage propriétaire:
  609.                                 {% for langue in product.langueHotes.toArray() %}
  610.                                     <span style="color:#0DE8C7"> {{ langue.labels }} </span>
  611.                                     {% if not loop.last %}, {% endif %}
  612.                                 {% endfor %}
  613.                                 </p>
  614.                                 {% endif %}
  615.                             </div>
  616.                             <button type="button" class="btn btn-primary" id="btnMoreCaraqHeb" data-toggle="modal" data-target="#modalCarateristiqHeb">Plus de details</details></button>
  617.                         </div>
  618.                     </div>
  619.                     {% endif %}
  620.                     {# for location voiture only #}
  621.                     {% set isVehicules = false %}
  622.                     {% for singleCategory in product.subcategories %}
  623.                         {% if singleCategory.id == 53 %} {# if subcategories is vehicules #}
  624.                             {% set isVehicules = true %}
  625.                         {% endif %}
  626.                     {% endfor %}
  627.                     
  628.                     {% if isVehicules == true %}
  629.                     <div class="col-md-6">
  630.                         <div class="card">
  631.                             <div class="card-body infoVehicl">
  632.                                 <div class="oneInfoVehicl">
  633.                                     <div class="cercle-icon">
  634.                                         <img src="{{ asset('icon/vehicules/manual-transmission.png') }}" alt="">
  635.                                     </div>
  636.                                     {# Manuelle #}
  637.                                     {{caracteristiques["gearboxType"] is not null ? caracteristiques["gearboxType"] : "-" }}
  638.                                 </div>
  639.                                 <div class="oneInfoVehicl">
  640.                                     <div class="cercle-icon">
  641.                                         <img src="{{ asset('icon/vehicules/canister.png') }}" alt="">
  642.                                     </div>
  643.                                     {# Essence #}
  644.                                     {{caracteristiques["fuelType"] is not null ? caracteristiques["fuelType"] : "-" }}
  645.                                 </div>
  646.                                 <div class="oneInfoVehicl">
  647.                                     <div class="cercle-icon">
  648.                                         <img src="{{ asset('icon/vehicules/air-conditioner.png') }}" alt="">
  649.                                     </div>
  650.                                     {# Oui #}
  651.                                     {% if caracteristiques["isAirConditioned"]%}
  652.                                         Oui
  653.                                     {% else %}
  654.                                         Non
  655.                                     {% endif %}
  656.                                 </div>
  657.                                 <div class="oneInfoVehicl">
  658.                                     <div class="cercle-icon">
  659.                                         <img src="{{ asset('icon/vehicules/car.png') }}" alt="">
  660.                                     </div>
  661.                                     {# 5 portes #}
  662.                                     {{ caracteristiques["doorCount"] is not null ? caracteristiques["doorCount"] ~ " portes" : "-"  }}
  663.                                 </div>
  664.                                 <div class="oneInfoVehicl">
  665.                                     <div class="cercle-icon">
  666.                                         <img src="{{ asset('icon/vehicules/people.png') }}" alt="">
  667.                                     </div>
  668.                                     {# 5 places #}
  669.                                     {{caracteristiques["seatCount"] is not null ? caracteristiques["seatCount"] ~ " places" : "-" }}
  670.                                 </div>
  671.                                 <div class="oneInfoVehicl">
  672.                                     <div class="cercle-icon">
  673.                                         <img src="{{ asset('icon/vehicules/download-speed.png') }}" alt="">
  674.                                     </div>
  675.                                     {# Illimité #}
  676.                                     {{caracteristiques["speedLimit"] is not null ? caracteristiques["speedLimit"] ~ " Km/h" : "Illimité" }}
  677.                                 </div>
  678.                             </div>
  679.                         </div>
  680.                     </div>
  681.                     {% endif %}
  682.                 </div>
  683.             </div>
  684.             <div class="vendor-meta bg-white border m-0 ">
  685.                 <div class="vendor-meta-item vendor-meta-item-bordered">
  686.                     {% if product.typeHebergements is null or product.typeHebergements.slugTypeHebergm != 'hotel' %}
  687.                             {% set today = "now"|date('Y-m-d') %}
  688.                             {% set customPriceFound = false %}
  689.                             {% set customPrice = 0 %}
  690.                             {% set currentPrice = 0 %}
  691.                             {% set price = 0 %}
  692.                             {% set difference = null %}
  693.                             {% set reductionPercentage = 0 %}
  694.                             {% set duration = null %}
  695.                             {% set countdown = null %}
  696.                             {% set reductionValid = false %}
  697.                             
  698.                             {% for dayPrice in product.dayPrice %}
  699.                                 {% set formattedDate = dayPrice.customDate|date('Y-m-d') %}
  700.                                 {% if formattedDate == today %}
  701.                                     {% set customPriceFound = true %}
  702.                                     {% set customPrice = dayPrice.customPrice|number_format(2, '.', '') %}
  703.                                 {% endif %}
  704.                             {% endfor %}
  705.                             
  706.                             {% set month = "now"|date('n') %}
  707.                                 {% if month >= 3 and month <= 5 %}
  708.                                     {% set springPrice = product.springPrice %}
  709.                                     {% if springPrice is not null %}
  710.                                         {% set currentPrice = product.springPrice %}
  711.                                     {% else %}
  712.                                         {% set currentPrice = 0 %}                                                                
  713.                                     {% endif %}
  714.                                 {% elseif month >= 6 and month <= 8 %}
  715.                                     {% set summerPrice = product.summerPrice %}
  716.                                     {% if summerPrice is not null %}
  717.                                         {% set currentPrice = product.summerPrice %}
  718.                                     {% else %}
  719.                                         {% set currentPrice = 0 %}                                                                
  720.                                     {% endif %}
  721.                                 {% elseif month >= 9 and month <= 11 %}
  722.                                     {% set autumnPrice = product.autumnPrice %}
  723.                                     {% if autumnPrice is not null %}
  724.                                         {% set currentPrice = product.autumnPrice %}
  725.                                     {% else %}
  726.                                         {% set currentPrice = 0 %}                                                                
  727.                                     {% endif %}
  728.                                 {% else %}
  729.                                     {% set winterPrice = product.winterPrice %}
  730.                                     {% if winterPrice is not null %}
  731.                                         {% set currentPrice = product.winterPrice %}
  732.                                     {% else %}
  733.                                         {% set currentPrice = 0 %}                                                                
  734.                                     {% endif %}
  735.                                 {% endif %}
  736.                                 {% set day = "now"|date('N') %}
  737.                                 {% if day == 6 or day == 7 %}
  738.                                     {% set weekEndPrice = product.weekEndPrice %}
  739.                                     {% if weekEndPrice is not null %}
  740.                                         {% set currentPrice = product.weekEndPrice %}    
  741.                                     {% else %}
  742.                                         {% set currentPrice = 0 %}                                                            
  743.                                     {% endif %}
  744.                                 {% endif %}
  745.                                 {% set periodPrice = 0 %}
  746.                                 {% for period in product.periodPrice.toArray() %}
  747.                                     {% set startDate = period.startDate|date("Y-m-d") %}
  748.                                     {% set endDate = period.endDate|date("Y-m-d") %}
  749.                                     {% if today >= startDate and today <= endDate and period.price is not null %}
  750.                                         {% set periodPrice = period.price %}
  751.                                     {% else %}
  752.                                         {% set currentPrice = 0 %}
  753.                                     {% endif %}
  754.                                 {% endfor %}
  755.                                 {% if periodPrice != 0 %}
  756.                                     {% set currentPrice = periodPrice %}
  757.                                 {% endif %}
  758.                             {% if customPriceFound and customPrice !=0 %}
  759.                                 {% set price = customPrice %}
  760.                             {% elseif currentPrice != 0 and currentPrice is not null and customPrice == 0 %}
  761.                                 {% set price = currentPrice %}
  762.                             {% elseif currentPrice == 0 or currentPrice is null and customPrice == 0 %}
  763.                                 {% set price = product.price %}
  764.                             {% endif %} 
  765.                             {% for autoReduce in product.productAutoReduction.toArray %}
  766.                                 {% if autoReduce.createdAt is not null and autoReduce.countdown is not null and autoReduce.duration is not null  and autoReduce.reductionPercentage is not null %}
  767.                                     {% set difference = date(today).diff(autoReduce.createdAt).days %}
  768.                                     {% set duration = autoReduce.duration %}
  769.                                     {% set countdown = autoReduce.countdown %}
  770.                                     {% set reductionPercentage = autoReduce.reductionPercentage %}
  771.                                     {% set durationout = duration + countdown %}
  772.                                     {# {{ dump(countdown,difference,durationout,duration) }} #}
  773.                                     {% set reductionValid = difference > countdown and difference <= durationout %}
  774.                                 {% endif %}
  775.                             {% endfor %}
  776.                             {% if product.company.type != "service" %}
  777.                                 <span class="vendor-price">
  778.                                     {{ product.price|number_format(2, '.', '') }}€
  779.                                 </span>
  780.                             {% elseif reductionValid %}
  781.                                 {% set priceReduced = price - ((price * reductionPercentage) / 100) %}
  782.                                 <span class="vendor-price">
  783.                                     {{ priceReduced|number_format(2, '.', '') }}€
  784.                                 </span>                                                        
  785.                             {% else %}
  786.                                 <span class="vendor-price">
  787.                                     {{ price|number_format(2, '.', '') }}€
  788.                                 </span>
  789.                             {% endif %}
  790.                     <span class="vendor-text">Prix</span>
  791.                     {% else %}
  792.                         {% set lengthRoomNight = 0 %}
  793.                         {% set statusByNight = false %}
  794.                         {% set allPriceByNight = 0 %}
  795.                         {% set lengthRoomDay = 0 %}
  796.                         {% set statusByDay = false %}
  797.                         {% set allPriceByDay = 0 %}
  798.                         {% if product.chambres is defined %}
  799.                             {% for roomOption in product.chambres.toArray %}
  800.                                 {% if roomOption.tarifNuit is defined %}
  801.                                     {% set lengthRoomNight = lengthRoomNight + 1 %}
  802.                                     {% set statusByNight = true %}
  803.                                     {% set allPriceByNight = allPriceByNight + roomOption.tarifNuit %}
  804.                                 {% endif %}
  805.                                 {% if roomOption.tarifJour is not null %}
  806.                                     {% set lengthRoomDay = lengthRoomDay + 1 %}
  807.                                     {% set statusByDay = true %}
  808.                                     {% set allPriceByDay = allPriceByDay + roomOption.tarifJour %}
  809.                                 {% endif %}
  810.                             {% endfor %}
  811.                             {% if statusByDay or statusByNight %}
  812.                                 <p>Prix moyen d'une chambre:</p>
  813.                             {% endif %}
  814.                             {% if statusByNight %}
  815.                                 <li>par nuit : <strong>{{ (allPriceByNight / lengthRoomNight)|number_format(2, '.') }}€</strong></li>
  816.                                 {# <li>Prix par nuit : <strong>{{ product.price|number_format(2, '.') }}€</strong></li> #}
  817.                             {% endif %}
  818.                             {% if statusByDay %}
  819.                                 {# <li>par jour : <strong>{{ (allPriceByDay / lengthRoomDay)|number_format(2, '.') }}€</strong></li> #}
  820.                                 {# <li>Prix de séjour : <strong>{{ product.price|number_format(2, '.') }}€</strong></li> #}
  821.                             {% endif %}
  822.                         {% endif %}
  823.                         {% if not statusByNight and not statusByDay %}
  824.                             <li>Prix : <strong>Veuillez definir le prix de votre hotel</strong></li>
  825.                         {% endif %}
  826.                             {# <span class="vendor-text">Prix</span>
  827.                             <span class="vendor-price">
  828.                                 {{ product.price|number_format(2, '.', '') }}€
  829.                             </span> #}
  830.                     {% endif %}
  831.                 </div>
  832.                 <div class="vendor-meta-item vendor-meta-item-bordered">
  833.                     {% if product.quantity %}
  834.                         <span class="vendor-guest">
  835.                             {{ product.quantity }}
  836.                         </span>
  837.                         <span class="vendor-text">Quantité restante</span>
  838.                     {% endif %}
  839.                 </div>
  840.                 {% set notesProduct = 0 %}
  841.                 {% for avi in product.avis %}
  842.                     {% set notesProduct = notesProduct + avi.globalNote %}
  843.                 {% endfor %}
  844.                 {% set noteTotalProduct = (notesProduct > 0) ? notesProduct / product.avis|length : 0 %}
  845.                 <div class="vendor-meta-item vendor-meta-item-bordered">
  846.                     <span class="rating-star">
  847.                         {% for i in 1..5 %}
  848.                             {% if i < noteTotalProduct %}
  849.                                 <i class="fa fa-star rated"></i>
  850.                             {% else %}
  851.                                 <i class="fa fa-star rate-mute"></i>
  852.                             {% endif %}
  853.                         {% endfor %}
  854.                     </span>
  855.                     <span class="rating-count vendor-text">({{ product.avis|length }})</span>
  856.                 </div>
  857.             </div>
  858.         </div>
  859.     </div>
  860.     <!-- /.page-header -->
  861.     <!-- page-header -->
  862.     {# Zoom img option #}
  863.     {% if product.company.isConfirmed %}
  864.         {% if product.productOptions %}
  865.             {% for option in product.productOptions %}
  866.                 {% if option.image1 %}
  867.                     <img id="{{ option.id }}btn1img" class="imgZoomOption" src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ option.image1) }}">
  868.                 {% endif %}
  869.                 {% if option.image2 %}
  870.                     <img id="{{ option.id }}btn2img" class="imgZoomOption" src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ option.image2) }}">
  871.                 {% endif %}
  872.             {% endfor %}
  873.         {% endif %}
  874.     {% endif %}
  875.     <div class="backgroundTrans"></div>
  876.     <button class="exitZoomOpt">X</button>
  877.     {# Zoom img option #}
  878.     {# Pannier #}
  879.     {# <div class="tab-pane fade active show" id="allguest" role="tabpanel" aria-labelledby="allguest-tab" style="width:100%">
  880.         <div class="card-body">
  881.             <h3>Mon panier ({{ products|length }} produit{% if products|length > 1 %}s{% endif %})</h3>
  882.         </div>
  883.         <div class="table-responsive" style="width:100%">
  884.             <table class="table mt-4">
  885.                 <thead>
  886.                 <tr>
  887.                     <th class="wedding-budget-event">Designation</th>
  888.                     <th class="wedding-budget-estimate">Aperçu</th>
  889.                     <th class="wedding-budget-estimate">Prix à l'unité</th>
  890.                     <th class="wedding-budget-actual">Quantité</th>
  891.                     <th class="wedding-budget-paid">Total produit</th>
  892.                     <th class="wedding-budget-paid"></th>
  893.                 </tr>
  894.                 </thead>
  895.                 <tbody>
  896.                 {% if pack %}
  897.                     <tr>
  898.                         <td>{{ pack.name }}</td>
  899.                         <td><img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR')) ~ pack.image }}" style="height:50px;border-radius:2px"></td>
  900.                         <td><span class="total-amount">{{ pack.price|number_format(2, '.') }}€</span></td>
  901.                         <td>1</td>
  902.                         <td><span class="total-amount">{{ pack.price|number_format(2, '.') }}€</span></td>
  903.                         <td class="paid-total"><a href="{{ path('front_my_basket_remove_pack', {'id': pack.id}) }}" class="btn btn-rounded btn-default">Supprimer du panier</a></td>
  904.                     </tr>
  905.                 {% endif %}
  906.                 {% set TotalPriceProduct = 0 %}
  907.                 {% for product in products %}
  908.                     <tr class="border-bottom">
  909.                         <td>{{ product.product.name }}
  910.                             {% set isClothing = null %}
  911.                             {% for subcategory in product.product.subCategories %}
  912.                                 {% if subcategory.isClothing %}
  913.                                     {% set isClothing = true %}
  914.                                 {% endif %}
  915.                             {% endfor %}
  916.                             {% if isClothing %}
  917.                                 <br><strong>Taille : {{ product.size }}</strong>
  918.                             {% endif %}
  919.                             {% set isColor = null %}
  920.                             {% for subcategory in product.product.subCategories %}
  921.                                 {% if subcategory.isColor %}
  922.                                     {% set isColor = true %}
  923.                                 {% endif %}
  924.                             {% endfor %}
  925.                             {% if isColor %}
  926.                                 <br><strong>Couleur : {{ product.color }}</strong>
  927.                             {% endif %}
  928.                         </td>
  929.                         <td><img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR')) ~ product.product.photos.first.url }}" style="height:50px;border-radius:2px"></td>
  930.                         {% if product.promo %}
  931.                             {% set ProductPrice = product.product.price - product.promo %}
  932.                         {% else %}
  933.                             {% set ProductPrice = product.product.price %}
  934.                         {% endif %}
  935.                         <td class="estimate-total"><span class="total-amount">{% if product.promo %}<small><del>{{ product.product.price|number_format(2, '.') }}€</del></small> <strong>{{ ProductPrice|number_format(2, '.') }}€</strong>{% else %}{{ ProductPrice|number_format(2, '.') }}€{% endif %}</span><br>{% if product.promo %}(code promo -{{ product.promo }}€){% endif %}</td>
  936.                         <td class="actual-total">{{ product.quantity }}</td>
  937.                         {% set TotalWithQuantity = product.quantity * ProductPrice %}
  938.                         {% set TotalPriceProduct = TotalPriceProduct + TotalWithQuantity %}
  939.                         <td class="paid-total"><span class="total-amount">{{ TotalWithQuantity|number_format(2, '.') }}€</span></td>
  940.                         <td class="paid-total"><a href="{{ path('front_my_basket_remove_product', {'id': product.product.id}) }}" class="btn btn-rounded btn-default">Supprimer du panier</a></td>
  941.                     </tr>
  942.                     {% for option in product.options %}
  943.                         {% set optionObject = filter_service.getProductOption(option) %}
  944.                         {% set TotalPriceProduct = TotalPriceProduct + optionObject.price %}
  945.                         <tr class="border-bottom" style="background:#fff">
  946.                             <td class="pl-4"><strong>Option :</strong> {{ optionObject.name }}</td>
  947.                             <td></td>
  948.                             <td class="estimate-total"><span class="total-amount">{{ optionObject.price|number_format(2, '.') }}€</span></td>
  949.                             <td class="actual-total"></td>
  950.                             <td class="paid-total"><span class="total-amount">{{ optionObject.price|number_format(2, '.') }}€</span></td>
  951.                             <td class="paid-total"></td>
  952.                         </tr>
  953.                     {% endfor %}
  954.                 {% endfor %}
  955.                 {% if pack or products is not empty %}
  956.                     <tr>
  957.                         <td>TOTAL :</td>
  958.                         <td></td>
  959.                         <td></td>
  960.                         <td></td>
  961.                         {% if pack %}
  962.                             {% set TotalPriceProduct = TotalPriceProduct + pack.price  %}
  963.                         {% endif %}
  964.                         <td>{{ TotalPriceProduct|number_format(2, '.') }}€</td>
  965.                     </tr>
  966.                 {% endif %}
  967.                 {% if not pack and products is empty %}
  968.                     <tr><td>Aucun produit ajouté au panier</td></tr>
  969.                 {% endif %}
  970.                 </tbody>
  971.             </table>
  972.         </div>
  973.         <div class="card-footer" style="height:70px">
  974.             {% if products|length > 0 or pack is not null %}
  975.                 {% if is_granted('ROLE_ENTERPRISE') == false %}
  976.                 <div class="float-left">
  977.                     {{ form_start(form, {'attr': {'class': 'form-inline'}}) }}
  978.                     <div class="form-group">
  979.                         {{ form_widget(form.codePromo) }}
  980.                     </div>
  981.                     <button type="submit" class="btn btn-default ml-3">Valider</button>
  982.                     {{ form_end(form) }}
  983.                     {% if isMessagePromo is defined and isMessagePromo %}
  984.                         <span style="color:green">Code promo valide !</span>
  985.                     {% endif %}
  986.                 </div>
  987.                 <div class="float-right">
  988.                     <a href="{{ path('front_command_livraison') }}" class="btn btn-primary">Commander</a>
  989.                 </div>
  990.                 {% endif %}
  991.             {% endif %}
  992.         </div>
  993.     </div> #}
  994.     {# Pannier #}
  995.     <div class="vendor-content-wrapper">
  996.         <div class="container">
  997.             <div class="row">
  998.                 <div
  999.                     class="col-xl-8 col-lg-9 col-md-9 col-sm-12 col-12">
  1000.                     <!--vendor-details -->
  1001.                     {# get qt max participant #}
  1002.                     {% if product.typeHebergements is not null %}
  1003.                         {% if product.typeHebergements.slugTypeHebergm != 'hotel' %}
  1004.                             
  1005.                             {% set nbrParticipants = 0 %}
  1006.                             {% for chambre in product.chambres %}
  1007.                                 {% for lit in chambre.typeDeLits.toArray() %}
  1008.                                     {% set nbrParticipants = nbrParticipants + lit.place %}    
  1009.                                 {% endfor %}                        
  1010.                             {% endfor %}    
  1011.                             <input id="participantsMax" type="hidden" name="" value={{ nbrParticipants }}>
  1012.                         {% else %}
  1013.                             <input id="participantsMax" type="hidden" name="participantsMax" min="1" value=1>
  1014.                         {% endif %}
  1015.                     {% endif %}
  1016.                     <div style="overflow: hidden">
  1017.                         <div class="card border card-shadow-none">
  1018.                             <h3 class="card-header bg-white">À propos</h3>
  1019.                             <div class="card-body card-box overflow-hidden">
  1020.                                 <!--/.vendor-details -->
  1021.                                 <!--vendor-description -->
  1022.                                     {% if product.company.isEditorGuide %}
  1023.                                         {% if product.productDescription and product.template %}
  1024.                                         {{ include('front/html/template/template'~product.template~'.html.twig') }}
  1025.                                     {% else %}
  1026.                                         <p class="lead">{{ product.text|raw }}</p>
  1027.                                     {% endif %}
  1028.                                 {% else %}
  1029.                                     <p class="lead">{{ product.text|raw }}</p>
  1030.                                 {% endif %}
  1031.                             </div>
  1032.                         </div>
  1033.                         <!--vendor-description -->
  1034.                         <!-- Affichage options -->
  1035.                         {% set optiongroups = product.productOptions.toArray %}
  1036.                         {% if optiongroups != [] %}                        
  1037.                             {% include "front/product/options/option.html.twig" with {'optiongroups' : optiongroups} %}                        
  1038.                         {% endif %}
  1039.                         <!-- review-block -->
  1040.                         {% for message in app.flashes('success') %}
  1041.                             <div class="alert alert-success">
  1042.                                 {{ message }}
  1043.                             </div>
  1044.                         {% endfor %}
  1045.                         <div id="reviews">
  1046.                             <div class="card border card-shadow-none ">
  1047.                                 <div class="card-header bg-white">
  1048.                                     <h3 class="mb0 d-inline-block" id="global_notes">Notes</h3>
  1049.                                     {% if app.user and app.user.roles[0] == 'ROLE_USER' %}
  1050.                                         {% set ifAvis = filter_service.getAvisUserExist(app.user, product) %}
  1051.                                         {% if ifAvis == false %}
  1052.                                             {# A afficher seulement en fin de séjour #}
  1053.                                             <a href="#review-form" class="btn btn-default btn-sm float-right d-inline-block">Laissez un avis</a>
  1054.                                         {% endif %}
  1055.                                     {% endif %}
  1056.                                 </div>
  1057.                                 <div class="card-body">
  1058.                                     <div class="review-block">
  1059.                                         <div class="row">
  1060.                                             <div
  1061.                                                 class="col-xl-6 col-lg-6 col-md-6 col-sm-12 col-12">
  1062.                                                 <!-- review-sidebar -->
  1063.                                                 <div class="review-sidebar">
  1064.                                                     {% if notes['globalNote']['count'] > 0 %}
  1065.                                                         {% set globalNote = notes['globalNote']['totalNote'] / notes['globalNote']['count'] %}
  1066.                                                     {% else %}
  1067.                                                         {% set globalNote = 0 %}
  1068.                                                     {% endif %}
  1069.                                                     <div class="review-total">{{ globalNote|number_format(1, '.') }}</div>
  1070.                                                     <div class="review-text">moyenne des notes</div>
  1071.                                                     <span class="rated">
  1072.                                                         {% for i in 1..5 %}
  1073.                                                             {% if i <= globalNote|round %}
  1074.                                                                 <i class="fa fa-star"></i>
  1075.                                                             {% else %}
  1076.                                                                 <i class="far fa-star"></i>
  1077.                                                             {% endif %}
  1078.                                                         {% endfor %}
  1079.                                                     </span>
  1080.                                                     {% if notes['globalNote']['count'] %}
  1081.                                                         <p>Note de
  1082.                                                             {{ globalNote|number_format(1, '.') }}
  1083.                                                             basée sur
  1084.                                                             {{ notes['globalNote']['count'] }}
  1085.                                                             note
  1086.                                                             {% if notes['globalNote']['count'] > 1 %}s
  1087.                                                             {% endif %}.</p>
  1088.                                                     {% else %}
  1089.                                                         <p>Aucune note pour le moment</p>
  1090.                                                     {% endif %}
  1091.                                                 </div>
  1092.                                                 <!-- /.review-sidebar -->
  1093.                                             </div>
  1094.                                             <div class="col-xl-6 col-lg-6 col-md-6 col-sm-12 col-12">
  1095.                                                 <div
  1096.                                                     class="review-box">
  1097.                                                     <!-- review-list -->
  1098.                                                     <div class="review-list">
  1099.                                                         {% set globalQualityService = notes['qualityService']['count'] ? notes['qualityService']['totalNote'] / notes['qualityService']['count'] : notes['qualityService']['count'] %}
  1100.                                                         <div class="review-for">Qualité du service</div>
  1101.                                                         <div class="review-rating">
  1102.                                                             <span class="rated">
  1103.                                                                 {% for i in 1..5 %}
  1104.                                                                     {% if i <= globalQualityService %}
  1105.                                                                         <i class="fa fa-star"></i>
  1106.                                                                     {% else %}
  1107.                                                                         <i class="far fa-star"></i>
  1108.                                                                     {% endif %}
  1109.                                                                 {% endfor %}
  1110.                                                             </span>
  1111.                                                         </div>
  1112.                                                         <div class="review-number">{{ globalQualityService|number_format(1, '.') }}</div>
  1113.                                                     </div>
  1114.                                                     <!-- /.review-list -->
  1115.                                                     <!-- review-list -->
  1116.                                                     <div class="review-list">
  1117.                                                         {% set globalPrice = notes['price']['count'] ? notes['price']['totalNote'] / notes['price']['count'] : notes['price']['count'] %}
  1118.                                                         <div class="review-for">Prix</div>
  1119.                                                         <div class="review-rating">
  1120.                                                             <span class="rated">
  1121.                                                                 {% for i in 1..5 %}
  1122.                                                                     {% if i <= globalPrice %}
  1123.                                                                         <i class="fa fa-star"></i>
  1124.                                                                     {% else %}
  1125.                                                                         <i class="far fa-star"></i>
  1126.                                                                     {% endif %}
  1127.                                                                 {% endfor %}
  1128.                                                             </span>
  1129.                                                         </div>
  1130.                                                         <div class="review-number">{{ globalPrice|number_format(1, '.') }}</div>
  1131.                                                     </div>
  1132.                                                     <!-- /.review-list -->
  1133.                                                     <!-- review-list -->
  1134.                                                     <div class="review-list">
  1135.                                                         {% set globalSpeed = notes['speed']['count'] ? notes['speed']['totalNote'] / notes['speed']['count'] : notes['speed']['count'] %}
  1136.                                                         <div class="review-for">Rapidité</div>
  1137.                                                         <div class="review-rating">
  1138.                                                             <span class="rated">
  1139.                                                                 {% for i in 1..5 %}
  1140.                                                                     {% if i <= globalSpeed %}
  1141.                                                                         <i class="fa fa-star"></i>
  1142.                                                                     {% else %}
  1143.                                                                         <i class="far fa-star"></i>
  1144.                                                                     {% endif %}
  1145.                                                                 {% endfor %}
  1146.                                                             </span>
  1147.                                                         </div>
  1148.                                                         <div class="review-number">{{ globalSpeed|number_format(1, '.') }}</div>
  1149.                                                     </div>
  1150.                                                     <div class="review-list">
  1151.                                                         {% set globalConformite = notes['conformDescription']['count'] ? notes['conformDescription']['totalNote'] / notes['conformDescription']['count'] : notes['conformDescription']['count'] %}
  1152.                                                         <div class="review-for">Description conforme</div>
  1153.                                                         <div class="review-rating">
  1154.                                                             <span class="rated">
  1155.                                                                 {% for i in 1..5 %}
  1156.                                                                     {% if i <= globalConformite %}
  1157.                                                                         <i class="fa fa-star"></i>
  1158.                                                                     {% else %}
  1159.                                                                         <i class="far fa-star"></i>
  1160.                                                                     {% endif %}
  1161.                                                                 {% endfor %}
  1162.                                                             </span>
  1163.                                                         </div>
  1164.                                                         <div class="review-number">{{ globalConformite|number_format(1, '.') }}</div>
  1165.                                                     </div>
  1166.                                                     <div class="review-list">
  1167.                                                         {% set globalCommunication = notes['communication']['count'] ? notes['communication']['totalNote'] / notes['communication']['count'] : notes['communication']['count'] %}
  1168.                                                         <div class="review-for">Communication</div>
  1169.                                                         <div class="review-rating">
  1170.                                                             <span class="rated">
  1171.                                                                 {% for i in 1..5 %}
  1172.                                                                     {% if i <= globalCommunication %}
  1173.                                                                         <i class="fa fa-star"></i>
  1174.                                                                     {% else %}
  1175.                                                                         <i class="far fa-star"></i>
  1176.                                                                     {% endif %}
  1177.                                                                 {% endfor %}
  1178.                                                             </span>
  1179.                                                         </div>
  1180.                                                         <div class="review-number">{{ globalCommunication|number_format(1, '.') }}</div>
  1181.                                                     </div>
  1182.                                                     <!-- /.review-list -->
  1183.                                                 </div>
  1184.                                             </div>
  1185.                                         </div>
  1186.                                     </div>
  1187.                                 </div>
  1188.                             </div>
  1189.                             <div class="card border card-shadow-none widget-vendor-list ">
  1190.                                 <div class="card-body pl-0 pr-0">
  1191.                                     <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
  1192.                                         <h3 class="mb20">Avis</h3>
  1193.                                     </div>
  1194.                                     {# <pre>
  1195.                                         {{ dump(productAvis|slice(0, 3)) }}
  1196.                                     </pre> #}
  1197.                                     {% for key,productAvi in productAvis|slice(0, 3) %}
  1198.                                         {% if productAvi.isDesactivatedByAdmin == null and productAvi.isDesactivatedByAdmin == false %}
  1199.                                             <div class="card border card-shadow-none ">
  1200.                                                 <!-- review-user -->
  1201.                                                 <div class="card-header bg-white mb0">
  1202.                                                     <div class="review-user">
  1203.                                                         <div class="user-img">
  1204.                                                             <img src="{{ asset(constant('App\\Services\\File::IMAGE_CLIENT_DIR') ~ productAvi.client.image) }}" alt="{{ productAvi.client.firstName }}" class="rounded-circle" style="width:50px;height:50px;object-fit:cover"></div>
  1205.                                                         <div class="user-meta">
  1206.                                                             <h5 class="user-name mb-0">{{ productAvi.client.firstName }}<span class="user-review-date">{{ productAvi.createdAt|date('d/m/Y') }}</span>
  1207.                                                             </h5>
  1208.                                                             <div class="given-review">
  1209.                                                                 <span class="rated">
  1210.                                                                         <i class="fa fa-star"></i>
  1211.                                                                     {% for i in 2..5 %}
  1212.                                                                         {% if i <= productAvi.globalNote|round %}
  1213.                                                                             <i class="fa fa-star"></i>
  1214.                                                                         {% else %}
  1215.                                                                             <i class="far fa-star"></i>
  1216.                                                                         {% endif %}
  1217.                                                                     {% endfor %}
  1218.                                                                 </span>
  1219.                                                             </div>
  1220.                                                         </div>
  1221.                                                     </div>
  1222.                                                 </div>
  1223.                                                 <!-- /.review-user -->
  1224.                                                 <div class="card-body">
  1225.                                                     <!-- review-descripttions -->
  1226.                                                     <div class="review-descriptions mb-2" id="cli_{{key}}">
  1227.                                                         <p>
  1228.                                                             <i>{{ productAvi.text }}</i>
  1229.                                                         </p>
  1230.                                                         <div class="cont_img_comment">
  1231.                                                         {% for imageComment in productAvi.imageComments.toArray() %}
  1232.                                                             <img src={{ asset(constant('App\\Services\\File::IMAGE_COMMENT_DIR') ~ imageComment.url) }} class="img_comment">
  1233.                                                         {% endfor %}
  1234.                                                         </div>
  1235.                                                     </div>
  1236.                                                     {% if productAvi.responseCompany %}
  1237.                                                         <div class="review-descriptions mb-2" id="prest_{{key}}">
  1238.                                                             Réponse du prestataire :<br>
  1239.                                                             <i>{{ productAvi.responseCompany }}</i>
  1240.                                                         </div>
  1241.                                                     {% endif %}
  1242.                                                     <!-- /.review-descripttions -->
  1243.                                                 </div>
  1244.                                             </div>
  1245.                                         {% endif %}
  1246.                                     {% else %}
  1247.                                         <p class="p-3">Aucun avis pour le moment</p>
  1248.                                     {% endfor %}
  1249.                                 </div>
  1250.                             </div>
  1251.                              {# <div id='calendar'></div> #}
  1252.                         </div>
  1253.                         {% if app.user and app.user.roles[0] == 'ROLE_USER' %}
  1254.                             {% set tab = filter_service.getLocationUse(app.user, product) %}
  1255.                             {% if tab is not null %}
  1256.                                 {% if "now"|date("U") > tab.endAt|date("U") %}
  1257.                             
  1258.                                 {% set ifAvis = filter_service.getAvisUserExist(app.user, product) %}
  1259.                                 {% if ifAvis == false %}
  1260.                             
  1261.                                 <div class="card border card-shadow-none leave-review" id="review-form">
  1262.                                     <div class="card-header bg-white mb0">
  1263.                                         <h3 class="mb0">Laissez un avis</h3>
  1264.                                     </div>
  1265.                                     <div class="card-body">
  1266.                                         <div class="review-rating-select">
  1267.                                             <div class="rate-selection">
  1268.                                                 <span class="text-dark">Qualité du service</span>
  1269.                                                 <span id="rateYo1" class="jq-ry-container ml-4" style="width: 70px;">
  1270.                                                     <div class="jq-ry-group-wrapper">
  1271.                                                         <div class="jq-ry-normal-group jq-ry-group"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3">
  1272.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1273.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1274.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1275.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1276.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1277.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1278.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1279.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1280.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1281.                                                             </svg>
  1282.                                                         </div>
  1283.                                                         <div class="jq-ry-rated-group jq-ry-group" id="rate1" style="width: 72%;"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227">
  1284.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1285.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1286.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1287.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1288.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1289.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1290.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1291.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1292.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1293.                                                             </svg>
  1294.                                                         </div>
  1295.                                                     </div>
  1296.                                                 </span>
  1297.                                             </div>
  1298.                                             <div class="rate-selection">
  1299.                                                 <span class="text-dark">Fiabilité</span>
  1300.                                                 <span id="rateYo2" class="jq-ry-container ml-4" style="width: 70px;">
  1301.                                                     <div class="jq-ry-group-wrapper">
  1302.                                                         <div class="jq-ry-normal-group jq-ry-group"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3">
  1303.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1304.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1305.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1306.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1307.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1308.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1309.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1310.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1311.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1312.                                                             </svg>
  1313.                                                         </div>
  1314.                                                         <div class="jq-ry-rated-group jq-ry-group" id="rate2" style="width: 72%;"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227">
  1315.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1316.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1317.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1318.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1319.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1320.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1321.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1322.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1323.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1324.                                                             </svg>
  1325.                                                         </div>
  1326.                                                     </div>
  1327.                                                 </span>
  1328.                                             </div>
  1329.                                             <div class="rate-selection">
  1330.                                                 <span class="text-dark">Prix</span>
  1331.                                                 <span id="rateYo3" class="jq-ry-container ml-4" style="width: 70px;">
  1332.                                                     <div class="jq-ry-group-wrapper">
  1333.                                                         <div class="jq-ry-normal-group jq-ry-group"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3">
  1334.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1335.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1336.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1337.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1338.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1339.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1340.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1341.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1342.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1343.                                                             </svg>
  1344.                                                         </div>
  1345.                                                         <div class="jq-ry-rated-group jq-ry-group" id="rate3" style="width: 72%;"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227">
  1346.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1347.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1348.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1349.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1350.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1351.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1352.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1353.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1354.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1355.                                                             </svg>
  1356.                                                         </div>
  1357.                                                     </div>
  1358.                                                 </span>
  1359.                                             </div>
  1360.                                             <div class="rate-selection">
  1361.                                                 <span class="text-dark">Rapidité</span>
  1362.                                                 <span id="rateYo4" class="jq-ry-container ml-4" style="width: 70px;">
  1363.                                                     <div class="jq-ry-group-wrapper">
  1364.                                                         <div class="jq-ry-normal-group jq-ry-group"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3">
  1365.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1366.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1367.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1368.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1369.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1370.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1371.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1372.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1373.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1374.                                                             </svg>
  1375.                                                         </div>
  1376.                                                         <div class="jq-ry-rated-group jq-ry-group" id="rate4" style="width: 72%;"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227">
  1377.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1378.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1379.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1380.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1381.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1382.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1383.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1384.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1385.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1386.                                                             </svg>
  1387.                                                         </div>
  1388.                                                     </div>
  1389.                                                 </span>
  1390.                                             </div>
  1391.                                             <div class="rate-selection">
  1392.                                                 <span class="text-dark">Conforme à la description</span>
  1393.                                                 <span id="rateYo5" class="jq-ry-container ml-4" style="width: 70px;">
  1394.                                                     <div class="jq-ry-group-wrapper">
  1395.                                                         <div class="jq-ry-normal-group jq-ry-group"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3">
  1396.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1397.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1398.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1399.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1400.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1401.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1402.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1403.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1404.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1405.                                                             </svg>
  1406.                                                         </div>
  1407.                                                         <div class="jq-ry-rated-group jq-ry-group" id="rate5" style="width: 72%;"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227">
  1408.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1409.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1410.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1411.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1412.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1413.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1414.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1415.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1416.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1417.                                                             </svg>
  1418.                                                         </div>
  1419.                                                     </div>
  1420.                                                 </span>
  1421.                                             </div>
  1422.                                             <div class="rate-selection">
  1423.                                                 <span class="text-dark">Communication</span>
  1424.                                                 <span id="rateYo6" class="jq-ry-container ml-4" style="width: 70px;">
  1425.                                                     <div class="jq-ry-group-wrapper">
  1426.                                                         <div class="jq-ry-normal-group jq-ry-group"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3">
  1427.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1428.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1429.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1430.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1431.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1432.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1433.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1434.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#d3d3d3" style="margin-left: 0px;">
  1435.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1436.                                                             </svg>
  1437.                                                         </div>
  1438.                                                         <div class="jq-ry-rated-group jq-ry-group" id="rate6" style="width: 72%;"><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227">
  1439.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1440.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1441.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1442.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1443.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1444.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1445.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1446.                                                             </svg><!--?xml version="1.0" encoding="utf-8"?--><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewbox="0 12.705 512 486.59" x="0px" y="0px" xml:space="preserve" width="14px" height="14px" fill="#ff9227" style="margin-left: 0px;">
  1447.                                                                 <polygon points="256.814,12.705 317.205,198.566 512.631,198.566 354.529,313.435 414.918,499.295 256.814,384.427 98.713,499.295 159.102,313.435 1,198.566 196.426,198.566 "></polygon>
  1448.                                                             </svg>
  1449.                                                         </div>
  1450.                                                     </div>
  1451.                                                 </span>
  1452.                                             </div>
  1453.                                         </div>
  1454.                                         {{ form_start(formComment) }}
  1455.                                         <div class="row">
  1456.                                             {# <div style="color:red">{{ form_errors(formComment) }}</div> #}
  1457.                                             <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12 mt30">
  1458.                                                 {# <div class="form-group">
  1459.                                                     {{ form_label(form.imageComment, '', {'label_attr': {'class': 'control-label'}}) }}
  1460.                                                     {{ form_widget(form.imageComment) }}
  1461.                                                 </div> #}
  1462.                                                 {# <div class="col-md-12"> #}
  1463.                                                     {{form_widget(formComment)}}
  1464.                                                 {# </div> #}
  1465.                                                 {# <div class="form-group">
  1466.                                                     {{ form_label(formComment.text, '', {'label_attr': {'class': 'control-label'}}) }}
  1467.                                                     {{ form_widget(formComment.text, {'attr': {'class': 'form-control', 'rows': 5}}) }}
  1468.                                                 </div> #}
  1469.                                             </div>
  1470.                                             <!-- Button -->
  1471.                                             <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
  1472.                                                 <div class="form-group">
  1473.                                                     <button id="submit" name="submit" class="btn btn-default">Ajouter mon avis</button>
  1474.                                                 </div>
  1475.                                             </div>
  1476.                                         </div>
  1477.                                         {# {{ form_rest(formComment) }} #}
  1478.                                         {{ form_end(formComment) }}
  1479.                                     </div>
  1480.                                 </div>
  1481.                                 {% endif %}
  1482.                                 {% endif %}
  1483.                             {% endif %}
  1484.                         {% endif %}
  1485.                     </div>
  1486.                     <!-- /.review-content -->
  1487.                 </div>
  1488.                 <!-- /.location -->
  1489.                 <!-- list-sidebar -->
  1490.                 <div class="col-xl-4 col-lg-3 col-md-3 col-sm-12 col-12">
  1491.                     <div
  1492.                         class="sidebar-venue">
  1493.                         <!-- FORMULAIRE DU PANIER -->
  1494.                         {% set isService = false %}
  1495.                         {% for productSubCategory in product.subCategories %}
  1496.                             {% if productSubCategory.isService == true %}
  1497.                                 {% set isService = true %}
  1498.                             {% endif %}
  1499.                         {% endfor %}
  1500.                         {% if isService != true %}
  1501.                             {% include "front/product/cart/cart_form.html.twig" with {'product' : product} %}
  1502.                         {% endif %}
  1503.                         {% if isService == true %}
  1504.                             <!-- TEST DU TYPE DE SERVICE (location ou réservation) -->
  1505.                             {% set isLocation = false %}
  1506.                             {% for singleCategory in product.subcategories %}
  1507.                                 {% if singleCategory.name == "Location de salle" or singleCategory.name == "Location de vehicule"  %}
  1508.                                     {% set isLocation = true %}
  1509.                                 {% endif %}
  1510.                             {% endfor %}
  1511.                             {% if isLocation == true or product.typeLocation is not null %}
  1512.                                 <!-- FORMULAIRE DE LOCATION --> 
  1513.                                 {% include "front/product/location/location_form.html.twig" with {'product' : product} %}
  1514.                             {% endif %}
  1515.                             {% if isLocation == false and product.typeLocation is null %}
  1516.                                 <!-- FORMULAIRE DE RESERVATION DE SERVICES -->
  1517.                                 {% include "front/product/reservation/reservation_form.html.twig" with {'product' : product} %}
  1518.                             {% endif %}
  1519.                         {% endif %}
  1520.                         {% if product.company.type != "service" %}                            
  1521.                             <div class="vendor-owner-profile mb30">
  1522.                                 <div class="vendor-owner-profile-head">
  1523.                                     <h3 class="mb-0">Livraison</h3>
  1524.                                 </div>
  1525.                                 <div class="vendor-owner-profile-content">
  1526.                                     <ul class="list-group list-group-flush">
  1527.                                         <li class="list-group-item">
  1528.                                             <span class="mr-2">
  1529.                                                 <i class="fas fa-fw fa-map-marker-alt"></i>
  1530.                                             </span>
  1531.                                             {% for department in product.departments %}
  1532.                                                 {{ department.name }}
  1533.                                                 {% if not loop.last %},
  1534.                                                 {% endif %}
  1535.                                             {% else %}
  1536.                                                 Toute la France
  1537.                                             {% endfor %}
  1538.                                         </li>
  1539.                                     </ul>
  1540.                                 </div>
  1541.                             </div>
  1542.                         {% endif %}
  1543.                         <!-- venue-admin -->
  1544.                         <div class="vendor-owner-profile mb30">
  1545.                             <div class="vendor-owner-profile-head">
  1546.                                 <h3 class="mb-4">Prestataire</h3>
  1547.                             </div>
  1548.                             <div class="vendor-owner-profile-content">
  1549.                                 <ul class="list-group list-group-flush">
  1550.                                     <li class="list-group-item">
  1551.                                         <span class="mr-2">
  1552.                                             <a href="{{ path('front_company_single', {'companySlug': product.company.companySlug, 'id': product.company.id}) }}" class="btn btn-default btn-sm ml-2 text-center">Voir le prestataire</a>
  1553.                                         </span>
  1554.                                     </li>
  1555.                                 </ul>
  1556.                             </div>
  1557.                         </div>
  1558.                     </div>
  1559.                 </div>
  1560.             </div>
  1561.             <!-- /.list-sidebar -->
  1562.         </div>
  1563.     </div>
  1564.     <!-- vendor-thumbnail section -->
  1565.     <div class="space-small">
  1566.         <div class="container">
  1567.             <div class="row">
  1568.                 <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
  1569.                     <h2>Autres services du prestataire</h2>
  1570.                 </div>
  1571.             </div>
  1572.             <div class="row">
  1573.                 {% for otherProduct in otherProducts %}
  1574.                 {% set subCategorySlug = otherProduct.subCategories.toArray()[0].subCategorySlug %}
  1575.                     <div class="col-xl-4 col-lg-4 col-md-6 col-sm-6 col-12">
  1576.                         <div class="container-block-Pcompanies mb-3">
  1577.                             <div class="container-imageP zoomimg">
  1578.                             {% if otherProduct.subCategories[0].categories[0] is defined %}
  1579.                                 <a href="{{ path('front_product_single', {'slug': otherProduct.subCategories[0].categories[0].slug, 'subCategorySlug': otherProduct.subCategories[0].subCategorySlug, 'product_id': otherProduct.id, 'productSlug': otherProduct.productSlug}) }}">
  1580.                                     {% if otherProduct.photos is not empty %}
  1581.                                         <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ otherProduct.photos.first.url) }}" alt="{{ otherProduct.name }}" class="img-fluid" style="object-fit: cover; border-radius: .5rem .5rem 0 0;">
  1582.                                     {% endif %}
  1583.                                 </a>
  1584.                             {% endif %}
  1585.                             
  1586.                             </div>
  1587.                             <div class="container-info-presta" style="padding-bottom: 80px;">
  1588.                                 <h2 class="vendor-title">
  1589.                                 {% set subCategory = otherProduct.subCategories.toArray()[0] %}                                
  1590.                                 {% set slug = "" %}
  1591.                                 {% if otherProduct.typeActivity is not null %}
  1592.                                     {% set slug = otherProduct.typeActivity.slug %}
  1593.                                 {% elseif otherProduct.typeHebergements is not null %}
  1594.                                     {% set slug = otherProduct.typeHebergements.slugTypeHebergm %}
  1595.                                 {% else %}
  1596.                                     {% set slug = subCategory.categories.toArray[0].slug %}
  1597.                                 {% endif %}
  1598.                                 {% if otherProduct.subCategories[0].categories[0] is defined %}
  1599.                                     <a href="{{ path('front_product_single', {
  1600.                                         'slug': slug, 
  1601.                                         'subCategorySlug': otherProduct.subCategories[0].subCategorySlug, 
  1602.                                         'product_id': otherProduct.id, 
  1603.                                         'productSlug': otherProduct.productSlug}) 
  1604.                                     }}" class="title">{{ otherProduct.name }}</a>
  1605.                                 {% endif %}
  1606.                                 </h2>
  1607.                                 <p class="vendor-address">
  1608.                                     {% for department in otherProduct.departments %}
  1609.                                         {{ department.name }}
  1610.                                         {% if not loop.last %},
  1611.                                         {% endif %}
  1612.                                     {% else %}
  1613.                                         Toute la France
  1614.                                     {% endfor %}
  1615.                                 </p>
  1616.                                 {# <p>
  1617.                                     <i class="fas fa-money-bill-wave"></i>
  1618.                                     Prix
  1619.                                     <strong>{{ otherProduct.price|number_format(2, '.', '') }}</strong>€
  1620.                                 </p> #}
  1621.                                 <p>
  1622.                                     {% if otherProduct.typeHebergements.slugTypeHebergm is defined and otherProduct.typeHebergements.slugTypeHebergm != 'hotel' %}
  1623.                                         <i class="fas fa-money-bill-wave"></i>
  1624.                                         Prix :
  1625.                                         <strong>{{ otherProduct.price|number_format(2, '.') }}</strong>€
  1626.                                     {% else %}
  1627.                                         {% set lengthRoomNight = 0 %}
  1628.                                         {% set statusByNight = false %}
  1629.                                         {% set allPriceByNight = 0 %}
  1630.                                         {% set lengthRoomDay = 0 %}
  1631.                                         {% set statusByDay = false %}
  1632.                                         {% set allPriceByDay = 0 %}
  1633.                                         {% if otherProduct.chambres is defined %}
  1634.                                             {% for roomOption in otherProduct.chambres.toArray %}
  1635.                                                 {% if roomOption.tarifNuit is defined %}
  1636.                                                     {% set lengthRoomNight = lengthRoomNight + 1 %}
  1637.                                                     {% set statusByNight = true %}
  1638.                                                     {% set allPriceByNight = allPriceByNight + roomOption.tarifNuit %}
  1639.                                                 {% endif %}
  1640.                                                 {% if roomOption.tarifJour is not null %}
  1641.                                                     {% set lengthRoomDay = lengthRoomDay + 1 %}
  1642.                                                     {% set statusByDay = true %}
  1643.                                                     {% set allPriceByDay = allPriceByDay + roomOption.tarifJour %}
  1644.                                                 {% endif %}
  1645.                                             {% endfor %}
  1646.                                             {% if statusByDay or statusByNight %}
  1647.                                                 <p>Prix moyen d'une chambre:</p>
  1648.                                             {% endif %}
  1649.                                             {% if statusByNight %}
  1650.                                                 <p>
  1651.                                                     <i class="fas fa-money-bill-wave"></i>
  1652.                                                     par nuit 
  1653.                                                     <strong>{{ (allPriceByNight / lengthRoomNight)|number_format(2, '.') }}</strong>€
  1654.                                                 </p>
  1655.                                             {% endif %}
  1656.                                             {% if statusByDay %}
  1657.                                                 {# <p>
  1658.                                                     <i class="fas fa-money-bill-wave"></i>
  1659.                                                     par jour 
  1660.                                                     <strong>{{ (allPriceByDay / lengthRoomDay)|number_format(2, '.') }}</strong>€
  1661.                                                 </p> #}
  1662.                                             {% endif %}
  1663.                                         {% endif %}
  1664.                                         {% if not statusByNight and not statusByDay %}
  1665.                                             <p>
  1666.                                                 Prix : <strong>Prix en attente</strong>
  1667.                                             </p>
  1668.                                         {% endif %}
  1669.                                         {# <i class="fas fa-money-bill-wave"></i>
  1670.                                         Prix :
  1671.                                         <strong>{{ otherProduct.price|number_format(2, '.') }}</strong>€ #}
  1672.                                     {% endif %}
  1673.                                 </p>
  1674.                                 <p>
  1675.                                     <i class="fa fa-star rated"></i>
  1676.                                     {{ otherProduct.avis|length }} Avis</p>
  1677.                                 {% if otherProduct.quantity %}
  1678.                                     <p>{{ otherProduct.quantity }}
  1679.                                         Quantité restante</p>
  1680.                                 {% else %}
  1681.                                     <p style="color: transparent;">Quantité restante</p>
  1682.                                 {% endif %}
  1683.                             </div>
  1684.                             <div class="wishlist-sign">
  1685.                                 <a href="#" class="btn-wishlist">
  1686.                                     <i class="fa fa-heart"></i>
  1687.                                 </a>
  1688.                             </div>
  1689.                             {% if otherProduct.subCategories[0].categories[0] is defined %}
  1690.                                 <a href="{{ path('front_product_single', {
  1691.                                     'slug': slug, 
  1692.                                     'subCategorySlug': otherProduct.subCategories[0].subCategorySlug, 
  1693.                                     'product_id': otherProduct.id, 
  1694.                                     'productSlug': otherProduct.productSlug
  1695.                                 }) }}" class="title">
  1696.                             
  1697.                                 <button class="btnVoirP btn">Voir {% if subCategorySlug == "hebergements"%}l'hébergement{% else %}plus{% endif %}
  1698.                                     </button>
  1699.                             
  1700.                                 </a>
  1701.                             {% endif %}
  1702.                             
  1703.                         </div>
  1704.                     </div>
  1705.                 {% else %}
  1706.                     <div class="col-md-12 mt-5 text-center">
  1707.                         <p>Aucun autre produit.</p>
  1708.                     </div>
  1709.                 {% endfor %}
  1710.             </div>
  1711.             {# <div class="row">
  1712.                 {% for otherProduct in otherProducts %}
  1713.                     <div class="col-xl-4 col-lg-4 col-md-6 col-sm-6 col-12">
  1714.                         <div
  1715.                             class="vendor-thumbnail">
  1716.                             <!-- Vendor thumbnail -->
  1717.                             <div
  1718.                                 class="vendor-img zoomimg">
  1719.                                 <!-- Vendor img -->
  1720.                                 <a href="{{ path('front_product_single', {'slug': otherProduct.subCategories[0].categories[0].slug, 'subCategorySlug': otherProduct.subCategories[0].subCategorySlug, 'product_id': otherProduct.id, 'productSlug': otherProduct.productSlug}) }}">
  1721.                                     {% if otherProduct.photos is not empty %}
  1722.                                         <img src="{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ otherProduct.photos.first.url) }}" alt="{{ otherProduct.name }}" class="img-fluid">
  1723.                                     {% endif %}
  1724.                                 </a>
  1725.                                 <div class="wishlist-sign">
  1726.                                     <a href="#" class="btn-wishlist">
  1727.                                         <i class="fa fa-heart"></i>
  1728.                                     </a>
  1729.                                 </div>
  1730.                             </div>
  1731.                             <!-- /.Vendor img -->
  1732.                             <div
  1733.                                 class="vendor-content">
  1734.                                 <!-- Vendor Content -->
  1735.                                 <h2 class="vendor-title">
  1736.                                     <a href="{{ path('front_product_single', {'slug': otherProduct.subCategories[0].categories[0].slug, 'subCategorySlug': otherProduct.subCategories[0].subCategorySlug, 'product_id': otherProduct.id, 'productSlug': otherProduct.productSlug}) }}" class="title">{{ otherProduct.name }}</a>
  1737.                                 </h2>
  1738.                                 <p class="vendor-address">
  1739.                                     {% for department in otherProduct.departments %}
  1740.                                         {{ department.name }}
  1741.                                         {% if not loop.last %},
  1742.                                         {% endif %}
  1743.                                     {% else %}
  1744.                                         Toute la France
  1745.                                     {% endfor %}
  1746.                                 </p>
  1747.                             </div>
  1748.                             <div class="vendor-meta">
  1749.                                 <div class="vendor-meta-item vendor-meta-item-bordered">
  1750.                                     <span class="vendor-price">
  1751.                                         {{ otherProduct.price|number_format(2, '.', '') }}€
  1752.                                     </span>
  1753.                                     <span class="vendor-text">Prix</span>
  1754.                                 </div>
  1755.                                 <div class="vendor-meta-item vendor-meta-item-bordered">
  1756.                                     {% if otherProduct.quantity %}
  1757.                                         <span class="vendor-guest">
  1758.                                             {{ otherProduct.quantity }}
  1759.                                         </span>
  1760.                                         <span class="vendor-text">Quantité restante</span>
  1761.                                     {% endif %}
  1762.                                 </div>
  1763.                                 {% set notes = 0 %}
  1764.                                 {% for avi in otherProduct.avis %}
  1765.                                     {% set notes = notes + avi.globalNote %}
  1766.                                 {% endfor %}
  1767.                                 {% set noteTotal = (notes > 0) ? notes / otherProduct.avis|length : 0 %}
  1768.                                 <div class="vendor-meta-item vendor-meta-item-bordered">
  1769.                                     <span class="rating-star">
  1770.                                         {% for i in 1..5 %}
  1771.                                             {% if i < noteTotal %}
  1772.                                                 <i class="fa fa-star rated"></i>
  1773.                                             {% else %}
  1774.                                                 <i class="fa fa-star rate-mute"></i>
  1775.                                             {% endif %}
  1776.                                         {% endfor %}
  1777.                                     </span>
  1778.                                     <span class="rating-count vendor-text">({{ otherProduct.avis|length }})</span>
  1779.                                 </div>
  1780.                             </div>
  1781.                             <!-- /.Vendor Content -->
  1782.                         </div>
  1783.                         <!-- /.Vendor thumbnail -->
  1784.                     </div>
  1785.                 {% else %}
  1786.                     <div class="col-md-12 mt-5 text-center">
  1787.                         <p>Aucun autre produit.</p>
  1788.                     </div>
  1789.                 {% endfor %}
  1790.             </div> #}
  1791.         </div>
  1792.     </div>
  1793.     {# Question #}
  1794.     <div class="col-sm-12 col-md-5 col-lg-4 col-xl-3 position-fixed" id="chatbar" style="bottom:0;right:50px;z-index: 1000">
  1795.         <div class="panel panel-primary myradiuss">
  1796.                 {# <div class="d-flex justify-content-between panel-heading p-2" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" id="accordion" style="background:#A066F2;border-radius: 8px 8px 0 0;cursor:pointer">
  1797.                     <span style="color:#fff">
  1798.                         <i class="fas fa-comments"></i>
  1799.                         Une question sur ce
  1800.                         {% if product.company == 'product' %}produit{% else %}service{% endif%}
  1801.                         ?</span>
  1802.                     <div class="btn-group pull-right">
  1803.                         <a type="button" class="btn btn-default btn-xs">
  1804.                             <i class="fas fa-chevron-down"></i>
  1805.                         </a>
  1806.                     </div>
  1807.                 </div> #}
  1808.                 <div class="panel-collapse collapse" id="collapseOne" style="border:1px solid #A066F2">
  1809.                     {# <div class="modal-header">
  1810.                         {# <h5 class="modal-title" id="exampleModalLongTitle">Créer un ticket</h5> #}
  1811.                         {# <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  1812.                         <span aria-hidden="true">&times;</span>
  1813.                         </button> 
  1814.                     </div> #}
  1815.                     <div class="titreSMS"><h3 style="margin-bottom: 0">Discutez avec le prestataire</h3></div>
  1816.                     {{ form_start(formTicket) }}
  1817.                     <span class="collapseMessage" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">X</span>
  1818.                     <div class="modal-body">
  1819.                         {# supprime d'apres le retour 12/08/22
  1820.                         <div class="col-xl-12 col-lg-12 col-md-12 col-sm-6 col-12">
  1821.                             <div class="form-group">
  1822.                                 {{ form_row(formTicket.subject) }}
  1823.                             </div>
  1824.                         </div> #}
  1825.                         <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
  1826.                             <div class="form-group">
  1827.                                 {{ form_row(formTicket.messagings) }}
  1828.                             </div>
  1829.                         </div>
  1830.                         <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12">
  1831.                             <div class="form-group">
  1832.                                 <input class='form-control' name="productID" type="hidden" value={{ product.id }} readonly>
  1833.                             </div>
  1834.                         </div>
  1835.                     </div>
  1836.                     <div class="modal-footer">
  1837.                         {# <button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button> #}
  1838.                         <button type="submit" class="btn btn-primary">Envoyer</button>
  1839.                     </div>
  1840.                     {{ form_end(formTicket) }}
  1841.                     {# <div class="p-3" id="messageSuccessContact" style="background:green;color:#fff;display:none">Message envoyé !</div>
  1842.                     {{ form_start(formContact, {'attr': {'id': 'contactFormProduct'}}) }}
  1843.                     <div class="panel-body" style="background:#fff">
  1844.                         <div class="chat">
  1845.                             {{ form_widget(formContact.message, {'attr': {'rows': 12}}) }}
  1846.                         </div>
  1847.                     </div>
  1848.                     <div class="panel-footer">
  1849.                         <div class="input-group">
  1850.                             {{ form_widget(formContact.email) }}
  1851.                             <span class="input-group-btn">
  1852.                                 <button type="submit" class="btn btn-warning btn-sm" id="btn-chat">Envoyer</button>
  1853.                             </span>
  1854.                         </div>
  1855.                     </div>
  1856.                     {{ form_end(formContact) }} #}
  1857.                 </div>
  1858.             </div>
  1859.         </div>
  1860.     </div>
  1861.     {# Modal chat #}
  1862.     <!-- Button trigger modal -->
  1863.         {% if app.user %}
  1864.         <div class="position-fixed" id="MyChat" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
  1865.             <i class="fas fa-comments MyIconChat"></i>
  1866.         </div>
  1867.         {# <div class="position-fixed" id="MyChat" data-toggle="modal" data-target="#modalChat">
  1868.             <i class="fas fa-comments MyIconChat"></i>
  1869.             </a>
  1870.         </div> #}
  1871.          {% else %}
  1872.          <script src="">
  1873.              function connect(){
  1874.                 window.open("{{ path('connection-test', {'product_id': product.id, 'productSlug': product.productSlug }) }}", "pub", "menubar=no");
  1875.             }
  1876.          </script>
  1877.             <div class="position-fixed" id="MyChat">
  1878.                 {% if product.subCategories[0].categories[0] is defined %}
  1879.                     <a href="{{ path('front_product_single', {'slug': product.subCategories[0].categories[0].slug, 'subCategorySlug': product.subCategories[0].subCategorySlug, 'product_id': product.id, 'productSlug': product.productSlug}) }}" onclick="connect();">
  1880.                 {% endif %}
  1881.                 <a href="{{ path('connection-test', {'product_id': product.id, 'productSlug': product.productSlug }) }}" onclick="connect();" rel="noopener" target="_blank">
  1882.                 <i class="fas fa-comments MyIconChat"></i>
  1883.                 </a>
  1884.             </div>
  1885.         {% endif %}
  1886.     
  1887.     {# Modal chat #}
  1888. {% endblock %}
  1889.      {% block _avis_imageComments_widget %}
  1890.         <p>Ici, vous pouvez ajouter vos image, sa taille ne doit pas dépasser 400ko !</p>
  1891.         <div class="form-group">
  1892.             <button class="btn btn-primary" id="add_image" data-target="#block_{{id}}" type="button">Ajouter une image</button>
  1893.         </div>
  1894.         {{form_widget(form)}}
  1895.         <input type="hidden" id="widgets-counter" value="0">
  1896.         <input type="hidden" id="conteur-input" value="0">
  1897.     {% endblock %}
  1898.     {% block _avis_imageComments_entry_row %}
  1899.         {{form_widget(form)}}
  1900.     {% endblock %}
  1901.     {% block _avis_imageComments_entry_widget %}
  1902.         <div class="form-group" id="block_{{id}}">
  1903.             <div class="row">
  1904.                 <div class="col-10 mt-3">
  1905.                     <div class="row">
  1906.                         <div class="col-md-12 image-errors">
  1907.                             {{ form_widget(form.url, {'attr': {'class': 'form-control file-input'}}) }}
  1908.                             {{ form_errors(form.url, {'attr': {'class': 'form-control message'}}) }}
  1909.                         </div>
  1910.                     </div>
  1911.                 </div>
  1912.                 <div class="col-2 mt-3">
  1913.                     <button type="button" data-action="delete" data-target="#block_{{id}}" class="btn btn-danger">X</button>
  1914.                 </div>
  1915.             </div>
  1916.         </div>
  1917.     {% endblock %}
  1918.     {% block javascript %}
  1919.         <script src="{{ asset('js/formLocationHebergemtn.js')}}"></script>
  1920.         <script src='https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/4.2.0/core/locales-all.min.js'></script>
  1921.         <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
  1922.     
  1923.         <script title="zoom img comment">
  1924.             {% for key,productAvi in productAvis|slice(0, 3) %}
  1925.                 if ($('.img_comment').length) {
  1926.                     $('#cli_{{key}} .img_comment').magnificPopup({
  1927.                         items: [{% for imageComment in productAvi.imageComments.toArray() %}{
  1928.                                 src: "{{ asset(constant('App\\Services\\File::IMAGE_COMMENT_DIR') ~ imageComment.url) }}",
  1929.                                 title: 'Photo ' + {{ loop.index }}
  1930.                             },{% endfor %}],
  1931.                         gallery: {
  1932.                             enabled: true
  1933.                         },
  1934.                         type: 'image' // this is a default type
  1935.                     });
  1936.                 }
  1937.             {% endfor %}
  1938.         </script>
  1939.         <script>
  1940.             if (document.getElementById("profil_user_image")) {
  1941.                 document.getElementById("profil_user_image").addEventListener('change', function() {
  1942.                     var reader = new FileReader();
  1943.                     reader.onload = function (e) {
  1944.                         // get loaded data and render thumbnail.
  1945.                         console.log(e.target)
  1946.                         document.getElementById("image-preview").style.background = `url(${e.target.result})no-repeat center`;
  1947.                         document.getElementById("image-preview").style.backgroundSize = `cover`;
  1948.                     };
  1949.                     // read the image file as a data URL.
  1950.                     reader.readAsDataURL(this.files[0]);
  1951.                 });
  1952.             }
  1953.         </script>
  1954.         {{ parent() }}
  1955.         {# Script zoom option #}
  1956.         <script>
  1957.             let backgroundFlou = document.querySelector('.backgroundTrans');
  1958.             let exitBtn = document.querySelector('.exitZoomOpt');
  1959.             //Affiche image clikee
  1960.             function afficheImgOption(idbtn) {
  1961.                 let img = document.getElementById(idbtn + "img");
  1962.                 //console.log(img);
  1963.                 //img.classList.add('showImgOption');
  1964.                 img.style.display = "block";
  1965.                 backgroundFlou.style.display = "block";
  1966.                 exitBtn.style.display = "block";
  1967.             }    
  1968.             //Fermer par contoure image
  1969.             backgroundFlou.addEventListener('click', function () {
  1970.                 let imgZoomOp = document.querySelectorAll(".imgZoomOption");
  1971.                 imgZoomOp.forEach(function(item,index){
  1972.                     imgZoomOp[index].style.display = "none";
  1973.                 })
  1974.                 backgroundFlou.style.display = "none";
  1975.                 exitBtn.style.display = "none";
  1976.             })
  1977.             
  1978.             //Fermer par boutton X
  1979.             exitBtn.addEventListener('click', function () {
  1980.                 let imgZoomOp = document.querySelectorAll(".imgZoomOption");
  1981.                 imgZoomOp.forEach(function(item,index){
  1982.                     imgZoomOp[index].style.display = "none";
  1983.                 })
  1984.                 backgroundFlou.style.display = "none";
  1985.                 exitBtn.style.display = "none";
  1986.             })
  1987.         </script>
  1988. <script>
  1989. var counte = [];
  1990. $('#add_image').click(function () {
  1991. const index = + $('#widgets-counter').val();
  1992. var tab = this.dataset.target;
  1993. var valeur = tab + "_" + index;
  1994. if (counte.length < 3) {
  1995. counte.push(valeur);
  1996. const tmpl = $('#avis_imageComments').data('prototype').replace(/__name__/g, index);
  1997. $('#avis_imageComments').append(tmpl);
  1998. $('#widgets-counter').val(index + 1);
  1999. }
  2000. handleDeleteButtons();
  2001. })
  2002. function handleDeleteButtons() {
  2003. $('button[data-action="delete"]').click(function (event) {
  2004. event.preventDefault();
  2005. const target = this.dataset.target;
  2006. var num = counte.indexOf(target);
  2007. $(target).remove();
  2008. if (num != -1) {
  2009. counte.splice(num, 1);
  2010. }
  2011. });
  2012. }
  2013. function updateCounter() {
  2014. const count = + $('#comment_imageComment div.form-group').length;
  2015. $('#widgets-counter').val(count);
  2016. }
  2017. updateCounter();
  2018. handleDeleteButtons();
  2019. // OnFileValidation();
  2020. var previewPicture  = function (e) {
  2021.     // e.files contient un objet FileList
  2022.     const [picture] = e.files
  2023.     // "picture" est un objet File
  2024.     if (picture) {
  2025.         // On change l'URL de l'image
  2026.         document.getElementById("img_profil").src = URL.createObjectURL(picture)
  2027.     }
  2028. }
  2029.             </script>
  2030.         <script tite="gestion options front" src="{{ asset('js/gestion_option.js') }}">
  2031.         </script>
  2032.         <script>
  2033. $(document).ready(function () {
  2034.     $('.popup-youtube, .popup-vimeo, .popup-gmaps').magnificPopup({
  2035.         disableOn: 700,
  2036.         type: 'iframe',
  2037.         mainClass: 'mfp-fade',
  2038.         removalDelay: 160,
  2039.         preloader: false,
  2040.         fixedContentPos: false
  2041.     });
  2042. });
  2043. {# Moins Plus Qty #}
  2044. function wcqib_refresh_quantity_increments() {
  2045.     jQuery("div.quantity:not(.buttons_added), td.quantity:not(.buttons_added)").each(function (a, b) {
  2046.         var c = jQuery(b);
  2047.         c.addClass("buttons_added"),
  2048.             c.children().first().before('<input type="button" value="-" class="minus" />'),
  2049.             c.children().last().after('<input type="button" value="+" class="plus" />')
  2050.     })
  2051. }
  2052. String.prototype.getDecimals || (String.prototype.getDecimals = function () {
  2053.     var a = this,
  2054.         b = ("" + a).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
  2055.     return b ? Math.max(0, (b[1] ? b[1].length : 0) - (b[2] ? + b[2] : 0)) : 0
  2056. }),
  2057.     jQuery(document).ready(function () {
  2058.         wcqib_refresh_quantity_increments()
  2059.     }),
  2060.     jQuery(document).on("updated_wc_div", function () {
  2061.         wcqib_refresh_quantity_increments()
  2062.     }),
  2063.     jQuery(document).on("click", ".plus, .minus", function () {
  2064.         var a = jQuery(this).closest(".quantity").find(".qty"),
  2065.             b = parseFloat(a.val()),
  2066.             c = parseFloat(a.attr("max")),
  2067.             d = parseFloat(a.attr("min")),
  2068.             e = a.attr("step");
  2069.         b && "" !== b && "NaN" !== b || (b = 0),
  2070.             "" !== c && "NaN" !== c || (c = ""),
  2071.             "" !== d && "NaN" !== d || (d = 0),
  2072.             "any" !== e && "" !== e && void 0 !== e && "NaN" !== parseFloat(e) || (e = 1),
  2073.             jQuery(this).is(".plus") ? c && b >= c ? a.val(c) : a.val((b + parseFloat(e)).toFixed(e.getDecimals())) : d && b <= d ? a.val(d) : b > 0 && a.val((b - parseFloat(e)).toFixed(e.getDecimals())),
  2074.             a.trigger("change")
  2075.     });
  2076. {# Moins Plus Qty #}
  2077. if ($('#open-popup-images').length) {
  2078.     $('#open-popup-images').magnificPopup({
  2079.         items: [{% for photo in product.photos %}{
  2080.         src: "{{ asset(constant('App\\Services\\File::IMAGE_PRODUCT_DIR') ~ photo.url) }}",
  2081.         title: 'Photo ' + {{ loop.index }}
  2082.     },{% endfor %}],
  2083.         gallery: {
  2084.         enabled: true
  2085.     },
  2086.         type: 'image' // this is a default type
  2087.     });
  2088. }
  2089.         </script>
  2090.         <script>
  2091. {# window.addEventListener('load', (event) => {
  2092.     localStorage.clear();
  2093. }); #}
  2094. {# Call option article  #}
  2095. function modiffOption(id_option,url) {
  2096.     console.log('zaaa',url);
  2097.     fetch(`${url}/option/${id_option}`)
  2098.     .then(response=> response.json())
  2099.     .then(data=>{
  2100.         
  2101.         $(".nice-select").attr("style", "display: none !important");
  2102.         $("#id_optionmodal").val(id_option);
  2103.         $("#name_optionmodal").val(data.options.name);
  2104.         $("#image_optionmodal").val(data.options.image1);
  2105.         var imageopt=`<img id="optionbtn1img" src="/upload/produits/${data.options.image1}">`;
  2106.         $("#optionsimage").html(imageopt);
  2107.         console.log('image',imageopt);
  2108.         console.log('subcates',data.options);
  2109.         console.log('olor',data.options.colorsOption);
  2110.         if ( typeof data.options.colorsOption != "undefined" && data.options.colorsOption != null && data.options.colorsOption.length != null && data.options.colorsOption.length > 0) {
  2111.             var colorso ="";
  2112.             for (let i = 0; i < data.options.colorsOption.length; i++) {
  2113.                 colorso +='<option>'+ data.options.colorsOption[i]+'</option>'
  2114.             }
  2115.             $("#optionscolor").html(colorso);
  2116.             $(".optionscolor").attr("style", "display: block !important");
  2117.             $("#optionscolor").attr("style", "display: block !important");
  2118.         }else{
  2119.             $(".optionscolor").attr("style", "display: none !important");
  2120.         }
  2121.         if (typeof data.options.format != "undefined" && data.options.format != null && data.options.format.length != null && data.options.format.length > 0) {
  2122.             var formatopt ="";
  2123.             for (let i = 0; i < data.options.format.length; i++) {
  2124.                 formatopt +='<option>'+data.options.format[i]+'</option>'
  2125.             }
  2126.             $("#optionsform").html(formatopt);
  2127.             $(".optionsform").attr("style", "display: block !important");
  2128.             $("#optionsform").attr("style", "display: block !important");
  2129.         }
  2130.         else{
  2131.             $(".optionsform").attr("style", "display: none !important");
  2132.         }
  2133.         if (typeof data.options.finition != "undefined" && data.options.finition != null && data.options.finition.length != null && data.options.finition.length > 0) {
  2134.             var finitions ="";
  2135.             for (let i = 0; i < data.options.finition.length; i++) {
  2136.                 finitions +='<option>'+data.options.finition[i]+'</option>'
  2137.             }
  2138.             $("#optionsfinition").html(finitions);
  2139.             $(".optionsfinition").attr("style", "display: block !important");
  2140.             $("#optionsfinition").attr("style", "display: block !important");
  2141.         }
  2142.         else{
  2143.             $(".optionsfinition").attr("style", "display: none !important");
  2144.         }
  2145.         if (typeof data.options.papier != "undefined" && data.options.papier != null && data.options.papier.length != null && data.options.papier.length > 0) {
  2146.             var papiers ="";
  2147.             for (let i = 0; i < data.options.papier.length; i++) {
  2148.                 papiers +='<option>'+data.options.papier[i]+'</option>'
  2149.             }
  2150.             $("#optionspapier").html(papiers);
  2151.             $(".optionspapier").attr("style", "display: block !important");
  2152.             $("#optionspapier").attr("style", "display: block !important");
  2153.         }
  2154.         else{
  2155.             $(".optionspapier").attr("style", "display: none !important");
  2156.         }
  2157.         if (typeof data.options.quantite != "undefined" && data.options.quantite != null && data.options.quantite.length != null && data.options.quantite.length > 0) {
  2158.             var quantites ="";
  2159.             for (let i = 0; i < data.options.quantite.length; i++) {
  2160.                 quantites +='<option>'+data.options.quantite[i]+'</option>'
  2161.             }
  2162.             $("#optionsquantite").html(quantites);
  2163.             $(".optionsquantite").attr("style", "display: block !important");
  2164.             $("#optionsquantite").attr("style", "display: block !important");
  2165.         }
  2166.         else{
  2167.             $(".optionsquantite").attr("style", "display: none !important");
  2168.         }
  2169.         if (typeof data.options.etiquette != "undefined" && data.options.etiquette != null && data.options.etiquette.length != null && data.options.etiquette.length > 0) {
  2170.             var etiquettes ="";
  2171.             for (let i = 0; i < data.options.etiquette.length; i++) {
  2172.                 etiquettes +='<option>'+data.options.etiquette[i]+'</option>'
  2173.             }
  2174.             $("#optionsetiquette").html(etiquettes);
  2175.             $(".optionsetiquette").attr("style", "display: block !important");
  2176.             $("#optionsetiquette").attr("style", "display: block !important");
  2177.         }
  2178.         else{
  2179.             $(".optionsetiquette").attr("style", "display: none !important");
  2180.         }
  2181.         if (typeof data.options.ruban != "undefined" && data.options.ruban != null && data.options.ruban.length != null && data.options.ruban.length > 0) {
  2182.             var rubans ="";
  2183.             for (let i = 0; i < data.options.ruban.length; i++) {
  2184.                 rubans +='<option>'+data.options.ruban[i]+'</option>'
  2185.             }
  2186.             $("#optionsruban").html(rubans);
  2187.             $(".optionsruban").attr("style", "display: block !important");
  2188.             $("#optionsruban").attr("style", "display: block !important");
  2189.         }
  2190.         else{
  2191.             $(".optionsruban").attr("style", "display: none !important");
  2192.         }
  2193.         
  2194.         $("#modalOption").modal("show");
  2195.             
  2196.     });
  2197.     
  2198. }
  2199. // function envoiGroupOption(params) {
  2200. //     console.log("io fa tonga");
  2201. //      var valeuroptions = localStorage.getItem('produit_option');
  2202. //     $("#storageGroupsOption").val(valeuroptions);
  2203. // }
  2204. // valide modal option article only
  2205. function validemodaloption() {
  2206.     //$("#optionscolor").val();
  2207.      $("#modalOption").modal("hide");
  2208.     console.log($("#optionscolor").val(),$("#id_optionmodal").val());
  2209.      const data = {
  2210.             idoption: $("#id_optionmodal").val(),
  2211.             nomoption: $("#name_optionmodal").val(),
  2212.             imageoption: $("#image_optionmodal").val(),
  2213.             color: $("#optionscolor").val(),
  2214.             form: $("#optionsform").val(),
  2215.             finition: $("#optionsfinition").val(),
  2216.             papier: $("#optionspapier").val(),
  2217.             quantite: $("#optionsquantite").val(),
  2218.             etiquette: $("#optionsetiquette").val(),
  2219.             ruban: $("#optionsruban").val(),
  2220.         };
  2221.     //     let datas = new FormData();
  2222.     //   return  datas.append("data", JSON.stringify(data));
  2223.     
  2224.     localStorage.setItem($("#id_optionmodal").val(), JSON.stringify(data));
  2225.     // if chambre
  2226.     if(document.querySelectorAll('.buttonAdd')) {
  2227.         const buttons = document.querySelectorAll('.buttonAdd');
  2228.         const labells = new Array()
  2229.         buttons.forEach(function(button){
  2230.             const idRoom = button.querySelector('input[type="checkbox"]:checked')
  2231.             if(idRoom){
  2232.                 idRoom.value = idRoom.id.split('_')[1]
  2233.                 labells.push(idRoom.value)
  2234.             }
  2235.         })
  2236.         // put array labells in localStorage
  2237.         localStorage.setItem('room_option', JSON.stringify(labells));
  2238.     }
  2239. }
  2240. // Fonction afiches toute reduction
  2241. function voirtouteReduction(id_product,url){
  2242.     $("#modalReduction").modal("hide");
  2243. }
  2244. // Fonction afiches toute caracteristique hebergement
  2245.     function voirtouteReduction(id_product, url) {
  2246.         $("#modalReduction").modal("hide");
  2247.     }
  2248. // Fonction afiches tous option (onfly for service)
  2249. function voirtoutOption(id_product,url) {
  2250.     console.log('kokokoko',url);
  2251.     console.log('isID',id_product);
  2252.     // var id_product=314;
  2253.     $("#valeurOpion").html("");
  2254.     fetch(`${url}/tous-options-product/${id_product}`)
  2255.     .then(response=> response.json())
  2256.     .then(data=>{ // return front/product/cart/optionHtml/row.html.twig
  2257.         $("#valeurOpion").append(data);
  2258.     });
  2259.     
  2260.     // Vérifier si les données sur les chambres sont stockées dans le localStorage
  2261.     console.log("veridier si les données sont stockées dans le localStorage")
  2262.     if (localStorage.getItem('room_option')) {
  2263.         // Récupérer les données sous forme d'Array
  2264.         const labells = JSON.parse(localStorage.getItem('room_option'));
  2265.         console.log("labells",labells)
  2266.         // Pour chaque valeur de l'Array, cocher la case correspondante
  2267.         labells.forEach(function(idRoom){
  2268.             const checkbox = document.querySelector('#roomButton_' + idRoom);
  2269.             if (checkbox) {
  2270.                 checkbox.checked = true;
  2271.             }
  2272.     });
  2273.     }
  2274.     if (localStorage.getItem('produit_option')) {
  2275.         // Récupérer les données sous forme d'Array
  2276.         const labells = JSON.parse(localStorage.getItem('produit_option'));
  2277.         console.log("labells",labells)
  2278.         // Pour chaque valeur de l'Array, cocher la case correspondante
  2279.         labells.forEach(function(idRoom){
  2280.             const checkbox = document.querySelector('#roomButton_' + idRoom);
  2281.             if (checkbox) {
  2282.                 checkbox.checked = true;
  2283.             }
  2284.     });
  2285.     }
  2286. }
  2287. {# Save infos group d'option and chambre in localstorage and update prix total #}
  2288. function validemodalgroupe(modalToHide) {
  2289.     // Hide modal depend of options
  2290.     if (modalToHide == "chambre") {
  2291.         $("#modalOptionChambre").modal("hide");
  2292.     } else {
  2293.         $("#modalOptionGP").modal("hide");
  2294.     }
  2295.     // If group option exist on the page
  2296.     if(document.getElementsByClassName('goption')) {
  2297.         var goption= document.getElementsByClassName('goption');
  2298.         var labels =new Array();
  2299.         var totalPriceOption = 0;
  2300.         for (let i = 0; i < goption.length; i++) {
  2301.             var id_goption = goption[i].id.split("_");
  2302.             var label= document.getElementsByClassName('label_'+id_goption[1]);
  2303.             var hidden= document.getElementsByClassName('hidden_'+id_goption[1]);
  2304.             var qte= document.getElementsByClassName('qte_'+id_goption[1]);
  2305.             
  2306.             // console.log('labeb',label);
  2307.             var compter=0;
  2308.             
  2309.             var lab =new Array();
  2310.             var qt =new Array();
  2311.             
  2312.             for (let l = 0; l < label.length; l++) {
  2313.             console.log('type', label[l].type);
  2314.                 if ((label[l].type=="checkbox" && label[l].checked) || 
  2315.             (label[l].type == "radio" && label[l].checked)) {
  2316.                     
  2317.                     lab[compter] = hidden[l].value;
  2318.                     qt[compter] = qte[l].value;
  2319.                      // Extract the price from hidden[l].value
  2320.                     let priceString = hidden[l].value.split("#_#")[1];
  2321.                     let price = parseFloat(priceString);
  2322.                     
  2323.                     // Multiply by the corresponding quantity and add to the total price
  2324.                     totalPriceOption += price * parseFloat(qte[l].value);
  2325.                     compter++
  2326.                 }
  2327.             }
  2328.             labels[i] = {idoption: id_goption[1], labelo: lab, qte: qt};
  2329.         }
  2330.             console.log('valin label',labels);
  2331.             
  2332.             localStorage.setItem('produit_option', JSON.stringify(labels));
  2333.             // update prix total in front
  2334.             calculerPrixTotal(totalPriceOption);
  2335.     }
  2336.     // If option chambre
  2337.     if(document.querySelectorAll('.buttonAdd')) {
  2338.         let totalPriceRoom = 0;
  2339.         let totalPlaceParticipant = 0;
  2340.         const buttons = document.querySelectorAll('.buttonAdd');
  2341.         const labells = new Array()
  2342.         buttons.forEach(function(button){
  2343.             const idRoom = button.querySelector('input[type="checkbox"]:checked')
  2344.             if(idRoom){
  2345.                 idRoom.value = idRoom.id.split('_')[1]
  2346.                 labells.push(idRoom.value)
  2347.                 if (document.getElementById(`priceRoom_${idRoom.value}`)) {
  2348.                     totalPriceRoom += parseFloat(document.getElementById(`priceRoom_${idRoom.value}`).value);
  2349.                 }
  2350.                 if(document.getElementById(`roomParticipant_${idRoom.value}`)){ // if it's an hotel
  2351.                     totalPlaceParticipant += parseInt(document.getElementById(`roomParticipant_${idRoom.value}`).value);
  2352.                 }
  2353.             }
  2354.         })
  2355.         // put array labells in localStorage
  2356.         localStorage.setItem('room_option', JSON.stringify(labells));
  2357.         console.log('localstorage',localStorage.getItem('room_option'));
  2358.         if(totalPlaceParticipant > 0){
  2359.             document.getElementById("participantsMax").value = totalPlaceParticipant;
  2360.             validationQtParticipant();
  2361.         }
  2362.         if (totalPriceRoom > 0) { // if totalPriceRoom positif -> it's an hotel
  2363.             document.getElementById("totalPriceHidden").value = totalPriceRoom;
  2364.             calculerPrixTotal(); // Actualisez le prix total apres avoir choisir des chambres
  2365.         }
  2366.     }
  2367. }
  2368.         // Ajouter au panier (only for article)
  2369. document.addEventListener('DOMContentLoaded', function () {
  2370.     if (!document.getElementById('form_add_bascket')) {
  2371.         return;
  2372.     }
  2373.     var form = document.getElementById('form_add_bascket');
  2374.     // var url = window.location.href.split('/');
  2375.         // var param_url = url[0]+'//'+url[2];
  2376.         // var checkOpt = document.querySelectorAll('.option-product');
  2377.         // var dataOptios = [];
  2378.         // for (var i = 0; i < checkOpt.length; i++) {
  2379.             // checkOpt[i].addEventListener('change', (option) => {
  2380.         //     // console.log('pppp',this);
  2381.         //     var idop = option.target.getAttribute('data-id');
  2382.         //     // console.log("izzz",param_url, idop);
  2383.         //     fetch(`${param_url}/option/${idop}`)
  2384.         //     .then(response=> response.json())
  2385.         //     .then(data=>{
  2386.         //         console.log('qqqqqq',data.options);
  2387.         //         console.log('nn',option.target.checked);
  2388.         //         if (option.target.checked) {
  2389.                     
  2390.         //             var dataOption={
  2391.         //                     idoption: data.options.id ? data.options.id : null,
  2392.         //                     nomoption: data.options.name ? data.options.name : null,
  2393.         //                     imageoption: data.options.image1 ? data.options.image1 : null,
  2394.         //                     color: data.options.colorsOption[0] ? data.options.colorsOption[0] : null,
  2395.         //                     form: data.options.format[0] ? data.options.format[0] : null,
  2396.         //                     finition: data.options.finition[0] ? data.options.finition[0] : null,
  2397.         //                     papier: data.options.papier[0] ? data.options.papier[0] : null,
  2398.         //                     quantite: data.options.quantite[0] ? data.options.quantite[0] : null,
  2399.         //                     etiquette: data.options.etiquette[0] ? data.options.etiquette[0] : null,
  2400.         //                     ruban: data.options.ruban[0] ? data.options.ruban[0] : null ,
  2401.         //                     }
  2402.         //             dataOptios.push(dataOption);
  2403.         //         }else{
  2404.         //             console.log('miala checked');
  2405.             //             console.log('donnée',dataOptios);
  2406.         //             for (let g = 0; g < dataOptios.length; g++) {    
  2407.         //                 if (dataOptios[g].idoption == idop) {
  2408.         //                     console.log('données_hita',dataOptios[g].idoption);
  2409.         //                 }
  2410.         //             }
  2411.         //         }
  2412.         //     });
  2413.         // })
  2414.     // }    
  2415.     
  2416.     form.addEventListener('submit', (e) => {
  2417.         e.preventDefault();
  2418.          let form = e.target;
  2419.         const formData = new FormData(form);
  2420.         // for (let h = 0; h < dataOptios.length; h++) {    
  2421.         //     //  formData.append("OpId_"+j, values[j]);
  2422.         //     //  console.log("valuo",values[j]);
  2423.         //     console.log('tonga_aty',dataOptios[h]);
  2424.         // }  
  2425.      var valeuroptions=localStorage.getItem('produit_option');
  2426.      localStorage.removeItem('produit_option');
  2427.      console.log("localstor", valeuroptions);
  2428.      formData.append("groupOption", valeuroptions);
  2429.     //  var table=[];
  2430.     //  for (let o = 0; o < valeuroptions.length; o++) {
  2431.     //     table[]= valeuroptions[o];    
  2432.     //  }
  2433.     //  console.log('valertab', table);
  2434.       if (Object.keys(localStorage).length != 0) {
  2435.         
  2436.           var values = [];
  2437.           keys = Object.keys(localStorage);
  2438.           i = keys.length;
  2439.   
  2440.           while ( i-- ) {
  2441.               values.push( localStorage.getItem(keys[i]) );
  2442.               localStorage.removeItem(keys[i]);
  2443.           }       
  2444.           formData.append("tail",values.length);
  2445.           
  2446.           for (let j = 0; j < values.length; j++) {    
  2447.              formData.append("OpId_"+j, values[j]);
  2448.              console.log("valuo",values[j]);
  2449.           }
  2450.       }
  2451.         fetch(form.action, {
  2452.             method: form.method,
  2453.             body: formData
  2454.         }).then(response => response.json())
  2455.         .then(data => {
  2456.             if (data.message === 'ok') {
  2457.                 if (data.response === 'added') {
  2458.                     const btnAdd = document.getElementById('btn_add');
  2459.                     btnAdd.classList.replace('btn-primary', 'btn-danger');
  2460.                     btnAdd.textContent = 'Supprimer du panier';
  2461.                     const msgElt = document.getElementById('message_form');
  2462.                     msgElt.classList.replace('text-danger', 'text-success');
  2463.                     msgElt.classList.add('text-center');
  2464.                     msgElt.textContent = 'Produit ajouté au panier !';
  2465.                     
  2466.                     let nbProducts = parseInt(document.getElementById('nb_basket').innerHTML);
  2467.                     nbProducts++;
  2468.                     document.getElementById('nb_basket').textContent = nbProducts;
  2469.                 } else if (data.response === 'removed') {
  2470.                     const btnAdd = document.getElementById('btn_add');
  2471.                     btnAdd.classList.replace('btn-danger', 'btn-primary');
  2472.                     btnAdd.textContent = 'Ajouter au panier';
  2473.                     const msgElt = document.getElementById('message_form');
  2474.                     msgElt.classList.replace('text-danger', 'text-success');
  2475.                     msgElt.classList.add('text-center');
  2476.                     msgElt.textContent = 'Produit supprimé du panier !';
  2477.                     let nbProducts = parseInt(document.getElementById('nb_basket').innerHTML);
  2478.                     nbProducts--;
  2479.                     document.getElementById('nb_basket').textContent = nbProducts;
  2480.                 } else if (data.response === 'error') {
  2481.                     const msgElt = document.getElementById('message_form');
  2482.                     msgElt.textContent = data.response;
  2483.                 }
  2484.             } else if (data.message === 'error') {
  2485.                 if (data.response === 'Quantité non disponible'){
  2486.                     const msgElt = document.getElementById('message_form');
  2487.                     msgElt.classList.replace('text-success', 'text-danger');
  2488.                     msgElt.classList.add('text-center');
  2489.                     msgElt.textContent = 'Quantité pas disponible';
  2490.                     return;
  2491.                 }
  2492.                 if (data.response === 'Quantité option non disponible') {
  2493.                     const msgElt = document.getElementById('message_form');
  2494.                     msgElt.classList.replace('text-success', 'text-danger');
  2495.                     msgElt.classList.add('text-center');
  2496.                     msgElt.textContent = 'Il y a une quantité d\'option pas disponible';
  2497.                     return;
  2498.                 }
  2499.             }
  2500.         });
  2501.         return false;
  2502.     })
  2503.     const btnWish = document.getElementById('btn_add_wish');
  2504.     if (btnWish) {
  2505.         btnWish.addEventListener('click', () => {
  2506.             fetch("{{ path('front_add_wish', {'id': product.id}) }}", { method: "POST" }).then(response => response.json()).then(data => {
  2507.                 if (data.message === 'ok') {
  2508.                     if (data.response === 'added') {
  2509.                         btnWish.style.color = '#fff';
  2510.                         btnWish.style.backgroundColor = '#ff4d4d';
  2511.                         document.getElementById('text_btn').textContent = "Supprimer";
  2512.                     } else if (data.response === 'removed') {
  2513.                         btnWish.style.color = '#ff4d4d';
  2514.                         btnWish.style.backgroundColor = '#fff';
  2515.                         document.getElementById('text_btn').textContent = "Ajouter";
  2516.                     }
  2517.                 }
  2518.             });
  2519.         })
  2520.     }
  2521. })
  2522.         </script>
  2523.         <script>
  2524. const formContact = document.getElementById('contactFormProduct');
  2525. if (formContact) {
  2526.     formContact.addEventListener('submit', (e) => {
  2527.         e.preventDefault();
  2528.         let form = e.target;
  2529.         const formData = new FormData(form);
  2530.         fetch(form.action, {
  2531.         method: form.method,
  2532.         body: formData
  2533.         }).then(response => response.json()).then(data => {
  2534.             if (data.status === 'ok') {
  2535.                 document.getElementById('messageSuccessContact').style.display = 'block';
  2536.                 formContact.reset();
  2537.             }
  2538.         });
  2539.         return false;
  2540.     })
  2541. }
  2542.         </script>
  2543.         <script src="{{ asset('js/jquery.rateyo.min.js') }}"></script>
  2544.         <script>
  2545.             $(function () {
  2546. $("#rateYo1, #rateYo2, #rateYo3, #rateYo4, #rateYo5, #rateYo6 ").rateYo({rating: 3.6});
  2547. });
  2548. $("#rateYo1").rateYo().on("rateyo.change", function (e, data) {
  2549. var $rateYo = $("#rateYo1").rateYo("rating");
  2550. $('#avis_serviceQuality').val($rateYo);
  2551. });
  2552. $("#rateYo2").rateYo().on("rateyo.change", function (e, data) {
  2553. var $rateYo = $("#rateYo2").rateYo("rating");
  2554. $('#avis_fiability').val($rateYo);
  2555. });
  2556. $("#rateYo3").rateYo().on("rateyo.change", function (e, data) {
  2557. var $rateYo = $("#rateYo3").rateYo("rating");
  2558. $('#avis_price').val($rateYo);
  2559. });
  2560. $("#rateYo4").rateYo().on("rateyo.change", function (e, data) {
  2561. var $rateYo = $("#rateYo4").rateYo("rating");
  2562. $('#avis_speed').val($rateYo);
  2563. });
  2564. $("#rateYo5").rateYo().on("rateyo.change", function (e, data) {
  2565. var $rateYo = $("#rateYo5").rateYo("rating");
  2566. $('#avis_conformDescription').val($rateYo);
  2567. });
  2568. $("#rateYo6").rateYo().on("rateyo.change", function (e, data) {
  2569. var $rateYo = $("#rateYo6").rateYo("rating");
  2570. $('#avis_communication').val($rateYo);
  2571. });
  2572.         </script>
  2573.         {% set isService = false %}
  2574.         {% for productSubCategory in product.subCategories %}
  2575.             {% if productSubCategory.isService == true %}
  2576.                 {% set isService = true %}
  2577.             {% endif %}
  2578.         {% endfor %}
  2579.         {% if isService == true %}
  2580.             <!-- LOCATIONS -->
  2581.             {% set isLocation = false %}
  2582.             {% for singleCategory in product.subcategories %}
  2583.                 {% if singleCategory.name == "Location de salle" or singleCategory.name == "Location de vehicule"  %}
  2584.                     {% set isLocation = true %}
  2585.                 {% endif %}
  2586.             {% endfor %}
  2587.             {% if isLocation is defined %}
  2588.                 <!-- LOCATIONS -->
  2589.                 {% if isLocation == true or product.typeLocation is not null %}
  2590.                     {% set locations = [] %}
  2591.                  
  2592.                     {% for location in product.locations %}
  2593.                         {#% if annonce.categorie.libelle != 'SERVICES' %#}
  2594.                         {#% Si la location est en attente ou si la location est acceptée, elle est ajoutée au tableau locations %#}
  2595.                             {% if location.isAccepted is same as(null) or location.isAccepted is same as(true) and location.isLannul != 1 %}
  2596.                                 {% set locations = locations|merge([{debut: location.startAt, fin: location.endAt, typeLocation: location.product.typeLocation ? location.product.typeLocation.label : "" }]) %}
  2597.                             {% endif %}
  2598.                         {#% else %}
  2599.                             {% set locations = locations|merge([{debut: location.dateDebut|date("d/m/Y H:i"), fin: location.dateFin|date("d/m/Y H:i"), statut: location.statutLocation.id }]) %}
  2600.                         {% endif %#}
  2601.                     {% endfor %}
  2602.                     {% set planningCompanies = [] %}
  2603.                     {% for planningCompanie in product.company.planningCompanies %}
  2604.                         {% if planningCompanie is defined %}
  2605.                             {% set planningCompanies = planningCompanies|merge([{debut: planningCompanie.start, fin: planningCompanie.end }]) %}
  2606.                         {% endif %}
  2607.                     {% endfor %}
  2608.         
  2609.                     <script>
  2610.                         const checkOptLocation = document.querySelectorAll('.cheklocationclass');
  2611.                         
  2612.                         for (var i = 0; i < checkOptLocation.length; i++) {
  2613.                             checkOptLocation[i].addEventListener('change', (option) => {
  2614.                                 if (option.target.checked) {
  2615.                                     const priceOptionre = option.target.getAttribute('data-price');
  2616.                                     console.log('yyyaaa',$("#totalPricese").html());
  2617.                                     var total= parseFloat($("#totalPricese").html()) + parseFloat(priceOptionre);
  2618.                                     $("#totalPricese").html(total);
  2619.                                 }else{
  2620.                                     const priceOptionre = option.target.getAttribute('data-price');
  2621.                                     var total= parseFloat($("#totalPricese").html()) - parseFloat(priceOptionre);
  2622.                                     $("#totalPricese").html(total);
  2623.                                 }
  2624.                             })
  2625.                         }
  2626.                     </script>
  2627.                     <script>
  2628.                         let locations = {{ locations|json_encode|raw }};
  2629.                         let planningCompanies = {{ planningCompanies|json_encode|raw }};
  2630.                     </script>
  2631.                     {% if product.typeLocation %}
  2632.                         {% if product.typeLocation.label == 'heure' %}
  2633.                             <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
  2634.                             <script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.8.1/baguetteBox.min.js"></script>
  2635.                             <script src="{{asset('/js/jquery.datetimepicker.full.js')}}"></script>
  2636.                             <script src="{{ asset('/js/calendrierLocationHeure.js') }}"></script>
  2637.                         {% else %}
  2638.                             <script src="{{ asset('/js/calendrierJours.js') }}"></script>
  2639.                             <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
  2640.                         {% endif %}
  2641.                     {% else %}
  2642.                         <script src="{{ asset('/js/calendrierJours.js') }}"></script>
  2643.                         <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
  2644.                     {% endif %}
  2645.                 {% endif %}
  2646.                 <!-- RESERVATIONS -->
  2647.                 {% if isLocation is same as(false) and product.typeLocation is null %}
  2648.                     {% set reservationsList = [] %}
  2649.                     {% for reservation in product.reservations %}
  2650.                         {% if reservation.isAccepted is same as(null) or reservation.isAccepted is same as(true)%}
  2651.                             {% set reservationsList = reservationsList|merge([{date_livraison: reservation.reservationPlannedAt}]) %}
  2652.                         {% endif %}
  2653.                     {% endfor %}
  2654.                      {# <script>
  2655.                         const checkOptResevatio = document.querySelectorAll('.chekboxclass');
  2656.                         // console.log('ffafffa', checkOptResevatio);
  2657.                         for (var i = 0; i < checkOptResevatio.length; i++) {
  2658.                             checkOptResevatio[i].addEventListener('change', (option) => {
  2659.                                 console.log('vvvvvvv', option.target.checked, parseFloat($("#totalPricere").html()));
  2660.                                 if (option.target.checked) {
  2661.                                     const priceOptionre = option.target.getAttribute('data-price');
  2662.                                     var total= parseFloat($("#totalPricere").html()) + parseFloat(priceOptionre);
  2663.                                     $("#totalPricere").html(total);
  2664.                                 }else{
  2665.                                     const priceOptionre = option.target.getAttribute('data-price');
  2666.                                     var total= parseFloat($("#totalPricere").html()) - parseFloat(priceOptionre);
  2667.                                     $("#totalPricere").html(total);
  2668.                                 }
  2669.                             })
  2670.                         }
  2671.                      </script> #}
  2672.                     <script>
  2673.                         let reservationsList = {{ reservationsList|json_encode|raw }};
  2674.                     </script>
  2675.                     <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
  2676.                     <script src="https://cdnjs.cloudflare.com/ajax/libs/baguettebox.js/1.8.1/baguetteBox.min.js"></script>
  2677.                     <script src="{{asset('/js/jquery.datetimepicker.full.js')}}"></script>
  2678.                     <script src="{{ asset('/js/calendrierReservation.js') }}"></script>
  2679.                 {% endif %}
  2680.             {% endif %}
  2681.         {% endif %}
  2682.     {% endblock %}