2
0

prowebDossiers.class.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. class prowebDossiers
  3. {
  4. public static function getExcelById(int $_id)
  5. {
  6. db::query("SELECT * FROM " . DB_T_EXCEL_PROWEB_DOSSIERS . " WHERE id = :id");
  7. db::bind(':id', $_id);
  8. return db::single();
  9. }
  10. public static function all()
  11. {
  12. db::query("SELECT * FROM " . DB_T_DOSSIERS_PROWEB);
  13. return db::resultset();
  14. }
  15. public static function deleteExcel(int $_id)
  16. {
  17. $tmp = self::getExcelById($_id);
  18. file::delete($tmp["md5"]);
  19. db::query("DELETE FROM " . DB_T_EXCEL_PROWEB_DOSSIERS . " WHERE id = :id");
  20. db::bind(':id', $_id);
  21. try {
  22. db::execute();
  23. return TRUE;
  24. } catch (Exception $ex) {
  25. return FALSE;
  26. }
  27. }
  28. public static function checkExcel(array $_array)
  29. {
  30. $expectedValues = [
  31. 'exe_ref',
  32. 'prest_id',
  33. 'prest_lib',
  34. 'prest_lib2',
  35. 'catprest_id',
  36. 'catprest_lib',
  37. 'prest_period',
  38. 'prest_closed',
  39. 'doss_id',
  40. 'doss_lib',
  41. 'etdoss_id',
  42. 'etdoss_lib',
  43. 'doss_nb_inscrit',
  44. 'od_meyclub_subv',
  45. 'doss_partce',
  46. 'doss_partod',
  47. 'doss_montant_total',
  48. 'comm_ref'
  49. ];
  50. $firstEntry = $_array[0] ?? [];
  51. $missingValues = array_diff($expectedValues, $firstEntry);
  52. $extraValues = array_diff($firstEntry, $expectedValues);
  53. if (empty($missingValues) && empty($extraValues)) {
  54. return TRUE;
  55. } else {
  56. alert::recError("Les données présentes dans ce fichier ne correspondent pas avec l'attendu");
  57. if (!empty($missingValues)) {
  58. alert::recError("Clés manquantes : " . implode(', ', $missingValues) . "\n");
  59. }
  60. if (!empty($extraValues)) {
  61. alert::recError("Clés supplémentaires : " . implode(', ', $extraValues) . "\n");
  62. }
  63. return FALSE;
  64. }
  65. }
  66. public static function add(array $_array)
  67. {
  68. if (empty($_array)) {
  69. return false;
  70. }
  71. $placeholders = [];
  72. $params = [];
  73. foreach ($_array as $index => $entry) {
  74. if ($index > 0) {
  75. $placeholders[] = "(
  76. :id_$index, :exe_ref_$index, :prest_id_$index, :prest_lib_$index, :prest_lib2_$index,
  77. :catprest_id_$index, :catprest_lib_$index, :prest_period_$index, :prest_closed_$index,
  78. :doss_id_$index, :doss_lib_$index, :etdoss_id_$index, :etdoss_lib_$index,
  79. :doss_nb_inscrit_$index, :od_meyclub_subv_$index, :doss_partce_$index, :doss_partod_$index, :doss_montant_total_$index, :comm_ref_$index)";
  80. $params[":id_$index"] = $entry[1] . $entry[8];
  81. if (preg_match('/\b(\d{4})\b/', $entry[0], $match)) {
  82. $params[":exe_ref_$index"] = (int)$match[1];
  83. } else {
  84. $params[":exe_ref_$index"] = null;
  85. }
  86. $params[":prest_id_$index"] = !empty($entry[1]) ? (int)$entry[1] : null;
  87. $params[":prest_lib_$index"] = $entry[2];
  88. $params[":prest_lib2_$index"] = $entry[3];
  89. $params[":catprest_id_$index"] = !empty($entry[4]) ? (int)$entry[4] : null;
  90. $params[":catprest_lib_$index"] = $entry[5];
  91. $params[":prest_period_$index"] = $entry[6];
  92. $params[":prest_closed_$index"] = $entry[7];
  93. $params[":doss_id_$index"] = $entry[8];
  94. $params[":doss_lib_$index"] = $entry[9];
  95. $params[":etdoss_id_$index"] = $entry[10];
  96. $params[":etdoss_lib_$index"] = $entry[11];
  97. $params[":doss_nb_inscrit_$index"] = is_numeric($entry[12]) ? (int)$entry[12] : null;
  98. $params[":od_meyclub_subv_$index"] = $entry[13];
  99. $params[":doss_partce_$index"] = $entry[14];
  100. $params[":doss_partod_$index"] = $entry[15];
  101. $params[":doss_montant_total_$index"] = $entry[16];
  102. $params[":comm_ref_$index"] = $entry[17];
  103. }
  104. }
  105. $sql = "INSERT INTO " . DB_T_DOSSIERS_PROWEB . " (
  106. id, exe_ref, prest_id, prest_lib, prest_lib2,
  107. catprest_id, catprest_lib, prest_period, prest_closed,
  108. doss_id, doss_lib, etdoss_id, etdoss_lib,
  109. doss_nb_inscrit, od_meyclub_subv, doss_partce, doss_partod, doss_montant_total, comm_ref
  110. ) VALUES " . implode(", ", $placeholders) . "
  111. ON DUPLICATE KEY UPDATE
  112. exe_ref = VALUES(exe_ref),
  113. prest_id = VALUES(prest_id),
  114. prest_lib = VALUES(prest_lib),
  115. prest_lib2 = VALUES(prest_lib2),
  116. catprest_id = VALUES(catprest_id),
  117. catprest_lib = VALUES(catprest_lib),
  118. prest_period = VALUES(prest_period),
  119. prest_closed = VALUES(prest_closed),
  120. doss_id = VALUES(doss_id),
  121. doss_lib = VALUES(doss_lib),
  122. etdoss_id = VALUES(etdoss_id),
  123. etdoss_lib = VALUES(etdoss_lib),
  124. doss_nb_inscrit = VALUES(doss_nb_inscrit),
  125. od_meyclub_subv = VALUES(od_meyclub_subv),
  126. doss_partce = VALUES(doss_partce),
  127. doss_partod = VALUES(doss_partod),
  128. doss_montant_total = VALUES(doss_montant_total),
  129. comm_ref = VALUES(comm_ref)";
  130. db::query($sql);
  131. foreach ($params as $key => $value) {
  132. db::bind($key, $value);
  133. }
  134. try {
  135. db::execute();
  136. return TRUE;
  137. } catch (Exception $ex) {
  138. alert::recError("Erreur lors de l'importation des données : " . $ex->getMessage());
  139. if (debug::isFile("debug")) {
  140. alert::recError("Stack : " . $ex);
  141. }
  142. return FALSE;
  143. }
  144. }
  145. public static function getExcel()
  146. {
  147. db::query("SELECT * FROM " . DB_T_EXCEL . " ORDER BY id DESC LIMIT 0, 1");
  148. return db::single();
  149. }
  150. public static function downloadExcel(int $_id, string $_file)
  151. {
  152. $data = base64_decode(self::getExcelById($_id)["file"]);
  153. $fileTemp = fopen(DIR_TEMP . $_file, "w");
  154. file_put_contents(DIR_TEMP . $_file, $data);
  155. fclose($fileTemp);
  156. return DIR_TEMP . $_file;
  157. }
  158. }