banque.class.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. class banque
  3. {
  4. public static function getAll()
  5. {
  6. db::query("SELECT "
  7. . "* "
  8. . "FROM " . DB_T_BANQUE_COMPTES );
  9. return db::resultset();
  10. }
  11. public static function menu()
  12. {
  13. banque::getAll();
  14. foreach (self::getAll() as $value) {
  15. core::elementMenu("compte-" . $value["id"], "/compte-" . $value["id"] . ".html", $value["label"], NULL, $value["icon"]);
  16. }
  17. }
  18. public static function lastArrayRecord(int $_id)
  19. {
  20. db::query("SELECT "
  21. . "* "
  22. . "FROM " . DB_T_BANQUE_LIGNES . " "
  23. . "WHERE " . DB_T_BANQUE_LIGNES . ".id_compte = :id "
  24. . "ORDER BY creer DESC "
  25. . "LIMIT 1");
  26. db::bind(':id', $_id);
  27. return db::single();
  28. }
  29. public static function lastRecord(int $_id)
  30. {
  31. db::query("SELECT "
  32. . "creer "
  33. . "FROM " . DB_T_BANQUE_LIGNES . " "
  34. . "WHERE " . DB_T_BANQUE_LIGNES . ".id_compte = :id "
  35. . "ORDER BY creer DESC "
  36. . "LIMIT 1");
  37. db::bind(':id', $_id);
  38. return db::single()["creer"];
  39. }
  40. public static function getInitial(int $_id)
  41. {
  42. $tmp = self::getInitialCompte($_id );
  43. $return = array(
  44. "num" => 0,
  45. "id" => 0,
  46. "date" => $tmp["solde_date"],
  47. "label" => "SOLDE CREDITEUR AU " . core::convertDate($tmp["solde_date"], FALSE),
  48. "debit" => 0,
  49. "credit" => 0,
  50. "solde" => $tmp["solde"],
  51. );
  52. return $return;
  53. }
  54. public static function getInitialCompte(int $_id)
  55. {
  56. db::query("SELECT "
  57. . "* "
  58. . "FROM " . DB_T_BANQUE_COMPTES . " "
  59. . "WHERE " . DB_T_BANQUE_COMPTES . ".id = :id");
  60. db::bind(':id', $_id);
  61. return db::single();
  62. }
  63. public static function getLignes(int $_id)
  64. {
  65. db::query("SELECT "
  66. . "ROW_NUMBER() OVER (ORDER BY id) num, "
  67. . "" . DB_T_BANQUE_LIGNES . ".id, "
  68. . "" . DB_T_BANQUE_LIGNES . ".date, "
  69. . "" . DB_T_BANQUE_LIGNES . ".label, "
  70. . "" . DB_T_BANQUE_LIGNES . ".debit, "
  71. . "" . DB_T_BANQUE_LIGNES . ".credit, "
  72. . "" . DB_T_BANQUE_LIGNES . ".solde "
  73. . "FROM " . DB_T_BANQUE_LIGNES . " "
  74. . "WHERE " . DB_T_BANQUE_LIGNES . ".id_compte = :id_compte");
  75. db::bind(':id_compte', $_id);
  76. return db::resultset();
  77. }
  78. public static function getEtatCompte(int $_id)
  79. {
  80. db::query("SELECT "
  81. . "" . DB_T_BANQUE_LIGNES . ".solde, "
  82. . "" . DB_T_BANQUE_LIGNES . ".date "
  83. . "FROM " . DB_T_BANQUE_LIGNES . " "
  84. . "WHERE " . DB_T_BANQUE_LIGNES . ".id_compte = :id_compte "
  85. . "ORDER BY " . DB_T_BANQUE_LIGNES . ".id DESC");
  86. db::bind(':id_compte', $_id);
  87. return db::single();
  88. }
  89. public static function getHistoriqueCSV()
  90. {
  91. db::query("SELECT "
  92. . "" . DB_T_FILES . ".id, "
  93. . "" . DB_T_FILES . ".name, "
  94. . "" . DB_T_FILES . ".size, "
  95. . "" . DB_T_FILES . ".creer, "
  96. . "CONCAT (" . DB_T_USER . ".prenom, ' ', " . DB_T_USER . ".nom) AS 'user' "
  97. . "FROM " . DB_T_FILES . " "
  98. . "INNER JOIN " . DB_T_USER . " ON " . DB_T_FILES . ".id_user = " . DB_T_USER . ".id "
  99. . "INNER JOIN " . DB_T_BANQUE_CSV . " ON " . DB_T_BANQUE_CSV . ".md5 = " . DB_T_FILES . ".id");
  100. return db::resultset();
  101. }
  102. public static function addMd5CSV(string $_md5, int $_id_compte)
  103. {
  104. db::query("INSERT INTO " . DB_T_BANQUE_CSV . " (md5, id_compte) VALUES (:md5, :id_compte)");
  105. db::bind(':md5', $_md5);
  106. db::bind(':id_compte', $_id_compte);
  107. try {
  108. db::execute();
  109. return TRUE;
  110. } catch (Exception $ex) {
  111. return FALSE;
  112. }
  113. }
  114. public static function findMd5(string $_md5)
  115. {
  116. db::query("SELECT "
  117. . "id "
  118. . "FROM " . DB_T_BANQUE_LIGNES . " "
  119. . "WHERE " . DB_T_BANQUE_LIGNES . ".md5 = :md5");
  120. db::bind(':md5', $_md5);
  121. if(empty(db::single()["id"])){
  122. return FALSE;
  123. } else {
  124. return TRUE;
  125. }
  126. return db::single()["id"];
  127. }
  128. public static function recordLigne(array $_array, int $_id){
  129. if(self::findMd5($_array["md5"]) == FALSE){
  130. db::query("INSERT INTO " . DB_T_BANQUE_LIGNES . " (id_compte, date, label, debit, credit, solde, md5) VALUES (:id_compte, :date, :label, :debit, :credit, :solde, :md5)");
  131. db::bind(':id_compte', $_id);
  132. db::bind(':date', $_array["date"]);
  133. db::bind(':label', $_array["label"]);
  134. db::bind(':debit', $_array["debit"]);
  135. db::bind(':credit', $_array["credit"]);
  136. db::bind(':solde', $_array["solde"]);
  137. db::bind(':md5', $_array["md5"]);
  138. try {
  139. db::execute();
  140. return TRUE;
  141. } catch (Exception $ex) {
  142. return FALSE;
  143. }
  144. }
  145. return FALSE;
  146. }
  147. public static function recordLignes(array $_array, int $_id){
  148. $z = 0;
  149. foreach ($_array as $values) {
  150. if(self::recordLigne($values, $_id) == TRUE){
  151. $z++;
  152. }
  153. }
  154. return $z;
  155. }
  156. public static function readCompte(array $_temp) {
  157. $data = [];
  158. if (!file_exists($_temp['tmp_name']) || !is_readable($_temp['tmp_name'])) {
  159. return false;
  160. }
  161. if (($handle = fopen($_temp['tmp_name'], 'r')) !== false) {
  162. $header = NULL;
  163. $a = -1;
  164. while (($row = fgetcsv($handle, 1000, ";")) !== false) {
  165. $a++;
  166. $convertedRow = array_map(function ($field) {
  167. return mb_convert_encoding($field, 'UTF-8', 'ISO-8859-1');
  168. }, $row);
  169. if ($header == NULL) {
  170. $header = TRUE;
  171. if(
  172. $convertedRow[0] != "Date" OR
  173. $convertedRow[1] != "Date de valeur" OR
  174. $convertedRow[2] != "Débit" OR
  175. $convertedRow[3] != "Crédit" OR
  176. $convertedRow[4] != "Libellé" OR
  177. $convertedRow[5] != "Solde"
  178. ){
  179. ($convertedRow[0] != "Date") ? alert::recError("La 1er colonne doit se nommer Date") : "";
  180. ($convertedRow[1] != "Date de valeur") ? alert::recError("La 2em colonne doit se nommer Date de valeur") : "";
  181. ($convertedRow[2] != "Débit") ? alert::recError("La 3em colonne doit se nommer Débit") : "";
  182. ($convertedRow[3] != "Crédit") ? alert::recError("La 4em colonne doit se nommer Crédit") : "";
  183. ($convertedRow[4] != "Libellé") ? alert::recError("La 5em colonne doit se nommer Libellé") : "";
  184. ($convertedRow[5] != "Solde") ? alert::recError("La 6em colonne doit se nommer Solde") : "";
  185. alert::recError("Le fichier " . $_temp['name'] . " n'est pas un CSV de la banque Crédit Mutuel.");
  186. return FALSE;
  187. }
  188. } else {
  189. $data[$a]["date"] = self::convertToMySqlDate($convertedRow[0]);
  190. $data[$a]["label"] = $convertedRow[4];
  191. $data[$a]["debit"] = self::transformerChaineEnNombre($convertedRow[2]);
  192. $data[$a]["credit"] = self::transformerChaineEnNombre($convertedRow[3]);
  193. $data[$a]["solde"] = self::transformerChaineEnNombre($convertedRow[5], TRUE);
  194. $data[$a]["md5"] = md5($data[$a]["date"].$data[$a]["debit"].$data[$a]["credit"].$data[$a]["solde"]);
  195. }
  196. }
  197. fclose($handle);
  198. }
  199. return $data;
  200. }
  201. public static function transformerChaineEnNombre(string $_chaine, bool $_negatif = FALSE) {
  202. // Supprimer les tirets "-"
  203. if($_negatif == 0) {
  204. $chaine = str_replace('-', '', $_chaine);
  205. } else {
  206. $chaine = $_chaine;
  207. }
  208. // Remplacer les virgules par des points
  209. $chaine = str_replace(',', '.', $chaine);
  210. // Convertir en nombre à virgule flottante (float)
  211. $nombre = (float) $chaine;
  212. return $nombre;
  213. }
  214. public static function convertToMySqlDate($date) {
  215. // Crée un objet DateTime à partir de la date au format dd/mm/yyyy
  216. $dateTime = DateTime::createFromFormat('d/m/Y', $date);
  217. // Vérifie si la date est valide
  218. if ($dateTime === false) {
  219. return false; // Retourne false si la date n'est pas valide
  220. }
  221. // Retourne la date au format MySQL (yyyy-mm-dd)
  222. return $dateTime->format('Y-m-d');
  223. }
  224. public static function getEuro(float $_decimal){
  225. return number_format($_decimal, 2, ',', '.') . " €";
  226. }
  227. public static function fileName(string $_compte){
  228. $n = explode(" ", $_compte);
  229. return $n[1].$n[2];
  230. }
  231. }