From f1fec5118e8b88b25b6a9f0d3f79d9082af95cae Mon Sep 17 00:00:00 2001 From: Arthur Egberink Date: Thu, 6 Nov 2025 12:16:10 +0000 Subject: [PATCH] OFWD#89616 oplevering Zendesk koppeling svn path=/Customer/trunk/; revision=70844 --- OFWD/ofwd.sql | 242 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 221 insertions(+), 21 deletions(-) diff --git a/OFWD/ofwd.sql b/OFWD/ofwd.sql index fa7dc0824..7a21341f2 100644 --- a/OFWD/ofwd.sql +++ b/OFWD/ofwd.sql @@ -25,6 +25,12 @@ SET DEFINE OFF CREATE OR REPLACE PACKAGE OFWD AS + PROCEDURE create_fac_usrdata_node (p_key IN NUMBER, + p_custid IN VARCHAR2, + p_sessionid IN VARCHAR2, + p_extra IN VARCHAR2, + p_where IN VARCHAR2); + PROCEDURE update_devices_from_ad(p_import_key IN NUMBER); END; / @@ -32,10 +38,48 @@ END; CREATE OR REPLACE PACKAGE BODY OFWD AS + + PROCEDURE create_fac_usrdata_node (p_key IN NUMBER, + p_custid IN VARCHAR2, + p_sessionid IN VARCHAR2, + p_extra IN VARCHAR2, + p_where IN VARCHAR2) + AS + v_fac_usrtab_key fac_usrdata.fac_usrtab_key%TYPE; + v_fac_usrdata_code fac_usrdata.fac_usrdata_code%TYPE; + v_fac_usrdata_omschr fac_usrdata.fac_usrdata_omschr%TYPE; + v_fac_usrdata_omschr2 fac_usrdata.fac_usrdata_omschr2%TYPE; + v_fac_usrdata_prijs fac_usrdata.fac_usrdata_prijs%TYPE; + + BEGIN + IF p_key IS NOT NULL + THEN + XML.createconciseopentag ('fac_usrdata'); + + SELECT fac_usrdata.fac_usrtab_key, + fac_usrdata.fac_usrdata_code, + fac_usrdata.fac_usrdata_omschr, + fac_usrdata.fac_usrdata_omschr2, + fac_usrdata.fac_usrdata_prijs + INTO v_fac_usrtab_key, + v_fac_usrdata_code, + v_fac_usrdata_omschr, + v_fac_usrdata_omschr2, + v_fac_usrdata_prijs + FROM fac_usrdata + WHERE fac_usrdata_key = p_key; + + XML.createxmltagvalue ('tabel_key', v_fac_usrtab_key); + XML.createxmltagvalue ('code', v_fac_usrdata_code); + XML.createxmltagvalue ('omschrijving', v_fac_usrdata_omschr); + XML.createxmltagvalue ('omschrijving2', v_fac_usrdata_omschr2); + XML.createxmltagvalue ('prijs', XML.mynumbertochar(v_fac_usrdata_prijs)); + XML.createclosetag ('fac_usrdata'); + END IF; + END; + PROCEDURE update_devices_from_ad(p_import_key IN NUMBER) AS - - -- sql = "id,deviceName,serialNumber,lastSyncDateTime,userDisplayName,emailaddress,phoneNumber,imei,manufacturer,model,enrolledDateTime) " CURSOR c_upd IS SELECT c.fac_imp_csv_col01 id, @@ -53,6 +97,7 @@ AS CAST ( FROM_TZ (CAST (TO_DATE (REPLACE (c.fac_imp_csv_col11, 'Z'), 'yyyy-mm-dd"T"hh24:mi:ss') AS TIMESTAMP), 'UTC') AT TIME ZONE 'Europe/Amsterdam' AS DATE) enrolledDateTime, + c.fac_imp_csv_col12 azureADDeviceId, d.ins_deel_key FROM fac_imp_csv c, ins_deel d WHERE c.fac_import_key = p_import_key @@ -73,11 +118,20 @@ AS c.fac_imp_csv_col10 model, CAST ( FROM_TZ (CAST (TO_DATE (REPLACE (c.fac_imp_csv_col11, 'Z'), 'yyyy-mm-dd"T"hh24:mi:ss') AS TIMESTAMP), 'UTC') - AT TIME ZONE 'Europe/Amsterdam' AS DATE) enrolledDateTime + AT TIME ZONE 'Europe/Amsterdam' AS DATE) enrolledDateTime, + c.fac_imp_csv_col12 azureADDeviceId FROM fac_imp_csv c WHERE c.fac_import_key = p_import_key AND NOT EXISTS (SELECT 1 FROM ins_deel d WHERE d.ins_deel_externnr = c.fac_imp_csv_col01); - + + CURSOR c_del IS + SELECT ins_deel_key + FROM ins_deel + WHERE ins_deel_verwijder IS NULL + AND ins_deel_externnr IS NOT NULL + AND ins_deel_externnr NOT IN (SELECT fac_imp_csv_col01 + FROM fac_imp_csv + WHERE fac_import_key = p_import_key); v_discipline_key NUMBER; v_srtdeel_key NUMBER; v_locatie_key NUMBER; @@ -164,8 +218,14 @@ AS setflex('emailaddress', rec.ins_deel_key, rec.emailaddress, 1); setflex('phoneNumber', rec.ins_deel_key, rec.phoneNumber, 1); setflex('enrolledDateTime', rec.ins_deel_key, TO_CHAR(rec.enrolledDateTime, 'yyyy-mm-dd hh24:mi:ss'), 1); + setflex('azureADDeviceId', rec.ins_deel_key, rec.azureADDeviceId, 1); UPDATE ins_deel SET ins_deel_externsyncdate = SYSDATE WHERE ins_deel_key = rec.ins_deel_key; END LOOP; + + FOR rec IN c_del LOOP + UPDATE ins_deel SET ins_deel_verwijder = SYSDATE WHERE ins_deel_key = rec.ins_deel_key; + END LOOP; + DELETE fac_imp_csv WHERE fac_import_key = p_import_key; END; END; @@ -218,8 +278,9 @@ BEGIN DELETE fac_imp_organisatie; - INSERT INTO fac_imp_organisatie (prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_omschrijving) - SELECT DISTINCT 'OFW', prs_afdeling_naam, prs_kenmerk2 + -- Kostenplaats HR wordt aan de afdeling toegevoegd om instemming voor ergonomische middelen toe te staan. + INSERT INTO fac_imp_organisatie (prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_omschrijving, prs_kostenplaats_nr) + SELECT DISTINCT 'OFW', prs_afdeling_naam, prs_kenmerk2, 'HR' FROM fac_imp_perslid WHERE fac_import_key = p_import_key; @@ -266,6 +327,12 @@ IS WHERE p.prs_perslid_nr = i.prs_perslid_nr AND p.prs_perslid_key = pf.prs_perslid_key; + CURSOR c_bloktitel (c_stdmelding_key NUMBER) + IS + SELECT mld_kenmerk_key, ins_discipline_key + FROM mld_kenmerk + WHERE mld_srtkenmerk_key = 24 AND mld_stdmelding_key = c_stdmelding_key; + v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); @@ -289,6 +356,9 @@ BEGIN IF v_count >= 50 THEN + v_errorhint := 'Verwerken organisatiegegevens'; + fac_update_organisatie (p_import_key); + v_errorhint := 'Verwerken persoonsgegevens'; -- Geldig importbestand wat betreft aantal personen @@ -358,20 +428,24 @@ BEGIN v_errorhint:='Fout bijwerken kenmerkveld4 - Uitdienst datum'; PRS.upsertkenmerk (v_uitdienst_kenmerk_key, rec.prs_perslid_key, v_uitdienstdatum); - v_errorhint:='Fout bijwerken leidinggevende'; - BEGIN - SELECT prs_perslid_key - INTO v_leidg_perslid_key - FROM prs_v_aanwezigperslid p - WHERE p.prs_perslid_nr = rec.leid_prs_nr; - - UPDATE prs_perslid - SET prs_perslid_key_verantw = v_leidg_perslid_key - WHERE prs_perslid_key = rec.prs_perslid_key; - EXCEPTION WHEN NO_DATA_FOUND + v_leidg_perslid_key := NULL; + IF rec.leid_prs_nr IS NOT NULL THEN - fac.imp_writelog (p_import_key, 'E', 'Leidinggevende kan niet gevonden worden: ' || rec.leid_prs_nr, ''); - END; + v_errorhint:='Fout bijwerken leidinggevende'; + BEGIN + SELECT prs_perslid_key + INTO v_leidg_perslid_key + FROM prs_v_aanwezigperslid p + WHERE p.prs_perslid_nr = rec.leid_prs_nr; + + UPDATE prs_perslid + SET prs_perslid_key_verantw = v_leidg_perslid_key + WHERE prs_perslid_key = rec.prs_perslid_key; + EXCEPTION WHEN NO_DATA_FOUND + THEN + fac.imp_writelog (p_import_key, 'E', 'Leidinggevende kan niet gevonden worden: ' || rec.leid_prs_nr, ''); + END; + END IF; -- Aanmaken in diensttredingsmelding -- Persoon is vandaag aangemaakt. @@ -411,6 +485,13 @@ BEGIN INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, null); -- nieuw + + FOR rec_bt IN c_bloktitel(v_indienst_stdmelding_key) + LOOP + INSERT INTO mld_kenmerkblokmelding (mld_melding_key , mld_kenmerk_key , ins_discipline_key , prs_perslid_key , mld_kenmerkblokmelding_afmelddatum ) + VALUES (v_melding_key , rec_bt.mld_kenmerk_key, rec_bt.ins_discipline_key , NULL , NULL ); + END LOOP; + END IF; -- Aanmaken uitdiensttredingsmelding @@ -451,11 +532,41 @@ BEGIN INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, null); -- nieuw + + FOR rec_bt IN c_bloktitel(v_uitdienst_stdmelding_key) + LOOP + INSERT INTO mld_kenmerkblokmelding (mld_melding_key , mld_kenmerk_key , ins_discipline_key , prs_perslid_key , mld_kenmerkblokmelding_afmelddatum ) + VALUES (v_melding_key , rec_bt.mld_kenmerk_key, rec_bt.ins_discipline_key , NULL , NULL ); + END LOOP; + END IF; END; END LOOP; + -- Voeg standaard rapport toe om de rechten in de opdrachtbon op te nemen. + INSERT INTO prs_kenmerklink (prs_link_key, + prs_kenmerklink_niveau, + prs_kenmerk_key, + prs_kenmerklink_waarde) + WITH + toegekenderechten + AS + (SELECT prs_kenmerk_key + FROM prs_kenmerk + WHERE prs_kenmerk_code = 'TOEGEKENDERECHTENZD') + SELECT prs_perslid_key, + 'P', + tr.prs_kenmerk_key, + (SELECT fac_usrrap_key FROM fac_usrrap WHERE fac_usrrap_code = 'TOEGEKENDERECHTENZD') + FROM prs_perslid p, toegekenderechten tr + WHERE prs_perslid_nr IS NOT NULL + AND prs_perslid_verwijder IS NULL + AND NOT EXISTS + (SELECT 1 + FROM prs_kenmerklink kl + WHERE kl.prs_kenmerk_key = tr.prs_kenmerk_key AND kl.prs_link_key = p.prs_perslid_key); + ELSE fac.imp_writelog (p_import_key, 'E', @@ -488,9 +599,11 @@ AS WHERE ins_srtdeel_key = 42; -- Rapportage om de relatie tussen persoon - functie en rol vast te leggen + CREATE OR REPLACE VIEW ofwd_v_rap_prs_rol_recht AS - SELECT pf.prs_perslid_naam_full naam, + SELECT pf.prs_perslid_key, + pf.prs_perslid_naam_full naam, NULL functie, ins_deel_omschrijving rol, sd.ins_srtdeel_omschrijving soort_rol, @@ -519,7 +632,8 @@ AS AND kde.ins_kenmerk_key = k.ins_kenmerk_key(+) AND d.ins_srtdeel_key = sd.ins_srtdeel_key(+) UNION ALL - SELECT pf.prs_perslid_naam_full, + SELECT pf.prs_perslid_key, + pf.prs_perslid_naam_full, df.ins_deel_omschrijving, dr.ins_deel_omschrijving, sd.ins_srtdeel_omschrijving soort_rol, @@ -556,6 +670,92 @@ AS AND dr.ins_deel_key = kde.ins_deel_key(+) AND kde.ins_kenmerk_key = k.ins_kenmerk_key(+) AND dr.ins_srtdeel_key = sd.ins_srtdeel_key(+); + + +-- Omdat bovenstaand rapport te groot werd, zijn de functies en de rechten gescheiden. De stylesheet zoekt ze +-- weer bij elkaar. Deze view is speciaal voor zendesk +CREATE OR REPLACE VIEW ofwd_v_rap_prs_rol_recht_zd +AS + SELECT pf.prs_perslid_key, + pf.prs_perslid_naam_full naam, + TO_CHAR (NULL) functie, + ins_deel_omschrijving rol, + ins_deel_key rol_key, + TO_CHAR (NULL) soort_rol, + TO_CHAR (NULL) groep, + TO_CHAR (NULL) recht + FROM prs_perslid p, + prs_v_perslid_fullnames pf, + prs_kenmerklink kl, + prs_kenmerk k, + fac_kenmerkdomein kdo, + ins_deel d, + prs_v_afdeling a + WHERE p.prs_perslid_verwijder IS NULL + AND p.prs_perslid_key = pf.prs_perslid_key + AND p.prs_afdeling_key = a.prs_afdeling_key + AND a.prs_bedrijf_key = 41 -- OFW + AND p.prs_perslid_key = kl.prs_link_key(+) + AND kl.prs_kenmerk_key = k.prs_kenmerk_key + AND k.fac_kenmerkdomein_key = kdo.fac_kenmerkdomein_key(+) + AND kdo.fac_kenmerkdomein_xmlnode = 'deel' + AND fac.safe_to_number (kl.prs_kenmerklink_waarde) = d.ins_deel_key(+) + UNION ALL + SELECT pf.prs_perslid_key, + pf.prs_perslid_naam_full, + df.ins_deel_omschrijving functie, + dr.ins_deel_omschrijving rol, + dr.ins_deel_key rol_key, + NULL soort_rol, + NULL groep, + NULL recht + FROM prs_perslid p, + prs_v_perslid_fullnames pf, + prs_srtperslid sp, + (SELECT ins_deel_key, fac.safe_to_number (ins_kenmerkdeel_waarde) ins_kenmerkdeel_waarde + FROM ins_kenmerkdeel + WHERE ins_kenmerk_key = 21) kdf, + ins_deel df, + (SELECT ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key + FROM ins_deelkoppeling + WHERE ins_deelkoppeling_verwijder IS NULL + UNION + SELECT ins_deelkoppeling_naar_key, ins_deelkoppeling_van_key + FROM ins_deelkoppeling + WHERE ins_deelkoppeling_verwijder IS NULL) dk, + ins_deel dr, + ins_srtdeel sd, + prs_v_afdeling a + WHERE p.prs_perslid_verwijder IS NULL + AND p.prs_perslid_key = pf.prs_perslid_key + AND p.prs_afdeling_key = a.prs_afdeling_key + AND a.prs_bedrijf_key = 41 -- OFW + AND p.prs_srtperslid_key = sp.prs_srtperslid_key + AND sp.prs_srtperslid_key = kdf.ins_kenmerkdeel_waarde(+) + AND kdf.ins_deel_key = df.ins_deel_key(+) + AND df.ins_deel_key = dk.ins_deelkoppeling_van_key(+) + AND dk.ins_deelkoppeling_naar_key = dr.ins_deel_key(+) + AND dr.ins_srtdeel_key = sd.ins_srtdeel_key(+) + UNION ALL + SELECT NULL, + NULL, + NULL functie, + dr.ins_deel_omschrijving rol, + dr.ins_deel_key rol_key, + sd.ins_srtdeel_omschrijving soort_rol, + DECODE (TRUNC (k.ins_kenmerk_volgnummer, -2), 100, 'Sharepoint', 300, 'Mail', 500, 'Applicatie') groep, + k.ins_kenmerk_omschrijving + FROM ins_deel dr, + ins_kenmerkdeel kde, + ins_kenmerk k, + ins_srtdeel sd + WHERE sd.ins_srtgroep_key = 22 -- Rol + AND dr.ins_deel_key = kde.ins_deel_key(+) + AND kde.ins_kenmerk_key = k.ins_kenmerk_key(+) + AND dr.ins_srtdeel_key = sd.ins_srtdeel_key(+); + + + ------ payload end ------ SET DEFINE OFF