108 lines
3.6 KiB
PL/PgSQL
108 lines
3.6 KiB
PL/PgSQL
|
|
--Fonction pour créer une fiche si celle-ci n'existe pas
|
|
CREATE OR REPLACE FUNCTION newRemboursement(userId CHAR(10), monthFile CHAR(10)) RETURNS int AS $$
|
|
DECLARE
|
|
returnValue INT;
|
|
forfaitRecord RECORD;
|
|
BEGIN
|
|
SELECT COUNT(*) INTO returnValue
|
|
FROM remboursement
|
|
WHERE "rVisiteur" = userId AND "rMois" = monthFile;
|
|
|
|
IF returnValue = 0 THEN
|
|
-- Ajoute une nouvelle ligne à la table remboursement
|
|
INSERT INTO remboursement
|
|
VALUES(userId, monthFile, 0, 0, CURRENT_DATE, 'CR');
|
|
|
|
-- Parcours des lignes de la table forfait pour insérer dans ligne_hors_forfait
|
|
FOR forfaitRecord IN SELECT * FROM forfait LOOP
|
|
INSERT INTO ligne_forfait
|
|
VALUES(userId, monthFile, forfaitRecord."fId", 0, 0);
|
|
END LOOP;
|
|
|
|
-- Mettre à jour la valeur de returnValue après l'insertion
|
|
returnValue := 1; -- Valeur pour indiquer qu'une ligne a été insérée
|
|
END IF;
|
|
|
|
RETURN returnValue;
|
|
END;
|
|
$$ 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';
|
|
|
|
|
|
|
|
|
|
--AJOUTE LES LIGNES HF
|
|
INSERT ligne_hors_forfait
|
|
("lhVisiteur", "lhMois", "lhLibelle", "lhDate", "lhMontant", "lhJustificatif", "lhRefus")
|
|
VALUES (:userId, :monthF, :libelle, :dateL, :mttF, 'true', 'false');
|
|
|
|
--UPDATE LES LIGNES HF SI REFUS
|
|
UPDATE ligne_hors_forfait
|
|
SET "lhRefus" = 'true'
|
|
WHERE "rVisiteur" = '' AND "rMois" = '' AND "lhId" = '';
|
|
|
|
--UPDATE LES LIGNE FORFAIT
|
|
UPDATE ligne_forfait
|
|
SET "lfQuantite" = :qttF,
|
|
"lfMontant" = :mttF
|
|
WHERE "rVisiteur" = :userId AND "rMois" = :monthF AND "lfForfait" = :idForfait;
|
|
|
|
|
|
|