diff --git a/PGHE/pghe.sql b/PGHE/pghe.sql index ca08d4316..d6aadf1e5 100644 --- a/PGHE/pghe.sql +++ b/PGHE/pghe.sql @@ -26,21 +26,6 @@ SET DEFINE OFF CREATE OR REPLACE PACKAGE PGHE AS - -- PPS functies voor PCHA en PCHW - FUNCTION get_first_melding (p_melding_key IN NUMBER, p_index IN NUMBER) - RETURN NUMBER; - - FUNCTION get_regime (p_stdm_key IN NUMBER, - p_alg_key IN NUMBER, -- Altijd gebouw of hoger, locatie niet ondersteund - p_ins_key IN NUMBER) - RETURN NUMBER; - - FUNCTION klant_melding (p_melding_key IN NUMBER) - RETURN NUMBER; - - FUNCTION get_weging (p_startdatum IN DATE, p_stdmeldinggroep_naam IN VARCHAR2) - RETURN NUMBER; - PROCEDURE mail_gbs_melding(pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, @@ -54,214 +39,6 @@ END; CREATE OR REPLACE PACKAGE BODY PGHE AS - FUNCTION get_first_melding (p_melding_key IN NUMBER, - p_index IN NUMBER) - RETURN NUMBER - AS - - CURSOR c - IS - SELECT m2.mld_melding_datum van, m2.mld_melding_key - FROM mld_melding m1, - mld_stdmelding std1, - (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding - where mld_kenmerk_key = 121) km1, -- Niet overlappen - mld_melding m2, - mld_stdmelding std2, - (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding - where mld_kenmerk_key = 121) km2 - WHERE m1.mld_melding_key = p_melding_key - AND m1.mld_stdmelding_key = std1.mld_stdmelding_key - AND m1.mld_melding_key = km1.mld_melding_key(+) - AND km1.mld_kenmerkmelding_waarde IS NULL - AND m2.mld_melding_key = km2.mld_melding_key(+) - AND km2.mld_kenmerkmelding_waarde IS NULL - AND m2.mld_melding_parentkey IS NULL - AND NOT EXISTS (SELECT 1 - FROM pchx_monitoring - WHERE melding_key = m2.mld_melding_key) - AND m2.mld_stdmelding_key = std2.mld_stdmelding_key - AND std2.mld_stdmelding_slabewaken <> 0 -- alleen meldingen waarvoor een malus geldt - AND std1.mld_Stdmeldinggroep_key = std2.mld_stdmeldinggroep_key -- voor stdmeldinggroep - AND ( - ( std1.mld_stdmeldinggroep_key = 1 -- Prestatiekortingen - AND std1.mld_stdmelding_key = std2.mld_stdmelding_key) - OR - ( std1.mld_stdmeldinggroep_key <> 1 -- Prestatiekortingen - AND std1.mld_Stdmeldinggroep_key <> 8 -- Losse voorzieningen worden niet samengenomen - AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys) -- op dezelfde ruimte - ) - AND m1.mld_melding_key <> m2.mld_melding_key - AND m2.mld_melding_indult <> 1 - AND m1.mld_melding_indult <> 1 - AND m2.mld_melding_status <> 1 -- Afgewezen - AND m1.mld_melding_datum BETWEEN m2.mld_melding_datum - AND COALESCE(fac.gettrackingdate ('MLDAFM', m2.mld_melding_key), SYSDATE) - ORDER BY m2.mld_melding_datum; - - v_melding_key NUMBER; - l_melding_key NUMBER; - v_datum_begin DATE; - l_datum_begin DATE; - v_loop_index NUMBER; - - BEGIN - v_melding_key := p_melding_key; - - IF PGHE.klant_melding (p_melding_key) = 0 THEN - RETURN p_melding_key; - END IF; - - SELECT mld_melding_datum - INTO v_datum_begin - FROM mld_melding - WHERE mld_melding_key = p_melding_key; - - v_loop_index := 1; - - FOR rec IN c - LOOP - - -- door de sortering op de cursor hoeven we alleen het eerste record te gebruiken tenzij deze niet door de klant is ingediend. - IF p_index < 10 AND v_loop_index = 1 - - THEN - -- DBMS_OUTPUT.put_line(p_melding_key || '-' || rec.mld_melding_key || '-' || p_index); - -- DBMS_OUTPUT.put_line('Klant melding: ' || '-' || PGHE.klant_melding (rec.mld_melding_key)); - IF PGHE.klant_melding (rec.mld_melding_key) = 1 - THEN - BEGIN - l_melding_key := - PGHE.get_first_melding (rec.mld_melding_key, p_index + 1); - END; - --- DBMS_OUTPUT.put_line('Resultaat: ' || rec.mld_melding_key || '-' || l_melding_key); - - SELECT mld_melding_datum - INTO l_datum_begin - FROM mld_melding - WHERE mld_melding_key = l_melding_key; - - IF l_datum_begin < v_datum_begin - THEN - v_datum_begin := l_datum_begin; - v_melding_key := l_melding_key; - END IF; - v_loop_index := v_loop_index + 1; - END IF; - END IF; - END LOOP; - - IF PGHE.klant_melding (v_melding_key) = 1 - THEN - RETURN v_melding_key; - ELSE - RETURN p_melding_key; - END IF; - END; - - - FUNCTION get_regime (p_stdm_key IN NUMBER, - p_alg_key IN NUMBER, -- Altijd gebouw of hoger, locatie niet ondersteund - p_ins_key IN NUMBER) - RETURN NUMBER - AS - v_mld_stdmelding_regime NUMBER; - v_norm_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); - v_beginuur NUMBER; - v_einduur NUMBER; - v_werkdagen NUMBER; - BEGIN - mld.getslaparams (p_stdm_key, - 3, -- prio - p_alg_key, - NULL, -- ins key - v_mld_stdmelding_regime, - v_norm_uitvoertijd, - v_beginuur, - v_einduur, - v_werkdagen); - - -- kantoortijden of openingstijden waarbij de tijd niet gevuld is. - IF v_mld_stdmelding_regime = 1 OR (v_mld_stdmelding_regime = 2 AND (v_beginuur = -1 OR v_einduur = -1)) - THEN - RETURN fac.safe_to_number (fac.getsetting ('fac_t_endofworkday')) - - fac.safe_to_number (fac.getsetting ('fac_t_startofworkday')); - END IF; - - IF v_mld_stdmelding_regime = 2 -- openingstijden - THEN - RETURN v_einduur - v_beginuur; - END IF; - - IF v_mld_stdmelding_regime = 3 -- 24/7 - THEN - RETURN 24; - END IF; - - RETURN NULL; - END; - - FUNCTION klant_melding (p_melding_key IN NUMBER) - RETURN NUMBER - AS - v_klant_melding NUMBER; - v_stdmeldinggroep_key NUMBER; - BEGIN - SELECT DECODE (a.prs_bedrijf_key, 1021, 1, 0) klant_melding -- bedrijfskey van Gemeente Heerlen - INTO v_klant_melding - FROM mld_melding m, - prs_perslid p, - prs_v_afdeling a - WHERE m.prs_perslid_key = p.prs_perslid_key - AND p.prs_afdeling_key = a.prs_afdeling_key - AND m.mld_melding_key = p_melding_key; - - -- Prestatiekortingen worden altijd berekend ook als ze door RHHR zelf gemeld zijn. - IF v_klant_melding = 0 THEN - SELECT mld_stdmeldinggroep_key - INTO v_stdmeldinggroep_key - FROM mld_melding m, mld_stdmelding std - WHERE std.mld_stdmelding_key = m.mld_stdmelding_key - AND m.mld_melding_key = p_melding_key; - - IF v_stdmeldinggroep_key = 1 THEN --- ToDo: Alle vakgroeptypen toevoegen. - RETURN 1; - END IF; - END IF; - - RETURN v_klant_melding; - EXCEPTION WHEN NO_DATA_FOUND - THEN - RETURN 0; - END; - - FUNCTION get_weging (p_startdatum IN DATE, p_stdmeldinggroep_naam IN VARCHAR2) - RETURN NUMBER - AS - v_mld_stdmelding_regime NUMBER; - v_norm_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); - v_beginuur NUMBER; - v_einduur NUMBER; - v_werkdagen NUMBER; - BEGIN - IF SUBSTR(p_stdmeldinggroep_naam,1,15) = 'Beschikbaarheid' -- TODO conditie metingen toevoegen - OR p_stdmeldinggroep_naam = 'Functionaliteit voorziening' - THEN - CASE WHEN p_startdatum BETWEEN TO_DATE('20210101', 'yyyymmdd') AND TO_DATE('20270101', 'yyyymmdd') - THEN RETURN 1; - WHEN p_startdatum BETWEEN TO_DATE('20270101', 'yyyymmdd') AND TO_DATE('20320101', 'yyyymmdd') - THEN RETURN 0.85; - WHEN p_startdatum BETWEEN TO_DATE('20320101', 'yyyymmdd') AND TO_DATE('20370101', 'yyyymmdd') - THEN RETURN 0.7; - ELSE - RETURN 0; - END CASE; - ELSE - RETURN 1; - END IF; - - END; - PROCEDURE mail_gbs_melding(pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, @@ -271,7 +48,35 @@ AS AS - v_errormsg VARCHAR2 (1000); + 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); @@ -279,6 +84,15 @@ AS 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 @@ -289,6 +103,18 @@ AS 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 @@ -297,7 +123,212 @@ AS 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) || pbody); + 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 := 1761; --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 @@ -318,387 +349,6 @@ AS END; / -CREATE OR REPLACE VIEW pghe_v_startmelding_geg -( - m_start, - mld_alg_onroerendgoed_keys, - mld_melding_status, - mld_melding_afgerond, - aantal, - overlappend, - t_van, - gereed, - mld_melding_spoed, - mld_stdmelding_key, - prs_kostenplaats_key, - max_t_actual, - min_t_sla, - max_t_respijt, - min_tht_einddatum_start, - mld_melding_indult, - mld_melding_einddatum_std, - mld_melding_einddatum, - mld_melding_omschrijving, - mld_melding_opmerking, - klant_melding, - prs_bedrijf_key -) -AS - SELECT m.m_start, - x.mld_alg_onroerendgoed_keys, - -- als één van de onderliggende meldingen "open", dan moet ook M_START status Uitgegeven krijgen - DECODE (m.open, 0, x.mld_melding_status, 4) mld_melding_status, --- 4 = Geaccepteerd??? - x.mld_melding_afgerond, -- mld_melding_afgerond van alleen M_START - m.aantal, - m.overlappend, - m.t_van, -- min_melding_datum - DECODE(m.gereed, TO_DATE('20991231', 'YYYYMMDD'), TO_DATE(NULL), m.gereed), -- max_actual_einddatum - x.mld_melding_spoed, -- mld_melding_spoed van alleen M_START - x.mld_stdmelding_key, -- mld_stdmelding_key van alleen M_START - x.prs_kostenplaats_key, -- prs_kostenplaats_key van alleen M_START - mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd! - m.t_van, - DECODE (m.gereed, TO_DATE('20991231', 'YYYYMMDD'), SYSDATE, m.gereed), - x.mld_stdmelding_key, - x.mld_melding_spoed, - x.mld_alg_onroerendgoed_keys, - NULL) - max_t_actual, - mld_t_uitvoertijd (m.min_uitvoertijd, m.min_uitvoertijd_eenheid) - min_t_sla, - mld_t_uitvoertijd (COALESCE (m.max_respijt, 0), - m.max_respijt_eenheid) - max_t_respijt, -- altijd dezelfde eenheid als uitvoertijd??? - mld.geteinddatum ( - m.m_start, - mld_t_uitvoertijd (m.min_uitvoertijd + m.max_respijt, - m.min_uitvoertijd_eenheid), - m.t_van) - min_tht_einddatum_start, -- meest nabije tht-einddatum van overlappende meldingen (t_van + MIN SLA + MAX respijt) - m.mld_melding_indult, -- max_melding_indult - m.mld_melding_einddatum_std, -- min_melding_einddatum_std of min_tht_einddatum_start??? - m.mld_melding_einddatum, -- max_melding_einddatum - x.mld_melding_omschrijving, -- mld_melding_oms. van alleen M_START - x.mld_melding_opmerking, -- mld_melding_opm. van alleen M_START - m.klant_melding, -- melding gemeld door medewerker klant - m.prs_bedrijf_key -- bedrijf key van de melder - FROM ( SELECT m.m_start, - SUM (m.open) open, - COUNT (m.mld_melding_key) aantal, - listagg (m.mld_melding_key, ',') - WITHIN GROUP (ORDER BY m.mld_melding_key) - AS overlappend, - MIN (m.mld_melding_datum) t_van, -- min_melding_datum - MAX (m.gereed) gereed, -- max_actual_einddatum - MIN (m.mld_melding_t_uitvoertijd.tijdsduur) min_uitvoertijd, - MIN (m.mld_melding_t_uitvoertijd.eenheid) - min_uitvoertijd_eenheid, - MAX (m.mld_melding_t_respijt.tijdsduur) max_respijt, - MAX (m.mld_melding_t_respijt.eenheid) max_respijt_eenheid, -- altijd dezelfde eenheid als uitvoertijd??? - MAX (m.mld_melding_indult) mld_melding_indult, - MIN (m.mld_melding_einddatum_std) mld_melding_einddatum_std, -- min_melding_einddatum_std of min_thtsla_einddatum_start??? - MAX (m.mld_melding_einddatum) mld_melding_einddatum, - MAX (m.klant_melding) klant_melding, - MAX (m.prs_bedrijf_key) prs_bedrijf_key - FROM (SELECT PGHE.get_first_melding (m.mld_melding_key, 1) - m_start, - m.mld_melding_key, - DECODE (m.mld_melding_status, 4, 1, 0) open, -- open = Geaccepteerd??? - m.mld_melding_datum, - COALESCE(fac.gettrackingdate ('MLDAFM', m.mld_melding_key), TO_DATE('20991231', 'YYYYMMDD')) gereed, - m.mld_melding_t_uitvoertijd, - m.mld_melding_t_respijt, - m.mld_melding_indult, - m.mld_melding_einddatum_std, - m.mld_melding_einddatum, - a.prs_bedrijf_key, - PGHE.klant_melding(m.mld_melding_key) klant_melding - FROM mld_melding m, - mld_stdmelding std, - prs_perslid p, - prs_v_afdeling a - WHERE m.mld_melding_parentkey IS NULL - AND m.prs_perslid_key = p.prs_perslid_key - AND p.prs_afdeling_key = a.prs_afdeling_key - -- meldingen die al geexporteerd zijn (en in de tabel nmms_monitoring staan) komen niet meer in deze view - AND NOT EXISTS - (SELECT 1 - FROM pchx_monitoring - WHERE melding_key = m.mld_melding_key) - AND m.mld_stdmelding_key = std.mld_stdmelding_key - AND std.mld_stdmelding_slabewaken = 1 -- alleen meldingen waarvoor een malus geldt - ) m - GROUP BY m.m_start) m, - mld_melding x -- gedefinieerde set gegevens bij M_START als referentie - WHERE m.m_start = x.mld_melding_key; - - -CREATE OR REPLACE VIEW pghe_v_monitoring -( - melding_key, - afw, - indult, - respijt, - kostenplaats, - locatie, - gebouw, - verdieping, - ruimte, - omschrijving, - begin, - gereed, - thtijdstip, - verwerkt, - eenheid, - tht, - wht, - regime, - groep, - basiskorting, - variabelekorting, - wht_tht, - totaal, - totaal_z_respijt, - totaal_weging, - status, - afgerond, - dienst, - stdmelding_key, - discipline_key, - overlappend, - gekoppeld, - wegingsfactor, - melding_omschrijving, - melding_opmerking, - klant_melding, - bedrijf_naam, - og, - bedrijf_malus, - prefix, - kenmerken, - note -) -AS - SELECT m_start melding_key, --mld_melding_key, - DECODE (antedateren, 0, '', 'T') -- de begintijd of eindtijd van de melding is aangepast - || DECODE (g.respijt.tijdsduur, 0, '', 'R') -- er is een respijt ingevuld - || DECODE (mld_melding_indult, 1, 'I', '') -- indult is aangevinkt dus melding doet niet mee - || DECODE (niet_overlappen, 1, 'O', '') -- melding is gemarkeerd als zijnde niet te overlappen met een andere melding - || DECODE (aantal_beschikb, 0, '', 'B') afw, -- binnen de looptijd van de melding is er ook een beschikbaarheidsmelding in dezelfde ruimte - DECODE (COALESCE (mld_melding_indult, 0), 0, 'Nee', 'Ja') indult, - DECODE (g.respijt.tijdsduur, - 0, NULL, - TO_CHAR (ROUND (g.respijt.tijdsduur, 2))) - respijt, - prs_kostenplaats_nr kostenplaats, - alg_locatie_code locatie, - alg_gebouw_upper gebouw, - alg_verdieping_volgnr verdieping, - ruimte, - mld_stdmelding_omschrijving omschrijving, - t_van begin, - gereed, - thtijdstip thtijdstip, - (SELECT MAX(fac_tracking_datum) - FROM fac_tracking - WHERE fac_tracking_refkey = m_start --mld_melding_key - AND fac_srtnotificatie_key = 56) - verwerkt, - eenheid, - ROUND (g.tht.tijdsduur, 2) tht, - ROUND (g.actual.tijdsduur, 2) wht, - regime, - mld_stdmeldinggroep_naam groep, - bk basiskorting, - vk variabelekorting, - DECODE (telaat, 1, ROUND (g.uitloop.tijdsduur, 2)) wht_tht, - DECODE ( - telaat, - 1, -- Gemeente Heerlen rond de breuk naar beneden af op gehele getallen. - coalesce(bk,0) + DECODE(vk, null, 0, (TRUNC (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur)) * vk)), -- Alleen als dagen x24! - NULL) - totaal, - DECODE ( - telaat_z_respijt, - 1, -- Gemeente Heerlen rond de breuk naar beneden af op gehele getallen. - coalesce(bk,0) + DECODE(vk, null, 0, (TRUNC (g.uitloop_z_respijt.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur)) * vk)), -- Alleen als dagen x24! - NULL) - totaal_z_respijt, - DECODE ( - telaat, - 1, - (coalesce(bk,0) + DECODE(vk, null, 0, (TRUNC (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur)) * vk))) * -- Alleen als dagen x24! - wegingsfactor, - NULL) - totaal_weging, - (SELECT mld_statuses_omschrijving - FROM mld_statuses - WHERE mld_statuses_key = mld_melding_status) status, - DECODE (mld_melding_afgerond, 1, 'x') afgerond, - (SELECT prs_dienst_omschrijving - FROM prs_dienst - WHERE prs_dienst_key = g.prs_dienst_key) dienst, - mld_stdmelding_key, - mld_ins_discipline_key, - overlappend, - (SELECT listagg (m2.mld_melding_key, ',') WITHIN GROUP (ORDER BY m2.mld_melding_key) - AS gekoppeld - FROM mld_melding m2 - WHERE COALESCE(m2.mld_melding_parentkey, -1) = m_start - GROUP BY m2.mld_melding_parentkey) gekoppeld, - wegingsfactor, - mld_melding_omschrijving melding_omschrijving, - mld_melding_opmerking melding_opmerking, - klant_melding, - (SELECT prs_bedrijf_naam - FROM prs_bedrijf b - WHERE b.prs_bedrijf_key = g.prs_bedrijf_key) - bedrijf_naam, - DECODE (antedateren + g.respijt.tijdsduur + mld_melding_indult + mld_melding_afgerond, 0, 0, 1) og, - PCHX.get_kenmerk('MLD', 102, m_start) bedrijf_malus, -- bedrijf die de malus moet betalen - ins_srtdiscipline_prefix prefix, - (SELECT listagg (mld_srtkenmerk_omschrijving || ': ' || PCHX.get_kenmerk ('MLD',k.mld_kenmerk_key, m_start), chr(10)) WITHIN GROUP (ORDER BY k.mld_kenmerk_volgnummer) - AS kenmerken - FROM mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk - WHERE km.mld_melding_key = m_start - AND km.mld_kenmerk_key = k.mld_kenmerk_key - and k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key - AND km.mld_kenmerkmelding_verwijder IS NULL - AND k.mld_kenmerk_verwijder IS NULL - and sk.mld_srtkenmerk_verwijder IS NULL - GROUP BY mld_melding_key) kenmerken, - (SELECT mld_melding_note_omschrijving FROM mld_melding_note n - WHERE n.mld_melding_key = m_start - AND NOT EXISTS (SELECT mld_melding_note_key FROM mld_melding_note n2 - WHERE n2.mld_melding_key = n.mld_melding_key - AND n2.mld_melding_note_key > n.mld_melding_note_key)) note - FROM (SELECT m.m_start, - m.aantal, - DECODE (m.aantal, 1, NULL, m.overlappend) overlappend, - ( SELECT count(*) - FROM mld_kenmerkmelding km - WHERE mld_kenmerk_key = 121 - AND km.mld_melding_key = m_start) niet_overlappen, - m.mld_melding_status, - m.mld_melding_afgerond, - m.mld_melding_indult, - m.mld_melding_omschrijving, - m.mld_melding_opmerking, - std.prs_dienst_key, - std.mld_stdmelding_key, - std.mld_ins_discipline_key, - std.mld_stdmelding_omschrijving, - std.mld_stdmelding_malus, - m.t_van, - m.gereed, - m.mld_melding_einddatum_std thtijdstip, - stdg.mld_stdmeldinggroep_naam, - PGHE.get_regime (std.mld_stdmelding_key, - m.mld_alg_onroerendgoed_keys, - NULL) - regime, -- aantal werkuren per dag - UPPER (SUBSTR (stdg.mld_stdmeldinggroep_naam, 1, 1)) - kortingtype, -- de meldingsgroep bevat het type storing - kp.prs_kostenplaats_nr, - rg.alg_locatie_code, - rg.alg_gebouw_upper, - rg.alg_verdieping_volgnr, - rg.alg_ruimte_nr || '-' || rg.alg_ruimte_omschrijving - ruimte, - COALESCE ((SELECT stsr.mld_stdmsrtruimte_malusbasis - FROM mld_stdmsrtruimte stsr - WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key - AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key), std.mld_stdmelding_malusbasis) - bk, - COALESCE ((SELECT stsr.mld_stdmsrtruimte_malus - FROM mld_stdmsrtruimte stsr - WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key - AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key), std.mld_stdmelding_malus) vk, - (SELECT COUNT (mb.mld_melding_key) aantal -- kijk of er op het moment van de melding er een beschikbaarheidsstoring was - FROM mld_melding mb, mld_stdmelding std_b - WHERE (mb.mld_melding_datum BETWEEN m.t_van - AND COALESCE (m.gereed, - SYSDATE) - OR fac.gettrackingdate ('MLDAFM', mb.mld_melding_key) BETWEEN m.t_van - AND COALESCE ( - m.gereed, - SYSDATE)) - AND mb.mld_alg_onroerendgoed_keys = - m.mld_alg_onroerendgoed_keys - AND mb.mld_stdmelding_key = std_b.mld_stdmelding_key - AND std_b.mld_stdmeldinggroep_key = 63 -- beschikbaarheid - AND std.mld_stdmeldinggroep_key <> 63) - aantal_beschikb, -- beschikbaarheid - -- vervolgmelding op een inspectie zijn per definitie te laat - -- inspecties zelf zijn te laat als de geplande einddatum verstreken is. - -- anders geldt de normale formule - SIGN( m.max_t_actual.tijdsduur - - m.min_t_sla.tijdsduur - - m.max_t_respijt.tijdsduur) -- positief, dan te laat - telaat, - SIGN( m.max_t_actual.tijdsduur - - m.min_t_sla.tijdsduur) -- positief, dan te laat - telaat_z_respijt, - m.max_t_actual actual, -- MAX actuele doorlooptijd - m.min_t_sla thtsla, -- MIN SLA - m.min_t_sla.eenheid eenheid, - m.max_t_respijt respijt, -- MAX respijt - mld_t_uitvoertijd ( - m.min_t_sla.tijdsduur - + m.max_t_respijt.tijdsduur, - m.min_t_sla.eenheid) - tht, -- MIN SLA + MAX respijt - mld_t_uitvoertijd ( - m.max_t_actual.tijdsduur - - m.min_t_sla.tijdsduur - - m.max_t_respijt.tijdsduur, - m.max_t_actual.eenheid) - uitloop, -- hoeveel te laat - mld_t_uitvoertijd ( - m.max_t_actual.tijdsduur - - m.min_t_sla.tijdsduur, - m.max_t_actual.eenheid) - uitloop_z_respijt, -- hoeveel te laat - pghe.get_weging(m.t_van, stdg.mld_stdmeldinggroep_naam) wegingsfactor, -- Afhankelijk van de stdmeldinggroep en de periode - -- is de tijd van de melding aangepast? - (SELECT COUNT ( * ) - FROM fac_tracking t, fac_srtnotificatie sn - WHERE t.fac_tracking_refkey = m.m_start -- mld_melding_key VAN MELDING MET LAAGSTE KEY??? - AND t.fac_srtnotificatie_key = - sn.fac_srtnotificatie_key - AND sn.fac_srtnotificatie_code = 'MLDUPD' - AND (t.fac_tracking_oms LIKE '%Start :%' - OR t.fac_tracking_oms LIKE '%Afgemeld:%')) - antedateren, - klant_melding, - prs_bedrijf_key, - ins_srtdiscipline_prefix - FROM PGHE_v_startmelding_geg m, - mld_stdmelding std, - ins_tab_discipline d, - ins_srtdiscipline sd, - mld_stdmeldinggroep stdg, - prs_kostenplaats kp, - alg_v_ruimte_gegevens rg, - alg_srtruimte sr - WHERE m.mld_melding_status IN (0, 2, 3, 4, 5, 6, 7, 99) -- alles behalve 1=Afgewezen - 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 std.mld_stdmeldinggroep_key = - stdg.mld_stdmeldinggroep_key(+) - AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key(+) - AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key(+) - AND rg.alg_srtruimte_key = sr.alg_srtruimte_key(+) - AND ( UPPER (SUBSTR (stdg.mld_stdmeldinggroep_naam, 1, 1)) = - 'P' -- Prestatiemelding - OR d.ins_discipline_key IN (86, 90) -- V en G, W en R - OR klant_melding = 1) - -- meldingen op inspecties worden altijd getoond (Kq) - -- anders alleen storingen ingelegd door klant medewerkers - -- alleen meldingen waarvoor een malus geldt - AND (std.mld_stdmelding_malus IS NOT NULL OR EXISTS (SELECT mld_stdmsrtruimte_key FROM mld_stdmsrtruimte stdsr WHERE stdsr.mld_stdmelding_key = std.mld_stdmelding_key))) g; - CREATE OR REPLACE PROCEDURE pghe_import_mld (p_import_key IN NUMBER) AS BEGIN @@ -1620,6 +1270,32 @@ 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 ( @@ -1632,6 +1308,44 @@ AS 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); + + ------ payload end ------ SET DEFINE OFF