1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
/* CREATION DES VUES PERMETTANT DE REMONTER LES SEJOURS ET LES ACTIVITES DONT LES FACTURES N'ONT PAS ETE REGLES
--VUE QUI REMONTE LES DONNEES NECESSAIRE A LA FACTURATION DE LA LOCATION DES SEJOURS NON TERMINES
DROP VIEW vue_periodes_sejour;
CREATE VIEW vue_periodes_sejour AS
SELECT s.sej_num,e.emp_desc ,ps.per_sej_nbjours , ps.per_sej_nbpers , ps.per_sej_nbenfants , te.typ_emp_tarif_jour
FROM PERIODES_SEJOUR ps,SEJOUR s,EMPLACEMENT e, TYPE_EMPLACEMENT te
WHERE ps.sej_num=s.sej_num
AND e.emp_num=s.emp_num
AND te.typ_emp_code=e.typ_emp_code
AND s.sej_est_termine=0;
--VUE QUI REMONTE LES DONNEES NECESSAIRE A LA FACTURATION DES ACTIVITES
DROP VIEW vue_activites_sejour;
CREATE VIEW vue_activites_sejour AS
SELECT s.sej_num, pa.dat_act_num, aa.act_intitule, aa.act_ut , pa.par_act_nb_unites,aa.act_prixUT
FROM SEJOUR s , participe_activite pa,ACTIVITE aa
WHERE s.sej_num= pa.sej_num
AND pa.act_num= aa.act_num
AND s.sej_est_termine=0
AND pa.par_act_regle=0;
CREATE OR REPLACE
TRIGGER Facturation
AFTER UPDATE OF sej_est_termine ON SEJOUR
FOR EACH ROW
DECLARE
--Montant du séjour pour l'attribut sej_montant de la table SEJOUR
montant_sejour sejour.sej_montant%type;
--Montant des activités qui figurera sur la facture
montant_activites sejour.sej_montant%type;
--Montant total fact_montant de la table FACTURE
montant_total facture.fac_montant%type;
--numéro facture , concatenation date_jour+num_estivant
date_raccourcie VARCHAR2(12) ;
--Numéro du séjour qui a été modifié
numero_sej SEJOUR.SEJ_NUM%type := :NEW.sej_num;
CURSOR periodes_sejour IS
SELECT * FROM VUE_PERIODES_SEJOUR WHERE SEJ_NUM=numero_sej ;
CURSOR activites_sejour IS
SELECT * FROM VUE_ACTIVITES_SEJOUR WHERE SEJ_NUM=numero_sej ;
BEGIN
montant_sejour :=0;
montant_activites :=0;
montant_total:=0;
OPEN periodes_sejour;
FOR une_periode in periodes_sejour LOOP
montant_sejour:=montant_sejour + une_periode.per_sej_nbpers*une_periode.per_sej_nbenfants*une_periode.typ_emp_tarif_jour;
END LOOP;
CLOSE periodes_sejour;
IF (activites_sejour%ROWCOUNT>0) THEN
FOR une_activite in activites_sejour LOOP
montant_activites:=montant_activites+ une_activite.PAR_ACT_NB_UNITES+une_activite.ACT_PRIXUT;
END LOOP;
END IF;
montant_total := montant_sejour + montant_activites;
SELECT to_char(sysdate,'DDMMYYYY') INTO date_raccourcie FROM DUAL ;
INSERT INTO FACTURE VALUES ((date_raccourcie || to_char(:NEW.sej_num)),sysdate,montant_total,0);
END; |
Partager