templates/front/purchase/mission/choice-offer.html.twig line 1

Open in your IDE?
  1. {% extends 'front/layout.html.twig' %}
  2. {% block title %}Informations du compte parents | Les Bons Profs
  3. {% endblock %}
  4. {% block nav %}
  5. {% endblock %}
  6. {% block stylesheet %}
  7.     {{ encore_entry_link_tags('offre') }}
  8.     <script>
  9.         !function(f,b,e,v,n,t,s)
  10.         {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  11.             n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  12.             if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  13.             n.queue=[];t=b.createElement(e);t.async=!0;
  14.             t.src=v;s=b.getElementsByTagName(e)[0];
  15.             s.parentNode.insertBefore(t,s)}(window, document,'script',
  16.             'https://connect.facebook.net/en_US/fbevents.js');
  17.         fbq('init', '334520913601498');
  18.     </script>
  19.     <noscript><img height="1" width="1" style="display:none"
  20.                    src="https://www.facebook.com/tr?id=334520913601498&ev=PageView&noscript=1"
  21.         /></noscript>
  22. {% endblock %}
  23. {% block body %}
  24.     <div class="page-mission-bacbrevet">
  25.         <header class="hearder-main">
  26.             <div class="container mb-4">
  27.                 <div class="d-flex flex-row justify-content-md-between justify-content-center align-items-center w-100">
  28.                     <div class="d-flex justify-content-center mb-4">
  29.                         <img style="width: 250px" class="h-100" src="{{ asset('static/img/commun/logo.png') }}"/>
  30.                     </div>
  31.                     <div class="text-md-end text-center d-md-inline d-none text-white">
  32.                         Besoin d'aide ? Sabrina vous répond au 01 86 95 72 01 du lundi au jeudi de 9h à 17h
  33.                     </div>
  34.                 </div>
  35.             </div>
  36.             <div>
  37.                 <div class="text-center title-page">
  38.                     Mission {{ titleExam }} <span>2025</span>
  39.                 </div>
  40.                 <div class="text-center grab-page">
  41.                     vos annales corrigées en vidéo
  42.                 </div>
  43.             </div>
  44.         </header>
  45.         <div class="container">
  46.             <div class="step-indicator d-flex flex-row mb-4">
  47.                 <div class="d-flex justify-content-center align-items-center">
  48.                     <span>1</span>
  49.                 </div>
  50.                 <div class="d-flex justify-content-center align-items-center">
  51.                     <span>2</span>
  52.                 </div>
  53.                 <div class="d-flex justify-content-center align-items-center">
  54.                     <span>3</span>
  55.                 </div>
  56.             </div>
  57.             {% if typeOffer.id == 4 %}
  58.                 <div class="d-flex flex-row mb-5">
  59.                     <div>Pour accèder au <strong class="text-uppercase">Mission Bac de Français Technologique</strong> <a class="btn fw-bold text-white ms-4" style="background-color: #D34479;" href="{{ path('choice-mission') }}?mission=bac-francais-techno">c'est par ici ! </a> </div>
  60.                 </div>
  61.             {% endif %}
  62.             <div class="row pb-4">
  63.                 <div class="col-md-6 order-md-2 order-2 md-mb-0 mb-4">
  64.                     <h4 class="mb-4">Les Bons Profs ont déjà aidé plus de 2 millions d'élèves à réussir leur examen</h4>
  65.                     {% if typeOffer %}
  66.                         <div>
  67.                             {{ typeOffer.description|raw }}
  68.                         </div>
  69.                     {% endif %}
  70.                 </div>
  71.                 <form id="form-1" action="" method="post" class="col-md-6 order-md-1 order-1 md-mb-0 mb-5">
  72.                     <div class="col-md-8 mb-4">
  73.                         <select class="form-select mb-4" name="price">
  74.                             {% if missionsPrice|length > 1 %}
  75.                             <option data-price="0" value="">Choisissez votre Mission {{ titleExam }}</option>
  76.                             {% endif %}
  77.                             {% for mp in missionsPrice %}
  78.                                 <option {% if getPrice == mp.id or missionsPrice|length == 1 %}selected{% endif%} data-price="{{ mp.price }}" data-oldprice="{{ mp.oldPrice }}" data-nbr="{{ mp.nbrDis }}" value="{{ mp.id }}">{{ mp.title }}</option>
  79.                             {% endfor %}
  80.                         </select>
  81.                         {% if typeOffer and typeOffer.displayPack  %}
  82.                         <div>
  83.                             <h4 class="mb-3">Choisissez votre/vos matière(s) :</h4>
  84.                             <div>
  85.                                 {% for dis in packs %}
  86.                                     <div class="form-check mb-2">
  87.                                         <input class="form-check-input{% if dis.id not in listMissionCustomer %} checkbox-discipline{% endif %}" type="checkbox" value="{{ dis.id }}" name="dis[]" id="flexCheckDefault-{{ loop.index }}" {% if dis.id in listMissionCustomer %}disabled {% endif %}>
  88.                                         <label class="form-check-label" for="flexCheckDefault-{{ loop.index }}">
  89.                                             {{ dis.title }}
  90.                                         </label>
  91.                                     </div>
  92.                                 {% endfor %}
  93.                             </div>
  94.                         </div>
  95.                         {% endif %}
  96.                     </div>
  97.                     <div class="col-md-12">
  98.                         <div class="bg-light p-3 d-none" id="recap-basket">
  99.                             <div class="d-flex justify-content-between mb-4">
  100.                                 <div style="width: 80%">
  101.                                     <div class="fw-bolder" style="font-size: 16px">Mission {{ titleExam }} {% if typeOffer and typeOffer.displayPack  %}<span class="nbr-discipline"></span> matière(s){% endif %} </div>
  102.                                     {% if typeOffer and typeOffer.displayPack  %}
  103.                                     <div>Liste des produits sélectionnés :  <span id="list-disc"></span></div>
  104.                                     {% endif %}
  105.                                 </div>
  106.                                 <div class="text-end" style="width: 20%">
  107.                                     <span class="text-decoration-line-through oldPrice" style="font-size: 12px;"></span>
  108.                                     <span class="realPrice fw-bolder"></span>
  109.                                 </div>
  110.                             </div>
  111.                             {% if typeOffer %}
  112.                             <div>
  113.                                 {{ typeOffer.grab|raw }}
  114.                             </div>
  115.                             {% endif %}
  116.                         </div>
  117.                         <hr/>
  118.                         <div class="col-md-6">
  119.                             <div class="mb-3">Code promo</div>
  120.                             <div class="input-group">
  121.                                 <input type="text" class="form-control" placeholder="Ecrivez le ici" aria-label="Recipient's username" aria-describedby="button-addon2">
  122.                                 <button class="btn btn-outline-secondary btn-purple" type="button" id="button-code-promo">Valider</button>
  123.                             </div>
  124.                         </div>
  125.                         <div class="col-md-12">
  126.                             <hr/>
  127.                             <div class="d-flex flex-row justify-content-between">
  128.                                 <div class="d-flex flex-row align-items-center">
  129.                                     <h4 class="mb-0 me-1">Total panier : </h4>
  130.                                     <div class="code-promo-text">remise appliquée <span class="fw-bold"></span></div>
  131.                                 </div>
  132.                                 <div class="">
  133.                                     <span class="toto-basket fw-bold fs-3"></span>
  134.                                     <button class="ms-3 btn btn-purple" id="but-submit-form">Acheter</button>
  135.                                 </div>
  136.                             </div>
  137.                         </div>
  138.                     </div>
  139.                 </form>
  140.             </div>
  141.         </div>
  142.     </div>
  143.     {% if not popinChoiceMission %}
  144.     <div class="modalcustom" id="popinChoiceMission">
  145.         <h4 class="mb-4 text-center">Veuillez sélectionner<br/> votre mission</h4>
  146.         <a class="d-block" href="{{ path('choice-mission') }}?mission=bac">Mission Bac <span>2025</span></a>
  147.         <a class="d-block" href="{{ path('choice-mission') }}?mission=bac-francais">Mission Bac Français <span>2025</span></a>
  148.         <a class="d-block" href="{{ path('choice-mission') }}?mission=bac-francais-techno">Mission Bac Français Techno <span>2025</span></a>
  149.         <a class="d-block" href="{{ path('choice-mission') }}?mission=brevet">Mission Brevet <span>2025</span></a>
  150.     </div>
  151.     {% endif %}
  152. {% endblock %}
  153. {% block javascript %}
  154. {{ encore_entry_script_tags('offre') }}
  155.     <script type="text/javascript">
  156.         $(document).ready(function(){
  157.             {% if not popinChoiceMission %}
  158.                 $('#popinChoiceMission').modalcustom({
  159.                 closeExisting: false,
  160.                 showClose: false,
  161.                 clickClose:false
  162.                 })
  163.             {% endif %}
  164.             $('#but-submit-form').click(function(e){
  165.                 e.preventDefault();
  166.                 var nbr = $('select[name="price"] option:selected').data('nbr');
  167.                 if(nbr){
  168.                     if($('.checkbox-discipline:checked').length == nbr {% if getMission %} || {{ getMission!='bac'?'true':'false' }}{% endif %}){
  169.                         var som       = $('select[name="price"] option:selected').data('price');
  170.                         if($('#button-code-promo').is("[data-percent]")){
  171.                         var percent  = $('#button-code-promo').attr('data-percent');
  172.                          som = som - som*(parseFloat(percent)/100);
  173.                        }
  174.                         fbq('track', 'AddToCart', {
  175.                           content_name: $('[name="price"] option:selected').text(),
  176.                           content_category: '{{ typeOffer.title|upper }}',
  177.                           content_ids: [$('[name="price"]').val()],
  178.                           content_type: 'product',
  179.                           value: som,
  180.                           currency: 'EUR'
  181.                         });
  182.                         $(this).parents('form').submit();
  183.                     }else{
  184.                         $('#show-dialog').find('.infos-text').text("Veuillez selectionner "+nbr+" matière(s)")
  185.                         $('#show-dialog').modalcustom()
  186.                     }
  187.                 }else{
  188.                     $('#show-dialog').find('.infos-text').text("Veuillez selectionner une mission.")
  189.                     $('#show-dialog').modalcustom()
  190.                 }
  191.             })
  192.             $('.checkbox-discipline').change(function(){
  193.                 var nbr = $('select[name="price"] option:selected').data('nbr');
  194.                 if($('.checkbox-discipline:checked').length<=nbr){
  195.                     var join = [];
  196.                     $('.checkbox-discipline:checked').each(function(){
  197.                         join.push($(this).next().text().trim())
  198.                     })
  199.                     $('#list-disc').text(join.join(', '))
  200.                     if($('.checkbox-discipline:checked').length==nbr){
  201.                         $('.checkbox-discipline:not(:checked)').attr('disabled','disabled');
  202.                     }else{
  203.                         if($('.checkbox-discipline:checked').length<nbr){
  204.                             $('.checkbox-discipline:not(:checked)').removeAttr('disabled');
  205.                         }
  206.                     }
  207.                 }
  208.             })
  209.             $('select[name="price"]').change(function(){
  210.                 var selectPrice = $(this).val();
  211.                  $('.checkbox-discipline').removeAttr('disabled');
  212.                 if(selectPrice!=""){
  213.                     var price       = $('select[name="price"] option:selected').data('price');
  214.                     var oldPrice    = $('select[name="price"] option:selected').data('oldprice');
  215.                     var nbr         = $('select[name="price"] option:selected').data('nbr');
  216.                     var som         = price;
  217.                     var percent     = 0;
  218.                     if($('#button-code-promo').is("[data-percent]")){
  219.                         percent  = $('#button-code-promo').attr('data-percent');
  220.                         som = price - price*(parseFloat(percent)/100);
  221.                     }
  222.                     var pricetext = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR',}).format(som)
  223.                     $('.toto-basket').text(pricetext);
  224.                     $('#recap-basket').find('.nbr-discipline').text(nbr)
  225.                     $('#recap-basket').find('.realPrice').text(new Intl.NumberFormat('fr-FR', { style: 'currency',currency: 'EUR', }).format(price))
  226.                     if(oldPrice!="")
  227.                     $('#recap-basket').find('.oldPrice').text(new Intl.NumberFormat('fr-FR', { style: 'currency',currency: 'EUR', }).format(oldPrice))
  228.                     $('#recap-basket').removeClass('d-none')
  229.                 }else{
  230.                     $('.toto-basket').text("");
  231.                 }
  232.             })
  233.             {% if missionsPrice|length==1 %}
  234.             $('select[name="price"]').change();
  235.             {% endif %}
  236.             $('#button-code-promo').click(function(e){
  237.                 e.preventDefault()
  238.                 var priceId = $('select[name="price"]').val();
  239.                 if(priceId!=''){
  240.                     var self   = $(this);
  241.                     self.parents('.input-group').find('input').removeClass('is-invalid');
  242.                     var coupon = $(this).parents('.input-group').find('input').val();
  243.                     $.ajax({
  244.                     url:"{{ path('valid_coupon') }}",
  245.                     data:"coupon="+coupon,
  246.                     success:function(elem){
  247.                         self.parents('.input-group').find('input').val('');
  248.                         var verif = true;
  249.                         if(elem.success){
  250.                             if(elem.data.allowOffer.length>0 && !elem.data.allowOffer.includes(parseInt(priceId))){
  251.                                 verif = false;
  252.                             }
  253.                             if(verif){
  254.                                 if($('#form-1').find('input[name="discount"]').length==0){
  255.                                     $('#form-1').append('<input type="hidden" name="discount" value="'+elem.data.code+'"/>')
  256.                                 }else{
  257.                                     $('#form-1').find('input[name="discount"]').val(elem.data.code);
  258.                                 }
  259.                                 var percent = elem.data.percent;
  260.                                 self.attr('data-percent',percent);
  261.                                 var price = $('select[name="price"] option:selected').data('price');
  262.                                 $('.code-promo-text').find('span').text(elem.data.percent+" %")
  263.                                 $('.code-promo-text').show();
  264.                                 if(price){
  265.                                     price = price - price*(parseFloat(percent)/100);
  266.                                       var pricetext = new Intl.NumberFormat('fr-FR', {
  267.                                         style: 'currency',
  268.                                         currency: 'EUR',
  269.                                     }).format(price);
  270.                                     $('.toto-basket').text(pricetext);
  271.                                 }
  272.                             }
  273.                         }
  274.                         if(!elem.success || !verif){
  275.                             self.parents('.input-group').parent().find('.invalid-feedback').text('').text('Ce code promo est invalide !');
  276.                             if(!self.parents('.input-group').find('input').hasClass('is-invalid')){
  277.                                 self.parents('.input-group').find('input').addClass('is-invalid');
  278.                             }
  279.                         }
  280.                     }
  281.                 })
  282.                 }else{
  283.                     alert("Veuillez choisir une mission");
  284.                 }
  285.             })
  286.         })
  287.     </script>
  288. {{ parent() }}
  289. {% endblock %}
  290. {% block footer %}
  291. {% endblock %}