-- -- $Id$ -- -- Script containing customer specific configuration sql statements for PCHA: PCH Het Gelders Huis Arnhem DEFINE thisfile = 'PCHA.SQL' DEFINE dbuser = '^PCHA' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; WHENEVER SQLERROR EXIT; SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL; WHENEVER SQLERROR CONTINUE; SPOOL &fcltlogfile SET DEFINE OFF ------ payload begin ------ -- Importfuncties onroerendgoed vanaf verdieping. CREATE OR REPLACE PROCEDURE pcha_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 pcha_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 pcha_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_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 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 pcha_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); 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;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 pcha_imp_storing_regime (r_codering, omschrijving, ruimten, storing_os, stdmelding, vakgroep, vakgroeptype, tht_os, 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, 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 pcha_imp_storing_regime; END; / CREATE OR REPLACE PROCEDURE pcha_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, DECODE (tht_eenheid, 'UUR', 'U', 'MIN', 'U', 'DAG', 'D') eenheid, DECODE (tht_eenheid, 'UUR', tht, 'MIN', ROUND (tht / 60, 5), 'DAG', tht) tijdsduur FROM pcha_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 pcha_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 pcha_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 pcha_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); BEGIN SELECT COUNT ( * ) INTO v_count FROM pcha_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.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 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 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) VALUES (mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), rec.vk, rec.bk, rec.alg_srtruimte_key, rec.mld_stdmelding_key); 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 pcha_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 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 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) VALUES (mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid), rec.vk, rec.bk, rec.alg_srtruimte_key, rec_stdsr.mld_stdmelding_key); 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 pcha_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 pcha_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;GROEP;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 pcha_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 pcha_imp_kenmerken; END; / CREATE OR REPLACE PROCEDURE pcha_update_kenmerken (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM pcha_imp_kenmerken; 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; 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; --------------------------- Kenmerk toevoegen aan stdmelding --------------------------- END IF; 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 pcha_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 pcha_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; / -- View om de uitnutting van SVD grafisch weer te geven op de portal CREATE OR REPLACE FORCE VIEW pcha_v_rap_svd_budget (svd_type, omschrijving, bedrag) AS SELECT svd_type, 'Budget' omschrijving, u.fac_usrdata_prijs - SUM (index_totaal) bedrag FROM pchx_v_rap_svd s, fac_usrdata u WHERE s.svd_type = u.fac_usrdata_code AND TRUNC (datum, 'Y') = TRUNC (SYSDATE, 'Y') GROUP BY u.fac_usrdata_prijs, svd_type UNION ALL SELECT svd_type, 'Uitnutting', SUM (index_totaal) bedrag FROM pchx_v_rap_svd s, fac_usrdata u WHERE s.svd_type = u.fac_usrdata_code AND TRUNC (datum, 'Y') = TRUNC (SYSDATE, 'Y') GROUP BY u.fac_usrdata_prijs, svd_type; -- Rapport met de diverse indexeringen CREATE OR REPLACE VIEW pcha_v_rap_indexering ( omschrijving, jaar, jaar_1, jaar_2 ) AS SELECT omschrijving, ROUND (pchx_mon.get_index_value (SYSDATE, module), 7) jaar, ROUND (pchx_mon.get_index_value (ADD_MONTHS (SYSDATE, -12), module), 7) jaar_1, ROUND (pchx_mon.get_index_value (ADD_MONTHS (SYSDATE, -24), module), 7) jaar_2 FROM (SELECT 'MON' module, 'Monitoring' omschrijving FROM DUAL UNION ALL SELECT 'SCH', 'Schoonmaak' FROM DUAL UNION ALL SELECT 'BEV', 'Beveiliging' FROM DUAL UNION ALL SELECT 'GLA', 'Gladheidsbestrijding' FROM DUAL); -- Rapportage om de releatie tussen het bericht uit het GBS en de standaardmelding -- in Facilitor zichtbaar te maken. CREATE OR REPLACE VIEW pcha_v_rap_gbs_storing_def ( gbs_melding, vakgroeptype, vakgroep, melding ) AS SELECT fac_usrdata_code, sd.ins_srtdiscipline_omschrijving, d.ins_discipline_omschrijving, mld_stdmelding_omschrijving FROM fac_usrdata ud, mld_stdmelding std, mld_discipline d, ins_srtdiscipline sd WHERE ud.fac_usrdata_verwijder IS NULL AND ud.fac_usrtab_key = 221 AND TRUNC (ud.fac_usrdata_prijs) = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key; -- Rapport om problemen met de GBS koppeling inzichtelijk te maken. CREATE OR REPLACE VIEW pcha_v_gbs_logging AS SELECT * FROM imp_log WHERE imp_log_applicatie = 'PROCESSEMAIL' AND imp_log_datum > TO_DATE ('20171001', 'yyyymmdd'); -- Koppeling met Gebouw beheer systeem (GBS). Storingen komen via de mail binnen volgens -- vastgesteld formaat. CREATE OR REPLACE PROCEDURE pcha_processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, puserkey IN NUMBER DEFAULT NULL) 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; v_stdmelding_omschrijving mld_stdmelding.mld_stdmelding_omschrijving%TYPE; v_discipline_omschrijving ins_tab_discipline.ins_discipline_omschrijving%TYPE; errormsg fac_result.fac_result_waarde%TYPE; v_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE; v_srtruimte_key alg_srtruimte.alg_srtruimte_key%TYPE; v_onderwerp mld_melding.mld_melding_onderwerp%TYPE; v_omschrijving mld_melding.mld_melding_omschrijving%TYPE; v_melding_status mld_melding.mld_melding_status%TYPE; v_ruimte alg_ruimte.alg_ruimte_nr%TYPE; v_ruimte_key alg_ruimte.alg_ruimte_key%TYPE; v_locatie_key alg_locatie.alg_locatie_key%TYPE; v_datum VARCHAR2 (100); v_tijdstip VARCHAR2 (100); v_status VARCHAR2 (100); v_installatiecode VARCHAR2 (100); v_date DATE; v_sync_bericht6 NUMBER; v_sync_bericht8 NUMBER; v_count NUMBER; v_error NUMBER; v_errormsg VARCHAR2 (100); v_inuit VARCHAR2 (100); v_newline VARCHAR2 (4000); v_tag VARCHAR2 (4000); v_value VARCHAR2 (4000); v_from VARCHAR2 (4000); v_body VARCHAR2 (4000); v_pos NUMBER; BEGIN errormsg := '(0x143)'; v_error := 0; v_errormsg := ''; v_sync_bericht6 := 0; v_sync_bericht8 := 0; -- 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; -- DBMS_OUTPUT.PUT_LINE('v_from: '||v_from); -- afzender van een gbs bericht is altijd 104 (Key van gebruiker Gebouwbeheersysteem GBS) v_sender := 104; CASE WHEN UPPER (pto) LIKE 'GBS@%' THEN errormsg := '(0x145)'; -- filter nu de essentiele velden uit de mailbody -- vervang cr door lf -- MOETEN WE EEN FALLBACK STDMELDING KEY DEFINIEREN?????????????????????? 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)); v_omschrijving := v_body; errormsg := '(0x1451)'; WHILE LENGTH (v_body) <> 0 LOOP fac.imp_getfield (v_body, CHR (10), v_newline); fac.imp_getfield (v_newline, ':', v_tag); --fac.imp_getfield (v_newline, ':', v_value); v_value := v_newline; v_tag := UPPER (TRIM (v_tag)); -- fac.writelog ('PROCESSEMAIL', -- 'I', -- 'tag: ' || v_tag || ' value: ' || v_value, -- NULL); errormsg := '(0x1452)'; CASE v_tag WHEN 'MELDINGSTEKST' THEN v_onderwerp := SUBSTR (v_value, 1, 60); errormsg := '(0x1453)'; -- Eerst even kijken naar de sync berichten CASE TRIM (UPPER (v_value)) WHEN 'TESTFMISTC8' THEN v_sync_bericht8 := 1; v_error := 0; EXIT; WHEN 'TESTFMISTC6' THEN v_sync_bericht6 := 1; v_error := 0; EXIT; ELSE v_stdmelding_omschrijving := 'Onbekend'; END CASE; errormsg := '(0x1454)'; BEGIN -- Zoek omschrijving op in eigen tabel met key 221 SELECT fac_usrdata_prijs INTO v_stdmelding_key FROM fac_usrdata WHERE fac_usrdata_verwijder IS NULL AND fac_usrdata_upper = TRIM (UPPER (v_value)) AND fac_usrtab_key = 221; EXCEPTION WHEN NO_DATA_FOUND THEN v_error := 1; v_errormsg := 'Standaard melding kan niet gevonden worden: ' || v_value; END; WHEN 'INUIT' THEN v_inuit := UPPER (TRIM (v_value)); WHEN 'INSTALLATIEDEEL' THEN -- plak er ' x' achter om er zeker van te zijn dat er een spatie in staat. v_ruimte := UPPER(SUBSTR(TRIM (v_value), 1, INSTR(TRIM(v_value || ' x'), ' ')-1)); errormsg := '(0x1455)'; BEGIN SELECT alg_ruimte_key, alg_locatie_key, alg_srtruimte_key INTO v_ruimte_key, v_locatie_key, v_srtruimte_key FROM alg_v_ruimte_gegevens WHERE UPPER (alg_ruimte_nr) = v_ruimte; EXCEPTION WHEN OTHERS THEN v_error := 1; v_errormsg := 'Ruimte kan niet gevonden worden: ' || v_ruimte; END; WHEN 'INSTALLATIECODE' THEN v_installatiecode := TRIM (v_value); WHEN 'STATUS' THEN v_status := TRIM (v_value); WHEN 'ONDERSTATION DATUM' THEN v_datum := TRIM (v_value); WHEN 'ONDERSTATION TIJD' THEN v_tijdstip := TRIM(v_value); ELSE NULL; END CASE; END LOOP; IF v_error = 0 AND v_sync_bericht6 = 0 AND v_sync_bericht8 = 0 THEN -- bepalen van de timestamp uit het emailbericht v_date := fac.safe_to_date(v_datum || ' ' || v_tijdstip, 'dd-mm-yyyy hh24:mi.ss'); IF v_date IS NULL THEN v_date := SYSDATE; END IF; -- nu gaan we de hersteltijd bepalen errormsg := '(0x147)'; BEGIN -- vind de uitvoertijd bij de ruimte specifieke sla SELECT mld_stdmsrtruimte_t_uitvtijd INTO v_uitvoertijd FROM mld_stdmsrtruimte WHERE alg_srtruimte_key = v_srtruimte_key AND mld_stdmelding_key = v_stdmelding_key; EXCEPTION WHEN NO_DATA_FOUND THEN -- vind de uitvoertijd bij de stdmelding SELECT mld_stdmelding_t_uitvoertijd INTO v_uitvoertijd FROM mld_stdmelding WHERE mld_stdmelding_key = v_stdmelding_key; END; -- suggested extensions: -- check for MLDUSE-write autorisations -- parse the subject to find an appropriate stdmelding, if uniquely possible errormsg := '(0x148)'; SELECT MIN (m.mld_melding_key), COUNT (m.mld_melding_key) INTO v_melding_key, v_count FROM mld_melding m, mld_kenmerkmelding km WHERE mld_stdmelding_key = v_stdmelding_key AND mld_alg_onroerendgoed_keys = v_ruimte_key AND mld_melding_status IN (0, 2, 3, 4, 7, 99) -- alles behalve 1=Afgewezen, 5= afgemeld, 6= historie AND km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 181 AND km.mld_kenmerkmelding_waarde = v_installatiecode || ';' || v_status || ';' || v_onderwerp; IF UPPER (v_inuit) = 'IN' THEN IF v_count = 0 THEN errormsg := 'Melding kan niet aangemaakt worden (0x1481)'; 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 v_date, v_onderwerp, v_omschrijving, 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); INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (v_melding_key, 181, v_installatiecode || ';' || v_status || ';' || v_onderwerp); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); ELSE INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Melding bestaat al ' || v_melding_key); v_error := 1; v_errormsg := 'Melding bestaat al ' || v_melding_key; END IF; ELSE IF v_count = 1 THEN errormsg := '(0x1482)'; SELECT mld_melding_status INTO v_melding_status FROM mld_melding WHERE mld_melding_key = v_melding_key; -- Als status is nieuw of te accepteren dan eerst op geaccepteerd zetten. IF v_melding_status = 2 OR v_melding_status = 3 THEN -- melding op geaccepteerd zetten. mld.setmeldingstatus (v_melding_key, 4, v_sender); END IF; -- nu de status op afgemeld zetten. mld.setmeldingstatus (v_melding_key, 5, v_sender); fac.backtrackaction('MLDAFM', v_melding_key , v_sender, v_date); -- Vul het kenmerk Bedrijf (malus) met de waarde van Homij uit de eigen tabel mld.upsertmeldingkenmerk (61, v_melding_key, 182); ELSE INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Melding niet uniek gevonden, aantal gevonden ' || v_count || ' Details: ' || v_installatiecode || ';' || v_status || ';' || v_onderwerp); v_error := 1; v_errormsg := 'Melding niet uniek gevonden, aantal gevonden ' || v_count || ' Details: ' || v_installatiecode || ';' || v_status || ';' || v_onderwerp; END IF; END IF; END IF; END CASE; IF v_error = 1 THEN -- foutafhandeling fac.writelog ('PROCESSEMAIL', 'E', v_errormsg, SUBSTR (pbody, 1, 1000)); ELSE IF v_sync_bericht6 = 1 THEN UPDATE fac_usrdata SET fac_usrdata_vervaldatum = SYSDATE WHERE fac_usrdata_key = 41; ELSIF v_sync_bericht8 = 1 THEN UPDATE fac_usrdata SET fac_usrdata_vervaldatum = SYSDATE WHERE fac_usrdata_key = 561; ELSE UPDATE fac_usrdata SET fac_usrdata_vervaldatum = SYSDATE WHERE fac_usrdata_key = 42; END IF; END IF; EXCEPTION WHEN OTHERS THEN -- DBMS_OUTPUT.PUT_LINE('Mail niet geaccepteerd: ' || 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'); 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; / --Klant specifieke view voor het tonen van het totaal korting per kwartaal per onderwerp CREATE OR REPLACE VIEW pcha_v_totaal_korting_ond ( onderwerp, totaal_index, maand ) AS SELECT onderwerp, SUM (totaal_index), TRUNC (gereed, 'MONTH') FROM (SELECT ins_discipline_omschrijving, DECODE ( UPPER (ins_discipline_omschrijving), 'COMFORT', 'FTRC', 'FUNCTIONALITEIT', 'FTRC', 'TOEGANKELIJKHEID', 'FTRC', 'REPRESENTATIVITEIT', 'FTRC', 'VEILIGHEID ' || CHR (38) || ' GEZONDHEID', 'V' || CHR (38) || 'G', 'WET ' || CHR (38) || ' REGELGEVING', 'W' || CHR (38) || 'R', 'Dienst') 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 WHERE m.stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_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 pcha_melding_optijd AS SELECT gereed, gbs, DECODE (SIGN (mld_melding_einddatum_std - gereed), -1, 0, 100) optijd FROM (SELECT m.*, DECODE (prs_perslid_key, 104, 1, 0) gbs, 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; -- Dashboard rapport voor nieuwe meldingen. CREATE OR REPLACE VIEW pcha_v_dashboard_new AS SELECT m.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, prs_afdeling a, mld_stdmelding std, ins_tab_discipline d WHERE m.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_naam <> 'Gebouwbeheersysteem GBS' AND p.prs_perslid_key = pf.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND prs_afdeling_naam = 'GLD' AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 102 AND mld_melding_status IN (2, 3); ------ 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