| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- <?php
- /**
- * Classe prowebDossiers
- *
- * Cette classe gère les opérations liées aux dossiers Proweb, telles que la récupération, l'ajout, la suppression et la vérification des données.
- */
- class prowebDossiers
- {
- /**
- * Récupère les informations d'un fichier Excel Proweb par son identifiant.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return array Informations du fichier Excel.
- */
- public static function getExcelById(int $_id)
- {
- db::query("SELECT * FROM " . DB_T_EXCEL_PROWEB_DOSSIERS . " WHERE id = :id");
- db::bind(':id', $_id);
- return db::single();
- }
- /**
- * Récupère tous les dossiers Proweb.
- *
- * @return array Liste des dossiers Proweb.
- */
- public static function all()
- {
- db::query("SELECT * FROM " . DB_T_DOSSIERS_PROWEB);
- return db::resultset();
- }
- /**
- * Supprime un fichier Excel Proweb par son identifiant.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return bool Succès ou échec de la suppression.
- */
- public static function deleteExcel(int $_id)
- {
- $tmp = self::getExcelById($_id);
- file::delete($tmp["md5"]);
- db::query("DELETE FROM " . DB_T_EXCEL_PROWEB_DOSSIERS . " WHERE id = :id");
- db::bind(':id', $_id);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $ex) {
- return FALSE;
- }
- }
- /**
- * Vérifie si les données d'un fichier Excel sont conformes aux attentes.
- *
- * @param array $_array Données du fichier Excel.
- * @return bool TRUE si les données sont conformes, FALSE sinon.
- */
- public static function checkExcel(array $_array)
- {
- $expectedValues = [
- 'exe_ref',
- 'prest_id',
- 'prest_lib',
- 'prest_lib2',
- 'catprest_id',
- 'catprest_lib',
- 'prest_period',
- 'prest_closed',
- 'doss_id',
- 'doss_lib',
- 'etdoss_id',
- 'etdoss_lib',
- 'doss_nb_inscrit',
- 'od_meyclub_subv',
- 'doss_partce',
- 'doss_partod',
- 'doss_montant_total',
- 'comm_ref',
- 'od_matricule',
- 'od_nom',
- 'od_prenom',
- 'hismo_date_crea'
- ];
- $firstEntry = $_array[0] ?? [];
- $missingValues = array_diff($expectedValues, $firstEntry);
- $extraValues = array_diff($firstEntry, $expectedValues);
- if (empty($missingValues) && empty($extraValues)) {
- return TRUE;
- } else {
- alert::recError("Les données présentes dans ce fichier ne correspondent pas avec l'attendu");
- if (!empty($missingValues)) {
- alert::recError("Clés manquantes : " . implode(', ', $missingValues) . "\n");
- }
- if (!empty($extraValues)) {
- alert::recError("Clés supplémentaires : " . implode(', ', $extraValues) . "\n");
- }
- return FALSE;
- }
- }
- /**
- * Ajoute des données provenant d'un fichier Excel dans la base de données.
- *
- * @param array $_array Données à ajouter.
- * @return bool TRUE en cas de succès, FALSE en cas d'échec.
- */
- public static function add(array $_array)
- {
- if (empty($_array)) {
- return false;
- }
- $placeholders = [];
- $params = [];
- foreach ($_array as $index => $entry) {
- if ($index > 0) {
- $placeholders[] = "(
- :id_$index, :exe_ref_$index, :prest_id_$index, :prest_lib_$index, :prest_lib2_$index,
- :catprest_id_$index, :catprest_lib_$index, :prest_period_$index, :prest_closed_$index,
- :doss_id_$index, :doss_lib_$index, :etdoss_id_$index, :etdoss_lib_$index,
- :doss_nb_inscrit_$index, :od_meyclub_subv_$index, :doss_partce_$index, :doss_partod_$index, :doss_montant_total_$index, :comm_ref_$index,
- :od_matricule_$index, :od_nom_$index, :od_prenom_$index, :hismo_date_crea_$index)";
- $params[":id_$index"] = $entry[1] . $entry[8];
- if (preg_match('/\b(\d{4})\b/', $entry[0], $match)) {
- $params[":exe_ref_$index"] = (int)$match[1];
- } else {
- $params[":exe_ref_$index"] = null;
- }
- $params[":prest_id_$index"] = !empty($entry[1]) ? (int)$entry[1] : null;
- $params[":prest_lib_$index"] = $entry[2];
- $params[":prest_lib2_$index"] = $entry[3];
- $params[":catprest_id_$index"] = !empty($entry[4]) ? (int)$entry[4] : null;
- $params[":catprest_lib_$index"] = $entry[5];
- $params[":prest_period_$index"] = $entry[6];
- $params[":prest_closed_$index"] = $entry[7];
- $params[":doss_id_$index"] = $entry[8];
- $params[":doss_lib_$index"] = $entry[9];
- $params[":etdoss_id_$index"] = $entry[10];
- $params[":etdoss_lib_$index"] = $entry[11];
- $params[":doss_nb_inscrit_$index"] = is_numeric($entry[12]) ? (int)$entry[12] : null;
- $params[":od_meyclub_subv_$index"] = $entry[13];
- $params[":doss_partce_$index"] = $entry[14];
- $params[":doss_partod_$index"] = $entry[15];
- $params[":doss_montant_total_$index"] = $entry[16];
- $params[":comm_ref_$index"] = $entry[17];
- $params[":od_matricule_$index"] = $entry[18];
- $params[":od_nom_$index"] = $entry[19];
- $params[":od_prenom_$index"] = $entry[20];
- $params[":hismo_date_crea_$index"] = $entry[21];
- }
-
- }
- $sql = "INSERT INTO " . DB_T_DOSSIERS_PROWEB . " (
- id, exe_ref, prest_id, prest_lib, prest_lib2,
- catprest_id, catprest_lib, prest_period, prest_closed,
- doss_id, doss_lib, etdoss_id, etdoss_lib,
- doss_nb_inscrit, od_meyclub_subv, doss_partce, doss_partod, doss_montant_total, comm_ref,
- od_matricule, od_nom, od_prenom, hismo_date_crea
- ) VALUES " . implode(", ", $placeholders) . "
- ON DUPLICATE KEY UPDATE
- exe_ref = VALUES(exe_ref),
- prest_id = VALUES(prest_id),
- prest_lib = VALUES(prest_lib),
- prest_lib2 = VALUES(prest_lib2),
- catprest_id = VALUES(catprest_id),
- catprest_lib = VALUES(catprest_lib),
- prest_period = VALUES(prest_period),
- prest_closed = VALUES(prest_closed),
- doss_id = VALUES(doss_id),
- doss_lib = VALUES(doss_lib),
- etdoss_id = VALUES(etdoss_id),
- etdoss_lib = VALUES(etdoss_lib),
- doss_nb_inscrit = VALUES(doss_nb_inscrit),
- od_meyclub_subv = VALUES(od_meyclub_subv),
- doss_partce = VALUES(doss_partce),
- doss_partod = VALUES(doss_partod),
- doss_montant_total = VALUES(doss_montant_total),
- comm_ref = VALUES(comm_ref),
- od_matricule = VALUES(od_matricule),
- od_nom = VALUES(od_nom),
- od_prenom = VALUES(od_prenom),
- hismo_date_crea = VALUES(hismo_date_crea)";
- db::query($sql);
- foreach ($params as $key => $value) {
- db::bind($key, $value);
- }
- try {
- db::execute();
- return TRUE;
- } catch (Exception $ex) {
- alert::recError("Erreur lors de l'importation des données : " . $ex->getMessage());
- if (debug::isFile("debug")) {
- alert::recError("Stack : " . $ex);
- }
- return FALSE;
- }
- }
- /**
- * Récupère les informations du dernier fichier Excel.
- *
- * @return array Informations du dernier fichier Excel.
- */
- public static function getExcel()
- {
- db::query("SELECT * FROM " . DB_T_EXCEL . " ORDER BY id DESC LIMIT 0, 1");
- return db::single();
- }
- /**
- * Télécharge un fichier Excel Proweb par son identifiant.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @param string $_file Nom du fichier temporaire.
- * @return string Chemin du fichier téléchargé.
- */
- public static function downloadExcel(int $_id, string $_file)
- {
- $data = base64_decode(self::getExcelById($_id)["file"]);
- $fileTemp = fopen(DIR_TEMP . $_file, "w");
- file_put_contents(DIR_TEMP . $_file, $data);
- fclose($fileTemp);
- return DIR_TEMP . $_file;
- }
- /**
- * Génère un lien vers les dossiers Proweb avec une date formatée.
- *
- * @return string Lien formaté vers les dossiers Proweb.
- */
- public static function getLinkProweb() {
- $date = new DateTime();
- $date->modify('-12 months');
- $dateFormatee = $date->format('d-m-Y');
- return str_replace('##DD-MM-YYYY##', $dateFormatee, PROWEB_DOSSIERS);
- }
- }
|