RWSN#71458 IDM_BGH-import

svn path=/Customer/trunk/; revision=55687
This commit is contained in:
Maarten van der Heide
2022-04-25 12:40:16 +00:00
parent 0a245434aa
commit 0dffc00900

View File

@@ -2658,6 +2658,399 @@ BEGIN
END rwsn_update_derden;
/
-- RWSN#71458: IDM_BGH-import (tbv. ICT-bestelportaal)!
CREATE OR REPLACE PROCEDURE rwsn_import_idm_bgh (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (4000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_found BOOLEAN;
endmrk_found BOOLEAN;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden:
v_rin VARCHAR2 (255); -- C30
v_accountname VARCHAR2 (255); -- C30
v_emailaddress VARCHAR2 (255); -- C200
v_userdeffunction VARCHAR2 (255); -- C60
v_startdate VARCHAR2 (255); -- D
v_startdate_d DATE;
v_enddate VARCHAR2 (255); -- D
v_enddate_d DATE;
v_orgunitid VARCHAR2 (255); -- C10
v_orgunitname VARCHAR2 (255); -- C60
v_parentorgunitid VARCHAR2 (255); -- C10
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM rwsn_imp_idm_bgh WHERE COALESCE (imp_log_run, -1) <> p_import_key;
COMMIT;
header_found := FALSE;
endmrk_found := FALSE;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_rin);
fac.imp_getfield (v_newline, c_delim, v_accountname);
fac.imp_getfield (v_newline, c_delim, v_emailaddress);
fac.imp_getfield (v_newline, c_delim, v_userdeffunction);
fac.imp_getfield (v_newline, c_delim, v_startdate);
fac.imp_getfield (v_newline, c_delim, v_enddate);
fac.imp_getfield (v_newline, c_delim, v_orgunitid);
fac.imp_getfield (v_newline, c_delim, v_orgunitname);
fac.imp_getfield (v_newline, c_delim, v_parentorgunitid);
v_aanduiding := '[' || v_rin || '|' || v_emailaddress || '|' || v_orgunitid || '] ';
-- 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 (NOT header_found)
THEN
IF UPPER (v_rin) = 'RIN'
AND UPPER (v_accountname) = 'ACCOUNTNAME'
AND UPPER (v_emailaddress) = 'EMAILADDRESS'
AND UPPER (v_userdeffunction) = 'USERDEFFUNCTION'
AND UPPER (v_startdate) = 'STARTDATE'
AND UPPER (v_enddate) = 'ENDDATE'
AND UPPER (v_orgunitid) = 'ORGUNITID'
AND UPPER (v_orgunitname) = 'ORGUNITNAME'
AND UPPER (v_parentorgunitid) = 'PARENTORGUNITID'
THEN
header_found := TRUE;
END IF;
ELSE
IF UPPER (v_rin) = '==EINDE==' AND fac.safe_to_number (v_accountname) = v_count_tot
THEN
endmrk_found := TRUE;
ELSIF (NOT endmrk_found)
THEN
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'RIN ongeldig; ongedefinieerd of te lang';
v_rin := TRIM (v_rin);
IF v_rin IS NULL OR LENGTH (v_rin) > 30
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen!');
END IF;
--
v_errormsg := 'Accountname ongeldig; ongedefinieerd of te lang';
v_accountname := TRIM (v_accountname);
IF v_accountname IS NULL OR LENGTH (v_accountname) > 30
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen!');
END IF;
--
v_errormsg := 'Emailaddress ongeldig; ongedefinieerd of te lang';
v_emailaddress := TRIM (v_emailaddress);
IF v_emailaddress IS NULL OR LENGTH (v_emailaddress) > 200
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen!');
END IF;
--
v_errormsg := 'Userdeffunction te lang';
v_userdeffunction := TRIM (v_userdeffunction);
IF LENGTH (v_userdeffunction) > 60
THEN
v_userdeffunction := SUBSTR (v_userdeffunction, 1, 60);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Userdeffunction afgekapt!');
END IF;
--
v_errormsg := 'Startdate ongeldig';
v_startdate:= TRIM (v_startdate);
v_startdate_d := fac.safe_to_date (SUBSTR (v_startdate, 1, 10), 'yyyy-mm-dd');
IF v_startdate IS NOT NULL AND v_startdate_d IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Startdate genegeerd');
END IF;
--
v_errormsg := 'Enddate ongeldig';
v_enddate:= TRIM (v_enddate);
v_enddate_d := fac.safe_to_date (SUBSTR (v_enddate, 1, 10), 'yyyy-mm-dd');
IF v_enddate IS NOT NULL AND v_enddate_d IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Enddate genegeerd');
END IF;
--
v_errormsg := 'Orgunitid ongeldig; ongedefinieerd of te lang';
v_orgunitid := TRIM (v_orgunitid);
IF v_orgunitid IS NULL OR LENGTH (v_orgunitid) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen!');
END IF;
--
v_errormsg := 'Orgunitname te lang';
v_orgunitname := TRIM (v_orgunitname);
IF v_orgunitname IS NULL OR LENGTH (v_orgunitname) > 60
THEN
v_orgunitname := SUBSTR (v_orgunitname, 1, 60);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Orgunitname afgekapt!');
END IF;
--
v_errormsg := 'Parentorgunitid te lang';
v_parentorgunitid := TRIM (v_parentorgunitid);
IF LENGTH (v_parentorgunitid) > 10
THEN
v_parentorgunitid := SUBSTR (v_parentorgunitid, 1, 10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Parentorgunitid afgekapt!');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout wegschrijven importregel';
INSERT INTO rwsn_imp_idm_bgh (rin, accountname, emailaddress, userdeffunction, startdate, enddate, orgunitid, orgunitname, parentorgunitid, imp_log_run)
VALUES (v_rin, v_accountname, v_emailaddress, v_userdeffunction, v_startdate_d, v_enddate_d, v_orgunitid, v_orgunitname, v_parentorgunitid, p_import_key);
COMMIT;
v_count_import := v_count_import + 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, '');
COMMIT;
END;
END IF;
END IF;
END IF;
END;
END LOOP;
IF (NOT header_found)
THEN
fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!');
ELSIF (NOT endmrk_found)
THEN
fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen geldige eindmarkering aangetroffen!');
-- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
DELETE FROM rwsn_imp_idm_bgh;
ELSE
fac.imp_writelog (p_import_key, 'S', 'IDM-budgethouders/#ingelezen importregels: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'IDM-budgethouders/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '');
END IF;
COMMIT;
-- Clear my previous imported rows
DELETE FROM fac_imp_file WHERE fac_import_key = p_import_key;
COMMIT;
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, 'E', v_aanduiding || v_errormsg, 'Inleesproces IDM_BGH afgebroken!');
-- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
DELETE FROM rwsn_imp_idm_bgh;
END rwsn_import_idm_bgh;
/
/*
SELECT ab.prs_bedrijf_key, kp.prs_kostenplaats_key, COUNT ( * )
FROM prs_v_aanwezigkostenplaats kp, prs_afdeling a, prs_v_afdeling_boom ab
WHERE kp.prs_kostenplaats_key = a.prs_kostenplaats_key
AND a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_key = ab.prs_afdeling_key
GROUP BY ab.prs_bedrijf_key, kp.prs_kostenplaats_key;
*/
CREATE OR REPLACE PROCEDURE rwsn_update_idm_bgh (p_import_key IN NUMBER)
AS
c_rin_kkey NUMBER (10) := 1160;
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER (10);
v_count_upd NUMBER (10);
v_count_del NUMBER (10);
-- Toekennen budgethouder-autorisaties!
CURSOR c_bgh_upd
IS
SELECT p.prs_perslid_key, p.prs_perslid_email, kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr
FROM rwsn_imp_idm_bgh x,
(SELECT kl.prs_kenmerklink_waarde rin, p.prs_perslid_key, p.prs_perslid_email
FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl
WHERE p.prs_perslid_key = kl.prs_link_key
AND kl.prs_kenmerk_key = c_rin_kkey) p,
prs_afdeling a,
prs_kostenplaats kp
WHERE 1 = 1 --x.enddate > SYSDATE?
AND x.rin = p.rin
AND UPPER (x.orgunitid) = a.prs_afdeling_upper
AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key
ORDER BY 1;
-- Afnemen budgethouder-autorisaties!
CURSOR c_bgh_del
IS
-- SELECT kp.prs_perslid_key, p.prs_perslid_email, kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr
-- FROM prs_kostenplaats kp,
-- prs_afdeling a,
-- (SELECT kl.prs_kenmerklink_waarde rin, p.prs_perslid_key, p.prs_afdeling_key, p.prs_perslid_email
-- FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl
-- WHERE p.prs_perslid_key = kl.prs_link_key
-- AND kl.prs_kenmerk_key = c_rin_kkey) p
-- WHERE 1 = 1 --COALESCE (kp.prs_kostenplaats_eind, SYSDATE) > TRUNC (SYSDATE)?
-- AND kp.prs_kostenplaats_key != 6081 -- Kostenplaats EXTERNE niet/nooit iemand afnemen!
-- AND kp.prs_perslid_key = p.prs_perslid_key -- Budgethouder van kostenplaats heeft RIN!
-- AND kp.prs_kostenplaats_key = a.prs_kostenplaats_key -- Afdelingskostenplaats!
-- AND NOT EXISTS -- RIN van bestaande budgethouder niet/nergens (meer) in importbestand!
-- (SELECT 1
-- FROM rwsn_imp_idm_bgh
-- WHERE rin = p.rin)
-- AND EXISTS -- Afdeling(skostenplaats) in importbestand heeft een budgethouder met RIN!
-- (SELECT 1
-- FROM rwsn_imp_idm_bgh
-- WHERE rin IS NOT NULL
-- AND UPPER (orgunitid) = a.prs_afdeling_upper)
--ORDER BY 1;
SELECT p.prs_perslid_key, p.prs_perslid_email
FROM fac_gebruikersgroep gg, prs_v_aanwezigperslid p
WHERE gg.fac_groep_key = 422 -- ICT Contactpersoon
AND gg.prs_perslid_key = p.prs_perslid_key
AND NOT EXISTS -- ICT Contactpersoon, maar geen budgethouder!
(SELECT 1
FROM prs_v_aanwezigkostenplaats
WHERE prs_perslid_key = p.prs_perslid_key)
ORDER BY 1;
BEGIN
v_count_upd := 0;
FOR rec IN c_bgh_upd
LOOP
BEGIN
v_aanduiding := '[' || TO_CHAR (rec.prs_perslid_key) || '|' || rec.prs_perslid_email || '|' || rec.prs_kostenplaats_nr || '] ';
-- Budgethouders toekennen groep 422=ICT Contactpersoon algemeen!
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
SELECT 422, p.prs_perslid_key -- ICT Contactpersoon
FROM prs_v_aanwezigperslid p
WHERE prs_perslid_key = rec.prs_perslid_key
AND NOT EXISTS
(SELECT 1
FROM fac_gebruikersgroep
WHERE fac_groep_key = 422 -- ICT Contactpersoon
AND prs_perslid_key = p.prs_perslid_key);
-- Toekennen Leidinggevende-profiel, tenzij DBV-profiel en DBV-er!
UPDATE prs_perslid
SET fac_profiel_key = 3 -- Leidinggevende
WHERE prs_perslid_key = rec.prs_perslid_key
AND (COALESCE (fac_profiel_key, 1) != 4 -- DBV
OR NOT EXISTS (SELECT 1 FROM prs_kostenplaatsgrp WHERE prs_perslid_key = rec.prs_perslid_key));
-- Toekennen als budgethouder bij kostenplaats!
UPDATE prs_kostenplaats
SET prs_perslid_key = rec.prs_perslid_key
WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key;
v_count_upd := v_count_upd + 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, '');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'IDM-budgethouders/#bijgewerkt: ' || TO_CHAR (v_count_upd), '');
COMMIT;
v_count_del := 0;
FOR rec IN c_bgh_del
LOOP
BEGIN
v_aanduiding := '[' || TO_CHAR (rec.prs_perslid_key) || '|' || rec.prs_perslid_email || '] ';
-- Budgethouder niet wissen bij kostenplaats, dat zou moeten gebeuren
-- via c_bgh_upd-cursor!
-- Budgethouders afnemen groep 422=ICT Contactpersoon algemeen!
DELETE FROM fac_gebruikersgroep gg
WHERE gg.fac_groep_key = 422 -- ICT Contactpersoon
AND gg.prs_perslid_key = rec.prs_perslid_key;
-- Afnemen Leidinggevende-profiel, tenzij DBV-profiel en DBV-er!
UPDATE prs_perslid
SET fac_profiel_key = 1 -- Default
WHERE prs_perslid_key = rec.prs_perslid_key
AND (COALESCE (fac_profiel_key, 1) != 4 -- DBV
OR NOT EXISTS (SELECT 1 FROM prs_kostenplaatsgrp WHERE prs_perslid_key = rec.prs_perslid_key));
v_count_del := v_count_del + 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, '');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'IDM-budgethouders/#verwijderd: ' || TO_CHAR (v_count_del), '');
COMMIT;
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, 'E', v_aanduiding || v_errormsg, 'Importproces IDM_BGH afgebroken!');
END rwsn_update_idm_bgh;
/
--=============================================================================
-- EXPORTFUNCTIES
-------------------------------------------------------------------------------
@@ -28336,6 +28729,77 @@ AS
AND sn.fac_srtnotificatie_code = 'CUST22'
;
-- RWSN#67120: Uurlijkse melding-notificaties (oa. CUST23)
CREATE OR REPLACE VIEW FMHN_V_NOTI_MLD_DIVERSEN
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY
)
AS
SELECT sn.fac_srtnotificatie_code,
NULL,
NULL,
REPLACE (
REPLACE (
sn.fac_srtnotificatie_oms,
'##ID##',
TO_CHAR (m.mld_melding_key)),
'##STDMLD##',
sm.mld_stdmelding_omschrijving),
m.mld_melding_key,
NULL xkey
FROM mld_melding m,
mld_stdmelding sm,
fac_srtnotificatie sn,
fac_notificatie_job nj
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_stdmelding_key = 7721 -- Inleveren ICT-middelen
AND sn.fac_srtnotificatie_code = 'CUST23'
AND nj.fac_notificatie_job_view = 'FMHN_V_NOTI_MLD_DIVERSEN'
AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) BETWEEN COALESCE (nj.fac_notificatie_job_lastrun,
nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24))
AND nj.fac_notificatie_job_nextrun;
/*
SELECT sn.fac_srtnotificatie_code,
NULL,
m.mld_melding_behandelaar_key,
REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key),
m.mld_melding_key,
NULL
FROM mld_melding m, mld_stdmelding sm, mld_disc_params dp, fac_srtnotificatie sn
WHERE m.mld_melding_status IN (4, 7, 99) -- 4-Geaccepteerd, 7-Uitgegeven
--AND m.mld_melding_einddatum_std > SYSDATE
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = dp.mld_ins_discipline_key
AND dp.mld_disc_params_noti_dagen IS NOT NULL
--AND TRUNC (SYSDATE + dp.mld_disc_params_noti_dagen) > TRUNC (m.mld_melding_einddatum_std)
--AND TRUNC (SYSDATE + dp.mld_disc_params_noti_dagen) = TRUNC (m.mld_melding_einddatum)
AND fac.count_work_days (SYSDATE, m.mld_melding_einddatum) = dp.mld_disc_params_noti_dagen
AND sn.fac_srtnotificatie_code = 'CUST21'
UNION ALL
SELECT sn.fac_srtnotificatie_code,
NULL,
m.mld_melding_behandelaar_key,
REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key),
m.mld_melding_key,
NULL
FROM mld_melding m, mld_stdmelding sm, mld_disc_params dp, fac_srtnotificatie sn
WHERE m.mld_melding_status IN (4, 7, 99) -- 4-Geaccepteerd, 7-Uitgegeven
--AND m.mld_melding_einddatum_std > SYSDATE
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = dp.mld_ins_discipline_key
AND dp.mld_disc_params_noti_dagen IS NOT NULL
--AND TRUNC (SYSDATE + 1) > TRUNC (m.mld_melding_einddatum_std)
--AND TRUNC (SYSDATE + 1) = TRUNC (m.mld_melding_einddatum)
AND dp.mld_disc_params_noti_dagen != 1
AND fac.count_work_days (SYSDATE, m.mld_melding_einddatum) = 1
AND sn.fac_srtnotificatie_code = 'CUST22'
;
*/
-- RWSN#56949: Productie KCC medewerkers (MLD+RES)!
CREATE OR REPLACE VIEW rwsn_v_rap_kcc_productie
(