templates/accounting/accounting_expense/index.html.twig line 1

Open in your IDE?
  1. {% extends 'base.html.twig' %}
  2. {% block title %}Dépenses | {{ parent() }}{% endblock %}
  3. {% block body %}
  4.     <div class="breadcrumb">
  5.         <h1 class="mr-2">Dépenses</h1>
  6.         <ul>
  7.             <li><a href="{{ path('default') }}">Accueil</a></li>
  8.             <li><a href="{{ path('accounting_expense_index') }}">Dépenses</a></li>
  9.             <li>{{ createdBy ? createdBy.username : 'Toutes les dépense' }}</li>
  10.         </ul>
  11.     </div>
  12.     <div class="separator-breadcrumb border-top"></div>
  13.     <div class="row mb-4">
  14.         <div class="col-md-12">
  15.             <a href="{{ path('accounting_expense_new') }}" onclick="$('.loader').addClass('is-active');" class="btn btn-primary"><i class="fa fa-plus"></i> Nouveau</a>
  16.             {% if is_granted('ROLE_ADMIN') %}
  17.                 <a href="#" class="btn btn-danger" onclick="javascript:actionByPathAndElts('{{path('accounting_expenses_selected_delete')}}')" id="delete-selected-btn"><i class="fa fa-trash"></i> Supprimer</a>
  18.             {% endif %}
  19.             {% if is_granted('ROLE_FONDATEUR') or app.user.isCanAprovedExpense %}
  20.                 {# <a href="#" class="btn btn-primary selected-btn" data-toggle="modal" data-target="#aproveModal"><i class="fa fa-check"></i> Approuver</a> #}
  21.                 <a href="#" class="btn btn-primary selected-btn" onclick="api_aprove();"><i class="fa fa-check"></i> Approuver</a>
  22.                 <a href="#" class="btn btn-warning selected-btn" onclick="api_cancel();"><i class="fa fa-times"></i> Annuler</a>
  23.             {% endif %}
  24.             <a href="#" class="btn btn-dark" data-toggle="modal" data-target="#reportExpenseModal"><i class="fa fa-search"></i> Imprimer</a>
  25.         </div>
  26.     </div>
  27.     <div class="row mb-4">
  28.         <div class="col-md-12 mb-4"
  29.             hx-post="{{ path('accounting_expense_searh_statistiques')}}"
  30.             hx-trigger="load delay:500ms"
  31.             hx-target="#search-statistiques" 
  32.             hx-indicator="#htmx-indicator-statistiques">
  33.             <span class="htmx-indicator text-danger" id="htmx-indicator-statistiques"> 
  34.                 <img src="{{ asset('spinner-3.gif') }}" width="20" />
  35.                 &nbsp;Recherche en cour... 
  36.             </span>
  37.             <div class="table-responsive" id="search-statistiques"></div>
  38.             <hr>
  39.             <div class="card text-left">
  40.                 <div class="card-body">
  41.                     {{ include('accounting/accounting_expense/_table.html.twig') }}
  42.                 </div>
  43.             </div>
  44.         </div>
  45.     </div>
  46.     <div class="modal fade" id="reportExpenseModal" role="dialog" aria-labelledby="reportExpenseModal" aria-hidden="true">
  47.         <div class="modal-dialog" role="document">
  48.             <div class="modal-content">
  49.                 <div class="modal-header">
  50.                     <h5 class="modal-title" id="reportExpenseModal_title">Imprimer</h5>
  51.                     <button class="close" type="button" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  52.                 </div>
  53.                 <form method="get" action="{{ path('accounting_expense_report_print') }}">
  54.                     <div class="modal-body">
  55.                         <div class="form-group">
  56.                             <label class="col-form-label" for="dateStart">Date début:</label>
  57.                             <input type="date" name="dateStart" class="form-control">
  58.                         </div>
  59.                         <div class="form-group">
  60.                             <label class="col-form-label" for="dateEnd">Date fin:</label>
  61.                             <input type="date" name="dateEnd" class="form-control">
  62.                         </div>
  63.                         <div class="form-group">
  64.                             <label class="col-form-label" for="checkout">Caisse:</label>
  65.                             <select class="form-control select" style="width: 100%" name="checkout" id="checkout">
  66.                                 <option value="0">Toutes les caisses</option>
  67.                                 {% for checkout in checkouts %}
  68.                                     <option value="{{ checkout.id }}">{{ checkout.label }}</option>
  69.                                 {% endfor %}
  70.                             </select>
  71.                         </div>
  72.                         <div class="form-group">
  73.                             <label class="col-form-label" for="accounting_expense_category">Catégorie:</label>
  74.                             <select class="form-control select" name="accounting_expense_category" id="accounting_expense_category" style="width: 100%">
  75.                                 <option value="0">Toutes les catégorie</option>
  76.                                 {% for accounting_expense_category in accounting_expense_categories %}
  77.                                     <option value="{{ accounting_expense_category.id }}">{{ accounting_expense_category.name }}</option>
  78.                                 {% endfor %}
  79.                             </select>
  80.                         </div>
  81.                     </div>
  82.                     <div class="modal-footer">
  83.                         <button class="btn btn-secondary" type="button" data-dismiss="modal">Annuler</button>
  84.                         <button class="btn btn-primary" type="submit">Valider</button>
  85.                     </div>
  86.                     <input type="hidden" name="isAproved" value="0" />
  87.                     <input type="hidden" name="isCanceled" value="0" />
  88.                     <input type="hidden" name="isSubmited" value="0" />
  89.                     <input type="hidden" name="isPaid" value="0" />
  90.                 </form>
  91.             </div>
  92.         </div>
  93.     </div>
  94.     <div class="modal fade" id="aproveModal" role="dialog" aria-labelledby="aproveModal" aria-hidden="true">
  95.         <div class="modal-dialog" role="document">
  96.             <div class="modal-content">
  97.                 <div class="modal-header">
  98.                     <h5 class="modal-title" id="aproveModal_title">Approuvé dépense</h5>
  99.                     <button class="close" type="button" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  100.                 </div>
  101.                 <form action="#">
  102.                     <div class="modal-body">
  103.                         <div class="form-group">
  104.                             <label class="col-form-label" for="amount">Caisse:</label>
  105.                             <select class="form-control" name="checkout" id="checkout" style="width: 100%">
  106.                                 {% for _checkout in checkouts %}
  107.                                     <option value="{{ _checkout.id }}">{{ _checkout.label }} - [{{ (_checkout.cashedIn - (_checkout.spent + _checkout.paid))|number_format(0, ',', ' ') }}]</option>
  108.                                 {% endfor %}
  109.                             </select>
  110.                         </div>
  111.                     </div>
  112.                     <div class="modal-footer">
  113.                         <button class="btn btn-secondary" type="button" data-dismiss="modal">Annuler</button>
  114.                         <button class="btn btn-primary" type="button" onclick="api_aprove();">Validé</button>
  115.                     </div>
  116.                 </form>
  117.             </div>
  118.         </div>
  119.     </div>
  120. {% endblock %}
  121. {% block javascripts %}
  122.     {{ parent() }}
  123.     <script>
  124.         function api_aprove() {
  125.             var elts = setSelected();
  126.             swalWithBootstrapButtons.fire({
  127.                 title: 'Êtes-vous sûr de bien vouloir effectuer cette action?',
  128.                 text: "Vous ne pourrez pas revenir en arrière!",
  129.                 icon: 'warning',
  130.                 showCancelButton: true,
  131.                 confirmButtonText: 'OUI',
  132.                 cancelButtonText: 'NON',
  133.                 reverseButtons: true,
  134.             }).then((result) => {
  135.                 if (result.isConfirmed) {
  136.                     $('.loader').addClass('is-active');
  137.                     axios.get('{{ path('api_accounting_expense_aprove') }}', {
  138.                     params: {
  139.                         entities: elts/*,
  140.                         checkout: $('#checkout').val()*/
  141.                     }
  142.                     }).then(function (response) {
  143.                         console.log(response.data);
  144.                         $('.loader').removeClass('is-active');
  145.                         if(response.data.code == 200){
  146.                             swalWithBootstrapButtons.fire({
  147.                                 title: 'Effectué!',
  148.                                 text: response.data.message,
  149.                                 icon: 'success',
  150.                                 showCancelButton: false,
  151.                                 confirmButtonText: 'OK'
  152.                             }).then((result) => {
  153.                                     if (result.isConfirmed) {
  154.                                         location.reload();
  155.                                     }
  156.                             });
  157.                         }else{
  158.                             swalWithBootstrapButtons.fire({
  159.                                 title: 'Echèc!',
  160.                                 text: response.data.message,
  161.                                 icon: 'warning',
  162.                                 showCancelButton: false,
  163.                                 confirmButtonText: 'OK'
  164.                             }).then((result) => {
  165.                                     if (result.isConfirmed) {
  166.                                         location.reload();
  167.                                     }
  168.                             });
  169.                         }
  170.                         console.log(response.data.message);
  171.                     }).catch(function(error) {
  172.                         console.log(error);
  173.                     });
  174.                 }else if (
  175.                     /* Read more about handling dismissals below */
  176.                     result.dismiss === Swal.DismissReason.cancel
  177.                 ) {
  178.                     swalWithBootstrapButtons.fire(
  179.                         'Annulé',
  180.                         'Votre enrégistrement est en sécurité:)',
  181.                         'error'
  182.                     )
  183.                 }
  184.             })
  185.         }
  186.         function api_cancel() {
  187.             var elts = setSelected();
  188.             swalWithBootstrapButtons.fire({
  189.                 title: 'Êtes-vous sûr de bien vouloir effectuer cette action?',
  190.                 text: "Vous ne pourrez pas revenir en arrière!",
  191.                 icon: 'warning',
  192.                 showCancelButton: true,
  193.                 confirmButtonText: 'OUI',
  194.                 cancelButtonText: 'NON',
  195.                 reverseButtons: true,
  196.             }).then((result) => {
  197.                 if (result.isConfirmed) {
  198.                     $('.loader').addClass('is-active');
  199.                     axios.get('{{ path('api_accounting_expense_cancel') }}', {
  200.                     params: {
  201.                         entities: elts/*,
  202.                         checkout: $('#checkout').val()*/
  203.                     }
  204.                     }).then(function (response) {
  205.                         console.log(response.data);
  206.                         $('.loader').removeClass('is-active');
  207.                         if(response.data.code == 200){
  208.                             swalWithBootstrapButtons.fire({
  209.                                 title: 'Effectué!',
  210.                                 text: response.data.message,
  211.                                 icon: 'success',
  212.                                 showCancelButton: false,
  213.                                 confirmButtonText: 'OK'
  214.                             }).then((result) => {
  215.                                     if (result.isConfirmed) {
  216.                                         location.reload();
  217.                                     }
  218.                             });
  219.                         }else{
  220.                             swalWithBootstrapButtons.fire({
  221.                                 title: 'Echèc!',
  222.                                 text: response.data.message,
  223.                                 icon: 'warning',
  224.                                 showCancelButton: false,
  225.                                 confirmButtonText: 'OK'
  226.                             }).then((result) => {
  227.                                     if (result.isConfirmed) {
  228.                                         location.reload();
  229.                                     }
  230.                             });
  231.                         }
  232.                         console.log(response.data.message);
  233.                     }).catch(function(error) {
  234.                         console.log(error);
  235.                     });
  236.                 }else if (
  237.                     /* Read more about handling dismissals below */
  238.                     result.dismiss === Swal.DismissReason.cancel
  239.                 ) {
  240.                     swalWithBootstrapButtons.fire(
  241.                         'Annulé',
  242.                         'Votre enrégistrement est en sécurité:)',
  243.                         'error'
  244.                     )
  245.                 }
  246.             })
  247.         }
  248.     </script>
  249. {% endblock %}