2
0

cms.compte.php 6.3 KB

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