templates/component/calendar.html.twig line 1

Open in your IDE?
  1. {# 
  2.     component: calendar
  3.     form: {
  4.         action {string}: Action du formulaire
  5.         link: [{
  6.             text {string}: Texte du lien
  7.             to {string}: Lien
  8.         }]
  9.     }
  10.     months: {
  11.         MONTH/YEAR {string, format: X/XXXX}: Titre du tableau contenant les jours du mois : [{
  12.             available {bool}: Indique si le jour est disponible à la réservation
  13.             price {string}: Prix de la journée
  14.             date {string, format: DAY/MONTH/YEAR = X/X/XXXX}: date du jour
  15.             discount: {
  16.                 perc {string}: Promotion de la journée
  17.                 originalPrice {string}: Prix d'origine
  18.             }
  19.             specialOffer: {
  20.                 title {string}: Titre de l'offre spéciale
  21.                 description {string}: Description de l'offre
  22.                 originalPrice {string}: Prix d'origine
  23.                 img: {
  24.                     src {string}: source de l'image
  25.                     alt {string}: texte alternatif de l'image (Defaut: 'Image non disponible')
  26.                     size: {
  27.                         width: "180",
  28.                         height: "90"
  29.                     }
  30.                 }
  31.             }
  32.         }]
  33.     }
  34. #}
  35. {% set props = {
  36.     form: {
  37.         action: null,
  38.         link: {
  39.             text: null
  40.         },
  41.     },
  42.     lang: 'fr'
  43. }|merge(props|default({}))  %}
  44. {% set data = []|merge(data|default({})) %}
  45. <div data-component="calendar" class="Calendar-component" data-lang="{{ props.lang }}" data-index="0" data-months="{{ data|json_encode() }}">
  46.     <template id='calendarr'>
  47.         <div class='calendar' v-show="calendarOpen">
  48.             <span class="close-calendar" @click='closeCalendar'></span>
  49.             <div class="calendar-container">
  50.                 <div class="nav-arrow">
  51.                     <span class='arrow-next outer-arrow' @click='moveNextMonth'></span>
  52.                     <span class='arrow-prev outer-arrow' @click='movePreviousMonth'></span>
  53.                 </div>
  54.                 <div class='header'>
  55.                     <span class='arrow-prev' @click='movePreviousMonth'></span>
  56.                     <span class='title' @click='moveThisMonth'>
  57.                         {% verbatim %}
  58.                             {{ header.label }}
  59.                         {% endverbatim %}
  60.                     </span>
  61.                     <span class='arrow-next' @click='moveNextMonth'></span>
  62.                 </div>
  63.                 <div class="calendar-content" :class='category'>
  64.                     <div class=' weekdays' v-if="mobile">
  65.                         <div class="weekday" v-for=' weekday in weekdays'>
  66.                             {% verbatim %}
  67.                                 {{ weekday.label_1 }}.
  68.                             {% endverbatim %}
  69.                         </div>
  70.                     </div>
  71.                     <div class='weekdays' v-else>
  72.                         <div class="weekday" v-for='weekday in weekdays'>
  73.                             {% verbatim %}
  74.                                 {{ weekday.label }}
  75.                             {% endverbatim %}
  76.                         </div>
  77.                     </div>
  78.                     <div class='week' v-for='week in weeks'>
  79.                         <div class='day' :class='{  discountCanceled: day.discountCanceled, dragFinished: day.dragFinished, hasError: day.hasError || day.errorDiscount || day.tooManyDays, unavailable: !day.isAvailable, discount: (day.informations.discount || day.informations.specialOffer), today: day.isToday, "not-in-month": !day.inMonth, "selected": day.isSelected && !day.dragActive && !day.startsDrag, "dragged": day.isDragged, "end-dragged": day.endsDrag, "end-selected": day.endsSelection  && !day.dragActive, "start-selected": (day.startsDrag && day.isDragged) || (day.startsSelection  && !day.dragActive) } ' v-for='day in week' @click='$emit("selectDay", day)' @mouseenter='$emit("enterDay", day)'>
  80.                             <span class='day-num'>
  81.                                 {% verbatim %}
  82.                                     {{ day[dayKey] }}
  83.                                 {% endverbatim %}
  84.                             </span>
  85.                             <div class="day-discount" v-if="day[dayInformations].available && !day.hasError && !day.errorDiscount && !day.tooManyDays  && day[dayInformations].discount && !day.isDragged && (!day.isSelected || (day.isSelected && day.dragActive))" :class="day[dayInformations].discount ? 'discount' : ''">
  86.                                 <p class="discount-perc" v-if="day[dayInformations].discount">
  87.                                     {% verbatim %}
  88.                                         {{ day[dayInformations].discount.perc }}
  89.                                     {% endverbatim %}
  90.                                 </p>
  91.                                 <p v-if="day[dayInformations].discount" class="original-price">
  92.                                     {% verbatim %}
  93.                                         {{ day[dayInformations].discount.originalPrice }}€
  94.                                     {% endverbatim %}
  95.                                 </p>
  96.                             </div>
  97.                             <div class="day-discount" v-if="day[dayInformations].available && !day.hasError && !day.errorDiscount && !day.tooManyDays && day[dayInformations].specialOffer && !day.isDragged && (!day.isSelected || (day.isSelected && day.dragActive))">
  98.                                 <div class="special-offer">
  99.                                     <p>Offre spéciale</p>
  100.                                     <div class="special-offer-svg" @mouseover="$emit('openOffer', day)" @mouseleave="closeOffer">
  101.                                         {% include "component/svg.html.twig" with {
  102.                                         props: {
  103.                                             name: 'information'
  104.                                         }
  105.                                     } %}
  106.                                     </div>
  107.                                 </div>
  108.                                 <p class="original-price" v-if="day[dayInformations].specialOffer.originalPrice">
  109.                                     {% verbatim %}
  110.                                         {{ day[dayInformations].specialOffer.originalPrice }}€
  111.                                     {% endverbatim %}
  112.                                 </p>
  113.                                 <div class="offer-msg" v-show="activeDay === day">
  114.                                     <div class="offer-img Image-component">
  115.                                         <img :src="day[dayInformations].specialOffer.img.src" alt="day[dayInformations].specialOffer.img.alt" class="Image-image"/>
  116.                                     </div>
  117.                                     <p class="offer-title">
  118.                                         {{ 'component.calendar.offreSpeciale'|trans }}
  119.                                         <br>
  120.                                         {% verbatim %}
  121.                                             {{ day[dayInformations].specialOffer.title }}
  122.                                         {% endverbatim %}
  123.                                     </p>
  124.                                     <p class="offer-description">
  125.                                         {% verbatim %}
  126.                                             {{ day[dayInformations].specialOffer.description }}
  127.                                         {% endverbatim %}
  128.                                     </p>
  129.                                 </div>
  130.                             </div>
  131.                             <div class="day-price" v-if="day[dayInformations].available && !day.hasError && !day.errorDiscount && !day.tooManyDays && !day.isDragged && (!day.isSelected || (day.isSelected && day.dragActive))">
  132.                                 <p>{{ 'component.calendar.aPartirDe'|trans }}</p>
  133.                                 <p :class="day[dayInformations].specialOffer || day[dayInformations].discount ? 'is-discount' : 'price'">
  134.                                     {% verbatim %}
  135.                                         {{ day[dayInformations].price }}€
  136.                                     {% endverbatim %}
  137.                                 </p>
  138.                                 <p v-if="category === 'hotel'">{{ 'component.calendar.laChambre'|trans }}</p>
  139.                                 <p v-else>{{ 'component.calendar.parPersonne'|trans }}</p>
  140.                             </div>
  141.                             <div class="day-error" v-if="(day.hasError || day.errorDiscount || day.tooManyDays) &&  (day.endsDrag || day.endsSelection)">
  142.                                 {% include "component/svg.html.twig" with {
  143.                                     props: {
  144.                                         name: 'information'
  145.                                     }
  146.                                 } %}
  147.                                 <p>
  148.                                     {% verbatim %}
  149.                                         {{ errorMsg }}
  150.                                     {% endverbatim %}
  151.                                 </p>
  152.                             </div>
  153.                             <div class="day-discount total-discount" v-if="((day.startsSelection && !day.dragActive) || day.startsDrag) && day[dayInformations].available && !day.hasError && !day.errorDiscount && !day.tooManyDays  && day.hasDiscount && !day.discountCanceled" :class="day[dayInformations].discount ? 'discount' : ''">
  154.                                 <div v-if="totalReducPrice && totalReducPrice > 0">
  155.                                     <p class="discount-perc" v-if="totalPerc">
  156.                                         {% verbatim %}
  157.                                             {{ totalPerc }}
  158.                                         {% endverbatim %}
  159.                                     </p>
  160.                                     <p class="original-price" v-if="discountAndFullPrice || day.hasDiscount">
  161.                                         {% verbatim %}
  162.                                             {{ totalReducPrice }}€
  163.                                         {% endverbatim %}
  164.                                     </p>
  165.                                 </div>
  166.                                 <div v-else-if="day[dayInformations].discount">
  167.                                     <p class="discount-perc">
  168.                                         {% verbatim %}
  169.                                             {{ day[dayInformations].discount.perc }}
  170.                                         {% endverbatim %}
  171.                                     </p>
  172.                                     <p class="original-price" v-if="day[dayInformations].discount.originalPrice">
  173.                                         {% verbatim %}
  174.                                             {{ day[dayInformations].discount.originalPrice }}€
  175.                                         {% endverbatim %}
  176.                                     </p>
  177.                                 </div>
  178.                                 <div v-else-if="day[dayInformations].specialOffer">
  179.                                     <p class="original-price" v-if="day[dayInformations].specialOffer.originalPrice">
  180.                                         {% verbatim %}
  181.                                             {{ day[dayInformations].specialOffer.originalPrice }}€
  182.                                         {% endverbatim %}
  183.                                     </p>
  184.                                 </div>
  185.                             </div>
  186.                             <div class="day-price total-price" :class="{isDragged: day.isDragged, endsSelection: day.endsSelection, dragActive: day.dragActive, 'day-discount': day.hasDiscount}" v-if="((day.startsSelection && !day.dragActive) || day.startsDrag) && !day.hasError && !day.errorDiscount && !day.tooManyDays">
  187.                                 <p>{{ 'component.calendar.aPartirDe'|trans }}</p>
  188.                                 <p class="price" v-if="totalPrice > 0">
  189.                                     {% verbatim %}
  190.                                         {{ totalPrice }}€
  191.                                     {% endverbatim %}
  192.                                 </p>
  193.                                 <p class="price" v-else>
  194.                                     {% verbatim %}
  195.                                         {{ day[dayInformations].price }}€
  196.                                     {% endverbatim %}
  197.                                 </p>
  198.                                 <p v-if="category === 'hotel'">{{ 'component.calendar.laChambre'|trans }}</p>
  199.                                 <p v-else>{{ 'component.calendar.parPersonne'|trans }}</p>
  200.                             </div>
  201.                             <div class="day-departure" v-if="((day.endsSelection && !day.dragActive) || (day.endsDrag && !day.startsDrag)) && !day.hasError">
  202.                                 <p>{{ 'component.calendar.departLe'|trans }}</p>
  203.                                 <p class="date">
  204.                                     {% verbatim %}
  205.                                         {{ day[dayKey] + "/" + day[dayMonth] }}
  206.                                     {% endverbatim %}
  207.                                 </p>
  208.                             </div>
  209.                         </div>
  210.                     </div>
  211.                 </div>
  212.                 <div class="calendar-mobile">
  213.                     <div class="sum-up" v-if="totalPrice > 0 && !isCleared">
  214.                         <div class="final-price" v-if="totalPrice && !errorDay">
  215.                             <p>{{ 'component.calendar.votreSelection'|trans }} :</p>
  216.                             <p>{{ 'component.calendar.aPartirDe'|trans }}</p>
  217.                             <p class="price">
  218.                                 {% verbatim %}
  219.                                     {{ totalPrice }}€
  220.                                 {% endverbatim %}
  221.                             </p>
  222.                             <p v-if="category === 'hotel'">{{ 'component.calendar.laChambre'|trans }}</p>
  223.                             <p v-else>{{ 'component.calendar.parPersonne'|trans }}</p>
  224.                             <p class="date" v-if="departure">{{ 'component.calendar.departLe'|trans }}
  225.                                 <span>
  226.                                     {% verbatim %}
  227.                                         {{ departure }}
  228.                                     {% endverbatim %}
  229.                                 </span>
  230.                             </p>
  231.                         </div>
  232.                         <div class="sum-up-error" v-if="errorDay">
  233.                             {% include "component/svg.html.twig" with {
  234.                                 props: {
  235.                                     name: 'information'
  236.                                 }
  237.                             } %}
  238.                             <p class="error-msg">
  239.                                 {% verbatim %}
  240.                                     {{ errorMsg }}
  241.                                 {% endverbatim %}
  242.                             </p>
  243.                         </div>
  244.                         <div class="calendar-button" @click='sendCalendar' :class="{disabled: hasError || isCleared || !dragFinished }">
  245.                             {% include "component/form/submit.html.twig" with {
  246.                                 props: {
  247.                                     text:  props.form.link.text    
  248.                                 }
  249.                             } %}
  250.                         </div>
  251.                     </div>
  252.                     <div class="sum-up-specialOffers" v-if="specialOffers && (totalPrice > 0) && !isCleared ">
  253.                         <p class="offer-intro">{{ 'component.calendar.offresSpecialesIncluses'|trans }} :</p>
  254.                         <div class="offer-msg" v-for="offer in specialOffers">
  255.                             <div class="offer-img Image-component">
  256.                                 <img :alt="offer.img.alt" :src="offer.img.src" class="Image-image"/>
  257.                             </div>
  258.                             <div class="offer-text">
  259.                                 <p class="offer-title">
  260.                                     {{ 'component.calendar.offreSpeciale'|trans }}
  261.                                     <br>
  262.                                     {% verbatim %}
  263.                                         {{ offer.title }}
  264.                                     {% endverbatim %}
  265.                                 </p>
  266.                                 <p class="offer-description">
  267.                                     {% verbatim %}
  268.                                         {{ offer.description }}
  269.                                     {% endverbatim %}
  270.                                 </p>
  271.                             </div>
  272.                         </div>
  273.                         <div class="calendar-button" @click='sendCalendar' :class="{disabled: hasError || isCleared || !dragFinished }">
  274.                             {% include "component/form/submit.html.twig" with {
  275.                                 props: {
  276.                     text:  props.form.link.text    
  277.                 }
  278.                             } %}
  279.                         </div>
  280.                     </div>
  281.                 </div>
  282.             </div>
  283.         </div>
  284.     </template>
  285.     <div id='calendar-app'>
  286.         <div class="calendar-layout">
  287.             <component :is='datePicker' v-model='dateSelection' @drag='dragSelection = $event'></component>
  288.         </div>
  289.     </div>
  290. {%  if props.directementtunnel is not defined  or props.directementtunnel == 0 %}
  291.      {% include "component/calendar_form.html.twig" with {
  292.         props: props.form
  293.     } %}
  294.  {% else %}
  295.  {% include "component/calendar_form.html.twig" with {
  296.         form: props.form,
  297.         id: props.id,
  298.         directementtunnel: props.directementtunnel,
  299.         departure: props.departure,
  300.         arrival: props.arrival,
  301.         accomodation : props.accomodation,
  302.         min_days : props.min_days ,
  303.         surtitre: props.surtitre,
  304.         titre_principal: props.titre_principal,
  305.         prix_apartir : props.prix_apartir
  306.     }
  307.     %}
  308. {% endif %}  
  309. </div>