-- -- $Id$ -- -- Script containing customer specific sql statements for the FACILITOR database DEFINE thisfile = 'pghe.sql' DEFINE dbuser = 'PGHE' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL; WHENEVER SQLERROR CONTINUE; --------------------------------------- PROMPT &fcltcusttxt --------------------------------------- SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE PACKAGE PGHE AS PROCEDURE mail_gbs_melding(pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER); END; / CREATE OR REPLACE PACKAGE BODY PGHE AS PROCEDURE mail_gbs_melding(pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS CURSOR c IS SELECT * FROM mld_melding m WHERE mld_meldbron_key = 6 -- System GBS AND mld_melding_status IN (0, 2, 3, 4, 7, 99); -- alles behalve 1=Afgewezen, 5= afgemeld, 6= historie 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_errormsg fac_result.fac_result_waarde%TYPE; v_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%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_srtruimte_key alg_srtruimte.alg_srtruimte_key%TYPE; v_ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE; v_std_ruimte_nr 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_tijdstip VARCHAR2 (100); v_date DATE; v_gbs_melding VARCHAR2 (1000); v_count NUMBER; v_error NUMBER; v_newline VARCHAR2 (4000); v_tag VARCHAR2 (4000); v_from VARCHAR2 (4000); v_body VARCHAR2 (4000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_volgnr NUMBER; BEGIN -- 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; IF psubject = 'Watchdog Alarm' THEN UPDATE fac_usrdata SET fac_usrdata_vervaldatum = SYSDATE WHERE fac_usrdata_key = 181; -- Watchdog ELSE UPDATE fac_usrdata SET fac_usrdata_vervaldatum = SYSDATE WHERE fac_usrdata_key = 60; -- Laatst ontvangen bericht -- filter nu de essentiele velden uit de mailbody -- vervang cr door lf -- TO DO: MOETEN WE EEN FALLBACK STDMELDING KEY DEFINIEREN?????????????????????? v_stdmelding_key := fac.safe_to_number (fac.getsetting ('defaultstdmelding')); v_body := pbody; 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; v_onderwerp := psubject; v_errorhint := 'Bepaal volgnummer'; SELECT MAX(fac_rapport_volgnr) INTO v_volgnr FROM fac_rapport WHERE fac_rapport_node = 'GBS_MELDING'; v_errorhint := 'Bewaar mail ' || v_volgnr; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('GBS_MELDING', v_volgnr + 1, pfrom || CHR (10) || psubject || CHR (10) || v_omschrijving); -- afzender van een gbs bericht is altijd 1881 (Key van gebruiker Gebouwbeheersysteem GBS) v_sender := 1881; --1881 prod -- Eerste 5 regels bevatten geen relevante informatie fac.imp_getfield (v_body, CHR (10), v_newline); v_errorhint := 'Ophalen 1e regel: ' || v_newline; fac.imp_getfield (v_body, CHR (10), v_newline); v_errorhint := 'Ophalen 2e regel: ' || v_newline; fac.imp_getfield (v_body, CHR (10), v_newline); v_errorhint := 'Ophalen 3e regel: ' || v_newline; fac.imp_getfield (v_body, CHR (10), v_newline); v_errorhint := 'Ophalen 4e regel: ' || v_newline; fac.imp_getfield (v_body, CHR (10), v_newline); v_errorhint := 'Ophalen 5e regel: ' || v_newline; fac.imp_getfield (v_body, CHR (10), v_newline); v_errorhint := 'Ophalen 6e regel: ' || v_newline; -- De zesde regel moet allemaal sterren bevatten. Laten we dit maar even checken IF v_newline = '********************************' THEN fac.imp_getfield (v_body, CHR (10), v_gbs_melding); v_errorhint := 'Ophalen GBS melding: ' || v_gbs_melding; fac.imp_getfield (v_body, CHR (10), v_tijdstip); v_errorhint := 'Ophalen tijdstip: ' || v_tijdstip; v_date := TO_DATE(v_tijdstip, 'dd-mm-yyyy hh24:mi:ss'); v_errorhint := 'Tijdstip: ' || v_date; v_ruimte_nr := SUBSTR(v_gbs_melding, 2, INSTR(v_gbs_melding, ']')-2); v_errorhint := 'Ruimte: ' || v_ruimte_nr; v_tag := SUBSTR(v_gbs_melding, INSTR(v_gbs_melding, ']')+2, 100); v_errorhint := 'Tag: ' || v_tag; IF v_tag = 'GbsMeldingUit' THEN -- dan gaan we alle GBS meldingen afmelden FOR rec IN c LOOP v_errorhint := 'Opzoeken status'; SELECT mld_melding_status INTO v_melding_status FROM mld_melding WHERE mld_melding_key = rec.mld_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 v_errorhint := 'Accepteren melding'; -- melding op geaccepteerd zetten. mld.setmeldingstatus (rec.mld_melding_key, 4, v_sender); END IF; -- nu de status op afgemeld zetten. v_errorhint := 'Afmelden melding'; mld.setmeldingstatus (rec.mld_melding_key, 5, v_sender); v_errorhint := 'Einddatum aanpassen'; fac.backtrackaction ('MLDAFM', rec.mld_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); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Melding ' || v_melding_key || ' is afgemeld, aantal gevonden ' || v_count || ' Details: ' || v_melding_status || ';' || v_onderwerp); END LOOP; ELSE SELECT fac_usrdata_prijs, fac_usrdata_omschr INTO v_stdmelding_key, v_std_ruimte_nr FROM fac_usrdata ud WHERE fac_usrtab_key = 20 AND fac_usrdata_code = v_tag; BEGIN -- Zoek het ruimtenummer dat we ontvangen hebben. Als het Algemeen is gaan we dat natuurlijk niet vinden. 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 alg_ruimte_nr = v_ruimte_nr; EXCEPTION WHEN NO_DATA_FOUND THEN -- Zoek het ruimtenummer nav het nummer dat in de eigentabel staat. 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 alg_ruimte_nr = v_std_ruimte_nr; END; -- Kijk of er al een melding actief is met dezelfde stdmelding_key en meldbron 6 (System) SELECT MIN (m.mld_melding_key), COUNT (m.mld_melding_key) INTO v_melding_key, v_count FROM mld_melding m 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 IF v_count = 0 THEN -- nu gaan we de hersteltijd bepalen v_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; v_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', 6, -- system 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; v_errormsg := '(0x165)'; mld.setmeldingstatus (v_melding_key, 2, v_sender); 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; END IF; ELSE INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Berichtopbouw verkeerd gevonden regel: ' || v_newline); -- 'Fout bij verwerken GBS bericht: ' || psubject); END IF; END IF; IF v_error = 1 THEN -- foutafhandeling fac.writelog ('PROCESSEMAIL', 'E', v_errormsg, SUBSTR (pbody, 1, 1000)); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog ('GBS_MELDING', 'E', v_errormsg, v_errorhint); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Fout bij verwerken GBS bericht: ' || psubject); END; END; / CREATE OR REPLACE PROCEDURE pghe_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 pghe_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, ';', 25, 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; / -- Importfunctie voor THT waardes bij meldingen CREATE OR REPLACE PROCEDURE pghe_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 pghe_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_omschrijving) = 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 pghe_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 pghe_imp_storing_regime; END; / CREATE OR REPLACE PROCEDURE pghe_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 pghe_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 pghe_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 pghe_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 pghe_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 pghe_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 pghe_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; / -- Rapportage om de releatie tussen het bericht uit het GBS en de standaardmelding -- in Facilitor zichtbaar te maken. CREATE OR REPLACE VIEW pghe_v_rap_gbs_storing_def ( gbs_melding, standaard_ruimte, vakgroeptype, vakgroep, melding ) AS SELECT fac_usrdata_code, fac_usrdata_omschr, 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 = 20 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 de sychronisatie status van de koppeling op de portal te tonen. CREATE OR REPLACE VIEW pghe_v_rap_gbs_status_info ( item_key, item, datum ) AS SELECT fac_usrdata_key, fac_usrdata_code, fac_usrdata_vervaldatum FROM fac_usrdata WHERE fac_usrtab_key = 60; CREATE OR REPLACE VIEW pghe_melding_optijd AS SELECT gereed, gbs, DECODE (SIGN (mld_melding_einddatum_std - gereed), -1, 0, 100) optijd FROM (SELECT m.*, DECODE (prs_perslid_key, 1881, 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 pghe_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 = 'RHHR' AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 4 -- Storing AND mld_melding_status IN (2, 3); CREATE OR REPLACE VIEW pghe_v_goedkeuring_svd AS SELECT pf.prs_perslid_naam_full, m.prs_perslid_key, o.mld_melding_key, o.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, so.mld_statusopdr_omschrijving, ud.fac_usrdata_omschr, (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko WHERE ko.mld_kenmerk_key = 201 -- goedgekeurd door aanvrager AND ko.mld_opdr_key = o.mld_opdr_key) goedgekeurd, om.mld_opdr_materiaal_aantal aantaltikken, (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko WHERE ko.mld_kenmerk_key = 181 -- maand AND ko.mld_opdr_key = o.mld_opdr_key) maand FROM mld_opdr o, mld_melding m, prs_v_perslid_fullnames_all pf, mld_stdmelding std, mld_discipline d, ins_srtdiscipline sd, mld_statusopdr so, mld_opdr_materiaal om, fac_usrdata ud WHERE o.mld_typeopdr_key = 261 -- SVD AND o.mld_statusopdr_key = so.mld_statusopdr_key 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 o.mld_opdr_key = om.mld_opdr_key AND om.fac_usrdata_key = ud.fac_usrdata_key; -- View om de beschikbaarheid van de koffieautomaten inzichtelijke te krijgen. De meetperiode is 2 maanden. -- De tijd dat het apparaat in storing is wordt vergelijken met de beschikbaarheid -- Hiermee wordt rekening gehouden met indult en overlappende meldingen. Ook overlap met andere maanden. -- Er wordt geen rekening gehouden met respijt dat gegeven wordt op een melding omdat je dan bij meldingen die -- een maandgrens overschrijden niet weet in welke periode de respijt valt. CREATE OR REPLACE VIEW pghe_v_koffie_storingen AS SELECT pchx_mon.get_first_melding (mld_melding_key, 1) m_start, mld_melding_datum, COALESCE (fac.gettrackingdate ('MLDAFM', mld_melding_key), SYSDATE) afgemeld, mld_alg_onroerendgoed_keys, alg_ruimte_nr FROM mld_melding m, alg_ruimte r WHERE mld_stdmelding_key = 91 -- beschikbaarheid warme dranken AND pchx_mon.klant_melding (mld_melding_key) = 1 AND mld_melding_indult = 0 AND m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key; CREATE OR REPLACE VIEW pghe_v_rap_beschikb_koffie1 AS SELECT mnth_begin mnth_begin, mnth_einde-1 mnth_einde, alg_ruimte_nr, beschikbaar, storing, ROUND ((beschikbaar - COALESCE (storing, 0)) * 100 / beschikbaar, 2) beschikbaarheid FROM ( SELECT mnth_begin, mnth_einde, alg_ruimte_key, SUM (FAC.datumtijdnaaruitvoertijd (m_begin_cor, m_einde_cor, 'U', 8, 18, 1).tijdsduur) storing, FAC.datumtijdnaaruitvoertijd (mnth_begin, mnth_einde, 'U', 8, 18, 1).tijdsduur beschikbaar FROM (WITH months AS (SELECT * FROM ( SELECT TRUNC (ADD_MONTHS (SYSDATE, (-1 * LEVEL) + 1), 'MM') month FROM DUAL CONNECT BY LEVEL <= 4), (SELECT alg_ruimte_key FROM ins_v_deel_gegevens WHERE ins_srtdeel_key = 1)) SELECT mnth_begin, mnth_einde, m_start, m_begin, m_einde, DECODE (SIGN (m_begin - mnth_begin), -1, mnth_begin, m_begin) m_begin_cor, DECODE (SIGN (m_einde - mnth_einde), 1, mnth_einde, m_einde) m_einde_cor, alg_ruimte_key FROM (SELECT months.month mnth_begin, ADD_MONTHS (months.month, 2) mnth_einde, m.mld_alg_onroerendgoed_keys, alg_ruimte_key, m_start, m_begin, m_einde FROM months LEFT JOIN ( SELECT m_start, MIN (mld_melding_datum) m_begin, MAX (afgemeld) m_einde, mld_alg_onroerendgoed_keys --, FROM pghe_v_koffie_storingen GROUP BY m_start, mld_alg_onroerendgoed_keys) m ON months.month < m_einde AND ADD_MONTHS (months.month, 2) > m_begin AND months.alg_ruimte_key = m.mld_alg_onroerendgoed_keys)) GROUP BY mnth_begin, mnth_einde, alg_ruimte_key) mg, alg_ruimte r WHERE r.alg_ruimte_key = mg.alg_ruimte_key ORDER BY alg_ruimte_nr, mnth_begin; CREATE OR REPLACE VIEW pghe_v_rap_beschikb_koffie AS SELECT mnth_begin, mnth_einde, alg_ruimte_nr, beschikbaar, storing, beschikbaarheid FROM pghe_v_rap_beschikb_koffie1 UNION ALL SELECT mnth_begin, mnth_einde, 'Totaal' alg_ruimte_nr, SUM (beschikbaar) beschikbaar, SUM (storing) storing, ROUND ( (SUM (beschikbaar) - COALESCE (SUM (storing), 0)) * 100 / SUM (beschikbaar), 2) beschikbaarheid FROM pghe_v_rap_beschikb_koffie1 GROUP BY mnth_begin, mnth_einde; CREATE OR REPLACE VIEW PGHE_V_NOTI_SVD_GOEDKEURING ( SENDER, RECEIVER, TEXT, CODE, KEY, XKEY ) AS SELECT DISTINCT NULL sender, gg.prs_perslid_key receiver, 'Facilitor: opdracht ' || m.mld_melding_key || '/' || m.mld_opdr_bedrijfopdr_volgnr || ' moet goedgekeurd worden in ' || pchx.get_user, 'CUST14' code, m.mld_opdr_key key, NULL xkey FROM PGHE_V_GOEDKEURING_SVD m, fac_srtnotificatie sn, fac_tracking t, fac_gebruikersgroep gg WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'ORDAFR' AND t.fac_tracking_refkey = m.mld_opdr_key AND m.goedgekeurd IS NULL AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE UPPER ( fac_notificatie_job_view) = 'PGHE_V_NOTI_SVD_GOEDKEURING') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE UPPER ( fac_notificatie_job_view) = 'PGHE_V_NOTI_SVD_GOEDKEURING') --Notificatie wordt gestuurd naar de contractbeheerders AND gg.fac_groep_key = DECODE (pchx.get_user, 'PGHE', 181); ------ 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