templates/panier/panier.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title  %}{{ parent()}} | Votre panier d'achats
  3. {% endblock %}
  4. {% block stylesheets %}
  5.     <link rel="stylesheet" href="{{ asset('css/panier.css') }}">
  6. {% endblock %}
  7. {% block h1 %}Panier d'achat{% endblock %}
  8. {% block content %}
  9. <div class="wrapper">
  10.     <main class='col-lg-12  col-12 mx-auto d-flex flex-lg-row flex-column justify-content-between'>
  11.             {% set sstotal = 0 %}
  12.         <div class="col-lg-8 col-12 d-flex flex-column mx-auto">
  13.             <div class="module-promo d-none ">
  14.                 <label for="promo-code">Saisir un code reduction</label>
  15.                     <input id="promo-code" type="text" name="promo-code" maxlength="5" class="promo-code-field">
  16.                 <button class="btn ">Appliquer</button>
  17.             </div>
  18.             <div class="col-12 ">
  19.                 <ul class="col-12 entete">
  20.                     <li class="col-4">Description</li>
  21.                     <li class="col-2">Prix TTC</li>
  22.                     <li class="col-2">Qté</li>
  23.                     <li class="col-2">Ss-total</li>
  24.                     <li class="col-2"></li>
  25.                 </ul>
  26.             </div>
  27.             <div class="col-12">
  28.             
  29.                 {% for produit in panier %}
  30.                     <div id ="{{ produit.id_produit }}" class="col-12 ligne_produit">
  31.                         <a class="col-1 mx-0" href="{{ path('fiche_produit', {'id' : produit.produit.id}) }}"><img src="{{ asset("img/photoProduitUpload/" ~ produit.nomPhoto) }}" alt="" style="width:100%"></a>
  32.                         <a class="col-3 description" href="{{ path('fiche_produit', {'id' : produit.produit.id}) }}">
  33.                             <div class="nom-produit">{{ produit.produit.nom}}</div>
  34.                             <div class="col-12">
  35.                                 
  36.                             </div>
  37.                             <div  class="reference">{{ produit.produit.ref }}</div>
  38.                         </a>
  39.                     
  40.                         <div id = {{ "prix" ~ produit.id_produit }} class="col-2 price text-align-center"> {{ produit.prix|number_format(2,'.')}}</div>
  41.                             
  42.                         <div class="col-2"><input type="number" value="{{ produit.quantite }}" min="1" class="quantity-field" onchange = "changeQuantity('{{ produit.id_produit }}', this.value )"></div>
  43.                         {% set sstotal = (produit.quantite * produit.prix)%}
  44.                         <div id = {{ "sstt" ~ produit.id_produit }} class=" col-2 subtotal"><div>{{ sstotal|number_format(2,'.') }}</div></div>
  45.                     
  46.                         
  47.                         
  48.                         <div class="col-2">
  49.                             <button  class='supprimer' onclick = "suppProduit('{{ produit.id_produit }}')">X</button>
  50.                         </div>
  51.                     </div>
  52.                 {% endfor %}
  53.             </div>
  54.         </div>
  55.         <aside class="col-lg-3 col-8 mx-auto">
  56.             <div class="summary">
  57.                 <div class="summary-total-items">
  58.                     <span id = "nbItems" class="total-items"></span>dans votre panier</div>
  59.                 <div hidden class="summary-subtotal">
  60.                     
  61.                     <div class="summary-promo hide">
  62.                         <div class="promo-title">Promotion</div>
  63.                         <div class="promo-value" id="basket-promo"></div>
  64.                     </div>
  65.                 </div>
  66.                 
  67.                 <div class="summary-total">
  68.                     <div class="total-title">Total</div>
  69.                     <div class="total-value" id="total_panier"></div>
  70.                 </div >
  71.                 <div class="summary-checkout d-flex flex-column">
  72.                      <a class="col-12 mx-auto btn mb-2" href = "{{ path('catalogue') }}">continuer vos achats</a>
  73.                     <a class="col-12 mx-auto btn mb-2" href ="{{ path('preparer-commande') }}">valider votre panier</a>
  74.                 </div>
  75.                 
  76.                 
  77.             </div>
  78.               
  79.         </aside>
  80.     
  81.     </main>
  82.     </div>    
  83.     <textarea name="" hidden  id="panier2js" cols="30" rows="10">{{ panierstr }}</textarea>
  84. {% endblock %}
  85. {% block javascripts %}
  86. <script> 
  87.     // on reconstitue le panier
  88.     var panierstring =  document.querySelector('#panier2js').innerHTML
  89.     var panier = JSON.parse(panierstring)
  90.     // onstocke les éléments dans des variables
  91.     var eltssTotalPanier = document.querySelector('#sstotal_panier')
  92.     var eltcout_livraison = document.querySelector('#livraison')
  93.     var elttotalPanier = document.querySelector('#total_panier')
  94.     var eltchoix_livraison = document.querySelector('#choix_livraison')
  95.     var eltnbItems = document.querySelector('#nbItems')
  96.     //on initalise les varirables globales
  97.     var totalPanier =0
  98.     // nombre d'articles dans le panier
  99.     function nbItems (){
  100.         var nbItems = panier.length
  101.         if (nbItems > 1){
  102.             eltnbItems.innerHTML = nbItems + " articles "  
  103.         }else {
  104.             eltnbItems.innerHTML = nbItems + " article "
  105.         }
  106.     }
  107.     function calculSousTotalProduit(id_produit, quantite){
  108.         let elementId  = 'prix' + id_produit
  109.         let prixProduit = document.getElementById(elementId).innerHTML
  110.         
  111.         prixProduit = parseFloat (prixProduit)
  112.     
  113.         let ssTotalProduit = parseInt(quantite) * parseFloat(prixProduit)
  114.         ssTotalProduit = ssTotalProduit.toFixed(2)
  115.         document.getElementById('sstt'+id_produit).innerHTML = ssTotalProduit
  116.     }
  117.     function calculPanier() {
  118.         // calcul du sous total panier
  119.         let totalPanier = 0
  120.         for (i=0 ;i< panier.length; i++) {
  121.         let eltId = 'sstt'+ panier[i].id_produit
  122.         totalPanier = totalPanier + parseFloat(document.getElementById(eltId).innerHTML)
  123.         }
  124.         totalPanier=totalPanier.toFixed(2)
  125.         
  126.         elttotalPanier.innerHTML = totalPanier
  127.     }
  128.     function livraison() {
  129.         cout_livraison  = parseInt(eltchoix_livraison.value)
  130.         eltcout_livraison.innerHTML = cout_livraison
  131.         ssTotalPanier = parseFloat(eltssTotalPanier.innerHTML)
  132.         totalPanier = ssTotalPanier + cout_livraison
  133.         totalPanier =totalPanier.toFixed(2)
  134.         elttotalPanier.innerHTML =totalPanier
  135.     }
  136.     //------------- au chagemement de la page --------------------------
  137.     // nombre d'articles dans le panier
  138.     nbItems()
  139.     // on calcul les sous totaux produits  
  140.     for (i=0; i< panier.length ; i++) {
  141.     calculSousTotalProduit(panier[i].id_produit, panier[i].quantite)
  142.     }
  143.     // on calcul les totaux et sous totaux  
  144.     calculPanier()
  145.     //-----------------------fin du lancement de la page 
  146.     function suppProduit(id_produit){
  147.         let eltproduit = document.getElementById(id_produit)
  148.         eltproduit.remove()
  149.         for(i=0 ; i< panier.length ; i++) {
  150.             if ( panier [i]['id_produit'] == id_produit){
  151.                 panier.splice(i,1)
  152.             }
  153.         }
  154.             nbItems()
  155.             calculPanier()
  156.             let nbCartItems = panier.length
  157.             if (nbCartItems>0){
  158.                 document.querySelector('.cart-items-lg').innerHTML=nbCartItems
  159.                 document.querySelector('.cart-items-md').innerHTML=nbCartItems
  160.                 }
  161.             else{
  162.             // cart-items-lg est le badge panier en mode lg , cart-items-md en mode responsive 
  163.             document.querySelector('.cart-items-lg').innerHTML=""
  164.             document.querySelector('.cart-items-lg').setAttribute('visibility',"hidden")
  165.             document.querySelector('.cart-items-md').innerHTML=""
  166.             document.querySelector('.cart-items-md').setAttribute('visibility',"hidden")
  167.             }
  168.         
  169.         let url = "{{ path('panier_supprimer') }}"
  170.         let data = {
  171.             'id_produit': id_produit
  172.         }
  173.         $.ajax({
  174.                 method: "post",
  175.                 url: url,
  176.                 data: data,
  177.                     success: function(response)
  178.                     {console.log("produit supprimé");},
  179.                     error: function()
  180.                     {alert('erreur');}
  181.             })
  182.     }
  183.     function changeQuantity(id_produit, quantite){
  184.         // recupération du prix produit et affichage du sstotal produit 
  185.         calculSousTotalProduit(id_produit, quantite)
  186.         calculPanier()
  187.         // on va changer le "vrai"  panier PHP en cas de rechargement de la page 
  188.         let url = "{{ path('panier_changer') }}"
  189.         let data = {
  190.             'id_produit': id_produit,
  191.             'qty': quantite
  192.         }
  193.         $.ajax({
  194.                 method: "post",
  195.                 url: url,
  196.                 data: data,
  197.                     success: function(response)
  198.                     {console.log("qty changed");},
  199.                     error: function()
  200.                     {alert('erreur');}
  201.             })
  202.     }
  203. </script>
  204. {% endblock %}