MNNL#78061 PRS-import/Uitbreiden met P-kolom

svn path=/Customer/trunk/; revision=64490
This commit is contained in:
Maarten van der Heide
2024-05-02 13:10:54 +00:00
parent db2c3d30f2
commit 7f9bb8d64a

View File

@@ -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