2
0

cms.compte.php 6.5 KB

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