diff --git a/GOKO/goko.sql b/GOKO/goko.sql index 43616b0c0..e92200811 100644 --- a/GOKO/goko.sql +++ b/GOKO/goko.sql @@ -29,6 +29,9 @@ AS -- PROCEDURE annuleer_werkplek; + -- PROCEDURE bes_after_insert (p_bes_bestelling_key IN NUMBER); + + FUNCTION get_kenmerk (p_module IN VARCHAR2, p_kenmerk_key IN NUMBER, p_link_key IN NUMBER) @@ -64,10 +67,10 @@ AS FROM mld_v_aanwezigkenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk - WHERE km.mld_melding_key = p_link_key - AND km.mld_kenmerk_key = p_kenmerk_key - AND km.mld_kenmerk_key = k.mld_kenmerk_key - AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key; + WHERE km.mld_melding_key = p_link_key + AND km.mld_kenmerk_key = p_kenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key; WHEN 'CNT' THEN SELECT cnt_srtkenmerk_kenmerktype, @@ -77,10 +80,10 @@ AS FROM cnt_kenmerkcontract kc, cnt_kenmerk k, cnt_srtkenmerk sk - WHERE kc.cnt_contract_key = p_link_key - AND kc.cnt_kenmerk_key = p_kenmerk_key - AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key - AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key; + WHERE kc.cnt_contract_key = p_link_key + AND kc.cnt_kenmerk_key = p_kenmerk_key + AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key + AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key; WHEN 'ALG' THEN SELECT alg_kenmerk_kenmerktype, @@ -88,9 +91,9 @@ AS aogk.alg_onrgoedkenmerk_waarde INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk k - WHERE aogk.alg_onrgoed_key = p_link_key - AND aogk.alg_kenmerk_key = p_kenmerk_key - AND aogk.alg_kenmerk_key = k.alg_kenmerk_key; + WHERE aogk.alg_onrgoed_key = p_link_key + AND aogk.alg_kenmerk_key = p_kenmerk_key + AND aogk.alg_kenmerk_key = k.alg_kenmerk_key; WHEN 'INS' THEN SELECT k.ins_kenmerk_niveau @@ -109,11 +112,11 @@ AS FROM ins_kmdeelsrtcontr ikds, ins_kenmerk k, ins_srtkenmerk sk - WHERE ikds.ins_kmdeelsrtcontr_key = p_link_key - AND ikds.ins_kmdeelsrtcontr_verwijder IS NULL - AND ikds.ins_kenmerk_key = p_kenmerk_key - AND ikds.ins_kenmerk_key = k.ins_kenmerk_key - AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key; + WHERE ikds.ins_kmdeelsrtcontr_key = p_link_key + AND ikds.ins_kmdeelsrtcontr_verwijder IS NULL + AND ikds.ins_kenmerk_key = p_kenmerk_key + AND ikds.ins_kenmerk_key = k.ins_kenmerk_key + AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key; ELSE SELECT sk.ins_srtkenmerk_kenmerktype, sk.fac_kenmerkdomein_key, @@ -124,11 +127,11 @@ AS FROM ins_kenmerkdeel ikd, ins_kenmerk k, ins_srtkenmerk sk - WHERE ikd.ins_deel_key = p_link_key - AND ikd.ins_kenmerkdeel_verwijder IS NULL - AND ikd.ins_kenmerk_key = p_kenmerk_key - AND ikd.ins_kenmerk_key = k.ins_kenmerk_key - AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key; + WHERE ikd.ins_deel_key = p_link_key + AND ikd.ins_kenmerkdeel_verwijder IS NULL + AND ikd.ins_kenmerk_key = p_kenmerk_key + AND ikd.ins_kenmerk_key = k.ins_kenmerk_key + AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key; END IF; END CASE; @@ -164,6 +167,299 @@ AS END; / +------------------------------- +--- DOMEIN-VIEWS -------------- +------------------------------- + +-- Voor keuzelijstjes (kenmerk domein) +CREATE OR REPLACE VIEW goko_v_personenlijst +( + PRS_PERSLID_KEY, + NAAM +) +AS + SELECT + p.prs_perslid_key, + p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam + naam + FROM + prs_perslid p, + prs_srtperslid sp, + prs_v_afdeling a, + prs_bedrijf b + WHERE + p.prs_afdeling_key = a.prs_afdeling_key + AND a.prs_bedrijf_key = b.prs_bedrijf_key + AND p.prs_srtperslid_key = sp.prs_srtperslid_key + AND b.prs_bedrijf_key = 21 -- bedrijfs_key GO Kinderopvang + AND UPPER(sp.prs_srtperslid_omschrijving) NOT IN ('TEAMACCOUNT','INTERNE AFDELING') -- Geen team-accounts en interne afdeling-accounts + AND p.prs_perslid_verwijder IS NULL + ORDER BY p.prs_perslid_naam + ; + +CREATE OR REPLACE VIEW goko_v_kostenplaatsen +( + PRS_KOSTENPLAATS_KEY, + NR, + OMSCHRIJVING +) +AS + SELECT + kp.prs_kostenplaats_key, + kp.prs_kostenplaats_nr, + kpg.prs_kostenplaatsgrp_oms || ' - ' || kp.prs_kostenplaats_nr || ' ' || kp.prs_kostenplaats_omschrijving + omschrijving + FROM + prs_kostenplaats kp, + prs_kostenplaatsgrp kpg + WHERE + kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key + AND kp.prs_kostenplaats_verwijder IS NULL + AND (kp.prs_kostenplaats_eind IS NULL OR kp.prs_kostenplaats_eind > TRUNC(SYSDATE) ) + AND kp.prs_kostenplaats_module = 'PRS' + ORDER BY kpg.prs_kostenplaatsgrp_oms || ' - ' || kp.prs_kostenplaats_nr || ' ' || kp.prs_kostenplaats_omschrijving + ; + +CREATE OR REPLACE VIEW goko_v_it_nummers +( + INS_DEEL_KEY, + INS_DEEL_UPPER +) +AS +SELECT + v.ins_deel_key, + v.ins_deel_upper +FROM ins_v_deel_gegevens v, ins_deel d +WHERE v.ins_discipline_key = 84 -- IT-Nummers + AND v.ins_deel_key = d.ins_deel_key + AND d.ins_deel_verwijder IS NULL + AND (d.ins_deel_vervaldatum IS NULL OR TRUNC(d.ins_deel_vervaldatum) > TRUNC(sysdate) ) ; + +CREATE OR REPLACE VIEW goko_v_it_nummers_man +( + ICT_NUMMER, + STATUS, + ICT_OBJECT, + NR_INS_DEEL_KEY +) +AS +SELECT +nr.ins_deel_upper, +CASE WHEN d.ins_deel_upper IS NOT NULL THEN 'Gekoppeld' ELSE 'Vrij' END + status, +d.ins_deel_upper, +nr.ins_deel_key +FROM (SELECT v.ins_deel_key, + v.ins_deel_upper + FROM ins_v_deel_gegevens v, ins_deel d + WHERE v.ins_discipline_key = 84 -- IT-Nummers + AND v.ins_deel_key = d.ins_deel_key + AND d.ins_deel_verwijder IS NULL + AND (d.ins_deel_vervaldatum IS NULL OR TRUNC(d.ins_deel_vervaldatum) > TRUNC(sysdate) ) ) nr, + (SELECT d.ins_deel_key, + d.ins_deel_upper, + kw.ins_kenmerkdeel_waarde, + num.ins_deel_upper as nummer_gekoppeld + FROM ins_deel d, + ins_kenmerkdeel kw, + ins_kenmerk k, + ins_deel num + WHERE d.ins_deel_key = kw.ins_deel_key + AND kw.ins_kenmerk_key = k.ins_kenmerk_key + AND k.ins_srtkenmerk_key = 22 -- kenmerksoort domeinview SIM-kaart + AND kw.ins_kenmerkdeel_verwijder IS NULL + AND fac.safe_to_number (kw.ins_kenmerkdeel_waarde) = + num.ins_deel_key) d +WHERE + nr.ins_deel_upper = d.nummer_gekoppeld(+) ; + + +-- Lijst van Locatieleiders (tbv domeinview) +CREATE OR REPLACE VIEW goko_v_personenlijst_leider +( + PRS_PERSLID_KEY, + NAAM, + PERSONEELSNUMMER, + EMAIL +) +AS + SELECT + p.prs_perslid_key, + CASE WHEN p.prs_perslid_tussenvoegsel IS NULL + THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')' + ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')' + END + naam, + p.prs_perslid_nr, + p.prs_perslid_email + FROM + prs_perslid p, + prs_srtperslid sp, + prs_v_afdeling a, + prs_bedrijf b + WHERE + p.prs_afdeling_key = a.prs_afdeling_key + AND a.prs_bedrijf_key = b.prs_bedrijf_key + AND b.prs_bedrijf_key = 21 -- bedrijfs_key GOKO + AND p.prs_srtperslid_key = sp.prs_srtperslid_key + AND UPPER(sp.prs_srtperslid_omschrijving) = 'LOCATIELEIDER' + AND p.prs_perslid_verwijder IS NULL + ORDER BY p.prs_perslid_naam + ; + +-- Lijst van Waarnemers (tbv domeinview) +CREATE OR REPLACE VIEW goko_v_personenlijst_waarn +( + PRS_PERSLID_KEY, + NAAM, + PERSONEELSNUMMER, + EMAIL +) +AS + SELECT + p.prs_perslid_key, + CASE WHEN p.prs_perslid_tussenvoegsel IS NULL + THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (Waarnemer - ' || sp.prs_srtperslid_omschrijving || ')' + ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (Waarnemer - ' || sp.prs_srtperslid_omschrijving || ')' + END + naam, + p.prs_perslid_nr, + p.prs_perslid_email + FROM + prs_perslid p, + prs_srtperslid sp, + prs_v_afdeling a, + prs_bedrijf b, + prs_kenmerklink kl + WHERE + p.prs_afdeling_key = a.prs_afdeling_key + AND a.prs_bedrijf_key = b.prs_bedrijf_key + AND p.prs_srtperslid_key = sp.prs_srtperslid_key + AND p.prs_perslid_key = kl.prs_link_key + AND kl.prs_kenmerk_key = 1009 -- kenmerk waarnemer (vinkbox) + AND kl.prs_kenmerklink_waarde = '1' AND kl.prs_kenmerklink_verwijder IS NULL + AND p.prs_perslid_verwijder IS NULL + ORDER BY p.prs_perslid_naam + ; + +-- Lijst van Locatieleiders/Waarnemers en de locaties waar men verantwoordelijk voor is (tbv Personen-import) +CREATE OR REPLACE VIEW goko_v_locatiemanagers +( + PRS_PERSLID_KEY, + ALG_LOCATIE_KEY, + LOCATIEMANAGER, + LOCATIE, + WAARNEMER, + 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 + locatiemanager, + l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving + locatie, + CASE WHEN ok.alg_kenmerk_key = 1003 THEN 'ja' ELSE 'nee' END + waarnemer, + p.prs_perslid_verwijder + FROM prs_perslid p, prs_srtperslid sp, alg_onrgoedkenmerk ok, alg_locatie l + WHERE fac.safe_to_number(ok.alg_onrgoedkenmerk_waarde) = p.prs_perslid_key + AND ok.alg_kenmerk_key IN (1002, 1003) -- locatieleider en waarnemer + AND ok.alg_onrgoedkenmerk_verwijder IS NULL + AND ok.alg_onrgoed_niveau = 'L' AND ok.alg_onrgoed_key = l.alg_locatie_key + AND (l.alg_locatie_verwijder IS NULL OR l.alg_locatie_vervaldatum > TRUNC(SYSDATE) ) + 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 + GROUP BY p.prs_perslid_key, l.alg_locatie_key, + p.prs_perslid_naam || ' (' || p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ') - ' || sp.prs_srtperslid_omschrijving, + l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving, + CASE WHEN ok.alg_kenmerk_key = 1003 THEN 'ja' ELSE 'nee' END, + p.prs_perslid_verwijder ; + +-- Lijst van Locatiemanagers + Regiomanagers en de Werkplekkoppeling die ze in hun personenkaart hebben +CREATE OR REPLACE VIEW goko_v_locatiemanagers_wp +( + PRS_PERSLID_KEY, + ALG_LOCATIE_KEY, + LOCATIEMANAGER, + LOCATIE_WP +) +AS + SELECT wp.prs_perslid_key, + onr.alg_locatie_key, + v.naam, + l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving + locatie + FROM goko_v_personenlijst_leider v, prs_perslidwerkplek wp, prs_werkplek w, alg_ruimte r, alg_v_onrgoed_boom onr, alg_locatie l + WHERE v.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 + ; + +-- Lijst van Locaties en de kostenplaaten die daaronder vallen (opvangsoorten die men aanbied) +CREATE OR REPLACE VIEW goko_v_locatie_kp +( + ALG_LOCATIE_KEY, + LOCATIE, + PRS_KOSTENPLAATS_KEY, + PRS_KOSTENPLAATS_NR, + PRS_KOSTENPLAATS_OMSCHRIJVING +) +AS + SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving + FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp + WHERE l.alg_locatie_key = kw.alg_onrgoed_key + AND kw.alg_onrgoed_niveau = 'L' + AND kw.alg_onrgoedkenmerk_verwijder IS NULL + AND kw.alg_kenmerk_key = 1010 -- kostenplaats KDV + AND l.alg_locatie_verwijder IS NULL + AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL ) + AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key + UNION + SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving + FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp + WHERE l.alg_locatie_key = kw.alg_onrgoed_key + AND kw.alg_onrgoed_niveau = 'L' + AND kw.alg_onrgoedkenmerk_verwijder IS NULL + AND kw.alg_kenmerk_key = 1012 -- kostenplaats BSO + AND l.alg_locatie_verwijder IS NULL + AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL ) + AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key + UNION + SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving + FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp + WHERE l.alg_locatie_key = kw.alg_onrgoed_key + AND kw.alg_onrgoed_niveau = 'L' + AND kw.alg_onrgoedkenmerk_verwijder IS NULL + AND kw.alg_kenmerk_key = 1014 -- kostenplaats PSZ + AND l.alg_locatie_verwijder IS NULL + AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL ) + AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key + UNION + SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving + FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp + WHERE l.alg_locatie_key = kw.alg_onrgoed_key + AND kw.alg_onrgoed_niveau = 'L' + AND kw.alg_onrgoedkenmerk_verwijder IS NULL + AND kw.alg_kenmerk_key = 1017 -- kostenplaats TSO + AND l.alg_locatie_verwijder IS NULL + AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL ) + AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key + UNION + SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving + FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp + WHERE l.alg_locatie_key = kw.alg_onrgoed_key + AND kw.alg_onrgoed_niveau = 'L' + AND kw.alg_onrgoedkenmerk_verwijder IS NULL + AND kw.alg_kenmerk_key = 1016 -- 2e kostenplaats PSZ + AND l.alg_locatie_verwijder IS NULL + AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL ) + AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key ; + CREATE OR REPLACE PROCEDURE goko_import_perslid (p_import_key IN NUMBER) AS @@ -175,7 +471,11 @@ AS -- overige variabelen v_prs_afdeling_key NUMBER(10); - c_prs_afdeling_key NUMBER(10) := 62 ; -- Fallback-afdeling 'ONBEKEND_GOKO' + c_prs_afdeling_key NUMBER(10) := 22 ; -- Fallback-afdeling 'OVERIG' + c_prs_afdeling_key_leid NUMBER(10) := 21 ; -- Afdeling OPVANG bestemd voor de Locatieleiders + v_prs_kostenplaats_key NUMBER(10); + v_prs_afdeling_upper VARCHAR2(10); + v_alg_locatie_key NUMBER(10); v_alg_locatie_code VARCHAR2(10); v_alg_gebouw_key NUMBER(10); @@ -186,15 +486,33 @@ AS v_alg_ruimte_nr VARCHAR2(20); +CURSOR c_email +IS + SELECT fac_imp_file_index, p.prs_perslid_key, p.prs_perslid_email + FROM fac_imp_perslid i, prs_perslid p + WHERE fac_import_key = p_import_key + AND i.prs_perslid_nr = p.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL + AND p.prs_perslid_email IS NOT NULL +ORDER BY 1 ; + +CURSOR c_login +IS + SELECT fac_imp_file_index, p.prs_perslid_key, p.prs_perslid_oslogin + FROM fac_imp_perslid i, prs_perslid p + WHERE fac_import_key = p_import_key + AND i.prs_perslid_nr = p.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL + AND p.prs_perslid_oslogin IS NOT NULL +ORDER BY 1 ; + CURSOR c_afd IS - SELECT fac_imp_file_index, prs_kenmerk1, prs_afdeling_naam + SELECT fac_imp_file_index, prs_afdeling_naam, prs_kenmerk5, prs_srtperslid_omschrijving FROM fac_imp_perslid WHERE fac_import_key = p_import_key ; CURSOR c_loc IS - SELECT fac_imp_file_index, prs_kenmerk4 + SELECT fac_imp_file_index, prs_kenmerk5 FROM fac_imp_perslid WHERE fac_import_key = p_import_key ; @@ -202,33 +520,80 @@ IS BEGIN -- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ; 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; + -- UPDATE fac_imp_file + -- SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';') + -- WHERE fac_import_key = p_import_key; -- Het aangeleverde bestand heeft aanhalingstekens om de invoervelden.. - UPDATE fac_imp_file - SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '') - WHERE fac_import_key = p_import_key; + -- UPDATE fac_imp_file + -- SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '') + -- WHERE fac_import_key = p_import_key; v_errorhint := 'Generieke update'; -- De sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure - -- Voor GOKO geldt: + -- Voor GOKO geldt: functie eerst met regio vullen en daarna goed zetten... --- prs.import_perslid ( p_import_key, - '0;0;0;0;0;0;1;1;0;3;' - || '0;0;0;0;0;0;0;5;0;9;' - || '1;0;0;0;0;0;7;4;6;8;' - || '2;0;0;0;0;0;0;0;0;0;' + '0;0;0;0;0;0;5;8;7;6;' + || '0;0;0;0;0;0;0;0;0;5;' + || '5;0;0;0;0;0;9;1;2;3;' + || '4;10;11;0;0;0;0;0;0;0;' || '0;0;0;0;0;0', - 'Country;UserPrincipalName;GivenName;Surname;Mail;JobTitle;Department;PhysicalDeliveryOfficeName;EmployeeId%'); - -- Country;UserPrincipalName;GivenName;Surname;Mail;JobTitle;Department;PhysicalDeliveryOfficeName;EmployeeId - -- DEF. BESTAND bij GOKO : "Country","UserPrincipalName","GivenName","Surname","Mail","JobTitle","Department","PhysicalDeliveryOfficeName","EmployeeId" + 'Regio;Locatie;Inzet werksoort;Kostenplaats loonverd.;Persoonsnr.;Roepnaam;Voorvoeg.;Persoonsnaam;Oms functie;Uitdienst dat.;Email werk%'); + -- 1 2 3 4 5 6 7 8 9 10 11 + -- DEF. BESTAND BIJ GOKO: Regio;Locatie;Inzet werksoort;Kostenplaats loonverd.;Persoonsnr.;Roepnaam;Voorvoeg.;Persoonsnaam;Oms functie;Uitdienst dat.;Email werk - v_errorhint := 'Login afleiden van emailadres'; - -- Loginnaam afleiden van emailadres + v_errorhint := 'Functie goed vullen'; + -- Functie is niet altijd gevuld, eerst gevuld met Persoonsnr, nu vullen met kenmerk1 (of 'Onbekend'). + UPDATE fac_imp_perslid + SET prs_srtperslid_omschrijving = + DECODE (prs_kenmerk1, NULL, 'Onbekend', prs_kenmerk1); + + v_errorhint := 'Uit dienst datum goed vullen'; + -- + UPDATE fac_imp_perslid + SET prs_kenmerk6 = DECODE (fac.safe_to_date(prs_kenmerk6,'dd-mm-yyyy'), NULL, NULL, fac.safe_to_date(prs_kenmerk6,'dd-mm-yyyy')) WHERE prs_kenmerk6 IS NOT NULL; + + v_errorhint := 'Bestaande EMAIL uit Facilitor handhaven'; + -- Facilitor is leading qua emailadressen. + FOR rec IN c_email + LOOP + BEGIN + + UPDATE fac_imp_perslid + SET prs_perslid_email = rec.prs_perslid_email + WHERE fac_imp_file_index = rec.fac_imp_file_index ; + + END; + + END LOOP; + + v_errorhint := 'Emailadres Go-Kinderopvang vullen'; + -- De prive-adressen die uit Beaufort meekomen verwijderen - alleen de zakelijke emailadressen nemen we over naar kenmerkveld Email (werk) + + UPDATE fac_imp_perslid + SET prs_kenmerk7 = NULL + WHERE prs_kenmerk7 IS NOT NULL AND INSTR(UPPER(prs_kenmerk7),'@GO-KINDEROPVANG.NL')=0 ; + + + FOR rec IN c_login + LOOP + BEGIN + + v_errorhint := 'Bestaande OSLOGIN uit Facilitor handhaven'; + + UPDATE fac_imp_perslid + SET prs_perslid_oslogin = rec.prs_perslid_oslogin + WHERE fac_imp_file_index = rec.fac_imp_file_index ; + + END; + + END LOOP; + + v_errorhint := 'Login afleiden van emailadres (voor locatieleiders)'; + -- Voor de locatieleiders de oslogin vullen in geval nog niet gevuld in Facilitor (vanuit vorige cursor) UPDATE fac_imp_perslid SET prs_perslid_oslogin = UPPER((SUBSTR (prs_perslid_email, @@ -237,82 +602,106 @@ BEGIN WHERE UPPER (prs_perslid_email) LIKE '%GO-KINDEROPVANG.NL' AND prs_perslid_email IS NOT NULL + AND UPPER(prs_srtperslid_omschrijving) = 'LOCATIELEIDER' + AND prs_perslid_oslogin IS NULL AND LENGTH((SUBSTR (prs_perslid_email, 0, INSTR (prs_perslid_email, '@') - 1))) <=30 ; - v_errorhint := 'Delete record op basis klantregels'; - -- Delete uit AD GO-KINDEROPVANG - Opschoning NODIG ?? - /*DELETE fac_imp_perslid - WHERE UPPER (prs_kenmerk3) IN ('GEDEELD POSTVAK','GENERIEK ACCOUNT', 'OC', 'RVT', 'RESOURCES') OR prs_kenmerk3 IS NULL; - - DELETE fac_imp_perslid - WHERE UPPER (prs_kenmerk5) NOT LIKE '%SINNEKINDEROPVANG.NL'; - */ - - v_errorhint := 'Functie goed vullen'; - -- Functie is niet altijd gevuld, eerst gevuld met Gebruikerslocatie, nu vullen met kenmerk3 (of 'Onbekend'). - UPDATE fac_imp_perslid - SET prs_srtperslid_omschrijving = - DECODE (prs_kenmerk3, NULL, 'Onbekend', prs_kenmerk3); - - v_errorhint := 'Naam goed vullen'; - -- Naam is niet altijd gevuld, eerst gevuld met Gebruikerslocatie, nu vullen met kenmerk2 (of 'Algemeen'). - UPDATE fac_imp_perslid - SET prs_perslid_naam = - DECODE (prs_kenmerk2, NULL, 'Algemeen', prs_kenmerk2); - v_errorhint := 'Afdeling bepalen en vullen'; - -- Afdeling bepalen waar persoon onder komt te vallen + -- Afdeling bepalen waar persoon onder komt te vallen. LET OP - Deze is voor GOKO niet altijd gevuld!? Oplossen door eerst te vullen met PERSONEELSNR en in Kenmerk5 de kostenplaats/afdeling + -- Voor locatieleiders geldt dat deze altijd op organisatie 'OPVANG' moeten komen (onder dit organisatieonderdeel zitten op niveau 2 de team/afdelingen/kostenplaatsen) FOR rec IN c_afd LOOP BEGIN v_errorhint := 'Persoon aan Afdeling koppelen'; - SELECT min(prs_afdeling_key) - INTO v_prs_afdeling_key - FROM prs_v_afdeling - WHERE UPPER(prs_afdeling_naam) = UPPER(rec.prs_kenmerk1) - AND prs_bedrijf_key = 21 -- bedrijf GOKO - !!!!!!!! - AND prs_afdeling_verwijder IS NULL ; - - IF v_prs_afdeling_key IS NOT NULL THEN - - UPDATE fac_imp_perslid - SET prs_afdeling_naam = (SELECT prs_afdeling_upper FROM prs_afdeling WHERE prs_afdeling_key = v_prs_afdeling_key) - WHERE fac_imp_file_index = rec.fac_imp_file_index ; - - ELSE + -- Als locatieleider dan afdeling altijd OPVANG (c_prs_afdeling_key_leid) + IF UPPER(rec.prs_srtperslid_omschrijving) = 'LOCATIELEIDER' + THEN UPDATE fac_imp_perslid - SET prs_afdeling_naam = (SELECT prs_afdeling_upper FROM prs_afdeling WHERE prs_afdeling_key = c_prs_afdeling_key) + SET prs_afdeling_naam = (SELECT prs_afdeling_upper FROM prs_afdeling WHERE prs_afdeling_key = c_prs_afdeling_key_leid) WHERE fac_imp_file_index = rec.fac_imp_file_index ; + ELSE + IF rec.prs_kenmerk5 IS NULL + THEN + + v_prs_afdeling_key := NULL ; + + ELSE + SELECT min(prs_afdeling_key) + INTO v_prs_afdeling_key + FROM prs_v_afdeling + WHERE prs_afdeling_upper = UPPER(rec.prs_kenmerk5) + AND prs_bedrijf_key = 21 -- bedrijf GOKO + AND prs_afdeling_verwijder IS NULL ; + + END IF; + + -- Als afdeling uit beaufort (nog) niet bekend is in Facilitor dan op afdeling OVERIG zetten (c_prs_afdeling_key) + IF v_prs_afdeling_key IS NULL THEN + + UPDATE fac_imp_perslid + SET prs_afdeling_naam = (SELECT prs_afdeling_upper FROM prs_afdeling WHERE prs_afdeling_key = c_prs_afdeling_key) + WHERE fac_imp_file_index = rec.fac_imp_file_index ; + + ELSE + + UPDATE fac_imp_perslid + SET prs_afdeling_naam = rec.prs_kenmerk5 + WHERE fac_imp_file_index = rec.fac_imp_file_index ; + + END IF; + END IF; END; END LOOP; v_errorhint := 'Locatie bepalen en vullen'; - -- Default Locatie / Standplaats bepalen voor persoon + -- Op basis van kostenplaats gaan we kijken of we de locatie en werkplekkoppeling kunnen maken FOR rec IN c_loc LOOP BEGIN - v_errorhint := 'Persoon aan Locatie-Ruimte koppelen'; + v_errorhint := 'Persoon aan Locatie-Ruimte koppelen adhv de kostenplaats - ' || TO_CHAR(rec.fac_imp_file_index) ; v_alg_locatie_key := NULL; + v_prs_kostenplaats_key := NULL; + v_prs_afdeling_upper := NULL; v_alg_gebouw_key := NULL; v_alg_verdieping_key := NULL; v_alg_ruimte_key := NULL; - SELECT min(alg_locatie_key) - INTO v_alg_locatie_key - FROM alg_locatie - WHERE UPPER(alg_locatie_omschrijving) = UPPER(rec.prs_kenmerk4) - AND (TRUNC(alg_locatie_vervaldatum) > TRUNC(sysdate) OR alg_locatie_vervaldatum IS NULL ) - AND alg_locatie_verwijder IS NULL ; + IF rec.prs_kenmerk5 IS NULL + THEN + + UPDATE fac_imp_perslid + SET prs_kenmerk20 = 'Geen werkplekkoppeling' + WHERE fac_imp_file_index = rec.fac_imp_file_index ; + ELSE + + SELECT MAX(l.alg_locatie_key), MAX(kp.prs_kostenplaats_key) + INTO v_alg_locatie_key, v_prs_kostenplaats_key + FROM alg_locatie l, + alg_onrgoedkenmerk kk, + alg_kenmerk k, + prs_kostenplaats kp, + prs_afdeling a + WHERE l.alg_locatie_key = kk.alg_onrgoed_key + AND kk.alg_onrgoed_niveau = 'L' + AND kk.alg_kenmerk_key = k.alg_kenmerk_key + AND k.alg_kenmerk_key IN (1010, 1012, 1014, 1016, 1017) -- kenmerk_keys voor de kostenplaatsen KDV, BSO, PSZ, TSO en PSZ-2e + AND fac.safe_to_number (kk.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key + AND kp.prs_kostenplaats_key = a.prs_kostenplaats_key + AND kp.prs_kostenplaats_verwijder IS NULL AND a.prs_afdeling_verwijder IS NULL + AND kp.prs_kostenplaats_upper = UPPER(rec.prs_kenmerk5) ; + + END IF; + IF v_alg_locatie_key IS NOT NULL THEN -- Locatie_code ophalen @@ -329,9 +718,9 @@ BEGIN AND alg_gebouw_verwijder IS NULL AND (TRUNC(alg_gebouw_vervaldatum) > TRUNC(sysdate) OR alg_gebouw_vervaldatum IS NULL ) ; - -- Om bij update dit kenmerkveld weg te kunnen schrijven naar kenmerkveld 'default standplaats' + -- Om bij update dit kenmerkveld weg te kunnen schrijven naar kenmerkveld 'Default standplaats' UPDATE fac_imp_perslid - SET prs_kenmerk6 = (SELECT UPPER(alg_locatie_code) || alg_locatie_omschrijving FROM alg_locatie WHERE alg_locatie_key = v_alg_locatie_key) + SET prs_kenmerk20 = (SELECT UPPER(alg_locatie_code) || ' - ' || alg_locatie_omschrijving FROM alg_locatie WHERE alg_locatie_key = v_alg_locatie_key) WHERE fac_imp_file_index = rec.fac_imp_file_index ; IF v_alg_gebouw_key IS NOT NULL THEN @@ -390,7 +779,7 @@ BEGIN -- Geen Locatie/Vastgoedketen kunnen vinden UPDATE fac_imp_perslid - SET prs_kenmerk6 = 'LOCATIE ONBEKEND' + SET prs_kenmerk20 = 'Geen werkplekkoppeling' WHERE fac_imp_file_index = rec.fac_imp_file_index ; END IF; @@ -417,29 +806,108 @@ CREATE OR REPLACE PROCEDURE goko_update_perslid (p_import_key IN NUMBER) IS -- Alle personen verwijderen die niet meer in het import bestand voorkomen -- Personen in de juiste autorisatiegroep zetten. - -- Match bij SINNE KINDEROPVANG is Email. - -- Geen acties tenzij het aantal records in de importtabel meer dan 50 medewerkers betreft. + -- Match bij GO KINDEROPVANG is Personeelsnummer. + -- Geen acties tenzij het aantal records in de importtabel meer dan 100 medewerkers betreft. CURSOR c_del IS - SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full - FROM prs_perslid p, prs_v_perslid_fullnames pf - WHERE UPPER (p.prs_perslid_email) LIKE '%GO-KINDEROPVANG.NL' - AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid WHERE INSTR(UPPER (p.prs_perslid_email),UPPER (prs_perslid_email) ) > 0 ) - AND pf.prs_perslid_key = p.prs_perslid_key ; - + SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving + FROM prs_perslid p, prs_srtperslid sp, prs_v_afdeling_boom a + WHERE p.prs_perslid_verwijder IS NULL + AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = 21 -- GO Kinderopvang + AND p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_upper NOT IN ('TEAMACCOUNT','INTERNE AFDELING') + AND p.prs_perslid_key NOT IN (SELECT prs_perslid_key FROM goko_v_personenlijst_waarn) -- Tijdelijke waarnemers worden niet door import verwijderd. Regelt men handmatig + AND NOT EXISTS (SELECT 1 + FROM fac_imp_perslid + WHERE p.prs_perslid_nr = prs_perslid_nr + ) + ORDER BY 1 ; + CURSOR c_flex -- Voor updaten van de algemene flex-kenmerkvelden op actuele medewerkers IS - SELECT p.prs_perslid_key, i.prs_kenmerk4 + SELECT p.prs_perslid_key, i.prs_kenmerk2, i.prs_kenmerk3, i.prs_kenmerk4, i.prs_kenmerk5, i.prs_kenmerk6, i.prs_kenmerk7, i.prs_kenmerk20 FROM prs_v_aanwezigperslid p, fac_imp_perslid i WHERE p.prs_perslid_key = i.prs_perslid_key - ORDER BY 1; + ORDER BY 1; + + CURSOR c_loc -- Voor updaten van locatieleiders (in eigen autorisatiegroep + profiel toevoegen) + IS + SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving + FROM prs_perslid p, prs_srtperslid sp, prs_v_afdeling_boom a + WHERE UPPER (p.prs_perslid_email) LIKE '%GO-KINDEROPVANG.NL' + AND p.prs_perslid_verwijder IS NULL + AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = 21 -- GO Kinderopvang + AND p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_upper = 'LOCATIELEIDER' + AND p.prs_perslid_oslogin IS NOT NULL + ORDER BY 1 ; + + CURSOR c_loc_wp -- Voor updaten van locatieleiders (werkplek-koppelingen) + IS + SELECT v.prs_perslid_key, v.alg_locatie_key, v.actie + FROM + ( + SELECT man.prs_perslid_key, man.alg_locatie_key, 'toevoegen' actie + FROM goko_v_locatiemanagers man + WHERE NOT EXISTS + (SELECT * + FROM goko_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, 'verwijderen' actie + FROM goko_v_locatiemanagers_wp wp + WHERE NOT EXISTS + (SELECT * + FROM goko_v_locatiemanagers 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, 'ok' actie + FROM goko_v_locatiemanagers_wp wp, goko_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 ; + + CURSOR c_loc_kp -- Voor updaten van locatieleiders (budgethouder kostenplaatsen en mandaten op kostenplaatsen) + IS + SELECT v_prs.prs_perslid_key, + v_prs.alg_locatie_key, + v_kp.prs_kostenplaats_key, + v_prs.waarnemer + FROM goko_v_locatiemanagers v_prs, goko_v_locatie_kp v_kp + WHERE v_prs.alg_locatie_key = v_kp.alg_locatie_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_perslidkostenplaats_key + FROM prs_perslidkostenplaats pk + WHERE NOT EXISTS (SELECT v_prs.prs_perslid_key, v_kp.prs_kostenplaats_key + FROM goko_v_locatiemanagers v_prs, goko_v_locatie_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 goko_v_locatiemanagers + GROUP BY prs_perslid_key) ; + v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (400); v_errorhint VARCHAR2 (400); + + v_fac_gebruikersgroep_key NUMBER(10); + v_alg_ruimte_key NUMBER; + v_prs_werkplek_key NUMBER; + v_waarnemer_overrule VARCHAR2 (12); + v_prs_perslid_key NUMBER(10); -- budgethouder op kp + v_prs_perslidkostenplaats_key NUMBER(10) ; + v_fac_profiel_key NUMBER(10); + BEGIN v_errorhint := 'Niet genoeg personen in bestand, import afgebroken'; @@ -455,9 +923,12 @@ BEGIN COMMIT; -- generic update - -- 'EMAIL' betekent dat op basis van Email wordt gematched. + -- 'EMAIL' betekent dat op basis van Email wordt gematched. 'NR' op basis van personeelsnummer. -- 'NULL' betekent altijd geen werkplekken verwijderen - prs.update_perslid (p_import_key, 'EMAIL', NULL); + -- Voor GOKO / Beaufort geldt: + ---- Op NR gaan matchen. + ---- Werkplekkoppeling – WEL/NIET standaard verwijderen – HOE/WAT beste in te regelen? UITZOEKEN/TESTEN (denk verwijderen beste is….? OF alleen maar voor die personen die nu andere WERKPLEK_LOCATIE_KEY hebben ?) + prs.update_perslid (p_import_key, 'NR', NULL); v_errorhint := 'Verwijderen persoonsgegevens'; @@ -472,10 +943,219 @@ BEGIN FOR rec IN c_flex LOOP BEGIN - v_errorhint:='Fout bijwerken kenmerkveld4 - Standplaats'; - PRS.upsertkenmerk (1020, rec.prs_perslid_key, rec.prs_kenmerk4); -- IN PRODUCTIE KEY = 1020 + v_errorhint:='Fout bijwerken kenmerkveld Regio'; + PRS.upsertkenmerk (1001, rec.prs_perslid_key, rec.prs_kenmerk2); + v_errorhint:='Fout bijwerken kenmerkveld Locatie'; + PRS.upsertkenmerk (1002, rec.prs_perslid_key, rec.prs_kenmerk3); + v_errorhint:='Fout bijwerken kenmerkveld Inzet locatie'; + PRS.upsertkenmerk (1003, rec.prs_perslid_key, rec.prs_kenmerk4); + v_errorhint:='Fout bijwerken kenmerkveld Kostenplaats'; + PRS.upsertkenmerk (1004, rec.prs_perslid_key, rec.prs_kenmerk5); + v_errorhint:='Fout bijwerken kenmerkveld Datum uit dienst'; + PRS.upsertkenmerk (1005, rec.prs_perslid_key, rec.prs_kenmerk6); + v_errorhint:='Fout bijwerken kenmerkveld Standplaats Facilitor'; + PRS.upsertkenmerk (1006, rec.prs_perslid_key, rec.prs_kenmerk20); + v_errorhint:='Fout bijwerken kenmerkveld Email (werk)'; + PRS.upsertkenmerk (1007, rec.prs_perslid_key, rec.prs_kenmerk7); + END; END LOOP; + + FOR rec IN c_loc + LOOP + BEGIN + -- Alle locatieleiders toevoegen aan autorisatiegroep 'Locatieleiders' + v_errorhint:='Fout bijwerken locatieleiders in eigen autorisatiegroep'; + + BEGIN + + SELECT fac_gebruikersgroep_key + INTO v_fac_gebruikersgroep_key + FROM fac_gebruikersgroep + WHERE fac_groep_key = 21 -- Groep 'Locatieleiders en Waarnemers' + AND prs_perslid_key = rec.prs_perslid_key ; + EXCEPTION + WHEN NO_DATA_FOUND + THEN + + INSERT INTO fac_gebruikersgroep (fac_groep_key, + prs_perslid_key) + VALUES (21, rec.prs_perslid_key); + + END; + + -- Alle locatieleiders juiste profiel meegeven + v_errorhint:='Fout bijwerken profiel locatieleiders'; + + SELECT fac_profiel_key + INTO v_fac_profiel_key + FROM prs_perslid + WHERE prs_perslid_key = rec.prs_perslid_key ; + + IF v_fac_profiel_key IS NULL + THEN + + UPDATE prs_perslid + SET fac_profiel_key = 1 + WHERE prs_perslid_key = rec.prs_perslid_key ; + + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Profiel: (leeg) --> Locatieleider-profiel (<5000)'); END; + END IF; + + END; + END LOOP; + + FOR rec IN c_loc_wp + LOOP + BEGIN + -- Werkplekkoppelingen op basis van de locaties waar men locatieleider van is + v_errorhint:='Fout bijwerken werkplekkoppelingen locatieleider'; + + IF rec.actie = 'toevoegen' + THEN + v_errorhint:='Fout bij toevoegen werkplekken voor Locatieleider - perslid_key:' || TO_CHAR(rec.prs_perslid_key) || ' , 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:='Fout bij verwijderen werkplekken'; + + SELECT prs_werkplek_key + INTO v_prs_werkplek_key + FROM prs_v_perslidwerkplek_gegevens pwpg, alg_locatie l + WHERE pwpg.alg_locatie_key = l.alg_locatie_key + AND l.alg_locatie_key = rec.alg_locatie_key + AND pwpg.prs_perslid_key = rec.prs_perslid_key ; + + DELETE prs_werkplek WHERE prs_werkplek_key = v_prs_werkplek_key; + + END IF; + + END; + END LOOP; + + FOR rec IN c_loc_kp + LOOP + BEGIN + + -- kostenplaatsen waar men verantwoordelijk voor is - Budgethouder en Mandaten + v_errorhint:='Fout bijwerken kostenplaatsen en mandaten waar men verantwoordelijk voor is'; + v_waarnemer_overrule := 'nee' ; + + -- Eerst budgethouder op kostenplaatsen updaten waar nodig + ---- Indien het geen waarnemer betreft gaan we eerst checken of er een bovenliggende waarnemer op die locatie is. Deze wordt/is dan namelijk de budgethouder voor die kostenplaats + + IF rec.waarnemer = 'nee' + THEN + + BEGIN + -- Is er op die locatie een waarnemer (die afwijkt van locatieleider) ingevuld? + SELECT waarnemer + INTO v_waarnemer_overrule + FROM goko_v_locatiemanagers + WHERE alg_locatie_key = rec.alg_locatie_key + AND waarnemer = 'ja' + AND prs_perslid_key <> rec.prs_perslid_key ; + EXCEPTION + WHEN NO_DATA_FOUND + THEN v_waarnemer_overrule := 'nee' ; + + END; + + END IF; + + -- Dan kunnen we nu de budgethouder op kostenplaats updaten indien nodig + IF v_waarnemer_overrule = 'nee' + 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 + + 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; + + -- Tot slot 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 + + 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_errorhint:='Fout verwijderen mandaten die niet meer geldig zijn'; + + DELETE + FROM prs_perslidkostenplaats + WHERE prs_perslidkostenplaats_key = rec.prs_perslidkostenplaats_key ; + + END; + END LOOP; + ELSE fac.imp_writelog (p_import_key, @@ -499,61 +1179,448 @@ EXCEPTION END goko_update_perslid; / -------------------------------- ---- DOMEIN-VIEWS -------------- -------------------------------- +-- Hook functie die na het saven (bes_postsave) van een bestelling wordt aangeroepen. +CREATE OR REPLACE PROCEDURE goko_bes_after_insert (p_key IN NUMBER) + AS + v_bes_bestelling_key NUMBER(10) ; + v_korting_percentage NUMBER(10,2) ; + v_inkoopprijs_totaal NUMBER(10,2) ; + v_check VARCHAR2(100) := 'ok' ; + v_ins_discipline_key NUMBER(10) ; + v_bes_kenmerk_key1 NUMBER(10) ; -- kenmerk_key voor totaalbedrag bestelling + v_waarde1 VARCHAR2(100) ; -- oorspronkelijke waarde van totaalbedrag in bestelling + v_bes_kenmerk_key2 NUMBER(10) ; -- kenmerk_key voor totaalbedrag korting + v_waarde2 VARCHAR2(100) ; -- oorspronkelijke waarde van totaalbedrag korting in bestelling + v_korting_totaal NUMBER(10,2) ; + v_gewijzigd NUMBER(1) := 0 ; + v_count NUMBER(10) ; --- Voor keuzelijstjes (kenmerk domein) -CREATE OR REPLACE VIEW goko_v_personenlijst -( - KEY, - NAAM, - PERSONEELSNUMMER -) -AS - SELECT - p.prs_perslid_key, - p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam - naam, - p.prs_perslid_nr - FROM - prs_perslid p, - prs_v_afdeling a, - prs_bedrijf b - WHERE - p.prs_afdeling_key = a.prs_afdeling_key - AND a.prs_bedrijf_key = b.prs_bedrijf_key - AND b.prs_bedrijf_key = 21 -- bedrijfs_key GO-Kinderopvang - -- AND p.prs_perslid_voornaam !='TEAM' -- Voor team-accounts - ORDER BY p.prs_perslid_naam - ; + v_errormsg VARCHAR2 (1000); + v_aanduiding VARCHAR2 (1000); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + + + BEGIN + + v_errormsg := 'Ophalen bestelgegevens ivm totaalprijs en kortingspercentage'; + v_gewijzigd := 0 ; -CREATE OR REPLACE VIEW goko_v_kostenplaatsen -( - KEY, - OMSCHRIJVING -) -AS - SELECT - kp.prs_kostenplaats_key, - kpg.prs_kostenplaatsgrp_oms || ' - ' || kp.prs_kostenplaats_nr || ' ' || kp.prs_kostenplaats_omschrijving - omschrijving - FROM - prs_kostenplaats kp, - prs_kostenplaatsgrp kpg - WHERE - kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key - AND kp.prs_kostenplaats_verwijder IS NULL - AND (kp.prs_kostenplaats_eind IS NULL OR kp.prs_kostenplaats_eind > TRUNC(SYSDATE) ) - AND kp.prs_kostenplaats_module = 'ALG' - ORDER BY kpg.prs_kostenplaatsgrp_oms || ' - ' || kp.prs_kostenplaats_nr || ' ' || kp.prs_kostenplaats_omschrijving - ; + BEGIN + SELECT b.bes_bestelling_key, fac.safe_to_number(kmb.bes_kenmerkbestell_waarde) km_kortingspercentage, v.km_totaalprijs km_totaalprijs + INTO v_bes_bestelling_key, v_korting_percentage, v_inkoopprijs_totaal + FROM bes_bestelling b, + bes_kenmerkbestell kmb, + bes_kenmerk km, + ( + SELECT bi.bes_bestelling_key, + SUM (COALESCE (bi.bes_bestelling_item_aantal * fac.safe_to_number(replace(kmi.bes_kenmerkbesteli_waarde,',','.')), 0)) + km_totaalprijs + FROM bes_kenmerkbesteli kmi, bes_kenmerk km, bes_bestelling_item bi + WHERE bi.bes_bestelling_item_key = kmi.bes_bestelling_item_key + AND kmi.bes_kenmerk_key = km.bes_kenmerk_key + AND km.bes_srtkenmerk_key = 81 -- Artikelprijs + GROUP BY bi.bes_bestelling_key ) v + WHERE b.bes_bestelling_key = p_key + AND b.bes_bestelling_key = kmb.bes_bestelling_key + AND kmb.bes_kenmerk_key = km.bes_kenmerk_key AND km.bes_srtkenmerk_key = 43 -- Leverancierskorting + AND v.bes_bestelling_key = b.bes_bestelling_key + ; + EXCEPTION + WHEN NO_DATA_FOUND + THEN + v_check := 'stop'; + END; + + v_errormsg := 'Ophalen kenmerk_key voor totaalprijs'; + + IF v_check = 'ok' + THEN + + -- ophalen kenmerk_key 'totaalbedrag bestelling' + -- ophalen kenmerk_key kortingsbedrag + SELECT d.ins_discipline_key + INTO v_ins_discipline_key + FROM bes_bestelling_item bi, + bes_srtdeel sd, + bes_srtgroep sg, + ins_tab_discipline d + WHERE bi.bes_bestelling_key = p_key + AND bi.bes_srtdeel_key = sd.bes_srtdeel_key + AND sd.bes_srtgroep_key = sg.bes_srtgroep_key + AND sg.ins_discipline_key = d.ins_discipline_key + GROUP BY d.ins_discipline_key ; + + SELECT MAX(bes_kenmerk_key) + INTO v_bes_kenmerk_key1 + FROM bes_kenmerk km, bes_srtkenmerk skm + WHERE km.bes_srtkenmerk_key = skm.bes_srtkenmerk_key + AND skm.bes_srtkenmerk_key = 44 -- totaalbedrag bestelling + AND km.bes_srtinstallatie_key = v_ins_discipline_key + AND km.bes_kenmerk_niveau = 'D' + AND km.bes_kenmerk_verwijder IS NULL ; + + SELECT MAX(bes_kenmerk_key) + INTO v_bes_kenmerk_key2 + FROM bes_kenmerk km, bes_srtkenmerk skm + WHERE km.bes_srtkenmerk_key = skm.bes_srtkenmerk_key + AND skm.bes_srtkenmerk_key = 47 -- totaalbedrag korting + AND km.bes_srtinstallatie_key = v_ins_discipline_key + AND km.bes_kenmerk_niveau = 'D' + AND km.bes_kenmerk_verwijder IS NULL ; + + -- Vullen kenmerk 'totaalbedrag bestelling' + IF v_bes_kenmerk_key1 IS NOT NULL + THEN + -- Dan gaan we het kenmerk upserten ! ER IS GEEN bes.upsertbestellingkenmerk beschikbaar.. + BEGIN + + SELECT COUNT ( * ), MIN (bes_kenmerkbestell_waarde) + INTO v_count, v_waarde1 + FROM bes_kenmerkbestell + WHERE bes_bestelling_key = p_key + AND bes_kenmerk_key = v_bes_kenmerk_key1 + AND bes_kenmerkbestell_verwijder IS NULL; + + IF v_count = 1 + THEN + + IF v_inkoopprijs_totaal IS NULL + THEN + + DELETE bes_kenmerkbestell + WHERE bes_bestelling_key = p_key + AND bes_kenmerk_key = v_bes_kenmerk_key1 + AND bes_kenmerkbestell_verwijder IS NULL; + v_gewijzigd := 1 ; + + ELSE + + IF (fac.safe_to_number(v_waarde1) <> v_inkoopprijs_totaal) + THEN + + UPDATE bes_kenmerkbestell + SET bes_kenmerkbestell_waarde = v_inkoopprijs_totaal + WHERE bes_bestelling_key = p_key + AND bes_kenmerk_key = v_bes_kenmerk_key1 + AND bes_kenmerkbestell_verwijder IS NULL; + v_gewijzigd := 1 ; + + END IF; + END IF; + ELSE + IF v_bes_kenmerk_key1 IS NOT NULL AND v_inkoopprijs_totaal IS NOT NULL + THEN + INSERT INTO bes_kenmerkbestell (bes_kenmerk_key, + bes_bestelling_key, + bes_kenmerkbestell_waarde) + VALUES (v_bes_kenmerk_key1, p_key, v_inkoopprijs_totaal); + v_gewijzigd := 1 ; + END IF; + END IF; + END; + + END IF; + + -- Vullen kenmerk 'totaalbedrag korting' + IF v_bes_kenmerk_key2 IS NOT NULL + THEN + -- Dan gaan we het kenmerk upserten ! ER IS GEEN bes.upsertbestellingkenmerk beschikbaar.. + BEGIN + v_korting_totaal := COALESCE(v_korting_percentage, 0)/100 * COALESCE(v_inkoopprijs_totaal, 0) ; + + SELECT COUNT ( * ), MIN (bes_kenmerkbestell_waarde) + INTO v_count, v_waarde2 + FROM bes_kenmerkbestell + WHERE bes_bestelling_key = p_key + AND bes_kenmerk_key = v_bes_kenmerk_key2 + AND bes_kenmerkbestell_verwijder IS NULL; + + IF v_count = 1 + THEN + + IF v_korting_percentage IS NULL OR v_korting_percentage = 0 + THEN + + DELETE bes_kenmerkbestell + WHERE bes_bestelling_key = p_key + AND bes_kenmerk_key = v_bes_kenmerk_key2 + AND bes_kenmerkbestell_verwijder IS NULL; + v_gewijzigd := 1 ; + + ELSE + + IF (fac.safe_to_number(v_waarde2) <> v_korting_totaal) + THEN + + UPDATE bes_kenmerkbestell + SET bes_kenmerkbestell_waarde = v_korting_totaal + WHERE bes_bestelling_key = p_key + AND bes_kenmerk_key = v_bes_kenmerk_key2 + AND bes_kenmerkbestell_verwijder IS NULL; + v_gewijzigd := 1 ; + + END IF; + END IF; + ELSE + IF v_bes_kenmerk_key2 IS NOT NULL AND v_korting_totaal > 0 + THEN + INSERT INTO bes_kenmerkbestell (bes_kenmerk_key, + bes_bestelling_key, + bes_kenmerkbestell_waarde) + VALUES (v_bes_kenmerk_key2, p_key, v_korting_totaal); + v_gewijzigd := 1 ; + END IF; + END IF; + END; + + END IF; + + + -- fac_tracking - ACTIE - bedrag is + bedrag was + IF v_gewijzigd = 1 + THEN + BEGIN fac.trackaction('BESUPD', v_bes_bestelling_key, 3, NULL, 'Prijswijziging doorgevoerd in bestelling - totaalprijs was/is ' || TO_CHAR(v_waarde1) || '/' || TO_CHAR(v_inkoopprijs_totaal) || ' - korting was/is ' || TO_CHAR(v_waarde2) || '/' || TO_CHAR(v_korting_totaal)); END; + END IF; + + END IF; + +END goko_bes_after_insert; +/ ------------------------------- --- RAPPORTAGES --------------- ------------------------------- +CREATE OR REPLACE VIEW goko_v_rap_opdrachten_intern +( + TYPE, + MLD_OPDR_KEY, + MLD_UITVOERENDE_KEY, + OPDRACHTNR, + OPDRACHT_DATUM, + STATUS, + MELDING, + BEHANDELAAR, + LOCATIE_PLAATS, + LOCATIE_OMSCHRIJVING, + GEPLANDE_AANVANG, + OMSCHRIJVING, + PRS_PERSLID_KEY, + NAAM_UITVOERDER, + UREN_BESTEED, + MATERIALEN_VERBRUIK, + AFMELD_DATUM, + OPDRACHT_TYPE, + TD_NAAM, + FILTERSTATUS +) +AS + SELECT CASE + WHEN mu.TYPE = 'B' THEN 'Poule-opdracht' + WHEN mu.TYPE = 'P' THEN 'Klus-opdracht' + ELSE '' + END + TYPE, + o.mld_opdr_key, + CASE + WHEN mu.TYPE = 'B' THEN o.prs_perslid_key + WHEN mu.TYPE = 'P' THEN mu.mld_uitvoerende_key + ELSE NULL + END + mld_uitvoerende_key, + TO_CHAR (o.mld_melding_key) + || '/' + || o.mld_opdr_bedrijfopdr_volgnr + opdrachtnummer, + o.mld_opdr_datumbegin, + DECODE ( + os.mld_statusopdr_key, + 8, DECODE (o.mld_opdr_halted, + 1, 'Onderbroken', + os.mld_statusopdr_omschrijving), + os.mld_statusopdr_omschrijving) + status, + std.mld_stdmelding_omschrijving, + COALESCE (p.prs_perslid_naam_full, ''), -- BEHANDELAAR + l.alg_locatie_plaats, + CASE WHEN m.mld_alg_onroerendgoed_keys IS NOT NULL + THEN l.alg_locatie_omschrijving || ' - ' || COALESCE(onr.alg_gebouw_naam, onr.alg_terreinsector_naam) + ELSE l.alg_locatie_omschrijving + END + locatie_omschrijving, + COALESCE(o.mld_opdr_plandatum, o.mld_opdr_einddatum) + geplande_aanvang, + TRIM ( + REGEXP_REPLACE ( + REGEXP_SUBSTR (o.mld_opdr_omschrijving, + '(([^ ]*)( |$)*){10}'), + '[[:space:]]', + ' ')) + || '...', + p.prs_perslid_key, + mu.naam, + (SELECT ko.mld_kenmerkopdr_waarde + FROM mld_kenmerkopdr ko + WHERE ko.mld_opdr_key = o.mld_opdr_key + AND ko.mld_kenmerk_key = 5), -- kenmerk Uren_besteed + (SELECT ko.mld_kenmerkopdr_waarde + FROM mld_kenmerkopdr ko + WHERE ko.mld_opdr_key = o.mld_opdr_key + AND ko.mld_kenmerk_key = 6), -- kenmerk Materialenverbruik + (SELECT MAX (ft.fac_tracking_datum) + FROM fac_tracking ft + WHERE ft.fac_tracking_refkey = o.mld_opdr_key + AND ft.fac_srtnotificatie_key = 74), -- ORDAFM + ot.mld_typeopdr_omschrijving, + CASE + WHEN mu.TYPE = 'B' THEN COALESCE (p.prs_perslid_naam_full, '') + WHEN mu.TYPE = 'P' THEN mu.naam + ELSE '' + END TD_NAAM, + (CASE + WHEN o.mld_opdr_flag>0 THEN Lcl.L('lcl_opdr_flag' || o.mld_opdr_flag) + ELSE '' + END) filterstatus + FROM mld_opdr o, + mld_melding m, + mld_typeopdr ot, + prs_v_perslid_fullnames p, + ins_tab_discipline d, + mld_stdmelding std, + alg_locatie l, + alg_v_onroerendgoed_gegevens onr, + mld_v_uitvoerende mu, + mld_statusopdr os + WHERE o.mld_melding_key = m.mld_melding_key(+) + AND o.prs_perslid_key = p.prs_perslid_key(+) + AND o.mld_typeopdr_key = ot.mld_typeopdr_key + AND ot.mld_typeopdr_isofferte = 0 -- Alleen werkopdrachten + AND m.mld_stdmelding_key = std.mld_stdmelding_key(+) + AND std.mld_ins_discipline_key = d.ins_discipline_key(+) + AND m.mld_alg_locatie_key = l.alg_locatie_key -- alle std-meldingen hebben verplicht-niveau locatie + AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key + AND os.mld_statusopdr_key = o.mld_statusopdr_key + AND m.mld_alg_onroerendgoed_keys = onr.alg_onroerendgoed_keys (+) + AND mu.intern = 1; + +-- Voor Locatie-gerelateerde objecten +CREATE OR REPLACE VIEW goko_v_ins_qrc_deel +AS + SELECT i.ins_deel_omschrijving hide_f_sort, + l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving + fclt_f_locatie, + o.alg_gebouw_omschrijving fclt_f_gebouw, + o.alg_plaatsaanduiding fclt_f_plaats, + d.ins_discipline_omschrijving fclt_f_discipline, + g.ins_srtgroep_omschrijving fclt_f_objectgroep, + s.ins_srtdeel_omschrijving fclt_f_objectsoort, + i.ins_deel_omschrijving fclt_f_identificatie, + i.ins_deel_key, + s.ins_srtdeel_key, + o.alg_gebouw_code, + o.alg_verdieping_code, + i.ins_discipline_key fclt_3d_discipline_key, + l.alg_locatie_key fclt_3d_locatie_key, + i.ins_alg_ruimte_type, + i.ins_alg_ruimte_key, + CASE + WHEN d.ins_discipline_key = 83 -- IT + THEN + (SELECT k.ins_kenmerkdeel_waarde + FROM ins_kenmerkdeel k + WHERE k.ins_deel_key = i.ins_deel_key + AND k.ins_kenmerk_key = 8) + ELSE + NULL + END + serienummer, + -- b.fac_bookmark_id hide_f_bookmark_id + b.bookmark_ins hide_f_bookmark_id, + b.bookmark_mld hide_f_bookmark_id2 + FROM ins_deel i, + ins_v_alg_overzicht o, + ins_srtdeel s, + ins_srtgroep g, + ins_discipline d, + alg_locatie l, + -- fac_bookmark b + (SELECT b1.fac_bookmark_id bookmark_ins, b2.fac_bookmark_id bookmark_mld + FROM (SELECT fac_bookmark_naam, fac_bookmark_id + FROM fac_bookmark + WHERE fac_bookmark_naam = 'QRC_DEEL' AND (fac_bookmark_expire IS NULL OR fac_bookmark_expire>SYSDATE))b1, + (SELECT fac_bookmark_naam, fac_bookmark_id + FROM fac_bookmark + WHERE fac_bookmark_naam = 'QRC_MELDING' AND (fac_bookmark_expire IS NULL OR fac_bookmark_expire>SYSDATE)) b2 + ) b + WHERE ins_deel_verwijder IS NULL + AND i.ins_deel_module = 'INS' + AND i.ins_deel_parent_key IS NULL + AND s.ins_srtdeel_key = i.ins_srtdeel_key + AND g.ins_srtgroep_key = s.ins_srtgroep_key + AND d.ins_discipline_key = g.ins_discipline_key + AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key + AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type + AND i.ins_alg_ruimte_type IN ('T', 'R', 'W') + AND o.alg_locatie_key = i.ins_alg_locatie_key + AND i.ins_alg_locatie_key = l.alg_locatie_key; + +CREATE OR REPLACE VIEW goko_v_ins_qrc_deel_prs +AS + SELECT i.ins_deel_omschrijving hide_f_sort, + p.prs_perslid_naam || ' (' || p.prs_perslid_voornaam || ')' + fclt_f_locatie, -- persoon + a.prs_afdeling_naam, + d.ins_discipline_omschrijving fclt_f_discipline, + g.ins_srtgroep_omschrijving fclt_f_objectgroep, + s.ins_srtdeel_omschrijving fclt_f_objectsoort, + i.ins_deel_omschrijving fclt_f_identificatie, + i.ins_deel_key, + s.ins_srtdeel_key, + i.ins_discipline_key fclt_3d_discipline_key, + a.prs_afdeling_key fclt_3d_afdeling_key, + i.ins_alg_ruimte_type, + i.ins_alg_ruimte_key, + CASE + WHEN d.ins_discipline_key = 83 -- IT + THEN + (SELECT k.ins_kenmerkdeel_waarde + FROM ins_kenmerkdeel k + WHERE k.ins_deel_key = i.ins_deel_key + AND k.ins_kenmerk_key = 8) + ELSE + NULL + END + serienummer, + -- b.fac_bookmark_id hide_f_bookmark_id + b.bookmark_ins hide_f_bookmark_id, + b.bookmark_mld hide_f_bookmark_id2 + FROM ins_deel i, + ins_srtdeel s, + ins_srtgroep g, + ins_discipline d, + prs_perslid p, + prs_afdeling a, + -- fac_bookmark b + (SELECT b1.fac_bookmark_id bookmark_ins, b2.fac_bookmark_id bookmark_mld + FROM (SELECT fac_bookmark_naam, fac_bookmark_id + FROM fac_bookmark + WHERE fac_bookmark_naam = 'QRC_DEEL' AND (fac_bookmark_expire IS NULL OR fac_bookmark_expire>SYSDATE))b1, + (SELECT fac_bookmark_naam, fac_bookmark_id + FROM fac_bookmark + WHERE fac_bookmark_naam = 'QRC_MELDING' AND (fac_bookmark_expire IS NULL OR fac_bookmark_expire>SYSDATE)) b2 + ) b + WHERE ins_deel_verwijder IS NULL + AND i.ins_deel_module = 'INS' + AND i.ins_deel_parent_key IS NULL + AND s.ins_srtdeel_key = i.ins_srtdeel_key + AND g.ins_srtgroep_key = s.ins_srtgroep_key + AND d.ins_discipline_key = g.ins_discipline_key + AND i.ins_alg_ruimte_type IN ('P') + AND i.ins_alg_ruimte_key = p.prs_perslid_key + AND p.prs_afdeling_key = a.prs_afdeling_key + ; ------ payload end ------