Files
Customer/DLLG/DLLG.sql
Arthur Egberink c0946664ac DLLG#77449 -- Koppeling met Brivo systeem geeft foutmeldingen.
svn path=/Customer/trunk/; revision=59807
2023-03-29 14:49:39 +00:00

2159 lines
87 KiB
MySQL

--
-- $Id$
--
-- Script containing customer specific configuration sql statements for DLLG: De Lage Landen Group
DEFINE thisfile = 'DLLG.SQL'
DEFINE dbuser = '^DLLG'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE DLLG
AS
FUNCTION res_presave (p_user_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_activiteit_key IN NUMBER,
p_res_deel_key IN NUMBER,
p_datum_van IN DATE,
p_datum_tot IN DATE,
p_volgnr IN NUMBER)
RETURN VARCHAR2;
FUNCTION get_hex_card_data (p_card_number IN VARCHAR2,
p_facility_code IN VARCHAR2)
RETURN VARCHAR2;
PROCEDURE update_bezoeker (p_bezkey IN NUMBER);
PROCEDURE set_bezoeker_syncdate (p_bezkey IN NUMBER,
p_user_id IN NUMBER,
p_credential_id IN NUMBER);
-- tijdelijke overrule ivm DLLG#75083 Anonymization of visitors
PROCEDURE anonymizebez (p_startdatum IN DATE, p_einddatum IN DATE);
END;
/
CREATE OR REPLACE PACKAGE BODY DLLG
AS
FUNCTION res_presave (p_user_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_activiteit_key IN NUMBER,
p_res_deel_key IN NUMBER,
p_datum_van IN DATE,
p_datum_tot IN DATE,
p_volgnr IN NUMBER)
RETURN VARCHAR2
AS
v_result VARCHAR2 (300);
v_date DATE;
v_count NUMBER;
v_discipline_key NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
BEGIN
v_result := 'OK';
v_errorhint := 'Controleer activiteit: ' || p_activiteit_key;
IF p_activiteit_key = 30 AND p_rsv_ruimte_key = -1 -- workplace en alleen nieuwe reserveringen
THEN
v_errorhint :=
'Kijk hoeveel reserveringen er al zijn voor die dag';
SELECT COUNT (*)
INTO v_count
FROM res_rsv_ruimte rrr
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rrr.res_activiteit_key = 30 -- 30 workplace
AND TRUNC (res_rsv_ruimte_van) = TRUNC (p_datum_tot);
IF v_count > 3
THEN
v_result :=
'Beste collega,'
|| CHR (10)
|| 'We hebben deze maand al vier reserveringen van je gevonden. Je maximaal aantal te reserveren werkplekken per maand is dus bereikt.'
|| CHR (10)
|| 'Hartelijke groet, KPN Facilities';
END IF;
END IF;
RETURN v_result;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
RETURN v_result;
END;
FUNCTION get_hex_card_data (p_card_number VARCHAR2,
p_facility_code VARCHAR2)
RETURN VARCHAR2
AS
v_card_bin VARCHAR2 (100);
v_facility_bin VARCHAR2 (100);
v_card_hex VARCHAR2 (100);
v_facility_hex VARCHAR2 (100);
v_bin VARCHAR2 (100);
v_bin_str VARCHAR2 (100);
v_result VARCHAR2 (100);
v_length NUMBER;
FUNCTION OneHex2Bin (p_hex VARCHAR2)
RETURN VARCHAR2
AS
v_result VARCHAR2 (10);
BEGIN
IF p_hex = '0'
THEN
v_result := '0000';
ELSIF p_hex = '1'
THEN
v_result := '0001';
ELSIF p_hex = '2'
THEN
v_result := '0010';
ELSIF p_hex = '3'
THEN
v_result := '0011';
ELSIF p_hex = '4'
THEN
v_result := '0100';
ELSIF p_hex = '5'
THEN
v_result := '0101';
ELSIF p_hex = '6'
THEN
v_result := '0110';
ELSIF p_hex = '7'
THEN
v_result := '0111';
ELSIF p_hex = '8'
THEN
v_result := '1000';
ELSIF p_hex = '9'
THEN
v_result := '1001';
ELSIF p_hex = 'A'
THEN
v_result := '1010';
ELSIF p_hex = 'B'
THEN
v_result := '1011';
ELSIF p_hex = 'C'
THEN
v_result := '1100';
ELSIF p_hex = 'D'
THEN
v_result := '1101';
ELSIF p_hex = 'E'
THEN
v_result := '1110';
ELSIF p_hex = 'F'
THEN
v_result := '1111';
END IF;
RETURN v_result;
END;
FUNCTION FourBin2Hex (p_bin VARCHAR2)
RETURN VARCHAR2
AS
v_result VARCHAR2 (10);
BEGIN
IF p_bin = '0000'
THEN
v_result := '0';
ELSIF p_bin = '0001'
THEN
v_result := '1';
ELSIF p_bin = '0010'
THEN
v_result := '2';
ELSIF p_bin = '0011'
THEN
v_result := '3';
ELSIF p_bin = '0100'
THEN
v_result := '4';
ELSIF p_bin = '0101'
THEN
v_result := '5';
ELSIF p_bin = '0110'
THEN
v_result := '6';
ELSIF p_bin = '0111'
THEN
v_result := '7';
ELSIF p_bin = '1000'
THEN
v_result := '8';
ELSIF p_bin = '1001'
THEN
v_result := '9';
ELSIF p_bin = '1010'
THEN
v_result := 'A';
ELSIF p_bin = '1011'
THEN
v_result := 'B';
ELSIF p_bin = '1100'
THEN
v_result := 'C';
ELSIF p_bin = '1101'
THEN
v_result := 'D';
ELSIF p_bin = '1110'
THEN
v_result := 'E';
ELSIF p_bin = '1111'
THEN
v_result := 'F';
END IF;
RETURN v_result;
END;
FUNCTION set_parity (p_bin VARCHAR2,
p_mode VARCHAR2,
p_parity NUMBER)
RETURN VARCHAR2
AS
BEGIN
IF p_mode = 'after'
THEN
IF MOD (LENGTH (REPLACE (p_bin || p_parity, '0')), 2) = 0
THEN
RETURN p_bin || '0';
ELSE
RETURN p_bin || '1';
END IF;
ELSE
IF MOD (LENGTH (REPLACE (p_bin || p_parity, '0')), 2) = 0
THEN
RETURN '0' || p_bin;
ELSE
RETURN '1' || p_bin;
END IF;
END IF;
END;
BEGIN
v_card_hex := p_card_number;
-- transform the hex card data into a binary string
FOR v_index IN 1 .. 4
LOOP
v_card_bin :=
v_card_bin || OneHex2Bin (SUBSTR (v_card_hex, 1, 1));
v_card_hex := SUBSTR (v_card_hex, 2, 4);
END LOOP;
-- add the parity bit
--v_card_bin := set_parity (v_card_bin, 'after', 1);
-- transform the hex facility data into a binary string
v_facility_hex := p_facility_code;
FOR v_index IN 1 .. 2
LOOP
v_facility_bin :=
v_facility_bin || OneHex2Bin (SUBSTR (v_facility_hex, 1, 1));
v_facility_hex := SUBSTR (v_facility_hex, 2, 4);
END LOOP;
-- add the parity bit
-- v_facility_bin := set_parity (v_facility_bin, 'before', 0);
-- combine the facility data and the card data
v_bin := v_facility_bin || v_card_bin;
-- the first 12 bits have an even leading parity bit
-- the last 12 bits have a trailing odd parity bit
v_bin := set_parity (SUBSTR(v_bin, 1,12), 'before', 0) || set_parity (SUBSTR(v_bin, 13,12), 'after', 1);
-- and convert the binary string into hex
WHILE v_bin IS NOT NULL
LOOP
IF LENGTH (v_bin) <= 4
THEN
v_bin_str := LPAD (v_bin, 4, '0');
v_bin := NULL;
ELSE
v_bin_str := SUBSTR (v_bin, LENGTH (v_bin) - 3, 4);
v_bin := SUBSTR (v_bin, 1, LENGTH (v_bin) - 4);
END IF;
v_result := FourBin2Hex (v_bin_str) || v_result;
END LOOP;
RETURN LOWER(LTRIM(v_result, '0'));
END;
PROCEDURE update_bezoeker (p_bezkey IN NUMBER)
AS
CURSOR c IS
SELECT pf.prs_perslid_naam_full,
prs_perslid_email,
prs_perslid_mobiel,
bez_bezoekers_done
FROM bez_bezoekers b,
bez_afspraak a,
prs_perslid p,
prs_v_perslid_fullnames pf
WHERE bez_bezoekers_key = p_bezkey
AND b.bez_afspraak_key = a.bez_afspraak_key
AND a.bez_afspraak_host_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key;
v_count NUMBER;
v_found NUMBER;
v_code VARCHAR2 (5);
v_exists NUMBER;
v_card_number_key NUMBER;
v_facility_code_key NUMBER;
v_hex_code_key NUMBER;
v_dec_code_key NUMBER;
v_sync_timestamp_key NUMBER;
v_date DATE;
BEGIN
FOR rec IN c
LOOP
IF rec.bez_bezoekers_done IS NOT NULL
THEN
RETURN; -- Als de bezoeker al binnengemeld is hoeven we niet meer de kenmerken aan te passen
-- Sterker nog. We moeten oppassen dat we niet de sync wissen zodat de bezoeker opnieuw aangeboden wordt.
END IF;
-- Naam
IF FLX.getflex ('BEZ', 1020, p_bezkey) IS NULL
THEN
FLX.setflex ('BEZ',
1020,
p_bezkey,
rec.prs_perslid_naam_full);
END IF;
-- Email
IF FLX.getflex ('BEZ', 1021, p_bezkey) IS NULL
THEN
FLX.setflex ('BEZ',
1021,
p_bezkey,
rec.prs_perslid_email);
END IF;
-- Mobiel
IF FLX.getflex ('BEZ', 1022, p_bezkey) IS NULL
THEN
FLX.setflex ('BEZ',
1022,
p_bezkey,
rec.prs_perslid_mobiel);
END IF;
END LOOP;
-- Vul een uniek kaarnummer in die uniek is voor deze dag
v_count := 0;
v_found := 0;
DBMS_OUTPUT.put_line ('kenmerken');
SELECT bez_kenmerk_key
INTO v_card_number_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'CARD NUMBER';
SELECT bez_kenmerk_key
INTO v_facility_code_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'FACILITY CODE';
SELECT bez_kenmerk_key
INTO v_hex_code_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'HEX CODE';
SELECT bez_kenmerk_key
INTO v_dec_code_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'DEC CODE';
SELECT bez_kenmerk_key
INTO v_sync_timestamp_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'BRIVO SYNC TIMESTAMP';
DBMS_OUTPUT.put_line ('v_date');
SELECT bez_afspraak_datum
INTO v_date
FROM bez_afspraak a, bez_bezoekers b
WHERE a.bez_afspraak_key = b.bez_afspraak_key
AND b.bez_bezoekers_key = p_bezkey;
DBMS_OUTPUT.put_line ('v_code');
SELECT MAX (bez_kenmerkwaarde_waarde)
INTO v_code
FROM bez_kenmerkwaarde kw
WHERE kw.bez_bezoekers_key = p_bezkey
AND kw.bez_kenmerk_key = v_card_number_key;
-- We controleren of het card number al voorkomt bij een andere bezoeker
-- Bij het herhalen van de afspraak worden namelijk de kenmerken gekopieerd.
-- In dat geval wordt de timestamp op NULL gezet zodat de nieuwe informatie doorgestuurd wordt naar Brivo.
SELECT count(*)
INTO v_count
FROM bez_kenmerkwaarde kw
WHERE kw.bez_kenmerk_key = v_card_number_key
AND bez_kenmerkwaarde_waarde = v_code;
IF v_code IS NULL OR v_count > 1
THEN
fac.writelog ('DLLG: update_bezoeker', 'I', 'v_code: ' || v_code || ' p_bezkey: ' || p_bezkey, '');
v_code := REMAINDER (fac_s_user01.NEXTVAL, 50000);
FLX.setflex ('BEZ',
v_card_number_key,
p_bezkey,
v_code);
FLX.setflex ('BEZ',
v_sync_timestamp_key,
p_bezkey,
NULL);
END IF;
FLX.setflex ('BEZ',
v_facility_code_key,
p_bezkey,
'123');
-- Vul het flexveld hex code met de hex waarde die gescant moet worden.
-- We gebruiken hiervoor 'The Standard 26-Bit Format'
FLX.setflex (
'BEZ',
v_hex_code_key,
p_bezkey,
DLLG.get_hex_card_data (
LPAD (TRIM (TO_CHAR (v_code, 'XXXXXX')), 4, '0'),
LPAD (TRIM (TO_CHAR (123, 'XXXXXX')), 2, '0')));
FLX.setflex (
'BEZ',
v_dec_code_key,
p_bezkey,
'123' || LPAD(TRIM(v_code), 5, '0'));
END;
PROCEDURE set_bezoeker_syncdate (p_bezkey IN NUMBER,
p_user_id IN NUMBER,
p_credential_id IN NUMBER)
AS
v_credential_id_key NUMBER;
v_user_id_key NUMBER;
v_sync_timestamp_key NUMBER;
BEGIN
-- De id van de badge die in Brivo aangemaakt is.
SELECT bez_kenmerk_key
INTO v_credential_id_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'BRIVO CREDENTIAL ID';
FLX.setflex ('BEZ',
v_credential_id_key,
p_bezkey,
p_credential_id);
-- De id van de aangemaakte user in Brivo
SELECT bez_kenmerk_key
INTO v_user_id_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'BRIVO USER ID';
FLX.setflex ('BEZ',
v_user_id_key,
p_bezkey,
p_user_id);
-- Als de elementen in Brivo aangemaakt zijn, zetten we de timestamp.
-- Hierdoor wordt deze bezoeker niet weer opnieuw aangeboden.
SELECT bez_kenmerk_key
INTO v_sync_timestamp_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'BRIVO SYNC TIMESTAMP';
FLX.setflex ('BEZ',
v_sync_timestamp_key,
p_bezkey,
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
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;
END;
/
-- Tijdelijk omdat de generieke import geen komma als scheidingsteken kent.
CREATE OR REPLACE PROCEDURE DLLG_prs_import_perslid (
p_import_key IN NUMBER,
p_seq_of_columns IN VARCHAR2,
p_header IN VARCHAR2)
AS
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_field VARCHAR2 (100);
v_fielddelimitor VARCHAR2 (1);
v_aanduiding VARCHAR2 (400);
v_errormsg VARCHAR (200);
v_errorhint VARCHAR2 (200);
v_count NUMBER (10) := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_index NUMBER (10);
v_ongeldig NUMBER (10);
v_header_is_valid NUMBER (1) := 0;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- De importvelden
v_empty VARCHAR2 (100);
v_alg_locatie_code VARCHAR2 (256);
v_alg_gebouw_code VARCHAR2 (256);
v_alg_verdieping_volgnr VARCHAR2 (256);
v_alg_ruimte_nr VARCHAR2 (256);
v_prs_werkplek_volgnr VARCHAR2 (256);
v_prs_werkplek_omschrijving VARCHAR2 (256);
v_prs_afdeling_naam VARCHAR2 (256);
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_voorletters VARCHAR2 (256);
v_prs_perslid_partner_naam VARCHAR2 (256);
v_prs_perslid_partner_tussenv VARCHAR2 (256);
v_prs_naamgebruik_code VARCHAR2 (256);
v_prs_perslid_geslacht VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_mobiel VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_perslid_dienstverband VARCHAR2 (256);
v_prs_perslid_nr VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_titel VARCHAR2 (256);
v_prs_perslid_oslogin VARCHAR2 (256);
v_prs_perslid_wachtwoord VARCHAR2 (256);
v_prs_perslid_apikey VARCHAR2 (256);
v_prs_kenmerk1 VARCHAR2 (256);
v_prs_kenmerk2 VARCHAR2 (256);
v_prs_kenmerk3 VARCHAR2 (256);
v_prs_kenmerk4 VARCHAR2 (256);
v_prs_kenmerk5 VARCHAR2 (256);
v_prs_kenmerk6 VARCHAR2 (256);
v_prs_kenmerk7 VARCHAR2 (256);
v_prs_kenmerk8 VARCHAR2 (256);
v_prs_kenmerk9 VARCHAR2 (256);
v_prs_kenmerk10 VARCHAR2 (256);
v_prs_kenmerk11 VARCHAR2 (256);
v_prs_kenmerk12 VARCHAR2 (256);
v_prs_kenmerk13 VARCHAR2 (256);
v_prs_kenmerk14 VARCHAR2 (256);
v_prs_kenmerk15 VARCHAR2 (256);
v_prs_kenmerk16 VARCHAR2 (256);
v_prs_kenmerk17 VARCHAR2 (256);
v_prs_kenmerk18 VARCHAR2 (256);
v_prs_kenmerk19 VARCHAR2 (256);
v_prs_kenmerk20 VARCHAR2 (256);
v_alg_verdieping_volgnr_num NUMBER;
v_prs_werkplek_volgnr_num NUMBER;
v_prs_perslid_dienstv_num NUMBER;
v_seq_of_columns VARCHAR2 (200);
TYPE array_t IS VARRAY (46) OF NUMBER (10);
v_colnr array_t := array_t ();
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- JGL: Ik zou graag een WHERE fac_import_key = p_import_key hieronder
-- toevoegen zodat het script ook multi-user veilig is,
-- Heel veel klant-specifieke imports(/aanvullingen) controleren
-- echter niet op de fac_import_key en zouden flink de fout in gaan.
-- Daarom vooralsnog hier toch maar alles verwijderen
DELETE FROM fac_imp_perslid;
SELECT COALESCE (MAX (fac_imp_file_index), 0) + 1
INTO v_count
FROM fac_imp_factuur;
-- Init
v_fielddelimitor := ',';
v_seq_of_columns := p_seq_of_columns;
v_errorhint := 'Bepalen volgorde kolommen';
FOR v_index IN 1 .. 46
LOOP
v_colnr.EXTEND;
-- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
fac.imp_getfield (v_seq_of_columns,
v_fielddelimitor,
v_colnr (v_index));
END LOOP;
-- Indien geen header check is opgegeven, gaan we niet op zoek naar een geldige header
IF p_header IS NULL
THEN
v_header_is_valid := 1;
END IF;
FOR rec1 IN c
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := '';
v_errorhint := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
IF v_header_is_valid = 0
THEN
IF UPPER (v_newline) LIKE UPPER (p_header)
THEN
v_header_is_valid := 1;
END IF;
ELSE
-- Lees alle veldwaarden
v_errorhint := 'Inlezen alg_locatie_code kolom:' || v_colnr (1);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (1),
v_alg_locatie_code);
v_errorhint := 'Inlezen alg_lcoatie_code kolom:' || v_colnr (2);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (2),
v_alg_gebouw_code);
v_errorhint := 'Inlezen alg_verdieping_volgnr kolom:' || v_colnr (3);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (3),
v_alg_verdieping_volgnr);
v_errorhint := 'Inlezen alg_ruimte_nr kolom:' || v_colnr (4);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (4),
v_alg_ruimte_nr);
v_errorhint := 'Inlezen prs_werkplek_volgnr kolom:' || v_colnr (5);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (5),
v_prs_werkplek_volgnr);
v_errorhint := 'Inlezen prs_werkplek_omschrijving kolom:' || v_colnr (6);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (6),
v_prs_werkplek_omschrijving);
v_errorhint := 'Inlezen prs_afdeling_naam kolom:' || v_colnr (7);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (7),
v_prs_afdeling_naam);
v_errorhint := 'Inlezen prs_perslid_naam kolom:' || v_colnr (8);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (8),
v_prs_perslid_naam);
v_errorhint := 'Inlezen prs_perslid_tussenvoegsel kolom:' || v_colnr (9);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (9),
v_prs_perslid_tussenvoegsel);
v_errorhint := 'Inlezen prs_perslid_voornaam kolom:' || v_colnr (10);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (10),
v_prs_perslid_voornaam);
v_errorhint := 'Inlezen prs_perslid_voorletters kolom:' || v_colnr (11);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (11),
v_prs_perslid_voorletters);
v_errorhint := 'Inlezen prs_perslid_partner_naam kolom:' || v_colnr (12);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (12),
v_prs_perslid_partner_naam);
v_errorhint := 'Inlezen prs_perslid_partner_tussenv kolom:' || v_colnr (13);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (13),
v_prs_perslid_partner_tussenv);
v_errorhint := 'Inlezen prs_perslid_geslacht kolom:' || v_colnr (14);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (14),
v_prs_naamgebruik_code);
v_errorhint := 'Inlezen alg_lcoatie_code kolom:' || v_colnr (15);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (15),
v_prs_perslid_geslacht);
v_errorhint := 'Inlezen prs_perslid_telefoonnr kolom:' || v_colnr (16);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (16),
v_prs_perslid_telefoonnr);
v_errorhint := 'Inlezen prs_perslid_mobiel kolom:' || v_colnr (17);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (17),
v_prs_perslid_mobiel);
v_errorhint := 'Inlezen prs_perslid_email kolom:' || v_colnr (18);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (18),
v_prs_perslid_email);
v_errorhint := 'Inlezen prs_perslid_dienstverband kolom:' || v_colnr (19);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (19),
v_prs_perslid_dienstverband);
v_errorhint := 'Inlezen prs_perslid_nr kolom:' || v_colnr (20);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (20),
v_prs_perslid_nr);
v_errorhint := 'Inlezen prs_srtperslid_omschrijving kolom:' || v_colnr (21);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (21),
v_prs_srtperslid_omschrijving);
v_errorhint := 'Inlezen prs_perslid_oslogin kolom:' || v_colnr (22);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (22),
v_prs_perslid_oslogin);
v_errorhint := 'Inlezen prs_perslid_wachtwoord kolom:' || v_colnr (23);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (23),
v_prs_perslid_wachtwoord);
v_errorhint := 'Inlezen prs_perslid_titel kolom:' || v_colnr (24);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (24),
v_prs_perslid_titel);
v_errorhint := 'Inlezen prs_perslid_apikey kolom:' || v_colnr (25);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (25),
v_prs_perslid_apikey);
v_errorhint := 'Inlezen prs_kenmerk1 kolom:' || v_colnr (27);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (27),
v_prs_kenmerk1);
v_errorhint := 'Inlezen prs_kenmerk2 kolom:' || v_colnr (28);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (28),
v_prs_kenmerk2);
v_errorhint := 'Inlezen prs_kenmerk3 kolom:' || v_colnr (29);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (29),
v_prs_kenmerk3);
v_errorhint := 'Inlezen prs_kenmerk4 kolom:' || v_colnr (30);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (30),
v_prs_kenmerk4);
v_errorhint := 'Inlezen prs_kenmerk5 kolom:' || v_colnr (31);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (31),
v_prs_kenmerk5);
v_errorhint := 'Inlezen prs_kenmerk6 kolom:' || v_colnr (32);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (32),
v_prs_kenmerk6);
v_errorhint := 'Inlezen prs_kenmerk7 kolom:' || v_colnr (33);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (33),
v_prs_kenmerk7);
v_errorhint := 'Inlezen prs_kenmerk8 kolom:' || v_colnr (34);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (34),
v_prs_kenmerk8);
v_errorhint := 'Inlezen prs_kenmerk9 kolom:' || v_colnr (35);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (35),
v_prs_kenmerk9);
v_errorhint := 'Inlezen prs_kenmerk10 kolom:' || v_colnr (36);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (36),
v_prs_kenmerk10);
v_errorhint := 'Inlezen prs_kenmerk11 kolom:' || v_colnr (37);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (37),
v_prs_kenmerk11);
v_errorhint := 'Inlezen prs_kenmerk12 kolom:' || v_colnr (38);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (38),
v_prs_kenmerk12);
v_errorhint := 'Inlezen prs_kenmerk13 kolom:' || v_colnr (39);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (39),
v_prs_kenmerk13);
v_errorhint := 'Inlezen prs_kenmerk14 kolom:' || v_colnr (40);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (40),
v_prs_kenmerk14);
v_errorhint := 'Inlezen prs_kenmerk15 kolom:' || v_colnr (41);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (41),
v_prs_kenmerk15);
v_errorhint := 'Inlezen prs_kenmerk16 kolom:' || v_colnr (42);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (42),
v_prs_kenmerk16);
v_errorhint := 'Inlezen prs_kenmerk17 kolom:' || v_colnr (43);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (43),
v_prs_kenmerk17);
v_errorhint := 'Inlezen prs_kenmerk18 kolom:' || v_colnr (44);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (44),
v_prs_kenmerk18);
v_errorhint := 'Inlezen prs_kenmerk19 kolom:' || v_colnr (45);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (45),
v_prs_kenmerk19);
v_errorhint := 'Inlezen prs_kenmerk20 kolom:' || v_colnr (46);
fac.imp_getfield_nr (v_newline,
v_fielddelimitor,
v_colnr (46),
v_prs_kenmerk20);
v_aanduiding :=
v_prs_perslid_naam || '|' || v_prs_perslid_voornaam || '| ';
v_count_tot := v_count_tot + 1;
v_errorhint := 'Ongeldige locatiecode';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
IF LENGTH (v_alg_locatie_code) > 10
THEN
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Locatie-aanduiding is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_alg_locatie_code
|| ']');
END IF;
--
v_errorhint := 'Ongeldige gebouw code';
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
IF LENGTH (v_alg_gebouw_code) > 12
THEN
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Gebouw-aanduiding is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_alg_gebouw_code
|| ']');
END IF;
--
v_errorhint := 'Ongeldig verdieping volgnummer';
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
IF (v_alg_verdieping_volgnr IS NULL)
THEN
v_alg_verdieping_volgnr_num :=
TO_NUMBER (v_alg_verdieping_volgnr);
ELSE
BEGIN
v_alg_verdieping_volgnr_num :=
TO_NUMBER (v_alg_verdieping_volgnr);
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END;
END IF;
--
v_errorhint := 'Ongeldige ruimte nr';
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
IF LENGTH (v_alg_ruimte_nr) > 10
THEN
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ruimtenr-aanduiding is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_alg_ruimte_nr
|| ']');
END IF;
--
v_errorhint := 'Ongeldig werkplek volgnummer';
v_prs_werkplek_volgnr := TRIM (v_prs_werkplek_volgnr);
IF (v_prs_werkplek_volgnr IS NULL)
THEN
v_prs_werkplek_volgnr_num := TO_NUMBER (v_prs_werkplek_volgnr);
ELSE
BEGIN
v_alg_verdieping_volgnr_num :=
TO_NUMBER (v_alg_verdieping_volgnr);
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END;
END IF;
--
v_errorhint := 'Ongeldige werkplek omschrijving';
v_prs_werkplek_omschrijving := TRIM (v_prs_werkplek_omschrijving);
IF LENGTH (v_prs_werkplek_omschrijving) > 30
THEN
v_prs_werkplek_omschrijving :=
SUBSTR (v_prs_werkplek_omschrijving, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Werkplek-aanduiding is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_werkplek_omschrijving
|| ']');
END IF;
--
v_errorhint := 'Ongeldige afdelingscode';
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
IF LENGTH (v_prs_afdeling_naam) > 15
THEN
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdelingscode is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_afdeling_naam
|| ']');
ELSE
IF (v_prs_afdeling_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Afdelingscode onbekend',
'Afdelingscode moet worden opgegeven');
END IF;
END IF;
--
v_errorhint := 'Ongeldige naam persoon';
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 60
THEN
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Naam persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_naam
|| ']');
ELSE
IF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Naam persoon onbekend',
'Naam persoon moet worden opgegeven');
END IF;
END IF;
--
v_errorhint := 'Ongeldige tussenvoegsel persoon';
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
IF LENGTH (v_prs_perslid_tussenvoegsel) > 10
THEN
v_prs_perslid_tussenvoegsel :=
SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Tussenvoegsel persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_tussenvoegsel
|| ']');
END IF;
--
v_errorhint := 'Ongeldige voorletters persoon';
v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters);
IF LENGTH (v_prs_perslid_voorletters) > 15
THEN
v_prs_perslid_voorletters :=
SUBSTR (v_prs_perslid_voorletters, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Voorletters persoon zijn te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_voorletters
|| ']');
END IF;
--
v_errorhint := 'Voornaam persoon';
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
IF LENGTH (v_prs_perslid_voornaam) > 30
THEN
v_prs_perslid_voornaam :=
SUBSTR (v_prs_perslid_voornaam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Voornaam persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_voornaam
|| ']');
END IF;
v_errorhint := 'Ongeldige partnernaam persoon';
v_prs_perslid_partner_naam := TRIM (v_prs_perslid_partner_naam);
--
IF LENGTH (v_prs_perslid_partner_naam) > 60
THEN
v_prs_perslid_partner_naam := SUBSTR (v_prs_perslid_partner_naam, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Partnernaam is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_partner_naam
|| ']');
END IF;
--
v_errorhint := 'Ongeldige tussenvoegsel partner';
v_prs_perslid_partner_tussenv := TRIM (v_prs_perslid_partner_tussenv);
IF LENGTH (v_prs_perslid_partner_tussenv) > 10
THEN
v_prs_perslid_partner_tussenv :=
SUBSTR (v_prs_perslid_partner_tussenv, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Tussenvoegsel partner is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_partner_tussenv
|| ']');
END IF;
--
v_errorhint := 'Ongeldig geslacht';
v_prs_perslid_geslacht := TRIM (v_prs_perslid_geslacht);
IF LENGTH (v_prs_perslid_geslacht) > 1
THEN
SELECT DECODE(UPPER(v_prs_perslid_geslacht), 'MAN', '1', 'VROUW', '0', NULL)
INTO v_prs_perslid_geslacht
FROM DUAL;
ELSE
IF fac.safe_to_number(v_prs_perslid_geslacht) IS NULL
THEN
SELECT DECODE(UPPER(v_prs_perslid_geslacht), 'M', '1', 'V', '0', NULL)
INTO v_prs_perslid_geslacht
FROM DUAL;
END IF;
END IF;
--
v_errorhint := 'Ongeldig dienstverband';
v_prs_perslid_dienstverband := TRIM (v_prs_perslid_dienstverband);
IF (v_prs_perslid_dienstverband IS NOT NULL)
THEN
BEGIN
v_prs_perslid_dienstv_num :=
TO_NUMBER (v_prs_perslid_dienstverband);
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END;
END IF;
--
v_errorhint := 'Ongeldige titel persoon';
v_prs_perslid_titel := TRIM (v_prs_perslid_titel);
IF LENGTH (v_prs_perslid_titel) > 15
THEN
v_prs_perslid_titel := SUBSTR (v_prs_perslid_titel, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Titel persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_titel
|| ']');
END IF;
--
v_errorhint := 'Ongeldige telefoonnr. persoon';
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
IF LENGTH (v_prs_perslid_telefoonnr) > 15
THEN
v_prs_perslid_telefoonnr :=
SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Telefoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_telefoonnr
|| ']');
END IF;
--
v_errorhint := 'Ongeldige mobielnr. persoon';
v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);
IF LENGTH (v_prs_perslid_mobiel) > 15
THEN
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Mobielnr. persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_mobiel
|| ']');
END IF;
--
v_errorhint := 'Ongeldige email persoon';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 200
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Email persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_email
|| ']');
END IF;
--
v_errorhint := 'Ongeldige functie persoon';
v_prs_srtperslid_omschrijving :=
TRIM (v_prs_srtperslid_omschrijving);
IF LENGTH (v_prs_srtperslid_omschrijving) > 60
THEN
v_prs_srtperslid_omschrijving :=
SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Functie-aanduiding persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_srtperslid_omschrijving
|| ']');
ELSE
IF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Functie persoon onbekend',
'Functie persoon moet worden opgegeven');
END IF;
END IF;
--
v_errorhint := 'Ongeldige persoonnr.';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Persoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_nr
|| ']');
END IF;
--
v_errorhint := 'Ongeldige loginnaam';
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
IF LENGTH (v_prs_perslid_oslogin) > 30
THEN
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Loginnaam persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_oslogin
|| ']');
END IF;
v_errorhint := 'Ongeldig wachtwoord';
v_prs_perslid_wachtwoord := TRIM (v_prs_perslid_wachtwoord);
--
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errorhint := 'Toevoegen record';
v_errormsg :=
'Fout bij toevoegen te impoteren bedrijf/afdeling ['
|| v_prs_afdeling_naam
|| ']';
INSERT INTO fac_imp_perslid (alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_afdeling_naam,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_partner_naam,
prs_perslid_partner_tussenv,
prs_perslid_naamgebruik_code,
prs_perslid_geslacht,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
prs_perslid_email,
prs_perslid_dienstverband,
prs_perslid_nr,
prs_srtperslid_omschrijving,
prs_perslid_oslogin,
prs_perslid_wachtwoord,
prs_perslid_titel,
prs_perslid_apikey,
prs_kenmerk1,
prs_kenmerk2,
prs_kenmerk3,
prs_kenmerk4,
prs_kenmerk5,
prs_kenmerk6,
prs_kenmerk7,
prs_kenmerk8,
prs_kenmerk9,
prs_kenmerk10,
prs_kenmerk11,
prs_kenmerk12,
prs_kenmerk13,
prs_kenmerk14,
prs_kenmerk15,
prs_kenmerk16,
prs_kenmerk17,
prs_kenmerk18,
prs_kenmerk19,
prs_kenmerk20,
fac_import_key,
fac_imp_file_index)
VALUES (v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr,
v_alg_ruimte_nr,
v_prs_werkplek_volgnr,
v_prs_werkplek_omschrijving,
v_prs_afdeling_naam,
v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voornaam,
v_prs_perslid_voorletters,
v_prs_perslid_partner_naam,
v_prs_perslid_partner_tussenv,
COALESCE(fac.safe_to_number(v_prs_naamgebruik_code), 0),
v_prs_perslid_geslacht,
v_prs_perslid_telefoonnr,
v_prs_perslid_mobiel,
v_prs_perslid_email,
v_prs_perslid_dienstverband,
v_prs_perslid_nr,
v_prs_srtperslid_omschrijving,
v_prs_perslid_oslogin,
v_prs_perslid_wachtwoord,
v_prs_perslid_titel,
v_prs_perslid_apikey,
v_prs_kenmerk1,
v_prs_kenmerk2,
v_prs_kenmerk3,
v_prs_kenmerk4,
v_prs_kenmerk5,
v_prs_kenmerk6,
v_prs_kenmerk7,
v_prs_kenmerk8,
v_prs_kenmerk9,
v_prs_kenmerk10,
v_prs_kenmerk11,
v_prs_kenmerk12,
v_prs_kenmerk13,
v_prs_kenmerk14,
v_prs_kenmerk15,
v_prs_kenmerk16,
v_prs_kenmerk17,
v_prs_kenmerk18,
v_prs_kenmerk19,
v_prs_kenmerk20,
rec1.fac_import_key,
rec1.fac_imp_file_index);
v_count_import := v_count_import + 1;
END IF;
END IF;
END;
END LOOP;
IF v_header_is_valid = 0
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END;
/
/* Formatted on 20/11/2019 14:49:54 (QP5 v5.336) */
/* Formatted on 20/11/2019 14:49:54 (QP5 v5.336) */
CREATE OR REPLACE PROCEDURE dllg_import_perslid (p_import_key IN NUMBER)
AS
CURSOR c IS
SELECT *
FROM (SELECT fac_usrdata_omschr,
prs_perslid_nr,
prs_kenmerk11 fullachternaam,
prs_kenmerk12 partner,
1 tmode
FROM fac_imp_perslid p, fac_usrdata u
WHERE UPPER (prs_kenmerk11) LIKE
UPPER (u.fac_usrdata_omschr) || ' ' || '%'
AND fac_usrtab_key = 1
UNION ALL
SELECT fac_usrdata_omschr,
prs_perslid_nr,
prs_kenmerk11 fullachternaam,
prs_kenmerk12 partner,
2 tmode
FROM fac_imp_perslid p, fac_usrdata u
WHERE UPPER (prs_kenmerk11) LIKE
'%' || ' ' || UPPER (u.fac_usrdata_omschr)
AND fac_usrtab_key = 1)
ORDER BY prs_perslid_nr, LENGTH (fac_usrdata_omschr) DESC;
v_seq_of_columns VARCHAR (255);
v_old_nr PRS_PERSLID.PRS_PERSLID_NR%TYPE;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
BEGIN
BEGIN
-- we plaaten de functie in kenmerkx
-- de functie wordt tijdelijk gevuld met de key van het record. Puur om een waarde
-- erin te hebben staan.
v_errorhint := 'Vul import tabel';
v_old_nr := '-1';
v_seq_of_columns :=
'0,0,0,0,0,0,13,10,0,5,12,0,0,0,0,0,0,4,0,14,13,8,0,0,0,0,1,2,3,7,13,6,11,9,0,0,0,0,0,0,0,0,0,0,0,0';
DLLG_prs_import_perslid (
p_import_key,
v_seq_of_columns,
'"Department","CostCentre","Displayname","E-mail","givenName","Mobile","physicalDeliveryOfficeName","sAMAccountName","UPN","LastName","PhoneNumber","Initials","Emptype","HRADID"%');
-- oud personeelsleden gaan we niets mee doen
v_errorhint := 'Verwijder oud personeelsleden';
DELETE fac_imp_perslid
WHERE UPPER (prs_kenmerk5) LIKE 'EX%';
-- Verwijder alles acther de komma, dan houden we de achternaam over
v_errorhint := 'Verwijder voornaam van samengestelde string';
UPDATE fac_imp_perslid
SET prs_kenmerk10 =
SUBSTR (prs_kenmerk3, 1, INSTR (prs_kenmerk3, ',') - 1);
-- Voor getrouwde stellen met twee achternamen gescheiden door een - splitsen we de naam
v_errorhint := 'Partners splitsen ';
UPDATE fac_imp_perslid
SET prs_kenmerk11 =
TRIM (
SUBSTR (prs_kenmerk10,
1,
INSTR (prs_kenmerk10, '-') - 1)),
prs_kenmerk12 =
TRIM (
SUBSTR (prs_kenmerk10, INSTR (prs_kenmerk10, '-') + 1))
WHERE INSTR (prs_kenmerk10, '-') > 0;
-- Voor niet getrouwde stellen plaatsen we de naam in het eerste veld
UPDATE fac_imp_perslid
SET prs_kenmerk11 = TRIM (prs_kenmerk10)
WHERE INSTR (prs_kenmerk10, '-') = 0;
-- splits de achternaam in tussenvoegsels en achternaam.
v_errorhint := 'Tussenvoegsels en achternamen splitsen';
FOR rec IN c
LOOP
BEGIN
IF rec.prs_perslid_nr <> v_old_nr
THEN
DBMS_OUTPUT.put_line (
rec.prs_perslid_nr || '-' || rec.fac_usrdata_omschr);
v_old_nr := rec.prs_perslid_nr;
IF rec.tmode = 1
THEN
UPDATE fac_imp_perslid p
SET prs_perslid_tussenvoegsel =
rec.fac_usrdata_omschr,
prs_perslid_naam =
TRIM (
SUBSTR (
rec.fullachternaam,
LENGTH (
rec.fac_usrdata_omschr)
+ 1))
|| DECODE (rec.partner,
NULL, NULL,
' - ' || rec.partner)
WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
ELSE
UPDATE fac_imp_perslid p
SET prs_perslid_tussenvoegsel =
rec.fac_usrdata_omschr,
prs_perslid_naam =
TRIM (
SUBSTR (
rec.fullachternaam,
1,
LENGTH (rec.fullachternaam)
- LENGTH (
rec.fac_usrdata_omschr)))
|| DECODE (rec.partner,
NULL, NULL,
' - ' || rec.partner)
WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
END IF;
END IF;
END;
END LOOP;
-- Vul de achternaam
v_errorhint := 'Vul de achternaam';
UPDATE fac_imp_perslid
SET prs_perslid_naam =
prs_kenmerk11
|| DECODE (prs_kenmerk12,
NULL, NULL,
' - ' || prs_kenmerk12)
WHERE prs_perslid_tussenvoegsel IS NULL;
v_errorhint := 'Vul afdeling en telefoonnummer';
UPDATE fac_imp_perslid
SET prs_afdeling_naam = COALESCE (prs_kenmerk2, 'Onbekend'),
prs_perslid_telefoonnr =
SUBSTR (REPLACE (prs_kenmerk7, ' '), 1, 15),
prs_perslid_mobiel =
SUBSTR (REPLACE (prs_kenmerk6, ' '), 1, 15);
v_errorhint := 'Maak kostenplaatsen aan';
INSERT INTO prs_kostenplaats k (prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_module)
SELECT DISTINCT
prs_kenmerk2, 'Costcenter:' || prs_kenmerk2, 'PRS'
FROM fac_imp_perslid i
WHERE NOT EXISTS
(SELECT kp.prs_kostenplaats_nr
FROM prs_kostenplaats kp
WHERE kp.prs_kostenplaats_nr =
TRIM (i.prs_kenmerk2)
AND kp.prs_kostenplaats_verwijder IS NULL)
AND prs_kenmerk2 IS NOT NULL;
v_errorhint := 'Maak afdelingen aan';
INSERT INTO prs_afdeling (prs_bedrijf_key,
prs_afdeling_naam,
prs_afdeling_omschrijving,
prs_kostenplaats_key)
SELECT DISTINCT 1,
prs_kenmerk2,
'Costcenter:' || prs_kenmerk2,
prs_kostenplaats_key
FROM fac_imp_perslid i, prs_kostenplaats k
WHERE NOT EXISTS
(SELECT a.prs_afdeling_naam
FROM prs_afdeling a
WHERE a.prs_afdeling_naam =
TRIM (i.prs_kenmerk2)
AND prs_afdeling_verwijder IS NULL)
AND prs_kenmerk2 IS NOT NULL
AND prs_kenmerk2 = k.prs_kostenplaats_nr
AND k.prs_kostenplaats_verwijder IS NULL;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
END dllg_import_perslid;
/
CREATE OR REPLACE PROCEDURE dllg_update_perslid (p_import_key IN NUMBER)
AS
CURSOR c_del IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full, p.prs_perslid_oslogin
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_nr IS NOT NULL
AND i.prs_perslid_nr IS NULL
AND p.prs_perslid_verwijder IS NULL;
CURSOR c_upd IS
SELECT i.prs_perslid_key, prs_kenmerk1 afdeling, prs_kenmerk8 UPN
FROM fac_imp_perslid i, prs_perslid p
WHERE i.prs_perslid_key = p.prs_perslid_key;
v_perslid_nr PRS_PERSLID.PRS_PERSLID_NR%TYPE;
v_errormsg VARCHAR2 (1000);
v_hint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
BEGIN
BEGIN
-- Controleer of er wel genoeg mensen in de database staan
-- Veilige check is 10000 medewerkers
SELECT COUNT(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count > 500
THEN
-- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen.
-- Nu komt het ook regelmatig voor dat mensen een ander personeelsnummer krijgen terwijl ze de login behouden. Deze
-- mensen proberen we om te hangen en het personeelsnummer aan te passen.
FOR rec IN c_del LOOP
BEGIN
v_hint := 'Verwijderen persoon: ' || rec.prs_perslid_key || '-' || rec.prs_perslid_nr || '-' || rec.prs_perslid_oslogin;
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
EXCEPTION WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_hint);
END;
END LOOP;
prs.update_perslid (p_import_key, 'NR', 'A');
-- Iedereen mag op elke kostenplaats boeken.
INSERT INTO prs_perslidkostenplaats (prs_perslid_key, prs_perslidkostenplaats_boeken)
SELECT prs_perslid_key, 1
FROM prs_perslid p
WHERE prs_perslid_verwijder IS NULL
AND NOT EXISTS (SELECT prs_perslidkostenplaats_key
FROM prs_perslidkostenplaats pk
WHERE pk.prs_perslid_key = p.prs_perslid_key);
v_hint := 'Update personen';
FOR rec2 IN c_upd LOOP
BEGIN
v_hint := 'Update persoon: ' || rec2.prs_perslid_key || '-' || rec2.upn || '-' || rec2.afdeling;
PRS.upsertkenmerk (1, rec2.prs_perslid_key, rec2.upn);
PRS.upsertkenmerk (2, rec2.prs_perslid_key, rec2.afdeling);
UPDATE prs_perslid
SET alg_onroerendgoed_keys = 1,
alg_onroerendgoed_type = 'G',
prs_perslid_bezetdatum = SYSDATE
WHERE prs_perslid_key = rec2.prs_perslid_key
AND alg_onroerendgoed_keys IS NULL;
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key, 'E', 'Te weinig personen in de database om te verwijderen: ' || v_count, '');
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_hint);
END;
END;
/
-- Koppeling met Nsecure
-- Koppeling gaat via API2: https://dllg.facilitor.nl/api2/reports.json/?usrrap_key=821
-- Depricated !!!!!!!!!!!!!!
CREATE OR REPLACE VIEW dllg_v_rap_aeos_bez
(
afspraak_key, -- appointment_id
bezoekers_key, -- visitor_id
afspraak_datum,
afspraak_eind,
afspraak_oms,
bezoeker_naam,
bezoeker_bedrijf,
contact_naam,
contact_mail,
contact_nr,
contact_tel,
host_naam,
laatste_mut
)
AS
SELECT t.fac_tracking_refkey,
x.bez_bezoekers_key,
x.bez_afspraak_datum,
x.bez_afspraak_eind,
x.bez_afspraak_opmerking,
x.bez_afspraak_naam,
x.bez_afspraak_bedrijf,
x.prs_perslid_naam_full,
x.prs_perslid_email,
x.prs_perslid_nr,
COALESCE (x.prs_perslid_telefoonnr, x.prs_perslid_mobiel) tel,
x.bez_afspraak_gastheer,
t.tracking_datum
FROM (SELECT a.bez_afspraak_key,
b.bez_bezoekers_key,
a.bez_afspraak_datum,
a.bez_afspraak_eind,
a.bez_afspraak_opmerking,
b.bez_afspraak_naam,
b.bez_afspraak_bedrijf,
cpf.prs_perslid_naam_full,
cp.prs_perslid_email,
cp.prs_perslid_nr,
cp.prs_perslid_telefoonnr,
cp.prs_perslid_mobiel,
a.bez_afspraak_gastheer
FROM bez_afspraak a,
bez_bezoekers b,
prs_perslid cp,
prs_v_perslid_fullnames cpf
WHERE a.bez_afspraak_datum > TRUNC (SYSDATE)
AND a.bez_afspraak_key = b.bez_afspraak_key
AND a.bez_afspraak_contact_key = cp.prs_perslid_key
AND cp.prs_perslid_key = cpf.prs_perslid_key) x
LEFT JOIN ( SELECT fac_tracking_refkey, MAX (fac_tracking_datum) tracking_datum
FROM fac_tracking
WHERE fac_srtnotificatie_key IN (30,31) -- BEZMUT/BEZUPD
GROUP BY fac_tracking_refkey) t
ON x.bez_afspraak_key = t.fac_tracking_refkey;
-- Koppeling met Brivo
CREATE OR REPLACE VIEW dllg_v_bezoeker_brivo
(
request,
omschrijving,
afspraak_key,
bezoeker_key,
bezoeker_naam,
bezoeker_bedrijf,
bezoeker_email,
card_number,
facility_code,
hex_code,
afspraak_van,
afspraak_tot,
meeting_id
)
AS
SELECT 'POST',
'Afspraak vanuit Facilitor'
omschr,
a.bez_afspraak_key,
b.bez_bezoekers_key,
b.bez_afspraak_naam,
b.bez_afspraak_bedrijf,
b.bez_bezoekers_email,
c.card,
f.facility,
h.hex_code,
TRUNC(a.bez_afspraak_datum),
TRUNC(a.bez_afspraak_eind)+1,
''
FROM bez_bezoekers b,
bez_afspraak a,
(SELECT kw.bez_bezoekers_key, bez_kenmerkwaarde_waarde card
FROM bez_kenmerk k, bez_kenmerkwaarde kw
WHERE k.bez_kenmerk_upper LIKE 'CARD NUMBER%'
AND kw.bez_kenmerk_key = k.bez_kenmerk_key) c,
(SELECT kw.bez_bezoekers_key, bez_kenmerkwaarde_waarde facility
FROM bez_kenmerk k, bez_kenmerkwaarde kw
WHERE k.bez_kenmerk_upper LIKE 'FACILITY CODE%'
AND kw.bez_kenmerk_key = k.bez_kenmerk_key) f,
(SELECT kw.bez_bezoekers_key, bez_kenmerkwaarde_waarde hex_code
FROM bez_kenmerk k, bez_kenmerkwaarde kw
WHERE k.bez_kenmerk_upper LIKE 'HEX CODE%'
AND kw.bez_kenmerk_key = k.bez_kenmerk_key) h
WHERE b.bez_afspraak_key = a.bez_afspraak_key
AND TRUNC(a.bez_afspraak_datum) <= TRUNC (SYSDATE) -- Alleen afspraken nu
AND TRUNC(a.bez_afspraak_eind) >= TRUNC (SYSDATE) -- Alleen afspraken nu
AND b.bez_bezoekers_key = c.bez_bezoekers_key
AND b.bez_bezoekers_key = f.bez_bezoekers_key
AND b.bez_bezoekers_key = h.bez_bezoekers_key
AND NOT EXISTS
(SELECT kw.bez_bezoekers_key, bez_kenmerkwaarde_waarde
FROM bez_kenmerk k, bez_kenmerkwaarde kw
WHERE k.bez_kenmerk_upper = 'BRIVO SYNC TIMESTAMP' -- Er is vandaag nog geen sync naar brivo geweest
AND kw.bez_kenmerk_key = k.bez_kenmerk_key
AND fac.safe_TO_DATE(SUBSTR(bez_kenmerkwaarde_waarde, 1,10), 'YYYY-MM-DD') = TRUNC(SYSDATE)
AND kw.bez_bezoekers_key = b.bez_bezoekers_key);
-- Notificatie naar bezoekers
CREATE OR REPLACE VIEW dllg_v_noti_visitor
AS
SELECT NULL sender,
NULL receiver,
'Visiting the DLL building at '
|| TO_CHAR (bez_afspraak_datum, 'DD-MM-YYYY')
|| ' , '
|| TO_CHAR (bez_afspraak_datum, 'HH24:MI') text,
'CUST01' code,
a.bez_afspraak_key key,
bez_bezoekers_key xkey,
bez_bezoekers_email xemail,
NULL xmobile
FROM bez_afspraak a, bez_bezoekers b
WHERE a.bez_afspraak_key = b.bez_afspraak_key
AND a.bez_afspraak_datum <
fac.datumtijdplusuitvoertijd (SYSDATE, 3, 'D')
AND a.bez_afspraak_datum > TRUNC(SYSDATE)
AND NOT EXISTS
(SELECT 1
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key =
sn.fac_srtnotificatie_key
AND t.fac_tracking_refkey = a.bez_afspraak_key
AND fac_srtnotificatie_code = 'CUST01'
AND b.bez_bezoekers_aanmaak < fac_tracking_datum);
CREATE OR REPLACE VIEW dllg_v_errorlog
AS
SELECT imp_log_applicatie,
imp_log_datum,
DECODE (imp_log_status,
'F', 'Fataal',
'E', 'Error',
'W', 'Waarschuwing',
'I', 'Informatief',
'-')
niveau,
imp_log_omschrijving,
imp_log_hint
FROM imp_log;
CREATE OR REPLACE VIEW dllg_v_brivo_error
AS
SELECT imp_log_applicatie,
imp_log_datum,
DECODE (imp_log_status,
'F', 'Fataal',
'E', 'Error',
'W', 'Waarschuwing',
'I', 'Informatief',
'-')
niveau,
imp_log_omschrijving,
imp_log_hint
FROM imp_log e
WHERE e.imp_log_applicatie = 'BRIVO'
AND e.imp_log_datum BETWEEN SYSDATE - 1 AND SYSDATE
AND e.imp_log_status = 'E';
-- We gaan foutmeldingen in de koppeling notificeren.
CREATE OR REPLACE VIEW dllg_v_noti_brivo_error
AS
SELECT NULL sender,
NULL receiver,
'Errorlog BRIVO ' text,
'CUST02' code,
fac_usrrap_key key,
NULL xkey,
FAC.getsetting ('puo_emergencymailaddress') xemail,
NULL xmobile
FROM fac_usrrap r, dllg_v_brivo_error e
WHERE r.fac_usrrap_code = 'BRIVOLOG'
GROUP BY fac_usrrap_key;
CREATE OR REPLACE PROCEDURE dllg_daily
AS
CURSOR c IS
SELECT bez_bezoekers_key
FROM BEZ_bezoekers b, bez_afspraak a
WHERE a.bez_afspraak_key = b.bez_afspraak_key
AND bez_afspraak_eind < SYSDATE - 1
AND EXISTS
(SELECT 1
FROM bez_kenmerkwaarde kw
WHERE kw.bez_bezoekers_key = b.bez_bezoekers_key
AND kw.bez_kenmerk_key = 1043) -- cardnumber
ORDER BY bez_bezoekers_key;
v_card_number_key NUMBER;
v_facility_code_key NUMBER;
v_hex_code_key NUMBER;
v_dec_code_key NUMBER;
v_volgnr NUMBER;
BEGIN
-- Pas informatie gaan we verwijderd als de einddatum van het bezoek gepasseerd is. Daarmee voorkomen we dubbele cardnumbers.
SELECT bez_kenmerk_key
INTO v_card_number_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'CARD NUMBER';
SELECT bez_kenmerk_key
INTO v_facility_code_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'FACILITY CODE';
SELECT bez_kenmerk_key
INTO v_hex_code_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'HEX CODE';
SELECT bez_kenmerk_key
INTO v_dec_code_key
FROM bez_kenmerk
WHERE bez_kenmerk_upper = 'DEC CODE';
FOR rec in c
LOOP
DELETE bez_kenmerkwaarde WHERE bez_kenmerk_key = v_card_number_key AND bez_bezoekers_key = rec.bez_bezoekers_key;
DELETE bez_kenmerkwaarde WHERE bez_kenmerk_key = v_facility_code_key AND bez_bezoekers_key = rec.bez_bezoekers_key;
DELETE bez_kenmerkwaarde WHERE bez_kenmerk_key = v_hex_code_key AND bez_bezoekers_key = rec.bez_bezoekers_key;
DELETE bez_kenmerkwaarde WHERE bez_kenmerk_key = v_dec_code_key AND bez_bezoekers_key = rec.bez_bezoekers_key;
END LOOP;
-- Anonymizeren van bezoekers (na 6 maanden) en personen (na 12 maanden)
SELECT COALESCE(MAX(fac_rapport_volgnr),0)
INTO v_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'Anonymize';
IF TO_CHAR (SYSDATE, 'DD') = '01'
THEN
v_volgnr := v_volgnr + 1;
BEGIN
DLLG.anonymizebez (add_months(trunc(SYSDATE), -7), add_months(trunc(SYSDATE), -6));
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel)
VALUES('Anonymize', v_volgnr, 'Bezoekers geanonymizeerd ' ||
to_char(add_months(TRUNC(SYSDATE), -7), 'dd-mm-yyyy hh24:mi:ss') || ' - ' ||
to_char(add_months(TRUNC(SYSDATE), -6), 'dd-mm-yyyy hh24:mi:ss'));
EXCEPTION WHEN OTHERS
THEN
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel)
VALUES('Anonymize', v_volgnr, 'Error: Fout opgetreden bij het anonymizeren van bezoekers ' ||
to_char(add_months(TRUNC(SYSDATE), -7), 'dd-mm-yyyy hh24:mi:ss') || ' - ' ||
to_char(add_months(TRUNC(SYSDATE), -6), 'dd-mm-yyyy hh24:mi:ss'));
END;
END IF;
-- We gooien ook de bezoekers logging weg na 30 dagen.
DELETE imp_log
WHERE imp_log_applicatie = 'BRIVO'
AND imp_log_datum < SYSDATE - 30;
END;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile