templates/default/devis.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}Demande de devis — Otropik{% endblock %}
  3. {% block body %}
  4. {# ===== HERO ===== #}
  5. <section class="position-relative text-white">
  6.   <div class="ratio ratio-21x9">
  7.     <img src="{{ asset('img/summer-holidays.jpg')}}" alt="Inspiration voyage" class="w-100 h-100 object-fit-cover">
  8.   </div>
  9.   <div class="position-absolute top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center text-center bg-dark bg-opacity-50">
  10.     <div class="p-3">
  11.       <h1 class="display-5 fw-bold mb-2">Demandez votre devis sur-mesure</h1>
  12.       <p class="lead mb-0">Dites-nous vos envies, on s’occupe de tout ✈️🌴</p>
  13.     </div>
  14.   </div>
  15. </section>
  16. {# ===== FORMULAIRE ===== #}
  17. <section class="container py-5">
  18.   {# Message succès/erreur éventuel #}
  19.   {% for label, messages in app.flashes %}
  20.     {% for m in messages %}
  21.       <div class="alert alert-{{ label }} rounded-3">{{ m }}</div>
  22.     {% endfor %}
  23.   {% endfor %}
  24.   <form method="post" action="{#{ path('quote.request.send') }#}" class="row g-4" enctype="multipart/form-data">
  25.     <div class="col-12 col-lg-8">
  26.       <div class="card border-0 shadow-sm rounded-4">
  27.         <div class="card-body p-4">
  28.           {# ---- Bloc 1 : Votre voyage ---- #}
  29.           <h2 class="h5 fw-bold mb-3">Votre voyage</h2>
  30.           <div class="row g-3 mb-4">
  31.             <div class="col-md-6">
  32.               <label class="form-label">Type de voyage</label>
  33.               <select name="trip_type" class="form-select rounded-pill" required>
  34.                 <option value="" selected>— Sélectionnez —</option>
  35.                 {% for type in typeSejour %}
  36.                   <option value="{{type.id}}">{{type.name}}</option>
  37.                 {% endfor %}
  38.               </select>
  39.             </div>
  40.             <div class="col-md-6">
  41.               <label class="form-label">Destination souhaitée</label>
  42.               <input type="text" name="destination" class="form-control rounded-pill" placeholder="Ex : Guadeloupe, Sainte-Lucie, Ouest USA…" required>
  43.             </div>
  44.             <div class="col-md-6">
  45.               <label class="form-label">Date de départ</label>
  46.               <input type="date" name="start_date" class="form-control rounded-pill">
  47.             </div>
  48.             <div class="col-md-6">
  49.               <label class="form-label">Durée (jours)</label>
  50.               <input type="number" name="duration_days" class="form-control rounded-pill" min="1" placeholder="Ex : 10">
  51.             </div>
  52.           </div>
  53.           {# ---- Bloc 2 : Voyageurs ---- #}
  54.           <h2 class="h5 fw-bold mb-3">Voyageurs</h2>
  55.           <div class="row g-3 mb-4">
  56.             <div class="col-6 col-md-3">
  57.               <label class="form-label">Adultes</label>
  58.               <input type="number" name="trav_adults" class="form-control rounded-pill" min="1" value="2">
  59.             </div>
  60.             <div class="col-6 col-md-3">
  61.               <label class="form-label">Enfants</label>
  62.               <input type="number" name="trav_children" class="form-control rounded-pill" min="0" value="0">
  63.             </div>
  64.             <div class="col-12 col-md-6">
  65.               <label class="form-label">Âges des enfants (si applicable)</label>
  66.               <input type="text" name="children_ages" class="form-control rounded-pill" placeholder="Ex : 4, 8">
  67.             </div>
  68.           </div>
  69.           {# ---- Bloc 3 : Budget & préférences ---- #}
  70.           <h2 class="h5 fw-bold mb-3">Budget & préférences</h2>
  71.           <div class="row g-3 mb-4">
  72.             <div class="col-md-6">
  73.               <label class="form-label">Budget global (à partir de)</label>
  74.               <div class="input-group">
  75.                 <span class="input-group-text">€</span>
  76.                 <input type="number" name="budget_from" class="form-control rounded-end-pill" min="0" step="100" placeholder="Ex : 2500">
  77.               </div>
  78.               <div class="form-text">Indiquez une estimation pour nous guider.</div>
  79.             </div>
  80.             <div class="col-md-6">
  81.               <label class="form-label">Style d’hébergement</label>
  82.               <select name="board_type" class="form-select rounded-pill">
  83.                 <option value="">— Indifférent —</option>
  84.                 <option>Room Only</option>
  85.                 <option>Petit-déjeuner</option>
  86.                 <option>Demi-pension</option>
  87.                 <option>Pension complète</option>
  88.                 <option>All Inclusive</option>
  89.               </select>
  90.             </div>
  91.             <div class="col-12">
  92.               <label class="form-label">Activités/ambiance souhaitées</label>
  93.               <input type="text" name="interests" class="form-control rounded-pill" placeholder="Plages, randonnée, road trip, croisière, culture, gastronomie…">
  94.             </div>
  95.           </div>
  96.           {# ---- Bloc 4 : Message ---- #}
  97.           <h2 class="h5 fw-bold mb-3">Votre message</h2>
  98.           <div class="mb-4">
  99.             <textarea name="message" rows="6" class="form-control rounded-4" placeholder="Parlez-nous de votre projet, vos envies, vos impératifs de dates…"></textarea>
  100.           </div>
  101.           {# ---- Option : pièce jointe ---- #}
  102.           <div class="mb-4">
  103.             <label class="form-label">Pièce jointe (facultatif)</label>
  104.             <input type="file" name="attachment" class="form-control">
  105.             <div class="form-text">PDF/JPG/PNG — 10 Mo max (itinéraire, inspiration…)</div>
  106.           </div>
  107.         </div>
  108.       </div>
  109.     </div>
  110.     {# ---- Colonne latérale : Contact & consentement ---- #}
  111.     <div class="col-12 col-lg-4">
  112.       <div class="card border-0 shadow-sm rounded-4 sticky-lg-top" style="top:1.25rem;">
  113.         <div class="card-body p-4">
  114.           <h2 class="h5 fw-bold mb-3">Vos coordonnées</h2>
  115.           <div class="mb-3">
  116.             <label class="form-label">Nom & prénom</label>
  117.             <input type="text" name="full_name" class="form-control rounded-pill" required>
  118.           </div>
  119.           <div class="mb-3">
  120.             <label class="form-label">Email</label>
  121.             <input type="email" name="email" class="form-control rounded-pill" required>
  122.           </div>
  123.           <div class="mb-3">
  124.             <label class="form-label">Téléphone</label>
  125.             <input type="tel" name="phone" class="form-control rounded-pill" placeholder="+590 …">
  126.           </div>
  127.           <div class="form-check my-3">
  128.             <input class="form-check-input" type="checkbox" value="1" name="newsletter" id="nl">
  129.             <label class="form-check-label" for="nl">Je souhaite recevoir les inspirations Otropik</label>
  130.           </div>
  131.           <div class="form-check mb-4">
  132.             <input class="form-check-input" type="checkbox" value="1" name="rgpd" id="rgpd" required>
  133.             <label class="form-check-label" for="rgpd">
  134.               J’accepte que mes données soient utilisées pour me recontacter (RGPD).
  135.             </label>
  136.           </div>
  137.           <input type="hidden" name="_token" value="{{ csrf_token('quote_request') }}">
  138.           <button type="submit" class="btn btn-primary w-100 rounded-pill py-2">
  139.             <i class="bi bi-send me-1"></i> Envoyer ma demande
  140.           </button>
  141.           <p class="small text-muted mt-3 mb-0">
  142.             Réponse rapide sous 24–48h ouvrées par un spécialiste Otropik.
  143.           </p>
  144.         </div>
  145.       </div>
  146.     </div>
  147.   </form>
  148. </section>
  149. {% endblock %}