From 883e0f9a1151b264778bfca5fbb900359dc1d134 Mon Sep 17 00:00:00 2001 From: Arthur Egberink Date: Fri, 22 Nov 2019 08:40:17 +0000 Subject: [PATCH] DLLG#59702 -- Implementatie DLLG svn path=/Customer/trunk/; revision=45005 --- DLLG/DLLG.sql | 1273 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1273 insertions(+) create mode 100644 DLLG/DLLG.sql diff --git a/DLLG/DLLG.sql b/DLLG/DLLG.sql new file mode 100644 index 000000000..c06ee1a1e --- /dev/null +++ b/DLLG/DLLG.sql @@ -0,0 +1,1273 @@ +-- +-- $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; +WHENEVER SQLERROR EXIT; +SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL; +WHENEVER SQLERROR CONTINUE; +SPOOL &fcltlogfile +SET DEFINE OFF + +------ payload begin ------ + +-- 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 := 'Vul de vastgoedgegevens'; + + UPDATE fac_imp_perslid i + SET (alg_locatie_code, + alg_gebouw_code, + alg_verdieping_volgnr, + alg_ruimte_nr) = + (SELECT alg_locatie_code, + alg_gebouw_upper, + alg_verdieping_volgnr, + alg_ruimte_nr + FROM alg_v_ruimte_gegevens rg + WHERE UPPER (rg.alg_ruimte_nr) = + UPPER (REPLACE (REPLACE (prs_kenmerk4, '-'), ' '))); + + 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 21, + 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); + 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; +/ + +------ 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 +