| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007 |
- <?php
- /**
- * Classe de gestion des salariés.
- *
- * Cette classe fournit des méthodes pour gérer les données des salariés,
- * y compris les opérations sur les fichiers Excel et les interactions avec la base de données.
- */
- class salaries
- {
- /**
- * Nettoie la table temporaire des salariés.
- */
- public static function cleanTmp()
- {
- // Nettoyage de la table temporaire des salairés
- db::query("TRUNCATE " . DB_T_TEMP_SALARIES);
- db::execute();
- }
- /**
- * Récupère un salarié par son identifiant local.
- *
- * @param int $_idLocal Identifiant local du salarié.
- * @return array|null Les données du salarié ou NULL si non trouvé.
- */
- public static function getSalarieByidLocal(int $_idLocal)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT * FROM " . DB_T_SALARIES . " WHERE idLocal = :idLocal");
- db::bind(':idLocal', $_idLocal);
- return db::single();
- }
- /**
- * Récupère un salarié par son identifiant de connexion.
- *
- * @param string $_loginId Identifiant de connexion du salarié.
- * @return array|null Les données du salarié ou NULL si non trouvé.
- */
- public static function getSalarieByLoginId(string $_loginId)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT * FROM " . DB_T_SALARIES . " WHERE loginId = :loginId");
- db::bind(':loginId', $_loginId);
- return db::single();
- }
- /**
- * Récupère un salarié par son identifiant unique.
- *
- * @param int $_id Identifiant unique du salarié.
- * @return array|null Les données du salarié ou NULL si non trouvé.
- */
- public static function getSalarieById(int $_id)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT * FROM " . DB_T_SALARIES . " WHERE id = :id");
- db::bind(':id', $_id);
- return db::single();
- }
- /**
- * Récupère la liste de tous les salariés.
- *
- * @return array La liste des salariés.
- */
- public static function getSalaries()
- {
- db::query("SELECT "
- . "idLocal, "
- . "loginId, "
- . "nom, "
- . "prenom, "
- . "sexe, "
- . "contrat, "
- . "IF(contrat = 1, 'Actif', 'Désactivé') AS texteContrat, "
- . "DATE_FORMAT(jourEntree, '%Y-%m-%d') AS jourEntree, "
- . "DATE_FORMAT(repriseContrat, '%Y-%m-%d') AS repriseContrat, "
- . "DATE_FORMAT(jourSortie, '%Y-%m-%d') AS jourSortie, "
- . "sel, "
- . "lieu, "
- . "cree, "
- . "maj, "
- . "IF(actif = 1, 'Actif', 'Désactivé') AS texteActif, "
- . "actif "
- . "FROM " . DB_T_SALARIES);
- return db::resultset();
- }
- /**
- * Récupère l'identifiant du dernier fichier Excel.
- *
- * @return int Identifiant du dernier fichier Excel.
- */
- public static function lastExcel()
- {
- db::query("SELECT MAX(id) AS id FROM " . DB_T_EXCEL);
- return db::single()["id"];
- }
- /**
- * Récupère l'identifiant du dernier fichier Excel destiné au SFTP.
- *
- * @return int Identifiant du dernier fichier Excel pour le SFTP.
- */
- public static function lastExcelForSFTP()
- {
- db::query("SELECT MAX(id) AS id FROM " . DB_T_EXCEL . " WHERE forSFTP IS NOT NULL");
- return db::single()["id"];
- }
- /**
- * Récupère le hash MD5 d'un fichier Excel par son identifiant.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return string Le hash MD5 du fichier Excel.
- */
- public static function getExcelMd5(int $_id)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT md5 FROM " . DB_T_EXCEL . " WHERE id = :id");
- db::bind(':id', $_id);
- return db::single()["md5"];
- }
- /**
- * Insère un fichier Excel dans la base de données.
- *
- * @param array $_data Données du fichier Excel à insérer.
- * @return bool TRUE si l'insertion a réussi, FALSE sinon.
- */
- public static function insertExcel(array $_data)
- {
- db::query("INSERT INTO " . DB_T_EXCEL . " (nbSalaries, md5, json, dateData, id_user) VALUES (:nbSalaries, :md5, :json, :dateData, :id_user)");
- db::bind(':nbSalaries', $_data["nbSalaries"]);
- db::bind(':dateData', $_data["date"]);
- db::bind(':md5', $_data["md5File"]);
- db::bind(':json', base64_encode($_data["json"]));
- db::bind(':id_user', session::getId());
- try {
- db::execute();
- return TRUE;
- } catch (Exception $ex) {
- return FALSE;
- }
- }
- /**
- * Récupère les données JSON d'un fichier Excel pour le SFTP.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return array Les données JSON du fichier Excel.
- */
- public static function getExcelJsonForSFTP(int $_id)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT forSFTP, md5forSFTP, createForSFTP, contratForSFTP FROM " . DB_T_EXCEL . " WHERE id = :id");
- db::bind(':id', $_id);
- return db::single();
- }
- /**
- * Supprime les données JSON d'un fichier Excel pour le SFTP.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return bool TRUE si la suppression a réussi, FALSE sinon.
- */
- public static function deleteExcelJsonForSFTP(int $_id)
- {
- db::query("UPDATE " . DB_T_EXCEL . " SET "
- . "createForSFTP = NULL "
- . "WHERE id = :id");
- db::bind(':id', $_id);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Récupère les données de transfert JSON d'un fichier Excel pour le SFTP.
- *
- * @param string $_md5 Hash MD5 du fichier Excel.
- * @return string Les données de transfert JSON.
- */
- public static function getExcelJsonTransferForSFTP(string $_md5)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT transfertForSFTP FROM " . DB_T_EXCEL . " WHERE md5forSFTP = :md5forSFTP");
- db::bind(':md5forSFTP', $_md5);
- return db::single()["transfertForSFTP"];
- }
- /**
- * Récupère les données JSON d'un fichier Excel par son identifiant.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return string Les données JSON décodées.
- */
- public static function getExcelJson(int $_id)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT json FROM " . DB_T_EXCEL . " WHERE id = :id");
- db::bind(':id', $_id);
- return base64_decode(db::single()["json"]);
- }
- /**
- * Récupère le nom d'un fichier Excel par son identifiant.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return string Le nom du fichier Excel.
- */
- public static function getExcelName(int $_id)
- {
- // Récupération des données de l'excel au format Json
- db::query("SELECT
- " . DB_T_EXCEL . ".md5,
- " . DB_T_FILES . ".name
- FROM " . DB_T_EXCEL . "
- INNER JOIN " . DB_T_FILES . " ON " . DB_T_EXCEL . ".md5 = " . DB_T_FILES . ".id
- WHERE " . DB_T_EXCEL . ".id = :id");
- db::bind(':id', $_id);
- return db::single()["name"];
- }
- /**
- * Met à jour l'état "en cours" d'un fichier Excel.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @param int $_action Action à effectuer (1 pour activer, 0 pour désactiver).
- * @return bool TRUE si la mise à jour a réussi, FALSE sinon.
- */
- public static function excelUpdateInProgress(int $_id, int $_action = 1)
- {
- db::query("UPDATE
- " . DB_T_EXCEL . "
- SET inProgress = :inProgress
- WHERE id = :id");
- db::bind(':inProgress', $_action);
- db::bind(':id', $_id);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Supprime un fichier Excel par son identifiant.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return bool TRUE si la suppression a réussi, FALSE sinon.
- */
- public static function delete_excel(int $_id)
- {
- db::query("DELETE FROM " . DB_T_EXCEL . " WHERE id = :id");
- db::bind(':id', $_id);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Récupère les informations du fichier Excel actuellement en cours de traitement.
- *
- * @return array|null Les informations du fichier Excel en cours ou NULL si aucun.
- */
- public static function excelGetInProgress()
- {
- db::query("SELECT
- " . DB_T_EXCEL . ".id,
- " . DB_T_EXCEL . ".md5,
- " . DB_T_FILES . ".name
- FROM " . DB_T_EXCEL . "
- INNER JOIN " . DB_T_FILES . " ON " . DB_T_EXCEL . ".md5 = " . DB_T_FILES . ".id
- WHERE " . DB_T_EXCEL . ".inProgress = 1");
- return db::single();
- }
- /**
- * Récupère les données JSON d'un fichier Excel par son identifiant sous forme de tableau.
- *
- * @param int $_id Identifiant du fichier Excel.
- * @return array Les données JSON décodées sous forme de tableau.
- */
- public static function getExcelArray(int $_id)
- {
- return json_decode(self::getExcelJson($_id));
- }
- /**
- * Convertit une ligne de données Excel en un format compatible avec la base de données MySQL.
- * @param array $_value Ligne de données Excel.
- * @return array Données formatées pour MySQL.
- */
- public static function excelToMysql(array $_value)
- {
- if ($_value[4] == "Actif") {
- $_value[4] = 1;
- } else {
- $_value[4] = 0;
- }
- return array(
- "idLocal" => $_value[0],
- "loginId" => $_value[7],
- "nom" => core::cleanAccent($_value[1]),
- "prenom" => core::cleanAccent($_value[2]),
- "sexe" => $_value[3],
- "contrat" => $_value[4],
- "jourEntree" => $_value[5],
- "lieu" => core::cleanAccent($_value[6]),
- "actif" => 1
- );
- }
- /**
- * Insère les données des salariés temporaires dans la table temporaire.
- *
- * @param string $_excel Identifiant du fichier Excel associé.
- */
- public static function createTmp(string $_excel)
- {
- db::query("SELECT idLocal, loginId, nom, prenom, sexe, contrat, jourEntree, lieu, actif FROM " . DB_T_SALARIES);
- $row = db::resultset();
- if (!empty($row)) {
- foreach ($row as $salaries) {
- db::query("INSERT INTO " . DB_T_TEMP_SALARIES . " (idLocal, loginId, nom, prenom, sexe, contrat, jourEntree, lieu, actif, new, excel) "
- . "VALUES (:idLocal, :loginId, :nom, :prenom, :sexe, :contrat, :jourEntree, :lieu, :actif, :new, :excel)");
- db::bind(':idLocal', $salaries["idLocal"]);
- db::bind(':loginId', $salaries["loginId"]);
- db::bind(':nom', $salaries["nom"]);
- db::bind(':prenom', $salaries["prenom"]);
- db::bind(':sexe', $salaries["sexe"]);
- db::bind(':contrat', $salaries["contrat"]);
- db::bind(':jourEntree', $salaries["jourEntree"]);
- db::bind(':lieu', $salaries["lieu"]);
- db::bind(':actif', 0);
- db::bind(':new', 0);
- db::bind(':excel', $_excel);
- db::execute();
- }
- }
- }
- /**
- * Met à jour les salariés inactifs dans la table temporaire.
- *
- * @return bool TRUE si la mise à jour a réussi, FALSE sinon.
- */
- public static function updateInactiveTempSalarie()
- {
- db::query("UPDATE " . DB_T_TEMP_SALARIES . " SET "
- . "log = :log "
- . "WHERE actif = :actif");
- db::bind(':log', "DISABLE");
- db::bind(':actif', 0);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Met à jour les données JSON d'un fichier Excel.
- *
- * @param array $_json Données JSON à mettre à jour.
- * @return bool TRUE si la mise à jour a réussi, FALSE sinon.
- */
- public static function updateJsonExcel(array $_json)
- {
- db::query("UPDATE " . DB_T_EXCEL . " SET "
- . "goMysql = current_timestamp(), "
- . "log = :log "
- . "WHERE id = :id");
- db::bind(':log', $_json["json"]);
- db::bind(':id', $_json["excel"]);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Met à jour les données temporaires des salariés.
- *
- * @param array $_new_salaries Les nouvelles données des salariés.
- * @param string $_excel Identifiant du fichier Excel associé.
- * @return bool TRUE si la mise à jour a réussi, FALSE sinon.
- */
- public static function update_temp_salaries(array $_new_salaries, string $_excel)
- {
- $cp["INSERT"]["SUCCESS"] = 0;
- $cp["INSERT"]["ERROR"] = 0;
- $cp["UPDATE"]["SUCCESS"] = 0;
- $cp["UPDATE"]["ERROR"] = 0;
- $changeStatutContrat = NULL;
- foreach ($_new_salaries as $key => $value) {
- $sql = $change = NULL;
- if ($key > 0) {
- $tmp = self::excelToMysql($value);
- if (!is_int($tmp["idLocal"])) {
- alert::recError("Une valeur dans le fichier n'est pas conforme à l'attendu (Ligne " . $key . ")");
- self::cleanTmp();
- self::excelUpdateInProgress(self::lastExcel(), 0);
- return FALSE;
- }
- $salarieByidLocal = self::getSalarieByidLocal($tmp["idLocal"]);
- if (isset($salarieByidLocal["idLocal"])) {
- $tmp_sql = "";
- if ($tmp["loginId"] != $salarieByidLocal["loginId"]) {
- $tmp_sql .= "loginId = :loginId, ";
- $change = 1;
- }
- if ($tmp["contrat"] != $salarieByidLocal["contrat"]) {
- $tmp_sql .= "contrat = :contrat, ";
- $change = 1;
- // Indentifier les cas d'arrêt ou de reprise de contrat
- if ($tmp["contrat"] == 0 and $salarieByidLocal["contrat"] == 1) {
- $changeStatutContrat[$salarieByidLocal["idLocal"]] = "end";
- } else {
- $changeStatutContrat[$salarieByidLocal["idLocal"]] = "start";
- }
- // Indentifier les cas d'arrêt ou de reprise de contrat
- }
- if ($tmp["lieu"] != $salarieByidLocal["lieu"]) {
- $tmp_sql .= "lieu = :lieu, ";
- $change = 1;
- }
- if ($tmp["actif"] != $salarieByidLocal["actif"]) {
- $change = 1;
- } else {
- $forSFTP["actif"] = NULL;
- }
- $tmp_sql .= "actif = :actif, ";
- if ($change == 1) {
- db::query($sql = "UPDATE " . DB_T_TEMP_SALARIES . " SET " . $tmp_sql . " log = :log WHERE idLocal = :idLocal");
- $log = NULL;
- if ($tmp["loginId"] != $salarieByidLocal["loginId"]) {
- db::bind(':loginId', $tmp["loginId"]);
- if ($log == "") {
- $log .= "UPDATE ";
- }
- $log .= "loginId ";
- }
- if ($tmp["contrat"] != $salarieByidLocal["contrat"]) {
- db::bind(':contrat', $tmp["contrat"]);
- if ($log == "") {
- $log .= "UPDATE ";
- }
- $log .= "contrat ";
- }
- if ($tmp["lieu"] != $salarieByidLocal["lieu"]) {
- db::bind(':lieu', $tmp["lieu"]);
- if ($log == "") {
- $log .= "UPDATE ";
- }
- $log .= "lieu ";
- }
- if ($tmp["actif"] != $salarieByidLocal["actif"]) {
- if ($log == "") {
- $log .= "UPDATE ";
- }
- $log .= "actif ";
- }
- db::bind(':actif', 1);
- if ($change == 1) {
- db::bind(':log', $log);
- } else {
- db::bind(':log', NULL);
- }
- db::bind(':idLocal', $tmp["idLocal"]);
- try {
- db::execute();
- $cp["UPDATE"]["SUCCESS"]++;
- } catch (Exception $ex) {
- $cp["UPDATE"]["ERROR"]++;
- }
- } else {
- db::query("UPDATE " . DB_T_TEMP_SALARIES . " SET actif = :actif WHERE idLocal = :idLocal");
- db::bind(':actif', 1);
- db::bind(':idLocal', $tmp["idLocal"]);
- db::execute();
- }
- } else {
- db::query("INSERT INTO " . DB_T_TEMP_SALARIES . " (idLocal, loginId, nom, prenom, sexe, contrat, jourEntree, lieu, actif, new, excel, log) "
- . "VALUES (:idLocal, :loginId, :nom, :prenom, :sexe, :contrat, :jourEntree, :lieu, :actif, :new, :excel, :log)");
- db::bind(':idLocal', $tmp["idLocal"]);
- db::bind(':loginId', $tmp["loginId"]);
- db::bind(':nom', $tmp["nom"]);
- db::bind(':prenom', $tmp["prenom"]);
- db::bind(':sexe', $tmp["sexe"]);
- db::bind(':contrat', $tmp["contrat"]);
- db::bind(':jourEntree', $tmp["jourEntree"]);
- db::bind(':lieu', $tmp["lieu"]);
- db::bind(':actif', 1);
- db::bind(':new', 1);
- db::bind(':excel', $_excel);
- db::bind(':log', "INSERT");
- try {
- db::execute();
- $cp["INSERT"]["SUCCESS"]++;
- } catch (Exception $ex) {
- $cp["INSERT"]["ERROR"]++;
- }
- }
- }
- }
- ($changeStatutContrat != NULL) ? self::recContratForSFTP($_excel, $changeStatutContrat) : "";
- if ($cp["INSERT"]["ERROR"] != 0 or $cp["INSERT"]["ERROR"] != 0) {
- alert::recError("Une erreur s'est produite lors de la mise en cache.");
- return TRUE;
- } else {
- alert::recSuccess("La mise en cache a été réalisée avec succès.");
- return TRUE;
- }
- }
- /**
- * Enregistre les changements de contrat pour le SFTP.
- *
- * @param int $_idExcel Identifiant du fichier Excel.
- * @param array|null $_data Données des changements de contrat.
- * @return bool TRUE si l'enregistrement a réussi, FALSE sinon.
- */
- private static function recContratForSFTP(int $_idExcel, ?array $_data)
- {
- db::query("UPDATE " . DB_T_EXCEL . " SET "
- . "contratForSFTP = :contratForSFTP "
- . "WHERE id = :id");
- db::bind(':contratForSFTP', json_encode($_data));
- db::bind(':id', $_idExcel);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Met à jour les données des salariés à partir d'un fichier Excel.
- *
- * @param int $_excel Identifiant du fichier Excel.
- */
- public static function updateSalaries(int $_excel)
- {
- $cp["INSERT"]["SUCCESS"] = 0;
- $cp["INSERT"]["ERROR"] = 0;
- $cp["DISABLE"]["SUCCESS"] = 0;
- $cp["DISABLE"]["ERROR"] = 0;
- $cp["UPDATE"]["SUCCESS"] = 0;
- $cp["UPDATE"]["ERROR"] = 0;
- $cp["forSFTP"] = 0;
- $updateContrat = json_decode(self::getExcelJsonForSFTP($_excel)["contratForSFTP"], TRUE);
- $jourSortie = date("Y-m-d 00:00:00");
- $dateReprise = date("Y-m-d 00:00:00");
- db::query("SELECT idLocal, loginId, nom, prenom, sexe, contrat, jourEntree, lieu, actif, new, log FROM " . DB_T_TEMP_SALARIES);
- $row = db::resultset();
- if (!empty($row)) {
- foreach ($row as $key => $salaries) {
- $forSFTP = $reprise = NULL;
- if ($salaries["log"] == NULL) {
- $forSFTP["action"] = "valide";
- $forSFTP["idLocal"] = $salaries["idLocal"];
- $forSFTP["loginId"] = $salaries["loginId"];
- $forSFTP["contrat"] = $salaries["contrat"];
- $forSFTP["jourEntree"] = $salaries["jourEntree"];
- $forSFTP["jourSortie"] = NULL;
- $forSFTP["repriseContrat"] = NULL;
- $forSFTP["actif"] = 1;
- $SFTP[$cp["forSFTP"]++] = $forSFTP;
- } elseif ($salaries["log"] == "INSERT") {
- db::query("INSERT INTO " . DB_T_SALARIES . " (idLocal, loginId, nom, prenom, sexe, contrat, jourEntree, jourSortie, sel, lieu, actif) "
- . "VALUES (:idLocal, :loginId, :nom, :prenom, :sexe, :contrat, :jourEntree, :jourSortie, :sel, :lieu, :actif)");
- db::bind(':idLocal', $salaries["idLocal"]);
- db::bind(':loginId', $salaries["loginId"]);
- db::bind(':nom', $salaries["nom"]);
- db::bind(':prenom', $salaries["prenom"]);
- db::bind(':sexe', $salaries["sexe"]);
- db::bind(':contrat', $salaries["contrat"]);
- db::bind(':jourEntree', $salaries["jourEntree"]);
- db::bind(':jourSortie', NULL);
- db::bind(':sel', md5($salaries["idLocal"] . time() . rand(100000000000, 999999999999)));
- db::bind(':lieu', $salaries["lieu"]);
- db::bind(':actif', $salaries["actif"]);
- try {
- db::execute();
- $cp["INSERT"]["SUCCESS"]++;
- } catch (Exception $ex) {
- $cp["INSERT"]["ERROR"]++;
- }
- $forSFTP["action"] = "insert";
- $forSFTP["idLocal"] = $salaries["idLocal"];
- $forSFTP["loginId"] = $salaries["loginId"];
- $forSFTP["contrat"] = $salaries["contrat"];
- $forSFTP["jourEntree"] = $salaries["jourEntree"];
- $forSFTP["jourSortie"] = NULL;
- $forSFTP["repriseContrat"] = NULL;
- $forSFTP["actif"] = 1;
- $SFTP[$cp["forSFTP"]++] = $forSFTP;
- } elseif ($salaries["log"] == "DISABLE") {
- db::query("UPDATE " . DB_T_SALARIES . " SET "
- . "jourSortie = :jourSortie, "
- . "maj = CURRENT_TIMESTAMP(), "
- . "actif = :actif "
- . "WHERE idLocal = :idLocal");
- db::bind(':jourSortie', $jourSortie);
- db::bind(':actif', 0);
- db::bind(':idLocal', $salaries["idLocal"]);
- try {
- db::execute();
- $cp["DISABLE"]["SUCCESS"]++;
- } catch (Exception $ex) {
- $cp["DISABLE"]["ERROR"]++;
- }
- $forSFTP["action"] = "disabled";
- $forSFTP["idLocal"] = $salaries["idLocal"];
- $forSFTP["loginId"] = $salaries["loginId"];
- $forSFTP["contrat"] = $salaries["contrat"];
- $forSFTP["jourEntree"] = $salaries["jourEntree"];
- $forSFTP["jourSortie"] = $jourSortie;
- $forSFTP["repriseContrat"] = NULL;
- $forSFTP["actif"] = 0;
- $SFTP[$cp["forSFTP"]++] = $forSFTP;
- } else {
- $forSFTP["action"] = "update";
- $forSFTP["idLocal"] = $salaries["idLocal"];
- $forSFTP["loginId"] = $salaries["loginId"];
- $forSFTP["contrat"] = $salaries["contrat"];
- if (is_array($updateContrat) and array_key_exists($salaries["idLocal"], $updateContrat)) {
- if ($updateContrat[$salaries["idLocal"]] == "start") {
- $forSFTP["jourEntree"] = $dateReprise;
- $forSFTP["jourSortie"] = NULL;
- $forSFTP["repriseContrat"] = $dateReprise;
- $forSFTP["actif"] = 1;
- $reprise = $dateReprise;
- } elseif ($updateContrat[$salaries["idLocal"]] == "end") {
- $forSFTP["jourEntree"] = $salaries["jourEntree"];
- $forSFTP["jourSortie"] = $jourSortie;
- $forSFTP["repriseContrat"] = NULL;
- $forSFTP["actif"] = 0;
- }
- } else {
- $forSFTP["jourEntree"] = $salaries["jourEntree"];
- $forSFTP["jourSortie"] = NULL;
- $forSFTP["repriseContrat"] = NULL;
- $forSFTP["actif"] = $salaries["actif"];
- }
- $SFTP[$cp["forSFTP"]++] = $forSFTP;
- db::query("UPDATE " . DB_T_SALARIES . " SET "
- . "loginId = :loginId, "
- . "contrat = :contrat, "
- . "lieu = :lieu, "
- . "repriseContrat = :repriseContrat, "
- . "jourSortie = :jourSortie, "
- . "maj = CURRENT_TIMESTAMP(), "
- . "actif = :actif "
- . "WHERE idLocal = :idLocal");
- db::bind(':loginId', $salaries["loginId"]);
- db::bind(':contrat', $salaries["contrat"]);
- db::bind(':lieu', $salaries["lieu"]);
- db::bind(':repriseContrat', $reprise);
- db::bind(':jourSortie', NULL);
- db::bind(':actif', $salaries["actif"]);
- db::bind(':idLocal', $salaries["idLocal"]);
- try {
- db::execute();
- $cp["UPDATE"]["SUCCESS"]++;
- } catch (Exception $ex) {
- $cp["UPDATE"]["ERROR"]++;
- }
- }
- }
- if ($cp["INSERT"]["SUCCESS"] == 1) {
- alert::recSuccess("SUCCESS : " . $cp["INSERT"]["SUCCESS"] . " salarié traité.");
- } elseif ($cp["INSERT"]["SUCCESS"] > 1) {
- alert::recSuccess("SUCCESS : " . $cp["INSERT"]["SUCCESS"] . " salariés traités.");
- }
- if ($cp["DISABLE"]["SUCCESS"] == 1) {
- alert::recSuccess("DISABLE : " . $cp["DISABLE"]["SUCCESS"] . " salarié traité.");
- } elseif ($cp["DISABLE"]["SUCCESS"] > 1) {
- alert::recSuccess("DISABLE : " . $cp["DISABLE"]["SUCCESS"] . " salariés traités.");
- }
- if ($cp["UPDATE"]["SUCCESS"] == 1) {
- alert::recSuccess("UPDATE : " . $cp["UPDATE"]["SUCCESS"] . " salarié traité.");
- } elseif ($cp["UPDATE"]["SUCCESS"] > 1) {
- alert::recSuccess("UPDATE : " . $cp["UPDATE"]["SUCCESS"] . " salariés traités.");
- }
- if ($cp["INSERT"]["ERROR"] == 1) {
- alert::recSuccess("SUCCESS : " . $cp["INSERT"]["SUCCESS"] . " salarié non traité.");
- } elseif ($cp["INSERT"]["ERROR"] > 1) {
- alert::recSuccess("SUCCESS : " . $cp["INSERT"]["SUCCESS"] . " salariés non traités.");
- }
- if ($cp["DISABLE"]["ERROR"] == 1) {
- alert::recSuccess("DISABLE : " . $cp["DISABLE"]["SUCCESS"] . " salarié non traité.");
- } elseif ($cp["DISABLE"]["ERROR"] > 1) {
- alert::recSuccess("DISABLE : " . $cp["DISABLE"]["SUCCESS"] . " salariés non traités.");
- }
- if ($cp["UPDATE"]["ERROR"] == 1) {
- alert::recSuccess("UPDATE : " . $cp["UPDATE"]["SUCCESS"] . " salarié non traité.");
- } elseif ($cp["UPDATE"]["ERROR"] > 1) {
- alert::recSuccess("UPDATE : " . $cp["UPDATE"]["SUCCESS"] . " salariés non traités.");
- }
- (self::recForSFTP($SFTP, $_excel)) ? alert::recSuccess("Les données d'exportation pour ProWeb ont été enregistrées") : alert::recError("Les données d'exportation pour ProWeb n'ont pas pu être enregistrées");
- }
- }
- /**
- * Enregistre les données pour le SFTP.
- *
- * @param array $_array Données à enregistrer.
- * @param int $_idExcel Identifiant du fichier Excel.
- * @return bool TRUE si l'enregistrement a réussi, FALSE sinon.
- */
- private static function recForSFTP(array $_array, int $_idExcel)
- {
- $json = json_encode($_array);
- db::query("UPDATE " . DB_T_EXCEL . " SET "
- . "forSFTP = :forSFTP ,"
- . "md5forSFTP = :md5forSFTP "
- . "WHERE id = :id");
- db::bind(':forSFTP', $json);
- db::bind(':md5forSFTP', md5($json));
- db::bind(':id', $_idExcel);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Crée un rapport des modifications des salariés à partir de la table temporaire.
- *
- * Cette méthode interroge la table temporaire des salariés pour récupérer les enregistrements
- * ayant un champ 'log' non nul, indiquant une modification (INSERT, DISABLE ou UPDATE).
- * Elle construit un tableau contenant les détails de chaque modification, puis encode ce tableau en JSON.
- *
- * - Pour une action "INSERT", toutes les informations du salarié sont ajoutées.
- * - Pour une action "DISABLE", toutes les informations du salarié sont ajoutées.
- * - Pour une action "UPDATE", seules les informations modifiées sont ajoutées selon le contenu du champ 'log'.
- *
- * @return array|null Un tableau associatif contenant :
- * - 'json' : la liste des modifications encodée en JSON ou NULL si aucune modification.
- * - 'excel' : le nom du fichier Excel associé ou NULL si aucune modification.
- */
- public static function createRapport()
- {
- $log = NULL;
- db::query("SELECT idLocal, loginId, nom, prenom, contrat, jourEntree, lieu, excel, log FROM " . DB_T_TEMP_SALARIES . " WHERE log IS NOT NULL");
- $row = db::resultset();
- if ($row != NULL) {
- foreach ($row as $key => $salaries) {
- if ($salaries["log"] == "INSERT") {
- $log["json"][] = array(
- "action" => "INSERT",
- "excel" => $salaries["excel"],
- "idLocal" => $salaries["idLocal"],
- "loginId" => $salaries["loginId"],
- "nom" => $salaries["nom"],
- "prenom" => $salaries["prenom"],
- "jourEntree" => $salaries["jourEntree"],
- "contrat" => $salaries["contrat"],
- "lieu" => $salaries["lieu"]
- );
- } elseif ($salaries["log"] == "DISABLE") {
- $log["json"][] = array(
- "action" => "DISABLE",
- "excel" => $salaries["excel"],
- "idLocal" => $salaries["idLocal"],
- "loginId" => $salaries["loginId"],
- "nom" => $salaries["nom"],
- "prenom" => $salaries["prenom"],
- "jourEntree" => $salaries["jourEntree"],
- "contrat" => $salaries["contrat"],
- "lieu" => $salaries["lieu"]
- );
- } else {
- $tmp_log = array("action" => "UPDATE", "excel" => $salaries["excel"], "nom" => $salaries["nom"], "prenom" => $salaries["prenom"]);
- $tmp = explode(" ", $salaries["log"]);
- foreach ($tmp as $key => $value) {
- if ($key > 0) {
- switch ($value) {
- case "loginId":
- $tmp_log["loginId"] = $salaries["loginId"];
- break;
- case "contrat":
- $tmp_log["contrat"] = $salaries["contrat"];
- break;
- case "lieu":
- $tmp_log["lieu"] = $salaries["lieu"];
- break;
- }
- }
- }
- $log["json"][] = $tmp_log;
- }
- }
- $log["json"] = json_encode($log["json"]);
- $log["excel"] = $salaries["excel"];
- } else {
- $log["json"] = NULL;
- $log["excel"] = NULL;
- }
- return $log;
- }
- /**
- * Compte le nombre de salariés temporaires dans la base de données.
- *
- * Exécute une requête SQL pour compter tous les enregistrements dans la table temporaire des salariés
- * et retourne le nombre sous forme d'entier.
- *
- * @return int Nombre de salariés temporaires.
- */
- public static function countTmpSalaries()
- {
- db::query("SELECT COUNT(*) AS nb FROM " . DB_T_TEMP_SALARIES);
- return db::single()["nb"];
- }
- /**
- * Génère un fichier CSV pour l'export SFTP contenant les identifiants de connexion et les dates de sortie des salariés.
- *
- * Cette méthode effectue les étapes suivantes :
- * 1. Récupère le dernier fichier Excel destiné à l'export SFTP.
- * 2. Extrait et décode les données JSON du fichier Excel.
- * 3. Crée un fichier CSV nommé avec la date du jour et écrit l'en-tête.
- * 4. Parcourt chaque enregistrement salarié, traite et écrit ses données dans le CSV.
- * 5. Enregistre la date d'export pour le suivi SFTP.
- *
- * @throws Exception Si les données JSON pour le SFTP sont invalides.
- */
- public static function dataForSFTP()
- {
- $lastExcel = self::lastExcelForSFTP();
- $forSFTP = self::getExcelJsonForSFTP($lastExcel);
- $csv = "OD_" . date("d-m-Y") . ".csv";
- $tmpSFTP = fopen(SFTP_LOCAL . $csv, "w");
- fputcsv($tmpSFTP, array("loginId", "jourSortie"), ";");
- $decodedData = json_decode($forSFTP["forSFTP"], TRUE);
- if (is_array($decodedData)) {
- foreach ($decodedData as $salarie) {
- self::processSalarie($salarie, $tmpSFTP);
- }
- } else {
- throw new Exception("Données JSON invalides pour SFTP.");
- }
- self::recDateForSFTP($lastExcel);
- }
- /**
- * Traite un enregistrement salarié et écrit les champs sélectionnés dans un fichier CSV.
- *
- * Cette méthode vérifie si le tableau du salarié contient un 'loginId' non vide
- * et un champ 'jourSortie'. Si c'est le cas, elle écrit ces champs dans le fichier CSV
- * spécifié, en utilisant le point-virgule comme séparateur.
- *
- * @param array $salarie Tableau des données du salarié contenant au moins 'loginId' et 'jourSortie'.
- * @param resource $tmpSFTP Ressource du fichier où écrire la ligne CSV.
- *
- * @return void
- */
- private static function processSalarie($salarie, $tmpSFTP)
- {
- if (isset($salarie["loginId"]) && $salarie["loginId"] != "" && isset($salarie["jourSortie"])) {
- $tmpSalarie = [
- "loginId" => $salarie["loginId"],
- "jourSortie" => $salarie["jourSortie"]
- ];
- fputcsv($tmpSFTP, $tmpSalarie, ";");
- }
- }
- /**
- * Met à jour le champ 'createForSFTP' avec la date et l'heure actuelles pour un enregistrement Excel donné.
- *
- * Cette méthode définit la colonne 'createForSFTP' à la date et l'heure courantes dans la base de données
- * pour l'enregistrement identifié par l'ID Excel fourni. Retourne TRUE en cas de succès, FALSE sinon.
- *
- * @param int $_idExcel L'identifiant de l'enregistrement Excel à mettre à jour.
- * @return bool TRUE si la mise à jour a réussi, FALSE sinon.
- */
- private static function recDateForSFTP(int $_idExcel)
- {
- db::query("UPDATE " . DB_T_EXCEL . " SET "
- . "createForSFTP = CURRENT_TIMESTAMP() "
- . "WHERE id = :id");
- db::bind(':id', $_idExcel);
- try {
- db::execute();
- return TRUE;
- } catch (Exception $e) {
- return FALSE;
- }
- }
- /**
- * Vérifie si le dernier fichier Excel pour le SFTP a été soumis.
- *
- * @return bool TRUE si le dernier fichier Excel pour le SFTP est prêt à être soumis, FALSE sinon.
- */
- public static function ifSubmitLastForSFTP()
- {
- $lastExcel = self::lastExcel();
- $forSFTP = self::getExcelJsonForSFTP($lastExcel);
- return (@$forSFTP["md5forSFTP"] != NULL and @$forSFTP["createForSFTP"] == NULL) ? TRUE : FALSE;
- }
- /**
- * Vérifie un salarié par son matricule.
- *
- * @param string $_string Matricule du salarié à vérifier.
- * @return array Résultat de la vérification contenant des messages d'erreur ou de succès.
- */
- public static function checkSalarieByMatricule(string $_string)
- {
- db::query("SELECT "
- . "id, "
- . "nom, "
- . "prenom, "
- . "contrat, "
- . "actif "
- . "FROM " . DB_T_SALARIES . " "
- . "WHERE idLocal = :idLocal");
- db::bind(':idLocal', intval($_string));
- $salarie = db::single();
- if (isset($salarie["id"])) {
- if ($salarie["actif"] == 0) {
- $return["error"] = "<div>Ce matricule n'est plus sous contrat Capgemini Consulting.</div>";
- $return["class"] = "danger";
- } elseif ($salarie["contrat"] == 0) {
- $return["error"] = "<div>Ce matricule est en suspension de contrat chez Capgemini Consulting mais peut-être pris en charge par le CSE.</div>";
- $return["class"] = "success";
- } else {
- $return["success"] = "<div>Ce matricule est sous contrat Capgemini Consulting.</div>";
- $return["class"] = "success";
- }
- $return["identity"] = $salarie["prenom"] . " " . $salarie["nom"];
- } else {
- $return["error"] = "<div>Ce matricule n'est pas ou plus rattaché à Capgemini Consulting.</div>";
- $return["class"] = "danger";
- }
- return $return;
- }
- }
|