templates/souscription/indexVoyage.html.twig line 1

  1. {% extends 'base.html.twig' %}
  2. {% block title %}{% endblock %}
  3. {% block body %}
  4.     <!-- Customized Bootstrap Stylesheet -->
  5.     <link href="{{asset('assets/css/form/formVoyage.css')}}" rel="stylesheet"/>
  6.     <script src="https://common.olemiss.edu/_js/sweet-alert/sweet-alert.min.js"></script>
  7.     <link
  8.     rel="stylesheet" type="text/css" href="https://common.olemiss.edu/_js/sweet-alert/sweet-alert.css">
  9.     <!-- google font -->
  10.     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js"></script>
  11.     <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet"/>
  12.     <link href="/assets/profile/plugins/global/plugins.bundle.css" rel="stylesheet" type="text/css"/>
  13.     <script src="/assets/profile/js/scripts.bundle.js"></script>
  14.         {% for flashMessage in app.session.flashbag.get('noTarif') %}
  15.         <script>
  16.             window.onload = function () {
  17.             Swal.fire({
  18.             text:"{{ flashMessage }}",
  19.             icon: "error",
  20.             buttonsStyling: false,
  21.             confirmButtonText: "Ok",
  22.               background: '#f8f9fa', // Couleur d'arrière-plan personnalisée
  23.             customClass: {
  24.             confirmButton: "btn btn-danger"
  25.             }
  26.             });
  27.             };
  28.         </script>
  29.     {% endfor %}
  30.     {% for flashMessage in app.session.flashbag.get('attentePaiement') %}
  31.             <script>
  32.             window.onload = function () {
  33.             Swal.fire({
  34.             text:"{{ flashMessage }}",
  35.             icon: "error",
  36.             buttonsStyling: false,
  37.             confirmButtonText: "Ok",
  38.               background: '#f8f9fa', // Couleur d'arrière-plan personnalisée
  39.             customClass: {
  40.             confirmButton: "btn btn-danger"
  41.             }
  42.             });
  43.             };
  44.         </script>
  45.     {% endfor %}
  46.     {% for flashMessage in app.session.flashbag.get('validiter') %}
  47.         <script>
  48.             window.onload = function () {
  49.             Swal.fire({
  50.             text:"{{ flashMessage }}",
  51.             icon: "error",
  52.             buttonsStyling: false,
  53.             confirmButtonText: "Ok",
  54.               background: '#f8f9fa', // Couleur d'arrière-plan personnalisée
  55.             customClass: {
  56.             confirmButton: "btn btn-danger"
  57.             }
  58.             });
  59.             };
  60.         </script>
  61.     {% endfor %}
  62.     
  63.     <style>
  64. .custom-img {
  65.   width: 100%; /* Remplir toute la largeur disponible */
  66.   height: 40vh; /* Remplir la moitié de la hauteur de la fenêtre du navigateur */
  67.   object-fit: cover; /* L'image couvre la zone sans déformation */
  68. }
  69. </style>
  70. <!-- Carousel Start -->
  71. <div class="container-fluid p-0 mb-0 wow fadeIn" data-wow-delay="0.1s">
  72.       <div id="header-carousel" class="carousel slide" data-bs-ride="carousel">
  73.         <div class="carousel-inner">
  74.           <div class="carousel-item active">
  75.             {# <img class="h-50 w-80" src="{{asset('assets/img/IMAGE4.jpg')}}" alt="Image" /> #}
  76.             <img class="custom-img" src="{{asset('assets/img/IMAGE4.jpg')}}" alt="Image" />
  77.             <div class="absolute-div">
  78.               <div class="carousel-caption">
  79.                           <!-- Service Start -->
  80.     <div class="container-xl py-5 mb-5">
  81.       <div class="container">
  82.         <div class="text-center mx-auto">
  83.           <h1 class="display-5 mb-0 text-white " id="heading">
  84.             Souscription assurance voyage
  85.           </h1>
  86.         </div>
  87.        
  88.       </div>
  89.     </div>
  90.     <!-- Service End -->
  91.               </div>
  92.             </div>
  93.           </div>
  94.         </div>
  95.       </div>
  96.     </div>
  97.     <!-- Carousel End -->
  98.     
  99.     <!--begin::Wrapper container-->
  100.     <div
  101.         class="app-container container-xxl d-flex">
  102.         <!--begin::Main-->
  103.         <div
  104.             class="app-main flex-column flex-row-fluid" id="kt_app_main">
  105.             <!--begin::Content wrapper-->
  106.             <div
  107.                 class="d-flex flex-column flex-column-fluid">
  108.                 <!--begin::Content-->
  109.                 <div
  110.                     id="kt_app_content" class="app-content">
  111.                     <!--begin::About card-->
  112.                     <div
  113.                         class="card">
  114.                         <!--begin::Body-->
  115.                         <div
  116.                             class="card-body p-lg-30">
  117.                             <!--begin::About-->
  118.                             <div
  119.                                 class="mb-18">
  120.                                 <!--begin::Wrapper-->
  121.                                 <div
  122.                                     class="mb-10">
  123.                                     <!--begin::Overlay-->
  124.                                     {# <div
  125.                                         class="overlay">
  126.                                         <!--begin::Image-->
  127.                                         <img
  128.                                         class="w-100 card-rounded" src="{{asset('assets/img/img4.jpg')}}" height="50%" alt=""/>
  129.                                     <!--end::Image-->
  130.                                     </div> #}
  131.                                     <div class="container-fluid">
  132.                                         <div class="row justify-content-center">
  133.                                             <div class="col-12 col-sm-12 col-md-12 col-lg-10 col-xxl-9 text-center p-0 mt-3 mb-2">
  134.                                                 <div class="card px-3 py-3 pb-0 mt-3 mb-3 border border-light rounded">
  135.                                                     <h2 id="heading">Commandez votre assurance voyage en quelques minutes</h2>
  136.                                                     <p>Veuillez remplir tous les champs du formulaire de souscription</p>
  137.                                                     <form enctype="multipart/form-data"
  138.                                                         id="msform" method="POST" action="{{path('app_souscription_Voyage')}}">
  139.                                                         <!-- progressbar -->
  140.                                                         <ul id="progressbar">
  141.                                                             <li class="active" id="personal">
  142.                                                                 <strong class="d-none d-md-block">Informations personnelles</strong>
  143.                                                             </li>
  144.                                                             <li id="plane">
  145.                                                                 <strong class="d-none d-md-block">Informations sur le voyage</strong>
  146.                                                             </li>
  147.                                                         </ul>
  148.                                                         <div class="progress">
  149.                                                             <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuemin="0" aria-valuemax="100"></div>
  150.                                                         </div>
  151.                                                         <br>
  152.                                                         <!-- fieldsets -->
  153.                                                         <fieldset>
  154.                                                             <div class="form-card">
  155.                                                                 <div class="row">
  156.                                                                     <div class="col-6">
  157.                                                                         <h2 class="fs-title"></h2>
  158.                                                                     </div>
  159.                                                                     <div class="col-6">
  160.                                                                         <h2 class="steps">Etape 1 - 2</h2>
  161.                                                                     </div>
  162.                                                                 </div>
  163.                                                                 <div class="row">
  164.                                                                     <div class="col-12 col-md-4">
  165.                                                                         <label class="fieldlabels">Nom: <span class="text-danger">*</span></label>
  166.                                                                         <input type="text" name="nom" placeholder="Votre nom" value="{% if app.session.get('nom') != null %} {{app.session.get('nom')}} {% endif%}"/>
  167.                                                                     </div>
  168.                                                                     <div class="col-12 col-md-4">
  169.                                                                         <label class="fieldlabels">Prénom: <span class="text-danger">*</span></label>
  170.                                                                         <input type="text" name="prenom" placeholder="Votre prénom" value="{% if app.session.get('prenom') != null %} {{app.session.get('prenom')}} {% endif%}"/>
  171.                                                                     </div>
  172.                                                                     <div class="col-12 col-md-4">
  173.                                                                         <label class="fieldlabels">Téléphone: <span class="text-danger">*</span></label>
  174.                                                                         <input type="text" maxlength="8" id="telephone" name="phone" placeholder="N° téléphone" onkeypress="chiffres(event)" value="{% if app.session.get('telephone') != null %} {{app.session.get('telephone')}} {% endif%}">
  175.                                                                     </div>
  176.                                                                     <div class="col-12 col-md-4">
  177.                                                                         <label class="fieldlabels">Email:
  178.                                                                         </label>
  179.                                                                         <input type="text" name="email" placeholder="Votre email" value="{% if app.session.get('email') != null %} {{app.session.get('email')}} {% endif%}"/>
  180.                                                                     </div>
  181.                                                                     <div class="col-12 col-md-4">
  182.                                                                         <label class="fieldlabels">N° du Passeport: <span class="text-danger">*</span></label>
  183.                                                                         <input type="text" name="reference" placeholder="N° de votre passeport" value="{% if app.session.get('numPasseport') != null %} {{app.session.get('numPasseport')}} {% endif%}"/>
  184.                                                                     </div>
  185.                                                                     <div class="col-12 col-md-4">
  186.                                                                         <label class="fieldlabels">Date d'expiration du passeport: <span class="text-danger">*</span></label>
  187.                                                                         <input type="date" name="expiration" min="{{today}}" value="{% if app.session.get('dateExp') != null %} {{app.session.get('dateExp')}} {% endif%}">
  188.                                                                     </div>
  189.                                                                     <div class="col-12 col-md-4">
  190.                                                                         <label class="fieldlabels">Photo du Passeport: </label>
  191.                                                                         <input type="file"  accept="image/*" class="form-control" id="file" placeholder="Importer la Photo du passeport" name="file" />
  192.                                                                     </div>
  193.                                                                 </div>
  194.                                                             </div>
  195.                                                             <input type="button" name="next" class="next action-button" value="Suivant"/>
  196.                                                         </fieldset>
  197.                                                         <fieldset>
  198.                                                             <div class="form-card">
  199.                                                                 <div class="row">
  200.                                                                     <div class="col-6">
  201.                                                                         <h2 class="fs-title"></h2>
  202.                                                                     </div>
  203.                                                                     <div class="col-6">
  204.                                                                         <h2 class="steps">Etape 2 - 2</h2>
  205.                                                                     </div>
  206.                                                                 </div>
  207.                                                                 <div class="row">
  208.                                                                     <div class="col-12 col-md-4">
  209.                                                                         <label class="fieldlabels">Zone: <span class="text-danger">*</span></label>
  210.                                                                         <select id="zone" name="zone" onchange="ListeVille();">
  211.                                                                             <option selected>Selectionnez la zone</option>
  212.                                                                             {% for liste in zoneVoyage %}
  213.                                                                                 <option value="{{liste.id}}">{{liste.libelle}}</option>
  214.                                                                             {% endfor %}
  215.                                                                         </select>
  216.                                                                     </div>
  217.                                                                     <div class="col-12 col-md-4">
  218.                                                                         <label class="fieldlabels">Date de départ: <span class="text-danger">*</span></label>
  219.                                                                         <input type="date" name="dateDepart" value="{% if app.session.get('dateDep') != null %} {{app.session.get('dateDep')}} {% endif%}"/>
  220.                                                                     </div>
  221.                                                                     <div class="col-12 col-md-4">
  222.                                                                         <label class="fieldlabels">Nombre de jours: <span class="text-danger">*</span></label>
  223.                                                                         <input type="number" name="nbrJour" placeholder="Nombre de jours de votre séjour"/>
  224.                                                                     </div>
  225.                                                                     <div class="col-12 col-md-4">
  226.                                                                         <label class="fieldlabels">Destination: <span class="text-danger">*</span></label>
  227.                                                                         <select id="destination" name="destination"></select>
  228.                                                                     </div>
  229.                                                                     <div class="col-12 col-md-4">
  230.                                                                         <label class="fieldlabels">Motif du voyage:</label>
  231.                                                                         <input type="text" name="motifVoya" placeholder="Motif du voyage" value="{% if app.session.get('motif') != null %} {{app.session.get('motif')}} {% endif%}"/>
  232.                                                                     </div>
  233.                                                                     <div class="col-12 col-md-4">
  234.                                                                         <label class="fieldlabels">Compagnie de transport:</label>
  235.                                                                         <input type="text" name="compagnieTrans" placeholder="Compagnie de transport" value="{% if app.session.get('compagnie') != null %} {{app.session.get('compagnie')}} {% endif%}"/>
  236.                                                                     </div>
  237.                                                                 </div>
  238.                                                                 <div class="row">
  239.                                                                     <div class="col-12 col-md-4">
  240.                                                                         <label class="fieldlabels">Adresse de séjour:</label>
  241.                                                                         <input type="text" name="addressSejour" placeholder="Saisissez l'adresse de séjour" value="{% if app.session.get('address') != null %} {{app.session.get('address')}} {% endif%}"/>
  242.                                                                     </div>
  243.                                                                 </div>
  244.                                                             </div>
  245.                                                             <input type="button" class="valider" value="Valider " onclick="verif(this);"/>
  246.                                                             <input type="button" name="previous" class="previous action-button-previous" value="Précédent"/>
  247.                                                         </fieldset>
  248.                                                     </form>
  249.                                                 </div>
  250.                                             </div>
  251.                                         </div>
  252.                                     </div>
  253.                                     <!--end::Overlay-->
  254.                                 </div>
  255.                                 <!--end::Wrapper-->
  256.                             </div>
  257.                             <!--end::About-->
  258.                         </div>
  259.                         <!--end::Body-->
  260.                     </div>
  261.                     <!--end::About card-->
  262.                 </div>
  263.                 <!--end::Content-->
  264.             </div>
  265.             <!--end::Content wrapper-->
  266.         </div>
  267.         <!--end::Main-->
  268.     </div>
  269.     <!--end::Wrapper container-->
  270.     <script>
  271.         jQuery.noConflict()(function ($) {
  272. $(document).ready(function () {
  273. var current_fs,
  274. next_fs,
  275. previous_fs; // fieldsets
  276. var opacity;
  277. var current = 1;
  278. var steps = $("fieldset").length;
  279. setProgressBar(current);
  280. $(".next").click(function () {
  281. current_fs = $(this).parent();
  282. next_fs = $(this).parent().next();
  283. // Add Class Active
  284. $("#progressbar li").eq($("fieldset").index(next_fs)).addClass("active");
  285. // show the next fieldset
  286. next_fs.show();
  287. // hide the current fieldset with style
  288. current_fs.animate({
  289. opacity: 0
  290. }, {
  291. step: function (now) { // for making fielset appear animation
  292. opacity = 1 - now;
  293. current_fs.css({'display': 'none', 'position': 'relative'});
  294. next_fs.css({'opacity': opacity});
  295. },
  296. duration: 500
  297. });
  298. setProgressBar(++ current);
  299. });
  300. $(".previous").click(function () {
  301. current_fs = $(this).parent();
  302. previous_fs = $(this).parent().prev();
  303. // Remove class active
  304. $("#progressbar li").eq($("fieldset").index(current_fs)).removeClass("active");
  305. // show the previous fieldset
  306. previous_fs.show();
  307. // hide the current fieldset with style
  308. current_fs.animate({
  309. opacity: 0
  310. }, {
  311. step: function (now) { // for making fielset appear animation
  312. opacity = 1 - now;
  313. current_fs.css({'display': 'none', 'position': 'relative'});
  314. previous_fs.css({'opacity': opacity});
  315. },
  316. duration: 500
  317. });
  318. setProgressBar(-- current);
  319. });
  320. function setProgressBar(curStep) {
  321. var percent = parseFloat(100 / steps) * curStep;
  322. percent = percent.toFixed();
  323. $(".progress-bar").css("width", percent + "%")
  324. }
  325. $(".submit").click(function () {
  326. return false;
  327. })
  328. });
  329. });
  330. function verif(bouton) {
  331. form = bouton.form;
  332. if ((form.nom.value == "")) {
  333.         event.preventDefault(); // Empêche la soumission du formulaire
  334.     Swal.fire({
  335.         icon: 'warning',
  336.         title: 'Attention',
  337.         text: 'Veuillez remplir le champ nom au niveau des informations personnelles.',
  338.         confirmButtonColor: '#3085d6',
  339.         confirmButtonText: 'OK',
  340.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  341.     });
  342. return false;
  343. } else {
  344. if ((form.prenom.value == "")) {
  345.             event.preventDefault(); // Empêche la soumission du formulaire
  346.     Swal.fire({
  347.         icon: 'warning',
  348.         title: 'Attention',
  349.         text: 'Veuillez remplir le champ prénom au niveau des informations personnelles.',
  350.         confirmButtonColor: '#3085d6',
  351.         confirmButtonText: 'OK',
  352.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  353.     });
  354. return false;
  355. } else {
  356. if ((form.phone.value == "")) {
  357.                 event.preventDefault(); // Empêche la soumission du formulaire
  358.     Swal.fire({
  359.         icon: 'warning',
  360.         title: 'Attention',
  361.         text: 'Veuillez remplir le champ téléphone au niveau des informations personnelles.',
  362.         confirmButtonColor: '#3085d6',
  363.         confirmButtonText: 'OK',
  364.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  365.     });
  366. return false;
  367. } else {
  368. if ((form.reference.value == "")) {
  369.                 event.preventDefault(); // Empêche la soumission du formulaire
  370.     Swal.fire({
  371.         icon: 'warning',
  372.         title: 'Attention',
  373.         text: 'Veuillez remplir le n° Passeport au niveau des informations personnelles.',
  374.         confirmButtonColor: '#3085d6',
  375.         confirmButtonText: 'OK',
  376.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  377.     });
  378. return false;
  379. } else {
  380. if ((form.expiration.value == "")) {
  381.                 event.preventDefault(); // Empêche la soumission du formulaire
  382.     Swal.fire({
  383.         icon: 'warning',
  384.         title: 'Attention',
  385.         text: 'Veuillez remplir la date d expiration du passeport au niveau des informations personnelles.',
  386.         confirmButtonColor: '#3085d6',
  387.         confirmButtonText: 'OK',
  388.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  389.     });
  390. return false;
  391. } else {
  392. if ((form.expiration.value == "")) {
  393.                 event.preventDefault(); // Empêche la soumission du formulaire
  394.     Swal.fire({
  395.         icon: 'warning',
  396.         title: 'Attention',
  397.         text: 'Veuillez remplir la date d expiration du passeport au niveau des informations personnelles.',
  398.         confirmButtonColor: '#3085d6',
  399.         confirmButtonText: 'OK',
  400.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  401.     });
  402. return false;
  403. } else {
  404. if ((document.getElementById('zone').value == "Selectionnez la zone")) {
  405.                 event.preventDefault(); // Empêche la soumission du formulaire
  406.     Swal.fire({
  407.         icon: 'warning',
  408.         title: 'Attention',
  409.         text: 'Veuillez selectionnez la zone au niveau des informations sur le voyage.',
  410.         confirmButtonColor: '#3085d6',
  411.         confirmButtonText: 'OK',
  412.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  413.     });
  414. return false;
  415. } else {
  416. if ((form.dateDepart.value == "")) {
  417.                 event.preventDefault(); // Empêche la soumission du formulaire
  418.     Swal.fire({
  419.         icon: 'warning',
  420.         title: 'Attention',
  421.         text: 'Veuillez selectionnez la date de départ au niveau des informations sur le voyage.',
  422.         confirmButtonColor: '#3085d6',
  423.         confirmButtonText: 'OK',
  424.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  425.     });
  426. return false;
  427. } else {
  428. if ((form.nbrJour.value == "")) {
  429.                 event.preventDefault(); // Empêche la soumission du formulaire
  430.     Swal.fire({
  431.         icon: 'warning',
  432.         title: 'Attention',
  433.         text: 'Veuillez remplir le nombre de jours au niveau des informations sur le voyage.',
  434.         confirmButtonColor: '#3085d6',
  435.         confirmButtonText: 'OK',
  436.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  437.     });
  438. return false;
  439. } else {
  440. if ((document.getElementById('destination').value == "")) {
  441.                 event.preventDefault(); // Empêche la soumission du formulaire
  442.     Swal.fire({
  443.         icon: 'warning',
  444.         title: 'Attention',
  445.         text: 'Veuillez saisir la destination au niveau des informations sur le voyage.',
  446.         confirmButtonColor: '#3085d6',
  447.         confirmButtonText: 'OK',
  448.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  449.     });
  450. return false;
  451. } else {
  452. if ((form.nbrJour.value) < 0) {
  453.     event.preventDefault(); // Empêche la soumission du formulaire
  454.     Swal.fire({
  455.         icon: 'warning',
  456.         title: 'Attention',
  457.         text: 'Vous ne pouvez pas mettre de nombre de jours négative au niveau des informations sur le voyage.',
  458.         confirmButtonColor: '#3085d6',
  459.         confirmButtonText: 'OK',
  460.         background: '#f8f9fa' // Couleur d'arrière-plan personnalisée
  461.     });
  462. return false;
  463. } else {
  464. form.submit();
  465. }
  466. }
  467. }
  468. }
  469. }
  470. }
  471. }
  472. }
  473. }
  474. }
  475. }
  476. }
  477. function ListeVille() {
  478. var zone = $('#zone').val();
  479. console.log(zone);
  480. var parametros = {
  481. 'zone': zone
  482. };
  483. $.ajax({
  484. url: '/liste_ville/filtre',
  485. type: "POST",
  486. dataType: "json",
  487. data: parametros,
  488. async: true,
  489. success: function (response) {
  490. $("#destination").html("<option value=''>Selectionnez la destination</option>" + response);
  491. },
  492. error: function (xhr, ajaxOptions, thrownError) {
  493. alert(xhr.status + " " + thrownError);
  494. }
  495. });
  496. }
  497.     </script>
  498. {% endblock %}