From 7f9bb8d64a28b75e6ee5174e6a977e2fea4aa429 Mon Sep 17 00:00:00 2001 From: Maarten van der Heide Date: Thu, 2 May 2024 13:10:54 +0000 Subject: [PATCH] MNNL#78061 PRS-import/Uitbreiden met P-kolom svn path=/Customer/trunk/; revision=64490 --- MNNL/mnnl.sql | 184 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 180 insertions(+), 4 deletions(-) diff --git a/MNNL/mnnl.sql b/MNNL/mnnl.sql index 6018dc72d..d94308df9 100644 --- a/MNNL/mnnl.sql +++ b/MNNL/mnnl.sql @@ -374,7 +374,7 @@ BEGIN (SELECT 1 FROM fac_gebruikersgroep WHERE fac_groep_key = 2101 -- _Default_VB - AND prs_perslid_key = p.prs_perslid_key); + AND prs_perslid_key = p.prs_perslid_key); COMMIT; -- Afnemen 2341=_Default_IV van medewerkers niet onder IV (op niveau 1)! @@ -403,7 +403,7 @@ BEGIN (SELECT 1 FROM fac_gebruikersgroep WHERE fac_groep_key = 2341 -- _Default_IV - AND prs_perslid_key = p.prs_perslid_key); + AND prs_perslid_key = p.prs_perslid_key); COMMIT; -- Afnemen 2342=_Default_PV van medewerkers niet onder PV (op niveau 1)! @@ -432,7 +432,7 @@ BEGIN (SELECT 1 FROM fac_gebruikersgroep WHERE fac_groep_key = 2342 -- _Default_PV - AND prs_perslid_key = p.prs_perslid_key); + AND prs_perslid_key = p.prs_perslid_key); COMMIT; -- Afnemen 2343=_Default_FRS & EC van medewerkers niet onder FRS of EC (op niveau 1)! @@ -461,7 +461,7 @@ BEGIN (SELECT 1 FROM fac_gebruikersgroep WHERE fac_groep_key = 2343 -- _Default_FRS & EC - AND prs_perslid_key = p.prs_perslid_key); + AND prs_perslid_key = p.prs_perslid_key); COMMIT; -- Afnemen _Default-rol afh. van configuratie in Eigen tabel met key=721! @@ -486,6 +486,182 @@ BEGIN END mnnl_update_prs; / +CREATE OR REPLACE PROCEDURE MNNL_IMPORT_WW (p_import_key IN NUMBER) +AS + c_delim VARCHAR2 (1) := ';'; -- Field seperator + v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Import line + v_errormsg VARCHAR2 (1000) := ''; + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_aanduiding VARCHAR2 (1000) := ''; + header_is_valid NUMBER := 0; + v_count_tot NUMBER (10) := 0; + v_count_imp NUMBER (10) := 0; + -- De importvelden + v_perslid_nr VARCHAR2 (255); + v_afstand_ww VARCHAR2 (255); + + CURSOR c1 + IS + SELECT fac_imp_file_line, LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, ''))) regellengte + FROM fac_imp_file + WHERE fac_import_key = p_import_key + ORDER BY fac_imp_file_index; +BEGIN + DELETE FROM mnnl_imp_ww; + COMMIT; + + FOR rec1 IN c1 + LOOP + BEGIN + v_newline := rec1.fac_imp_file_line; + v_errormsg := 'Fout opvragen importregel'; + v_aanduiding := ''; + -- Lees alle veldwaarden + --Personeelsnummer;Afstand woon werk + fac.imp_getfield (v_newline, c_delim, v_perslid_nr); + fac.imp_getfield (v_newline, c_delim, v_afstand_ww); + v_aanduiding := '[' || v_perslid_nr || '|' || v_afstand_ww || '] '; + + -- Ik controleer of ik een geldige header heb, dat is: in de juiste + -- kolommen de juiste kolomkop. Ik controleer daarbij ALLE kolommen! + -- Ik negeer alles totdat ik een geldige header ben gepasseerd. + IF (header_is_valid = 0) + THEN + IF UPPER (v_perslid_nr) = 'PERSONEELSNUMMER' + AND UPPER (v_afstand_ww) = 'AFSTAND WOON WERK' + THEN + header_is_valid := 1; + END IF; + ELSIF (rec1.regellengte > 0) -- Lege regels overslaan + THEN + BEGIN + v_count_tot := v_count_tot + 1; + + -- Direct wegschrijven; controleer alle veldwaarden maar niet. + v_errormsg := 'Fout wegschrijven importregel'; + INSERT INTO mnnl_imp_ww (perslid_nr, afstand_ww) + VALUES (TRIM (v_perslid_nr), fac.safe_to_number (REPLACE (v_afstand_ww, ',', '.'))); + + v_count_imp := v_count_imp + 1; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; + fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); + END; + END IF; + END; + END LOOP; + + IF (header_is_valid = 0) + THEN + fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens afspraak!'); + ELSE + fac.imp_writelog (p_import_key, 'S', 'Woon-Werk/#ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); + fac.imp_writelog (p_import_key, 'S', 'Woon-Werk/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_imp), ''); + END IF; +EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; + fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces Woon-Werk afgebroken!'); +END MNNL_IMPORT_WW; +/ + +CREATE OR REPLACE PROCEDURE MNNL_UPDATE_WW (p_import_key IN NUMBER) +AS + c_ww_kkey NUMBER (10) := 1000; -- 'Woon-Werk-afstand'-kenmerk! + c_pp_gkey NUMBER (10) := 2421; -- 'Parkeerplaats'-autorisatiegroep! + v_errormsg VARCHAR2 (1000) := ''; + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_aanduiding VARCHAR2 (1000) := ''; + v_count NUMBER (10); + + -- Bijwerken persoonsgegevens met Woon-Werk-afstand. + CURSOR c_upd_ww + IS + SELECT '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_nr || '] ' aanduiding, + p.prs_perslid_key, + p.prs_perslid_nr, + kl.prs_kenmerklink_key, + ROUND (x.afstand_ww, 2) afstand_ww + FROM mnnl_imp_ww x, + prs_v_aanwezigperslid p, + (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = c_ww_kkey) kl + WHERE x.perslid_nr = p.prs_perslid_nr + AND p.prs_perslid_inactief IS NULL + AND p.prs_perslid_key = kl.prs_link_key(+) + AND COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), -1) != x.afstand_ww -- Afstand gewijzigd? + ORDER BY 2; +BEGIN + v_count := 0; + FOR rec IN c_upd_ww + LOOP + BEGIN + IF rec.prs_kenmerklink_key IS NULL + THEN + v_errormsg := 'Fout toevoegen woon-werk-afstand'; + INSERT INTO prs_kenmerklink (prs_link_key, prs_kenmerklink_niveau, prs_kenmerk_key, prs_kenmerklink_waarde) + VALUES (rec.prs_perslid_key, 'P', c_ww_kkey, TO_CHAR (rec.afstand_ww)); + ELSE + v_errormsg := 'Fout bijwerken woon-werk-afstand'; + UPDATE prs_kenmerklink + SET prs_kenmerklink_waarde = TO_CHAR (rec.afstand_ww) + WHERE prs_kenmerklink_key = rec.prs_kenmerklink_key; + END IF; + v_count := v_count + 1; + END; + END LOOP; + + fac.imp_writelog (p_import_key, 'S', 'Woon-Werk/#bijgewerkt: ' || TO_CHAR (v_count), ''); + + -- Afnemen PP-autorisatiegroep als geldt woon-werk-afstand <=8km! + v_errormsg := 'Fout afnemen PP-autorisatiegroep'; + DELETE FROM fac_gebruikersgroep gg + WHERE gg.fac_groep_key = c_pp_gkey -- PP-autorisatiegroep + AND EXISTS + (SELECT 1 + FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab, + (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = c_ww_kkey) kl + WHERE (p.prs_perslid_oslogin IS NULL OR p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\') -- ' tbv. opmaak + AND p.prs_afdeling_key = ab.prs_afdeling_key + AND ab.prs_bedrijf_key = 5 -- MN + AND p.prs_perslid_key = kl.prs_link_key(+) + AND COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), -1) < 8 + AND p.prs_perslid_key = gg.prs_perslid_key); + + -- Toekennen PP-autorisatiegroep als geldt woon-werk-afstand >8km! + v_errormsg := 'Fout toekennen PP-autorisatiegroep'; + INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) + SELECT c_pp_gkey, p.prs_perslid_key -- PP-autorisatiegroep + FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab, + (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = c_ww_kkey) kl + WHERE (p.prs_perslid_oslogin IS NULL OR p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\') -- ' tbv. opmaak + AND p.prs_afdeling_key = ab.prs_afdeling_key + AND ab.prs_bedrijf_key = 5 -- MN + AND p.prs_perslid_key = kl.prs_link_key(+) + AND COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), -1) > 8 + AND NOT EXISTS -- Niet al in PP-autorisatiegroep! + (SELECT 1 + FROM fac_gebruikersgroep + WHERE fac_groep_key = c_pp_gkey -- PP-autorisatiegroep + AND prs_perslid_key = p.prs_perslid_key); +EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; + fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Importproces Woon-Werk afgebroken!'); +END MNNL_UPDATE_WW; +/ + -- KOPPELING SENTIDO CREATE OR REPLACE VIEW mnnl_v_api_sentido AS