diff --git a/BES/BES_PAC.SRC b/BES/BES_PAC.SRC index 81421b22..736dbc47 100644 --- a/BES/BES_PAC.SRC +++ b/BES/BES_PAC.SRC @@ -71,7 +71,8 @@ AS RETURN varchar2; FUNCTION opdrsprintf (ps IN varchar2, pbes_bestelopdr_key IN number) RETURN varchar2; - PROCEDURE remove(p_bes_opdr_key IN NUMBER, p_module IN VARCHAR2 DEFAULT 'BES'); + PROCEDURE remove(p_bes_bestelling_key IN NUMBER); + PROCEDURE remove_opdr(p_bes_opdr_key IN NUMBER); END bes; / @@ -2155,7 +2156,7 @@ AS RETURN s; END; - PROCEDURE remove(p_bes_opdr_key IN NUMBER, p_module IN VARCHAR2 DEFAULT 'BES') + PROCEDURE remove(p_bes_bestelling_key IN NUMBER) IS CURSOR c_bestelling(p_bestelling_key IN NUMBER) IS SELECT bes_bestelling_key @@ -2163,22 +2164,50 @@ AS WHERE bes_bestelling_retourvan_key = p_bestelling_key OR bes_bestelling_parentkey = p_bestelling_key; - CURSOR c_factuur(p_bestelopdracht_key IN NUMBER) IS - SELECT fin_factuur_key - FROM fin_factuur - WHERE bes_bestelopdr_key = p_bestelopdracht_key; + CURSOR c_bijlagen(p_refkey IN NUMBER) IS + SELECT b.fac_bijlagen_key + FROM fac_bijlagen b + , bes_bestelling r + , (SELECT k.bes_kenmerk_key kenmerk_key + FROM bes_kenmerk k + , bes_srtkenmerk s + WHERE k.bes_srtkenmerk_key = s.bes_srtkenmerk_key + AND k.bes_kenmerk_type = 'B' + AND s.bes_srtkenmerk_kenmerktype IN ('F', 'M', 'E', 'X') + ) k + WHERE b.fac_bijlagen_refkey = r.bes_bestelling_key + AND b.fac_bijlagen_kenmerk_key = k.kenmerk_key + AND b.fac_bijlagen_module = 'BES' + AND r.bes_bestelling_key = p_refkey + UNION + SELECT b.fac_bijlagen_key + FROM fac_bijlagen b + , bes_bestelling_item r + , (SELECT k.bes_kenmerk_key kenmerk_key + FROM bes_kenmerk k + , bes_srtkenmerk s + WHERE k.bes_srtkenmerk_key = s.bes_srtkenmerk_key + AND k.bes_kenmerk_type = 'B' + AND s.bes_srtkenmerk_kenmerktype IN ('F', 'M', 'E', 'X') + ) k + WHERE b.fac_bijlagen_refkey = r.bes_bestelling_item_key + AND b.fac_bijlagen_kenmerk_key = k.kenmerk_key + AND b.fac_bijlagen_module = 'BES' + AND r.bes_bestelling_key = p_refkey; BEGIN - IF (p_module = 'BES') - THEN - -- Verwijderen bestelling - FOR ref_bestelling IN c_bestelling(p_bes_opdr_key) + -- Verwijderen bestelling + -- Als een bestelling verwijderd wordt kunnen ook de eventuele retour- en child-bestellingen verwijderd worden. + FOR ref_bestelling IN c_bestelling(p_bes_bestelling_key) + LOOP + -- Van alle bestellingen en bestelitems die worden verwijderd moeten ook de bijlagen verwijderd worden. + FOR ref_bijlagen IN c_bijlagen(ref_bestelling.bes_bestelling_key) LOOP - bes.remove(ref_bestelling.bes_bestelling_key, 'BES'); + flx.deleteflexbijlage (ref_bijlagen.fac_bijlagen_key); END LOOP; DELETE FROM bes_bestelling - WHERE bes_bestelling_key = p_bes_opdr_key; + WHERE bes_bestelling_key = ref_bestelling.bes_bestelling_key; -- Van de volgende tabellen worden de records die naar deze p_bestelling_key -- verwijzen met ON DELETE CASCADE ook verwijderd: @@ -2187,23 +2216,32 @@ AS -- Hierdoor worden de afhankelijkheden in de volgende tabel ook verwijderd: -- bes_kenmerkbesteli - fac.remove_tracking('bestelling', p_bes_opdr_key); - ElSE - -- Verwijderen bestelopdracht - FOR ref_factuur IN c_factuur(p_bes_opdr_key) - LOOP - fin.remove(ref_factuur.fin_factuur_key); - END LOOP; + fac.remove_tracking('bestelling', ref_bestelling.bes_bestelling_key); + END LOOP; + END; - DELETE FROM bes_bestelopdr - WHERE bes_bestelopdr_key = p_bes_opdr_key; - -- Van de volgende tabellen worden de records die naar deze p_bestelling_key - -- verwijzen met ON DELETE CASCADE ook verwijderd: - -- bes_bestelopdr_item + PROCEDURE remove_opdr(p_bes_opdr_key IN NUMBER) + IS + CURSOR c_factuur(p_bestelopdracht_key IN NUMBER) IS + SELECT fin_factuur_key + FROM fin_factuur + WHERE bes_bestelopdr_key = p_bestelopdracht_key; + BEGIN + -- Verwijderen bestelopdracht + FOR ref_factuur IN c_factuur(p_bes_opdr_key) + LOOP + fin.remove(ref_factuur.fin_factuur_key); + END LOOP; - fac.remove_tracking('bestelopdr', p_bes_opdr_key); - END IF; + DELETE FROM bes_bestelopdr + WHERE bes_bestelopdr_key = p_bes_opdr_key; + + -- Van de volgende tabellen worden de records die naar deze p_bestelling_key + -- verwijzen met ON DELETE CASCADE ook verwijderd: + -- bes_bestelopdr_item + + fac.remove_tracking('bestelopdr', p_bes_opdr_key); END; END bes; diff --git a/CNT/CNT_PAC.SRC b/CNT/CNT_PAC.SRC index 20eec719..b241807c 100644 --- a/CNT/CNT_PAC.SRC +++ b/CNT/CNT_PAC.SRC @@ -527,9 +527,24 @@ CREATE OR REPLACE PACKAGE BODY cnt AS SELECT fin_factuur_key FROM fin_factuur WHERE cnt_contract_key = p_contract_key; + + CURSOR c_bijlagen(p_refkey IN NUMBER) IS + SELECT fac_bijlagen_key + FROM fac_bijlagen b + , cnt_contract r + WHERE b.fac_bijlagen_refkey = r.cnt_contract_key + AND b.fac_bijlagen_module = 'CNT' + AND b.fac_bijlagen_refkey = p_refkey; + BEGIN + -- Verwijder alle subcontracten van dit contract. FOR ref_contract IN c_contract LOOP + FOR ref_bijlagen IN c_bijlagen(ref_contract.cnt_contract_key) + LOOP + flx.deleteflexbijlage (ref_bijlagen.fac_bijlagen_key); + END LOOP; + cnt.remove(ref_contract.cnt_contract_key); END LOOP; @@ -538,6 +553,11 @@ CREATE OR REPLACE PACKAGE BODY cnt AS fin.remove(ref_factuur.fin_factuur_key); END LOOP; + FOR ref_bijlagen IN c_bijlagen(p_contract_key) + LOOP + flx.deleteflexbijlage (ref_bijlagen.fac_bijlagen_key); + END LOOP; + DELETE FROM cnt_contract WHERE cnt_contract_key = p_contract_key; diff --git a/FIN/FIN_PAC.SRC b/FIN/FIN_PAC.SRC index b97e5329..725275e3 100644 --- a/FIN/FIN_PAC.SRC +++ b/FIN/FIN_PAC.SRC @@ -1055,8 +1055,19 @@ AS PROCEDURE remove(p_factuur_key IN NUMBER) IS - -- ** + CURSOR c_bijlagen(p_refkey IN NUMBER) IS + SELECT fac_bijlagen_key + FROM fac_bijlagen b + , fin_factuur r + WHERE b.fac_bijlagen_refkey = r.fin_factuur_key + AND b.fac_bijlagen_module = 'FIN' + AND b.fac_bijlagen_refkey = p_refkey; BEGIN + FOR ref_bijlagen IN c_bijlagen(p_factuur_key) + LOOP + flx.deleteflexbijlage (ref_bijlagen.fac_bijlagen_key); + END LOOP; + DELETE FROM fin_factuur WHERE fin_factuur_key = p_factuur_key; diff --git a/MLD/MLD_PAC.SRC b/MLD/MLD_PAC.SRC index 7cd680b3..52686e09 100644 --- a/MLD/MLD_PAC.SRC +++ b/MLD/MLD_PAC.SRC @@ -70,7 +70,8 @@ CREATE OR REPLACE PACKAGE mld AS p_opdr_key IN NUMBER, p_waarde IN VARCHAR2); FUNCTION mldflexsummary (pmelding_key IN NUMBER) RETURN VARCHAR2; - PROCEDURE remove(p_mld_opdr_key IN NUMBER, p_module IN VARCHAR2 DEFAULT 'MLD'); + PROCEDURE remove(p_melding_key IN NUMBER); + PROCEDURE remove_opdr(p_mld_opdr_key IN NUMBER); END mld; / CREATE OR REPLACE PACKAGE BODY mld AS @@ -2930,7 +2931,7 @@ BEGIN RETURN builder; END; -PROCEDURE remove(p_mld_opdr_key IN NUMBER, p_module IN VARCHAR2 DEFAULT 'MLD') +PROCEDURE remove(p_melding_key IN NUMBER) IS CURSOR c_melding(p_melding_key IN NUMBER) IS SELECT mld_melding_key @@ -2943,56 +2944,100 @@ IS FROM mld_opdr WHERE mld_melding_key = p_melding_key; + CURSOR c_bijlagen(p_refkey IN NUMBER) IS + SELECT fac_bijlagen_key + FROM fac_bijlagen b + , mld_melding r + , (SELECT k.mld_kenmerk_key kenmerk_key + FROM mld_kenmerk k + , mld_srtkenmerk s + WHERE k.mld_srtkenmerk_key = s.mld_srtkenmerk_key + AND k.mld_kenmerk_niveau NOT IN ('O', 'P') + AND s.mld_srtkenmerk_kenmerktype IN ('F', 'M', 'E', 'X') + ) k + WHERE b.fac_bijlagen_refkey = r.mld_melding_key + AND b.fac_bijlagen_module = 'MLD' + AND b.fac_bijlagen_refey = p_refkey; + +BEGIN + -- Ook alle child meldingen verwijderen. + FOR ref_melding IN c_melding(p_melding_key) + LOOP + mld.remove(ref_melding.mld_melding_key, 'MLD'); + END LOOP; + + -- Alle opdrachten onder de melding verwijderen. + FOR ref_opdracht IN c_opdracht(p_melding_key) + LOOP + mld.remove(ref_opdracht.mld_opdr_key, 'ORD'); + END LOOP; + + FOR ref_bijlagen IN c_bijlagen(p_melding_key); + LOOP + flx.deleteflexbijlage (ref_bijlagen.fac_bijlagen_key); + END LOOP; + + DELETE FROM mld_melding + WHERE mld_melding_key = p_melding_key; + + -- Van de volgende tabellen worden de records die naar deze p_melding_key + -- verwijzen met ON DELETE CASCADE ook verwijderd: + -- mld_melding_note + -- mld_kenmerkmelding + -- mld_melding_object + -- prj_scenario + -- In de volgende tabel wordt mld_melding_key leeg gemaakt bij het verwijderen van p_melding_key: + -- bes_bestelling + + fac.remove_tracking('melding', p_melding_key); +END; + +PROCEDURE remove_opdr(p_mld_opdr_key IN NUMBER) CURSOR c_factuur(p_opdracht_key IN NUMBER) IS SELECT fin_factuur_key FROM fin_factuur WHERE mld_opdr_key = p_opdracht_key; + + CURSOR c_bijlagen(p_refkey IN NUMBER) IS + SELECT fac_bijlagen_key + FROM fac_bijlagen b + , mld_opdr r + , (SELECT k.mld_kenmerk_key kenmerk_key + FROM mld_kenmerk k + , mld_srtkenmerk s + WHERE k.mld_srtkenmerk_key = s.mld_srtkenmerk_key + AND k.mld_kenmerk_niveau IN ('O', 'P') + AND s.mld_srtkenmerk_kenmerktype IN ('F', 'M', 'E', 'X') + ) k + WHERE b.fac_bijlagen_refkey = r.mld_opdr_key + AND b.fac_bijlagen_module = 'MLD' + AND b.fac_bijlagen_refkey = p_refkey; + BEGIN - IF (p_module = 'ORD') - THEN - FOR ref_factuur IN c_factuur(p_mld_opdr_key) - LOOP - fin.remove(ref_factuur.fin_factuur_key); - END LOOP; + FOR ref_factuur IN c_factuur(p_mld_opdr_key) + LOOP + fin.remove(ref_factuur.fin_factuur_key); + END LOOP; - DELETE FROM mld_opdr - WHERE mld_opdr_key = p_mld_opdr_key; - -- Van de volgende tabellen worden de records die naar deze mld_opdr_key - -- verwijzen met ON DELETE CASCADE ook verwijderd: - -- mld_opdr_note - -- mld_kenmerkopdr - -- mld_opdr_materiaal - -- mld_opdr_uitvoeren - -- mld_opdr_uren - -- Hierdoor worden de afhankelijkheden in de volgende tabel ook verwijderd: - -- mld_opdruren_kosten + FOR ref_bijlagen IN c_bijlagen(p_mld_opdr_key); + LOOP + flx.deleteflexbijlage (ref_bijlagen.fac_bijlagen_key); + END LOOP; - fac.remove_tracking('opdracht', p_mld_opdr_key); - ELSE - FOR ref_melding IN c_melding(p_mld_opdr_key) - LOOP - mld.remove(ref_melding.mld_melding_key, 'MLD'); - END LOOP; + DELETE FROM mld_opdr + WHERE mld_opdr_key = p_mld_opdr_key; - FOR ref_opdracht IN c_opdracht(p_mld_opdr_key) - LOOP - mld.remove(ref_opdracht.mld_opdr_key, 'ORD'); - END LOOP; + -- Van de volgende tabellen worden de records die naar deze mld_opdr_key + -- verwijzen met ON DELETE CASCADE ook verwijderd: + -- mld_opdr_note + -- mld_kenmerkopdr + -- mld_opdr_materiaal + -- mld_opdr_uitvoeren + -- mld_opdr_uren + -- Hierdoor worden de afhankelijkheden in de volgende tabel ook verwijderd: + -- mld_opdruren_kosten - DELETE FROM mld_melding - WHERE mld_melding_key = p_mld_opdr_key; - - -- Van de volgende tabellen worden de records die naar deze p_melding_key - -- verwijzen met ON DELETE CASCADE ook verwijderd: - -- mld_melding_note - -- mld_kenmerkmelding - -- mld_melding_object - -- prj_scenario - -- In de volgende tabel wordt mld_melding_key leeg gemaakt bij het verwijderen van p_melding_key: - -- bes_bestelling - - fac.remove_tracking('melding', p_mld_opdr_key); - END IF; + fac.remove_tracking('opdracht', p_mld_opdr_key); END; END mld; diff --git a/RES/RES_PAC.SRC b/RES/RES_PAC.SRC index 458db8ea..0325905d 100644 --- a/RES/RES_PAC.SRC +++ b/RES/RES_PAC.SRC @@ -36,7 +36,7 @@ CREATE OR REPLACE PACKAGE res AS FUNCTION sprintf (ps IN VARCHAR2 , pres_rsv_ruimte_key IN NUMBER) RETURN VARCHAR2; FUNCTION notifypool (pbez_bezoeker_key IN NUMBER, pcode IN VARCHAR2) RETURN NUMBER; PROCEDURE notifybackoffice (prsvkey IN NUMBER, pcode IN VARCHAR2, ptype IN VARCHAR2 DEFAULT NULL, pkey IN NUMBER DEFAULT NULL); - PROCEDURE remove(p_reservering_key IN NUMBER); + PROCEDURE remove(p_rsv_ruimte_key IN NUMBER); END res; / @@ -2277,34 +2277,52 @@ AS END; END; - PROCEDURE remove(p_reservering_key IN NUMBER) + PROCEDURE remove(p_rsv_ruimte_key IN NUMBER) IS - CURSOR c_reservering IS - SELECT res_rsv_ruimte_key - FROM res_rsv_ruimte - WHERE res_reservering_key = p_reservering_key; + CURSOR c_bijlagen(p_refkey IN NUMBER) IS + SELECT fac_bijlagen_key + FROM fac_bijlagen b + , res_rsv_ruimte r + WHERE b.fac_bijlagen_refkey = r.res_rsv_ruimte_key + AND b.fac_bijlagen_module = 'RES' + AND b.fac_bijlagen_refkey = p_refkey; + + res_key res_reservering.res_reservering_key%TYPE; BEGIN - FOR ref_rsv_ruimte IN c_reservering - LOOP - fac.remove_tracking('reservering', ref_rsv_ruimte.res_rsv_ruimte_key); - fac.remove_tracking('xreservering', ref_rsv_ruimte.res_rsv_ruimte_key); - END LOOP; + fac.remove_tracking('reservering', p_rsv_ruimte_key); + fac.remove_tracking('xreservering', p_rsv_ruimte_key); - DELETE FROM res_rsv_ruimte - WHERE res_reservering_key = p_reservering_key; - -- Van de volgende tabellen worden de records die naar deze res_rsv_ruimte_key - -- verwijzen met ON DELETE CASCADE ook verwijderd: - -- res_kenmerkwaarde - -- res_rsv_artikel - -- res_rsv_deel - -- In de volgende tabel wordt res_rsv_ruimte_key leeg gemaakt bij het verwijderen van res_rsv_ruimte: - -- bez_afspraak - -- mld_melding + SELECT res_reservering_key + INTO res_key + FROM res_rsv_ruimte + WHERE res_rsv_ruimte_key = p_rsv_ruimte_key; - DELETE FROM res_reservering - WHERE res_reservering_key = p_reservering_key; + FOR ref_bijlagen IN c_bijlagen(p_rsv_ruimte_key) + LOOP + flx.deleteflexbijlage (ref_bijlagen.fac_bijlagen_key); + END LOOP; - -- Geen tracking op res_reservering. + DELETE FROM res_rsv_ruimte + WHERE res_rsv_ruimte_key = p_rsv_ruimte_key; + + -- Van de volgende tabellen worden de records die naar deze res_rsv_ruimte_key + -- verwijzen met ON DELETE CASCADE ook verwijderd: + -- res_kenmerkwaarde + -- res_rsv_artikel + -- res_rsv_deel + -- In de volgende tabel wordt res_rsv_ruimte_key leeg gemaakt bij het verwijderen van res_rsv_ruimte: + -- bez_afspraak + -- mld_melding + + -- Als dit de laatste deelreservering in de reservering is mag de reservering ook weg. + DELETE FROM res_reservering + WHERE NOT EXISTS (SELECT 1 + FROM res_rsv_ruimte + WHERE res_reservering_key = res_key + ) + AND res_reservering_key = res_key; + + -- Geen tracking op res_reservering. END; END res;