-- -- $Id$ -- -- Script containing customer specific configuration sql statements for PCHW: PCH Gemeente Westland DEFINE thisfile = 'PCHW.SQL' DEFINE dbuser = '^PCHW' 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 PROCEDURE pchw_import_perslid (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR(255); BEGIN v_seq_of_columns := '0;0;0;4;5;6;7;8;9;11;10;0;0;0;0;13;14;15;0;17;16;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46'; prs.import_perslid(p_import_key, v_seq_of_columns, 'LOCATIECODE;GEBOUWCODE;BOUWLAAGVOLGNUMMER;RUIMTENUMMER;WERKPLEKVOLGNUMMER;OMSCHRIJVING;AFDELINGSCODE;PERSOONACHTERNAAM;TUSSENVOEGSEL;VOORLETTERS;VOORNAAM;TITEL/AANHEF;TELEFOONNUMMER;MOBIEL;EMAIL;FUNCTIE;PERSONEELSNUMMER;LOGINNAAM;PASSWORD%'); -- Het personeelsnummer gebruiken we ook als login. Inloggen via SSO vindt plaats op emailadres. -- Doordat de import soms door Excel gehaald wordt zetten we zelf de voorloopnullen er weer in. UPDATE fac_imp_perslid SET prs_perslid_oslogin = prs_perslid_nr, prs_perslid_nr = TO_CHAR (prs_perslid_nr, 'FM000000000'); END pchw_import_perslid; / CREATE OR REPLACE PROCEDURE pchw_update_perslid ( p_import_key IN NUMBER ) IS CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf WHERE p.prs_perslid_nr = i.prs_perslid_nr(+) AND pf.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_nr IS NOT NULL AND i.prs_perslid_nr IS NULL AND p.prs_perslid_verwijder IS NULL ORDER BY 2; CURSOR c_imp IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key; v_perslid_key NUMBER; v_perslid_nr VARCHAR2(100); v_kostenplaats_nr VARCHAR2(100); v_count NUMBER; BEGIN -- generic update SELECT count(*) INTO v_count FROM fac_imp_perslid; IF v_count < 500 THEN fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')', 'Zie Specificatie' ); RETURN; END IF; prs.update_perslid (p_import_key, 'NR', NULL); -- 2 maanden na het zetten van de uitdienst datum worden de medewerkers daadwerkelijk verwijderd. FOR rec IN c_del LOOP BEGIN prs.delete_perslid (p_import_key, rec.prs_perslid_key); END; END LOOP; INSERT INTO prs_perslidkostenplaats (prs_perslid_key, prs_perslidkostenplaats_boeken) SELECT prs_perslid_key, 1 FROM prs_v_aanwezigperslid p WHERE NOT EXISTS ( SELECT pk.prs_perslid_key FROM prs_perslidkostenplaats pk WHERE p.prs_perslid_key = pk.prs_perslid_key); END pchw_update_perslid; / CREATE OR REPLACE PROCEDURE pchw_import_organisatie (p_import_key IN NUMBER) AS BEGIN fac_import_organisatie (p_import_key); END pchw_import_organisatie; / CREATE OR REPLACE PROCEDURE pchw_update_organisatie (p_import_key IN NUMBER) AS CURSOR c_del IS SELECT prs_afdeling_key, prs_afdeling_upper, prs_afdeling_omschrijving FROM prs_v_afdeling WHERE prs_afdeling_verwijder IS NULL AND prs_bedrijf_key = 121 AND prs_afdeling_upper NOT IN (SELECT prs_afdeling_naam FROM fac_imp_organisatie) ORDER BY niveau DESC; CURSOR c_kpn IS SELECT b.prs_afdeling_key, a1.prs_kostenplaats_key, prs_afdeling_naam, prs_afdeling_omschrijving FROM prs_v_afdeling_boom b, prs_afdeling a1 WHERE b.prs_bedrijf_key = 121 -- Gemeente Westland AND b.prs_afdeling_key1 = a1.prs_afdeling_key AND b.niveau <> 1; BEGIN fac_update_organisatie (p_import_key); -- Vervallen afdeling proberen we te verwijderen FOR rec IN c_del LOOP BEGIN UPDATE prs_afdeling SET prs_afdeling_verwijder = SYSDATE WHERE prs_afdeling_key = rec.prs_afdeling_key; EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'W', 'Afdeling kan niet verwijderd worden:' || rec.prs_afdeling_key || ' Code:' || rec.prs_afdeling_upper || ' Omschrijving:' || rec.prs_afdeling_omschrijving, ''); END; END LOOP; -- aanpassen vqan kostenplaatsen bij afdelingen. De kostenplaatsen worden bij het top element vastgelegd. -- De kinderen moeten deze kostenplaats dus erven. FOR rec IN c_kpn LOOP BEGIN UPDATE prs_afdeling SET prs_kostenplaats_key = rec.prs_kostenplaats_key WHERE prs_afdeling_key = rec.prs_afdeling_key; EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'W', 'Kostenplaats kan niet aangepast worden: Code:' || rec.prs_afdeling_naam || ' Omschrijving:' || rec.prs_afdeling_omschrijving, ''); END; END LOOP; END pchw_update_organisatie; / -- Importfuncties onroerendgoed vanaf verdieping. CREATE OR REPLACE PROCEDURE pchw_import_onrgoed2 (p_import_key IN NUMBER) AS BEGIN UPDATE fac_imp_file SET fac_imp_file_line = REPLACE (fac_imp_file_line, CHR (160), ' ') WHERE fac_import_key = p_import_key; fac_import_onrgoed2 (p_import_key); UPDATE fac_imp_onrgoed2 SET alg_srtruimte_omschrijving = TRIM(alg_srtruimte_omschrijving); END; / CREATE OR REPLACE PROCEDURE pchw_update_onrgoed2 (p_import_key IN NUMBER) AS BEGIN fac_update_onrgoed2 (p_import_key); -- plaats de ruimte type codering in het code veld. UPDATE alg_srtruimte SET alg_srtruimte_code = SUBSTR (alg_srtruimte_omschrijving, 1, 7) WHERE alg_srtruimte_code IS NULL; -- pas de openingstijden van de ruimten aan waar een 24/7 regime geldt. Verder geldt voor -- deze ruimten ook dat de sla in het weekend door telt. --UPDATE alg_ruimte -- SET -- (alg_ruimte_beginuur, -- alg_ruimte_einduur, -- alg_ruimte_werkdagen -- ) = -- (SELECT DECODE (SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2), '24', 0, NULL), -- DECODE (SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2), '24', 24, NULL), -- DECODE (SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2), '24', 0, NULL) -- FROM alg_onrgoedkenmerk -- WHERE alg_kenmerk_key = 1000 AND alg_onrgoed_key = alg_ruimte_key); END; / -- Importfunctie voor THT waardes bij meldingen CREATE OR REPLACE PROCEDURE pchw_import_storing_regime ( p_import_key IN NUMBER) AS CURSOR c_cursor IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; v_newline VARCHAR2 (1000); v_aanduiding VARCHAR2 (1000); -- Import line v_fielddelimitor VARCHAR2 (1); -- Field seperator v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_found BOOLEAN; v_error NUMBER(1); -- De importvelden v_dummy VARCHAR2(100); v_r_codering VARCHAR2(100); v_omschrijving VARCHAR2(100); v_ruimten VARCHAR2(100); v_storing_os VARCHAR2(100); v_stdmelding VARCHAR2(100); v_vakgroep VARCHAR2(100); v_vakgroeptype VARCHAR2(100); v_tht_os VARCHAR2(100); v_tht_regime VARCHAR2(100); v_tht VARCHAR2(100); v_tht_eenheid VARCHAR2(100); v_bk VARCHAR2(100); v_vk VARCHAR2(100); v_srtruimte_key NUMBER; v_stdmelding_key NUMBER; v_discipline_key NUMBER; v_srtdiscipline_key NUMBER; BEGIN -- Verwijder nbsp karakters. UPDATE fac_imp_file SET fac_imp_file_line = REPLACE (fac_imp_file_line, CHR (160), ' ') WHERE fac_import_key = p_import_key; -- Init header_found := FALSE; v_fielddelimitor := ';'; -- Clear my previous imported rows DELETE FROM pchw_imp_storing_regime; FOR rec1 IN c_cursor LOOP BEGIN v_newline := REPLACE(rec1.fac_imp_file_line, CHR(160), ' '); v_aanduiding := SUBSTR (v_newline, 1, 200); v_error := 0; IF SUBSTR (v_newline, 1, 3) = '?' THEN -- EF BB BF aangetroffen fac.imp_writelog (p_import_key, 'W', 'Byte Order Mark aangetroffen', 'Bestand heeft onbehandeld UTF-8 formaat.'); v_newline := SUBSTR (v_newline, 4); END IF; v_errormsg := 'Inlezen velden'; fac.imp_getfield (v_newline, v_fielddelimitor, v_r_codering); fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_ruimten); fac.imp_getfield (v_newline, v_fielddelimitor, v_storing_os); fac.imp_getfield (v_newline, v_fielddelimitor, v_stdmelding); fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroep); fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroeptype); fac.imp_getfield (v_newline, v_fielddelimitor, v_tht_os); fac.imp_getfield (v_newline, v_fielddelimitor, v_tht_regime); fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- regime eenheid fac.imp_getfield (v_newline, v_fielddelimitor, v_tht); fac.imp_getfield (v_newline, v_fielddelimitor, v_tht_eenheid); fac.imp_getfield (v_newline, v_fielddelimitor, v_bk); fac.imp_getfield (v_newline, v_fielddelimitor, v_vk); -- Skip until a valid header is found v_errormsg := 'Controleer de header'; IF UPPER (rec1.fac_imp_file_line) LIKE 'R CODERING;OMSCHRIJVING;RUIMTEN;STORING OS;STANDAARD MELDING;VAKGROEP;VAKGROEPTYPE;THT OS;HERSTELREGIME;REGIME EENHEID;THT;THT EENHEID;BK;VK%' THEN -- Sla de kopregel over. header_found := TRUE; ELSIF (header_found AND v_vakgroep IS NOT NULL) THEN -- Kennen we de ruimtecodering v_errormsg := 'Controleer ruimtesoort'; v_r_codering := REPLACE(v_r_codering, CHR(160)); IF v_r_codering IS NOT NULL THEN v_r_codering := TRIM(v_r_codering); BEGIN SELECT alg_srtruimte_key INTO v_srtruimte_key FROM alg_srtruimte sr WHERE alg_srtruimte_verwijder IS NULL AND UPPER (sr.alg_srtruimte_code) = UPPER (v_r_codering); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Ruimtecodering niet gevonden: ' || v_r_codering, v_aanduiding); v_srtruimte_key := NULL; v_error := 1; END; ELSE v_srtruimte_key := NULL; END IF; v_errormsg := 'Controleer vakgroeptype'; BEGIN v_vakgroeptype := TRIM(v_vakgroeptype); SELECT ins_srtdiscipline_key INTO v_srtdiscipline_key FROM ins_srtdiscipline sd WHERE sd.ins_srtdiscipline_module = 'MLD' AND sd.ins_srtdiscipline_verwijder IS NULL AND UPPER (sd.ins_srtdiscipline_omschrijving) = UPPER (v_vakgroeptype); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Vakgroeptype niet gevonden: ' || v_vakgroeptype, v_aanduiding); v_srtdiscipline_key := NULL; v_error := 1; END; v_errormsg := 'Controleer vakgroep'; BEGIN v_vakgroep := TRIM(v_vakgroep); SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline d WHERE d.ins_discipline_module = 'MLD' AND d.ins_discipline_verwijder IS NULL AND d.ins_srtdiscipline_key = v_srtdiscipline_key AND UPPER (d.ins_discipline_omschrijving) = UPPER (v_vakgroep); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Vakgroep niet gevonden: ' || v_vakgroep, v_aanduiding); v_discipline_key := NULL; v_error := 1; END; v_errormsg := 'Controleer stdmelding'; IF v_stdmelding IS NOT NULL THEN v_stdmelding := SUBSTR(TRIM(v_stdmelding),1,60); BEGIN SELECT mld_stdmelding_key INTO v_stdmelding_key FROM mld_stdmelding std WHERE std.mld_stdmelding_verwijder IS NULL AND std.mld_ins_discipline_key = v_discipline_key AND UPPER (std.mld_stdmelding_omschrijving) = UPPER (v_stdmelding); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Standaard melding niet gevonden: ' || v_stdmelding, v_aanduiding); v_stdmelding_key := NULL; v_error := 1; END; ELSE v_stdmelding_key := NULL; END IF; v_errormsg := 'Controleer THT'; IF fac.safe_to_number (v_tht) IS NULL AND v_tht IS NOT NULL THEN fac.imp_writelog (p_import_key, 'E', 'THT niet geldig: ' || v_tht, v_aanduiding); v_error := 1; END IF; v_errormsg := 'Controleer THT eenheid'; v_tht_eenheid := TRIM(UPPER(v_tht_eenheid)); IF v_tht_eenheid NOT IN ('UUR', 'MIN', 'DAG') AND v_tht_eenheid IS NOT NULL THEN fac.imp_writelog ( p_import_key, 'E', 'THT eehheid niet geldig: ' || v_tht_eenheid, v_aanduiding); v_error := 1; END IF; v_errormsg := 'Controleer basiskorting'; IF fac.safe_to_number (v_bk) IS NULL AND v_bk IS NOT NULL THEN fac.imp_writelog (p_import_key, 'E', 'Basiskorting niet geldig: ' || v_bk, v_aanduiding); v_error := 1; END IF; v_errormsg := 'Controleer variabele korting'; IF fac.safe_to_number (v_vk) IS NULL AND v_vk IS NOT NULL THEN fac.imp_writelog (p_import_key, 'E', 'variabele korting niet geldig: ' || v_vk, v_aanduiding); v_error := 1; END IF; IF v_error = 0 THEN INSERT INTO pchw_imp_storing_regime (r_codering, omschrijving, ruimten, storing_os, stdmelding, vakgroep, vakgroeptype, tht_os, tht_regime, tht, tht_eenheid, bk, vk, alg_srtruimte_key, mld_stdmelding_key, mld_discipline_key, ins_srtdiscipline_key) VALUES (v_r_codering, v_omschrijving, v_ruimten, v_storing_os, v_stdmelding, v_vakgroep, v_vakgroeptype, v_tht_os, v_tht_regime, v_tht, v_tht_eenheid, v_bk, v_vk, v_srtruimte_key, v_stdmelding_key, v_discipline_key, v_srtdiscipline_key); END IF; COMMIT; END IF; END; END loop; IF NOT header_found THEN fac.imp_writelog ( p_import_key, 'E', 'Geen geldige header aangetroffen', 'Bestand is geen geldig melding regime importbestand.'); END IF; EXCEPTION WHEN OTHERS THEN v_aanduiding := v_errormsg || ' - ' || v_aanduiding; 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', SUBSTR (v_errormsg, 1, 1000), v_aanduiding); -- maak de importtabel leeg om te voorkomen dat er halve bestanden ingelezen worden. DELETE FROM pchw_imp_storing_regime; END; / CREATE OR REPLACE PROCEDURE pchw_update_storing_regime ( p_import_key IN NUMBER) AS CURSOR c IS SELECT sr.r_codering, stdmelding, vakgroep, vakgroeptype, fac.safe_to_number (bk) bk, fac.safe_to_number (vk) vk, alg_srtruimte_key, mld_stdmelding_key, mld_discipline_key, ins_srtdiscipline_key, tht_regime, DECODE (tht_eenheid, 'UUR', 'U', 'MIN', 'U', 'DAG', 'D') eenheid, DECODE (tht_eenheid, 'UUR', tht, 'MIN', ROUND (tht / 60, 5), 'DAG', tht) tijdsduur FROM pchw_imp_storing_regime sr; CURSOR c_del IS SELECT ssr.mld_stdmsrtruimte_key, d.ins_discipline_omschrijving, std.mld_stdmelding_omschrijving, sr.alg_srtruimte_code FROM mld_stdmsrtruimte ssr, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd, alg_srtruimte sr WHERE NOT EXISTS (SELECT mld_stdmelding_key FROM pchw_imp_storing_regime sm WHERE sm.mld_stdmelding_key = ssr.mld_stdmelding_key AND sm.alg_srtruimte_key = ssr.alg_srtruimte_key) AND NOT EXISTS (SELECT std.mld_stdmelding_key FROM pchw_imp_storing_regime sm, mld_stdmelding std WHERE sm.mld_discipline_key = std.mld_ins_discipline_key AND std.mld_stdmelding_key = ssr.mld_stdmelding_key AND sm.alg_srtruimte_key = ssr.alg_srtruimte_key AND sm.mld_stdmelding_key IS NULL) AND ssr.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND sd.ins_srtdiscipline_omschrijving IN (SELECT DISTINCT vakgroeptype FROM pchw_imp_storing_regime) AND ssr.alg_srtruimte_key = sr.alg_srtruimte_key; CURSOR c_upd_std IS SELECT DISTINCT mld_stdmelding_key, sr1.mld_stdmsrtruimte_t_uitvtijd.eenheid eenheid, sr1.mld_stdmsrtruimte_t_uitvtijd.tijdsduur tijdsduur FROM (SELECT mld_stdmelding_key, DECODE (sr.mld_stdmsrtruimte_t_uitvtijd.eenheid, 'U', 0, 'D', 100) + sr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur duur, sr.mld_stdmsrtruimte_t_uitvtijd FROM mld_stdmsrtruimte sr) sr1 WHERE NOT EXISTS (SELECT * FROM (SELECT mld_stdmelding_key, DECODE (sr.mld_stdmsrtruimte_t_uitvtijd.eenheid, 'U', 0, 'D', 100) + sr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur duur FROM mld_stdmsrtruimte sr) sr2 WHERE sr1.mld_stdmelding_key = sr2.mld_stdmelding_key AND sr1.duur < sr2.duur); v_newline VARCHAR2 (1000); v_aanduiding VARCHAR2 (1000); -- Import line v_fielddelimitor VARCHAR2 (1); -- Field seperator v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; v_tijdsduur NUMBER (10, 5); v_eenheid VARCHAR2 (1); v_basiskorting NUMBER; v_varkorting NUMBER; v_stdmsrtruimte_key NUMBER; v_stdmelding_omschrijving VARCHAR2 (60); v_begin NUMBER; v_eind NUMBER; v_stdmelding_regime NUMBER; BEGIN SELECT COUNT ( * ) INTO v_count FROM pchw_imp_storing_regime; IF v_count < 1000 AND 1=0 -- Toch maar even niet testen. De lijst met Kq meldingen bevat maar 17 records THEN fac.imp_writelog ( p_import_key, 'E', 'Aantal ingelezen regels: ' || v_count || ' is te weing.', NULL); RETURN; END IF; FOR rec IN c LOOP v_aanduiding := rec.r_codering || '-' || rec.vakgroep || '/' || rec.stdmelding || ') ' || v_tijdsduur || ' ' || v_eenheid || ' ' || v_basiskorting || '-' || v_varkorting; IF rec.tht_regime = '13' THEN v_begin := 7; v_eind := 20; v_stdmelding_regime := 2; -- openingstijden ELSE v_begin := 0; v_eind := 24; v_stdmelding_regime := 3; -- 24/7 END IF; IF rec.mld_stdmelding_key IS NOT NULL THEN -- de hersteltijden gelden niet voor alle meldingen in de vakgroep. IF rec.alg_srtruimte_key IS NULL THEN -- deze melding is gelijk voor alle ruimtesoorten. We gaan dit dus bij de stdmelding aanpassen. v_errormsg := 'Zoeken stdmelding'; SELECT std.mld_stdmelding_t_uitvoertijd.tijdsduur tijdsduur, std.mld_stdmelding_t_uitvoertijd.eenheid eenheid, COALESCE (mld_stdmelding_malusbasis, 0) mld_stdmelding_malusbasis, COALESCE (mld_stdmelding_malus, 0) mld_stdmelding_malus INTO v_tijdsduur, v_eenheid, v_basiskorting, v_varkorting FROM mld_stdmelding std WHERE std.mld_stdmelding_key = rec.mld_stdmelding_key AND std.mld_stdmelding_verwijder IS NULL; IF v_tijdsduur <> rec.tijdsduur OR v_eenheid <> rec.eenheid OR v_basiskorting <> rec.bk OR v_varkorting <> rec.vk THEN fac.imp_writelog ( p_import_key, 'I', 'Gewijzigd stdm1 (' || rec.r_codering || '-' || rec.vakgroep || '/' || rec.stdmelding || ')', v_tijdsduur || ' ' || v_eenheid || ' ' || v_basiskorting || '-' || v_varkorting || ' -> ' || rec.tijdsduur || ' ' || rec.eenheid || ' ' || rec.bk || '-' || rec.vk); v_errormsg := 'Aanpassen stdmelding'; UPDATE mld_stdmelding SET mld_stdmelding_t_uitvoertijd = mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), mld_stdmelding_malus = rec.vk, mld_stdmelding_malusbasis = rec.bk, mld_stdmelding_regime = v_stdmelding_regime WHERE mld_stdmelding_key = rec.mld_stdmelding_key; FOR rec_sr IN (SELECT * FROM mld_stdmsrtruimte WHERE mld_stdmelding_key = rec.mld_stdmelding_key) LOOP fac.imp_writelog ( p_import_key, 'I', 'Verwijderd (' || rec.r_codering || '-' || rec.vakgroep || '/' || rec.stdmelding || ')', NULL); v_errormsg := 'Verwijderen stdmsrtruimte'; DELETE mld_stdmsrtruimte WHERE mld_stdmsrtruimte_key = rec_sr.mld_stdmsrtruimte_key; END LOOP; END IF; ELSE -- Stdmelding en srtruimte zijn ingevuld. Dus een upsert op het mld_stdmsrtruimte record uitvoeren BEGIN v_errormsg := 'Zoeken stdmsrtruimte'; SELECT stdsr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur tijdsduur, stdsr.mld_stdmsrtruimte_t_uitvtijd.eenheid eenheid, COALESCE (mld_stdmsrtruimte_malusbasis, 0) mld_stdmsrtruimte_malusbasis, COALESCE (mld_stdmsrtruimte_malus, 0) mld_stdmsrtruimte_malus, mld_stdmsrtruimte_key INTO v_tijdsduur, v_eenheid, v_basiskorting, v_varkorting, v_stdmsrtruimte_key FROM mld_stdmsrtruimte stdsr WHERE stdsr.mld_stdmelding_key = rec.mld_stdmelding_key AND stdsr.alg_srtruimte_key = rec.alg_srtruimte_key; IF v_tijdsduur <> rec.tijdsduur OR v_eenheid <> rec.eenheid OR v_basiskorting <> rec.bk OR v_varkorting <> rec.vk THEN fac.imp_writelog ( p_import_key, 'I', 'Gewijzigd stdmsr1 (' || rec.r_codering || '-' || rec.vakgroep || '/' || rec.stdmelding || ')', v_tijdsduur || ' ' || v_eenheid || ' ' || v_basiskorting || '-' || v_varkorting || ' -> ' || rec.tijdsduur || ' ' || rec.eenheid || ' ' || rec.bk || '-' || rec.vk); v_errormsg := 'Aanpassen stdmsrtruimte'; UPDATE mld_stdmsrtruimte SET mld_stdmsrtruimte_t_uitvtijd = mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), mld_stdmsrtruimte_malus = rec.vk, mld_stdmsrtruimte_malusbasis = rec.bk, mld_stdmsrtruimte_beginuur1 = v_begin, mld_stdmsrtruimte_einduur1 = v_eind WHERE mld_stdmsrtruimte_key = v_stdmsrtruimte_key; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'I', 'Toegevoegd (' || rec.r_codering || '-' || rec.vakgroep || '/' || rec.stdmelding || ')', rec.tijdsduur || ' ' || rec.eenheid || ' ' || rec.bk || '-' || rec.vk); v_errormsg := 'Toevoegen stdmsrtruimte'; INSERT INTO mld_stdmsrtruimte (mld_stdmsrtruimte_t_uitvtijd, mld_stdmsrtruimte_malus, mld_stdmsrtruimte_malusbasis, alg_srtruimte_key, mld_stdmelding_key, mld_stdmsrtruimte_beginuur1, mld_stdmsrtruimte_einduur1) VALUES (mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), rec.vk, rec.bk, rec.alg_srtruimte_key, rec.mld_stdmelding_key, v_begin, v_eind); END; END IF; ELSE -- de standaardmelding is null. De aanpassingen gelden dus voor alle meldingen die niet in de lijst voorkomen. IF rec.alg_srtruimte_key IS NULL THEN -- deze melding is gelijk voor alle ruimtesoorten. We gaan dit dus bij de stdmelding aanpassen. FOR rec_std IN (SELECT * FROM mld_stdmelding std WHERE std.mld_ins_discipline_key = rec.mld_discipline_key AND std.mld_stdmelding_verwijder IS NULL AND std.mld_stdmelding_key NOT IN (SELECT i.mld_stdmelding_key FROM pchw_imp_storing_regime i WHERE COALESCE (i.mld_stdmelding_key, -1) = std.mld_stdmelding_key)) LOOP v_errormsg := 'Zoeken stdmelding'; SELECT std.mld_stdmelding_t_uitvoertijd.tijdsduur tijdsduur, std.mld_stdmelding_t_uitvoertijd.eenheid eenheid, COALESCE (mld_stdmelding_malusbasis, 0) mld_stdmelding_malusbasis, COALESCE (mld_stdmelding_malus, 0) mld_stdmelding_malus, mld_stdmelding_omschrijving INTO v_tijdsduur, v_eenheid, v_basiskorting, v_varkorting, v_stdmelding_omschrijving FROM mld_stdmelding std WHERE std.mld_stdmelding_key = rec_std.mld_stdmelding_key; IF v_tijdsduur <> rec.tijdsduur OR v_eenheid <> rec.eenheid OR v_basiskorting <> rec.bk OR v_varkorting <> rec.vk THEN fac.imp_writelog ( p_import_key, 'I', 'Gewijzigd stdm2 (' || rec.r_codering || '-' || rec.vakgroep || '/' || v_stdmelding_omschrijving || ')', v_tijdsduur || ' ' || v_eenheid || ' ' || v_basiskorting || '-' || v_varkorting || ' -> ' || rec.tijdsduur || ' ' || rec.eenheid || ' ' || rec.bk || '-' || rec.vk); v_errormsg := 'Aanpassen stdmelding'; UPDATE mld_stdmelding SET mld_stdmelding_t_uitvoertijd = mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), mld_stdmelding_malus = rec.vk, mld_stdmelding_malusbasis = rec.bk, mld_stdmelding_regime = v_stdmelding_regime WHERE mld_stdmelding_key = rec_std.mld_stdmelding_key; END IF; END LOOP; ELSE -- Ruimte is gevuld maar standaardmelding niet. We gaan nu voor alle bestaande standaardmeldingen en ruimtesoorten mld_stdmsrtruimte records aanmaken of bijwerken. FOR rec_stdsr IN (SELECT std.mld_stdmelding_key, std.mld_stdmelding_omschrijving, stdmsr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur tijdsduur, stdmsr.mld_stdmsrtruimte_t_uitvtijd.eenheid eenheid, COALESCE (mld_stdmsrtruimte_malusbasis, 0) mld_stdmsrtruimte_malusbasis, COALESCE (mld_stdmsrtruimte_malus, 0) mld_stdmsrtruimte_malus, mld_stdmsrtruimte_key FROM mld_stdmelding std, (SELECT * FROM mld_stdmsrtruimte WHERE alg_srtruimte_key = rec.alg_srtruimte_key) stdmsr WHERE std.mld_ins_discipline_key = rec.mld_discipline_key AND std.mld_stdmelding_verwijder IS NULL AND std.mld_stdmelding_key = stdmsr.mld_stdmelding_key(+)) LOOP v_tijdsduur := rec_stdsr.tijdsduur; v_eenheid := rec_stdsr.eenheid; v_basiskorting := rec_stdsr.mld_stdmsrtruimte_malusbasis; v_varkorting := rec_stdsr.mld_stdmsrtruimte_malus; v_stdmelding_omschrijving := rec_stdsr.mld_stdmelding_omschrijving; v_stdmsrtruimte_key := rec_stdsr.mld_stdmsrtruimte_key; IF rec_stdsr.mld_stdmsrtruimte_key IS NOT NULL THEN -- Update IF v_tijdsduur <> rec.tijdsduur OR v_eenheid <> rec.eenheid OR v_basiskorting <> rec.bk OR v_varkorting <> rec.vk THEN fac.imp_writelog ( p_import_key, 'I', 'Gewijzigd stdmsr2(' || v_stdmsrtruimte_key || '*' || rec.r_codering || '-' || rec.vakgroep || '/' || v_stdmelding_omschrijving || ')', v_tijdsduur || ' ' || v_eenheid || ' ' || v_basiskorting || '-' || v_varkorting || ' -> ' || rec.tijdsduur || ' ' || rec.eenheid || ' ' || rec.bk || '-' || rec.vk); v_errormsg := 'Aanpassen stdmsrtruimte'; UPDATE mld_stdmsrtruimte SET mld_stdmsrtruimte_t_uitvtijd = mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), mld_stdmsrtruimte_malus = rec.vk, mld_stdmsrtruimte_malusbasis = rec.bk, mld_stdmsrtruimte_beginuur1 = v_begin, mld_stdmsrtruimte_einduur1 = v_eind WHERE mld_stdmsrtruimte_key = v_stdmsrtruimte_key; END IF; ELSE -- Insert fac.imp_writelog ( p_import_key, 'I', 'Toegevoegd (' || rec.r_codering || '-' || rec.vakgroep || '/' || v_stdmelding_omschrijving || ')', rec.tijdsduur || ' ' || rec.eenheid || ' ' || rec.bk || '-' || rec.vk); v_errormsg := 'Toevoegen stdmsrtruimte'; INSERT INTO mld_stdmsrtruimte (mld_stdmsrtruimte_t_uitvtijd, mld_stdmsrtruimte_malus, mld_stdmsrtruimte_malusbasis, alg_srtruimte_key, mld_stdmelding_key, mld_stdmsrtruimte_beginuur1, mld_stdmsrtruimte_einduur1) VALUES (mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), rec.vk, rec.bk, rec.alg_srtruimte_key, rec_stdsr.mld_stdmelding_key, v_begin, v_eind); END IF; END LOOP; END IF; END IF; END LOOP; FOR rec IN c_del LOOP fac.imp_writelog ( p_import_key, 'I', 'Verwijderd (' || rec.alg_srtruimte_code || '-' || rec.ins_discipline_omschrijving || '/' || rec.mld_stdmelding_omschrijving || ')', NULL); DELETE mld_stdmsrtruimte WHERE mld_stdmsrtruimte_key = rec. mld_stdmsrtruimte_key; END LOOP; -- Als de hersteltijd per ruimtesoort geldt dan moeten we de vlag afhankelijk ook zetten bij de stdmelding. UPDATE mld_stdmelding std SET mld_stdmelding_afhankelijk = (SELECT DECODE (COUNT ( * ), 0, 0, 1) FROM mld_stdmsrtruimte sr WHERE sr.mld_stdmelding_key = std.mld_stdmelding_key); -- Als er een uitsplitsing is naar ruimtesoort dan moeten we toch de default uitvoertijd bij de stdmelding -- invullen. Anders wordt de verkeerde eenheid bij respijt getoond. FOR rec IN c_upd_std LOOP UPDATE mld_stdmelding SET mld_stdmelding_t_uitvoertijd = mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid) WHERE mld_stdmelding_key = rec.mld_stdmelding_key; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN v_aanduiding := v_errormsg || ' - ' || v_aanduiding; 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', SUBSTR (v_errormsg, 1, 1000), v_aanduiding); END; / CREATE OR REPLACE PROCEDURE pchw_import_kenmerken ( p_import_key IN NUMBER) AS CURSOR c_cursor IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; v_newline VARCHAR2(1000); v_aanduiding VARCHAR2(1000); -- Import line v_fielddelimitor VARCHAR2(1); -- Field seperator v_errormsg VARCHAR(200); v_errorhint VARCHAR(200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2(200); header_found BOOLEAN; v_error NUMBER(1); v_dummy VARCHAR2(100); -- De importvelden v_stdmelding VARCHAR2(100); v_vakgroep VARCHAR2(100); v_vakgroeptype VARCHAR2(100); v_kenmerk VARCHAR2(100); v_usrtab_omschrijving VARCHAR2(30); v_stdmelding_key NUMBER; v_discipline_key NUMBER; v_srtdiscipline_key NUMBER; BEGIN -- Init header_found := FALSE; v_fielddelimitor := ';'; -- Clear my previous imported rows DELETE FROM pchw_imp_kenmerken; FOR rec1 IN c_cursor LOOP BEGIN v_newline := REPLACE(rec1.fac_imp_file_line, CHR(160), ' '); v_aanduiding := SUBSTR (v_newline, 1, 200); v_error := 0; IF SUBSTR (v_newline, 1, 3) = '?' THEN -- EF BB BF aangetroffen fac.imp_writelog (p_import_key, 'W', 'Byte Order Mark aangetroffen', 'Bestand heeft onbehandeld UTF-8 formaat.'); v_newline := SUBSTR (v_newline, 4); END IF; v_errormsg := 'Inlezen velden'; fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- OS code fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroep); fac.imp_getfield (v_newline, v_fielddelimitor, v_stdmelding); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk); -- fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroeptype); -- Skip until a valid header is found v_errormsg := 'Controleer de header'; IF UPPER (rec1.fac_imp_file_line) LIKE 'OS_CODE;VAKGROEP;STANDAARDMELDING;ONDERDEEL;VAKGROEPTYPE%' THEN -- Sla de kopregel over. header_found := TRUE; ELSIF (header_found AND v_vakgroep IS NOT NULL) THEN v_errormsg := 'Controleer vakgroeptype'; BEGIN v_vakgroeptype := TRIM(v_vakgroeptype); SELECT ins_srtdiscipline_key INTO v_srtdiscipline_key FROM ins_srtdiscipline sd WHERE sd.ins_srtdiscipline_module = 'MLD' AND sd.ins_srtdiscipline_verwijder IS NULL AND UPPER (sd.ins_srtdiscipline_omschrijving) = UPPER (v_vakgroeptype); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Vakgroeptype niet gevonden: ' || v_vakgroeptype, v_aanduiding); v_srtdiscipline_key := NULL; v_error := 1; END; v_errormsg := 'Controleer vakgroep'; BEGIN v_vakgroep := TRIM(v_vakgroep); SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline d WHERE d.ins_discipline_module = 'MLD' AND d.ins_discipline_verwijder IS NULL AND d.ins_srtdiscipline_key = v_srtdiscipline_key AND UPPER (d.ins_discipline_omschrijving) = UPPER (v_vakgroep); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Vakgroep niet gevonden: ' || v_vakgroep, v_aanduiding); v_discipline_key := NULL; v_error := 1; END; v_usrtab_omschrijving := SUBSTR(v_vakgroeptype,1,2) || '/' || SUBSTR(v_vakgroep,1,6) || '/' || SUBSTR(v_stdmelding,1,6); v_errormsg := 'Controleer stdmelding'; IF v_stdmelding IS NOT NULL THEN v_stdmelding := SUBSTR(TRIM(v_stdmelding),1,60); BEGIN SELECT mld_stdmelding_key INTO v_stdmelding_key FROM mld_stdmelding std WHERE std.mld_stdmelding_verwijder IS NULL AND std.mld_ins_discipline_key = v_discipline_key AND UPPER (std.mld_stdmelding_omschrijving) = UPPER (v_stdmelding); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Standaard melding niet gevonden: ' || v_stdmelding, v_aanduiding); v_stdmelding_key := NULL; v_error := 1; END; ELSE v_stdmelding_key := NULL; END IF; IF v_error = 0 THEN INSERT INTO pchw_imp_kenmerken (mld_stdmelding_key, fac_usrtab_omschrijving, fac_usrdata_omschrijving) VALUES (v_stdmelding_key, v_usrtab_omschrijving, SUBSTR(v_kenmerk,1,60)); END IF; COMMIT; END IF; END; END loop; IF NOT header_found THEN fac.imp_writelog ( p_import_key, 'E', 'Geen geldige header aangetroffen', 'Bestand is geen geldig kenmerken importbestand.'); END IF; EXCEPTION WHEN OTHERS THEN v_aanduiding := v_errormsg || ' - ' || v_aanduiding; 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', SUBSTR (v_errormsg, 1, 1000), v_aanduiding); -- maak de importtabel leeg om te voorkomen dat er halve bestanden ingelezen worden. DELETE FROM pchw_imp_kenmerken; END; / CREATE OR REPLACE PROCEDURE pchw_update_kenmerken (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM pchw_imp_kenmerken; CURSOR c_hint IS SELECT std.mld_stdmelding_key, kd.fac_usrtab_key FROM mld_srtkenmerk sk, mld_kenmerk k, fac_kenmerkdomein kd, mld_stdmelding std WHERE mld_srtkenmerk_omschrijving LIKE 'Type %' AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND k.mld_stdmelding_key = std.mld_stdmelding_key; v_aanduiding VARCHAR2 (1000); -- Import line v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_usrtab_key fac_usrtab.fac_usrtab_key%TYPE; v_usrdata_key fac_usrdata.fac_usrdata_key%TYPE; v_kenmerkdomein_key fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE; v_srtkenmerk_key mld_srtkenmerk.mld_srtkenmerk_key%TYPE; v_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE; v_srtkenmerk_omschrijving mld_srtkenmerk.mld_srtkenmerk_omschrijving%TYPE; v_hint VARCHAR2 (4000); BEGIN FOR rec IN c LOOP v_aanduiding := rec.mld_stdmelding_key || '-' || rec.fac_usrtab_omschrijving || '/' || rec.fac_usrdata_omschrijving; IF rec.mld_stdmelding_key IS NOT NULL THEN v_errorhint := 'Toevoegen of bepalen fac_usrtab'; BEGIN SELECT fac_usrtab_key INTO v_usrtab_key FROM fac_usrtab WHERE fac_usrtab_naam = rec.fac_usrtab_omschrijving; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO fac_usrtab (fac_usrtab_naam, fac_usrtab_omschrijving) VALUES (rec.fac_usrtab_omschrijving, rec.fac_usrtab_omschrijving) RETURNING fac_usrtab_key INTO v_usrtab_key; END; v_errorhint := 'Toevoegen of bepalen fac_kenmerkdomein'; BEGIN SELECT fac_kenmerkdomein_key INTO v_kenmerkdomein_key FROM fac_kenmerkdomein WHERE fac_kenmerkdomein_verwijder IS NULL AND fac_kenmerkdomein_module = 'MLD' AND fac_usrtab_key = v_usrtab_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO fac_kenmerkdomein (fac_kenmerkdomein_omschrijving, fac_kenmerkdomein_module, fac_kenmerkdomein_kolomnaam, fac_kenmerkdomein_kolomtxt, fac_kenmerkdomein_objectnaam, fac_usrtab_key) VALUES (rec.fac_usrtab_omschrijving, 'MLD', 'FAC_USRDATA_KEY', 'FAC_USRDATA_OMSCHR', 'FAC_USRDATA', v_usrtab_key) RETURNING fac_kenmerkdomein_key INTO v_kenmerkdomein_key; END; v_errorhint := 'Toevoegen of bepalen srtkenmerk_omschrijving'; SELECT SUBSTR('Type ' || ins_discipline_omschrijving || '/' || mld_stdmelding_omschrijving, 1, 50) INTO v_srtkenmerk_omschrijving FROM mld_discipline d, mld_stdmelding std WHERE d.ins_discipline_key = std.mld_ins_discipline_key AND std.mld_stdmelding_key = rec.mld_stdmelding_key; v_errorhint := 'Toevoegen of bepalen mld_srtkenmerk'; BEGIN SELECT mld_srtkenmerk_key INTO v_srtkenmerk_key FROM mld_srtkenmerk WHERE mld_srtkenmerk_verwijder IS NULL AND fac_kenmerkdomein_key = v_kenmerkdomein_key AND mld_srtkenmerk_omschrijving = v_srtkenmerk_omschrijving; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO mld_srtkenmerk (mld_srtkenmerk_omschrijving, mld_srtkenmerk_kenmerktype, fac_kenmerkdomein_key) VALUES (v_srtkenmerk_omschrijving, 'R', v_kenmerkdomein_key) RETURNING mld_srtkenmerk_key INTO v_srtkenmerk_key; END; v_errorhint := 'Toevoegen of bepalen mld_kenmerk'; BEGIN SELECT mld_kenmerk_key INTO v_kenmerk_key FROM mld_kenmerk WHERE mld_kenmerk_verwijder IS NULL AND mld_srtkenmerk_key = v_srtkenmerk_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO mld_kenmerk (mld_srtkenmerk_key, mld_stdmelding_key, mld_kenmerk_niveau, mld_kenmerk_volgnummer) VALUES (v_srtkenmerk_key, rec.mld_stdmelding_key, 'S', 400) RETURNING mld_kenmerk_key INTO v_kenmerk_key; END; v_errorhint := 'Toevoegen of bepalen fac_usrdata'; BEGIN SELECT fac_usrdata_key INTO v_usrdata_key FROM fac_usrdata WHERE fac_usrdata_code = SUBSTR (rec.fac_usrdata_omschrijving, 1, 40) AND fac_usrtab_key = v_usrtab_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr) VALUES (v_usrtab_key, SUBSTR (rec.fac_usrdata_omschrijving, 1, 40), rec.fac_usrdata_omschrijving) RETURNING fac_usrdata_key INTO v_usrdata_key; END; END IF; END LOOP; FOR rec IN c_hint LOOP BEGIN SELECT listagg (u.fac_usrdata_omschr, ' ') WITHIN GROUP (ORDER BY u.fac_usrdata_omschr) AS hint INTO v_hint FROM fac_usrdata u WHERE fac_usrtab_key = rec.fac_usrtab_key; UPDATE mld_stdmelding SET mld_stdmelding_hint = v_hint WHERE mld_stdmelding_key = rec.mld_stdmelding_key; END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN v_aanduiding := v_errormsg || ' - ' || v_aanduiding; 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', SUBSTR (v_errormsg, 1, 1000), v_aanduiding || ' - ' || v_errorhint); END; / CREATE OR REPLACE PROCEDURE pchw_import_mld (p_import_key IN NUMBER) AS BEGIN -- Verwijder nbsp karakters. UPDATE fac_imp_file SET fac_imp_file_line = REPLACE (fac_imp_file_line, CHR (160), ' ') WHERE fac_import_key = p_import_key; fac_import_mld (p_import_key); UPDATE fac_imp_mld SET mld_stdmelding_groep = TRIM(mld_stdmelding_groep); END; / CREATE OR REPLACE PROCEDURE pchw_update_mld (p_import_key IN NUMBER) AS CURSOR c IS SELECT i.*, sd.ins_srtdiscipline_key, d.ins_discipline_key, std.mld_stdmelding_key FROM fac_imp_file i, ins_tab_discipline d, ins_srtdiscipline sd, mld_stdmelding std WHERE sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key AND d.ins_discipline_key = std.mld_ins_discipline_key AND i.fac_imp_file_line LIKE ins_srtdiscipline_omschrijving || ';%;' || ins_discipline_omschrijving || ';' || mld_stdmelding_omschrijving || ';%' AND mld_stdmelding_verwijder IS NULL AND ins_discipline_verwijder IS NULL AND sd.ins_srtdiscipline_verwijder IS NULL AND fac_import_key = p_import_key; v_aanduiding VARCHAR2 (400); v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_regime VARCHAR2 (40); BEGIN fac_update_mld (p_import_key); FOR rec IN c LOOP BEGIN fac.imp_getfield_nr (rec.fac_imp_file_line, ';', 20, v_regime); DBMS_OUTPUT.put_line (v_regime); IF v_regime LIKE '%24%' THEN -- 24/7 UPDATE mld_stdmelding SET mld_stdmelding_regime = 3 WHERE mld_stdmelding_key = rec.mld_stdmelding_key; ELSE -- Openingstijden UPDATE mld_stdmelding SET mld_stdmelding_regime = 2 WHERE mld_stdmelding_key = rec.mld_stdmelding_key; END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('Fout bij bepalen regime uit melding: ' || rec.fac_imp_file_line); END; END LOOP; EXCEPTION WHEN OTHERS THEN v_aanduiding := v_errormsg || ' - ' || v_aanduiding; 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', SUBSTR (v_errormsg, 1, 1000), v_aanduiding); END; / CREATE OR REPLACE PROCEDURE pchw_select_freeze_cat ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c IS SELECT rra.res_rsv_artikel_key, rra.res_rsv_artikel_prijs FROM res_rsv_artikel rra, res_artikel ra WHERE rra.res_artikel_key = ra.res_artikel_key AND SUBSTR (ra.res_artikel_groep, 1, 3) <> 'SVD' AND res_status_bo_key = 5 AND res_rsv_artikel_levering < TRUNC (SYSDATE, 'MONTH') AND res_rsv_artikel_verwijder IS NULL; v_exportdate DATE; v_lastexport DATE; v_cat_totaal NUMBER(11,2); BEGIN v_exportdate := SYSDATE; v_cat_totaal := 0; -- Als ik deze maand al een freeze heb uitgevoerd dan mag ik dat niet nog een keer doen. SELECT MAX(res_rsv_artikel_verwerkt) INTO v_lastexport FROM res_rsv_artikel rra, res_artikel ra WHERE rra.res_artikel_key = ra.res_artikel_key AND SUBSTR (ra.res_artikel_groep, 1, 3) <> 'SVD'; IF TRUNC (v_lastexport, 'MONTH') <> TRUNC(v_exportdate, 'MONTH') OR v_lastexport IS NULL THEN FOR rec IN c LOOP BEGIN UPDATE res_rsv_artikel SET res_status_bo_key = 6 WHERE res_rsv_artikel_key = rec.res_rsv_artikel_key; v_cat_totaal := v_cat_totaal + rec.res_rsv_artikel_prijs; END; END LOOP; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) VALUES ('FREEZE_CAT', 'Catering totaal: ' || v_cat_totaal, 1); ELSE INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) VALUES ('FREEZE_CAT', 'Catering is al bevroren deze maand op ' || TO_CHAR(v_lastexport, 'dd-mm-yyyy hh24:mi:ss'), 1); END IF; COMMIT; END pchw_select_freeze_cat; / CREATE OR REPLACE PROCEDURE pchw_export_freeze_cat ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2) AS BEGIN DELETE fac_rapport WHERE fac_rapport_node = 'FREEZE_CAT'; END; / CREATE OR REPLACE VIEW pchw_v_export_freeze_cat ( result, result_order) AS SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'FREEZE_CAT'; CREATE OR REPLACE VIEW pchw_v_cat_factuur ( res_rsv_ruimte_nr, res_rsv_ruimte_omschrijving, res_rsv_ruimte_van, res_rsv_ruimte_bezoekers, res_rsv_ruimte_extern, prs_perslid_naam_full, prs_afdeling_omschrijving, fcl, res_discipline_omschrijving, res_rsv_artikel_aantal, res_rsv_artikel_omschrijving, res_rsv_artikel_prijs, res_artikel_groep, res_rsv_artikel_verwerkt, periode ) AS SELECT rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr, res_rsv_ruimte_omschrijving, res_rsv_ruimte_van, res_rsv_ruimte_bezoekers, (SELECT fac.safe_to_number (res_kenmerkreservering_waarde) FROM res_kenmerkwaarde kw WHERE kw.res_kenmerk_key = 22 AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key) extern, prs_perslid_naam_full, prs_afdeling_omschrijving, fcl.res_kenmerkreservering_waarde fcl, d.ins_discipline_omschrijving, rra.res_rsv_artikel_aantal, ra.res_artikel_omschrijving, res_rsv_artikel_prijs, DECODE (SUBSTR (ra.res_artikel_groep, 1, 3), 'SVD', 'SVD', 'Banqueting') groep, rra.res_rsv_artikel_verwerkt, TO_CHAR ( ADD_MONTHS (TRUNC (rra.res_rsv_artikel_verwerkt, 'month'), -1), 'YYYY-month') periode FROM res_rsv_artikel rra, prs_perslid p, prs_v_perslid_fullnames pf, prs_afdeling a, (SELECT res_rsv_ruimte_key, res_kenmerkreservering_waarde FROM res_kenmerkwaarde kw, res_kenmerk k WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 23) fcl, -- FCL res_artikel ra, res_rsv_ruimte rrr, res_discipline d WHERE rra.res_artikel_key = ra.res_artikel_key AND ra.res_discipline_key = d.ins_discipline_key AND rra.res_status_bo_key = 6 AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND rrr.res_rsv_ruimte_key = fcl.res_rsv_ruimte_key(+) AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key; -- Procedure om mailberichten van meldingen buiten kantooruren toch in een melding op te kunnen slaan. CREATE OR REPLACE PROCEDURE pchw_processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS v_sender prs_perslid.prs_perslid_key%TYPE; v_melding_key mld_melding.mld_melding_key%TYPE; v_stdmelding_key mld_stdmelding.mld_stdmelding_key%TYPE; errormsg fac_result.fac_result_waarde%TYPE; v_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE; v_ruimte_key alg_ruimte.alg_ruimte_key%TYPE; v_locatie_key alg_locatie.alg_locatie_key%TYPE; v_count NUMBER; v_error NUMBER; v_errormsg VARCHAR2 (100); v_from VARCHAR2 (4000); v_body VARCHAR2 (4000); BEGIN errormsg := '(0x143)'; v_error := 0; v_errormsg := ''; v_locatie_key := 41; -- LGS v_ruimte_key := 8392; -- L.002 Entreehal incl.wachtruimte -- Verwijder de Bounce Address Tag Validation IF pfrom LIKE 'prvs=%' THEN v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1); ELSE v_from := pfrom; END IF; v_body := pbody; -- afzender van een gbs bericht is altijd 4881 (Key van gebruiker Calamiteiten servicedesk) v_sender := 4881; CASE WHEN UPPER (pto) LIKE 'DEGROENESCHAKEL@%' THEN errormsg := '(0x145)'; -- filter nu de essentiele velden uit de mailbody -- vervang cr door lf v_stdmelding_key := fac.safe_to_number (fac.getsetting ('defaultstdmelding')); v_body := REPLACE (v_body, CHR (13), CHR (10)); -- verwijder dubbele lf's v_body := REPLACE (v_body, CHR (10) || CHR (10), CHR (10)); errormsg := '(0x1451)'; -- vind de uitvoertijd bij de stdmelding SELECT mld_stdmelding_t_uitvoertijd INTO v_uitvoertijd FROM mld_stdmelding WHERE mld_stdmelding_key = v_stdmelding_key; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_melding_datum, mld_melding_onderwerp, mld_melding_omschrijving, mld_melding_status, mld_melding_t_uitvoertijd, mld_stdmelding_key, prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed, mld_alg_locatie_key, mld_alg_onroerendgoed_keys) VALUES ('MLD', 4, -- email SYSDATE, psubject, v_body, NULL, v_uitvoertijd, v_stdmelding_key, v_sender, v_sender, NULL, 3, v_locatie_key, v_ruimte_key) RETURNING mld_melding_key INTO v_melding_key; errormsg := '(0x165)'; mld.setmeldingstatus (v_melding_key, 2, v_sender); END CASE; EXCEPTION WHEN OTHERS THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Database fout - Neem contact op met uw systeembeheerder ' || errormsg); fac.writelog ('PROCESSEMAIL', 'E', 'Mail kon niet ingelezen worden afzender:' || pfrom || '[' || errormsg || ']', 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'); END; / CREATE OR REPLACE VIEW pchw_v_prs_kostenplaats ( prs_kostenplaats_omschrijving, prs_kostenplaats_key, prs_kostenplaats_eind ) AS SELECT prs_kostenplaats_key, prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving, prs_kostenplaats_eind FROM prs_kostenplaats WHERE prs_kostenplaats_verwijder IS NULL; CREATE OR REPLACE VIEW pchw_v_prs_srtperslid ( prs_srtperslid_key, prs_srtperslid_omschrijving ) AS SELECT prs_srtperslid_key, prs_srtperslid_omschrijving FROM prs_srtperslid WHERE prs_srtperslid_verwijder IS NULL; CREATE OR REPLACE VIEW pchw_v_prs_afdeling ( prs_afdeling_key, prs_afdeling_omschrijving ) AS SELECT prs_afdeling_key, prs_afdeling_naam || ' ' || prs_afdeling_omschrijving FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL; CREATE OR REPLACE VIEW pchw_v_rap_indices (volgorde, svd, index_waarde) as SELECT 0, 'MON', pchx_mon.get_index_value (SYSDATE,'MON') FROM DUAL UNION ALL SELECT DISTINCT FAC.SAFE_TO_NUMBER(SUBSTR (COALESCE (res_artikel_groep, 'SVD1'), 4)), COALESCE (res_artikel_groep, 'SVD1'), pchx_mon.get_index_value (SYSDATE, COALESCE (res_artikel_groep, 'SVD1')) FROM res_artikel; -- Dashboard views -- Dashboard rapport voor nieuwe meldingen. CREATE OR REPLACE VIEW pchw_v_dashboard_new AS SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key mld_melding_key, pf.prs_perslid_naam_full, mld_melding_datum, std.mld_stdmelding_omschrijving, d.ins_discipline_omschrijving FROM mld_melding m, prs_perslid p, prs_v_perslid_fullnames pf, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE m.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND pchx_mon.klant_melding (m.mld_melding_key) = 1 AND mld_melding_status IN (2, 3); CREATE OR REPLACE VIEW pchw_melding_optijd AS SELECT gereed, DECODE (SIGN (mld_melding_einddatum_std - gereed), -1, 0, 100) optijd FROM (SELECT m.*, fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed FROM mld_melding m) WHERE gereed IS NOT NULL AND ADD_MONTHS(TRUNC(gereed, 'MONTH'),6) > SYSDATE; --Klant specifieke view voor het tonen van het totaal aantal korting per onderwerp over 1 maand CREATE OR REPLACE VIEW pchw_v_totaal_korting_ond ( onderwerp, totaal_index, maand ) AS SELECT onderwerp, SUM (totaal_index), TRUNC (gereed, 'MONTH') FROM (SELECT ins_discipline_omschrijving, mld_stdmeldinggroep_oms onderwerp, totaal_index, gereed FROM (SELECT melding_key, COALESCE (gereed, SYSDATE) gereed, totaal_index, stdmelding_key, indult FROM pchx_v_monitoring UNION ALL SELECT melding_key, gereed, totaal_index, stdmelding_key, indult FROM pchx_monitoring) m, mld_discipline d, mld_stdmelding std, mld_stdmeldinggroep gr WHERE m.stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND std.mld_stdmeldinggroep_key = gr.mld_stdmeldinggroep_key(+) AND indult = 'Nee' AND totaal_index IS NOT NULL AND totaal_index != 0 AND ADD_MONTHS (TRUNC (gereed, 'MONTH'), 6) > SYSDATE) GROUP BY onderwerp, TRUNC (gereed, 'MONTH'); CREATE OR REPLACE VIEW pchw_v_overschrijding_doorbel ( MAAND, EXPORT_DATUM, BEDRIJF, GROEP, VARIABELEKORTING, MLD_MELDING_ONDERWERP, MLD_MELDING_OMSCHRIJVING, MLD_MELDING_KEY, MLD_MELDING_OPMERKING, TOTAAL, TOTAAL_INDEX ) BEQUEATH DEFINER AS SELECT TO_CHAR (TRUNC (export_datum, 'MONTH') - 1, 'yyyy-month') maand, export_datum, bedrijf, groep, variabelekorting, MLD_MELDING_ONDERWERP, MLD_MELDING_OMSCHRIJVING, m.MLD_MELDING_KEY, MLD_MELDING_OPMERKING, ( totaal / ( (totaal / variabelekorting) + DECODE (variabelekorting, 50, 20, 250, 10, 0))) * COUNT (*) totaal, ( totaal_index / ( (totaal / variabelekorting) + DECODE (variabelekorting, 50, 20, 250, 10, 0))) * COUNT (*) totaal_index FROM pchx_monitoring mo, mld_melding m, (SELECT km.mld_melding_key, fac_usrdata_omschr bedrijf FROM mld_kenmerkmelding km, fac_usrdata ud WHERE mld_kenmerk_key = 121 AND fac.safe_to_number (mld_kenmerkmelding_waarde) = ud.fac_usrdata_key) b WHERE kinderen IS NOT NULL AND ',' || mo.kinderen || ',' LIKE '%,' || m.mld_melding_key || ',%' AND COALESCE (m.mld_melding_parentkey, m.mld_melding_key) = b.mld_melding_key(+) -- bij meldingen die onder een andere melding vallen moeten we bij de parent kijken AND totaal > 0 -- Soms zijn er wel kind meldingen maar hebben we geen korting te pakken. GROUP BY export_datum, groep, variabelekorting, MLD_MELDING_ONDERWERP, MLD_MELDING_OMSCHRIJVING, m.MLD_MELDING_KEY, MLD_MELDING_OPMERKING, totaal_index, totaal, bedrijf; -- Rapportages ten behoeve van de verslaglegging naar de financiers. CREATE OR REPLACE VIEW pchw_v_melding_p_maand AS SELECT maand, (SELECT COUNT (*) FROM mld_melding WHERE mld_melding_datum BETWEEN ADD_MONTHS (maand, -11) AND ADD_MONTHS (maand, 1)) pmaandjaar, (SELECT COUNT (*) FROM mld_melding WHERE mld_melding_datum BETWEEN maand AND ADD_MONTHS (maand, 1)) pmaand FROM ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MONTH'), (LEVEL * -1)) maand FROM DUAL CONNECT BY LEVEL <= 12); CREATE OR REPLACE VIEW pchw_v_onderdeel_p_maand AS SELECT maand, mld_stdmeldinggroep_oms, (SELECT COUNT (*) FROM mld_melding m, mld_stdmelding std WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_stdmeldinggroep_key = gr.mld_stdmeldinggroep_key AND mld_melding_datum BETWEEN maand AND ADD_MONTHS (maand, 1)) pmaand FROM ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MONTH'), (LEVEL * -1)) maand FROM DUAL CONNECT BY LEVEL <= 12) m, mld_stdmeldinggroep gr WHERE mld_stdmeldinggroep_oms IS NOT NULL; CREATE OR REPLACE VIEW pchw_v_malus_bedrijf ( maand, bedrijf_malus, totaal ) AS SELECT m.maand, COALESCE (mon.bedrijf_malus, 'PCH'), SUM (mon.totaal) totaal FROM (SELECT ADD_MONTHS (TRUNC (export_datum, 'MONTH'), -1) maand, mo.bedrijf_malus, mo.totaal FROM pchx_monitoring mo WHERE kinderen IS NULL -- geen overschrijdingskorting AND totaal IS NOT NULL UNION ALL SELECT ADD_MONTHS (TRUNC (export_datum, 'MONTH'), -1) maand, bedrijf bedrijf_malus, totaal FROM pchw_v_overschrijding_doorbel) mon, ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MONTH'), (LEVEL * -1)) maand FROM DUAL CONNECT BY LEVEL <= 12) m WHERE m.maand = mon.maand(+) GROUP BY m.maand, mon.bedrijf_malus; CREATE OR REPLACE VIEW pchw_v_meldingen_top10_mnd AS SELECT 1 - aantal hide_f_sort, mld_stdmelding_omschrijving, ins_discipline_omschrijving, aantal FROM ( SELECT mld_stdmelding_omschrijving, d.ins_discipline_omschrijving, COUNT ( * ) aantal FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 101 AND mld_melding_datum BETWEEN ADD_MONTHS ( TRUNC (SYSDATE, 'MONTH'), -1) AND TRUNC (SYSDATE, 'MONTH') GROUP BY mld_stdmelding_omschrijving, d.ins_discipline_omschrijving ORDER BY COUNT ( * ) DESC) WHERE ROWNUM <= 10; CREATE OR REPLACE VIEW pchw_v_meldingen_top10_jaar AS SELECT 1 - aantal hide_f_sort, mld_stdmelding_omschrijving, ins_discipline_omschrijving, aantal FROM ( SELECT mld_stdmelding_omschrijving, d.ins_discipline_omschrijving, COUNT (*) aantal FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 101 AND mld_melding_datum BETWEEN ADD_MONTHS ( TRUNC (SYSDATE, 'MONTH'), -12) AND TRUNC (SYSDATE, 'MONTH') GROUP BY mld_stdmelding_omschrijving, d.ins_discipline_omschrijving ORDER BY COUNT (*) DESC) WHERE ROWNUM <= 10; CREATE OR REPLACE VIEW pchw_v_meldingen_top10_hlfjr AS SELECT 1 - aantal hide_f_sort, mld_stdmelding_omschrijving, ins_discipline_omschrijving, aantal FROM ( SELECT mld_stdmelding_omschrijving, d.ins_discipline_omschrijving, COUNT ( * ) aantal FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 101 AND mld_melding_datum BETWEEN TRUNC ( ADD_MONTHS ( SYSDATE - 182, (1 + 6 * ROUND ( ROUND ( EXTRACT ( MONTH FROM (SYSDATE - 182)) / 12, 1) - 0.1, 0)) - EXTRACT ( MONTH FROM (SYSDATE - 182))), 'Month') AND TRUNC ( ADD_MONTHS ( SYSDATE, (1 + 6 * ROUND ( ROUND ( EXTRACT ( MONTH FROM (SYSDATE)) / 12, 1) - 0.1, 0)) - EXTRACT ( MONTH FROM (SYSDATE))), 'Month') GROUP BY mld_stdmelding_omschrijving, d.ins_discipline_omschrijving ORDER BY COUNT ( * ) DESC) WHERE ROWNUM <= 10; -- Reminder naar de gastheer van de reservering tenzij -- de gastheer een functie burgermeester of wethouder heeft (124/130) -- of tenzij de afdeling van gastheer Directie betreft (359/262) dan naar naar contactpersoon CREATE OR REPLACE VIEW pchw_v_noti_resreminder ( code, sender, receiver, text, key, xkey ) AS SELECT 'RESINF', NULL, DECODE ( prs_afdeling_key, 124, rsvr.res_rsv_ruimte_contact_key, 130, rsvr.res_rsv_ruimte_contact_key, DECODE (prs_srtperslid_key, 359, rsvr.res_rsv_ruimte_contact_key, 262, rsvr.res_rsv_ruimte_contact_key, rsvr.res_rsv_ruimte_host_key)) receiver, 'Reservering ' || res.res_reservering_key || ': U heeft op ' || TO_CHAR (rsvr.res_rsv_ruimte_van, 'DD-MM') || ' van ' || TO_CHAR (rsvr.res_rsv_ruimte_van, 'HH24:MI') || ' tot ' || TO_CHAR (rsvr.res_rsv_ruimte_tot, 'HH24:MI') || ' ruimte ' || r.res_ruimte_nr || ' gereserveerd.', res.res_reservering_key, rsvr.res_rsv_ruimte_key FROM res_v_aanwezigreservering res, res_v_aanwezigrsv_ruimte rsvr, res_ruimte_opstelling opst, res_disc_params rdp, res_ruimte r, prs_perslid p WHERE r.res_discipline_key = rdp.res_ins_discipline_key AND rdp.res_disc_params_noti_dagen IS NOT NULL AND res.res_reservering_key = rsvr.res_reservering_key AND opst.res_ruimte_opstel_key = rsvr.res_ruimte_opstel_key AND opst.res_ruimte_key = r.res_ruimte_key AND rsvr.res_rsv_ruimte_host_key = p.prs_perslid_key AND rsvr.res_status_fo_key <= 5 AND rsvr.res_rsv_ruimte_van BETWEEN fac.datumtijdplusuitvoertijd ( SYSDATE, res_disc_params_noti_dagen, 'DAGEN') AND fac.datumtijdplusuitvoertijd ( SYSDATE, res_disc_params_noti_dagen + 1, 'DAGEN') AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7) AND rsvr.res_rsv_ruimte_van >= SYSDATE UNION ALL SELECT 'RESINF', NULL, DECODE ( prs_afdeling_key, 124, res_rsv_ruimte_contact_key, 130, res_rsv_ruimte_contact_key, DECODE (prs_srtperslid_key, 359, res_rsv_ruimte_contact_key, 262, res_rsv_ruimte_contact_key, res_rsv_ruimte_host_key)) receiver, 'Reservering ' || res_reservering_key || ': U heeft op ' || TO_CHAR (MIN (van), 'dd-mm') || DECODE ( MIN (van), MAX (tot), ' om ' || TO_CHAR (MIN (van), 'hh24:mi'), ' van ' || TO_CHAR (MIN (van), 'hh24:mi') || ' tot ' || TO_CHAR (MAX (tot), 'hh24:mi')) || ' in ruimte (' || (SELECT alg_gebouw_code || '-' || alg_verdieping_code || '-' || alg_ruimte_nr FROM alg_v_onroerendgoed_gegevens arg WHERE arg.alg_ruimte_key = ruimte_key) || ') ' || COUNT (res_reservering_key) || ' voorziening(en) gereserveerd.', res_reservering_key, res_rsv_ruimte_key FROM (SELECT rsvr.res_rsv_ruimte_host_key, rsvr.res_rsv_ruimte_contact_key, p.prs_srtperslid_key, p.prs_afdeling_key, res.res_reservering_key, rsvd.res_rsv_deel_van van, rsvd.res_rsv_deel_tot tot, rsvr.res_rsv_ruimte_key, rsvr.alg_ruimte_key ruimte_key FROM res_v_aanwezigreservering res, res_v_aanwezigrsv_ruimte rsvr, res_disc_params rdp, res_rsv_deel rsvd, res_deel rd, prs_perslid p WHERE rsvd.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key AND rd.res_deel_key = rsvd.res_deel_key AND rd.res_discipline_key = rdp.res_ins_discipline_key AND rdp.res_disc_params_noti_dagen IS NOT NULL AND res.res_reservering_key = rsvr.res_reservering_key AND rsvr.res_ruimte_opstel_key IS NULL AND rsvr.res_rsv_ruimte_host_key = p.prs_perslid_key AND rsvr.res_status_fo_key <= 5 AND rsvd.res_rsv_deel_verwijder IS NULL AND rsvd.res_rsv_deel_van BETWEEN fac.datumtijdplusuitvoertijd ( SYSDATE, res_disc_params_noti_dagen, 'DAGEN') AND fac.datumtijdplusuitvoertijd ( SYSDATE, res_disc_params_noti_dagen + 1, 'DAGEN') AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7) AND rsvd.res_rsv_deel_van >= SYSDATE UNION ALL SELECT rsvr.res_rsv_ruimte_host_key, rsvr.res_rsv_ruimte_contact_key, p.prs_srtperslid_key, p.prs_afdeling_key, res.res_reservering_key, rsva.res_rsv_artikel_levering van, rsva.res_rsv_artikel_levering tot, rsvr.res_rsv_ruimte_key, rsvr.alg_ruimte_key ruimte_key FROM res_v_aanwezigreservering res, res_v_aanwezigrsv_ruimte rsvr, res_disc_params rdp, res_rsv_artikel rsva, res_artikel ra, prs_perslid p WHERE rsva.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key AND ra.res_discipline_key = rdp.res_ins_discipline_key AND rsva.res_artikel_key = ra.res_artikel_key AND rdp.res_disc_params_noti_dagen IS NOT NULL AND res.res_reservering_key = rsvr.res_reservering_key AND rsvr.res_ruimte_opstel_key IS NULL AND rsvr.res_rsv_ruimte_host_key = p.prs_perslid_key AND rsvr.res_status_fo_key <= 5 AND rsva.res_rsv_artikel_verwijder IS NULL AND rsva.res_rsv_artikel_levering BETWEEN fac.datumtijdplusuitvoertijd ( SYSDATE, res_disc_params_noti_dagen, 'DAGEN') AND fac.datumtijdplusuitvoertijd ( SYSDATE, res_disc_params_noti_dagen + 1, 'DAGEN') AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7) AND rsva.res_rsv_artikel_levering >= SYSDATE) GROUP BY res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key, prs_srtperslid_key, prs_afdeling_key, res_reservering_key, res_rsv_ruimte_key, ruimte_key; CREATE OR REPLACE VIEW pchw_v_catering_gegevens ( res_rsv_ruimte_nummer, res_rsv_ruimt_key, alg_locatie_omschrijving, alg_ruimte_aanduiding, prs_afdeling_naam, prs_afdeling_omschrijving, prs_perslid_naam_full, res_status_bo_omschrijving, res_rsv_ruimte_datum, res_rsv_ruimte_van, res_rsv_ruimte_tot, res_rsv_ruimte_bezoekers, res_rsv_ruimte_opmerking, res_artikel_btw, res_artikel_omschrijving, res_rsv_artikel_aantal, res_artikel_prijs, res_artikel_prijs_totaal, res_rsv_artikel_key, res_artikel_groep, res_artikel_soortcat, prs_kostenplaats_nr, fcl ) AS SELECT res_reservering_key || '/' || res_rsv_ruimte_volgnr, rrr.res_rsv_ruimte_key, rg.alg_locatie_omschrijving, rg.alg_ruimte_nr || ' - ' || rg.alg_ruimte_omschrijving, a.prs_afdeling_naam, a.prs_afdeling_omschrijving, pf.prs_perslid_naam_full, b.res_status_bo_omschrijving, res_rsv_ruimte_van datum, res_rsv_ruimte_van van, res_rsv_ruimte_tot tot, rrr.res_rsv_ruimte_bezoekers, rrr.res_rsv_ruimte_opmerking, ra.res_artikel_btw, ra.res_artikel_omschrijving, rra.res_rsv_artikel_aantal, ra.res_artikel_prijs, res.getartikelprijs (rra.res_rsv_artikel_key), rra.res_rsv_artikel_key, ra.res_artikel_groep, DECODE (SUBSTR (ra.res_artikel_groep, 1, 3), 'SVD', 'SVD', 'Banqueting') soortcat, k.prs_kostenplaats_nr, (SELECT res_kenmerkreservering_waarde FROM res_kenmerkwaarde kw, res_kenmerk k WHERE kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 23 AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key) fcl -- FCL FROM res_rsv_ruimte rrr, ( SELECT res_rsv_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key FROM (SELECT DISTINCT res_rsv_ruimte_key, alg_ruimte_key FROM RES_V_RSV_RUIMTE_2_ALG_RUIMTE WHERE res_alg_ruimte_verwijder IS NULL UNION SELECT res_rsv_ruimte_key, alg_ruimte_key FROM res_rsv_ruimte WHERE alg_ruimte_key IS NOT NULL AND res_rsv_ruimte_verwijder IS NULL) GROUP BY res_rsv_ruimte_key) r2a, alg_v_ruimte_gegevens rg, res_rsv_artikel rra, res_artikel ra, res_status_bo b, prs_kostenplaats k, prs_afdeling a, prs_perslid p, prs_v_perslid_fullnames_all pf WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key AND r2a.alg_ruimte_key = rg.alg_ruimte_key AND rra.res_artikel_key = ra.res_artikel_key AND rra.res_status_bo_key = b.res_status_bo_key AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND rra.res_rsv_artikel_verwijder IS NULL AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = pf.prs_perslid_key; CREATE OR REPLACE PROCEDURE pchw_import_prs_westland (p_import_key IN NUMBER) AS oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (400); v_errorhint VARCHAR2 (400); v_aantal_in_fclt NUMBER; BEGIN v_errorhint := 'Generieke update'; -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure -- Functie staat even op 30 (ipv 21), omdat die niet altijd gevuld blijkt. Functie vullen we dus even met LastName prs.import_perslid ( p_import_key, '0;0;0;0;0;0;5;2;3;1;' || '0;0;0;0;11;12;13;10;0;0;' || '2;4;0;0;0;0;6;8;9;7;' || '0;0;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0', 'FirstName;Last Name;Middle Name;Login;Department Code;Department Name;Job Name;Location name;Cost Center Number;Email Adress;Gender;Work Phone;Mobile'); -- Functie bepalen UPDATE fac_imp_perslid SET prs_srtperslid_omschrijving = COALESCE (prs_kenmerk4, 'Onbekend'); -- Loginnaam afleiden van emailadres UPDATE fac_imp_perslid SET prs_perslid_oslogin = (SUBSTR (prs_perslid_email, 0, INSTR (prs_perslid_email, '@') - 1)) WHERE UPPER (prs_perslid_email) LIKE '%GEMEENTEWESTLAND.NL%'; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END pchw_import_prs_westland; / CREATE OR REPLACE PROCEDURE pchw_update_prs_westland (p_import_key IN NUMBER) IS -- Alle personen verwijderen die niet meer in het import import bestand voorkomen -- Alleen personen verwijderen met emailadres met @GemeenteWestland.nl. Omdat anders bijv. DGS gebruikers verwijderd zouden worden. -- Personen in de juiste autorisatiegroep zetten. -- Match bij PCHW is Email. -- Geen acties tenzij het aantal records in de importtabel meer dan 800 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 '%GEMEENTEWESTLAND.NL%' AND UPPER (p.prs_perslid_email) NOT IN (SELECT UPPER (prs_perslid_email) FROM fac_imp_perslid) AND pf.prs_perslid_key = p.prs_perslid_key; v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (400); v_errorhint VARCHAR2 (400); BEGIN v_errorhint := 'Niet genoeg personen in bestand, import afgebroken'; SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid; IF v_count >= 800 THEN v_errorhint := 'Verwerken persoonsgegevens'; -- Geldig importbestand wat betreft aantal personen -- Eerst de regels die niet van toepassing zijn verwijderen. Dit zijn bijv. raadsleden/vrijwilligers die nooit hoeven in te loggen in Facilitor. DELETE FROM fac_imp_perslid WHERE prs_perslid_email IS NULL; COMMIT; -- generic update -- 'EMAIL' betekent dat op basis van Email wordt gematched. -- 'NULL' betekent altijd geen werkplekken verwijderen prs.update_perslid (p_import_key, 'EMAIL', NULL); v_errorhint := 'Verwijderen persoonsgegevens'; -- Verwijder personen die niet meer in de import voorkomen. -- Ivm PCHW#77638 even niet verwijderen --FOR rec IN c_del --LOOP -- BEGIN -- prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- END; --END LOOP; ELSE fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); COMMIT; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END pchw_update_prs_westland; / -- Rapport om SVD's goed te keuren door contractteam CREATE OR REPLACE VIEW pchw_v_goedkeuring_svd ( prs_perslid_naam_full, prs_perslid_key, mld_melding_key, mld_opdr_key, mld_opdr_bedrijfopdr_volgnr, mld_melding_onderwerp, id ) AS SELECT pf.prs_perslid_naam_full, m.prs_perslid_key, o.mld_melding_key, mld_opdr_key, o.mld_opdr_bedrijfopdr_volgnr, m.mld_melding_onderwerp, sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr id FROM mld_opdr o, mld_melding m, prs_v_perslid_fullnames_all pf, mld_stdmelding std, mld_discipline d, ins_srtdiscipline sd WHERE o.mld_typeopdr_key = 161 -- SVD AND o.mld_statusopdr_key = 9 -- afgerond AND m.mld_melding_key = o.mld_melding_key AND m.prs_perslid_key = pf.prs_perslid_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND NOT EXISTS (SELECT mld_kenmerkopdr_key FROM mld_kenmerkopdr ko WHERE ko.mld_kenmerk_key = 441 -- goedgekeurd door aanvrager AND ko.mld_opdr_key = o.mld_opdr_key); ------ 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