cms.compte.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. $jsonTarget = "/json.php?file=banque-lignes-" . core::getGet("id");
  3. if (debug::isFile("debug")) {
  4. debug::log(debug::getBadge($jsonTarget, "OUVRIR LE JSON : " . $jsonTarget), "JSON chargé en arrière plan");
  5. }
  6. ?>
  7. <header class="d-flex flex-column flex-md-row align-items-md-center p-3 bg-light ">
  8. <h2 class="bd-title" id="content">
  9. <span>Etat des comptes</span>
  10. </h2>
  11. <?php if (access::ifAccesss("compte-upload")) { ?>
  12. <div class="fix-container-button-nav">
  13. <a href="/?p=compte-upload&add=<?php echo core::getGet("id") ?>"><button type="submit" class="btn btn-outline-success btn-sm"><?php icon::getFont(["icon" => "bi bi-file-earmark-plus"]) ?> Charger un CSV</button></a>
  14. </div>
  15. <?php } ?>
  16. </header>
  17. <?php
  18. $banque = banque::getInitialCompte(core::getGet("id"));
  19. $etatCompte = banque::getEtatCompte(core::getGet("id"));
  20. echo core::filAriane(array(
  21. "current" => $banque["label"],
  22. "arbo" => array(
  23. "Comptes bancaires" => NULL,
  24. $banque["label"] => "/compte-" . core::getGet("id") . ".html"
  25. )
  26. ));
  27. $callout = [
  28. "type" => "info",
  29. "h4" => "Note",
  30. "p" => "La dernier import des données du compte a été réalisée le <span class=\"fw-bold\">" . core::convertDate(banque::lastRecord(core::getGet("id"))) . "</span> et à cette même date le solde était de <span class=\"fw-bold\">" . banque::getEuro($etatCompte["solde"]) . "</span>",
  31. ];
  32. callout::print($callout);
  33. ?>
  34. <div class="card">
  35. <div class="card-body">
  36. <h5 class="card-title">Rechercher une transaction</h5>
  37. <div class="d-flex align-items-center mb-3">
  38. <label for="minPrice" class="me-2">Entre</label>
  39. <input type="number" id="minPrice" class="form-control me-3" style="width: 150px;">
  40. <label for="maxPrice" class="me-2">et</label>
  41. <input type="number" id="maxPrice" class="form-control me-3" style="width: 150px;">
  42. <button id="filterButton" class="btn btn-primary ms-3">Filtrer</button>
  43. <button id="resetButton" class="btn btn-secondary ms-3">Réinitialiser</button>
  44. </div>
  45. </div>
  46. </div>
  47. <div>
  48. <table
  49. id="table"
  50. class="table-striped table-hover table-sm"
  51. data-toggle="table"
  52. data-show-footer="true"
  53. data-buttons-align="left"
  54. data-filter-control="true"
  55. data-flat="true"
  56. data-sort-name="num"
  57. data-sort-order="desc"
  58. data-show-export="true"
  59. data-pagination="true"
  60. data-side-pagination="client"
  61. data-page-size="25"
  62. data-page-list="[25, 50, 100, 250, all]"
  63. data-url="<?php echo $jsonTarget ?>">
  64. <thead>
  65. <tr>
  66. <th data-sortable="true" data-field="num" data-width="20">#</th>
  67. <th data-sortable="true" data-field="date" data-filter-control="input" data-width="160">Date</th>
  68. <th data-sortable="true" data-field="label" data-filter-control="input">Label</th>
  69. <th data-sortable="true" data-formatter="dataFormatter" data-field="debit" data-filter-control="input" data-width="150" data-footer-formatter="debitFormatter" data-filter-control-placeholder="Ex. 1.250,00 €">Débit</th>
  70. <th data-sortable="true" data-formatter="dataFormatter" data-field="credit" data-filter-control="input" data-width="150" data-footer-formatter="creditFormatter" data-filter-control-placeholder="Ex. 1.250,00 €">Crédit</th>
  71. <th data-sortable="true" data-formatter="dataFormatter" data-field="solde" data-filter-control="input" data-width="150" data-filter-control-placeholder="Ex. 1.250,00 €">Solde</th>
  72. </tr>
  73. </thead>
  74. </table>
  75. </div>
  76. <script>
  77. let euro = Intl.NumberFormat('de-DE', {
  78. style: 'currency',
  79. currency: 'EUR',
  80. });
  81. function dataFormatter(value) {
  82. return euro.format(value);
  83. }
  84. function debitFormatter(data) {
  85. var total = 0;
  86. data.forEach(function(row) {
  87. total += parseFloat(row.debit);
  88. });
  89. return parseFloat(total) === 0 ? euro.format(0.00) : euro.format(total.toFixed(2));
  90. }
  91. function creditFormatter(data) {
  92. var total = 0;
  93. data.forEach(function(row) {
  94. total += parseFloat(row.credit);
  95. });
  96. return parseFloat(total) === 0 ? euro.format(0.00) : euro.format(total.toFixed(2));
  97. }
  98. // Fonction pour filtrer par plage de prix
  99. function filterByPrice() {
  100. var minPrice = parseFloat(document.getElementById('minPrice').value) || -Infinity;
  101. var maxPrice = parseFloat(document.getElementById('maxPrice').value) || Infinity;
  102. // Récupérer toutes les données du tableau
  103. var allData = $('#table').bootstrapTable('getData');
  104. // Filtrer les données en fonction des valeurs min/max
  105. var filteredData = allData.filter(function(row) {
  106. var debit = parseFloat(row.debit) || 0;
  107. var credit = parseFloat(row.credit) || 0;
  108. // Vérifier si l'une des colonnes (débit ou crédit) est dans la plage
  109. return (debit >= minPrice && debit <= maxPrice) || (credit >= minPrice && credit <= maxPrice);
  110. });
  111. // Recharger le tableau avec les données filtrées
  112. $('#table').bootstrapTable('load', filteredData);
  113. }
  114. // Fonction pour réinitialiser le filtre et recharger toutes les données
  115. function resetFilter() {
  116. // Vider les champs de saisie
  117. document.getElementById('minPrice').value = '';
  118. document.getElementById('maxPrice').value = '';
  119. // Recharger toutes les données depuis l'URL d'origine
  120. $('#table').bootstrapTable('refresh');
  121. }
  122. // Appliquer le filtre lorsque l'utilisateur clique sur le bouton "Filtrer"
  123. document.getElementById('filterButton').addEventListener('click', filterByPrice);
  124. // Réinitialiser le filtre lorsque l'utilisateur clique sur le bouton "Réinitialiser"
  125. document.getElementById('resetButton').addEventListener('click', resetFilter);
  126. </script>