2
0

cms.compte.php 6.6 KB

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