BLOS#79136 -- Procedure werkplekkoppelingen voor regiomanagers en -directeuren incl. kp-budgethouders

svn path=/Customer/trunk/; revision=61988
This commit is contained in:
Jos Migo
2023-10-01 20:26:10 +00:00
parent a591db9b2e
commit 8190651cbb

View File

@@ -248,11 +248,12 @@ EXCEPTION
END;
/
-------------------------------------------------------------------------
-- Systematiek Locatieleiders en Werkplekkoppelingen ---
----- 1. Personenkaart vinlkboxen Cluster/Label - OUD ---
----- 2. Locatiekaart en gekoppelde locatieleider - NIEUW 2023-juli ---
-------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-- Systematiek Locatieleiders en Regiomanagers en Werkplekkoppelingen ---
----- 1. Personenkaart vinlkboxen Cluster/Label - OUD ---
----- 2. Locatiekaart en gekoppelde locatieleider - NIEUW 2023-juli ---
----- 3. Regiomanagers en directeuren incl. budgethouderschap - NIEUW 2023-okt ---
-----------------------------------------------------------------------------------
--------------------------------------------------------------------
-- 2. Locatiekaart en gekoppelde locatieleider - NIEUW 2023-juli ---
@@ -680,7 +681,362 @@ EXCEPTION
END;
/
-----------------------------------------------------------------------------------
----- 3. Regiomanagers en directeuren incl. budgethouderschap - NIEUW 2023-okt ---
-----------------------------------------------------------------------------------
-- Lijst van regiomanagers en directeuren en de locaties die onder hun cluster(district) en regio vallen
CREATE OR REPLACE VIEW blos_v_regiomanagers
(
PRS_PERSLID_KEY,
ALG_LOCATIE_KEY,
REGIOMANAGER,
LOCATIE,
REGIODIRECTEUR,
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,
CASE WHEN ok.alg_kenmerk_key = 1181 THEN 'ja' ELSE 'nee' END
directeur,
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 (1164, 1181) -- regiomanager en regiodirecteur
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 ;
-- Lijst van Regiomanagers + Regio-directeuren en de Werkplekkoppeling die ze in hun personenkaart hebben
CREATE OR REPLACE VIEW blos_v_regiomanagers_wp
(
PRS_PERSLID_KEY,
ALG_LOCATIE_KEY,
NAAM,
LOCATIE_WP,
PRS_WERKPLEK_KEY
)
AS
SELECT wp.prs_perslid_key,
onr.alg_locatie_key,
p.prs_perslid_naam_friendly,
l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving
locatie,
w.prs_werkplek_key
FROM (
SELECT prs_perslid_key
FROM (SELECT *
FROM blos_v_personenlijst_clus
UNION
SELECT *
FROM blos_v_personenlijst_dir
) x
GROUP BY x.prs_perslid_key
) v,
prs_v_perslid_fullnames p, prs_perslidwerkplek wp, prs_werkplek w, alg_ruimte r, alg_v_onrgoed_boom onr, alg_locatie l
WHERE v.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = wp.prs_perslid_key
AND wp.prs_werkplek_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_ruimte_key = onr.alg_ruimte_key
AND onr.alg_locatie_key = l.alg_locatie_key
ORDER BY wp.prs_perslid_key
;
CREATE OR REPLACE VIEW blos_v_export_wp_loc_regioman
(
result,
result_order
)
AS
SELECT '"SYNC - Werkplekkoppeling Locatiemanager (incl. zijn/haar Mandaten)"'
|| ';"Uitgevoerd"',
0
FROM DUAL ;
CREATE OR REPLACE PROCEDURE blos_select_wp_loc_regioman (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
-- Werkplekkoppelingen toevoegen
CURSOR c_loc_wp -- Voor updaten van regiomanagers en - directeuren (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 blos_v_regiomanagers man -- WAS: blos_v_locatiemanagers man WORDT: blos_v_regiomanagers man
WHERE NOT EXISTS
(SELECT *
FROM blos_v_regiomanagers_wp wp -- WAS: blos_v_locatiemanagers_wp wp WORDT: blos_v_regiomanagers_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 blos_v_regiomanagers_wp wp
WHERE NOT EXISTS
(SELECT *
FROM blos_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 blos_v_regiomanagers_wp wp,
blos_v_regiomanagers 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 regiomanagers en directeuren (mandaten op kostenplaatsen en voor regiomanagers ook budgethouders-schap)
IS
SELECT w.prs_perslid_key, w.alg_locatie_key, w.prs_kostenplaats_key,
CASE WHEN f1.prs_perslid_key IS NOT NULL THEN 'regiomanager'
WHEN f2.prs_perslid_key IS NOT NULL THEN 'regio-directeur'
ELSE ''
END
functie
FROM ( SELECT v_prs.prs_perslid_key,
v_prs.alg_locatie_key,
v_kp.prs_kostenplaats_key
FROM blos_v_regiomanagers v_prs, blos_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,
blos_v_personenlijst_clus f1 , -- regiomanagers
blos_v_personenlijst_dir f2 -- regiodirecteuren
WHERE w.prs_perslid_key = f1.prs_perslid_key(+)
AND w.prs_perslid_key = f2.prs_perslid_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
FROM prs_perslidkostenplaats pk
WHERE NOT EXISTS
( SELECT v_prs.prs_perslid_key,
v_kp.prs_kostenplaats_key
FROM blos_v_regiomanagers v_prs,
blos_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 prs_perslid_key
FROM blos_v_regiomanagers
GROUP BY prs_perslid_key)
ORDER BY 1, 2;
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_prs_perslid_key NUMBER (10);
BEGIN
v_count := 0;
FOR rec IN c_loc_wp
LOOP
BEGIN
-- Werkplekkoppelingen op basis van de locaties die onder het cluster/district of regio vallen waar men regiomanager/directeur van is
v_aanduiding :=
'bijwerken werkplekkoppelingen regiomanager/directeur - perslid_key:'
|| TO_CHAR (rec.prs_perslid_key);
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);
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;
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 budgethouders - voor regiomanagers het budgethouderschap op kostenplaats updaten indien nodig
v_aanduiding :=
'bijwerken budgethouder regiomanager/directeur - perslid_key '
|| TO_CHAR (rec.prs_perslid_key);
IF rec.functie = 'regiomanager'
THEN
-- check eers of er nu afwijkende budgethouder op KP zit. Zo ja updaten
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key
AND prs_kostenplaats_verwijder IS NULL
AND (prs_kostenplaats_eind IS NULL OR prs_kostenplaats_eind > TRUNC(SYSDATE) )
AND prs_kostenplaats_module = 'PRS' ;
IF v_prs_perslid_key IS NULL OR v_prs_perslid_key <> rec.prs_perslid_key
THEN
v_errorhint :=
'bijwerken budgethouder op kostenplaats - kostenplaats_key '
|| TO_CHAR (rec.prs_kostenplaats_key);
UPDATE prs_kostenplaats
SET prs_perslid_key = rec.prs_perslid_key
WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key ;
-- Geen fac_tracking nodig. Mutatie wordt namelijk al via trigger met aud.auditaction weggeschreven
END IF;
END IF;
-- kostenplaatsen en mandaat - alle mandaten voor regiomanagers en directeuren van hun onderliggende locaties doorvoeren
v_aanduiding :=
'bijwerken mandaten regiomanager/directeur - perslid_key '
|| TO_CHAR (rec.prs_perslid_key);
-- Alle mandaten goed inregelen
SELECT prs_perslidkostenplaats_key
INTO v_prs_perslidkostenplaats_key
FROM prs_perslidkostenplaats
WHERE prs_perslid_key = rec.prs_perslid_key
AND prs_kostenplaats_key = rec.prs_kostenplaats_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_prs_perslidkostenplaats_key := NULL;
IF v_prs_perslidkostenplaats_key IS NULL
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 regiomanager/directeur - 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;
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_errorhint);
END;
/
------------------------------------------------------------