AAIT#90164 -- Voor BFNL - Locatiemanagers automatisch mandaat en wp's krijgen - Methodiek uit oude BLOS-omgeving overnemen

svn path=/Customer/trunk/; revision=71093
This commit is contained in:
Jos Migo
2025-11-30 16:01:14 +00:00
parent 7d456c8c11
commit c72ad223df

View File

@@ -91,29 +91,31 @@ AS
k.prs_kostenplaats_nr || ' - oud!'
ELSE
k.prs_kostenplaats_nr
END
prs_kostenplaats_nr,
END
prs_kostenplaats_nr,
k.prs_kostenplaats_verwijder,
CASE
WHEN ( prs_kostenplaats_verwijder IS NOT NULL
OR ( prs_kostenplaats_eind IS NOT NULL
AND prs_kostenplaats_eind < TRUNC (SYSDATE)))
THEN
NULL
ELSE
'oud!'
ELSE
NULL
END
prs_kostenplaats_actueel,
k.prs_kostenplaats_omschrijving
FROM prs_kostenplaats k;
-- Lijst van Locatieleiders (tbv domeinview)
-- Lijst van Locatieverantwoordelijke (tbv domeinview)
CREATE OR REPLACE VIEW bfnl_v_personenlijst_loc
(
PRS_PERSLID_KEY,
NAAM,
PERSONEELSNUMMER,
EMAIL,
ROL_LOC_VERANTWOORDELIJKE,
PRS_PERSLID_INACTIEF,
PRS_PERSLID_VERWIJDER
)
AS
@@ -126,9 +128,12 @@ AS
naam,
p.prs_perslid_nr,
p.prs_perslid_email,
pr.rol_loc_verantwoordelijke,
p.prs_perslid_inactief,
p.prs_perslid_verwijder
FROM
prs_perslid p,
(SELECT prs_link_key, prs_kenmerklink_waarde rol_loc_verantwoordelijke FROM prs_kenmerklink WHERE prs_kenmerk_key = 1121 AND prs_kenmerklink_niveau = 'P' AND prs_kenmerklink_verwijder IS NULL) pr, -- rol locatieverantwoordelijke
prs_srtperslid sp,
prs_v_afdeling a,
prs_bedrijf b
@@ -137,8 +142,7 @@ AS
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 541 -- bedrijfs_key Babilou Family NL
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND sp.prs_srtperslid_key IN (544, 543, 542) --- LOCATIEMANAGER (key 544) + ASSISTENT LOCATIEMANAGER (key 543) + REGIOEMANAGER (key 542)
-- AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_key = pr.prs_link_key
ORDER BY sp.prs_srtperslid_omschrijving, p.prs_perslid_voornaam, p.prs_perslid_naam
;
@@ -149,6 +153,8 @@ CREATE OR REPLACE VIEW bfnl_v_personenlijst_clus
NAAM,
PERSONEELSNUMMER,
EMAIL,
ROL_LOC_VERANTWOORDELIJKE,
PRS_PERSLID_INACTIEF,
PRS_PERSLID_VERWIJDER
)
AS
@@ -161,9 +167,12 @@ AS
naam,
p.prs_perslid_nr,
p.prs_perslid_email,
pr.rol_regio_verantwoordelijke,
p.prs_perslid_inactief,
p.prs_perslid_verwijder
FROM
prs_perslid p,
(SELECT prs_link_key, prs_kenmerklink_waarde rol_regio_verantwoordelijke FROM prs_kenmerklink WHERE prs_kenmerk_key = 1122 AND prs_kenmerklink_niveau = 'P' AND prs_kenmerklink_verwijder IS NULL) pr, -- rol regioverantwoordelijke
prs_srtperslid sp,
prs_v_afdeling a,
prs_bedrijf b
@@ -172,12 +181,11 @@ AS
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 541 -- bedrijfs_key Babilou Family NL
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND sp.prs_srtperslid_key = 542 --- REGIOEMANAGER
-- AND p.prs_perslid_verwijder IS NULL
ORDER BY p.prs_perslid_naam
AND p.prs_perslid_key = pr.prs_link_key
ORDER BY sp.prs_srtperslid_omschrijving, p.prs_perslid_voornaam, p.prs_perslid_naam
;
-- Lijst van Locatieleiders/Vervangers en de locaties waar men verantwoordelijk voor is)
-- Lijst van Locatieleiders/Vervangers en de locaties waar men verantwoordelijk voor is omdat ze in de locatie/gebouw-kaart gekoppeld zijn
CREATE OR REPLACE VIEW bfnl_v_locatiemanagers
(
PRS_PERSLID_KEY,
@@ -217,7 +225,8 @@ CREATE OR REPLACE VIEW bfnl_v_locatiemanagers_wp
ALG_LOCATIE_KEY,
NAAM,
LOCATIE_WP,
PRS_WERKPLEK_KEY
PRS_WERKPLEK_KEY,
PRS_WERKPLEK_VIRTUEEL
)
AS
SELECT wp.prs_perslid_key,
@@ -229,7 +238,8 @@ AS
naam,
l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving
locatie,
w.prs_werkplek_key
w.prs_werkplek_key,
w.prs_werkplek_virtueel
FROM (
SELECT prs_perslid_key
FROM (SELECT *
@@ -248,6 +258,7 @@ AS
ORDER BY wp.prs_perslid_key
;
-- Nog 2 bronviews nodig voor procedure:
--- Bronview: Alle locaties met haar kostenplaats(en): bfnl_v_locaties_kp
--- Bronview: Alle werkplek-koppeling per locatiemanager en de kp's die daarbij vanuit locatiekaart bijhoren: bfnl_v_locaties_wp_kp
@@ -304,6 +315,20 @@ AS
kp.prs_kostenplaats_key
AND alg_onrgoed_niveau = 'G'
AND kw.alg_kenmerk_key = 1186 -- kostenplaats-3
UNION
SELECT l.alg_locatie_key,
alg_locatie_omschrijving,
kw.alg_onrgoedkenmerk_waarde prs_kostenplaats_key,
prs_kostenplaats_nr,
prs_kostenplaats_eind,
prs_kostenplaats_verwijder
FROM alg_locatie l, alg_gebouw g, alg_onrgoedkenmerk kw, prs_kostenplaats kp
WHERE kw.alg_onrgoed_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) =
kp.prs_kostenplaats_key
AND alg_onrgoed_niveau = 'G'
AND kw.alg_kenmerk_key = 1241 -- kostenplaats-4
;
-- BRONVIEW: Alle werkplek-koppeling per locatiemanager en de kp's die daarbij vanuit locatie/gebouwkaart bijhoren
@@ -312,6 +337,7 @@ CREATE OR REPLACE VIEW bfnl_v_locaties_wp_kp
prs_perslid_key,
prs_perslid_naam,
prs_srtperslid_omschrijving,
rol_loc_verantwoordelijke,
prs_perslidwerkplek_key,
alg_locatie_omschrijving,
alg_locatie_key,
@@ -322,6 +348,7 @@ AS
SELECT v.prs_perslid_key,
p.prs_perslid_naam,
sp.prs_srtperslid_omschrijving,
pr.rol_loc_verantwoordelijke,
v.prs_perslidwerkplek_key,
l.alg_locatie_omschrijving,
lkp.alg_locatie_key,
@@ -330,16 +357,364 @@ AS
FROM prs_v_werkplekperslid_gegevens v,
alg_locatie l,
prs_perslid p,
(SELECT prs_link_key, prs_kenmerklink_waarde rol_loc_verantwoordelijke FROM prs_kenmerklink WHERE prs_kenmerk_key = 1121 AND prs_kenmerklink_niveau = 'P' AND prs_kenmerklink_verwijder IS NULL) pr, -- rol locatieverantwoordelijke
prs_srtperslid sp,
bfnl_v_locaties_kp lkp
WHERE v.prs_perslid_key = p.prs_perslid_key
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND p.prs_perslid_key = pr.prs_link_key(+)
AND v.alg_locatie_key = l.alg_locatie_key
AND v.alg_locatie_key = lkp.alg_locatie_key(+)
AND INSTR(prs_srtperslid_upper,'LOCATIEMANAGER') > 0 ;
AND v.alg_locatie_key = lkp.alg_locatie_key(+) ;
-- VOOR REGIOMANAGERS - DE VIEWS
-- Lijst van regiomanagers en de locaties waar men verantwoordelijk voor is omdat ze in de districtkaart zijn gekoppeld
CREATE OR REPLACE VIEW bfnl_v_regiomanagers
(
PRS_PERSLID_KEY,
ALG_LOCATIE_KEY,
REGIOMANAGER,
LOCATIE, -- voor BFNL de personen op GEBOUW gekoppeld en de naam locatie wel op locatieniveau
PRS_PERSLID_VERWIJDER
)
AS
SELECT p.prs_perslid_key,
l.alg_locatie_key,
p.prs_perslid_naam || ' (' || p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ') - ' || sp.prs_srtperslid_omschrijving
regiomanager,
l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving
locatie,
p.prs_perslid_verwijder
FROM prs_perslid p, prs_srtperslid sp, alg_onrgoedkenmerk ok, alg_locatie l, alg_district d
WHERE fac.safe_to_number(ok.alg_onrgoedkenmerk_waarde) = p.prs_perslid_key
AND ok.alg_kenmerk_key IN (1200) -- regiomanager
AND ok.alg_onrgoedkenmerk_verwijder IS NULL
AND ok.alg_onrgoed_niveau = 'D' AND ok.alg_onrgoed_key = d.alg_district_key
AND d.alg_district_key = l.alg_district_key
AND l.alg_locatie_verwijder IS NULL
AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL )
AND p.prs_srtperslid_key = sp.prs_srtperslid_key ;
--- DE PROCEDURE om voor de Locatiemanagers/verantwoordelijke van de Locaties/Gebouwen de juiste LOCATIES te koppelen als werkplek
CREATE OR REPLACE VIEW bfnl_v_export_wp_loc_manager
(
result,
result_order
)
AS
SELECT '"SYNC - Werkplekkoppeling Locatieverantwoordelijke (incl. zijn/haar Mandaten)"'
|| ';"Uitgevoerd"',
0
FROM DUAL
UNION
SELECT 'ERROR: Datum '|| TO_CHAR(imp_log_datum) || ' - ' || imp_log_omschrijving || ' - ' || imp_log_hint,
1
FROM imp_log
WHERE imp_log_applicatie = 'WP_LOC_MANAGER' ;
CREATE OR REPLACE PROCEDURE bfnl_select_wp_loc_manager (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
-- Werkplekkoppelingen toevoegen
CURSOR c_loc_wp -- Voor updaten van locatieverantwoordelijke (werkplek-koppelingen)
IS
SELECT v.prs_perslid_key,
v.alg_locatie_key,
v.prs_werkplek_key,
v.actie
FROM (SELECT man.prs_perslid_key,
man.alg_locatie_key,
NULL prs_werkplek_key,
'toevoegen' actie
FROM bfnl_v_locatiemanagers man
WHERE NOT EXISTS
(SELECT *
FROM bfnl_v_locatiemanagers_wp wp
WHERE wp.alg_locatie_key =
man.alg_locatie_key
AND wp.prs_perslid_key =
man.prs_perslid_key)
UNION
SELECT wp.prs_perslid_key,
wp.alg_locatie_key,
wp.prs_werkplek_key,
'verwijderen' actie
FROM bfnl_v_locatiemanagers_wp wp
WHERE NOT EXISTS
(SELECT *
FROM bfnl_v_locatiemanagers man
WHERE man.alg_locatie_key =
wp.alg_locatie_key
AND man.prs_perslid_key =
wp.prs_perslid_key)
AND NOT EXISTS -- voor de regiomanagers die via de normale weg in de cluster-kaart zijn gekoppeld, moeten de werkplek-koppelingen natuurlijk niet verwijderd worden
(SELECT *
FROM bfnl_v_regiomanagers man
WHERE man.alg_locatie_key =
wp.alg_locatie_key
AND man.prs_perslid_key =
wp.prs_perslid_key)
UNION
SELECT wp.prs_perslid_key,
wp.alg_locatie_key,
wp.prs_werkplek_key,
'ok' actie
FROM bfnl_v_locatiemanagers_wp wp,
bfnl_v_locatiemanagers man
WHERE man.alg_locatie_key = wp.alg_locatie_key
AND man.prs_perslid_key = wp.prs_perslid_key) v
ORDER BY 1, 2, 3;
CURSOR c_loc_kp -- Voor updaten van locatieverantwoordelijke en mandaten op kostenplaatsen
IS
SELECT w.prs_perslid_key, w.alg_locatie_key, w.prs_kostenplaats_key, p.prs_perslid_email, kp.prs_kostenplaats_omschrijving
FROM ( SELECT v_prs.prs_perslid_key,
v_prs.alg_locatie_key,
v_kp.prs_kostenplaats_key
FROM bfnl_v_locatiemanagers v_prs, bfnl_v_locaties_kp v_kp
WHERE v_prs.alg_locatie_key = v_kp.alg_locatie_key
GROUP BY v_prs.prs_perslid_key,
v_prs.alg_locatie_key,
v_kp.prs_kostenplaats_key) w,
prs_perslid p, prs_kostenplaats kp
WHERE w.prs_perslid_key = p.prs_perslid_key AND w.prs_kostenplaats_key = kp.prs_kostenplaats_key
ORDER BY 1, 2, 3;
CURSOR c_loc_kp_del -- Voor deleten van mandaten die niet meer van toepassing zijn
IS
SELECT pk.prs_perslid_key, pk.prs_perslidkostenplaats_key, p.prs_perslid_email, kp.prs_kostenplaats_omschrijving
FROM prs_perslidkostenplaats pk, prs_perslid p, prs_kostenplaats kp
WHERE
pk.prs_perslid_key = p.prs_perslid_key AND pk.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND NOT EXISTS
( SELECT v_prs.prs_perslid_key,
v_kp.prs_kostenplaats_key
FROM bfnl_v_locatiemanagers v_prs,
bfnl_v_locaties_kp v_kp
WHERE v_prs.alg_locatie_key = v_kp.alg_locatie_key
AND v_prs.prs_perslid_key = pk.prs_perslid_key
AND v_kp.prs_kostenplaats_key = pk.prs_kostenplaats_key
GROUP BY v_prs.prs_perslid_key,
v_kp.prs_kostenplaats_key)
AND pk.prs_perslid_key IN (SELECT d.prs_perslid_key FROM bfnl_v_personenlijst_loc d WHERE p.prs_perslid_verwijder IS NULL AND INSTR(d.naam, 'Regiomanager')=0) -- kijken alleen naar locatieverantwoordelijke
ORDER BY 1, 2 ;
CURSOR c_loc_recht -- -- Voor onderhouden van de locatiemanagers in de autorisatiegroepen
IS
SELECT p.prs_perslid_key, p.naam,
(SELECT count(*) FROM prs_perslidwerkplek wp WHERE wp.prs_perslid_key = p.prs_perslid_key) aantal_wp,
(SELECT count(*) FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = p.prs_perslid_key AND gg.fac_groep_key = 461) groep
FROM bfnl_v_personenlijst_loc p
WHERE p.prs_perslid_verwijder IS NULL AND INSTR(p.naam, 'Regiomanager')=0 -- uitsluiten regiomanagers
ORDER BY 1 ;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_mes VARCHAR2 (200);
oracle_err_num NUMBER;
currentversion fac_module.fac_module_version%TYPE;
v_aanduiding VARCHAR2 (1000);
v_count NUMBER;
v_alg_ruimte_key NUMBER;
v_prs_perslidkostenplaats_key NUMBER (10);
v_teller_mandaat NUMBER (10);
v_upsert_sync NUMBER(1);
c_fac_groep_key NUMBER(10) := 461 ; -- standaard autorisatiegroep voor Locatiemanagers BFNL
BEGIN
v_count := 0;
FOR rec IN c_loc_wp
LOOP
BEGIN
-- Werkplekkoppelingen op basis van de locaties waar men locatieleider van is
v_aanduiding :=
'bijwerken werkplekkoppelingen locatiemanager - perslid_key:'
|| TO_CHAR (rec.prs_perslid_key);
v_upsert_sync := 0 ;
IF rec.actie = 'toevoegen'
THEN
v_errorhint :=
'actie toevoegen werkplek - loc-key: '
|| TO_CHAR (rec.alg_locatie_key);
BEGIN
SELECT MIN (r.alg_ruimte_key)
INTO v_alg_ruimte_key
FROM alg_ruimte r, alg_verdieping v, alg_gebouw g
WHERE r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND r.alg_ruimte_verwijder IS NULL
AND v.alg_verdieping_verwijder IS NULL
AND g.alg_gebouw_verwijder IS NULL
AND g.alg_locatie_key = rec.alg_locatie_key;
IF v_alg_ruimte_key IS NOT NULL
THEN
-- PROCEDURE movetoruimte (p_prs_key IN NUMBER, p_ruimte_key IN NUMBER, p_alg_type IN VARCHAR2, p_virtual IN NUMBER DEFAULT 0);
BEGIN
PRS.movetoruimte (rec.prs_perslid_key,
v_alg_ruimte_key,
'L',
1);
v_upsert_sync := 1 ;
END;
END IF;
END;
END IF;
IF rec.actie = 'verwijderen'
THEN
v_errorhint :=
'actie verwijderen werkplek - loc-key: '
|| TO_CHAR (rec.alg_locatie_key);
DELETE prs_werkplek
WHERE prs_werkplek_key = rec.prs_werkplek_key;
v_upsert_sync := 1 ;
END IF;
-- In personenkaart nog even vermelden wanneer deze vanuit de WP-sync voor het laatst zijn gemuteerd
IF v_upsert_sync = 1
THEN
PRS.upsertkenmerk (1140, rec.prs_perslid_key, TO_CHAR(sysdate, 'dd-mm-yyyy HH24:MI'));
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || ' - ' || v_errormsg,
v_errorhint);
END;
END LOOP;
FOR rec IN c_loc_kp
LOOP
BEGIN
-- kostenplaatsen en mandaat
v_aanduiding :=
'bijwerken mandaten locatiemanager - perslid_key:'
|| TO_CHAR (rec.prs_perslid_key);
-- Alle mandaten goed inregelen
SELECT COUNT(*)
INTO v_teller_mandaat
FROM prs_perslidkostenplaats
WHERE prs_perslid_key = rec.prs_perslid_key
AND prs_kostenplaats_key = rec.prs_kostenplaats_key ;
IF v_teller_mandaat = 0
THEN
v_errorhint :=
'bijwerken kostenplaats-mandaat - kostenplaat_key'
|| TO_CHAR (rec.prs_kostenplaats_key);
INSERT INTO prs_perslidkostenplaats (
prs_perslidkostenplaats_boeken,
prs_perslidkostenplaats_inzage,
prs_perslid_key,
prs_kostenplaats_key)
VALUES (1,
1,
rec.prs_perslid_key,
rec.prs_kostenplaats_key);
END IF;
END;
END LOOP;
FOR rec IN c_loc_kp_del
LOOP
BEGIN
-- opschonen mandaten die niet meer geldig zijn
v_aanduiding :=
'verwijderen mandaten locatiemanager - perslid_key:'
|| TO_CHAR (rec.prs_perslid_key);
v_errorhint := 'verwijderen mandaten die niet meer geldig zijn';
DELETE FROM prs_perslidkostenplaats
WHERE prs_perslidkostenplaats_key =
rec.prs_perslidkostenplaats_key;
END;
END LOOP;
FOR rec IN c_loc_recht
LOOP
BEGIN
-- Alle managers zonder WP's uit de autorisatiegroep Locatiemanagers halen (key 24)
v_aanduiding :=
'bijwerken locatiemanager - perslid_key:'
|| TO_CHAR (rec.prs_perslid_key);
v_errorhint := 'verwijderen locatiemanager uit autorisatiegroep';
IF rec.aantal_wp = 0 AND rec.groep = 1
THEN
DELETE
FROM fac_gebruikersgroep
WHERE fac_groep_key = c_fac_groep_key AND prs_perslid_key = rec.prs_perslid_key ;
END IF;
v_errorhint := 'toevoegen locatiemanagers aan autorisatiegroep';
IF rec.aantal_wp > 0 AND rec.groep = 0
THEN
INSERT INTO fac_gebruikersgroep (fac_groep_key,
prs_perslid_key)
VALUES (c_fac_groep_key,
rec.prs_perslid_key) ;
END IF;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes;
fac.writelog (p_applname,
'E',
v_errormsg,
v_aanduiding || ' - HINT: ' || v_errorhint);
END;
/
--- DE PROCEDURE om voor de Locatiemanagers van de CLUSTERS de juiste CLUSTER-LOCATIES te koppelen als werkplek
---- NOG GOED INPASSEN IOM HEYDAY - SANDER VOGELS
-------------------
-- RAPPORTAGES ---