1642 lines
86 KiB
Plaintext
1642 lines
86 KiB
Plaintext
#ifdef MLD
|
|
/*
|
|
* $Revision$
|
|
* $Id$
|
|
*/
|
|
|
|
#undef TRUNC
|
|
|
|
CREATE OR REPLACE PACKAGE ano AS
|
|
PROCEDURE anonymizebes (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE anonymizebez (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE anonymizefin (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE anonymizemld (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE anonymizeprs (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE anonymizeres (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535);
|
|
PROCEDURE anonymize (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE table_column(p_tabel IN VARCHAR2, p_kolom IN VARCHAR2, p_functie IN VARCHAR2);
|
|
FUNCTION postcode(postcode_veld IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION telefoon(telefoon_veld IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION adres(adres_veld IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION naam(naam_veld IN VARCHAR2, uniek IN NUMBER DEFAULT 0) RETURN VARCHAR2;
|
|
FUNCTION email(email_veld IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION memo(memo_veld IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION generic(veld IN VARCHAR2, fmt IN NUMBER DEFAULT 0) RETURN VARCHAR2;
|
|
END ano;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY ano AS
|
|
PROCEDURE anonymizebes (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
|
|
v_count NUMBER;
|
|
anonymize_mode NUMBER;
|
|
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
|
|
|
|
-- Alle bestellingen waarvan de afwijsdatum, alles geleverd datum, verwerkingsdatum of annuleringsdatum tussen de startdatum en de einddatum liggen.
|
|
CURSOR c_bestelling
|
|
IS
|
|
SELECT b.bes_bestelling_key
|
|
FROM bes_bestelling b
|
|
WHERE (SELECT MAX(ft.fac_tracking_datum)
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = b.bes_bestelling_key
|
|
AND ft.fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'bestelling'
|
|
--AND fac_srtnotificatie_code != 'BESANO' -- Vervangen door "fac_srtnotificatie_key != key" hieronder. Blijkt veel sneller te zijn.
|
|
AND fac_srtnotificatie_key != (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'BESANO')
|
|
)) BETWEEN p_startdatum AND p_einddatum
|
|
AND b.bes_bestelling_status IN (1, 6, 7, 8)
|
|
AND NOT EXISTS
|
|
(SELECT ft.fac_tracking_key
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = b.bes_bestelling_key
|
|
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'BESANO'))
|
|
ORDER BY b.bes_bestelling_key;
|
|
|
|
CURSOR c_bijlagen(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, bes_kenmerk k
|
|
, bes_srtkenmerk s
|
|
WHERE k.bes_srtkenmerk_key = s.bes_srtkenmerk_key
|
|
AND k.bes_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
|
AND BITAND(s.bes_srtkenmerk_systeem, 8) = 8
|
|
AND b.fac_bijlagen_module = 'BES'
|
|
AND b.fac_bijlagen_refkey = p_refkey;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
SELECT fac.getSetting('anonymize_mode')
|
|
INTO anonymize_mode
|
|
FROM DUAL;
|
|
|
|
IF anonymize_mode > 0
|
|
THEN
|
|
v_count := 0;
|
|
FOR rec_b IN c_bestelling
|
|
LOOP
|
|
-- *
|
|
-- Anonimiseren bestellingen.
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle BES tracking anonimiseren m.b.t. de bestelling.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'bestelling'
|
|
AND fac_srtnotificatie_code != 'BESANO')
|
|
AND fac_tracking_refkey = rec_b.bes_bestelling_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle BES tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'bestelling'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_b.bes_bestelling_key
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
--THEN
|
|
--END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de bestelling waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het bes_srtkenmerk.bes_srtkenmerk_systeem veld is gezet.
|
|
DELETE FROM bes_kenmerkbestell bkbl
|
|
WHERE bkbl.bes_bestelling_key = rec_b.bes_bestelling_key
|
|
AND bkbl.bes_kenmerk_key IN (SELECT bk.bes_kenmerk_key
|
|
FROM bes_kenmerk bk,
|
|
bes_srtkenmerk bsk
|
|
WHERE bk.bes_srtkenmerk_key = bsk.bes_srtkenmerk_key
|
|
AND bk.bes_kenmerk_key = bkbl.bes_kenmerk_key
|
|
AND BITAND(bsk.bes_srtkenmerk_systeem, 8) = 8);
|
|
|
|
-- Zet het verwijder-veld van alle bijlagen van bestellingen waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het bes_srtkenmerk.bes_srtkenmerk_systeem veld is gezet.
|
|
-- De scheduled functie utils/gen_schedular/gen_cleanup.js verwijderd dan binnenkort de bijlage echt
|
|
-- en ruimt dan ook het record in fac_bijlagen op.
|
|
FOR rec_fb in c_bijlagen(rec_b.bes_bestelling_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseren van tekstvelden in de bestelling.
|
|
UPDATE bes_bestelling
|
|
SET bes_bestelling_opmerking = CASE WHEN bes_bestelling_opmerking IS NOT NULL THEN lcl_fac_anonymized END
|
|
, bes_bestelling_ordernr = CASE WHEN bes_bestelling_ordernr IS NOT NULL THEN lcl_fac_anonymized END
|
|
, bes_bestelling_plaats = CASE WHEN bes_bestelling_plaats IS NOT NULL THEN lcl_fac_anonymized END
|
|
, bes_bestelling_satisfaction_op = CASE WHEN bes_bestelling_satisfaction_op IS NOT NULL THEN lcl_fac_anonymized END
|
|
, bes_bestelling_lev_opm = CASE WHEN bes_bestelling_lev_opm IS NOT NULL THEN lcl_fac_anonymized END
|
|
, bes_bestelling_externnr = CASE WHEN bes_bestelling_externnr IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE bes_bestelling_key = rec_b.bes_bestelling_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de bestelling tracken.
|
|
fac.trackaction('#BESANO', rec_b.bes_bestelling_key, NULL, NULL, NULL);
|
|
|
|
-- *
|
|
-- Anonimiseren bestelopdrachten.
|
|
FOR rec_bo IN (SELECT bo.bes_bestelopdr_key
|
|
FROM bes_bestelopdr bo,
|
|
bes_bestelopdr_item boi,
|
|
bes_bestelling_item bi
|
|
WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
|
|
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
|
|
AND bi.bes_bestelling_key = rec_b.bes_bestelling_key)
|
|
LOOP
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle BES tracking anonimiseren m.b.t. de bestelopdracht van de bestelling.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'bestelopdr'
|
|
AND fac_srtnotificatie_code != 'BES2AN')
|
|
AND fac_tracking_refkey = rec_bo.bes_bestelopdr_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle BES tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'bestelopdr'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_bo.bes_bestelopdr_key
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
--THEN
|
|
--END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de bestelopdrachten van de bestelling waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het bes_srtkenmerk.bes_srtkenmerk_systeem veld is gezet.
|
|
DELETE FROM bes_kenmerkbesteli bkbi
|
|
WHERE bkbi.bes_bestelling_item_key IN (SELECT bi.bes_bestelling_item_key
|
|
FROM bes_bestelling_item bi
|
|
WHERE bi.bes_bestelling_key = rec_b.bes_bestelling_key)
|
|
AND bkbi.bes_kenmerk_key IN (SELECT bk.bes_kenmerk_key
|
|
FROM bes_kenmerk bk,
|
|
bes_srtkenmerk bsk
|
|
WHERE bk.bes_srtkenmerk_key = bsk.bes_srtkenmerk_key
|
|
AND bk.bes_kenmerk_key = bkbi.bes_kenmerk_key
|
|
AND BITAND(bsk.bes_srtkenmerk_systeem, 8) = 8);
|
|
|
|
FOR rec_fb IN c_bijlagen(rec_bo.bes_bestelopdr_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseren van tekstvelden in de bestelopdracht.
|
|
UPDATE bes_bestelopdr
|
|
SET bes_bestelopdr_opmerking = CASE WHEN bes_bestelopdr_opmerking IS NOT NULL THEN lcl_fac_anonymized END
|
|
, bes_bestelopdr_delivery_opmerk = CASE WHEN bes_bestelopdr_delivery_opmerk IS NOT NULL THEN lcl_fac_anonymized END
|
|
, bes_bestelopdr_externnr = CASE WHEN bes_bestelopdr_externnr IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE bes_bestelopdr_key = rec_bo.bes_bestelopdr_key;
|
|
|
|
UPDATE bes_bestelopdr_item
|
|
SET bes_bestelopdr_item_opmerking = CASE WHEN bes_bestelopdr_item_opmerking IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE bes_bestelopdr_key = rec_bo.bes_bestelopdr_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de bestelopdracht tracken.
|
|
fac.trackaction('BES2AN', rec_bo.bes_bestelopdr_key, NULL, NULL, NULL);
|
|
END LOOP; -- bestelopdrachten
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP; -- bestellingen
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE anonymizebez (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
|
|
bez_generic_visitor VARCHAR2 (2001) := lcl.l('lcl_bez_generic_visitor');
|
|
v_count NUMBER;
|
|
anonymize_mode NUMBER;
|
|
|
|
-- Alle afspraken die tussen de startdatum en de einddatum liggen.
|
|
CURSOR c_afspraak
|
|
IS
|
|
SELECT bez_afspraak_key
|
|
FROM bez_afspraak
|
|
WHERE bez_afspraak_eind BETWEEN p_startdatum AND p_einddatum
|
|
AND NOT EXISTS
|
|
(SELECT ft.fac_tracking_key
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = bez_afspraak_key
|
|
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'BEZANO'))
|
|
ORDER BY bez_afspraak_key;
|
|
|
|
CURSOR c_bijlagen(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, bez_kenmerk k
|
|
, bez_bezoekers v
|
|
WHERE k.bez_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
|
AND b.fac_bijlagen_refkey = v.bez_bezoekers_key
|
|
AND BITAND(k.bez_kenmerk_systeem, 8) = 8
|
|
AND b.fac_bijlagen_module = 'BEZ'
|
|
AND v.bez_afspraak_key = p_refkey;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
SELECT fac.getSetting('anonymize_mode')
|
|
INTO anonymize_mode
|
|
FROM DUAL;
|
|
|
|
IF anonymize_mode > 0
|
|
THEN
|
|
v_count := 0;
|
|
FOR rec_a IN c_afspraak
|
|
LOOP
|
|
-- *
|
|
-- Anonimiseren afspraak
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle BEZ tracking anonimiseren m.b.t. de afspraak.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'afspraak'
|
|
AND fac_srtnotificatie_code != 'BEZANO')
|
|
AND fac_tracking_refkey = rec_a.bez_afspraak_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle BEZ tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'afspraak'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_a.bez_afspraak_key
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
--THEN
|
|
--END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van bezoekers van de afspraak waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het bez_kenmerk.bez_kenmerk_systeem veld is gezet.
|
|
DELETE FROM bez_kenmerkwaarde bkw
|
|
WHERE bkw.bez_bezoekers_key IN (SELECT b.bez_bezoekers_key
|
|
FROM bez_bezoekers b
|
|
WHERE b.bez_afspraak_key = rec_a.bez_afspraak_key)
|
|
AND bkw.bez_kenmerk_key IN (SELECT bk.bez_kenmerk_key
|
|
FROM bez_kenmerk bk
|
|
WHERE bk.bez_kenmerk_key = bkw.bez_kenmerk_key
|
|
AND BITAND(bk.bez_kenmerk_systeem, 8) = 8);
|
|
-- Zet het verwijder-veld van alle bijlagen van bezoekers waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het bez_kenmerk.bez_kenmerk_systeem veld is gezet.
|
|
-- De scheduled functie utils/gen_schedular/gen_cleanup.js verwijderd dan binnenkort de bijlage echt
|
|
-- en ruimt dan ook het record in fac_bijlagen op.
|
|
FOR rec_fb in c_bijlagen(rec_a.bez_afspraak_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseer alle afspraken.
|
|
-- Door de trigger in de update wordt automatische de naam van de host in de gastheer geplakt.
|
|
-- Daardoor wordt de lcl "Ganonimiseerd" in vele gevallen niet blijvend in de gastheer gezet.
|
|
-- De persoon (prs record) moet daarom eerst aangepast worden.
|
|
-- Tijdens het anonimiseren van de persoon wordt daarom de bez_afspraak_gastheer ook geanonimiseerd.
|
|
-- In de gevallen dat er geen host wordt gebruikt en alleen tekst voor de persoon (gastheer) wordt ingevuld wordt het veld wel blijvend gezet.
|
|
UPDATE bez_afspraak
|
|
SET bez_afspraak_gastheer = bez_generic_visitor,
|
|
bez_afspraak_telefoonnr = NULL,
|
|
bez_afspraak_opmerking = NULL
|
|
WHERE bez_afspraak_key = rec_a.bez_afspraak_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de afspraak tracken.
|
|
fac.trackaction('#BEZANO', rec_a.bez_afspraak_key, NULL, NULL, NULL);
|
|
|
|
-- *
|
|
-- Anonimiseren bezoekers
|
|
BEGIN
|
|
-- Geen speciale acties per bezoeker dus kan per afspraak ipv lus per bezoeker.
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle BEZ tracking anonimiseren m.b.t. de bezoekers van de afspraak.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'bezoeker')
|
|
AND fac_tracking_refkey IN (SELECT bb.bez_bezoekers_key
|
|
FROM bez_bezoekers bb
|
|
WHERE bb.bez_afspraak_key = rec_a.bez_afspraak_key)
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle BEZ tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'bezoeker'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey IN (SELECT bb.bez_bezoekers_key
|
|
FROM bez_bezoekers bb
|
|
WHERE bb.bez_afspraak_key = rec_a.bez_afspraak_key)
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
--THEN
|
|
--END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
--THEN
|
|
--END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseer alle bezoekers.
|
|
UPDATE bez_bezoekers
|
|
SET bez_afspraak_naam = bez_generic_visitor,
|
|
bez_afspraak_bedrijf = NULL,
|
|
bez_afspraak_opmerking = NULL,
|
|
bez_bezoekers_telefoon = NULL,
|
|
bez_bezoekers_email = NULL,
|
|
bez_bezoekers_kenteken = NULL
|
|
WHERE bez_afspraak_key = rec_a.bez_afspraak_key;
|
|
END IF;
|
|
END;
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP;
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE anonymizefin (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
|
|
v_count NUMBER;
|
|
anonymize_mode NUMBER;
|
|
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
|
|
|
|
-- Alle facturen die afgewezen of verwerkt zijn in de periode tussen de startdatum en de einddatum.
|
|
CURSOR c_factuur
|
|
IS
|
|
WITH
|
|
fin_tracking
|
|
AS
|
|
( SELECT fac_tracking_refkey,
|
|
MAX (fac_tracking_datum) max_tracking_datum
|
|
FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN
|
|
(SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'factuur'
|
|
AND fac_srtnotificatie_key !=
|
|
(SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'FINANO'))
|
|
GROUP BY fac_tracking_refkey)
|
|
SELECT f.fin_factuur_key
|
|
FROM fin_factuur f, fin_tracking ft
|
|
WHERE f.fin_factuur_key = ft.fac_tracking_refkey
|
|
AND ft.max_tracking_datum BETWEEN p_startdatum AND p_einddatum
|
|
AND f.fin_factuur_statuses_key IN (1, 7)
|
|
AND NOT EXISTS
|
|
(SELECT ft.fac_tracking_key
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = f.fin_factuur_key
|
|
AND ft.fac_srtnotificatie_key =
|
|
(SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'FINANO'))
|
|
ORDER BY f.fin_factuur_key;
|
|
|
|
CURSOR c_bijlagen_factuur(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, fin_kenmerk k
|
|
WHERE k.fin_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
|
AND b.fac_bijlagen_refkey = p_refkey
|
|
AND BITAND(k.fin_kenmerk_systeem, 8) = 8
|
|
AND k.fin_kenmerk_type = 'F'
|
|
AND b.fac_bijlagen_module = 'FIN';
|
|
|
|
CURSOR c_bijlagen_factuur_note(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, fin_factuur_note n
|
|
WHERE b.fac_bijlagen_refkey = n.fin_factuur_note_key
|
|
AND b.fac_bijlagen_module = 'FINN'
|
|
AND b.fac_bijlagen_kenmerk_key = -1
|
|
AND n.fin_factuur_key = p_refkey;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
SELECT fac.getSetting('anonymize_mode')
|
|
INTO anonymize_mode
|
|
FROM DUAL;
|
|
|
|
IF anonymize_mode > 0
|
|
THEN
|
|
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt eventueel triggers
|
|
|
|
v_count := 0;
|
|
FOR rec_f IN c_factuur
|
|
LOOP
|
|
-- *
|
|
-- Anonimiseren factuur
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle FIN tracking anonimiseren m.b.t. de factuur.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'factuur'
|
|
AND fac_srtnotificatie_code != 'FINANO')
|
|
AND fac_tracking_refkey = rec_f.fin_factuur_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle FIN tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'factuur'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_f.fin_factuur_key
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
THEN
|
|
-- Verwijder alle bijlagen van notities van de melding.
|
|
FOR rec_nb IN c_bijlagen_factuur_note(rec_f.fin_factuur_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_nb.fac_bijlagen_key);
|
|
END LOOP;
|
|
-- Verwijder alle notities van de factuur.
|
|
DELETE FROM fin_factuur_note ffn
|
|
WHERE ffn.fin_factuur_key = rec_f.fin_factuur_key;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de factuur waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het fin_kenmerk.fin_kenmerk_systeem veld is gezet.
|
|
DELETE FROM fin_kenmerkfactuur fkf
|
|
WHERE fkf.fin_factuur_key = rec_f.fin_factuur_key
|
|
AND fkf.fin_kenmerk_key IN (SELECT fk.fin_kenmerk_key
|
|
FROM fin_kenmerk fk
|
|
WHERE fk.fin_kenmerk_key = fkf.fin_kenmerk_key
|
|
AND fk.fin_kenmerk_type = 'F'
|
|
AND BITAND(fk.fin_kenmerk_systeem, 8) = 8);
|
|
-- Zet het verwijder-veld van alle bijlagen van de factuur waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het fin_kenmerk.fin_kenmerk_systeem veld is gezet.
|
|
-- De scheduled functie utils/gen_schedular/gen_cleanup.js verwijderd dan binnenkort de bijlage echt
|
|
-- en ruimt dan ook het record in fac_bijlagen op.
|
|
FOR rec_fb IN c_bijlagen_factuur(rec_f.fin_factuur_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseren van tekstvelden in de factuur.
|
|
UPDATE fin_factuur
|
|
SET fin_factuur_opmerking = CASE WHEN fin_factuur_opmerking IS NOT NULL THEN lcl_fac_anonymized END
|
|
, fin_factuur_opmerking_afw = CASE WHEN fin_factuur_opmerking_afw IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE fin_factuur_key = rec_f.fin_factuur_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de factuur tracken.
|
|
fac.trackaction('#FINANO', rec_f.fin_factuur_key, NULL, NULL, NULL);
|
|
|
|
-- *
|
|
-- Anonimiseren factuurregels.
|
|
FOR rec_r IN (SELECT fin_factuurregel_key
|
|
FROM fin_factuurregel
|
|
WHERE fin_factuur_key = rec_f.fin_factuur_key)
|
|
LOOP
|
|
--IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
--THEN -- Tracking van factuurregels gebeurd op factuur niveau.
|
|
--END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
--THEN -- Factuurregels hebben geen notes.
|
|
--END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de factuurregels van de factuur waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het fin_kenmerk.fin_kenmerk_systeem veld is gezet.
|
|
DELETE FROM fin_kenmerkfactregel fkr
|
|
WHERE fkr.fin_factuurregel_key = rec_r.fin_factuurregel_key
|
|
AND fkr.fin_kenmerk_key IN (SELECT fk.fin_kenmerk_key
|
|
FROM fin_kenmerk fk
|
|
WHERE fk.fin_kenmerk_key = fkr.fin_kenmerk_key
|
|
AND fk.fin_kenmerk_type = 'R'
|
|
AND BITAND(fk.fin_kenmerk_systeem, 8) = 8);
|
|
|
|
-- Factuurregels hebben geen bijlagekenmerken. Zie fin\fin_flexkenmerk.inc
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseren van tekstvelden in de factuurregels van de factuur.
|
|
UPDATE fin_factuurregel
|
|
SET fin_factuurregel_omschrijving = CASE WHEN fin_factuurregel_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE fin_factuurregel_key = rec_r.fin_factuurregel_key;
|
|
|
|
END IF;
|
|
|
|
-- Anonimiseren van factuurregels wordt niet getrackt.
|
|
END LOOP; -- factuurregels
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP; -- facturen
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE anonymizemld (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
|
|
v_count NUMBER;
|
|
anonymize_mode NUMBER;
|
|
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
|
|
|
|
-- Alle meldingen waarvan de afwijsdatum of verwerkingsdatum tussen de startdatum en de einddatum liggen.
|
|
CURSOR c_melding
|
|
IS
|
|
SELECT m.mld_melding_key
|
|
FROM mld_melding m
|
|
WHERE (SELECT MAX(ft.fac_tracking_datum)
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = m.mld_melding_key
|
|
AND ft.fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'melding'
|
|
--AND fac_srtnotificatie_code != 'MLDANO' -- Vervangen door "fac_srtnotificatie_key != key" hieronder. Blijkt veel sneller te zijn.
|
|
AND fac_srtnotificatie_key != (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'MLDANO')
|
|
)) BETWEEN p_startdatum AND p_einddatum
|
|
AND m.mld_melding_status IN (1, 6)
|
|
AND NOT EXISTS
|
|
(SELECT ft.fac_tracking_key
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = m.mld_melding_key
|
|
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'MLDANO'))
|
|
ORDER BY m.mld_melding_key;
|
|
|
|
CURSOR c_bijlagen_melding(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, mld_kenmerk k
|
|
, mld_srtkenmerk s
|
|
WHERE k.mld_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
|
AND k.mld_srtkenmerk_key = s.mld_srtkenmerk_key
|
|
AND b.fac_bijlagen_refkey = p_refkey
|
|
AND BITAND(s.mld_srtkenmerk_systeem, 8) = 8
|
|
AND k.mld_kenmerk_niveau IN ('S','D','T')
|
|
AND b.fac_bijlagen_module = 'MLD';
|
|
|
|
CURSOR c_bijlagen_opdracht(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, mld_kenmerk k
|
|
, mld_srtkenmerk s
|
|
WHERE k.mld_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
|
AND k.mld_srtkenmerk_key = s.mld_srtkenmerk_key
|
|
AND b.fac_bijlagen_refkey = p_refkey
|
|
AND BITAND(s.mld_srtkenmerk_systeem, 8) = 8
|
|
AND k.mld_kenmerk_niveau IN ('P','O')
|
|
AND b.fac_bijlagen_module = 'MLD';
|
|
|
|
CURSOR c_bijlagen_melding_note(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, mld_melding_note n
|
|
WHERE b.fac_bijlagen_refkey = n.mld_melding_note_key
|
|
AND b.fac_bijlagen_module = 'MLDN'
|
|
AND b.fac_bijlagen_kenmerk_key = -1
|
|
AND n.mld_melding_key = p_refkey;
|
|
|
|
CURSOR c_bijlagen_opdracht_note(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, mld_opdr_note n
|
|
WHERE b.fac_bijlagen_refkey = n.mld_opdr_note_key
|
|
AND b.fac_bijlagen_module = 'ORDN'
|
|
AND b.fac_bijlagen_kenmerk_key = -1
|
|
AND n.mld_opdr_key = p_refkey;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
SELECT fac.getSetting('anonymize_mode')
|
|
INTO anonymize_mode
|
|
FROM DUAL;
|
|
|
|
IF anonymize_mode > 0
|
|
THEN
|
|
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt mld_t_mld_melding_B_IU
|
|
|
|
v_count := 0;
|
|
FOR rec_m IN c_melding
|
|
LOOP
|
|
-- *
|
|
-- Anonimiseren melding
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle MLD tracking anonimiseren m.b.t. de melding.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'melding'
|
|
AND fac_srtnotificatie_code != 'MLDANO')
|
|
AND fac_tracking_refkey = rec_m.mld_melding_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle MLD tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'melding'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_m.mld_melding_key
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
THEN
|
|
-- Verwijder alle bijlagen van notities van de melding.
|
|
FOR rec_nb IN c_bijlagen_melding_note(rec_m.mld_melding_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_nb.fac_bijlagen_key);
|
|
END LOOP;
|
|
-- Verwijder alle notities van de melding.
|
|
DELETE FROM mld_melding_note mmn
|
|
WHERE mmn.mld_melding_key = rec_m.mld_melding_key;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de melding waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het mld_srtkenmerk.mld_srtkenmerk_systeem veld is gezet.
|
|
DELETE FROM mld_kenmerkmelding mkm
|
|
WHERE mkm.mld_melding_key = rec_m.mld_melding_key
|
|
AND mkm.mld_kenmerk_key IN (SELECT mk.mld_kenmerk_key
|
|
FROM mld_kenmerk mk,
|
|
mld_srtkenmerk msk
|
|
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
|
|
AND mk.mld_kenmerk_key = mkm.mld_kenmerk_key
|
|
AND BITAND(msk.mld_srtkenmerk_systeem, 8) = 8);
|
|
-- Zet het verwijder-veld van alle bijlagen van de melding waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het mld_srtkenmerk.mld_srtkenmerk_systeem veld is gezet.
|
|
-- De scheduled functie utils/gen_schedular/gen_cleanup.js verwijderd dan binnenkort de bijlage echt
|
|
-- en ruimt dan ook het record in fac_bijlagen op.
|
|
FOR rec_fb IN c_bijlagen_melding(rec_m.mld_melding_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseren van tekstvelden in de melding.
|
|
UPDATE mld_melding
|
|
SET mld_melding_omschrijving = CASE WHEN mld_melding_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_melding_opmerking = CASE WHEN mld_melding_opmerking IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_melding_document = CASE WHEN mld_melding_document IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_melding_satisfaction_op = CASE WHEN mld_melding_satisfaction_op IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_melding_naam_ext = CASE WHEN mld_melding_naam_ext IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_melding_email_ext = CASE WHEN mld_melding_email_ext IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_melding_tel_ext = CASE WHEN mld_melding_tel_ext IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE mld_melding_key = rec_m.mld_melding_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de melding tracken.
|
|
fac.trackaction('#MLDANO', rec_m.mld_melding_key, NULL, NULL, NULL);
|
|
|
|
-- *
|
|
-- Anonimiseren opdrachten melding.
|
|
FOR rec_o IN (SELECT mld_opdr_key
|
|
FROM mld_opdr
|
|
WHERE mld_melding_key = rec_m.mld_melding_key)
|
|
LOOP
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle MLD tracking anonimiseren m.b.t. de opdrachten van de melding.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'opdracht'
|
|
AND fac_srtnotificatie_code != 'ORDANO')
|
|
AND fac_tracking_refkey = rec_o.mld_opdr_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle ORD tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'opdracht'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_o.mld_opdr_key
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
THEN
|
|
-- Verwijder alle bijlagen van notities van de opdracht bij de melding.
|
|
FOR rec_nb IN c_bijlagen_opdracht_note(rec_o.mld_opdr_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_nb.fac_bijlagen_key);
|
|
END LOOP;
|
|
-- Verwijder alle notities van de opdrachten bij de melding.
|
|
DELETE FROM mld_opdr_note mon
|
|
WHERE mon.mld_opdr_key = rec_o.mld_opdr_key;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de opdrachten van de melding waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het mld_srtkenmerk.mld_srtkenmerk_systeem veld is gezet.
|
|
DELETE FROM mld_kenmerkopdr mko
|
|
WHERE mko.mld_opdr_key = rec_o.mld_opdr_key
|
|
AND mko.mld_kenmerk_key IN (SELECT mk.mld_kenmerk_key
|
|
FROM mld_kenmerk mk,
|
|
mld_srtkenmerk msk
|
|
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
|
|
AND mk.mld_kenmerk_key = mko.mld_kenmerk_key
|
|
AND BITAND(msk.mld_srtkenmerk_systeem, 8) = 8);
|
|
|
|
-- Zet het verwijder-veld van alle bijlagen van de melding-opdracht waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het mld_srtkenmerk.mld_srtkenmerk_systeem veld is gezet.
|
|
-- De scheduled functie utils/gen_schedular/gen_cleanup.js verwijderd dan binnenkort de bijlage echt
|
|
-- en ruimt dan ook het record in fac_bijlagen op.
|
|
FOR rec_fb IN c_bijlagen_opdracht(rec_o.mld_opdr_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Anonimiseren van tekstvelden in de opdrachten van de melding.
|
|
UPDATE mld_opdr
|
|
SET mld_opdr_omschrijving = CASE WHEN mld_opdr_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_werkzaamheden = CASE WHEN mld_opdr_werkzaamheden IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_contactpersoon = CASE WHEN mld_opdr_contactpersoon IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_opmerking_fiat = CASE WHEN mld_opdr_opmerking_fiat IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_opmerking = CASE WHEN mld_opdr_opmerking IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE mld_opdr_key = rec_o.mld_opdr_key;
|
|
|
|
-- Anonimiseren van tekstvelden in opdrachtregels van de melding.
|
|
UPDATE mld_opdr_materiaal
|
|
SET mld_opdr_materiaal_omschr = CASE WHEN mld_opdr_materiaal_omschr IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_materiaal_info = CASE WHEN mld_opdr_materiaal_info IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_materiaal_extra1 = CASE WHEN mld_opdr_materiaal_extra1 IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_materiaal_extra2 = CASE WHEN mld_opdr_materiaal_extra2 IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_materiaal_extra3 = CASE WHEN mld_opdr_materiaal_extra3 IS NOT NULL THEN lcl_fac_anonymized END
|
|
, mld_opdr_materiaal_extra4 = CASE WHEN mld_opdr_materiaal_extra4 IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE mld_opdr_key = rec_o.mld_opdr_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de meldingsopdracht tracken.
|
|
fac.trackaction('#ORDANO', rec_o.mld_opdr_key, NULL, NULL, NULL);
|
|
END LOOP; -- opdrachten
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP; -- meldingen
|
|
END IF;
|
|
|
|
DBMS_APPLICATION_INFO.SET_ACTION (NULL);
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
DBMS_APPLICATION_INFO.SET_ACTION (NULL);
|
|
END;
|
|
|
|
PROCEDURE anonymizeprs (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
|
|
bez_generic_visitor VARCHAR2 (2001) := lcl.l('lcl_bez_generic_visitor');
|
|
prs_old_employee VARCHAR2 (100) := lcl.l('lcl_prs_old_employee');
|
|
v_count NUMBER;
|
|
anonymize_mode NUMBER;
|
|
|
|
-- Alle personen die tussen de startdatum en de einddatum verwijderd zijn.
|
|
CURSOR c_perslid
|
|
IS
|
|
SELECT '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_naam || '|' || p.prs_perslid_email || '] ' aanduiding,
|
|
p.prs_perslid_key
|
|
FROM prs_perslid p
|
|
WHERE p.prs_perslid_verwijder IS NOT NULL
|
|
AND p.prs_perslid_verwijder BETWEEN p_startdatum AND p_einddatum
|
|
AND NOT EXISTS
|
|
(SELECT ft.fac_tracking_key
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = p.prs_perslid_key
|
|
AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'PRSANO'))
|
|
ORDER BY 2;
|
|
|
|
CURSOR c_bijlagen(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, prs_kenmerk k
|
|
WHERE k.prs_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
|
AND BITAND(k.prs_kenmerk_systeem, 8) = 8
|
|
AND b.fac_bijlagen_module = 'PRS'
|
|
AND b.fac_bijlagen_refkey = p_refkey;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
SELECT fac.getSetting('anonymize_mode')
|
|
INTO anonymize_mode
|
|
FROM DUAL;
|
|
|
|
IF anonymize_mode > 0
|
|
THEN
|
|
v_count := 0;
|
|
FOR rec_p IN c_perslid
|
|
LOOP
|
|
BEGIN
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle PRSXXX tracking anonimiseren. De PRSLOG tracking moet verwijderd worden.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code LIKE 'PRS%'
|
|
AND fac_srtnotificatie_code != 'PRSLOG'
|
|
AND fac_srtnotificatie_code != 'PRSANO')
|
|
AND fac_tracking_refkey = rec_p.prs_perslid_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle PRS tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code LIKE 'PRS%'
|
|
AND fac_srtnotificatie_code != 'PRSLOG'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_p.prs_perslid_key
|
|
AND fac_tracking_oms IS NULL;
|
|
-- PRSLOG Tracking verwijderen.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_code = 'PRSLOG')
|
|
AND fac_tracking_refkey = rec_p.prs_perslid_key;
|
|
END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
--THEN
|
|
--END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de persoon waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het prs_kenmerk.prs_kenmerk_systeem veld is gezet.
|
|
DELETE FROM prs_kenmerklink pkl
|
|
WHERE pkl.prs_kenmerklink_niveau = 'P'
|
|
AND pkl.prs_link_key = rec_p.prs_perslid_key
|
|
AND pkl.prs_kenmerk_key IN (SELECT pk.prs_kenmerk_key
|
|
FROM prs_kenmerk pk
|
|
WHERE pk.prs_kenmerk_key = pkl.prs_kenmerk_key
|
|
AND BITAND(pk.prs_kenmerk_systeem, 8) = 8);
|
|
-- Zet het verwijder-veld van alle bijlagen van personen waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het prs_kenmerk.prs_kenmerk_systeem veld is gezet.
|
|
-- De scheduled functie utils/gen_schedular/gen_cleanup.js verwijderd dan binnenkort de bijlage echt
|
|
-- en ruimt dan ook het record in fac_bijlagen op.
|
|
FOR rec_fb in c_bijlagen(rec_p.prs_perslid_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
-- Persoon anonimiseren.
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_naam = prs_old_employee,
|
|
prs_perslid_tussenvoegsel = NULL,
|
|
prs_perslid_voorletters = NULL,
|
|
prs_perslid_voornaam = NULL,
|
|
prs_perslid_titel = NULL,
|
|
prs_perslid_initialen = NULL,
|
|
prs_perslid_geslacht = NULL,
|
|
prs_perslid_nr = NULL,
|
|
prs_perslid_telefoonnr = NULL,
|
|
prs_perslid_mobiel = NULL,
|
|
prs_perslid_email = NULL,
|
|
prs_perslid_oslogin = NULL,
|
|
prs_perslid_oslogin2 = NULL,
|
|
prs_perslid_uurloon = NULL,
|
|
alg_onroerendgoed_keys = NULL,
|
|
alg_onroerendgoed_type = NULL
|
|
WHERE prs_perslid_key = rec_p.prs_perslid_key;
|
|
|
|
-- Van al zijn afspraken waar hij host was, ook de naam van de host (=veld gastheer) anonimiseren.
|
|
-- Door update gebeurd dit eigenlijk al automatisch maar dan moet de persoon al wel eerst geanonimiseerd zijn.
|
|
UPDATE bez_afspraak
|
|
SET bez_afspraak_gastheer = bez_generic_visitor
|
|
WHERE bez_afspraak_host_key = rec_p.prs_perslid_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de persoon tracken.
|
|
fac.trackaction('#PRSANO', rec_p.prs_perslid_key, NULL, NULL, NULL);
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END;
|
|
END LOOP;
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE anonymizeres (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
anonymize_period NUMBER := fac.safe_to_number (fac.getsetting ('anonymize_period'));
|
|
bez_generic_visitor VARCHAR2 (2001) := lcl.l('lcl_bez_generic_visitor');
|
|
prs_old_employee VARCHAR2 (100) := lcl.l('lcl_prs_old_employee');
|
|
v_count NUMBER;
|
|
anonymize_mode NUMBER;
|
|
lcl_fac_anonymized fac_locale_xsl.fac_locale_xsl_tekst%TYPE := lcl.l('lcl_fac_anonymized');
|
|
|
|
-- Alle personen die tussen de startdatum en de einddatum verwijderd zijn.
|
|
CURSOR c_reservering
|
|
IS
|
|
SELECT r.res_rsv_ruimte_key
|
|
FROM res_rsv_ruimte r
|
|
WHERE (SELECT MAX(ft.fac_tracking_datum)
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = r.res_rsv_ruimte_key
|
|
AND ft.fac_srtnotificatie_key IN (SELECT nk.fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie nk
|
|
WHERE nk.fac_srtnotificatie_xmlnode = 'reservering'
|
|
AND nk.fac_srtnotificatie_key != (SELECT nc.fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie nc
|
|
WHERE nc.fac_srtnotificatie_code = 'RESANO'
|
|
)
|
|
)
|
|
) BETWEEN p_startdatum AND p_einddatum
|
|
AND ( r.res_status_bo_key IN (5,6)
|
|
OR r.res_rsv_ruimte_verwijder IS NOT NULL
|
|
)
|
|
AND NOT EXISTS
|
|
(SELECT ft.fac_tracking_key
|
|
FROM fac_tracking ft
|
|
WHERE ft.fac_tracking_refkey = r.res_rsv_ruimte_key
|
|
AND ft.fac_srtnotificatie_key = (SELECT nc.fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie nc
|
|
WHERE nc.fac_srtnotificatie_code = 'RESANO'
|
|
)
|
|
)
|
|
ORDER BY r.res_rsv_ruimte_key;
|
|
|
|
CURSOR c_bijlagen(p_refkey IN NUMBER)
|
|
IS
|
|
SELECT b.fac_bijlagen_key
|
|
FROM fac_bijlagen b
|
|
, res_kenmerk k
|
|
, res_srtkenmerk s
|
|
WHERE k.res_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
|
AND k.res_srtkenmerk_key = s.res_srtkenmerk_key
|
|
AND BITAND(s.res_srtkenmerk_systeem, 8) = 8
|
|
AND b.fac_bijlagen_module = 'RES'
|
|
AND b.fac_bijlagen_refkey = p_refkey;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
SELECT fac.getSetting('anonymize_mode')
|
|
INTO anonymize_mode
|
|
FROM DUAL;
|
|
|
|
IF anonymize_mode > 0
|
|
THEN
|
|
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt eventuele triggers
|
|
|
|
v_count := 0;
|
|
FOR rec_r IN c_reservering
|
|
LOOP
|
|
-- *
|
|
-- Anonimiseren reservering
|
|
IF (BITAND(anonymize_mode, 1) = 1) -- tracking
|
|
THEN
|
|
-- Alle RES tracking anonimiseren m.b.t. de reservering.
|
|
UPDATE fac_tracking
|
|
SET fac_tracking_oms = NULL
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'reservering'
|
|
AND fac_srtnotificatie_code != 'RESANO')
|
|
AND fac_tracking_refkey = rec_r.res_rsv_ruimte_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
-- Alle RES tracking verwijderen waar geen omschrijving in staat
|
|
-- en waarvoor er ook geen srtnotificatie-tekst bestaat.
|
|
DELETE FROM fac_tracking
|
|
WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie
|
|
WHERE fac_srtnotificatie_xmlnode = 'reservering'
|
|
AND fac_srtnotificatie_oms IS NULL
|
|
)
|
|
AND fac_tracking_refkey = rec_r.res_rsv_ruimte_key
|
|
AND fac_tracking_oms IS NULL;
|
|
END IF;
|
|
|
|
--IF (BITAND(anonymize_mode, 2) = 2) -- notes
|
|
--THEN
|
|
--END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 4) = 4) -- kenmerken
|
|
THEN
|
|
-- Verwijder alle kenmerkwaarden van de reservering waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het res_srtkenmerk.res_srtkenmerk_systeem veld is gezet.
|
|
DELETE FROM res_kenmerkwaarde rkw
|
|
WHERE rkw.res_rsv_ruimte_key = rec_r.res_rsv_ruimte_key
|
|
AND rkw.res_kenmerk_key IN (SELECT rk.res_kenmerk_key
|
|
FROM res_kenmerk rk
|
|
, res_srtkenmerk rsk
|
|
WHERE rk.res_srtkenmerk_key = rsk.res_srtkenmerk_key
|
|
AND rk.res_kenmerk_key = rkw.res_kenmerk_key
|
|
AND BITAND(rsk.res_srtkenmerk_systeem, 8) = 8);
|
|
-- Zet het verwijder-veld van alle bijlagen van reservering waarvan het &8 (BITAND) bit (anonimiseren)
|
|
-- van het res_srtkenmerk.res_srtkenmerk_systeem veld is gezet.
|
|
-- De scheduled functie utils/gen_schedular/gen_cleanup.js verwijderd dan binnenkort de bijlage echt
|
|
-- en ruimt dan ook het record in fac_bijlagen op.
|
|
FOR rec_fb in c_bijlagen(rec_r.res_rsv_ruimte_key)
|
|
LOOP
|
|
flx.deleteflexbijlage(rec_fb.fac_bijlagen_key);
|
|
END LOOP;
|
|
END IF;
|
|
|
|
IF (BITAND(anonymize_mode, 8) = 8) -- vaste omschrijvingen
|
|
THEN
|
|
UPDATE res_rsv_ruimte
|
|
SET res_rsv_ruimte_omschrijving = CASE WHEN res_rsv_ruimte_omschrijving IS NOT NULL THEN lcl_fac_anonymized END
|
|
, res_rsv_ruimte_opmerking = CASE WHEN res_rsv_ruimte_opmerking IS NOT NULL THEN lcl_fac_anonymized END
|
|
, res_rsv_ruimte_telefoon = CASE WHEN res_rsv_ruimte_telefoon IS NOT NULL THEN lcl_fac_anonymized END
|
|
WHERE res_rsv_ruimte_key = rec_r.res_rsv_ruimte_key;
|
|
END IF;
|
|
|
|
-- Anonimiseren van de reservering tracken.
|
|
fac.trackaction('#RESANO', rec_r.res_rsv_ruimte_key, NULL, NULL, NULL);
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP;
|
|
END IF;
|
|
END;
|
|
|
|
-- Bitje 1 gezet: PRSSYS wachtwoorden (ook) wissen
|
|
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535)
|
|
AS
|
|
BEGIN
|
|
DBMS_APPLICATION_INFO.SET_ACTION ('ANONYMIZE'); // Voorkomt trigger bez_t_bez_afspraak_B_IU die in de weg kan zitten
|
|
|
|
-- Destructive obstrufication of personal data.
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_naam = INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_naam)))
|
|
WHERE prs_perslid_naam NOT LIKE 'INACTIEF:%'
|
|
AND prs_perslid_naam NOT LIKE 'Facilitor'
|
|
AND (prs_perslid_oslogin IS NULL OR SUBSTR(prs_perslid_oslogin, 1, 1) <> '_');
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_voornaam = INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_voornaam)))
|
|
WHERE prs_perslid_voornaam IS NOT NULL
|
|
AND (prs_perslid_oslogin IS NULL OR SUBSTR(prs_perslid_oslogin, 1, 1) <> '_');
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_voorletters = UPPER( SUBSTR(prs_perslid_voorletters,1,1)
|
|
|| REGEXP_REPLACE(SUBSTR(prs_perslid_voorletters, 2), '[A-Z]', DBMS_RANDOM.string('l',1))
|
|
)
|
|
WHERE prs_perslid_voorletters IS NOT NULL;
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_naam = 'INACTIEF:' || INITCAP (DBMS_RANDOM.string ('l', LENGTH (prs_perslid_naam) - 9))
|
|
WHERE prs_perslid_naam LIKE 'INACTIEF:%';
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_email = 'P' || TO_CHAR(prs_perslid_key) || '@notexist.facilitor.nl'
|
|
WHERE prs_perslid_email IS NOT NULL;
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_oslogin2='O' || TO_CHAR(prs_perslid_key)
|
|
WHERE prs_perslid_oslogin2 IS NOT NULL;
|
|
|
|
IF BITAND(p_flags, 1) = 1 THEN
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_wachtwoord_hash = null;
|
|
ELSE -- PRSSYS ingemoeid laten
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_wachtwoord_hash = null
|
|
WHERE prs_perslid_key NOT IN
|
|
(SELECT fw.prs_perslid_key
|
|
FROM fac_v_webgebruiker fw, fac_functie f
|
|
WHERE fw.fac_functie_key = f.fac_functie_key
|
|
AND fac_functie_code = 'WEB_PRSSYS');
|
|
END IF;
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_apikey = 'TEST_' || dbms_utility.get_hash_value(prs_perslid_apikey, 0, power(2,24))
|
|
WHERE prs_perslid_apikey IS NOT NULL;
|
|
|
|
-- Deze weer kloppend maken voor als je lokaal gaat testen
|
|
UPDATE fac_setting
|
|
SET fac_setting_pvalue =
|
|
(SELECT prs_perslid_apikey
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_oslogin = '_PUTORDERS')
|
|
WHERE fac_setting_pvalue IS NOT NULL
|
|
AND fac_setting_name = 'puo_fclt_web_apikey';
|
|
|
|
DELETE FROM fac_imp_perslid;
|
|
|
|
-- Indien mogelijk de naam van contactpersoon overnemen van prs_perslid.
|
|
UPDATE prs_contactpersoon cp
|
|
SET prs_contactpersoon_naam =
|
|
( SELECT CASE WHEN c.prs_perslid_key IS NULL
|
|
THEN UPPER(SUBSTR(c.prs_contactpersoon_naam,1,1)) || DBMS_RANDOM.string('l', LENGTH(c.prs_contactpersoon_naam) -1)
|
|
ELSE SUBSTR(p.prs_perslid_naam, 1, 30)
|
|
END
|
|
FROM prs_contactpersoon c
|
|
, prs_perslid p
|
|
WHERE c.prs_perslid_key = p.prs_perslid_key(+)
|
|
AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key
|
|
);
|
|
|
|
UPDATE prs_contactpersoon cp
|
|
SET cp.prs_contactpersoon_voornaam =
|
|
( SELECT CASE WHEN c.prs_perslid_key IS NULL
|
|
THEN UPPER(SUBSTR(c.prs_contactpersoon_voornaam,1,1) || DBMS_RANDOM.string('l', LENGTH(c.prs_contactpersoon_voornaam) -1))
|
|
ELSE p.prs_perslid_voornaam
|
|
END
|
|
FROM prs_contactpersoon c
|
|
, prs_perslid p
|
|
WHERE c.prs_perslid_key = p.prs_perslid_key(+)
|
|
AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key
|
|
)
|
|
WHERE prs_contactpersoon_voornaam IS NOT NULL;
|
|
|
|
UPDATE prs_contactpersoon cp
|
|
SET prs_contactpersoon_voorletters =
|
|
( SELECT CASE WHEN c.prs_perslid_key IS NULL
|
|
THEN UPPER(SUBSTR(c.prs_contactpersoon_voornaam,1,1) || REGEXP_REPLACE(SUBSTR(c.prs_contactpersoon_voorletters,2),'[A-Z]', DBMS_RANDOM.string('l',1)))
|
|
ELSE SUBSTR(p.prs_perslid_voorletters, 1, 15)
|
|
END
|
|
FROM prs_contactpersoon c
|
|
, prs_perslid p
|
|
WHERE c.prs_perslid_key = p.prs_perslid_key(+)
|
|
AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key
|
|
)
|
|
WHERE prs_contactpersoon_voorletters IS NOT NULL;
|
|
|
|
UPDATE prs_contactpersoon
|
|
SET prs_contactpersoon_email= 'EC' || TO_CHAR(prs_contactpersoon_key) || '@notexist.facilitor.nl'
|
|
WHERE prs_contactpersoon_email IS NOT NULL;
|
|
|
|
UPDATE bez_afspraak
|
|
SET bez_afspraak_gastheer = (SELECT SUBSTR(prs_perslid_naam_full,1,50)
|
|
FROM prs_v_perslid_fullnames_all
|
|
WHERE prs_perslid_key = bez_afspraak_host_key
|
|
)
|
|
WHERE bez_afspraak_host_key IS NOT NULL;
|
|
|
|
UPDATE bez_afspraak
|
|
SET bez_afspraak_gastheer = INITCAP (DBMS_RANDOM.string ('l', LENGTH (bez_afspraak_gastheer)))
|
|
WHERE bez_afspraak_host_key IS NULL;
|
|
|
|
UPDATE bez_bezoekers
|
|
SET bez_afspraak_naam = UPPER(SUBSTR(bez_afspraak_naam,1,1)) || '. Bezoeker'
|
|
WHERE bez_afspraak_naam IS NOT NULL
|
|
AND bez_afspraak_naam <> 'Anoniem';
|
|
|
|
UPDATE bez_bezoekers
|
|
SET bez_afspraak_bedrijf = UPPER(SUBSTR(bez_afspraak_bedrijf,1,1)) || 'areon B.V.'
|
|
WHERE bez_afspraak_bedrijf IS NOT NULL
|
|
AND bez_afspraak_bedrijf <> 'Anoniem';
|
|
|
|
-- Alleen de externe bedrijven
|
|
UPDATE prs_bedrijf
|
|
SET prs_bedrijf_naam = ano.naam(prs_bedrijf_naam, 10)
|
|
, prs_bedrijf_post_adres = ano.adres(prs_bedrijf_post_adres)
|
|
, prs_bedrijf_post_postcode = ano.postcode(prs_bedrijf_post_postcode)
|
|
, prs_bedrijf_bezoek_adres = ano.adres(prs_bedrijf_bezoek_adres)
|
|
, prs_bedrijf_bezoek_postcode = ano.postcode(prs_bedrijf_bezoek_postcode)
|
|
, prs_bedrijf_bezoek_plaats = ano.generic(prs_bedrijf_bezoek_plaats, 1)
|
|
, prs_bedrijf_telefoon = ano.telefoon(prs_bedrijf_telefoon)
|
|
, prs_bedrijf_telefoon2 = ano.telefoon(prs_bedrijf_telefoon2)
|
|
, prs_bedrijf_fax = ano.telefoon(prs_bedrijf_fax)
|
|
, prs_bedrijf_url = ano.generic(prs_bedrijf_url)
|
|
, prs_bedrijf_email = ano.email(prs_bedrijf_email)
|
|
, prs_bedrijf_contact_persoon = ano.naam(prs_bedrijf_contact_persoon)
|
|
, prs_bedrijf_contact_telefoon = ano.telefoon(prs_bedrijf_contact_telefoon)
|
|
, prs_bedrijf_contact_fax = ano.telefoon(prs_bedrijf_contact_fax)
|
|
WHERE prs_bedrijf_intern IS NULL;
|
|
|
|
UPDATE prs_bedrijfadres
|
|
SET prs_bedrijfadres_url = ano.email(prs_bedrijfadres_url)
|
|
, prs_bedrijfadres_username = ano.naam(prs_bedrijfadres_username)
|
|
, prs_bedrijfadres_password = NULL;
|
|
|
|
UPDATE aut_idp
|
|
SET aut_idp_secret = 'TEST_' || DBMS_RANDOM.string('a', 10)
|
|
WHERE aut_idp_secret IS NOT NULL
|
|
AND aut_idp_internal = 0;
|
|
|
|
UPDATE aut_sp
|
|
SET aut_sp_secret = 'TEST_' || DBMS_RANDOM.string('a', 10)
|
|
WHERE aut_sp_secret IS NOT NULL
|
|
AND aut_sp_internal = 0;
|
|
|
|
UPDATE mld_adres
|
|
SET mld_adres_bezoek_adres = ano.adres(mld_adres_bezoek_adres)
|
|
, mld_adres_bezoek_postcode = ano.postcode(mld_adres_bezoek_postcode)
|
|
, mld_adres_post_adres = ano.adres(mld_adres_post_adres)
|
|
, mld_adres_post_postcode = ano.postcode(mld_adres_post_postcode)
|
|
, mld_adres_contactpersoon = ano.naam(mld_adres_contactpersoon)
|
|
, mld_adres_contactpers_telefoon = ano.telefoon(mld_adres_contactpers_telefoon)
|
|
, mld_adres_contactpers_email = ano.email(mld_adres_contactpers_email)
|
|
, mld_adres_telefoon = ano.telefoon(mld_adres_telefoon)
|
|
, mld_adres_email = ano.email(mld_adres_email);
|
|
|
|
UPDATE mld_melding
|
|
SET mld_melding_naam_ext = ano.naam(mld_melding_naam_ext)
|
|
, mld_melding_email_ext = ano.email(mld_melding_email_ext)
|
|
, mld_melding_tel_ext = ano.telefoon(mld_melding_tel_ext);
|
|
|
|
UPDATE mld_disc_params
|
|
SET mld_disc_params_emailnw1 = ano.email(mld_disc_params_emailnw1)
|
|
, mld_disc_params_emailnw2 = ano.email(mld_disc_params_emailnw2)
|
|
, mld_disc_params_emailnw3 = ano.email(mld_disc_params_emailnw3)
|
|
, mld_disc_params_emailnw4 = ano.email(mld_disc_params_emailnw4)
|
|
, mld_disc_params_smsnw1 = ano.telefoon(mld_disc_params_smsnw1)
|
|
, mld_disc_params_smsnw2 = ano.telefoon(mld_disc_params_smsnw2)
|
|
, mld_disc_params_smsnw3 = ano.telefoon(mld_disc_params_smsnw3)
|
|
, mld_disc_params_smsnw4 = ano.telefoon(mld_disc_params_smsnw4)
|
|
WHERE mld_ins_discipline_key IN (SELECT ins_discipline_key
|
|
FROM mld_discipline);
|
|
|
|
ano.table_column('mld_opdr', 'mld_opdr_contactpersoon', 'naam');
|
|
|
|
ano.table_column('fin_verkoopfactuur', 'prs_debiteur_naam', 'naam');
|
|
ano.table_column('alg_gebouw', 'alg_gebouw_email', 'email');
|
|
ano.table_column('alg_locatie', 'alg_locatie_email', 'email');
|
|
ano.table_column('bez_bezoekers', 'bez_bezoekers_email', 'email');
|
|
ano.table_column('fac_notificatie', 'fac_notificatie_sender_email', 'email');
|
|
ano.table_column('fac_notificatie', 'fac_notificatie_receiver_email', 'email');
|
|
ano.table_column('ins_tab_discipline', 'ins_discipline_email', 'email');
|
|
ano.table_column('alg_locatie', 'alg_locatie_verantw_tel', 'telefoon');
|
|
ano.table_column('bez_afspraak', 'bez_afspraak_telefoonnr', 'telefoon');
|
|
ano.table_column('bez_bezoekers', 'bez_bezoekers_telefoon', 'telefoon');
|
|
ano.table_column('prs_contactpersoon', 'prs_contactpersoon_telefoon_1', 'telefoon');
|
|
ano.table_column('prs_contactpersoon', 'prs_contactpersoon_telefoon_2', 'telefoon');
|
|
ano.table_column('prs_perslid', 'prs_perslid_telefoonnr', 'telefoon');
|
|
ano.table_column('prs_perslid', 'prs_perslid_mobiel', 'telefoon');
|
|
|
|
DBMS_APPLICATION_INFO.SET_ACTION (NULL);
|
|
|
|
// Onderstaande heeft niets met anonimiseren te maken maar anonymizefull draait nogal eens
|
|
// na een import en dan is het altijd fijn om de mld_t_uitvoertijd te herstellen
|
|
adm.fix_mld_t_uitvoertijd();
|
|
END;
|
|
|
|
PROCEDURE anonymize (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
BEGIN
|
|
anonymizebes(p_startdatum, p_einddatum);
|
|
anonymizebez(p_startdatum, p_einddatum);
|
|
anonymizefin(p_startdatum, p_einddatum);
|
|
anonymizemld(p_startdatum, p_einddatum);
|
|
anonymizeprs(p_startdatum, p_einddatum);
|
|
anonymizeres(p_startdatum, p_einddatum);
|
|
END;
|
|
|
|
PROCEDURE table_column(p_tabel IN VARCHAR2,
|
|
p_kolom IN VARCHAR2,
|
|
p_functie IN VARCHAR2)
|
|
AS
|
|
sql_str VARCHAR2(2000);
|
|
BEGIN
|
|
sql_str := 'UPDATE ' || p_tabel
|
|
|| ' SET ' || p_kolom || ' = ano.' || p_functie || '(' || p_kolom || ')'
|
|
|| ' WHERE ' || p_kolom || ' IS NOT NULL';
|
|
EXECUTE IMMEDIATE sql_str;
|
|
END;
|
|
|
|
FUNCTION postcode(postcode_veld IN VARCHAR2) RETURN VARCHAR2
|
|
IS
|
|
c VARCHAR2(1);
|
|
code VARCHAR2(15) := '';
|
|
BEGIN
|
|
IF (postcode_veld IS NOT NULL)
|
|
THEN
|
|
FOR i IN 1..LENGTH(SUBSTR(postcode_veld,1,15))
|
|
LOOP
|
|
c := SUBSTR(postcode_veld,i,1);
|
|
BEGIN
|
|
c := TO_CHAR(TO_NUMBER(c));
|
|
c := TO_CHAR(TRUNC(DBMS_RANDOM.value(0,10)));
|
|
EXCEPTION
|
|
WHEN VALUE_ERROR THEN
|
|
IF (c NOT IN (' ','-'))
|
|
THEN
|
|
c := DBMS_RANDOM.string('u',1);
|
|
END IF;
|
|
END;
|
|
code := code||c;
|
|
END LOOP;
|
|
END IF;
|
|
RETURN code;
|
|
END postcode;
|
|
|
|
FUNCTION telefoon(telefoon_veld IN VARCHAR2) RETURN VARCHAR2
|
|
IS
|
|
n NUMBER;
|
|
r NUMBER;
|
|
i NUMBER;
|
|
f VARCHAR2(5) := '+-_ *'; -- alleen deze laten we staan
|
|
tel VARCHAR2(30) := '';
|
|
c VARCHAR2(1);
|
|
BEGIN
|
|
IF (telefoon_veld IS NOT NULL)
|
|
THEN
|
|
n := DBMS_RANDOM.value(0,1);
|
|
tel := TO_CHAR(TRUNC(n * POWER(10,LENGTH(telefoon_veld))));
|
|
FOR r IN 0..3
|
|
LOOP
|
|
c := SUBSTR(f,r,1);
|
|
i := 1;
|
|
WHILE (INSTR(telefoon_veld, c, 1, i) > 0)
|
|
LOOP
|
|
tel := REGEXP_REPLACE(tel
|
|
,'(^.{'||(INSTR(telefoon_veld,c,1,i)-1)||'})(.{1})(.*)$'
|
|
,'\1'||c||'\3'
|
|
);
|
|
i := i + 1;
|
|
END LOOP;
|
|
END LOOP;
|
|
END IF;
|
|
RETURN tel;
|
|
END telefoon;
|
|
|
|
FUNCTION adres(adres_veld IN VARCHAR2) RETURN VARCHAR2
|
|
IS
|
|
c VARCHAR2(1);
|
|
adres VARCHAR2(100) := '';
|
|
BEGIN
|
|
IF (adres_veld IS NOT NULL)
|
|
THEN
|
|
FOR i IN 1..LENGTH(adres_veld)
|
|
LOOP
|
|
c := SUBSTR(adres_veld,i,1);
|
|
BEGIN
|
|
c := TO_CHAR(TO_NUMBER(c));
|
|
EXCEPTION
|
|
WHEN VALUE_ERROR THEN
|
|
IF (c <> ' ')
|
|
THEN
|
|
c := DBMS_RANDOM.string('l',1);
|
|
END IF;
|
|
END;
|
|
adres := adres||c;
|
|
END LOOP;
|
|
END IF;
|
|
RETURN INITCAP(adres);
|
|
END adres;
|
|
|
|
FUNCTION email(email_veld IN VARCHAR2) RETURN VARCHAR2
|
|
IS
|
|
c varchar2(1);
|
|
e varchar2(500) := '_';
|
|
a varchar2(500);
|
|
email varchar2(500) := '';
|
|
occ number;
|
|
BEGIN
|
|
email := email_veld;
|
|
IF (email IS NOT NULL)
|
|
THEN
|
|
occ := 0;
|
|
WHILE (e IS NOT NULL)
|
|
LOOP
|
|
occ := occ + 1;
|
|
SELECT REGEXP_SUBSTR(email, '([a-zA-Z0-9._+-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)', 1, occ)
|
|
INTO e
|
|
FROM dual;
|
|
IF (e IS NOT NULL)
|
|
THEN
|
|
a := '';
|
|
FOR i IN 1..LENGTH(e)
|
|
LOOP
|
|
c := SUBSTR(e, i, 1);
|
|
IF (c NOT IN ('.','@'))
|
|
THEN
|
|
c := DBMS_RANDOM.string('1',1);
|
|
END IF;
|
|
a := a || c;
|
|
END LOOP;
|
|
email := replace(email, e, a);
|
|
END IF;
|
|
END LOOP;
|
|
END IF;
|
|
RETURN email;
|
|
END email;
|
|
|
|
FUNCTION naam(naam_veld IN VARCHAR2, uniek IN NUMBER DEFAULT 0) RETURN VARCHAR2
|
|
IS
|
|
mx NUMBER := 60; -- Maximale lengte van naam_veld.
|
|
ca NUMBER := 0;
|
|
cx NUMBER := 0;
|
|
ci NUMBER;
|
|
nm VARCHAR2(200) := '';
|
|
BEGIN
|
|
IF (naam_veld IS NOT NULL)
|
|
THEN
|
|
ca := LENGTH(naam_veld);
|
|
ci := INSTR(naam_veld, '(', -1);
|
|
IF (SUBSTR(naam_veld, ca, 1) = ')' AND ci > 0)
|
|
THEN -- de naam bevat haakjes ()
|
|
cx := ca - ci + 1; -- - 1;
|
|
ca := ca - cx; -- - 2;
|
|
END IF;
|
|
ca := LEAST(GREATEST(ca, uniek), mx);
|
|
nm := UPPER(SUBSTR(naam_veld, 1, 1)) || DBMS_RANDOM.string('l', ca -1);
|
|
IF (cx > 0)
|
|
THEN
|
|
cx := GREATEST(LEAST(cx, (mx - ca)), 0);
|
|
nm := nm || '(' || DBMS_RANDOM.string('l', cx - 2) || ')';
|
|
END IF;
|
|
END IF;
|
|
RETURN nm;
|
|
END naam;
|
|
|
|
FUNCTION memo(memo_veld IN VARCHAR2) RETURN VARCHAR2
|
|
IS
|
|
memo VARCHAR2(4000) := '';
|
|
c VARCHAR2(1) := '';
|
|
r VARCHAR2(1);
|
|
BEGIN
|
|
IF (memo_veld IS NOT NULL)
|
|
THEN
|
|
FOR i IN 1..LENGTH(memo_veld)
|
|
LOOP
|
|
r := SUBSTR(memo_veld,i,1);
|
|
IF (r NOT IN (' ','.') )
|
|
THEN
|
|
c := DBMS_RANDOM.string('l',1);
|
|
IF (r = UPPER(r))
|
|
THEN
|
|
c := UPPER(c);
|
|
END IF;
|
|
ELSE
|
|
c := r;
|
|
END IF;
|
|
memo := memo||c;
|
|
END LOOP;
|
|
END IF;
|
|
RETURN memo;
|
|
END memo;
|
|
|
|
FUNCTION generic(veld IN VARCHAR2, fmt IN NUMBER DEFAULT 0) RETURN VARCHAR2
|
|
IS
|
|
BEGIN
|
|
-- fmt is wat formatting
|
|
-- 0 = niks
|
|
-- 1 = INITCAP
|
|
IF (veld IS NOT NULL)
|
|
THEN
|
|
IF fmt = 1
|
|
THEN
|
|
RETURN INITCAP(DBMS_RANDOM.string('l', LENGTH(veld)));
|
|
ELSE
|
|
RETURN DBMS_RANDOM.string('l', LENGTH(veld));
|
|
END IF;
|
|
ELSE
|
|
RETURN NULL;
|
|
END IF;
|
|
END generic;
|
|
|
|
END ano;
|
|
/
|
|
|
|
|
|
|
|
REGISTERRUN('$Id$')
|
|
|
|
#endif // ANO
|