templates/FrontCommun/VoyagesOrganise/reservation.html.twig line 1

Open in your IDE?
  1. {% extends 'FrontCommun/base.html.twig' %}
  2. {% block title %}Réservation!{% endblock %}
  3. {% block stylesheets %}
  4.     {{ parent() }}
  5.     <link rel="stylesheet" href="{{ asset('assets-commun/css/readmore.css') }}">
  6.     {% if  configAffichage!= null and configAffichage.GENERALE.NUMEROTATION_TITLE_FORM is defined and configAffichage.GENERALE.NUMEROTATION_TITLE_FORM == 'oui' %}
  7.         <link rel="stylesheet" href="{{ asset('assets-commun/css/numerotation-form.css') }}">
  8.     {% endif %}
  9. {% endblock %}
  10. {% block body %}
  11.     {% include checkCustomTemplate('VoyagesOrganise/reservation-content.html.twig') %}
  12. {% endblock %}
  13. {% block jquery %}
  14.     <script type="text/javascript" src="{{ asset("assets-commun/js/loadingoverlay.min.js") }}"></script>
  15.     <script>
  16.         function strReplaceAll(string, Find, Replace) {
  17.             try {
  18.                 return string.replace(new RegExp(Find, "g"), Replace);
  19.             } catch (ex) {
  20.                 return string;
  21.             }
  22.         }
  23.         BookingCreation ={{ details|json_encode|raw }}
  24.         var vjsRecap = new Vue({
  25.             el: "#vjs-recap",
  26.             data: {
  27.                 total: 0..formatMoney(3, ',', ' '),
  28.                 totalPayer: 0..formatMoney(3, ',', ' '),
  29.                 margeB2B: 0..formatMoney(3, ',', ' '),
  30.                 sousTotal: 0..formatMoney(3, ',', ' '),
  31.                 TotalAchat: 0..formatMoney(3, ',', ' '),
  32.                 remise: 0..formatMoney(3, ',', ' '),
  33.                 remiseInternet: 0..formatMoney(3, ',', ' '),
  34.                 fraisDossier: 0..formatMoney(3, ',', ' '),
  35.                 commission: 0..formatMoney(3, ',', ' '),
  36.                 timbre: 0..formatMoney(3, ',', ' '),
  37.                 nuitees:'',
  38.                 chambres: [],
  39.                 coupon: {
  40.                     code: '',
  41.                     reduction: 0,
  42.                     amount: 0,
  43.                     montant: (0).formatMoney(3, ',', ' ')
  44.                 },
  45.             },
  46.             computed: {
  47.                 Total: function () {
  48.                     return (parseFloat(vjsRecap.total.replace(' ','').replace(',','.')) - parseFloat(this.coupon.amount)).formatMoney(3, ',', ' ');
  49.                 },
  50.             },
  51.             methods: {
  52.                 onInputCoupon() {
  53.                     /*vjsForm.request.HotelBooking.DiscountCoupon = this.coupon.code*/
  54.                 },
  55.                 verifCoupon() {
  56.                     this.coupon.reduction = ''
  57.                     this.coupon.amount = 0
  58.                     this.coupon.montant = (0).formatMoney(3, ',', ' ')
  59.                     $('#nuitees').val(BookingCreation["firstPeriode"]["nbrNuit"]);
  60.                     $('#dateDebut').val(BookingCreation["firstPeriode"]["depart"]);
  61.                     if (this.coupon.code == "")
  62.                         return;
  63.                     $("i#load-coupon").removeClass("hidden")
  64.                     $.get(Routing.generate('verif_couponreduction', {
  65.                         produit: 'VO',
  66.                         achat: vjsRecap.TotalAchat,
  67.                         vente: vjsRecap.sousTotal,
  68.                         nuitees: BookingCreation["firstPeriode"]["nbrNuit"],
  69.                         checkin: BookingCreation["firstPeriode"]["depart"],
  70.                         code: encodeURIComponent(this.coupon.code)
  71.                     }), function (data) {
  72.                         if (data.error !== undefined)
  73.                             viewAlert(data.error, "danger")
  74.                             //viewAlert(`Code coupon <b class="text-danger">${vjsRecap.coupon.code}</b> invalid`, "danger")
  75.                         else if (data.reduction !== undefined) {
  76.                              $('#couponReduction').val(data.code);
  77.                             vjsRecap.coupon.montant = parseFloat(data.reduction).formatMoney(3, ',', ' ')
  78.                             vjsRecap.coupon.amount = (data.reduction).formatMoney(3, ',', ' ')
  79.                             if (data.type == "sur-total" && data.valeurPour)
  80.                                 vjsRecap.coupon.reduction = '(-' + (data.valeurPour ? data.valeur + '%' : (parseFloat(data.valeur).formatMoney(3, ',', ' ') + ' {{ deviseSelected().symbole }}')) + ')'
  81.                         }
  82.                         $("i#load-coupon").addClass("hidden")
  83.                     });
  84.                 },
  85.             },
  86.             mounted() {
  87.                 this.verifCoupon()
  88.             }
  89.         })
  90.         function calcTotal() {
  91.             $('#vjs-recap').LoadingOverlay("show", {
  92.                 image: "",
  93.                 fontawesome: "fa fa-spinner fa-spin"
  94.             });
  95.             setTimeout(function () {
  96.                 var formData = new FormData(document.getElementById('form-reservation'))
  97.                 formData.append('preReservation', true);
  98.                 $.ajax({
  99.                     url: $('#form-reservation').attr("action"),
  100.                     type: $('#form-reservation').attr("method"),
  101.                     dataType: "JSON",
  102.                     data: formData,
  103.                     processData: false,
  104.                     contentType: false,
  105.                     complete: function () {
  106.                         $("#vjs-recap").LoadingOverlay("hide", true);
  107.                     },
  108.                     success: function (data, status) {
  109.                         console.log("vall",data.Resultat)
  110.                         vjsRecap.total = parseFloat(data.Resultat.total).formatMoney(3, ',', ' ')
  111.                         vjsRecap.totalPayer = parseFloat(data.Resultat.totalPayer).formatMoney(3, ',', ' ')
  112.                         vjsRecap.margeB2B = parseFloat(data.Resultat.margeB2B).formatMoney(3, ',', ' ')
  113.                         vjsRecap.sousTotal = parseFloat(data.Resultat.sousTotal-data.Resultat.remise).formatMoney(3, ',', ' ')
  114.                         //vjsRecap.remise = parseFloat(data.Resultat.remise).formatMoney(3, ',', ' ')
  115.                         vjsRecap.remiseInternet = parseFloat(data.Resultat.remiseInternet).formatMoney(3, ',', ' ')
  116.                         vjsRecap.fraisDossier = parseFloat(data.Resultat.fraisDossier).formatMoney(3, ',', ' ')
  117.                         vjsRecap.commission = parseFloat(data.Resultat.commission).formatMoney(3, ',', ' ')
  118.                         vjsRecap.timbre = parseFloat(data.Resultat.timbre).formatMoney(3, ',', ' ')
  119.                         vjsRecap.chambres = data.Resultat.chambres
  120.                     },
  121.                     error: function (xhr, desc, err) {
  122.                     }
  123.                 });
  124.             }, 500);
  125.         }
  126.         $(document).on('change', "#single,#double,#triple,#quadruple,select.age", function () {
  127.             calcTotal()
  128.         })
  129.         $("#frais,#excrsion,#supplements").on('click', function () {
  130.             calcTotal()
  131.         })
  132.       
  133. {% set omraRoomAdditionAllowed = configAffichage is defined and configAffichage is not null and configAffichage.VOYAGE is defined and configAffichage.VOYAGE.OMRA_ALLOW_ROOM_ADDITION is defined and configAffichage.VOYAGE.OMRA_ALLOW_ROOM_ADDITION == 'oui' %}
  134. {% if type == 6 and omraRoomAdditionAllowed %}
  135.       
  136.        $(document).ready(function () {
  137.             var str = '{{ app.request.get('rooms') }}';
  138.             /* '0,0,1,1-4!2!2!0;3!1!2!0' */
  139.             var config_omra = false;
  140.             {% if configAffichage is defined and configAffichage!= null and configAffichage.VOYAGE.ADD_FORM_ROOM_PAX_DETAILS_OMRA =='oui' and type==6 %}
  141.             config_omra  = true;
  142.             var data = JSON.parse('{{ app.request.get('reservation')|json_encode|raw }}');
  143.             var string_chambres = '';
  144.             var nbre_chambre_single = 0;
  145.             var nbre_chambre_double = 0;
  146.             var nbre_chambre_triple = 0;
  147.             var nbre_chambre_quadruple = 0;
  148.             var chambre_single = "";
  149.             var chambre_double = "";
  150.             var chambre_triple = "";
  151.             var chambre_quadruple = "";
  152.             $.each(data.chambre, function (index, value) {
  153.                 var adultes = parseInt(value.adultes);
  154.                 var enfants = parseInt(value.enfants);
  155.                 var bebes = parseInt(value.bebes);
  156.                 var nbre_occupations = adultes + enfants + bebes;
  157.                 var string_occupations = value.type + '!' + adultes + '!' + enfants + '!' + bebes;
  158.                 switch (value.type) {
  159.                     case "1":
  160.                         nbre_chambre_single += 1;
  161.                         chambre_single = chambre_single == "" ? string_occupations : chambre_single + ';' + string_occupations;
  162.                         break;
  163.                     case "2":
  164.                         nbre_chambre_double += 1;
  165.                         chambre_double = chambre_double == "" ? string_occupations : chambre_double + ';' + string_occupations;
  166.                         break;
  167.                     case "3":
  168.                         nbre_chambre_triple += 1;
  169.                         chambre_triple = chambre_triple == "" ? string_occupations : chambre_triple + ';' + string_occupations;
  170.                         break;
  171.                     case "4":
  172.                         nbre_chambre_quadruple += 1;
  173.                         chambre_quadruple = chambre_quadruple == "" ? string_occupations : chambre_quadruple + ';' + string_occupations;
  174.                         break;
  175.                 }
  176.                 string_chambres = nbre_chambre_single + ',' + nbre_chambre_double + ',' + nbre_chambre_triple + ',' + nbre_chambre_quadruple;
  177.             });
  178.             string_chambres = string_chambres + '-' + chambre_single + (chambre_single == "" ? '' : ';')  + chambre_double + (chambre_double == "" ? '' : ';') + chambre_triple + (chambre_triple == "" ? '' : ';')+ chambre_quadruple;
  179.             str = string_chambres;
  180.             {% endif %}
  181.             if (str.length > 0) {
  182.                 var arr = str.split('-');
  183.                 var nbr_chambres = arr[0].split(',');
  184.                 var occupants_type = arr[1].split(';');
  185.                 var nbr_ch_single = nbr_chambres[0];
  186.                 var nbr_ch_double = nbr_chambres[1];
  187.                 var nbr_ch_triple = nbr_chambres[2];
  188.                 var nbr_ch_quadruple = nbr_chambres[3];
  189.                 var rooms = [];
  190.                 rooms['single'] = [];
  191.                 rooms['double'] = [];
  192.                 rooms['triple'] = [];
  193.                 rooms['quadruple'] = [];
  194.                 $.each(occupants_type, function (index, value) {
  195.                     switch (value[0].split('!').toString()) {
  196.                         case "1":
  197.                             rooms['single'].push(value);
  198.                             break;
  199.                         case "2":
  200.                             rooms['double'].push(value);
  201.                             break;
  202.                         case "3":
  203.                             rooms['triple'].push(value);
  204.                             break;
  205.                         case "4":
  206.                             rooms['quadruple'].push(value);
  207.                             break;
  208.                     }
  209.                 });
  210.             } else {
  211.                 var nbr_chambres = 1;
  212.                 var occupants_type = ['2!1!1!0'];
  213.                 var nbr_ch_single = 0;
  214.                 var nbr_ch_double = 0;
  215.                 var nbr_ch_triple = 0;
  216.                 var nbr_ch_quadruple = 0;
  217.                 var rooms = [];
  218.                 rooms['single'] = [];
  219.                 rooms['double'] = [];
  220.                 rooms['triple'] = [];
  221.                 rooms['quadruple'] = [];
  222.                 $.each(occupants_type, function (index, value) {
  223.                     switch (value[0].split('!').toString()) {
  224.                         case "1":
  225.                             rooms['single'].push(value);
  226.                             break;
  227.                         case "2":
  228.                             rooms['double'].push(value);
  229.                             break;
  230.                         case "3":
  231.                             rooms['triple'].push(value);
  232.                             break;
  233.                         case "4":
  234.                             rooms['quadruple'].push(value);
  235.                             break;
  236.                     }
  237.                 });
  238.             }
  239.             var occupants_data =
  240.                 '<div class="ligne">' +
  241.                 '<div class="">' +
  242.                 '<div class="col-md-8">' +
  243.                 '<div class="form-group" style="margin-bottom:0;">' +
  244.                 '<label>Nom & Prénom </label>' +
  245.                 '<input type="text" name="data[' + '_TYPE_' + '_nom_' + '_IDX_CH_' + '_IDX_OCC_' + ']" required class="form-control" />' +
  246.                 '</div>' +
  247.                 '</div>' +
  248.                 '<div class="col-md-3">' +
  249.                 '<div class="form-group" style="margin-bottom:0;">' +
  250.                 '<label>Age</label>' +
  251.                 '<select id="mySelect" name="data[' + '_TYPE_' + '_age_' + '_IDX_CH_' + '_IDX_OCC_' + ']" required class="form-control age">' +
  252.                     {% for i in 0..12 %}
  253.                 '<option value="{{ i }}">{{ i }}</option>' +
  254.                     {% endfor %}
  255.                 '<option value="adulte" selected>+12</option>' +
  256.                 '</select>' +
  257.                 '</div>' +
  258.                 '</div>' +
  259.                 '<div class="col-md-1" style="padding: 0;">' +
  260.                 '<a style="box-shadow: none;padding-left: 0;margin-top:20px" href="javascript:void(0)" class="btn btn-block btn-vo">' +
  261.                 '<i class="delete-ligne fa icon-trash" style="font-size: 20px;"></i>' +
  262.                 '</a>' +
  263.                 '</div>' +
  264.                 '</div>' +
  265.                 '<div class="col-md-1">' +
  266.                 '<div class="form-group" style="margin-bottom:0;">' +
  267.                 '<input type="hidden" name="data[' + '_TYPE_' + '_passport_' + '_IDX_CH_' + '_IDX_OCC_' + ']" class="form-control" />' +
  268.                 '</div>' +
  269.                 '</div>' +
  270.                 '<div class="col-md-offset-2 col-md-10">' +
  271.                 '<div class="checkbox">' +
  272.                 '</div>' +
  273.                 '</div>' +
  274.                 '</div>';
  275.             $("#single,#double,#triple,#quadruple").on('change', function () {
  276.                 var occupants = '';
  277.                 var nbrChambre = $(this).val();
  278.                 var name = $(this).data('name');
  279.                 var block = $('.row_billetterie.occupants.' + name);
  280.                 var exist = block.children().length;
  281.                 var ligne = '';
  282.                 var occ = 0;
  283.                 var j = 0;
  284.                 var max_occupant = 0;
  285.                 var maxByType = {
  286.                     single: 1,
  287.                     double: 2,
  288.                     triple: 3,
  289.                     quadruple: 4
  290.                 };
  291.                 if (exist < nbrChambre) {
  292.                     for (i = 1; i <= nbrChambre; i++) {
  293.                         var nombre_occupants = 1;
  294.                         var definition_chambre = [];
  295.                         if (rooms[name].length > 0) {
  296.                             var roomIndex = Math.min(rooms[name].length - 1, i - 1);
  297.                             var _rooms = rooms[name][roomIndex];
  298.                             if (_rooms) {
  299.                                 console.log("rooms", _rooms);
  300.                                 definition_chambre = _rooms.split('!');
  301.                                 nombre_occupants = parseInt(definition_chambre[1], 10) + parseInt(definition_chambre[2], 10) + parseInt(definition_chambre[3], 10);
  302.                             }
  303.                         }
  304.                         max_occupant = maxByType[name] || 1;
  305.                         if (config_omra && definition_chambre.length > 0) {
  306.                             occ = Math.min(nombre_occupants, max_occupant);
  307.                         } else {
  308.                             occ = 1;
  309.                         }
  310.                         if (i > exist) {
  311.                             occupants = '<div class="occ" data-name="' + name + '" data-index="' + block.find('.occ').length + '">';
  312.                             {% if type == 8 %}
  313.                             occupants += '<div class="col-md-12" style="margin-bottom: 5px;font-weight: 700;">' + (i == 1 ? i + '<sup>ère</sup>' : i + '<sup>ème</sup>') + ' occupant ' +'</div>';
  314.                             {% else %}
  315.                             occupants += '<div class="col-md-12" style="margin-bottom: 5px;font-weight: 700;">' + (i == 1 ? i + '<sup>ère</sup>' : i + '<sup>ème</sup>') + ' Chambre ' + name + '</div>';
  316.                             {% endif %}
  317.                             for (j = 1; j <= occ; j++) {
  318.                                 ligne = strReplaceAll(occupants_data, "_IDX_OCC_", "_" + j);
  319.                                 ligne = strReplaceAll(ligne, "_IDX_CH_", i);
  320.                                 ligne = strReplaceAll(ligne, "_TYPE_", name);
  321.                                 occupants += ligne;
  322.                             }
  323.                             occupants += '</div>';
  324.                             block.append(occupants);
  325.                             if (config_omra && definition_chambre.length > 1) {
  326.                                 console.log("definition_chambre", definition_chambre);
  327.                                 var nbAdultes = parseInt(definition_chambre[1], 10);
  328.                                 if (nbAdultes <= nombre_occupants && nbAdultes > 0) {
  329.                                     block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"][data-name="' + name + '"]').children('.ligne').each(function () {
  330.                                         if ($(this).index() <= nbAdultes) {
  331.                                             $(this).find('.age').val("adulte");
  332.                                         }
  333.                                     });
  334.                                 }
  335.                             }
  336.                             var btn_add = '<div style="font-size: 12px;" class="addPersWrap col-md-10"><div class="pull-right"><a class="addPers" href="javascript:void(0)" data-name="' + name + '"><i class="fa fa-user-plus"></i> ajouter ligne</a></div></div>';
  337.                             if (block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"] .addPersWrap').length == 0 && block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"] .ligne').length < max_occupant) {
  338.                                 block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"]').append(btn_add);
  339.                             }
  340.                         }
  341.                     }
  342.                 } else {
  343.                     var toRemove = (exist - nbrChambre);
  344.                     var nmbr = block.children().length;
  345.                     for (var i = nmbr; i >= (nmbr - toRemove); i--)
  346.                         block.children().eq(i).remove();
  347.                 }
  348.                 if (block.children().length > 0) {
  349.                     block.css({'display': 'block'})
  350.                 } else {
  351.                     block.css({'display': 'none'})
  352.                 }
  353.                 $(".row.row_billetterie.occupants .row").each(function () {
  354.                     $(this).find('div:eq(3)').css('display', 'none');
  355.                 });
  356.             });
  357.       
  358.       {% else %}
  359.       $(document).ready(function () {
  360.             var str = '{{ app.request.get('rooms') }}';
  361.             /* '0,0,1,1-4!2!2!0;3!1!2!0' */
  362.             var config_omra = false;
  363.             {% if configAffichage is defined and configAffichage!= null and configAffichage.VOYAGE.ADD_FORM_ROOM_PAX_DETAILS_OMRA =='oui' and type==6 %}
  364.             config_omra  = true;
  365.             var data = JSON.parse('{{ app.request.get('reservation')|json_encode|raw }}');
  366.             var string_chambres = '';
  367.             var nbre_chambre_single = 0;
  368.             var nbre_chambre_double = 0;
  369.             var nbre_chambre_triple = 0;
  370.             var nbre_chambre_quadruple = 0;
  371.             var chambre_single = "";
  372.             var chambre_double = "";
  373.             var chambre_triple = "";
  374.             var chambre_quadruple = "";
  375.             $.each(data.chambre, function (index, value) {
  376.                 var adultes = parseInt(value.adultes);
  377.                 var enfants = parseInt(value.enfants);
  378.                 var bebes = parseInt(value.bebes);
  379.                 var nbre_occupations = adultes + enfants + bebes;
  380.                 var string_occupations = value.type + '!' + adultes + '!' + enfants + '!' + bebes;
  381.                 switch (value.type) {
  382.                     case "1":
  383.                         nbre_chambre_single += 1;
  384.                         chambre_single = chambre_single == "" ? string_occupations : chambre_single + ';' + string_occupations;
  385.                         break;
  386.                     case "2":
  387.                         nbre_chambre_double += 1;
  388.                         chambre_double = chambre_double == "" ? string_occupations : chambre_double + ';' + string_occupations;
  389.                         break;
  390.                     case "3":
  391.                         nbre_chambre_triple += 1;
  392.                         chambre_triple = chambre_triple == "" ? string_occupations : chambre_triple + ';' + string_occupations;
  393.                         break;
  394.                     case "4":
  395.                         nbre_chambre_quadruple += 1;
  396.                         chambre_quadruple = chambre_quadruple == "" ? string_occupations : chambre_quadruple + ';' + string_occupations;
  397.                         break;
  398.                 }
  399.                 string_chambres = nbre_chambre_single + ',' + nbre_chambre_double + ',' + nbre_chambre_triple + ',' + nbre_chambre_quadruple;
  400.             });
  401.             string_chambres = string_chambres + '-' + chambre_single + (chambre_single == "" ? '' : ';')  + chambre_double + (chambre_double == "" ? '' : ';') + chambre_triple + (chambre_triple == "" ? '' : ';')+ chambre_quadruple;
  402.             str = string_chambres;
  403.             {% endif %}
  404.             if (str.length > 0) {
  405.                 var arr = str.split('-');
  406.                 var nbr_chambres = arr[0].split(',');
  407.                 var occupants_type = arr[1].split(';');
  408.                 var nbr_ch_single = nbr_chambres[0];
  409.                 var nbr_ch_double = nbr_chambres[1];
  410.                 var nbr_ch_triple = nbr_chambres[2];
  411.                 var nbr_ch_quadruple = nbr_chambres[3];
  412.                 var rooms = [];
  413.                 rooms['single'] = [];
  414.                 rooms['double'] = [];
  415.                 rooms['triple'] = [];
  416.                 rooms['quadruple'] = [];
  417.                 $.each(occupants_type, function (index, value) {
  418.                     switch (value[0].split('!').toString()) {
  419.                         case "1":
  420.                             rooms['single'].push(value);
  421.                             break;
  422.                         case "2":
  423.                             rooms['double'].push(value);
  424.                             break;
  425.                         case "3":
  426.                             rooms['triple'].push(value);
  427.                             break;
  428.                         case "4":
  429.                             rooms['quadruple'].push(value);
  430.                             break;
  431.                     }
  432.                 });
  433.             } else {
  434.                 var nbr_chambres = 1;
  435.                 var occupants_type = ['2!1!1!0'];
  436.                 var nbr_ch_single = 0;
  437.                 var nbr_ch_double = 0;
  438.                 var nbr_ch_triple = 0;
  439.                 var nbr_ch_quadruple = 0;
  440.                 var rooms = [];
  441.                 rooms['single'] = [];
  442.                 rooms['double'] = [];
  443.                 rooms['triple'] = [];
  444.                 rooms['quadruple'] = [];
  445.                 $.each(occupants_type, function (index, value) {
  446.                     switch (value[0].split('!').toString()) {
  447.                         case "1":
  448.                             rooms['single'].push(value);
  449.                             break;
  450.                         case "2":
  451.                             rooms['double'].push(value);
  452.                             break;
  453.                         case "3":
  454.                             rooms['triple'].push(value);
  455.                             break;
  456.                         case "4":
  457.                             rooms['quadruple'].push(value);
  458.                             break;
  459.                     }
  460.                 });
  461.             }
  462.             var occupants_data =
  463.                 '<div class="ligne">' +
  464.                 '<div class="">' +
  465.                 '<div class="col-md-8">' +
  466.                 '<div class="form-group" style="margin-bottom:0;">' +
  467.                 '<label>Nom & Prénom </label>' +
  468.                 '<input type="text" name="data[' + '_TYPE_' + '_nom_' + '_IDX_CH_' + '_IDX_OCC_' + ']" required class="form-control" />' +
  469.                 '</div>' +
  470.                 '</div>' +
  471.                 '<div class="col-md-3">' +
  472.                 '<div class="form-group" style="margin-bottom:0;">' +
  473.                 '<label>Age</label>' +
  474.                 '<select id="mySelect" name="data[' + '_TYPE_' + '_age_' + '_IDX_CH_' + '_IDX_OCC_' + ']" required class="form-control age">' +
  475.                     {% for i in 0..12 %}
  476.                 '<option value="{{ i }}">{{ i }}</option>' +
  477.                     {% endfor %}
  478.                 '<option value="adulte" selected>+12</option>' +
  479.                 '</select>' +
  480.                 '</div>' +
  481.                 '</div>' +
  482.                 '<div class="col-md-1" style="padding: 0;">' +
  483.                 '<a style="box-shadow: none;padding-left: 0;margin-top:20px" href="javascript:void(0)" class="btn btn-block btn-vo">' +
  484.                 '<i class="delete-ligne fa icon-trash" style="font-size: 20px;"></i>' +
  485.                 '</a>' +
  486.                 '</div>' +
  487.                 '</div>' +
  488.                 '<div class="col-md-1">' +
  489.                 '<div class="form-group" style="margin-bottom:0;">' +
  490.                 '<input type="hidden" name="data[' + '_TYPE_' + '_passport_' + '_IDX_CH_' + '_IDX_OCC_' + ']" class="form-control" />' +
  491.                 '</div>' +
  492.                 '</div>' +
  493.                 '<div class="col-md-offset-2 col-md-10">' +
  494.                 '<div class="checkbox">' +
  495.                 '</div>' +
  496.                 '</div>' +
  497.                 '</div>';
  498.             $("#single,#double,#triple,#quadruple").on('change', function () {
  499.                 var occupants = '';
  500.                 var nbrChambre = $(this).val();
  501.                 var name = $(this).data('name');
  502.                 var block = $('.row_billetterie.occupants.' + name);
  503.                 var exist = block.children().length;
  504.                 var ligne = '';
  505.                 var occ = 0;
  506.                 var j = 0;
  507.                 var max_occupant = 0;
  508.                 if (exist < nbrChambre) {
  509.                     for (i = 1; i <= nbrChambre; i++) {
  510.                         var nombre_occupants = 1;
  511.                         var definition_chambre = [];
  512.                         if (rooms[name].length > 0) {
  513.                             console.log("rooms",rooms[name][i - 1]);
  514.                             var _rooms = rooms[name][i - 1];
  515.                             if (config_omra)
  516.                                 definition_chambre = _rooms.split('!');
  517.                             else
  518.                                 definition_chambre = rooms[name][0].split('!');
  519.                             nombre_occupants = parseInt(definition_chambre[1], 10) + parseInt(definition_chambre[2], 10) + parseInt(definition_chambre[3], 10);
  520.                         }
  521.                         if (i > exist) {
  522.                             occ = nombre_occupants;
  523.                             if (name == 'single') {
  524.                                 occ = 1;
  525.                                 max_occupant = 1;
  526.                                 ligne
  527.                             }
  528.                             if (name == 'double') {
  529.                                if (!config_omra)
  530.                                    occ = 2;
  531.                                 max_occupant = 2;
  532.                             }
  533.                             if (name == 'triple') {
  534.                                 if (!config_omra)
  535.                                     occ = 3;
  536.                                 max_occupant = 3;
  537.                             }
  538.                             if (name == 'quadruple') {
  539.                                 if (!config_omra)
  540.                                     occ = 4;
  541.                                 max_occupant = 4;
  542.                             }
  543.                             occupants = '<div class="occ" data-name="' + name + '" data-index="' + block.find('.occ').length + '">';
  544.                             {% if type == 8 %}
  545.                             occupants += '<div class="col-md-12" style="margin-bottom: 5px;font-weight: 700;">' + (i == 1 ? i + '<sup>ère</sup>' : i + '<sup>ème</sup>') + ' occupant ' +'</div>';
  546.                             {% else %}
  547.                             occupants += '<div class="col-md-12" style="margin-bottom: 5px;font-weight: 700;">' + (i == 1 ? i + '<sup>ère</sup>' : i + '<sup>ème</sup>') + ' Chambre ' + name + '</div>';
  548.                             {% endif %}
  549.                             for (j = 1; j <= occ; j++) {
  550.                                 ligne = strReplaceAll(occupants_data, "_IDX_OCC_", "_" + j);
  551.                                 ligne = strReplaceAll(ligne, "_IDX_CH_", i);
  552.                                 ligne = strReplaceAll(ligne, "_TYPE_", name);
  553.                                 occupants += ligne;
  554.                             }
  555.                             occupants += '</div>';
  556.                             block.append(occupants);
  557. //                            for(x=0 ; x < block.children().length ; x++){
  558.                             console.log("definition_chambre",definition_chambre);
  559.                             if (definition_chambre.length > 1) {
  560.                                 if (definition_chambre[1] <= nombre_occupants && definition_chambre[1] > 0) {
  561.                                     block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"][data-name="' + name + '"]').children('.ligne').each(function () {
  562.                                         if ($(this).index() <= definition_chambre[1]) {
  563.                                             $(this).find('.age').val("adulte");
  564.                                         }
  565.                                     });
  566.                                 }
  567.                                 // if ((definition_chambre[2] <= (nombre_occupants - definition_chambre[1])) && (nombre_occupants - definition_chambre[1]) > 0 && definition_chambre[2] > 0) {
  568.                                 //     block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"][data-name="' + name + '"]').children('.ligne').each(function () {
  569.                                 //         if ($(this).index() <= (nombre_occupants - definition_chambre[3]) && $(this).index() > definition_chambre[1]) {
  570.                                 //             $(this).find('.age').val(6);
  571.                                 //         }
  572.                                 //
  573.                                 //     });
  574.                                 // }
  575.                                 // if (definition_chambre[3] <= (nombre_occupants - definition_chambre[2] - definition_chambre[1]) && ((nombre_occupants - definition_chambre[2] - definition_chambre[1]) > 0) && definition_chambre[3] > 0) {
  576.                                 //     block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"][data-name="' + name + '"]').children('.ligne').each(function () {
  577.                                 //         if ($(this).index() <= (nombre_occupants) && $(this).index() > (definition_chambre[1] - (-definition_chambre[2]))) {
  578.                                 //             $(this).find('.age').val(2);
  579.                                 //         }
  580.                                 //
  581.                                 //     });
  582.                                 // }
  583.                             }
  584. //  }
  585.                             btn_add = '<div style="font-size: 12px;" class="addPersWrap col-md-10"><div class="pull-right"><a class="addPers" href="javascript:void(0)" data-name="' + name + '"><i class="fa fa-user-plus"></i> ajouter ligne</a></div></div>';
  586.                             if (block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"] .addPersWrap').length == 0 && block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"] .ligne').length < max_occupant) {
  587.                                 block.find('.occ[data-index="' + parseInt(i - 1, 10) + '"]').append(btn_add);
  588.                             }
  589.                         }
  590.                     }
  591.                 } else {
  592.                     var toRemove = (exist - nbrChambre);
  593.                     var nmbr = block.children().length;
  594.                     for (var i = nmbr; i >= (nmbr - toRemove); i--)
  595.                         block.children().eq(i).remove();
  596.                 }
  597.                 if (block.children().length > 0) {
  598.                     block.css({'display': 'block'})
  599.                 } else {
  600.                     block.css({'display': 'none'})
  601.                 }
  602.                 $(".row.row_billetterie.occupants .row").each(function () {
  603.                     $(this).find('div:eq(3)').css('display', 'none');
  604.                 });
  605.             });
  606. {% endif %}
  607.             $(document).on('click', '.delete-ligne', function () {
  608.                 calcTotal()
  609.                 if ($(this).parents('.ligne').siblings('.ligne').length > 0) {
  610.                     name = $(this).parents('.occ').data('name');
  611.                     occIndex = $(this).parents('.occ').index() + 1;
  612.                     inputSlector = $('.' + name + ' .occ');
  613.                     btn_add = '<div style="font-size: 12px;" class="addPersWrap col-md-10"><div class="pull-right"><a class="addPers" href="javascript:void(0)" data-name="' + name + '"><i class="fa fa-user-plus"></i> ajouter ligne</a></div></div>';
  614.                     toDelete = $(this).parents('.ligne:not(.adulte)');
  615.                     if ($(this).parents('.occ').find('.addPers').length == 0) {
  616.                         toDelete.parents('.' + name + ' .occ').append(btn_add);
  617.                     }
  618.                     toDelete.remove();
  619.                     inputSlector.find('.ligne').find("select[name^='" + name + '_age_' + occIndex + "']").each(function (idx) {
  620.                         $(this).attr('name', name + '_age_' + occIndex + '_' + parseInt(idx + 1, 10));
  621.                     });
  622.                     inputSlector.find('.ligne').find("input[name^='" + name + '_nom_' + occIndex + "']").each(function (idx) {
  623.                         $(this).attr('name', name + '_nom_' + occIndex + '_' + parseInt(idx + 1, 10));
  624.                     });
  625.                     inputSlector.find('.ligne').find("input[name^='" + name + '_passport_' + occIndex + "']").each(function (idx) {
  626.                         $(this).attr('name', name + '_passport_' + occIndex + '_' + parseInt(idx + 1, 10));
  627.                     });
  628.                     inputSlector.find('.ligne').find("input[name^='" + name + '_typevisas_' + occIndex + "']").each(function (idx) {
  629.                         $(this).attr('name', name + '_typevisas_' + occIndex + '_' + parseInt(idx + 1, 10));
  630.                     });
  631.                 }
  632.             });
  633.             $(document).on('click', '.addPers', function () {
  634.                 calcTotal()
  635.                 occlen = $(this).parents('.occ').children('.ligne').length;
  636.                 name = $(this).parents('.occ').data('name');
  637.                 if (name == 'quadruple' && occlen < 4 || name == 'triple' && occlen < 3 || name == 'double' && occlen < 2 || name == 'single' && occlen < 1) {
  638.                     occIndex = $(this).parents('.occ').index() + 1;
  639.                     ligne = strReplaceAll(occupants_data, "_IDX_OCC_", "_" + parseInt($(this).parents('.occ').find('.ligne').length + 1, 10));
  640.                     ligne = strReplaceAll(ligne, "_IDX_CH_", occIndex);
  641.                     ligne = strReplaceAll(ligne, "_TYPE_", $(this).data('name'));
  642.                     $(ligne).insertAfter($(this).parents('.addPersWrap').siblings('.ligne').last());
  643.                     $(".row.row_billetterie.occupants .row").each(function () {
  644.                         $(this).find('div:eq(3)').css('display', 'none');
  645.                     });
  646.                     occlen = $(this).parents('.occ').children('.ligne').length;
  647.                     if (name == 'quadruple' && occlen == 4 || name == 'triple' && occlen == 3 || name == 'double' && occlen == 2 || name == 'single' && occlen == 1) {
  648.                         $(this).parents('.addPersWrap').remove();
  649.                     }
  650.                 }
  651.             });
  652.             if (nbr_ch_single > 0) {
  653.                 $('#single').val(nbr_ch_single);
  654.                 $('#single').trigger('change');
  655.             }
  656.             if (nbr_ch_double > 0) {
  657.                 $('#double').val(nbr_ch_double);
  658.                 $('#double').trigger('change');
  659.             }
  660.             if (nbr_ch_triple > 0) {
  661.                 $('#triple').val(nbr_ch_triple);
  662.                 $('#triple').trigger('change');
  663.             }
  664.             if (nbr_ch_quadruple > 0) {
  665.                 $('#quadruple').val(nbr_ch_quadruple);
  666.                 $('#quadruple').trigger('change');
  667.             }
  668.             config_omra = false;
  669.         })
  670.         function popup() {
  671.             {% if details.type==3 or details.type==4 %}
  672.             window.open("{{ path('condition_vente',{produit:'circuit'}) }}", "_blank", "toolbar=yes, scrollbars=yes, resizable=yes, top=500, left=500, width=600, height=600");
  673.             {% elseif details.type==6 or details.type==7 %}
  674.             window.open("{{ path('condition_vente',{produit:'omra'}) }}", "_blank", "toolbar=yes, scrollbars=yes, resizable=yes, top=500, left=500, width=600, height=600");
  675.             {% else %}
  676.             window.open("{{ path('condition_vente',{produit:'vo'}) }}", "_blank", "toolbar=yes, scrollbars=yes, resizable=yes, top=500, left=500, width=600, height=600");
  677.             {% endif %}
  678.         }
  679.         $("#addVisa").on('click', function () {
  680.             //var name =  $(this).attr('name')
  681.             console.log("name"  , name)
  682.             var nbrLigne = $("#visas").children().length;
  683.             $("#visas").append("<div class='col-md-12'><input type='file' name='fichier[]' required class='form-control' style='border: 0;color: #213542;'></div>");
  684.             /*if ($("#visas").children().length > 0) {
  685.                 $("#visas").parent().css({opacity: 1});
  686.             } else {
  687.                 $("#visas").parent().css({opacity: 0});
  688.             }*/
  689.         });
  690.         $("#removeVisa").on('click', function () {
  691.             var nbrLigne = $("#visas").children().length;
  692.             $("#visas").children().eq(nbrLigne - 1).remove();
  693.             /*if ($("#visas").children().length > 0) {
  694.                 $("#visas").parent().css({opacity: 1});
  695.             } else {
  696.                 $("#visas").parent().css({opacity: 0});
  697.             }*/
  698.         });
  699.         $("#addLigne").trigger('click');
  700.         $(document).ready(function () {
  701.             var pack_select = $('.pack-select');
  702.             var periode_select = $('.periode-select');
  703.             var chambre_select = $('.chambre-select');
  704.             pack_select.on('change', function () {
  705.                 var idPack = $(this).val();
  706.                 var target = $('#pack_' + idPack);
  707.                 target.show().siblings(".periode").hide();
  708.                 $("#idPack").val(target.find('.periode-select').val());
  709.             });
  710.             periode_select.on('change', function () {
  711.                 $("#idPack").val($(this).val());
  712.             });
  713.             pack_select.trigger('change');
  714.         });
  715.     </script>
  716.     <script>
  717.         $(document).on('click', '.pointvente', function () {
  718.             $('input:not(:checked)').parent().removeClass("pt-vente-select");
  719.             $('input:checked').parent().addClass("pt-vente-select");
  720.         });
  721.         /*add with HtMl syntax in custom projects Please do not delete it CHD*/
  722.         const article = document.querySelector("#content");
  723.         const button = document.querySelector("#read-more");
  724.         button.addEventListener("click", readMore);
  725.         function readMore() {
  726.             if (article.className == "open") {
  727.                 // Read less
  728.                 article.className = "";
  729.                 button.innerHTML = "Afficher plus";
  730.             }
  731.             else
  732.             {
  733.                 article.className = "open";
  734.                 button.className="position-relative"
  735.                 button.innerHTML = "Afficher moins";
  736.             }
  737.         }
  738.     </script>
  739. {% endblock %}