-- -- $Id$ -- DEFINE thisfile = 'LPNL.SQL' DEFINE dbuser = 'LPNL' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL; WHENEVER SQLERROR CONTINUE; --------------------------------------- PROMPT &fcltcusttxt --------------------------------------- SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE PACKAGE LPNL AS FUNCTION change_delimitor (p_string VARCHAR2, p_delimitor VARCHAR2) RETURN VARCHAR2; PROCEDURE mld_ord_after_insert; PROCEDURE anonimize; PROCEDURE update_bezoeker (p_bezkey IN NUMBER); PROCEDURE verleng_contract; END; / CREATE OR REPLACE PACKAGE BODY LPNL AS FUNCTION change_delimitor (p_string VARCHAR2, p_delimitor VARCHAR2) RETURN VARCHAR2 AS v_field VARCHAR2 (1000) := 'QueQuLeQue'; v_result VARCHAR2 (2000); v_line VARCHAR2 (2000); BEGIN v_line := p_string; WHILE v_line IS NOT NULL LOOP fac.imp_getfield (v_line, p_delimitor, v_field); v_result := v_result || '"' || v_field || '";'; END LOOP; RETURN v_result; END; PROCEDURE mld_ord_after_insert AS v_count NUMBER; CURSOR c1 IS -- Tweede niveau van Marcel de Boon en Danny Flemming SELECT fac_notificatie_refkey, COUNT (*) aantal FROM fac_notificatie WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver IN (26, 22) GROUP BY fac_notificatie_refkey, fac_notificatie_datum HAVING COUNT (fac_notificatie_refkey) = 2; CURSOR c2 IS -- Eerste niveau van Marion Post en Dagomar Jansen SELECT fac_notificatie_refkey, COUNT (*) aantal FROM fac_notificatie WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver IN (27, 23) GROUP BY fac_notificatie_refkey, fac_notificatie_datum HAVING COUNT (fac_notificatie_refkey) = 2; PROCEDURE change_tracking (p_opdr_key NUMBER, p_kenmerk_key NUMBER) AS v_perslid_key NUMBER; v_perslid_naam VARCHAR2 (100); BEGIN SELECT fac_usrdata_code INTO v_perslid_key FROM fac_usrdata WHERE fac_usrdata_key = FAC.safe_to_number ( FLX.getflex ('OPD', p_kenmerk_key, p_opdr_key)); DBMS_OUTPUT.put_line (' perslid:' || v_perslid_key); DELETE fac_notificatie WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver <> v_perslid_key AND fac_notificatie_refkey = p_opdr_key; DELETE web_user_messages WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver <> v_perslid_key AND web_user_mess_action_params = p_opdr_key; DBMS_OUTPUT.put_line (' Na delete:' || v_perslid_key); SELECT prs_perslid_naam_friendly INTO v_perslid_naam FROM prs_v_perslid_fullnames WHERE prs_perslid_key = v_perslid_key; DBMS_OUTPUT.put_line (' Na select naam full:' || v_perslid_naam); UPDATE fac_tracking SET fac_tracking_oms = SUBSTR (fac_tracking_oms, 1, INSTR (fac_tracking_oms, ' verstuurd aan')) || 'verstuurd aan ' || v_perslid_naam WHERE fac_tracking_refkey = p_opdr_key AND fac_tracking_oms LIKE '%' || v_perslid_naam || '%' AND fac_srtnotificatie_key = 177 AND fac_tracking_datum > SYSDATE - (1 / 24); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- Geen fiatteur opgegeven. Dan gaat de mail maar naar beiden toe END; BEGIN -- ORDGOE srtnotificatie_key = 95 -- Tracking srtnotificatie_key = 177 -- Kenmerk_key van geselecteerde goedkeurder = 21 -- Marcel de Boon 22 -- Danny Flemming 26 -- Marion Post 27 -- Dagomar Jansen 23 FOR rec1 IN c1 LOOP change_tracking (rec1.fac_notificatie_refkey, 21); END LOOP; FOR rec2 IN c2 LOOP change_tracking (rec2.fac_notificatie_refkey, 21); END LOOP; END; PROCEDURE anonimize AS CURSOR c IS SELECT * FROM res_rsv_ruimte WHERE res_activiteit_key = 30 -- Werkplek AND res_rsv_ruimte_van < SYSDATE - 21; BEGIN FOR rec IN c LOOP UPDATE res_rsv_ruimte SET res_rsv_ruimte_host_key = 1201, res_rsv_ruimte_contact_key = 1201 WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key; END LOOP; -- Bezoekers en personen worden na 6 weken geanonimiseerd. ANO.anonymizebez (SYSDATE -2000, SYSDATE - 42); ANO.anonymizeprs (SYSDATE -2000, SYSDATE - 42); fac.writelog ('LPNL.anonimize', 'I', 'LPNL.anonimize is uitgevoerd', ''); END; PROCEDURE update_bezoeker (p_bezkey IN NUMBER) AS v_kenmerkwaarde BEZ_KENMERKWAARDE.BEZ_KENMERKWAARDE_WAARDE%TYPE; BEGIN v_kenmerkwaarde := FLX.getflex('BEZ', 1020, p_bezkey); IF v_kenmerkwaarde IS NULL THEN v_kenmerkwaarde := dbms_random.string('a', 15); FLX.setflex ('BEZ', 1020, p_bezkey, v_kenmerkwaarde); END IF; END; PROCEDURE verleng_contract AS CURSOR c IS SELECT cnt_contract_key, cnt_kenmerkcontract_key FROM cnt_kenmerkcontract kc, cnt_kenmerk k WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key AND kc.cnt_kenmerkcontract_verwijder IS NULL AND k.cnt_srtkenmerk_key = 21; CURSOR cb (c_contract_key IN NUMBER) IS SELECT * FROM fac_bijlagen WHERE fac_bijlagen_module = 'CNT' AND fac_bijlagen_refkey = c_contract_key AND fac_bijlagen_verwijder IS NULL; v_cnt_contract_key_new NUMBER (10); v_huidige_versie CNT_CONTRACT.CNT_CONTRACT_VERSIE%TYPE; v_max_versie CNT_CONTRACT.CNT_CONTRACT_VERSIE%TYPE; v_nummer_intern CNT_CONTRACT.CNT_CONTRACT_NUMMER_INTERN%TYPE; BEGIN FOR rec IN c LOOP SELECT COALESCE(cnt_contract_versie, '0'), cnt_contract_nummer_intern INTO v_huidige_versie, v_nummer_intern FROM cnt_contract WHERE cnt_contract_key = rec.cnt_contract_key; SELECT MAX(COALESCE(cnt_contract_versie, '0')) INTO v_max_versie FROM cnt_contract WHERE cnt_contract_verwijder IS NULL AND cnt_contract_nummer_intern = v_nummer_intern; -- We gaan contracten alleen verlengen als dit de laatste versie van het contract is. IF v_huidige_versie = v_max_versie THEN v_cnt_contract_key_new := cnt_s_cnt_contract_key.nextval; INSERT INTO cnt_contract (cnt_contract_key, cnt_contract_nummer_intern, ins_discipline_key, cnt_contract_versie, cnt_contract_omschrijving, cnt_contract_nummer, cnt_contract_mantel_key, cnt_contract_document, prs_afdeling_key_eig, prs_perslid_key_eig, prs_perslid_key_beh, cnt_contract_opmerking, cnt_contract_looptijd_van, cnt_contract_looptijd_tot, cnt_contract_opzegtermijn, cnt_contract_rappeltermijn, cnt_prs_bedrijf_key, prs_dienst_key, prs_contactpersoon_key, cnt_contract_kosten, cnt_contract_uurloon, cnt_contract_korting, prs_kostenplaats_key, prs_kostensoort_key) SELECT v_cnt_contract_key_new, cnt_contract_nummer_intern, ins_discipline_key, COALESCE (cnt_contract_versie, '0') + 1, cnt_contract_omschrijving, cnt_contract_nummer, cnt_contract_mantel_key, cnt_contract_document, prs_afdeling_key_eig, prs_perslid_key_eig, prs_perslid_key_beh, cnt_contract_opmerking, ADD_MONTHS (cnt_contract_looptijd_van, 12), ADD_MONTHS (cnt_contract_looptijd_tot, 12), cnt_contract_opzegtermijn, cnt_contract_rappeltermijn, cnt_prs_bedrijf_key, prs_dienst_key, prs_contactpersoon_key, cnt_contract_kosten, cnt_contract_uurloon, cnt_contract_korting, prs_kostenplaats_key, prs_kostensoort_key FROM cnt_contract WHERE cnt_contract_key = rec.cnt_contract_key; cnt.setcontractstatus (v_cnt_contract_key_new, 0, NULL); -- reset de verleng vlag. Anders zouden we het contract morgen weer gaan verlengen. UPDATE cnt_kenmerkcontract SET cnt_kenmerkcontract_verwijder = SYSDATE WHERE cnt_kenmerkcontract_key = rec.cnt_kenmerkcontract_key; INSERT INTO cnt_kenmerkcontract (cnt_contract_key, cnt_kenmerk_key, cnt_kenmerkcontract_waarde) SELECT v_cnt_contract_key_new, cnt_kenmerk_key, cnt_kenmerkcontract_waarde FROM cnt_kenmerkcontract kc WHERE cnt_contract_key = rec.cnt_contract_key AND cnt_kenmerkcontract_verwijder IS NULL; FOR recb IN cb (rec.cnt_contract_key) LOOP flx.copyflexbijlage ('CNT', v_cnt_contract_key_new, recb.fac_bijlagen_kenmerk_key, recb.fac_bijlagen_key); END LOOP; INSERT INTO cnt_contract_plaats (cnt_contract_key, cnt_alg_plaats_code, cnt_alg_plaats_key, cnt_contract_plaats_gewicht) SELECT v_cnt_contract_key_new, cnt_alg_plaats_code, cnt_alg_plaats_key, cnt_contract_plaats_gewicht FROM cnt_contract_plaats WHERE cnt_contract_key = rec.cnt_contract_key AND cnt_contract_plaats_verwijder IS NULL; INSERT INTO cnt_factuurschema (cnt_contract_key, cnt_factuurschema_boekmaand, cnt_factuurschema_bedrag, cnt_factuurschema_opmerking) SELECT v_cnt_contract_key_new, TO_CHAR (ADD_MONTHS (fac.safe_to_date (cnt_factuurschema_boekmaand, 'yyyy-mm'), 12), 'yyyy-mm'), cnt_factuurschema_bedrag, cnt_factuurschema_opmerking FROM cnt_factuurschema WHERE cnt_contract_key = rec.cnt_contract_key; END IF; END LOOP; END; END; / CREATE OR REPLACE PROCEDURE lpnl_import_perslid (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR (255); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); BEGIN -- Verwijder lege records DELETE fac_imp_file WHERE SUBSTR(fac_imp_file_line, 1,7) = ',,,,,,,' AND fac_import_key = p_import_key; v_seq_of_columns := '0;0;0;0;0;0;4;3;0;2;' -- 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 -- v_prs_perslid_naam 8 -- v_prs_perslid_tussenvoegsel 9 -- v_prs_perslid_voornaam 10 || '0;0;0;0;0;8;0;1;0;0;' -- v_prs_perslid_voorletters 11 -- v_prs_perslid_partner_naam 12 -- v_prs_perslid_partner_tussenv 13 -- v_prs_naamgebruik_code 14 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt -- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken -- 2 personen die de geboortenaam van de partner willen gebruiken -- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken -- v_prs_perslid_geslacht 15 Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default -- v_prs_perslid_telefoonnr 16 -- v_prs_perslid_mobiel 17 -- v_prs_perslid_email 18 -- v_prs_perslid_dienstverband 19 -- v_prs_perslid_nr 20 || '4;0;0;0;0;0;4;6;7;9;' -- v_prs_srtperslid_omschrijving 21 -- v_prs_perslid_oslogin 22 -- v_prs_perslid_wachtwoord 23 -- v_prs_perslid_titel 24 -- v_prs_perslid_apikey 25 -- v_dummy 26 -- v_prs_kenmerk1 27 -- v_prs_kenmerk2 28 -- v_prs_kenmerk3 29 -- v_prs_kenmerk4 30 || '0;0;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0'; -- Het aangeleverde bestand heeft een komma als scheidingsteken. Deze wordt hier maar even vervangen. UPDATE fac_imp_file SET fac_imp_file_line = LPNL.change_delimitor(fac_imp_file_line, ',') WHERE fac_import_key = p_import_key; prs.import_perslid(p_import_key, v_seq_of_columns, '%"EmailAddress";"GivenName";"SurName";"Name";"UserPrincipalName";"Office";"Displayname";"telephoneNumber";"department"%'); -- Verwijder items uit de AD lijst die geen persoon zijn DELETE fac_imp_perslid WHERE prs_perslid_naam IS NULL OR prs_perslid_voornaam IS NULL OR prs_perslid_email IS NULL; -- Verwijder de Carnext medewerkers DELETE fac_imp_perslid WHERE LOWER (prs_perslid_email) LIKE '%carnext%'; -- Verwijder overgebleven records die geen persoon zijn -- De strings waar we op zoeken staan in de eigen tabel met key 1 DELETE fac_imp_perslid WHERE fac_import_key = p_import_key AND fac_imp_file_index IN (SELECT fac_imp_file_index FROM fac_imp_perslid i, fac_usrdata ud WHERE prs_perslid_naam LIKE fac_usrdata_omschr AND fac_import_key = p_import_key AND fac_usrtab_key = 1); UPDATE fac_imp_perslid SET prs_perslid_oslogin = SUBSTR(SUBSTR (prs_perslid_email, 1, INSTR (prs_perslid_email, '@') - 1),1,30), prs_srtperslid_omschrijving = 'Onbekend'; END lpnl_import_perslid; / CREATE OR REPLACE PROCEDURE lpnl_import_perslid_lp (p_import_key IN NUMBER) AS BEGIN lpnl_import_perslid (p_import_key); END; / CREATE OR REPLACE PROCEDURE lpnl_import_perslid_ald (p_import_key IN NUMBER) AS BEGIN lpnl_import_perslid (p_import_key); END; / CREATE OR REPLACE PROCEDURE lpnl_update_perslid (p_import_key IN NUMBER, p_bedrijf_key IN NUMBER) IS CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full, p.prs_perslid_oslogin FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = p_bedrijf_key AND pf.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_verwijder IS NULL AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid i WHERE LOWER (p.prs_perslid_email) = LOWER (i.prs_perslid_email)); CURSOR c IS SELECT DISTINCT prs_kenmerk4 FROM fac_imp_perslid WHERE prs_kenmerk4 IS NOT NULL AND NOT EXISTS (SELECT 1 FROM prs_afdeling a WHERE UPPER (a.prs_afdeling_omschrijving) = UPPER (prs_kenmerk4) AND a.prs_afdeling_verwijder IS NULL); CURSOR c_afd_del IS SELECT * FROM prs_afdeling a WHERE prs_afdeling_verwijder IS NULL AND a.prs_bedrijf_key = p_bedrijf_key AND NOT EXISTS (SELECT 1 FROM prs_perslid p WHERE prs_perslid_verwijder IS NULL AND p.prs_afdeling_key = a.prs_afdeling_key); CURSOR c_aut IS SELECT p.prs_perslid_naam, p.prs_perslid_key, a.prs_afdeling_key, a.prs_afdeling_naam FROM prs_perslid p, prs_afdeling a WHERE prs_perslid_verwijder IS NULL AND p.prs_afdeling_key = a.prs_afdeling_key; v_bedrijf_key NUMBER (10); v_afdeling_key1 NUMBER (10); v_afdeling_key2 NUMBER (10); v_kostenplaats_key NUMBER (10); v_kpn_nr_prev VARCHAR2 (20); v_count_mandaat NUMBER (10); v_count_man_prs NUMBER (10) := 0; v_afdeling_key NUMBER; v_group_key NUMBER; v_aanduiding VARCHAR2 (100); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN FOR rec IN c LOOP -- Koppel de afdelingen aan het bedrijf leaseplan key 41 INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving) VALUES (p_bedrijf_key, '123456', rec.prs_kenmerk4) RETURNING prs_afdeling_key INTO v_afdeling_key; UPDATE prs_afdeling SET prs_afdeling_naam = v_afdeling_key WHERE prs_afdeling_key = v_afdeling_key; END LOOP; UPDATE fac_imp_perslid i SET prs_afdeling_naam = (SELECT MIN (prs_afdeling_key) FROM prs_afdeling a WHERE prs_afdeling_verwijder IS NULL AND UPPER (i.prs_kenmerk4) = UPPER (a.prs_afdeling_omschrijving)); SELECT COUNT(*) INTO v_count FROM fac_imp_perslid WHERE fac_import_key = p_import_key; IF v_count > 500 THEN FOR rec IN c_del LOOP BEGIN v_errorhint := 'Persoon verwijderen: ' || rec.prs_perslid_naam_full || '-' || rec.prs_perslid_nr || '-' || rec.prs_perslid_oslogin; prs.delete_perslid (p_import_key, rec.prs_perslid_key); END; END LOOP; END IF; prs.update_perslid (p_import_key, 'EMAIL', NULL); -- Verwijder afdelingen waar geen personen meer aan gekoppeld zijn. FOR rec IN c_afd_del LOOP BEGIN v_errorhint := 'Verwijdere afdeling'; v_aanduiding := rec.prs_afdeling_omschrijving; UPDATE prs_afdeling SET prs_afdeling_verwijder = SYSDATE WHERE prs_afdeling_key = rec.prs_afdeling_key; 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.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); END; END LOOP; -- We gaan alle personen koppelen aan de flexwerkplek autorisatiegroep zoals deze bij de afdeling in een kenmerk is aangegeven. -- Oudere flex autorisatiegroepen worden verwijderd. FOR rec IN c_aut LOOP BEGIN v_group_key := flx.getflex ('PRS', 1080, -- Standaard autorisatiegroep rec.prs_afdeling_key, 'A'); IF v_group_key IS NOT NULL THEN INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) SELECT rec.prs_perslid_key, v_group_key FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = rec.prs_perslid_key AND gg.fac_groep_key = v_group_key); END IF; DELETE fac_gebruikersgroep WHERE fac_gebruikersgroep_key IN (SELECT fac_gebruikersgroep_key FROM fac_gebruikersgroep gg, fac_groep g WHERE gg.fac_groep_key = g.fac_groep_key AND UPPER(g.fac_groep_omschrijving) LIKE 'FLEX%' AND gg.prs_perslid_key = rec.prs_perslid_key AND gg.fac_gebruikersgroep_vervaldatum IS NULL AND g.fac_groep_key <> v_group_key); END; END LOOP; -- Zorg ervoor dat er geen persoonsgegevens achterblijven in de import tabel. DELETE fac_imp_perslid; COMMIT; 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.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); END lpnl_update_perslid; / CREATE OR REPLACE PROCEDURE lpnl_update_perslid_lp (p_import_key IN NUMBER) AS BEGIN lpnl_update_perslid (p_import_key, 41); END; / CREATE OR REPLACE PROCEDURE lpnl_update_perslid_ald (p_import_key IN NUMBER) AS BEGIN lpnl_update_perslid (p_import_key, 13163); END; / -- View om een autorsatiegroep voor flexplekken te koppelen aan een afdeling (kenmerk 1080). Tijdens de import -- worden mensen van deze afdeling automatisch gekoppeld aan deze autorisatiegroep. CREATE OR REPLACE VIEW lpnl_v_autorisatie_wp AS SELECT fac_groep_key, fac_groep_omschrijving FROM fac_groep WHERE fac_groep_upper LIKE 'FLEX%'; -- View om via een rapport je collega te vinden die ook een werkplek gereserveerd heeft CREATE OR REPLACE VIEW lpnl_v_rap_find_collega_wp AS SELECT rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, DECODE (p.prs_perslid_visibility, 1, pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving) prs_perslid_naam, a.prs_afdeling_omschrijving, l.alg_locatie_omschrijving, d.alg_gebouw_omschrijving, d.alg_verdieping_code, d.alg_ruimte_nr, rd.res_deel_omschrijving, d.ins_deel_omschrijving FROM res_rsv_ruimte rrr, res_rsv_deel rrd, res_deel rd, res_discipline r, ins_v_deel_gegevens d, prs_v_perslid_fullnames pf, prs_afdeling a, prs_perslid p, alg_locatie l WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_ins_deel_key = d.ins_deel_key AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND rd.res_discipline_key = r.ins_discipline_key --AND r.ins_discipline_min_level = 5 -- werkplekken AND res_activiteit_key = 30 -- Werkplekken AND d.alg_locatie_key = l.alg_locatie_key AND TRUNC (res_rsv_ruimte_van) < TRUNC (SYSDATE) + 21 AND res_rsv_ruimte_van > TRUNC (SYSDATE); -- view om QR codes voor bijvoorbeeld kofieautomaten af te drukken. -- view om QR codes voor een deel te genereren. CREATE OR REPLACE VIEW lpnl_v_rap_qr_deel AS SELECT fac_bookmark_naam, fac_bookmark_id, ins_discipline_omschrijving, ins_srtgroep_omschrijving, ins_srtdeel_omschrijving, ins_deel_omschrijving, alg_locatie_key, alg_gebouw_omschrijving, ins_deel_aanmaak, ins_deel_key FROM fac_bookmark b, ins_v_deel_gegevens d WHERE fac_bookmark_expire IS NULL AND fac_bookmark_id = 'EJOm5DGqmtqPhu4v'; -- View voor reserveerbare (werkplek)OBJECTEN, het default thema met key 13 -- Deze core-view wordt direct als kleur-objecten-thema gebruikt, maar kan ook als basis voor een alternatief via worden gebruikt -- Kijkt nu hard maximaal 42 dagen tov van nu vooruit, wat hopelijk even genoeg is voor alle situaties -- De verschillende waardevarianten zijn presentatie alternatieven, evt meerdere regels onder elkaar -- waarde1: Voor hele dagen: Vrij(0) of Bezet (3) -- waarde: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3) -- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij CREATE OR REPLACE VIEW lpnl_v_thema_deel_res_datum ( fclt_f_datum, ins_deel_key, min_van, max_tot, waarde1, waarde, waarde3 ) AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 21) SELECT datum fclt_f_datum, ins_deel_key, MIN (res_rsv_deel_van) min_van, MAX (res_rsv_deel_tot) max_tot, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE(ins_srtdeel_key, 21, 4, 101, 5, 0) ELSE 3 -- hele dag Electrische bureaus (21) , Electrisch/Breedbeeld (101) END waarde1, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE(ins_srtdeel_key, 21, 4, 101, 5, 0) WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') <= 13 THEN 1 -- ochtend WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') >= 12 THEN 2 -- middag ELSE 3 -- hele dag END waarde, COUNT (res_rsv_deel_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, res_ins_deel_key ins_deel_key, ins_srtdeel_key, res_rsv_deel_van, res_rsv_deel_tot FROM res_v_aanwezigdeel r, ins_v_deel_gegevens dg, alg_gebouw g, alg_srtgebouw sg, datums, (SELECT datum, res_deel_key, res_rsv_deel_van, res_rsv_deel_tot FROM datums, res_v_aanwezigrsv_deel rrd WHERE res_rsv_deel_van > TRUNC(SYSDATE) - 1 -- negeer alle irrelevante historie sowieso AND datum + 1 >= res_rsv_deel_van AND datum < res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen WHERE r.res_deel_key = blokkerend.res_deel_key(+) AND datums.datum = blokkerend.datum(+) AND (r.res_deel_vervaldatum IS NULL or r.res_deel_vervaldatum > datums.datum) AND dg.ins_deel_key = r.res_ins_deel_key AND dg.alg_gebouw_key = g.alg_gebouw_key AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key AND sg.alg_srtgebouw_passief IS NULL) GROUP BY datum, ins_deel_key, ins_srtdeel_key ORDER BY datum, ins_deel_key; CREATE OR REPLACE VIEW lpnl_v_thema_set_res_wp AS SELECT ins_deel_key, DECODE (rd.res_deel_key, NULL, 0, 1) waarde FROM ins_deel d, (SELECT * FROM res_deel WHERE res_deel_verwijder IS NULL) rd WHERE d.ins_deel_key = rd.res_ins_deel_key(+); -- Label view die er voor zorgt dat de naam van de persoon die gereserveerd heeft aangepast wordt -- als de frontoffice een alternative naam voor een externe bezoeker heeft ingevuld. CREATE OR REPLACE VIEW lpnl_v_label_deel_res_datum AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 42) SELECT datums.datum fclt_f_datum, isd.res_ins_deel_key ins_deel_key, res_deel_omschrijving, CHR (10) || LISTAGG ( DECODE ( naam, NULL, '', '[s40]' || naam || ' (' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || '-' || DECODE (TRUNC (res_rsv_deel_tot), TRUNC (res_rsv_deel_van), TO_CHAR (res_rsv_deel_tot, 'HH24:MI'), TO_CHAR (res_rsv_deel_tot, 'DD-MM-YYYY HH24:MI')) || ')'), CHR (10)) WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde1, CHR (10) || LISTAGG (DECODE (naam, NULL, '', '[s40]' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || naam), CHR (10)) WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde, CHR (10) || LISTAGG (DECODE (naam, NULL, '', '[s40]' || naam), CHR (10)) WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde3, LISTAGG ( DECODE (naam, NULL, '', '' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || naam || ''), '
') WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde_html, LISTAGG (DECODE (naam, NULL, '', '' || naam || ''), '
') WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde_html2 FROM res_v_aanwezigdeel isd, datums, (SELECT datum, res_ins_deel_key, COALESCE(res_kenmerkreservering_waarde, DECODE (p.prs_perslid_visibility, 1, pf.prs_perslid_naam_friendly, a.prs_afdeling_omschrijving)) naam, res_rsv_deel_van, res_rsv_deel_tot FROM res_v_aanwezigdeel r, res_v_aanwezigrsv_deel rrd, (SELECT res_rsv_ruimte_key, res_kenmerkreservering_waarde FROM res_kenmerkwaarde WHERE res_kenmerk_key = 81) rkw, -- Naam van de externe bezoeker res_rsv_ruimte rrr, prs_v_perslid_fullnames pf, prs_perslid p, prs_afdeling a, datums WHERE r.res_deel_key = rrd.res_deel_key AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key AND pf.prs_perslid_key = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND rrr.res_rsv_ruimte_key = rkw.res_rsv_ruimte_key(+) AND datum + 1 >= res_rsv_deel_van AND datum < res_rsv_deel_tot) res -- Bezet WHERE isd.res_ins_deel_key = res.res_ins_deel_key(+) AND datums.datum = res.datum(+) GROUP BY datums.datum, isd.res_ins_deel_key, res_deel_omschrijving; -- View om inzichtelijk te maken welke werkplekken wel of niet bevestigd zijn. CREATE OR REPLACE VIEW lpnl_v_wp_bezetting AS SELECT l.alg_locatie_key, l.alg_locatie_omschrijving, dg.alg_gebouw_omschrijving, dg.alg_verdieping_code, dg.alg_ruimte_nr, rd.res_deel_omschrijving, pf.prs_perslid_naam_full, DECODE(p.prs_perslid_visibility, 1, pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving) naam_visibility, a.prs_afdeling_omschrijving, rrr.res_rsv_ruimte_van res_rsv_ruimte_datum, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, h.ins_deel_statedate, DECODE(ins_deel_state_history_key, NULL, 1, 0) no_show, DECODE(ins_deel_state_history_key, NULL, 0, 1) show, FLX.getflex ('PRS', 1020, pf.prs_perslid_key, 'P') bhv, FLX.getflex ('PRS', 1060, pf.prs_perslid_key, 'P') ontr FROM res_rsv_ruimte rrr, res_deel rd, prs_perslid p, prs_v_perslid_fullnames pf, prs_afdeling a, ins_v_deel_gegevens dg, alg_locatie l, res_rsv_deel rrd LEFT OUTER JOIN ins_deel_state_history h ON fac.safe_to_number (h.ins_deel_state) = rrd.res_rsv_deel_key WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key AND rrd.res_deel_key = rd.res_deel_key AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND rd.res_ins_deel_key = dg.ins_deel_key AND dg.alg_locatie_key = l.alg_locatie_key AND rrr.res_rsv_ruimte_verwijder IS NULL; -- Overzicht om te laten zien welke BHV-ers vandaag in het pand zijn. CREATE OR REPLACE VIEW lpnl_v_bhv_overview AS SELECT alg_locatie_key, alg_locatie_omschrijving, prs_perslid_naam_full, naam_visibility, BHV, ontr, CASE WHEN SYSDATE BETWEEN res_rsv_ruimte_van AND res_rsv_ruimte_tot THEN 1 -- wp geboekt ELSE 0 END wp, CASE WHEN SYSDATE BETWEEN res_rsv_ruimte_van AND res_rsv_ruimte_tot AND ins_deel_statedate IS NOT NULL THEN 1 -- binnen ELSE 0 END binnen FROM lpnl_v_wp_bezetting WHERE (bhv = 1 OR ontr = 1) AND TRUNC (res_rsv_ruimte_van) = TRUNC (SYSDATE); CREATE OR REPLACE VIEW lpnl_v_aanwezigfactuur AS SELECT * FROM fin_factuur WHERE fin_factuur_verwijder IS NULL; -- Financieel CREATE OR REPLACE VIEW lpnl_v_rap_fin_verplichting AS -- opdrachten zonder contract SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr nummer, alg_locatie_omschrijving, prs_kostenplaats_omschrijving, k.prs_kostenplaats_nr, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_bedrijf_naam, mld_stdmelding_omschrijving, mld_statusopdr_omschrijving, mld_opdr_kosten, sf.fin_factuur_statuses_omschr, f.fin_factuur_totaal, f.fin_factuur_datum, f.fin_factuur_nr, mld_opdr_datumbegin boekmaand, 'Kosten' typeverpl FROM lpnl_v_aanwezigfactuur f, mld_opdr o, mld_melding m, mld_stdmelding std, prs_kostensoort ks, ins_srtdiscipline sd, ins_tab_discipline d, prs_bedrijf b, prs_kostenplaats k, alg_locatie l, alg_gebouw g, mld_statusopdr so, fin_factuur_statuses sf WHERE o.mld_opdr_key = f.mld_opdr_key(+) AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen, Niet akkoord AND o.mld_melding_key = m.mld_melding_key AND COALESCE(mld_opdr_kosten, 0) <> 0 AND m.mld_stdmelding_key = std.mld_stdmelding_key AND COALESCE(f.prs_kostensoort_key, o.prs_kostensoort_key, std.prs_kostensoort_key) = ks.prs_kostensoort_key(+) AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+) AND m.mld_alg_locatie_key = g.alg_locatie_key(+) AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND g.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND o.mld_statusopdr_key = so.mld_statusopdr_key AND f.fin_factuur_statuses_key = sf.fin_factuur_statuses_key(+) UNION ALL -- Contracten die verdeeld worden over de scope SELECT 'C' || c.cnt_contract_nummer_intern || '.' || COALESCE(c.cnt_contract_versie,'0'), alg_locatie_omschrijving, prs_kostenplaats_omschrijving, k.prs_kostenplaats_nr, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_bedrijf_naam, cnt_contract_omschrijving || ' (' || cnt_factuurschema_boekmaand || ')', NULL, cfs.cnt_factuurschema_bedrag * COALESCE (cp.factor, 1), sf.fin_factuur_statuses_omschr, f.fin_factuur_totaal * COALESCE (cp.factor, 1), f.fin_factuur_datum, f.fin_factuur_nr, TO_DATE (cnt_factuurschema_boekmaand, 'yyyy-mm'), 'Kosten' typeverpl FROM lpnl_v_aanwezigfactuur f, cnt_contract c, (SELECT cpf.*, ( SELECT cpf.cnt_contract_plaats_gewicht / SUM (cp2.cnt_contract_plaats_gewicht) FROM cnt_contract_plaats cp2 WHERE cpf.cnt_contract_key = cp2.cnt_contract_key AND cnt_contract_plaats_verwijder IS NULL GROUP BY cnt_contract_key) factor FROM cnt_contract_plaats cpf) cp, prs_kostensoort ks, prs_bedrijf b, prs_kostenplaats k, alg_locatie l, alg_gebouw g, fin_factuur_statuses sf, cnt_factuurschema cfs, cnt_discipline d WHERE c.cnt_contract_key = f.cnt_contract_key(+) AND c.ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key <> 461 -- Voorzieningen AND c.cnt_contract_verwijder IS NULL AND c.cnt_contract_key = cp.cnt_contract_key AND cp.cnt_contract_plaats_verwijder IS NULL AND cp.cnt_alg_plaats_key = l.alg_locatie_key AND l.alg_locatie_key = g.alg_locatie_key AND g.prs_kostenplaats_key = k.prs_kostenplaats_key AND COALESCE(f.prs_kostensoort_key, c.prs_kostensoort_key,d.prs_kostensoort_key) = ks.prs_kostensoort_key(+) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND f.fin_factuur_statuses_key = sf.fin_factuur_statuses_key(+) AND c.cnt_contract_key = cfs.cnt_contract_key AND TO_DATE (cnt_factuurschema_boekmaand, 'yyyy-mm') BETWEEN TRUNC (SYSDATE, 'y') - 365 AND TRUNC (SYSDATE, 'y') + (2*364) AND cfs.cnt_factuurschema_boekmaand = f.fin_factuur_boekmaand(+) AND COALESCE (FLX.getflex('FIN', 21, COALESCE(f.fin_factuur_key, -1)), '0') = '0' -- factuur niet verdelen over contract UNION ALL -- Facturen op contracten die aan een locatie worden toegekend. SELECT 'C' || c.cnt_contract_nummer_intern || '.' || COALESCE(c.cnt_contract_versie,'0'), alg_locatie_omschrijving, prs_kostenplaats_omschrijving, k.prs_kostenplaats_nr, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_bedrijf_naam, cnt_contract_omschrijving || ' (' || cnt_factuurschema_boekmaand || ')', NULL, cfs.cnt_factuurschema_bedrag * COALESCE (cp.factor, 1), sf.fin_factuur_statuses_omschr, fr.fin_factuurregel_totaal, f.fin_factuur_datum, f.fin_factuur_nr, TO_DATE (cnt_factuurschema_boekmaand, 'yyyy-mm'), 'Kosten' typeverpl FROM lpnl_v_aanwezigfactuur f, cnt_contract c, (SELECT cpf.*, ( SELECT cpf.cnt_contract_plaats_gewicht / SUM (cp2.cnt_contract_plaats_gewicht) FROM cnt_contract_plaats cp2 WHERE cpf.cnt_contract_key = cp2.cnt_contract_key AND cnt_contract_plaats_verwijder IS NULL GROUP BY cnt_contract_key) factor FROM cnt_contract_plaats cpf) cp, fin_factuurregel fr, prs_kostensoort ks, prs_bedrijf b, prs_kostenplaats k, alg_locatie l, alg_gebouw g, fin_factuur_statuses sf, cnt_factuurschema cfs, cnt_discipline d WHERE c.cnt_contract_key = f.cnt_contract_key(+) AND f.fin_factuur_key = fr.fin_factuur_key(+) AND c.ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key <> 461 -- Voorzieningen AND c.cnt_contract_verwijder IS NULL AND c.cnt_contract_key = cp.cnt_contract_key AND cp.cnt_contract_plaats_verwijder IS NULL AND cp.cnt_alg_plaats_key = l.alg_locatie_key AND fr.fin_factuurregel_referentie = l.alg_locatie_code AND l.alg_locatie_key = g.alg_locatie_key AND g.prs_kostenplaats_key = k.prs_kostenplaats_key AND COALESCE(f.prs_kostensoort_key, c.prs_kostensoort_key,d.prs_kostensoort_key) = ks.prs_kostensoort_key(+) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND f.fin_factuur_statuses_key = sf.fin_factuur_statuses_key(+) AND c.cnt_contract_key = cfs.cnt_contract_key AND TO_DATE (cnt_factuurschema_boekmaand, 'yyyy-mm') BETWEEN TRUNC (SYSDATE, 'y') - 365 AND TRUNC (SYSDATE, 'y') + (2*364) AND cfs.cnt_factuurschema_boekmaand = f.fin_factuur_boekmaand(+) AND COALESCE (FLX.getflex('FIN', 21, COALESCE(f.fin_factuur_key,-1)), '0') = '1' -- factuur niet verdelen over contract =1 dus niet verdelen UNION ALL -- Voorzieningen cnt_discipline_key = 461 SELECT 'C' || c.cnt_contract_nummer_intern || '.' || COALESCE(c.cnt_contract_versie,'0'), NULL alg_locatie_omschrijving, prs_kostenplaats_omschrijving, k.prs_kostenplaats_nr, prs_kostensoort_oms, prs_kostensoort_opmerking, NULL prs_bedrijf_naam, cnt_contract_omschrijving, NULL, -- (Gewogen contract kosten per locatie = voorziening per locatie) - Kosten voor die locatie en de kostensoort van het contract -- gedurende de looptijd van het contract (voorziening) c.cnt_contract_kosten - (SELECT COALESCE(SUM(mld_opdr_kosten),0) FROM mld_opdr o, mld_melding m WHERE o.mld_melding_key = m.mld_melding_key AND o.prs_kostensoort_key = c.prs_kostensoort_key AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen, Niet akkoord AND o.mld_opdr_datumbegin BETWEEN c.cnt_contract_looptijd_van AND c.cnt_contract_looptijd_tot) - (SELECT COALESCE(SUM(fin_factuur_totaal),0) FROM fin_factuur f, fin_kenmerkfactuur kf WHERE f.fin_factuur_key = kf.fin_factuur_key AND kf.fin_kenmerk_key = 1 AND f.prs_kostensoort_key = c.prs_kostensoort_key), NULL fin_factuur_statuses_omschr, NULL fin_factuur_totaal, NULL fin_factuur_datum, NULL fin_factuur_nr, c.cnt_contract_looptijd_van, 'Voorziening' typeverpl FROM cnt_contract c, prs_kostensoort ks, prs_kostenplaats k, cnt_discipline d WHERE c.ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key = 461 AND c.cnt_contract_verwijder IS NULL AND c.prs_kostenplaats_key = k.prs_kostenplaats_key AND c.prs_kostensoort_key = COALESCE(ks.prs_kostensoort_key, d.prs_kostensoort_key) AND cnt_contract_looptijd_van BETWEEN TRUNC (SYSDATE, 'y') - 365 AND TRUNC (SYSDATE, 'y') + (2*364); -- Rapport om op de portal de contracten met een ongeldige scope te laten zien. CREATE OR REPLACE VIEW lpnl_v_rap_cnt_invalid_scope AS SELECT 'C' || cnt_contract_nummer_intern contract_nummer, cnt_contract_omschrijving, c.cnt_contract_key FROM cnt_contract_plaats cp, cnt_contract c WHERE cnt_alg_plaats_code <> 'L' AND cnt_contract_plaats_verwijder IS NULL AND c.cnt_contract_key = cp.cnt_contract_key; -- Portal rapport om mensen met een dagpas te tonen. CREATE OR REPLACE VIEW lpnl_v_rap_dagpas_vandaag AS SELECT a.bez_afspraak_key, a.bez_afspraak_datum, l.alg_locatie_omschrijving, b.bez_afspraak_bedrijf, b.bez_afspraak_naam, pf.prs_perslid_naam_full FROM bez_bezoekers b, bez_afspraak a, prs_v_perslid_fullnames pf, alg_locatie l WHERE a.bez_afspraak_key = b.bez_afspraak_key AND FLX.getflex ('BEZ', 1000, b.bez_bezoekers_key) = 1 AND a.alg_locatie_key = l.alg_locatie_key AND a.bez_afspraak_host_key = pf.prs_perslid_key AND TRUNC(bez_afspraak_datum) = TRUNC(SYSDATE); -- view voor de informatiezuil om informatie van bezoekers via de api op te vragen CREATE OR REPLACE VIEW lpnl_v_qr_visitor AS SELECT pf.prs_perslid_naam_friendly naam, b.bez_afspraak_naam bezoeker, b.bez_afspraak_bedrijf bedrijf, a.bez_afspraak_datum datumtijd_begin, a.bez_afspraak_eind datumtijd_eind, FLX.getflex ('BEZ', 1020, b.bez_bezoekers_key) qr, b.bez_bezoekers_key key FROM bez_bezoekers b, bez_afspraak a, prs_v_perslid_fullnames pf WHERE b.bez_afspraak_key = a.bez_afspraak_key AND a.BEZ_AFSPRAAK_HOST_KEY = pf.prs_perslid_key; CREATE OR REPLACE VIEW lpnl_v_noti_visitor AS SELECT NULL sender, NULL receiver, 'Op bezoek bij Ayvens ' || TO_CHAR (bez_afspraak_datum, 'DD-MM-YYYY') || ' , ' || TO_CHAR (bez_afspraak_datum, 'HH24:MI') text, 'CUST01' code, a.bez_afspraak_key key, bez_bezoekers_key xkey, bez_bezoekers_email xemail, NULL xmobile FROM bez_afspraak a, bez_bezoekers b WHERE a.bez_afspraak_key = b.bez_afspraak_key AND bez_bezoekers_email IS NOT NULL AND a.bez_afspraak_datum < fac.datumtijdplusuitvoertijd (SYSDATE, 3, 'D') AND a.bez_afspraak_datum > TRUNC(SYSDATE) AND NOT EXISTS (SELECT 1 FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND t.fac_tracking_refkey = a.bez_afspraak_key AND fac_srtnotificatie_code = 'CUST01' AND b.bez_bezoekers_aanmaak < fac_tracking_datum); -- Dagelijkse taak CREATE OR REPLACE PROCEDURE lpnl_daily AS BEGIN LPNL.anonimize; LPNL.verleng_contract; END; / CREATE OR REPLACE PROCEDURE lpnl_pre_putorders AS BEGIN LPNL.mld_ord_after_insert; -- Locatie Rotterdam wil graag van iedere bezoeker een email ontvangen. Dat kan via systeem adres maar daar ziet voor -- bezoekers nog geen restrictie op locatie op. Daarom worden ongewenste notificaties op andere locaties hier verwijderd.\ -- LPNL#90079 DELETE fac_notificatie WHERE fac_notificatie_key IN (SELECT fac_notificatie_key FROM bez_afspraak a, fac_notificatie n WHERE n.fac_notificatie_refkey = a.bez_afspraak_key AND n.fac_srtnotificatie_key IN (30, 31) -- BEZMUT, BEZUPD AND alg_locatie_key <> 41 -- Rotterdam AND fac_notificatie_systeemadres IS NOT NULL); END; / ------ payload end ------ SET DEFINE OFF BEGIN adm.systrackscriptId ('$Id$', 0); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile