UWVA#65182 Bewaartermijnen/automatische schoning in core

svn path=/Database/trunk/; revision=49806
This commit is contained in:
Erik Groener
2021-02-12 17:08:59 +00:00
parent eee7cc0fbb
commit 88cf8e559b
5 changed files with 226 additions and 94 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;