SCHG#84842 -- Implementatie Scharenborg Groep - oplevering definitieve Azure-koppeling tbv medewerkers uit meerdere tenants

svn path=/Customer/trunk/; revision=67846
This commit is contained in:
Jos Migo
2025-02-04 16:10:30 +00:00
parent d7992ea82d
commit b41897c92d

View File

@@ -549,38 +549,89 @@ AS
CURSOR c_afd
IS
SELECT fac_imp_file_index, prs_perslid_email, prs_afdeling_naam
FROM fac_imp_perslid
WHERE fac_import_key = p_import_key ;
SELECT i.fac_imp_file_index, i.prs_perslid_email, i.prs_afdeling_naam,
p.prs_perslid_key,
CASE WHEN p.prs_perslid_key IS NOT NULL
THEN (SELECT a.prs_afdeling_naam FROM prs_perslid pp, prs_afdeling a WHERE pp.prs_afdeling_key = a.prs_afdeling_key AND pp.prs_perslid_key = p.prs_perslid_key )
ELSE NULL
END
prs_afdeling_naam_huidig
FROM fac_imp_perslid i, prs_v_aanwezigperslid p
WHERE fac_import_key = p_import_key
AND i.prs_perslid_email = p.prs_perslid_email (+) ;
-- unieke oslogin vullen
CURSOR c_oslogin
IS
SELECT v.fac_imp_file_index,
v.prs_perslid_email,
v.prs_perslid_oslogin_email,
v.prs_perslid_key,
v.prs_perslid_oslogin_huidig,
(SELECT COUNT (*)
FROM prs_v_aanwezigperslid
WHERE prs_perslid_oslogin = prs_perslid_oslogin_email)
oslogin_facilitor_aantal,
(SELECT COUNT (*)
FROM fac_imp_perslid
WHERE prs_perslid_oslogin = v.prs_perslid_oslogin_email)
oslogin_import_aantal
FROM (SELECT i.fac_imp_file_index,
i.prs_perslid_email,
UPPER (
(SUBSTR (i.prs_perslid_email,
0,
INSTR (i.prs_perslid_email, '@') - 1)))
prs_perslid_oslogin_email,
p.prs_perslid_key,
p.prs_perslid_oslogin
prs_perslid_oslogin_huidig
FROM fac_imp_perslid i, prs_v_aanwezigperslid p
WHERE fac_import_key = p_import_key
AND i.prs_perslid_email = p.prs_perslid_email(+)
) v
ORDER BY fac_imp_file_index;
BEGIN
-- Import csv formaat - kolommen:
-- 1. userPrincipalName
-- 2. displayName
-- 3. surname
-- 4. EmailAddress
-- 5. givenName
-- 6. id
-- 7. jobTitle
-- 8. department
-- 9. usageLocation
-- 10. officeLocation
-- 11. comanyName
-- 12. importbestand_schg -- LET OP - Deze voeg ik voor import toe omdat men meerdere bestanden, cq entra_id's heeft aan scharenborg_kant
-- 1. User Principal Name
-- 2. Display Name
-- 3. Given Name
-- 4. Surname
-- 5. Job Title
-- 6. Department
-- 7. Employee ID
-- 8. Office Location
-- 9. Mobile Phone
-- 10. Business Phone
-- 11. Street Address
-- 12. City
-- 13. State
-- 14. Postal Code
-- 15. Country
-- 16. Account Enabled
-- 17. Manager Email
-- 18. Object ID
-- 19. User Type
-- 20. Creation Type
-- 21. Usage Location
-- 22. Sign-In Names
-- 23. Other Mails
v_seq_of_columns := '0;0;0;0;0;0;9;3;0;5;'
v_seq_of_columns := '0;0;0;0;0;0;19;19;0;3;'
-- v_alg_locatie_code 1
-- v_alg_gebouw_code 2
-- v_alg_verdieping_volgnr 3
-- v_alg_ruimte_nr 4
-- v_prs_werkplek_volgnr 5
-- v_prs_werkplek_omschrijving 6
-- v_prs_afdeling_naam 7 -- VERPLICHT BIJ IMPORT
-- v_prs_perslid_naam 8
-- v_prs_afdeling_naam 7 -- VERPLICHT BIJ IMPORT - Initieel vullen met User type (want department is nog niet altijd gevuld..)
-- v_prs_perslid_naam 8 -- VERPLICHT BIJ IMPORT - Initieel vullen met User type (want naam is niet altijd gevuld..)
-- v_prs_perslid_tussenvoegsel 9
-- v_prs_perslid_voornaam 10
|| '0;0;0;0;0;0;0;4;0;0;'
|| '0;0;0;0;0;0;0;1;0;7;'
-- v_prs_perslid_voorletters 11
-- v_prs_perslid_partner_naam 12
-- v_prs_perslid_partner_tussenv 13
@@ -594,8 +645,8 @@ BEGIN
-- v_prs_perslid_email 18
-- v_prs_perslid_dienstverband 19
-- v_prs_perslid_nr 20
|| '9;0;0;0;0;0;1;2;3;4;'
-- v_prs_srtperslid_omschrijving 21 -- VERPLICHT BIJ IMPORT
|| '19;0;0;0;0;0;1;2;3;4;'
-- v_prs_srtperslid_omschrijving 21 -- VERPLICHT BIJ IMPORT - Initieel vullen met User type (want Job Title is nog niet altijd gevuld..)
-- v_prs_perslid_oslogin 22
-- v_prs_perslid_wachtwoord 23
-- v_prs_perslid_titel 24
@@ -605,12 +656,17 @@ BEGIN
-- v_prs_kenmerk2 28
-- v_prs_kenmerk3 29
-- v_prs_kenmerk4 30
|| '5;6;7;8;9;10;11;12;0;0;'
|| '0;0;0;0;0;7';
|| '5;6;8;9;10;17;23;7;24;0;'
|| '0;0;0;0;0;20';
-- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv punt-komma
v_errorhint := 'Delimiter goed zetten';
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';')
WHERE fac_import_key = p_import_key;
-- header aanvullen met bestand
-- deze voeg ik voor import toe omdat men meerdere bestanden, cq entra_id's heeft aan scharenborg_kant
UPDATE fac_imp_file i
SET i.fac_imp_file_line =
fac_imp_file_line
@@ -627,151 +683,223 @@ BEGIN
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
prs.import_perslid(p_import_key, v_seq_of_columns, 'userPrincipalName;displayName;surname;EmailAddress;givenName;id;jobTitle;department;usageLocation;officeLocation;companyName;importbestand_schg%');
-- csv verwerken naar de fac_imp_perslid-tabel
prs.import_perslid(p_import_key, v_seq_of_columns, '"User Principal Name";"Display Name";"Given Name";"Surname";"Job Title";"Department";"Employee ID";"Office Location";"Mobile Phone";"Business Phone";"Street Address";"City";"State";"Postal Code";"Country";"Account Enabled";"Manager Email";"Object ID";"User Type";"Creation Type";"Usage Location";"Sign-In Names";"Other Mails";importbestand_schg%');
-- POST-UPDATES op data doen om verwerking goed/volledig/cust-specifiek te laten verlopen
-- POST-UPDATES op data in fac_imp_perslid-tabel doen om verwerking goed/volledig/cust-specifiek te laten verlopen
-- Loginnaam afleiden van emailadres
-- Delete records uit importbestand SCHG
---- 1. Alle records zonder EMPLOYEE ID
---- 2. Alle records waar CREATION TYPE gevuld met Invitation
DELETE
FROM fac_imp_perslid
WHERE prs_perslid_nr IS NULL ;
DELETE
FROM fac_imp_perslid
WHERE UPPER(prs_kenmerk20) = 'INVITATION' ;
-- Vullen achternaam
UPDATE fac_imp_perslid
SET prs_perslid_naam = COALESCE(prs_kenmerk4, 'naam - onbekend') ;
-- Loginnaam afleiden van emailadres
UPDATE fac_imp_perslid
SET prs_perslid_oslogin =
UPPER((SUBSTR (prs_perslid_email,
0,
INSTR (prs_perslid_email, '@') - 1))) ;
UPPER((SUBSTR (prs_perslid_email,
0,
INSTR (prs_perslid_email, '@') - 1))) ;
-- Functie moet bekend zijn
-- Functie is niet altijd gevuld, functie eerst gevuld met achternaam, nu vullen met kenmerk (of 'Onbekend').
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving =
DECODE (prs_kenmerk20, NULL, 'Onbekend', prs_kenmerk20);
-- Moeten er nog deletes/opschoning gedaan worden in bulkbestand?
-- DELETE fac_imp_perslid WHERE prs_perslid_email IS NULL ;
DECODE (prs_kenmerk5, NULL, 'Onbekend', prs_kenmerk5);
v_errorhint := 'Afdeling bepalen en vullen';
-- Afdeling bepalen waar persoon onder komt te vallen --- NOG ONDERHANDEN / TE BESPREKEN !!!
---- Structuur die ik nu kies is om domein_naam emailadres te hanteren (en als deze onbekend is dan fallback-afdeling op AD_ONBEKEND
-- Afdeling bepalen waar persoon onder komt te vallen
--- Structuur SCHG:
----- Per BU is er een AFD-2 waarin de afdelingsomschrijving de domeinnaam is. Bijvoorbeeld voor BU Kievit Pedicures is dit kievitpedicures.nl
----- Indien het email-domein van de NIEUWE persoon niet onder een BU-afd-2 gevonden kan worden dan laten we deze onder BU-scharenborggroep op de fallback-afdeling AD_ONBEKEND landen
----- BESTAANDE personen laten we onder de Afdelingen staan waar ze in Facilitor op gezet zijn..
FOR rec IN c_afd
LOOP
BEGIN
v_errorhint := 'Persoon aan Afdeling koppelen';
-- Als er al een afdeling aan de persoon gekoppeld is, dan wordt deze genomen.
IF rec.prs_afdeling_naam_huidig IS NOT NULL
THEN
SELECT min(prs_afdeling_key)
INTO v_prs_afdeling_key
FROM prs_v_afdeling
WHERE UPPER(prs_afdeling_omschrijving) = UPPER(SUBSTR (rec.prs_perslid_email, INSTR (rec.prs_perslid_email, '@') + 1))
AND prs_afdeling_verwijder IS NULL ;
IF v_prs_afdeling_key IS NOT NULL THEN
UPDATE fac_imp_perslid
SET prs_afdeling_naam = (SELECT a.prs_afdeling_upper FROM prs_afdeling a WHERE a.prs_afdeling_key = v_prs_afdeling_key)
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
SET prs_afdeling_naam = rec.prs_afdeling_naam_huidig
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
ELSE
END IF;
-- Als de persoon nog onbekend is, dan koppelen we deze aan de aangemaakte AD_afdeling behorende onder dat domein
IF rec.prs_afdeling_naam_huidig IS NULL
THEN
SELECT min(prs_afdeling_key)
INTO v_prs_afdeling_key
FROM prs_v_afdeling
WHERE UPPER(prs_afdeling_omschrijving) = UPPER(SUBSTR (rec.prs_perslid_email, INSTR (rec.prs_perslid_email, '@') + 1))
AND prs_afdeling_verwijder IS NULL ;
IF v_prs_afdeling_key IS NOT NULL THEN
UPDATE fac_imp_perslid
SET prs_afdeling_naam = (SELECT a.prs_afdeling_upper FROM prs_afdeling a WHERE a.prs_afdeling_key = v_prs_afdeling_key)
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
ELSE
-- fallback_afdeling
UPDATE fac_imp_perslid
SET prs_afdeling_naam = 'AD_ONBEKEND'
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
-- fallback_afdeling
UPDATE fac_imp_perslid
SET prs_afdeling_naam = 'AD_ONBEKEND'
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
END IF;
END;
END LOOP;
/*
-- De afdelingscode slaan we tijdelijk op in kenmerk14 omdat deze bij toekomstige medewerkers leeg is.
UPDATE fac_imp_perslid
SET prs_afdeling_naam = COALESCE(prs_kenmerk14, '_FH'),
prs_kenmerk1 = COALESCE(prs_kenmerk1, 'Future Hires'),
prs_srtperslid_omschrijving = SUBSTR(COALESCE(prs_kenmerk15, 'Future Hire'),1,60);
-- We gaan de medewerkers koppelen aan een werkplek. Dat gaan we doen door de code van de standplaats (kenmerk6) te matchen
-- met het kenmerk bij het gebouw (kenmerk 1200). Verder moet er dan bij dat gebouw een ruimte zijn met ruimtenummer _WP
UPDATE fac_imp_perslid p
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, alg_onrgoedkenmerk aogk
WHERE aogk.alg_onrgoed_key = rg.alg_gebouw_key
AND aogk.alg_kenmerk_key = 1200
AND alg_ruimte_nr = '_WP'
AND aogk.alg_onrgoedkenmerk_waarde = prs_kenmerk6
AND ROWNUM = 1);
*/
-- De oslogin leiden we af van emailadres echter moet bij uitvoer van de import wel uniek zijn
-- Voor SCHG geldt dat omdat er vanuit verschillende azure-omgevingen de bestanden volgen dat we in onderstaande cursor er voor zorgen dat oslogin-namen wel uniek zijn.
FOR rec IN c_oslogin
LOOP
BEGIN
v_errorhint := 'Dubbele oslogin checken en aanpassen';
-- Als het een bestaande persoon is in Facilitor dan nemen we de huidige login over
IF rec.prs_perslid_key IS NOT NULL AND rec.prs_perslid_oslogin_huidig IS NOT NULL
THEN
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = rec.prs_perslid_oslogin_huidig
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
-- Als de persoon nieuw geimporteerd wordt echter de oslogin bestaat al in Facilitor dan moeten we deze in importbestand aanpassen
IF rec.prs_perslid_key IS NULL AND rec.oslogin_facilitor_aantal > 0
THEN
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = prs_perslid_oslogin || rec.fac_imp_file_index
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
-- Als er in het zelfde importbestand nieuwe personen worden geimporteerd met eenzelfde oslogin dan moeten we deze ook aanpassen
IF rec.prs_perslid_key IS NULL AND rec.oslogin_facilitor_aantal = 0 AND rec.oslogin_import_aantal > 1
THEN
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = prs_perslid_oslogin || rec.fac_imp_file_index
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
END;
END LOOP;
END schg_import_perslid;
/
CREATE OR REPLACE PROCEDURE schg_update_perslid (p_import_key IN NUMBER)
IS
-- Alle personen verwijderen die niet meer in het import bestand voorkomen
-- Actuele bestand verwerken via standaard update
-- Kenmerkvelden in personenkaart van de AD_gegevens
-- Omdat er 2 tenant's zijn moet je bij de DELETE actie niet 'zomaar checken op 'Niet bekend, dus verwijderen'.
---- Ik heb import_bestands_naam toegevoegd en dus in DELETE alleen binnen het personenbestand in Facilitor wat uit die tenant_id komt checken.
---- Dubbelingen tussen de tenants/bestanden - ER NOG UITVISSEN ??
-- VERDER NOG BESPREKEN
---- Draaien import als aantal medewerkers > 100 ?
---- Personen in de juiste autorisatiegroep zetten op basis FUNCTIE
---- Dubbeling email-adressen ???
---- ???
---- We checken/matchen op EMAIL voor SCHG want de personeelsnummer die op Azure via Nmbrs-pakket worden gesynct blijken niet uniek te zijn.
CURSOR c_del
IS
SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
pf.prs_perslid_naam_full,
p.prs_perslid_oslogin,
p.importbestand_schg,
i.prs_kenmerk12
ib.huidige_importbestand_schg,
p.prs_importbestand_schg,
i.prs_kenmerk13
FROM fac_imp_perslid i,
(SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.prs_perslid_verwijder,
p.prs_afdeling_key,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw
WHERE kw.prs_kenmerk_key = 1032
WHERE kw.prs_kenmerk_key = 1060
AND kw.prs_kenmerklink_niveau = 'P'
AND kw.prs_link_key = p.prs_perslid_key)
importbestand_schg
prs_importbestand_schg -- het importbestand_schg in personenkaart
FROM prs_perslid p) p,
prs_v_perslid_fullnames_all pf,
prs_v_afdeling_boom ab,
prs_afdeling a,
(SELECT MAX (prs_kenmerk12)
importbestand_schg
FROM fac_imp_perslid) ib -- importbestand_sch in deze run
(SELECT MAX (prs_kenmerk13)
huidige_importbestand_schg
FROM fac_imp_perslid) ib -- importbestand_schg in deze run
WHERE p.prs_perslid_email = i.prs_perslid_email(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND p.prs_afdeling_key = ab.prs_afdeling_key
AND ab.prs_afdeling_key = a.prs_afdeling_key
AND COALESCE (p.importbestand_schg, ib.importbestand_schg) = ib.importbestand_schg
-- AND ab.prs_bedrijf_key = c_bedrijf_key
AND INSTR (a.prs_afdeling_upper, 'AD_') > 0
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid
WHERE INSTR (UPPER (p.prs_perslid_email), UPPER (prs_perslid_email)) > 0);
AND p.prs_importbestand_schg = ib.huidige_importbestand_schg
AND ab.prs_bedrijf_key = 21 -- bedrijf Scharenborg Groep
AND p.prs_perslid_nr IS NOT NULL
AND i.prs_perslid_email IS NULL
;
CURSOR c_flex -- Voor updaten van de algemene flex-kenmerkvelden op actuele medewerkers
IS
SELECT p.prs_perslid_key, i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3, i.prs_kenmerk4, i.prs_kenmerk5, i.prs_kenmerk6, i.prs_kenmerk7, i.prs_kenmerk8, i.prs_kenmerk9, i.prs_kenmerk10, i.prs_kenmerk11, i.prs_kenmerk12
SELECT p.prs_perslid_key, i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3, i.prs_kenmerk4, i.prs_kenmerk5, i.prs_kenmerk6, i.prs_kenmerk7, i.prs_kenmerk8, i.prs_kenmerk9, i.prs_kenmerk10, i.prs_kenmerk11, i.prs_kenmerk12, i.prs_kenmerk13
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_key = i.prs_perslid_key
ORDER BY 1;
CURSOR c_verantw
IS
SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.manager_email_azure,
CASE WHEN p.manager_email_azure <> '<geen Manager Email>'
THEN (SELECT prs_perslid_email FROM prs_perslid WHERE UPPER(prs_perslid_email) = UPPER(p.manager_email_azure) AND prs_perslid_verwijder IS NULL)
ELSE NULL
END
manager_email_azure_fac,
CASE WHEN p.prs_perslid_key_verantw IS NOT NULL
THEN (SELECT prs_perslid_email FROM prs_perslid WHERE prs_perslid_key = p.prs_perslid_key_verantw)
ELSE NULL
END
prs_perslid_verantw_email
FROM fac_imp_perslid i,
(SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.prs_perslid_key_verantw,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw
WHERE kw.prs_kenmerk_key = 1030
AND kw.prs_kenmerklink_niveau = 'P'
AND kw.prs_link_key = p.prs_perslid_key)
manager_email_azure
FROM prs_perslid p) p
WHERE p.prs_perslid_key = i.prs_perslid_key ;
v_count NUMBER;
oracle_err_num NUMBER;
@@ -779,28 +907,31 @@ IS
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
-- overige variabelen
v_prs_perslid_key_verantw NUMBER(10);
BEGIN
v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count >= 100
IF v_count >= 50
THEN
v_errorhint := 'Verwerken persoonsgegevens';
-- Geldig importbestand wat betreft aantal personen
-- Nu kunnen we de standaard facilitor-update doorvoeren
-- generic update
-- 'EMAIL' betekent dat op basis van Email wordt gematched.
-- 'NR' op basis personeelsnummer.
-- 'NULL' betekent altijd geen werkplekken verwijderen
prs.update_perslid (p_import_key, 'EMAIL', NULL);
COMMIT;
-- Nu kunnen we de standaard facilitor-update doorvoeren
-- generic update
-- 'EMAIL' betekent dat op basis van Email wordt gematched.
-- 'NULL' betekent altijd geen werkplekken verwijderen
prs.update_perslid (p_import_key, 'EMAIL', NULL);
-- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen.
FOR rec IN c_del
LOOP
-- Na de update gaan we de mensen verwijderen die niet in dit importbestand_schg meer zitten
FOR rec IN c_del
LOOP
BEGIN
v_errorhint :=
'Verwijderen persoon: '
@@ -820,31 +951,77 @@ BEGIN
'E',
v_errormsg,
v_errorhint);
END;
END LOOP;
END;
END LOOP;
-- En dan gaan we als laatste de kenmmerken bijwerken op de actuele medewerkers
-- En dan gaan we de kenmmerken bijwerken op de actuele medewerkers
FOR rec IN c_flex
LOOP
BEGIN
-- userPrincipalName;displayName;surname;EmailAddress;givenName;id;jobTitle;department;usageLocation;officeLocation;companyName;
-- User Principal Name;Display Name;Given Name;Surname;Job Title;Department;Employee ID;Office Location;Mobile Phone;Business Phone;Street Address;City;State;Postal Code;Country;Account Enabled;Manager Email;Object ID;User Type;Creation Type;Usage Location;Sign-In Names;Other Mails;importbestand_schg%';
v_errorhint:='Fout bijwerken kenmerkvelden';
PRS.upsertkenmerk (1021, rec.prs_perslid_key, rec.prs_kenmerk1);
PRS.upsertkenmerk (1022, rec.prs_perslid_key, rec.prs_kenmerk2);
PRS.upsertkenmerk (1023, rec.prs_perslid_key, rec.prs_kenmerk3);
PRS.upsertkenmerk (1024, rec.prs_perslid_key, rec.prs_kenmerk4);
PRS.upsertkenmerk (1025, rec.prs_perslid_key, rec.prs_kenmerk5);
PRS.upsertkenmerk (1026, rec.prs_perslid_key, rec.prs_kenmerk6);
PRS.upsertkenmerk (1027, rec.prs_perslid_key, rec.prs_kenmerk7);
PRS.upsertkenmerk (1028, rec.prs_perslid_key, rec.prs_kenmerk8);
PRS.upsertkenmerk (1029, rec.prs_perslid_key, rec.prs_kenmerk9);
PRS.upsertkenmerk (1030, rec.prs_perslid_key, rec.prs_kenmerk10);
PRS.upsertkenmerk (1031, rec.prs_perslid_key, rec.prs_kenmerk11);
PRS.upsertkenmerk (1032, rec.prs_perslid_key, rec.prs_kenmerk12);
PRS.upsertkenmerk (1021, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk1, '<geen User Principal Name>')); -- User Principal Name
PRS.upsertkenmerk (1022, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk2, '<geen Display Name>')); -- Display Name
PRS.upsertkenmerk (1023, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk3, '<geen Given Name>')); -- Given Name
PRS.upsertkenmerk (1024, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk4, '<geen Surname>')); -- Surname
PRS.upsertkenmerk (1025, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk5, '<geen Job Title>')); -- Job Title
PRS.upsertkenmerk (1026, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk6, '<geen Department>')); -- Department
PRS.upsertkenmerk (1027, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk7, '<geen Office Location>')); -- Office Location
PRS.upsertkenmerk (1028, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk8, '<geen Mobile Phone>')); -- Mobile Phone
PRS.upsertkenmerk (1029, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk9, '<geen Business Phone>')); -- Business Phone
PRS.upsertkenmerk (1030, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk10, '<geen Manager Email>')); -- Manager Email
PRS.upsertkenmerk (1031, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk11, '<geen Other Mails>')); -- Other Mails
PRS.upsertkenmerk (1032, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk12, '<geen Employee ID>')); -- Employee ID
PRS.upsertkenmerk (1060, rec.prs_perslid_key, rec.prs_kenmerk13); -- importbestand_schg
END;
END LOOP;
-- En de verantwoordelijk manager updaten in de personenkaart indien nodig
FOR rec IN c_verantw
LOOP
BEGIN
v_errorhint:='Fout bijwerken verantwoordelijke';
-- als de aangeboden waarde uit azure anders is dan de huidige verantwoordelijke in de personenkaart dan gaan we personenkaart updaten
IF COALESCE(rec.manager_email_azure_fac, '<leeg>') <> COALESCE(rec.prs_perslid_verantw_email, '<leeg>')
THEN
-- geen gevonden facilitor-manager dan gevulde verantwoordelijke verwijderen
IF rec.manager_email_azure_fac IS NULL
THEN
UPDATE prs_perslid
SET prs_perslid_key_verantw = ''
WHERE prs_perslid_key = rec.prs_perslid_key ;
END IF;
-- wel gevonden facilitor-manager dan bijbehorende verantwoordelijke_key in personenkaart vullen
IF rec.manager_email_azure_fac IS NOT NULL
THEN
SELECT prs_perslid_key
INTO v_prs_perslid_key_verantw
FROM prs_perslid
WHERE prs_perslid_email = rec.manager_email_azure_fac ;
UPDATE prs_perslid
SET prs_perslid_key_verantw = v_prs_perslid_key_verantw
WHERE prs_perslid_key = rec.prs_perslid_key ;
END IF;
END IF;
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key,