templates/admin/invoices.html.twig line 1

Open in your IDE?
  1. {% extends 'dashboard_layout.html.twig' %}
  2.     
  3.     {% block title %} {{ parent() }} | {{ boutique.nom }}{% endblock %}
  4.     
  5. {% block real_content  %}
  6.         
  7. <div class="assie-card card">
  8.     <div class="assie-card-body">
  9.         <div>
  10.             <span class="titreModalPaypal" hidden></span>
  11.             {% for label, messages in app.flashes(['warning', 'danger', 'success']) %}
  12.             {% for message in messages %}
  13.                 <div class="alert alert-{{ label }}">
  14.                     {{ message }}
  15.                 </div>
  16.             {% endfor %}
  17.         {% endfor %}
  18.             <h3>{{ 'admin.invoices' | trans }}</h3>
  19.             <form id="formFilter" method="POST" action="{{ path('admin.invoices', {'slug': boutique.slug}) }}">
  20.                 <div class="row">
  21.                     <div class="col-md-1 position-relative">
  22.                         <label for="">{{ 'admin.period' | trans }}</label>
  23.                     </div>
  24.                     <div class="col-md-3 position-relative">
  25.                         <select class="form-select" id="selPeriode">
  26.                             <option value="{{ 'now' | date('Y-m-d') }}@{{ 'now' | date('Y-m-d') }}">{{ 'admin.today' | trans }}</option>
  27.                             <option value="{{ dateDebut | date('Y-m-d') }}@{{ dateFin | date('Y-m-d') }}" selected>{{ 'admin.this_week' | trans }}</option>
  28.                             <option value="{{ startMonth | date('Y-m-d') }}@{{ endMonth | date('Y-m-d') }}">{{ 'admin.this_month' | trans }}</option>
  29.                             <option value="{{ startYear | date('Y-m-d') }}@{{ endYear | date('Y-m-d') }}">{{ 'admin.this_year' | trans }}</option>
  30.                             <option value="p@p">{{ 'admin.customized' | trans }}</option>
  31.                         </select>
  32.                     </div>
  33.                     <div class="col-md-2 blocDate">
  34.                         <div class="form-group position-relative">
  35.                             <input value="{{ dateDebut | date('Y-m-d') }}" class="form-control" type="date" id="dateDebut" name="dateDebut" />
  36.                         </div>
  37.                     </div>
  38.                     <div class="col-md-2 blocDate">
  39.                         <div class="form-group position-relative">
  40.                             <input value="{{ dateFin | date('Y-m-d') }}" class="form-control" type="date" id="dateFin" name="dateFin" />
  41.                         </div>
  42.                     </div>
  43.                     <div class="col-md-3 position-relative">
  44.                         <button id="btnActualiserTable" class="btn btn-primary">{{ 'admin.actualiser' | trans }}</button>
  45.                     </div>
  46.                 </div>
  47.             </form>
  48.             <br/>
  49.             {% if userBoutique.droits[3].valeurDroit.ajout == true %}
  50.             <a type="button" href="{{ path('admin.new_sale', {'slug': boutique.slug, 'type':'invoice'}) }}" class=" item-menu-travail btn btn-secondary pull-right btn-icon">
  51.                 {{ 'admin.new' | trans }} <i class="bi bi-plus"></i>
  52.             </a>
  53.             {% endif %}
  54.         </div>
  55.         <br/>
  56.         <ul class="nav nav-tabs" role="tablist" id="myTab">
  57.             <li class="nav-item" role="presentation">
  58.                 <button  class="nav-link active"  id="touteslesfactures-tab" data-bs-toggle="tab" data-bs-target="#touteslesfactures" type="button" role="tab" aria-controls="touteslesfactures" aria-selected="true">
  59.                 Toutes les factures
  60.                 </button>
  61.             </li>
  62.             <li class="nav-item" role="presentation">
  63.                 <button class="nav-link"  id="pointparclient-tab" data-bs-toggle="tab" data-bs-target="#pointparclient" type="button" role="tab" aria-controls="pointparclient" aria-selected="false">
  64.                 Commande par client
  65.                 </button>
  66.             </li>
  67.         </ul>
  68.         <div class="tab-content">
  69.             <div class="tab-pane fade show active" id="touteslesfactures" role="tabpanel">
  70.                 <div class="table-responsive">
  71.                 
  72.                     <div id="contenuListeCommande">
  73.                         {{ include('admin/invoices_table_content.html.twig') }}
  74.                     </div>
  75.                 </div>
  76.                 <br/>
  77.                 <div class="container">
  78.                     <div class="row">
  79.                         <div class="col-md-12">
  80.                             <h4>{{ 'admin.factures.detail_document' | trans }}</h4>
  81.                             <div id="contenuDetailCommande">
  82.                             </div>
  83.                         </div>
  84.                     </div>
  85.                 </div>
  86.             </div>
  87.         
  88.             <div class="tab-pane fade" id="pointparclient" role="tabpanel">
  89.                 <div class="container">
  90.                     <div class="row">
  91.                         <div class="col-md-1">
  92.                             <label for="client">Client</label>
  93.                         </div>
  94.                         <div class="col-md-4">
  95.                             <select class="form-select" id="client">
  96.                             <option value="">Choisir</option>
  97.                             <option value="0">Tous les clients</option>
  98.                             {% for client in clients %}
  99.                             <option value="{{ client.id }}">{{ client.nom }}</option>
  100.                             {% endfor %}
  101.                             </select>
  102.                         </div>
  103.                     </div>
  104.                     <div class="row">
  105.                         <div class="col-md-12">
  106.                             <br/>
  107.                             <a target="_blank=" id="aBtnImprimerPointParClient" class="btn btn-secondary" href="{{ path('admin_imprimer_point_par_client', {'slug': boutique.slug}) }}">{{ 'admin.print' | trans }}</a>
  108.                                 <div class="table-responsive">
  109.                                         <div id="contenuListeCommandeParClient">
  110.                                         </div>
  111.                             </div>
  112.                             <br/>
  113.                             <div id="contenuDetailCommandeParClient">
  114.                             </div>
  115.                         </div>
  116.                     </div>
  117.                 </div>
  118.             </div> {# Fin onglet #}
  119.         </div>
  120.         
  121.     </div>
  122. </div>
  123. <span id="urlDetailCommande" hidden>{{ path('admin_detail_commande', {'slug': boutique.slug}) }}</span>
  124. <span id="urlPointParClient" hidden>{{ path('admin_point_par_client', {'slug': boutique.slug}) }}</span>
  125. <span id="urlImprimerPointParClient" hidden>{{ path('admin_imprimer_point_par_client', {'slug': boutique.slug}) }}</span>
  126. {% endblock real_content  %}
  127. {% block javascripts  %}
  128.     {{ parent() }}
  129.     <script type="text/javascript">
  130.         $(function(){
  131.             var $deleteItem = $('.delete-item'), $makePaiement = $('.make-paiement');
  132.             var $titreModalPaypal = $('.titreModalPaypal'), $client = $('#client');
  133.             var $btnActualiserTable = $('#btnActualiserTable');
  134.             var $contenuListeCommande = $('#contenuListeCommande'), $formFilter = $('#formFilter');
  135.             var $selPeriode = $('#selPeriode');
  136.             var $dateDebut = $('#dateDebut'), $dateFin = $('#dateFin');
  137.             var $elementCommande = $('.element-commande'), $contenuDetailCommande = $('#contenuDetailCommande');
  138.             var $urlDetailCommande = $('#urlDetailCommande').text(), $urlPointParClient = $('#urlPointParClient');
  139.             var $contenuListeCommandeParClient = $('#contenuListeCommandeParClient');
  140.             var $aBtnImprimerPointParClient = $('#aBtnImprimerPointParClient'), $urlImprimerPointParClient = $('#urlImprimerPointParClient');
  141.             var $contenuDetailCommandeParClient = $('#contenuDetailCommandeParClient');
  142.             var $itemGenererFne = $('.item-generer-fne');
  143.             
  144.             $('.blocDate').css('display', 'none');
  145.             
  146.             $elementCommande.click(function(){
  147.                 var $idDeLaCommande = $(this).find('span.id-commande').text();
  148.                 actualiserDetailCommande($idDeLaCommande);
  149.              });
  150.              function actualiserDetailCommande(idDeLaCommande)
  151.              {
  152.                 toggleLoading();
  153.                 var $lienComande = $urlDetailCommande+'/'+idDeLaCommande;
  154.                 $.ajax({
  155.                     url: $lienComande,
  156.                     method: 'GET',
  157.                     //processData: false,
  158.                     //contentType: false,
  159.                     success: function (data, textStatus, jqXHR) {
  160.                         toggleLoading();
  161.                         $contenuDetailCommande.html(data);
  162.                         
  163.                     },
  164.                     error: function(jqXHR, textStatus, errorThrown ){
  165.                         toggleLoading();
  166.                         toggleMessage("error", "Une erreur s'est produite");
  167.                     }
  168.                 });
  169.              }
  170.             function actualiserDetailCommandeParClient(idDeLaCommande)
  171.              {
  172.                 toggleLoading();
  173.                 var $lienComande = $urlDetailCommande+'/'+idDeLaCommande;
  174.                 $.ajax({
  175.                     url: $lienComande,
  176.                     method: 'GET',
  177.                     //processData: false,
  178.                     //contentType: false,
  179.                     success: function (data, textStatus, jqXHR) {
  180.                         toggleLoading();
  181.                         $contenuDetailCommandeParClient.html(data);
  182.                         
  183.                     },
  184.                     error: function(jqXHR, textStatus, errorThrown ){
  185.                         toggleLoading();
  186.                         toggleMessage("error", "Une erreur s'est produite");
  187.                     }
  188.                 });
  189.              }
  190.             $selPeriode.change(function(){
  191.                 var per = $(this).val().split('@');
  192.                 if($(this).val() == 'p@p'){
  193.                     $('.blocDate').css('display', 'inline-block');
  194.                 } else{
  195.                     $('.blocDate').css('display', 'none');
  196.                 }
  197.                 
  198.                 $dateDebut.val(per[0]);
  199.                 $dateFin.val(per[1]);
  200.                 
  201.             });
  202.             
  203.             
  204.             $btnActualiserTable.click(function(e){
  205.                 e.preventDefault();
  206.                 if($client.val() != ''){
  207.                     actualiserTablePointParClient();
  208.                 }
  209.                  toggleLoading();
  210.                   $.ajax({
  211.                     url: $formFilter.attr('action'),
  212.                     method: 'POST',
  213.                     data: $formFilter.serialize(),
  214.                     //processData: false,
  215.                     //contentType: false,
  216.                     success: function (data, textStatus, jqXHR) {
  217.                         toggleLoading();
  218.                         $contenuListeCommande.html(data);
  219.                     
  220.                         $('.my-data-table').DataTable(
  221.                                 {
  222.                                 "ordering": false,
  223.                                 "lengthMenu": [[100, 50, 25, 10], [100, 50, 25, 10]],
  224.                                 "pageLength": 10 
  225.                                         }
  226.                             );
  227.                         $elementCommande = $('.element-commande'); 
  228.                         $elementCommande.click(function(){
  229.                             var $idDeLaCommande = $(this).find('span.id-commande').text();
  230.                             actualiserDetailCommande($idDeLaCommande);
  231.                         });
  232.                         
  233.                         var $deleteItem = $('.delete-item');
  234.                         $deleteItem.click(function(e){
  235.                             e.preventDefault();
  236.                             var lien = $(this).attr('href');
  237.                             var $theRow = $(this).parent().parent();
  238.                             swal({
  239.                                   title: t('Voulez-vous supprimer ?'),
  240.                                   inputAttributes: {
  241.                                     autocapitalize: 'off'
  242.                                   },
  243.                                   buttons:{
  244.                                         cancel: t('Annuler'),
  245.                                         submit: {
  246.                                             text: t('Supprimer'),
  247.                                             value: 'submit'
  248.                                         }
  249.                                     }
  250.                                 
  251.                                 }
  252.                                  ).then((value) =>{
  253.                                     switch(value){
  254.                                         case 'submit':
  255.                                             toggleLoading();
  256.                                             $.ajax({
  257.                                                 url: lien,
  258.                                                 method: 'GET',
  259.                                                 //processData: false,
  260.                                                 //contentType: false,
  261.                                                 success: function (data, textStatus, jqXHR) {
  262.                                                     toggleLoading();
  263.                                                     toggleMessage("success", "Ligne supprimée");
  264.                                                     $theRow.remove();
  265.                                                 },
  266.                                                 error: function(jqXHR, textStatus, errorThrown ){
  267.                                                     toggleLoading();
  268.                                                     toggleMessage("error", "Une erreur s'est produite");
  269.                                                 }
  270.                                             });
  271.                                             break;
  272.                                             
  273.                                             default:
  274.                                               swal(
  275.                                                 {
  276.                                                     title: t("Annulé!"),
  277.                                                     timer: 500
  278.                                                  }
  279.                                               );
  280.                                     }
  281.                                  }
  282.                                     
  283.                                  );
  284.                         }); // Fin dialogue supprimer une facture
  285.                         
  286.                         //Début dialogue générer facture FNE
  287.                         // Début générer dialogue FNE
  288.                         var $itemGenererFne = $('.item-generer-fne');
  289.                         $itemGenererFne.click(function(e){
  290.                             e.preventDefault();    
  291.                             var lien = $(this).attr('href');
  292.                             console.log(lien);
  293.                             
  294.                             var $theRow = $(this).parent().parent();
  295.                             swal({
  296.                                 title: t('Voulez-vous générer la Facture FNE ?'),
  297.                                 inputAttributes: {
  298.                                     autocapitalize: 'off'
  299.                                 },
  300.                                 buttons:{
  301.                                         cancel: t('Annuler'),
  302.                                         submit: {
  303.                                             text: t('Générer'),
  304.                                             value: 'submit'
  305.                                         }
  306.                                     }
  307.                                 
  308.                                 }
  309.                                 ).then((value) =>{
  310.                                     switch(value){
  311.                                         case 'submit':
  312.                                             toggleLoading();
  313.                                             //location.href="";
  314.                                             window.location.href = lien;
  315.                                             break;
  316.                                             
  317.                                             default:
  318.                                             swal(
  319.                                                 {
  320.                                                     title: t("Annulé!"),
  321.                                                     timer: 500
  322.                                                 }
  323.                                             );
  324.                                     }
  325.                                 }
  326.                                     
  327.                                 );
  328.                         });
  329.                         //Fin dialogue générer une facture FNE
  330.                     },
  331.                     error: function(jqXHR, textStatus, errorThrown ){
  332.                         toggleLoading();
  333.                         toggleMessage('error', 'Erreur survenue');
  334.                     }
  335.                 });
  336.             });
  337.             function actualiserTablePointParClient(){
  338.                 let lienUrlPointParClient = $urlPointParClient.text()+'/'+$client.val()+'/invoice/'+$dateDebut.val()+'/'+$dateFin.val();
  339.                 
  340.                 let lienImpression = $urlImprimerPointParClient.text()+'/'+$client.val()+'/invoice/'+$dateDebut.val()+'/'+$dateFin.val();
  341.                 $aBtnImprimerPointParClient.attr('href', lienImpression);
  342.                 
  343.                 toggleLoading();
  344.                 $.ajax({
  345.                         url: lienUrlPointParClient,
  346.                         method: 'GET',
  347.                         //processData: false,
  348.                         //contentType: false,
  349.                         success: function (data, textStatus, jqXHR) {
  350.                             toggleLoading();
  351.                             $contenuListeCommandeParClient.html(data);
  352.                             $('.my-data-table-special').DataTable(
  353.                                 {
  354.                                 "ordering": false,
  355.                             "lengthMenu": [[100, 50, 25, 10], [100, 50, 25, 10]],
  356.                             "pageLength": 10 
  357.                                 }
  358.                             );
  359.                             var $detailCommandeParClient = $('.detail-commande-par-client');
  360.  
  361.                             $detailCommandeParClient.click(function(){
  362.                                     var $idDeLaCommandeParClient = $(this).find('span.id-commande').text();
  363.                                     actualiserDetailCommandeParClient($idDeLaCommandeParClient);
  364.                                 });
  365.                         },
  366.                         error: function(jqXHR, textStatus, errorThrown ){
  367.                             toggleLoading();
  368.                             toggleMessage("error", "Une erreur s'est produite");
  369.                         }
  370.                     });
  371.             }
  372.             
  373.             $deleteItem.click(function(e){
  374.                 e.preventDefault();    
  375.                 var lien = $(this).attr('href');
  376.                 var $theRow = $(this).parent().parent();
  377.                 swal({
  378.                       title: t('Voulez-vous supprimer ?'),
  379.                       inputAttributes: {
  380.                         autocapitalize: 'off'
  381.                       },
  382.                       buttons:{
  383.                             cancel: t('Annuler'),
  384.                             submit: {
  385.                                 text: t('Supprimer'),
  386.                                 value: 'submit'
  387.                             }
  388.                         }
  389.                     
  390.                     }
  391.                      ).then((value) =>{
  392.                         switch(value){
  393.                             case 'submit':
  394.                                 toggleLoading();
  395.                                 $.ajax({
  396.                                     url: lien,
  397.                                     method: 'GET',
  398.                                     //processData: false,
  399.                                     //contentType: false,
  400.                                     success: function (data, textStatus, jqXHR) {
  401.                                         toggleLoading();
  402.                                         toggleMessage("success", "Ligne supprimée");
  403.                                         $theRow.remove();
  404.                                     },
  405.                                     error: function(jqXHR, textStatus, errorThrown ){
  406.                                         toggleLoading();
  407.                                         toggleMessage("error", "Une erreur s'est produite");
  408.                                     }
  409.                                 });
  410.                                 break;
  411.                                 
  412.                                 default:
  413.                                   swal(
  414.                                     {
  415.                                         title: t("Annulé!"),
  416.                                         timer: 500
  417.                                      }
  418.                                   );
  419.                         }
  420.                      }
  421.                         
  422.                      );
  423.             }); // fin dialog delete item    
  424.             // Début générer dialogue FNE
  425.             $itemGenererFne.click(function(e){
  426.                 e.preventDefault();    
  427.                 var lien = $(this).attr('href');
  428.                 console.log(lien);
  429.                 
  430.                 var $theRow = $(this).parent().parent();
  431.                 swal({
  432.                       title: t('Voulez-vous générer la Facture FNE ?'),
  433.                       inputAttributes: {
  434.                         autocapitalize: 'off'
  435.                       },
  436.                       buttons:{
  437.                             cancel: t('Annuler'),
  438.                             submit: {
  439.                                 text: t('Générer'),
  440.                                 value: 'submit'
  441.                             }
  442.                         }
  443.                     
  444.                     }
  445.                      ).then((value) =>{
  446.                         switch(value){
  447.                             case 'submit':
  448.                                 toggleLoading();
  449.                                 //location.href="";
  450.                                 window.location.href = lien;
  451.                                 break;
  452.                                 
  453.                                 default:
  454.                                   swal(
  455.                                     {
  456.                                         title: t("Annulé!"),
  457.                                         timer: 500
  458.                                      }
  459.                                   );
  460.                         }
  461.                      }
  462.                         
  463.                      );
  464.             }); //Fin dialogue génerér FNE
  465.             
  466.     
  467.     
  468.     $makePaiement.click(function(e){
  469.                 e.preventDefault();    
  470.                 var id = $(this).attr('id');
  471.                 
  472.                 id =  id.substring(14); //14 is "paymentTrigger" length
  473.                 
  474.                 var lien = $(this).attr('href');
  475.                 var $theRow = $(this).parent().parent()();
  476.                 var $modalContent = $('#cadreForm'+id).html();
  477.                 
  478.                 swal({
  479.                       title: $titreModalPaypal.text(),
  480.                       inputAttributes: {
  481.                         autocapitalize: 'off'
  482.                       },
  483.                       html: $modalContent
  484.                       ,
  485.                       buttons:{
  486.                             cancel: t('Annuler'),
  487.                             submit: {
  488.                                 text: t('Supprimer'),
  489.                                 value: 'submit'
  490.                             }
  491.                         }
  492.                     
  493.                     }
  494.                      ).then((value) =>{
  495.                         switch(value){
  496.                             case 'submit':
  497.                                 $.ajax({
  498.                                     url: lien,
  499.                                     method: 'GET',
  500.                                     //processData: false,
  501.                                     //contentType: false,
  502.                                     success: function (data, textStatus, jqXHR) {
  503.                                         toggleLoading();
  504.                                         toggleMessage("success", "Ligne supprimée");
  505.                                         $theRow.remove();
  506.                                         toggleLoading();
  507.                                     },
  508.                                     error: function(jqXHR, textStatus, errorThrown ){
  509.                                         toggleLoading();
  510.                                         toggleMessage("error", "Une erreur s'est produite");
  511.                                     }
  512.                                 });
  513.                                 break;
  514.                                 
  515.                                 default:
  516.                                   swal(
  517.                                     {
  518.                                         title: t("Annulé!"),
  519.                                         timer: 500
  520.                                      }
  521.                                   );
  522.                         }
  523.                      }
  524.                         
  525.                      );
  526.                 
  527.             });    
  528.             
  529.         });
  530.     </script>
  531. {% endblock javascripts  %}