From 2819759da7a1a2b92b9ea2e23e088beaf9241a8c Mon Sep 17 00:00:00 2001 From: pierre renaudot Date: Mon, 29 Jan 2024 14:06:39 +0100 Subject: [PATCH] Function de validation des fiches et reversement des frais HF --- Class/class.gestionFiche.php | 3 ++- Class/class.user.php | 22 ++++++++++++++- controleurs/c_connexion.php | 1 - sqlFunction.sql | 52 ++++++++++++++++++++++++++++++++++++ vues/v_newFiche.php | 2 +- 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/Class/class.gestionFiche.php b/Class/class.gestionFiche.php index 0d16b70..beaae23 100644 --- a/Class/class.gestionFiche.php +++ b/Class/class.gestionFiche.php @@ -70,12 +70,13 @@ class Class_gestionFiche public function get_Page(int $nPage, string $idUtilisateur): array { $decalage = ($nPage - 1) * $this::$NB_LIGNES_PAGINATION; + $req = 'SELECT "rMois", "rVisiteur", "rEtat", ROUND("rMontantValide", 2) as "rMontantValide", "eLibelle" FROM remboursement INNER JOIN etat ON etat."eId"=remboursement."rEtat" WHERE "rVisiteur"= :userId - ORDER BY "rDateModif" DESC LIMIT :nbLignes offset :decalage;'; + ORDER BY "rMois" DESC LIMIT :nbLignes offset :decalage;'; $result = $this->pdo->prepare($req); $result->bindParam('nbLignes', $this::$NB_LIGNES_PAGINATION); $result->bindParam('decalage', $decalage); diff --git a/Class/class.user.php b/Class/class.user.php index 5ccd536..c4322de 100644 --- a/Class/class.user.php +++ b/Class/class.user.php @@ -26,7 +26,27 @@ class Class_user $result->bindParam('login', $login); $result->bindParam('pwd', $password); $result->execute(); + $result = $result->fetch(); - return $result->fetch(); + if ($result['pLibelle'] == 'comptable') { + $this->updateBdd(); + } + + return $result; + } + + public function updateBdd(): void + { + $curMonth = date('Ym'); + $prevMonth = DateTime::createFromFormat('Ym', $curMonth); + $prevMonth->modify('first day of last month'); + + $prevMonth = $prevMonth->format('Ym'); + + $req = 'SELECT updateEtat(:currentMonth, :previousMonth)'; + $result = $this->pdo->prepare($req); + $result->bindParam('currentMonth', $curMonth); + $result->bindParam('previousMonth', $prevMonth); + $result->execute(); } } diff --git a/controleurs/c_connexion.php b/controleurs/c_connexion.php index 02bba20..61e3ced 100644 --- a/controleurs/c_connexion.php +++ b/controleurs/c_connexion.php @@ -10,7 +10,6 @@ if (isset($_POST['login']) && isset($_POST['password'])) { header('location: index.php'); } - //Si l'utilisateur existe ou pas if (count($data) === 0) { header('location: index.php?direction=connexion&msg=errorco'); diff --git a/sqlFunction.sql b/sqlFunction.sql index cde81fa..f58cb7f 100644 --- a/sqlFunction.sql +++ b/sqlFunction.sql @@ -30,7 +30,59 @@ $$ LANGUAGE 'plpgsql'; +--Fonction pour passer les fiches de "créé" à "saisi cloturé" ET passe les frais HF sur la fiche suivante +--dateN -> '202403' +CREATE OR REPLACE FUNCTION updateEtat(curMonth varchar(6), prevMonth varchar(6)) RETURNS bool AS $$ +DECLARE + "listeVisiteur" RECORD; + curMontantValid FLOAT; + oldMontantValid FLOAT; +BEGIN + --Update les fiches Créées en cloturé si la date est inf au mois courant + UPDATE remboursement + SET "rEtat" = 'CL' + WHERE "rEtat" = 'CR' AND "rMois" < curMonth; + --Crée une Fiche pour tous les visiteurs qui n'ont pas de fiches mais dont les frais HF doivent être reportés + FOR "listeVisiteur" IN + SELECT "rVisiteur", SUM("lhMontant") as "montant" FROM remboursement + INNER JOIN ligne_hors_forfait ON "rVisiteur" = "lhVisiteur" AND "rMois" = "lhMois" + WHERE "rMois" <= curMonth AND "rEtat" = 'CL' AND "lhJustificatif" = FALSE AND "lhRefus" = FALSE + GROUP BY "rVisiteur" + LOOP + --Crée la demande si elle n'existe pas + PERFORM newRemboursement("listeVisiteur"."rVisiteur", curMonth); + --RECUP l'ancien montant + SELECT "rMontantValide" INTO curMontantValid + FROM remboursement + WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = curMonth; + + SELECT "rMontantValide" INTO oldMontantValid + FROM remboursement + WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = prevMonth; + --Actualise les montants totaux de remboursement + UPDATE remboursement + SET "rMontantValide" = curMontantValid + "listeVisiteur"."montant" + WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = curMonth; + + UPDATE remboursement + SET "rMontantValide" = oldMontantValid - "listeVisiteur"."montant" + WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = prevMonth; + END LOOP; + + --Passe les lignes HF non validé avec justif + UPDATE ligne_hors_forfait + SET "lhMois" = curMonth + WHERE "lhMois" <= prevMonth AND "lhJustificatif" = FALSE AND "lhRefus" = FALSE; + + --Passe le remboursement en validé + UPDATE remboursement + SET "rEtat" = 'VA' + WHERE "rEtat" = 'CL' AND "rMois" < prevMonth; + + RETURN true; +END; +$$ LANGUAGE 'plpgsql'; diff --git a/vues/v_newFiche.php b/vues/v_newFiche.php index 237b2a9..5656dfb 100644 --- a/vues/v_newFiche.php +++ b/vues/v_newFiche.php @@ -152,7 +152,7 @@ /** * Affiche le bouton si fiche non cloturé */ -if ($status === 'CR'): +if ($status['eId'] === 'CR'): ?>