-- -- $Id$ -- -- Script containing customer specific sql statements for the FACILITOR database DEFINE thisfile = 'HGCU.SQL' DEFINE dbuser = 'HGCU' 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 hgcu AS FUNCTION get_first_melding (p_melding_key IN NUMBER, p_index IN NUMBER) RETURN NUMBER; FUNCTION get_index_value (p_date IN DATE) RETURN NUMBER; FUNCTION klant_melding(p_mld_melding_key IN NUMBER) RETURN NUMBER; FUNCTION check_melding(p_mld_melding_key IN NUMBER) RETURN VARCHAR2; PROCEDURE update_melding(p_mld_melding_key IN NUMBER); 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 hgcu 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, ins_tab_discipline d1, ins_srtdiscipline sd1, alg_v_allonroerendgoed aog1, mld_melding_object mo1, mld_melding m2, mld_stdmelding std2, alg_v_allonroerendgoed aog2, mld_melding_object mo2 WHERE m1.mld_melding_key = p_melding_key AND m1.mld_stdmelding_key = std1.mld_stdmelding_key AND std1.mld_ins_discipline_key = d1.ins_discipline_key AND d1.ins_srtdiscipline_key = sd1.ins_srtdiscipline_key AND sd1.ins_srtdiscipline_prefix <> 'Q' -- Meldingen over periodieke meldingen zijn nooit overlappend. AND m1.mld_alg_onroerendgoed_keys = aog1.alg_onroerendgoed_keys AND m1.mld_melding_key = mo1.mld_melding_key(+) AND m1.mld_melding_status <> 1 -- Een melding die afgewezen is wordt niet als overlappende melding gezien. AND m2.mld_melding_parentkey IS NULL AND NOT EXISTS (SELECT 1 FROM hgcu_monitoring WHERE melding_key = m2.mld_melding_key) AND m2.mld_stdmelding_key = std2.mld_stdmelding_key AND m2.mld_alg_onroerendgoed_keys = aog2.alg_onroerendgoed_keys AND m2.mld_melding_key = mo2.mld_melding_key(+) AND m1.mld_stdmelding_key = m2.mld_stdmelding_key AND m1.mld_stdmelding_key <> 481 -- definitief herstel meldingen gaan we nooit samennemen AND std2.mld_stdmelding_slabewaken = 1 -- alleen meldingen waar een sla voor geldt -- Melding is toe te wijzen aan specifieke ruimte en ruimtenummer is gelijk AND ( ( std1.alg_onrgoed_niveau = 'R' AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys -- op dezelfde ruimte -- en bij stdmelding 401 op vaste voorzieningen moet ook het object gelijk zijn. AND (m1.mld_stdmelding_key <> 401 OR mo1.ins_deel_key = mo2.ins_deel_key) ) OR ( std1.alg_onrgoed_niveau = 'V' AND COALESCE(aog1.alg_ruimte_key, -1) = COALESCE(aog2.alg_ruimte_key, -1) -- op dezelfde ruimte of allebei geen ruimte ) ) AND ( m1.mld_melding_datum BETWEEN m2.mld_melding_datum AND COALESCE(fac.gettrackingdate ('MLDAFM', m2.mld_melding_key), SYSDATE) AND (m1.mld_melding_datum <> m2.mld_melding_datum OR m1.mld_melding_key >= m2.mld_melding_key)) -- check bij meldingen met exact het zelfde begintijdstip. 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; 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. IF p_index < 10 AND v_loop_index = 1 THEN BEGIN l_melding_key := hgcu.get_first_melding (rec.mld_melding_key, p_index + 1); END; 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 LOOP; RETURN v_melding_key; END; FUNCTION get_index_value (p_date IN DATE) RETURN NUMBER AS v_result NUMBER; BEGIN SELECT EXP(SUM(LN(1+fac_usrdata_prijs/100))) -- Dit bepaald het product van de groepering INTO v_result FROM fac_usrdata WHERE fac_usrtab_key = 1 -- indexatie AND fac_usrdata_verwijder IS NULL AND ADD_MONTHS (fac_usrdata_vervaldatum, -12) < p_date; RETURN v_result; END; FUNCTION klant_melding(p_mld_melding_key IN NUMBER) RETURN NUMBER AS v_bedrijf_key NUMBER; BEGIN SELECT a.prs_bedrijf_key INTO v_bedrijf_key FROM mld_melding m, prs_perslid p, prs_v_afdeling a WHERE m.prs_perslid_key_voor = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND m.mld_melding_key = p_mld_melding_key; IF v_bedrijf_key IN (81, 85) -- DJI (prod/test) THEN RETURN 1; END IF; RETURN 0; END; FUNCTION check_melding(p_mld_melding_key IN NUMBER) RETURN VARCHAR2 AS v_check NUMBER(1); v_onrgoed_niveau MLD_STDMELDING.ALG_ONRGOED_NIVEAU%TYPE; v_melding_status MLD_MELDING.MLD_MELDING_STATUS%TYPE; v_kenmerk_key MLD_KENMERK.MLD_KENMERK_KEY%TYPE; v_ruimte_key ALG_RUIMTE.ALG_RUIMTE_KEY%TYPE; BEGIN SELECT k.mld_kenmerk_key INTO v_kenmerk_key FROM mld_melding m, mld_kenmerk k WHERE mld_srtkenmerk_key = 41 AND m.mld_stdmelding_key = k.mld_stdmelding_key AND m.mld_melding_key = p_mld_melding_key; SELECT std.alg_onrgoed_niveau, FLX.getflex ('MLD', v_kenmerk_key, m.mld_melding_key), m.mld_melding_status, aog.alg_ruimte_key INTO v_onrgoed_niveau, v_check, v_melding_status, v_ruimte_key FROM mld_melding m, alg_v_allonroerendgoed aog, mld_stdmelding std WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+) AND m.mld_melding_key = p_mld_melding_key; IF v_onrgoed_niveau = 'V' AND v_ruimte_key IS NULL AND COALESCE(v_check,0) <> 1 AND v_melding_status = 2 -- Nieuw THEN RETURN('Bevestig in de melding dat de storing betrekking heeft op meerdere ruimten.'); ELSE RETURN('OK'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN -- Er is geen kenmerk voor deze stdmelding gedefinieerd. Dat houdt in dat de melding alleen -- op ruimte ingelegd kan worden. RETURN('OK'); END; PROCEDURE update_melding(p_mld_melding_key IN NUMBER) AS v_eenheid VARCHAR(2); v_tijdsduur NUMBER; v_start_key NUMBER; v_gemeld DATE; v_afgemeld DATE; v_tijdsduur_start NUMBER; BEGIN SELECT m.mld_melding_t_uitvoertijd.eenheid, m.mld_melding_t_uitvoertijd.tijdsduur, m.mld_melding_start_key INTO v_eenheid, v_tijdsduur, v_start_key FROM mld_melding m WHERE mld_melding_key = p_mld_melding_key; IF v_start_key IS NOT NULL THEN SELECT mld_melding_datum, fac.gettrackingdate ('MLDAFM', m.mld_melding_key), m.mld_melding_t_uitvoertijd.tijdsduur INTO v_gemeld, v_afgemeld, v_tijdsduur_start FROM mld_melding m WHERE mld_melding_key = v_start_key; IF v_eenheid = 'D' AND v_tijdsduur = 14 THEN -- Storing definitief herstel IF v_afgemeld IS NOT NULL THEN UPDATE mld_melding SET mld_melding_datum = v_afgemeld WHERE mld_melding_key = p_mld_melding_key; UPDATE mld_melding SET mld_melding_einddatum = mld_melding_einddatum_std WHERE mld_melding_key = p_mld_melding_key; END IF; ELSIF v_tijdsduur_start = 1 THEN -- Storing kritiek naar vitaal/niet vitaal UPDATE mld_melding SET mld_melding_datum = v_gemeld WHERE mld_melding_key = p_mld_melding_key; UPDATE mld_melding SET mld_melding_einddatum = mld_melding_einddatum_std WHERE mld_melding_key = p_mld_melding_key; END IF; END IF; END; PROCEDURE mail_gbs_melding (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS v_sender prs_perslid.prs_perslid_key%TYPE; v_melding_key mld_melding.mld_melding_key%TYPE; v_stdmelding_key mld_stdmelding.mld_stdmelding_key%TYPE; 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_usrdata_key fac_usrdata.fac_usrdata_key%TYPE; v_tijdstip VARCHAR2 (100); v_datum VARCHAR2 (100); v_date DATE; v_gbs_melding VARCHAR2 (1000); v_meldingstekst VARCHAR2 (1000); v_cabinet VARCHAR2 (1000); v_count NUMBER; v_error NUMBER; v_newline VARCHAR2 (4000); v_tag VARCHAR2 (4000); v_value VARCHAR2 (4000); v_from VARCHAR2 (4000); v_body VARCHAR2 (4000); v_state 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; SELECT prs_perslid_key INTO v_sender FROM prs_perslid WHERE prs_perslid_oslogin = '_GBS_KOPPELING'; IF psubject = 'Watchdog Alarm' THEN v_errorhint := SUBSTR(pbody, 1, 500); v_errormsg := 'Watchdog Alarm ontvangen '; BEGIN SELECT fac_usrdata_key INTO v_usrdata_key FROM fac_usrdata ud WHERE UPPER(pbody) like '%' || fac_usrdata_upper || '%' AND ud.fac_usrtab_key = 61 AND ud.fac_usrdata_verwijder IS NULL; UPDATE fac_usrdata SET fac_usrdata_vervaldatum = SYSDATE WHERE fac_usrdata_key = v_usrdata_key; EXCEPTION WHEN OTHERS THEN -- Als er een fout optreedt bij de wachtdog dan wordt deze wel gelogd maar hoeft niet tot een foutmelding richting -- het GBS te leiden. 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', 'I', v_errormsg, v_errorhint); END; ELSE UPDATE fac_usrdata SET fac_usrdata_vervaldatum = SYSDATE WHERE fac_usrdata_key = 61; -- 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, SUBSTR (pfrom || CHR (10) || psubject || CHR (10) || v_omschrijving, 1, 2000)); WHILE LENGTH (v_body) <> 0 LOOP fac.imp_getfield (v_body, CHR (10), v_newline); fac.imp_getfield (v_newline, ':', v_tag); v_value := v_newline; v_tag := UPPER (TRIM (v_tag)); v_errormsg := '(0x1452)'; CASE v_tag WHEN 'ERRORNAME' THEN v_onderwerp := SUBSTR (v_value, 1, 60); v_meldingstekst := TRIM (v_value); v_errormsg := '(0x1453)'; WHEN 'STATE' THEN v_state := TRIM (v_value); WHEN 'ALARMDATE' THEN v_datum := TRIM (v_value); WHEN 'ALARMTIME' THEN v_tijdstip := TRIM (v_value); WHEN 'CABINETNAME' THEN v_cabinet := TRIM (v_value); ELSE NULL; END CASE; END LOOP; BEGIN SELECT fac_usrdata_prijs, fac_usrdata_omschr INTO v_stdmelding_key, v_ruimte_nr FROM fac_usrdata WHERE fac_usrdata_verwijder IS NULL AND fac_usrdata_upper = TRIM (UPPER (v_meldingstekst)) AND fac_usrtab_key = 81; -- Hier staat de verwijzing naar de Stdmeldingen EXCEPTION WHEN NO_DATA_FOUND THEN v_error := 1; v_errormsg := 'Standaard melding kan niet gevonden worden: ' || v_meldingstekst; END; 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_nr; EXCEPTION WHEN OTHERS THEN v_error := 1; v_errormsg := 'Ruimte kan niet gevonden worden: ' || v_ruimte_nr; END; v_date := fac.safe_to_date (v_datum || ' ' || v_tijdstip, 'yyyy-mm-dd hh24:mi.ss'); IF v_date IS NULL THEN v_date := SYSDATE; END IF; -- nu gaan we de hersteltijd bepalen v_errormsg := '(0x147) hersteltijd bepalen uit MELDINGSTEKST ' || v_meldingstekst; 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 v_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 = 201 AND km.mld_kenmerkmelding_waarde = v_cabinet || ';' || v_meldingstekst; IF UPPER (v_state) = 'ALARM ON' THEN IF v_count = 0 THEN 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', 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; v_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, 201, v_cabinet || ';' || v_meldingstekst); 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 v_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, SYSDATE); -- Aangepast in #86889. Dit was eerst v_date, maar daarmee werd in de tracking eerst afgemeld en pas dan MLDNEW/MLDACP -- 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_cabinet || ';' || v_meldingstekst); 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_cabinet || ';' || v_meldingstekst); v_error := 1; v_errormsg := 'Melding niet uniek gevonden, aantal gevonden ' || v_count || ' Details: ' || v_cabinet || ';' || v_meldingstekst; END IF; END IF; 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; / -- Selecteer oa. de MIN(begintijd) en MAX(eindtijd) van overlappende meldingen: -- op dezelfde ruimte voor dezelfde dienst -- met hetzelfde regime in dezelfde eenheid -- Hierin ook opgenomen of men een fictieve gereeddatum heeft meegegeven (ticket 62463) CREATE OR REPLACE VIEW hgcu_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, 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, afw_classificatie, afw_stdmelding, prs_bedrijf_key, mld_melding_start_key, bedrijf_malus ) 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 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.afw_classificatie, -- classificitie is aangepast in de melding m.afw_stdmelding, -- stdmelding is aangepast in de melding m.prs_bedrijf_key, -- bedrijf key van de melder m.mld_melding_start_key, m.bedrijf_malus 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.afw_classificatie) afw_classificatie, MAX (m.afw_stdmelding) afw_stdmelding, MAX (m.prs_bedrijf_key) prs_bedrijf_key, MAX (m.mld_melding_start_key) mld_melding_start_key, MAX (m.bedrijf_malus) bedrijf_malus FROM (SELECT hgcu.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, (SELECT DISTINCT 'M' FROM fac_tracking t WHERE fac_tracking_oms LIKE '%Melding:%' AND m.mld_melding_key = t.fac_tracking_refkey) afw_stdmelding, (SELECT fac_usrdata_code FROM fac_usrdata ud WHERE FAC.Safe_to_number(FLX.getflex ('MLD', 21, m.mld_melding_key)) = fac_usrdata_key) afw_classificatie, hgcu.klant_melding(m.mld_melding_key) klant_melding, m.mld_melding_start_key, bm.bedrijf_malus FROM mld_melding m, mld_stdmelding std, prs_perslid p, prs_afdeling a, (SELECT km.mld_melding_key, ud.fac_usrdata_omschr bedrijf_malus FROM fac_usrdata ud, mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 1 -- bedrijf_malus AND FAC.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key) bm 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 AND m.mld_melding_key = bm.mld_melding_key(+) -- meldingen die al geexporteerd zijn (en in de tabel hgcu_monitoring staan) komen niet meer in deze view AND NOT EXISTS (SELECT 1 FROM hgcu_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 we de SLA bewaken 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; -- -- Basis monitoringsview voor operationele zaken. Meldingen die opgenomen zijn in de tabel hgcu_monitoring komen niet meer voor in deze view. -- CREATE OR REPLACE VIEW hgcu_v_monitoring AS SELECT m_start 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 || afw_stdmelding -- standaardmelding is aangepast. || DECODE (afw_classificatie, 'NV', 'c', 'V', 'C', '') afw, -- de classificatie (vital / niet vitaal) is aangepast bij de melding. DECODE (COALESCE (mld_melding_indult, 0), 0, 'Nee', 'Ja') indult, DECODE (g.respijt.tijdsduur, 0, NULL, TO_CHAR (ROUND (g.respijt.tijdsduur, 2))) respijt, alg_locatie_code locatie, alg_gebouw_upper gebouw, alg_verdieping_volgnr verdieping, ruimte, object, mld_stdmelding_omschrijving omschrijving, t_van begin, gereed, 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, prefix, -- prefix -- || DECODE (prefix, 'S', DECODE (alg_onrgoed_niveau, 'R', '(R)', 'V', DECODE (ruimte, '-', '(V)', '(VR)'))) DECODE(g.thtsla.tijdsduur, 0.08333, 'P', 5, 'P', 1, 'K', 4, 'V', 48, 'NV', 14, 'DH', 0, 'PM', 90, 'PM') typekorting, bk basiskorting, vk variabelekorting, DECODE (telaat, 1, ROUND (g.uitloop.tijdsduur, 2)) wht_tht, DECODE (telaat, 1, DECODE (g.bk, NULL, 0, g.bk + CEIL (g.uitloop.tijdsduur / DECODE(mld_stdmelding_key, 501, 0.08333, 1)) * g.vk)) -- herhalingstijd is altijd een uur/dag tenzij melding bereibaarheid meldpunt. totaal, ROUND(DECODE (telaat, 1, DECODE (g.bk, NULL, 0, g.bk + CEIL (g.uitloop.tijdsduur / DECODE(mld_stdmelding_key, 501, 0.08333, 1)) * g.vk)) * HGCU.get_index_value(t_van),2) -- herhalingstijd is altijd een uur/dag tenzij melding bereibaarheid meldpunt.. totaal_index, (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 stdmelding_key, mld_ins_discipline_key discipline_key, overlappend, 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, bedrijf_malus, FLX.getflex('MLD', 81, m_start) m_rest, (SELECT FLX.getflex('MLD', k.mld_kenmerk_key, m_start) FROM mld_kenmerk k WHERE k.mld_srtkenmerk_key = 121 -- verrekenbaar AND k.mld_stdmelding_key = g.ins_srtdiscipline_key AND k.mld_kenmerk_verwijder IS NULL) m_verreken, DECODE (antedateren + g.respijt.tijdsduur + mld_melding_indult + mld_melding_afgerond, 0, 0, 1) opdrachtgever FROM ( SELECT m.m_start, m.aantal, DECODE (m.aantal, 1, NULL, m.overlappend) overlappend, 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, std.mld_stdmelding_malusbasis, m.t_van, m.gereed, m.mld_melding_einddatum_std thtijdstip, stdg.mld_stdmeldinggroep_naam, DECODE (std.mld_stdmelding_regime, 3, 24, 2, 9, '') regime, sd.ins_srtdiscipline_prefix prefix, sd.ins_srtdiscipline_key, rg.alg_locatie_code, rg.alg_gebouw_upper, rg.alg_verdieping_volgnr, rg.alg_ruimte_nr || '-' || rg.alg_ruimte_omschrijving ruimte, CASE WHEN std.mld_stdmelding_key = 501 THEN 500 -- Bereikbaarheid meldpunt WHEN std.mld_stdmelding_key = 521 THEN 500 -- Nakomen afspraken WHEN std.mld_stdmelding_key = 522 THEN 500 -- Management systeem WHEN sd.ins_srtdiscipline_prefix = 'S' THEN DECODE(m.min_t_sla.tijdsduur, 1, 1000, 4, 500, 48, 500, 14, 0) -- WHEN sd.ins_srtdiscipline_prefix = 'S' AND klant_melding = 1 THEN DECODE(m.min_t_sla.tijdsduur, 1, 1000, 4, 500, 48, 500, 14, 0) -- WHEN sd.ins_srtdiscipline_prefix = 'S' AND klant_melding = 0 THEN DECODE(m.min_t_sla.tijdsduur, 1, 1000, 4, NULL, 48, NULL, 14, 0) WHEN sd.ins_srtdiscipline_prefix = 'Q' THEN std.mld_stdmelding_malusbasis ELSE NULL END bk, CASE WHEN std.mld_stdmelding_key = 501 THEN 50 -- Bereikbaarheid meldpunt WHEN std.mld_stdmelding_key = 521 THEN 100 -- Nakomen afspraken WHEN std.mld_stdmelding_key = 522 THEN 50 -- Management systeem WHEN sd.ins_srtdiscipline_prefix = 'S' THEN DECODE(m.min_t_sla.tijdsduur, 1, 100, 4, 75, 48, 50, 14, 200) -- WHEN sd.ins_srtdiscipline_prefix = 'S' AND klant_melding = 1 THEN DECODE(m.min_t_sla.tijdsduur, 1, 100, 4, 75, 48, 50, 14, 200) -- WHEN sd.ins_srtdiscipline_prefix = 'S' AND klant_melding = 0 THEN DECODE(m.min_t_sla.tijdsduur, 1, 100, 4, NULL, 48, NULL, 14, 200) WHEN sd.ins_srtdiscipline_prefix = 'Q' THEN COALESCE(std.mld_stdmelding_malus,0) ELSE NULL END vk, d.ins_deel_opmerking object, CASE WHEN klant_melding = 1 OR krit_parent_key IS NOT NULL OR m.min_t_sla.tijdsduur = 1 OR m.min_t_sla.tijdsduur = 14 -- Werkelijk herstel wordt door een OST medewerker ingevoerd. OR m.min_t_sla.tijdsduur = 24 OR std.mld_ins_discipline_key = 461 -- Proces storingen OR sd.ins_srtdiscipline_prefix = 'Q' THEN SIGN (m.max_t_actual.tijdsduur - m.min_t_sla.tijdsduur - m.max_t_respijt.tijdsduur) -- positief, dan te laat END telaat, 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 -- 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, afw_classificatie, afw_stdmelding, std.alg_onrgoed_niveau, prs_bedrijf_key, bedrijf_malus FROM hgcu_v_startmelding_geg m, mld_stdmelding std, mld_stdmeldinggroep stdg, mld_discipline md, ins_srtdiscipline sd, alg_v_ruimte_gegevens rg, alg_srtruimte sr, -- Zijn er vervolgmeldingen op een kritische melding (SELECT DISTINCT vv.mld_melding_start_key krit_parent_key FROM mld_melding mkr, mld_melding vv WHERE mkr.mld_melding_key = vv.mld_melding_start_key AND mkr.mld_melding_t_uitvoertijd.tijdsduur = 1) nkr, -- vind object met kortste doorlooptijd per melding (SELECT mld_melding_key, MLD.getlowestobjectuitvoer (mld_melding_key) ins_deel_key FROM mld_melding_object) obj, ins_deel d WHERE m.mld_melding_status IN (0, 2, 3, 4, 5, 6, 7, 99) -- alles behalve 1=Afgewezen AND m.mld_melding_start_key = nkr.krit_parent_key(+) AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND std.mld_stdmeldinggroep_key = stdg.mld_stdmeldinggroep_key(+) AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key(+) AND rg.alg_srtruimte_key = sr.alg_srtruimte_key(+) -- AND klant_melding = 1 AND m.m_start = obj.mld_melding_key(+) -- mld_melding_key VAN MELDING MET LAAGSTE KEY??? AND obj.ins_deel_key = d.ins_deel_key(+) AND std.mld_stdmelding_slabewaken = 1) g; -- Het rapport monitoring totaal bevat alle kortingen van de afgelopen maand als deze nog niet -- bevroren zijn. Als dit wel zo is dan bevat het rapport de gegevens van de huidige maand. CREATE OR REPLACE VIEW hgcu_v_monitoring_tot AS SELECT mld_melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, object, omschrijving, begin, gereed, thtijdstip, verwerkt, eenheid, tht, wht, wht_tht, regime, groep, prefix, typekorting, basiskorting, variabelekorting, melding_omschrijving, melding_opmerking, dienst, stdmelding_key, DECODE (indult, 'Ja', 0, totaal) totaal, DECODE (indult, 'Ja', 0, totaal_index) totaal_index, SUBSTR (overlappend, 1, 100) overlappend, bedrijf_naam, klant_melding, bedrijf_malus, m_rest, m_verreken FROM hgcu_v_monitoring WHERE (totaal IS NOT NULL OR afw IS NOT NULL) AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie')) AND (gereed < TRUNC (SYSDATE, 'Q') -- Vorige kwartaal afgemeld als we al over de kwartaalgrens zitten. OR TRUNC (SYSDATE, 'Q') = -- Huidige kwartaal. Dan is de huidige maand gelijk aan het kwartaal van de laatste exportdatum (SELECT TRUNC (MAX (export_datum), 'Q') FROM hgcu_monitoring)); -- Melding die een freeze datum hebben van 11 juni bevatten alle records van afgelopen jaar. Vandaar dat deze -- in periode 2024Q4 vallen CREATE OR REPLACE VIEW hgcu_v_monitoring_history AS SELECT periode, export_datum, melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, object, omschrijving, melder, begin, gereed, afgerond, verwerkt, thtijdstip, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, totaal, totaal_index, totaal_z_respijt, dienst, stdmelding_key, wegingsfactor, overlappend, gekoppeld, kinderen, klant_melding, prs_bedrijf_naam, melding_omschrijving, melding_opmerking, bedrijf_malus, prefix FROM hgcu_monitoring mo WHERE begin IS NOT NULL; CREATE OR REPLACE PROCEDURE hgcu_select_freeze_monitoring ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c1 IS SELECT mld_melding_key FROM hgcu_v_monitoring WHERE status = 'Afgemeld' AND gereed < TRUNC (SYSDATE, 'Q') --AND gereed < TO_DATE('20250401', 'YYYYMMDD') ****** AND afw IS NULL -- geen afwijkingen die goedgekeurd moeten worden AND afgerond IS NULL; -- expliciete goedkeuring staat niet aan CURSOR c2 IS SELECT m_start, m.mld_melding_key, (SELECT mld_melding_status FROM mld_melding ms WHERE ms.mld_melding_key = m_start) mld_melding_status FROM (SELECT hgcu.get_first_melding (mld_melding_key, 1) m_start, fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed, m.* FROM mld_melding m WHERE m.mld_melding_parentkey IS NULL AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TRUNC (SYSDATE, 'Q') -- AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TO_DATE('20250401', 'yyyymmdd') ****** AND m.mld_melding_key NOT IN (SELECT melding_key FROM hgcu_monitoring WHERE melding_key IS NOT NULL)) m, hgcu_v_monitoring mo WHERE m_start <> m.mld_melding_key AND m_start = mo.mld_melding_key AND ( (status = 'Afgemeld' AND afw IS NULL) -- startmelding mag niet hangen op goedkeuring OR (status = 'Historie')); CURSOR c3 IS SELECT * FROM hgcu_v_monitoring_tot -- WHERE gereed < TO_DATE('20250401', 'YYYYMMDD'); -- ******* WHERE gereed < TRUNC (SYSDATE, 'Q'); v_exportdate DATE; v_lastexport DATE; v_kortingen_totaal NUMBER(11,2); v_status NUMBER; BEGIN v_exportdate := SYSDATE; --v_exportdate := SYSDATE - 20; -- ******* -- Als ik deze maand al een freeze heb uitgevoerd dan mag ik dat niet nog een keer doen. SELECT MAX(export_datum) INTO v_lastexport FROM hgcu_monitoring; DELETE imp_log WHERE COALESCE(imp_log_applicatie, 'QueQeLeQue') = p_applname; DELETE fac_rapport WHERE fac_rapport_node = 'FREEZE'; IF TRUNC (COALESCE(v_lastexport, SYSDATE-100), 'Q') <> TRUNC(v_exportdate, 'Q') THEN -- Zet de meldingen die geen afwijking kennen en die niet op status afgerond staan naar status verwerkt FOR rec IN c1 LOOP BEGIN BEGIN fac.writelog (p_applname, 'I', 'Melding wordt op verwerkt gezet: ' || rec.mld_melding_key , ''); mld.setmeldingstatus (rec.mld_melding_key, 6, NULL); SELECT mld_melding_status INTO v_status FROM mld_melding WHERE mld_melding_key = rec.mld_melding_key; fac.writelog (p_applname, 'I', 'Melding is op verwerkt gezet: ' || rec.mld_melding_key , v_status); END; END; END LOOP; -- zet slave meldingen van samenvallende meldingen ook op verwerkt FOR rec IN c2 LOOP BEGIN IF rec.mld_melding_status = 6 OR rec.mld_melding_status = 5 -- verwerkt of afgemeld THEN BEGIN fac.writelog (p_applname, 'I', 'Slave melding wordt op verwerkt gezet: ' || rec.mld_melding_key , ''); mld.setmeldingstatus (rec.mld_melding_key, 6, NULL); SELECT mld_melding_status INTO v_status FROM mld_melding WHERE mld_melding_key = rec.mld_melding_key; fac.writelog (p_applname, 'I', 'Slave melding is op verwerkt gezet: ' || rec.mld_melding_key , v_status); END; END IF; END; END LOOP; -- Voeg de entries uit het monitoringsoverzicht toe aan de freeze tabel. FOR rec IN c3 LOOP BEGIN BEGIN INSERT INTO hgcu_monitoring (melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, object, melder, omschrijving, begin, gereed, afgerond, thtijdstip, verwerkt, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, dienst, stdmelding_key, totaal, totaal_index, melding_omschrijving, melding_opmerking, overlappend, prs_bedrijf_naam, bedrijf_malus, klant_melding, export_datum, prefix, periode) VALUES (rec.mld_melding_key, rec.afw, rec.indult, rec.respijt, rec.locatie, rec.gebouw, rec.verdieping, rec.ruimte, rec.object, (SELECT pf.prs_perslid_naam_full FROM mld_melding m, prs_v_perslid_fullnames_all pf WHERE rec.mld_melding_key = m.mld_melding_key AND m.prs_perslid_key = pf.prs_perslid_key), rec.omschrijving, rec.begin, rec.gereed, fac.gettrackingdate ('MLDAFR', rec.mld_melding_key), rec.thtijdstip, rec.verwerkt, rec.eenheid, rec.tht, rec.wht, rec.wht_tht, rec.regime, rec.groep, rec.typekorting, rec.basiskorting, rec.variabelekorting, rec.dienst, rec.stdmelding_key, DECODE (rec.indult, 'Ja', 0, rec.totaal), DECODE (rec.indult, 'Ja', 0, rec.totaal_index), rec.melding_omschrijving, rec.melding_opmerking, rec.overlappend, rec.bedrijf_naam, rec.bedrijf_malus, rec.klant_melding, v_exportdate, rec.prefix, REPLACE(TO_CHAR(TRUNC (SYSDATE, 'Q') -1, 'YYYY-Q'), '-', 'Q')); END; END; END LOOP; INSERT INTO hgcu_monitoring (melding_key, indult, export_datum, prefix, periode, klant_melding, tht, wht, bedrijf_malus ) SELECT mld_melding_key, DECODE(mld_melding_indult, 1, 'Ja', 'Nee'), v_exportdate, sd.ins_srtdiscipline_prefix prefix, REPLACE(TO_CHAR(TRUNC (SYSDATE, 'Q') -1, 'YYYY-Q'), '-', 'Q') periode, hgcu.klant_melding (m.mld_melding_key), m.mld_melding_t_uitvoertijd.tijdsduur tht, (mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd! m.mld_melding_datum, fac.gettrackingdate ('MLDAFM', m.mld_melding_key), m.mld_stdmelding_key, m.mld_melding_spoed, m.mld_alg_onroerendgoed_keys, NULL)).tijdsduur wht, (SELECT ud.fac_usrdata_omschr bedrijf_malus FROM fac_usrdata ud, mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 1 -- bedrijf_malus AND FAC.safe_to_number (km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key AND km.mld_melding_key = m.mld_melding_key) bedrijf_malus FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE 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 m.mld_melding_status = 6 -- Historie AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TRUNC (SYSDATE, 'Q') -- AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TO_DATE('20250401', 'YYYYMMDD') ******* AND m.mld_melding_key NOT IN (SELECT nm.melding_key FROM hgcu_monitoring nm WHERE nm.melding_key IS NOT NULL); COMMIT; SELECT SUM(totaal) INTO v_kortingen_totaal FROM hgcu_monitoring WHERE export_datum = v_exportdate; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) VALUES ('FREEZE', 'Kortingen totaal: ' || v_kortingen_totaal, 1); ELSE INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) VALUES ('FREEZE', 'Kortingen zijn al bevroren deze maand op ' || TO_CHAR(v_lastexport, 'dd-mm-yyyy hh24:mi:ss'), 1); END IF; END hgcu_select_freeze_monitoring; / CREATE OR REPLACE PROCEDURE hgcu_export_freeze_monitoring ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2) AS BEGIN DELETE fac_rapport WHERE fac_rapport_node = 'FREEZE'; END; / CREATE OR REPLACE VIEW hgcu_v_export_freeze_monitoring ( result, result_order) AS SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'FREEZE'; -- View om het aantal percentage meldingen op tijd opgelost t.o.v. het totaal aantal meldingen te bepalen. -- De freeze (verwerk) datum van de melding bepaald de datum. -- Meldingen met indult worden niet meegenomen. -- Meldingen niet ingelegd door de klant worden niet meegenomen. -- Alleen storingen komen voor in de lijst. CREATE OR REPLACE VIEW hgcu_v_rap_sla_perc_optijd AS SELECT bedrijf_malus, ROUND (100 * SUM (optijd) / SUM (aantal), 1) perc, SUM (optijd) optijd, SUM (aantal) aantal FROM hgcu_v_ongedaan_korting_bron WHERE jaar = TO_CHAR(SYSDATE, 'YYYY') GROUP BY bedrijf_malus UNION ALL SELECT 'Totaal' bedrijf_malus, ROUND (100 * SUM (optijd) / SUM (aantal), 1) perc, SUM (optijd) optijd, SUM (aantal) aantal FROM hgcu_v_ongedaan_korting_bron WHERE jaar = TO_CHAR(SYSDATE, 'YYYY'); /* Wordt niet meer gebruikt. CREATE OR REPLACE VIEW hgcu_v_rap_kpi_sla_perc AS SELECT jaar, teller, noemer, 100 * (teller / DECODE (noemer, 0, 0.000001, noemer)) percentage FROM (SELECT TO_CHAR (SYSDATE, 'YYYY') jaar, (SELECT COUNT (*) FROM hgcu_v_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (SYSDATE, 'YYYY') AND indult = 'Nee' AND tht - wht >= 0 AND klant_melding = 1 AND prefix = 'S') + (SELECT COUNT (*) FROM hgcu_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (SYSDATE, 'YYYY') AND indult = 'Nee' AND tht - wht >= 0 AND klant_melding = 1 AND prefix = 'S') teller, (SELECT COUNT (*) FROM hgcu_v_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (SYSDATE, 'YYYY') AND indult = 'Nee' AND klant_melding = 1 AND prefix = 'S') + (SELECT COUNT (*) FROM hgcu_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (SYSDATE, 'YYYY') AND indult = 'Nee' AND klant_melding = 1 AND prefix = 'S') noemer FROM DUAL UNION ALL SELECT TO_CHAR (ADD_MONTHS (SYSDATE, -12), 'YYYY') jaar, (SELECT COUNT (*) FROM hgcu_v_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY') AND indult = 'Nee' AND tht - wht >= 0 AND klant_melding = 1 AND prefix = 'S') + (SELECT COUNT (*) FROM hgcu_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY') AND indult = 'Nee' AND tht - wht >= 0 AND klant_melding = 1 AND prefix = 'S') teller, (SELECT COUNT (*) FROM hgcu_v_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY') AND indult = 'Nee' AND klant_melding = 1 AND prefix = 'S') + (SELECT COUNT (*) FROM hgcu_monitoring WHERE TRUNC (gereed, 'YYYY') = TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY') AND indult = 'Nee' AND klant_melding = 1 AND prefix = 'S') noemer FROM DUAL);*/ -- view om de instelling op de meldingen te bevriezen. CREATE OR REPLACE VIEW hgcu_v_mld_transport AS SELECT sd.ins_srtdiscipline_omschrijving vakgroeptype, sd.ins_srtdiscipline_prefix prefix, sd.ins_srtdiscipline_alg plaatsgegevens, sd.ins_srtdiscipline_ins objectgegevens, sd.ins_srtdiscipline_bes bestelgegevens, d.ins_discipline_omschrijving vakgroep, std.mld_stdmelding_omschrijving standaardmelding, stdg.mld_stdmeldinggroep_naam groep, k.prs_kostensoort_oms kostensoort, std.mld_stdmelding_t_accepttijd.tijdsduur acceptatietijd, std.mld_stdmelding_t_uitvoertijd.tijdsduur uitvoertijd, std.mld_stdmelding_t_uitvtijd_pr1.tijdsduur uitvoertijd_kritiek, std.mld_stdmelding_t_uitvtijd_pr2.tijdsduur uitvoertijd_hoog, std.mld_stdmelding_t_uitvtijd_pr4.tijdsduur uitvoertijd_laag, std.mld_stdmelding_directklaar directklaar, di.prs_dienst_omschrijving dienst, std.mld_stdmelding_notfrontend not_frontend, std.alg_onrgoed_niveau alg_niveau, t.mld_typeopdr_omschrijving opdrachttype, std.mld_stdmelding_hint hint, std.mld_stdmelding_kopieerbaar kopieerbaar, std.mld_stdmelding_afmeldtext tekst_bij_afmelden, DECODE (std.mld_stdmelding_doublecheck, 0, 'N', 1, 'I', 2, 'A', 3, 'B') dubbele_meldingen, --0:niet, 1:FE/FO, 2:BO, 3:FE/FO/BO std.mld_stdmelding_slabewaken sla_bewaken, d.ins_discipline_image vakgroep_image, std.mld_stdmelding_image melding_image, DECODE(std.mld_stdmelding_regime,1,'kantoortijden',2,'openingstijden',3,'24x7') melding_regime, std.mld_stdmelding_afhankelijk melding_afhankelijk FROM ins_srtdiscipline sd, ins_tab_discipline d, mld_stdmelding std, prs_kostensoort k, mld_stdmeldinggroep stdg, prs_dienst di, mld_typeopdr t WHERE sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key AND d.ins_discipline_key = std.mld_ins_discipline_key AND std.prs_kostensoort_key = k.prs_kostensoort_key(+) AND std.mld_stdmeldinggroep_key = stdg.mld_stdmeldinggroep_key(+) AND std.prs_dienst_key = di.prs_dienst_key(+) AND std.mld_typeopdr_key = t.mld_typeopdr_key(+); -- Maandelijkse rapportage op het resultaat van periodieke metingen. CREATE OR REPLACE VIEW hgcu_v_rap_result_pm AS SELECT TRUNC (ins_deelsrtcontrole_datum) datum, sc.ins_srtcontrole_omschrijving, cm.ins_controlemode_oms FROM ins_deelsrtcontrole dsc, ins_srtcontrole sc, ins_controlemode cm WHERE dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key AND dsc.ins_controlemode_key = cm.ins_controlemode_key; -- Interne rapportage die via de tabelizer getoond wordt -- Het rapport bevat de meldingen uit het actuele overzicht monitoring met alle meldingen die nog niet bevroren zijn -- en de bevroren meldingen uit de tabel hgcu_monitoring. CREATE OR REPLACE VIEW hgcu_v_monitoring_intern AS SELECT mld_melding_key melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, object, omschrijving, begin, gereed, thtijdstip, verwerkt, eenheid, tht, wht, regime, groep, prefix, typekorting, basiskorting, variabelekorting, wht_tht, totaal, totaal_index, status, afgerond, dienst, stdmelding_key, discipline_key, overlappend, TO_CHAR (melding_omschrijving) melding_omschrijving, melding_opmerking, klant_melding, bedrijf_naam, bedrijf_malus, m_rest, m_verreken, opdrachtgever, REPLACE(TO_CHAR(TRUNC(SYSDATE, 'Q') -1, 'YYYY-Q'), '-', 'Q') periode, 1 actueel FROM hgcu_v_monitoring UNION ALL SELECT melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, object, omschrijving, begin, gereed, thtijdstip, verwerkt, eenheid, tht, wht, regime, groep, prefix, typekorting, basiskorting, variabelekorting, wht_tht, totaal, totaal_index, NULL status, NULL afgerond, dienst, stdmelding_key, NULL discipline_key, overlappend, melding_omschrijving, melding_opmerking, klant_melding, NULL bedrijf_naam, bedrijf_malus, NULL m_rest, NULL m_verreken, NULL opdrachtgever, periode, 0 actueel FROM hgcu_monitoring; -- Basis view voor het rapport ongegaan maken kortingen. Dit bevat alle actuele en historische meldingen CREATE OR REPLACE VIEW hgcu_v_ongedaan_korting_bron AS SELECT melding_key, bedrijf_malus, DECODE(actueel, 0, 'Historie', status) status, DECODE (SIGN (tht - wht), -1, 0, 1) optijd, 1 aantal, SUBSTR (periode, 1, 4) jaar, periode, actueel FROM T_hgcu_v_monitoring_intern m WHERE NOT EXISTS (SELECT 1 FROM T_hgcu_v_monitoring_intern mov WHERE ',' || mov.overlappend || ',' LIKE '%,' || m.melding_key || ',%' AND m.melding_key <> mov.melding_key) AND indult = 'Nee' AND klant_melding = 1 AND prefix = 'S'; CREATE OR REPLACE VIEW hgcu_v_rap_gbs_storing_def AS SELECT fac_usrdata_code gbs_melding, sd.ins_srtdiscipline_omschrijving vakgroeptype, d.ins_discipline_omschrijving vakgroep, mld_stdmelding_omschrijving melding, alg_ruimte_nr ruimte FROM fac_usrdata ud, mld_stdmelding std, mld_discipline d, ins_srtdiscipline sd, alg_v_aanwezigruimte r WHERE ud.fac_usrdata_verwijder IS NULL AND ud.fac_usrtab_key = 81 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 AND ud.fac_usrdata_omschr = r.alg_ruimte_nr(+); -- Rapport om de sychronisatie status van de koppeling op de portal te tonen. CREATE OR REPLACE VIEW hgcu_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 = 61; CREATE OR REPLACE PROCEDURE hgcu_daily AUTHID CURRENT_USER -- ivm create table rechten voor tabelizer AS BEGIN -- Zware rapportages laden via tabelizer fac.tabelize_usrraps(); END; / ------ payload end ------ SET DEFINE OFF BEGIN adm.systrackscriptId ('$Id$', 0); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile