846 lines
40 KiB
Plaintext
846 lines
40 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 anonymizemld (p_startdatum IN DATE, p_einddatum IN DATE);
|
|
PROCEDURE anonymizeprs (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;
|
|
|
|
-- 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;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
v_count := 0;
|
|
FOR rec_b IN c_bestelling
|
|
LOOP
|
|
-- Verwijder alle kenmerkwaarden van de bestelling waarvan het &8 (BITAND) bit 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);
|
|
|
|
|
|
-- Verwijder alle kenmerkwaarden van de bestelopdrachten van de bestelling waarvan het &8 (BITAND) bit 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);
|
|
|
|
-- 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;
|
|
|
|
-- 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
|
|
-- 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;
|
|
|
|
-- Anonimiseren van de bestelopdracht tracken.
|
|
fac.trackaction('BES2AN', rec_bo.bes_bestelopdr_key, NULL, NULL, NULL);
|
|
END LOOP;
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP;
|
|
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;
|
|
|
|
-- 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;
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
v_count := 0;
|
|
FOR rec IN c_afspraak
|
|
LOOP
|
|
-- Verwijder alle kenmerkwaarden van bezoekers van de afspraak waarvan het &8 (BITAND) bit 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.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);
|
|
|
|
-- 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.bez_afspraak_key;
|
|
|
|
-- 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 gasheer 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.bez_afspraak_key;
|
|
|
|
-- 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.bez_afspraak_key
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
|
|
-- 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.bez_afspraak_key)
|
|
AND fac_tracking_oms IS NOT NULL;
|
|
|
|
-- Anonimiseren van de afspraak tracken.
|
|
fac.trackaction('BEZANO', rec.bez_afspraak_key, NULL, NULL, NULL);
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP;
|
|
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;
|
|
|
|
-- 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;
|
|
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
v_count := 0;
|
|
FOR rec_m IN c_melding
|
|
LOOP
|
|
-- Verwijder alle kenmerkwaarden van de melding waarvan het &8 (BITAND) bit 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);
|
|
|
|
-- Verwijder alle kenmerkwaarden van de opdrachten van de melding waarvan het &8 (BITAND) bit van het mld_srtkenmerk.mld_srtkenmerk_systeem veld is gezet.
|
|
DELETE FROM mld_kenmerkopdr mko
|
|
WHERE mko.mld_opdr_key IN (SELECT mo.mld_opdr_key
|
|
FROM mld_opdr mo
|
|
WHERE mo.mld_melding_key = rec_m.mld_melding_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);
|
|
|
|
-- 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;
|
|
|
|
-- 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
|
|
-- 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;
|
|
|
|
-- Anonimiseren van de meldingsopdracht tracken.
|
|
fac.trackaction('ORDANO', rec_o.mld_opdr_key, NULL, NULL, NULL);
|
|
END LOOP;
|
|
|
|
IF v_count >= 1000
|
|
THEN
|
|
COMMIT;
|
|
v_count := 0;
|
|
ELSE
|
|
v_count := v_count + 1;
|
|
END IF;
|
|
END LOOP;
|
|
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;
|
|
|
|
-- 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;
|
|
BEGIN
|
|
IF p_einddatum > SYSDATE - anonymize_period + 1
|
|
THEN
|
|
raise_application_error(-20001, 'ano_m001 Einddatum is te groot');
|
|
END IF;
|
|
|
|
v_count := 0;
|
|
FOR rec IN c_perslid
|
|
LOOP
|
|
BEGIN
|
|
-- Verwijder alle kenmerkwaarden van de persoon waarvan het &8 (BITAND) bit 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.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);
|
|
|
|
-- 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.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.prs_perslid_key;
|
|
|
|
-- 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.prs_perslid_key
|
|
AND fac_tracking_oms IS NOT 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.prs_perslid_key;
|
|
|
|
-- Anonimiseren van de persoon tracken.
|
|
fac.trackaction('PRSANO', rec.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;
|
|
|
|
PROCEDURE anonymizefull(p_flags NUMBER DEFAULT 65535)
|
|
AS
|
|
BEGIN
|
|
-- 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;
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_wachtwoord_hash = null;
|
|
|
|
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;
|
|
|
|
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;
|
|
|
|
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU DISABLE';
|
|
|
|
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;
|
|
|
|
EXECUTE IMMEDIATE 'ALTER TRIGGER bez_t_bez_afspraak_B_IU ENABLE';
|
|
|
|
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';
|
|
|
|
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);
|
|
|
|
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');
|
|
END;
|
|
|
|
PROCEDURE anonymize (p_startdatum IN DATE,
|
|
p_einddatum IN DATE)
|
|
AS
|
|
BEGIN
|
|
anonymizebes(p_startdatum, p_einddatum);
|
|
anonymizebez(p_startdatum, p_einddatum);
|
|
anonymizemld(p_startdatum, p_einddatum);
|
|
anonymizeprs(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
|