From 8190651cbb21ba5689d58779a7a14cecb2d74178 Mon Sep 17 00:00:00 2001 From: Jos Migo Date: Sun, 1 Oct 2023 20:26:10 +0000 Subject: [PATCH] BLOS#79136 -- Procedure werkplekkoppelingen voor regiomanagers en -directeuren incl. kp-budgethouders svn path=/Customer/trunk/; revision=61988 --- BLOS/blos.sql | 366 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 361 insertions(+), 5 deletions(-) diff --git a/BLOS/blos.sql b/BLOS/blos.sql index 981d9bebf..a20de5bf7 100644 --- a/BLOS/blos.sql +++ b/BLOS/blos.sql @@ -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; +/ ------------------------------------------------------------