-- Script containing customer generic configuration sql statements for all PCHA and PCHW accounts -- $Revision$ -- $Id$ -- DEFINE thisfile = 'PCHX.SQL' DEFINE dbuser = 'PCHA|PCHW' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; WHENEVER SQLERROR EXIT; SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL; WHENEVER SQLERROR CONTINUE; SPOOL &fcltlogfile SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE PACKAGE PCHX_MON 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 get_index_value (p_date IN DATE, p_categorie IN VARCHAR2) RETURN NUMBER; FUNCTION klant_melding (p_melding_key IN NUMBER) RETURN NUMBER; END; / CREATE OR REPLACE PACKAGE BODY PCHX_MON AS FUNCTION get_first_melding (p_melding_key IN NUMBER, p_index IN NUMBER) RETURN NUMBER AS CURSOR ca 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 = 241) km1, mld_melding m2, mld_stdmelding std2, (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding where mld_kenmerk_key = 241) 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 std1.mld_ins_discipline_key NOT IN (232,220) -- V-G en W-R koppelen we nooit AND std1.mld_stdmeldinggroep_key = std2.mld_stdmeldinggroep_key -- voor stdmeldinggroep AND ( ( std1.mld_stdmeldinggroep_key = 161 -- FTRC AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys) -- op dezelfde ruimte OR ( std1.mld_stdmeldinggroep_key <> 161 -- FTRC AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys) -- op dezelfde ruimte AND std1.mld_ins_discipline_key = std2.mld_ins_discipline_key -- zelfde vakgroep. ) 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; CURSOR cw 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 = 221) km1, mld_melding m2, mld_stdmelding std2, (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding where mld_kenmerk_key = 221) 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_malus IS NOT NULL -- alleen meldingen waarvoor een malus geldt AND std1.mld_Stdmeldinggroep_key = std2.mld_stdmeldinggroep_key -- voor stdmeldinggroep AND ( ( std1.mld_stdmeldinggroep_key = 181 -- Prestatiekortingen AND std1.mld_ins_discipline_key = std2.mld_ins_discipline_key) OR ( std1.mld_stdmeldinggroep_key <> 181 -- Prestatiekortingen 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; rec ca%ROWTYPE; -- maakt niet uit welke cursor we hier kiezen. Ze hebben dezelfde structuur. BEGIN v_melding_key := p_melding_key; IF pchx_mon.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; IF pchx.get_user = 'PCHA' THEN OPEN ca; ELSE OPEN cw; END IF; LOOP IF pchx.get_user = 'PCHA' THEN FETCH ca INTO rec; EXIT WHEN ca%NOTFOUND; ELSE FETCH cw INTO rec; EXIT WHEN cw%NOTFOUND; END IF; -- 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: ' || '-' || pchx_mon.klant_melding (rec.mld_melding_key)); IF pchx_mon.klant_melding (rec.mld_melding_key) = 1 THEN BEGIN l_melding_key := PCHX_MON.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 pchx_mon.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 get_index_value (p_date IN DATE, p_key IN NUMBER) RETURN NUMBER AS CURSOR c IS SELECT COALESCE(fac_usrdata_volgnr, 1) * fac_usrdata_prijs / 100000 fac_usrdata_prijs FROM fac_usrdata WHERE fac_usrtab_key = p_key AND fac_usrdata_verwijder IS NULL AND p_date > add_months(fac_usrdata_vervaldatum, -12); v_result NUMBER; BEGIN dbms_output.put_line('start ' || p_key); v_result := 1; FOR rec IN c LOOP BEGIN dbms_output.put_line(rec.fac_usrdata_prijs); v_result := v_result * (rec.fac_usrdata_prijs / 100 + 1); END; END LOOP; RETURN v_result; END; FUNCTION get_index_value (p_date IN DATE, p_categorie IN VARCHAR2) RETURN NUMBER AS v_index_1_key NUMBER; v_index_4_key NUMBER; v_index_5_key NUMBER; v_index_7_key NUMBER; v_index_10_key NUMBER; v_index_14_key NUMBER; v_index_18_key NUMBER; v_index_19_key NUMBER; v_index_20_key NUMBER; v_index_24_key NUMBER; v_index_25_key NUMBER; v_index_28_key NUMBER; v_index_1_value NUMBER; v_index_4_value NUMBER; v_index_5_value NUMBER; v_index_7_value NUMBER; v_index_10_value NUMBER; v_index_14_value NUMBER; v_index_18_value NUMBER; v_index_19_value NUMBER; v_index_20_value NUMBER; v_index_24_value NUMBER; v_index_25_value NUMBER; v_index_28_value NUMBER; v_result NUMBER; BEGIN IF PCHX.get_user = 'PCHA' THEN v_index_1_key := 181; v_index_4_key := 182; v_index_5_key := 183; v_index_7_key := 184; v_index_18_key := 241; v_index_20_key := 185; ELSE -- PCHW v_index_1_key := 121; v_index_10_key := 122; v_index_14_key := 123; v_index_19_key := 124; v_index_24_key := 125; v_index_25_key := 141; v_index_28_key := 126; END IF; v_index_1_value := get_index_value (p_date, v_index_1_key); v_index_4_value := get_index_value (p_date, v_index_4_key); v_index_5_value := get_index_value (p_date, v_index_5_key); v_index_7_value := get_index_value (p_date, v_index_7_key); v_index_10_value := get_index_value (p_date, v_index_10_key); v_index_14_value := get_index_value (p_date, v_index_14_key); v_index_18_value := get_index_value (p_date, v_index_18_key); v_index_19_value := get_index_value (p_date, v_index_19_key); v_index_20_value := get_index_value (p_date, v_index_20_key); v_index_24_value := get_index_value (p_date, v_index_24_key); v_index_25_value := get_index_value (p_date, v_index_25_key); v_index_28_value := get_index_value (p_date, v_index_28_key); CASE p_categorie WHEN 'MON' THEN v_result := v_index_1_value; WHEN 'CAT' THEN v_result := 1; WHEN 'FAC' THEN v_result := v_index_18_value; WHEN 'BEV' THEN v_result := 0.75 * v_index_5_value + 0.25 * v_index_7_value; WHEN 'SCH' THEN v_result := 0.80 * v_index_4_value + 0.15 * v_index_7_value + 0.05 * v_index_20_value; WHEN 'GLA' THEN v_result := 0.05 * v_index_1_value + 0.80 * v_index_4_value + 0.15 * v_index_7_value; WHEN 'SVD1' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD2' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD3' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD4' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD5' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD6' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD7' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD8' THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value; WHEN 'SVD9' THEN v_result := 0.3 * v_index_10_value + 0.7 * v_index_28_value; WHEN 'SVD10' THEN v_result := 0.3 * v_index_10_value + 0.7 * v_index_28_value; WHEN 'SVD11' THEN v_result := v_index_10_value; WHEN 'SVD12' THEN v_result := v_index_10_value; WHEN 'SVD13' THEN v_result := 0.2 * v_index_10_value + 0.8 * v_index_19_value; ELSE v_result := 1; END CASE; RETURN v_result; END; FUNCTION klant_melding (p_melding_key IN NUMBER) RETURN NUMBER AS v_klant_melding NUMBER; BEGIN SELECT DECODE (a.prs_bedrijf_key, DECODE (pchx.get_user, 'PCHW', 121, 102), 1, 0) klant_melding 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; RETURN v_klant_melding; EXCEPTION WHEN OTHERS THEN RETURN 0; END; END; / -- Monitoring CREATE OR REPLACE VIEW pchx_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 PCHX_MON.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, pchx_mon.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 pchx_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_index, status, afgerond, dienst, stdmelding_key, discipline_key, overlappend, gekoppeld, wegingsfactor, melding_omschrijving, melding_opmerking, klant_melding, bedrijf_naam, og, bedrijf_malus, prefix ) 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 || DECODE (niet_overlappen, 1, 'O', '') -- melding is gemarkeerd als zijnde niet te overlappen met een andere melding || DECODE (aantal_beschikb, 0, '', 'B'), -- binnen de looptijd van de melding is er ook een beschikbaarheidsmelding in dezelfde ruimte DECODE (COALESCE (mld_melding_indult, 0), 0, 'Nee', 'Ja'), DECODE (g.respijt.tijdsduur, 0, NULL, TO_CHAR (ROUND (g.respijt.tijdsduur, 2))) respijt, prs_kostenplaats_nr, alg_locatie_code, alg_gebouw_upper, alg_verdieping_volgnr, ruimte, mld_stdmelding_omschrijving, t_van, gereed, thtijdstip, (SELECT MAX(fac_tracking_datum) FROM fac_tracking WHERE fac_tracking_refkey = m_start --mld_melding_key AND fac_srtnotificatie_key = 46) 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, -- Westland rond de breuk af op 1 decimaal en HGH rond af op gehele getallen. coalesce(bk,0) + DECODE(vk, null, 0, (ROUND (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur), DECODE(pchx.get_user, 'PCHW', 1,0)) * vk)), -- Alleen als dagen x24! NULL) totaal, DECODE ( telaat, 1, coalesce(bk,0) + DECODE(vk, null, 0, (ROUND (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur), DECODE(pchx.get_user, 'PCHW', 1,0)) * vk)), -- Alleen als dagen x24! NULL) * PCHX_MON.get_index_value(t_van, 'MON') totaal_index, (SELECT mld_statuses_omschrijving FROM mld_statuses WHERE mld_statuses_key = mld_melding_status), DECODE (mld_melding_afgerond, 1, 'x'), (SELECT prs_dienst_omschrijving FROM prs_dienst WHERE prs_dienst_key = g.prs_dienst_key), 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 m2.mld_melding_parentkey = m_start) gekoppeld, wegingsfactor, mld_melding_omschrijving, mld_melding_opmerking, klant_melding, (SELECT prs_bedrijf_naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = g.prs_bedrijf_key) prs_bedrijf_naam, DECODE (antedateren + g.respijt.tijdsduur + mld_melding_indult + mld_melding_afgerond, 0, 0, 1), PCHX.get_kenmerk('MLD', DECODE(PCHX.get_user, 'PCHA', 61, 121), m_start), ins_srtdiscipline_prefix 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 = DECODE(PCHX.get_user, 'PCHA', 241, 221) 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, PCHX_MON.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, 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 sr.alg_srtruimte_prijs4 wegingsfactor, -- wegingsfactor bij soortruimte -- 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 pchx_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 (sd.ins_srtdiscipline_prefix, 1, 1)) = 'Q' OR (PCHX.get_user = 'PCHA' AND d.ins_discipline_key in (232, 220)) -- 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; -- Rapport om de niet gegroeperde data te zien CREATE OR REPLACE VIEW pchx_v_monitoring_onderlegger ( start_key, melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, omschrijving, begin, gereed, thtijdstip, tht, eenheid, wht, regime, basiskorting, variabelekorting, melding_omschrijving, melding_opmerking, klant_melding ) AS SELECT pchx_mon.get_first_melding (m.mld_melding_key, 1) m_start, m.mld_melding_key, DECODE (antedateren.aantal, 0, '', NULL, '', 'T') -- de begintijd of eindtijd van de melding is aangepast || DECODE (m.mld_melding_t_respijt.tijdsduur, 0, '', NULL, '', 'R') -- er is een respijt ingevuld || DECODE (m.mld_melding_indult, 1, 'I', '') afw, -- indult is aangevinkt dus melding doet niet mee m.mld_melding_indult indult, m.mld_melding_t_respijt.tijdsduur respijt, alg_locatie_code, alg_gebouw_upper, alg_verdieping_volgnr, alg_ruimte_nr, std.mld_stdmelding_omschrijving, m.mld_melding_datum begin, fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed, m.mld_melding_einddatum_std thttijdstip, m.mld_melding_t_uitvoertijd.tijdsduur tht, m.mld_melding_t_uitvoertijd.eenheid thteenheid, mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd! m.mld_melding_datum, COALESCE (fac.gettrackingdate ('MLDAFM', m.mld_melding_key), SYSDATE), m.mld_stdmelding_key, m.mld_melding_spoed, m.mld_alg_onroerendgoed_keys, NULL).tijdsduur wht, pchx_mon.get_regime (std.mld_stdmelding_key, m.mld_alg_onroerendgoed_keys, NULL) regime, 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, mld_melding_omschrijving, mld_melding_opmerking, pchx_mon.klant_melding(m.mld_melding_key) FROM mld_melding m, mld_stdmelding std, alg_v_ruimte_gegevens rg, ( SELECT COUNT ( * ) aantal, t.fac_tracking_refkey FROM fac_tracking t, fac_srtnotificatie sn WHERE 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:%') GROUP BY t.fac_tracking_refkey) antedateren WHERE m.mld_melding_parentkey IS NULL AND m.mld_melding_key = antedateren.fac_tracking_refkey(+) AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_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 -- 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)); -- 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 pchx_v_monitoring_tot ( melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, omschrijving, begin, gereed, thtijdstip, verwerkt, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, wegingsfactor, melding_omschrijving, melding_opmerking, dienst, stdmelding_key, totaal, totaal_index, overlappend, gekoppeld, kinderen, bedrijf_naam, klant_melding, bedrijf_malus, prefix ) AS SELECT melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, omschrijving, begin, gereed, thtijdstip, verwerkt, eenheid, tht, wht, wht_tht, regime, groep, NULL typekorting, basiskorting, variabelekorting, wegingsfactor, melding_omschrijving, melding_opmerking, dienst, stdmelding_key, totaal, totaal_index, SUBSTR (overlappend, 1, 100), SUBSTR (gekoppeld, 1, 100), NULL, -- kinderen bij herhalingskorting bedrijf_naam, klant_melding, bedrijf_malus, prefix FROM pchx_v_monitoring WHERE totaal IS NOT NULL AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie')) AND (gereed < TRUNC (SYSDATE, 'MONTH') -- Vorige maand afgemeld als we al over de maandgrens zitten. OR TRUNC (SYSDATE, 'MONTH') = -- Huidige maand. Dan is de huidige maand gelijk aan de maand van de laatste export (SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring)) UNION ALL SELECT NULL melding_key, NULL afw, NULL indult, NULL respijt, NULL locatie, NULL gebouw, NULL verdieping, NULL ruimte, NULL omschrijving, ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin, TRUNC (SYSDATE, 'MONTH') gereed, NULL thtijdstip, NULL verwerkt, NULL eenheid, NULL tht, NULL wht, NULL wht_tht, NULL regime, 'Overschrijding' groep, NULL typekorting, NULL basiskorting, 250 variabelekorting, NULL wegingsfactor, NULL melding_omschrijving, NULL melding_opmerking, NULL dienst, NULL stdmelding_key, 250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal, PCHX_MON.get_index_value(TRUNC(SYSDATE)-1, 'MON') * 250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal_index, NULL overlappend, NULL gekoppeld, listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting NULL bedrijf_naam, NULL klant_melding, NULL bedrijf_malus, NULL prefix FROM pchx_v_monitoring WHERE PCHX.get_user = 'PCHW' AND totaal IS NOT NULL AND totaal <> 0 AND indult = 'Nee' AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie')) AND (gereed < TRUNC (SYSDATE, 'MONTH') OR TRUNC (SYSDATE, 'MONTH') = (SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring)) GROUP BY 'Overschrijding' UNION ALL SELECT NULL melding_key, NULL afw, NULL indult, NULL respijt, NULL locatie, NULL gebouw, NULL verdieping, NULL ruimte, NULL omschrijving, ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin, TRUNC (SYSDATE, 'MONTH') gereed, NULL thtijdstip, NULL verwerkt, NULL eenheid, NULL tht, NULL wht, NULL wht_tht, NULL regime, 'Overschrijding' groep, NULL typekorting, NULL basiskorting, 50 variabelekorting, NULL wegingsfactor, NULL melding_omschrijving, NULL melding_opmerking, NULL dienst, NULL stdmelding_key, 50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal, PCHX_MON.get_index_value(TRUNC(SYSDATE)-1, 'MON') * 50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal_index, NULL overlappend, NULL gekoppeld, listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting NULL bedrijf_naam, NULL klant_melding, NULL bedrijf_malus, NULL prefix FROM pchx_v_monitoring WHERE PCHX.get_user = 'PCHW' AND indult = 'Nee' AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie')) AND (gereed < TRUNC (SYSDATE, 'MONTH') OR TRUNC (SYSDATE, 'MONTH') = (SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring)) GROUP BY 'Overschrijding'; CREATE OR REPLACE VIEW pchx_v_monitoring_history ( maand, export_datum, melding_key, afw, indult, respijt, ruimte, omschrijving, begin, gereed, thtijdstip, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, totaal, totaal_index, dienst, hide_f_stdmelding_key, wegingsfactor, overlappend, gekoppeld, kinderen, klant_melding, bedrijf, melding_omschrijving, melding_opmerking, bedrijf_malus, prefix ) AS SELECT TO_CHAR(TRUNC(export_datum, 'MONTH')-1, 'yyyy-month') maand, export_datum, melding_key, afw, indult, respijt, ruimte, omschrijving, begin, gereed, thtijdstip, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, totaal, totaal_index, dienst, stdmelding_key, wegingsfactor, overlappend, gekoppeld, kinderen, klant_melding, prs_bedrijf_naam, melding_omschrijving, melding_opmerking, bedrijf_malus, prefix FROM pchx_monitoring mo WHERE begin IS NOT NULL; CREATE OR REPLACE VIEW pchx_v_facuur_onderlegger ( maand, export_datum, melding_key, afw, indult, respijt, ruimte, omschrijving, begin, gereed, thtijdstip, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, totaal, totaal_index, dienst, hide_f_stdmelding_key, wegingsfactor, overlappend, gekoppeld, klant_melding, bedrijf, melding_omschrijving, melding_opmerking, bedrijf_malus, prefix ) AS SELECT TO_CHAR(TRUNC(export_datum, 'MONTH')-1, 'yyyy-month') maand, export_datum, melding_key, afw, indult, respijt, ruimte, omschrijving, begin, gereed, thtijdstip, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, totaal, totaal_index, dienst, stdmelding_key, wegingsfactor, overlappend, gekoppeld, klant_melding, prs_bedrijf_naam, melding_omschrijving, melding_opmerking, bedrijf_malus, prefix FROM pchx_monitoring mo WHERE totaal <> 0; CREATE OR REPLACE VIEW pchx_v_rap_svd ( xml_node, mld_melding_key, svd_type, status, datum, omschrijving, aantal, prijs, totaal, index_totaal, mld_opdr_key, lomschr, kostensoort, kostenkenmerk, kostenplaats ) AS SELECT 'opdracht', TO_CHAR (m.mld_melding_key), DECODE (SUBSTR (fac_usrdata_upper, 1, 3), 'BEV', 'Risicobeheersing', 'Schoonmaken'), DECODE (mld_statusopdr_key, 6, 'Afgemeld', 9, 'Afgerond', 7, 'Verwerkt', 'Open'), COALESCE (mld_opdr_plandatum, mld_opdr_einddatum), COALESCE (mld_opdr_materiaal_omschr, ud.fac_usrdata_omschr), mld_opdr_materiaal_aantal, mld_opdr_materiaal_prijs, mld_opdr_materiaal_aantal * mld_opdr_materiaal_prijs totaal, ROUND ( PCHX_MON.get_index_value (COALESCE (mld_opdr_plandatum, mld_opdr_einddatum), SUBSTR(fac_usrdata_code, 1,3) ) * mld_opdr_materiaal_aantal * mld_opdr_materiaal_prijs, 2) index_totaal, o.mld_opdr_key, DECODE ( fac_usrdata_upper, 'BEVBINKAN24', 'Extra capaciteit beveiliging binnen reguliere gebruikstijden, die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.', 'BEVBINKAN4', 'Extra capaciteit beveiliging binnen reguliere gebruikstijden, die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.', 'BEVBUIKANA24', 'Extra capaciteit beveiliging buiten reguliere gebruikstijden, avond die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.', 'BEVBUIKANA4', 'Extra capaciteit beveiliging buiten reguliere gebruikstijden, avond die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.', 'BEVBUIKANW24', 'Extra capaciteit beveiliging buiten reguliere gebruikstijden, weekend die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.', 'BEVBUIKANW4', 'Extra capaciteit beveiliging buiten reguliere gebruikstijden, weekend die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.', 'BEVCALBINKAN2', 'Onbekend', 'BEVCALBUIKANA2', 'Onbekend', 'BEVCALBUIKANW2', 'Onbekend', 'SCHSPOEL', 'Extra capaciteit schoonmaak, spoelkeuken medewerker', 'SCHPC', 'Extra capaciteit schoonmaak, reiniging PC en toebehoren (= toetsenbord en muis)', 'SCHBINKAN', 'Extra capaciteit schoonmaak, dagkracht', 'SCHBUIKAN', 'Extra capaciteit schoonmaak, avonden / weekenden', 'SCHGRAF', 'Extra capaciteit schoonmaak, verwijderen graffiti', 'GLADHEIDBESTR', 'Gladheidbestrijding', 'FACONDAVO', 'Fac. Ondersteuner avond', 'FACONDKAN', 'Fac. Ondersteuner kantoor (>160 uur)', 'FACONDKANLT160', 'Fac. Ondersteuner kantoor (<160 uur)', 'FACONDZAT', 'Fac. Ondersteuner zaterdag', 'FACONDZON', 'Fac. Ondersteuner zondag', fac_usrdata_upper) lomschr, DECODE (fac_usrdata_upper, 'BEVBINKAN24', '80', 'BEVBINKAN4', '81', 'BEVBUIKANA24', '82', 'BEVBUIKANA4', '83', 'BEVBUIKANW24', '84', 'BEVBUIKANW4', '85', 'BEVCALBINKAN2', 'Onbekend', 'BEVCALBUIKANA2', 'Onbekend', 'BEVCALBUIKANW2', 'Onbekend', 'SCHSPOEL', '88', 'SCHPC', '89', 'SCHBINKAN', '90', 'SCHBUIKAN', '91', 'SCHGRAF', '92', 'GLADHEIDBESTR', '93', fac_usrdata_upper) kostensoort, DECODE (fac_usrdata_upper, 'BEVBINKAN24', '6.1.1', 'BEVBINKAN4', '6.1.2', 'BEVBUIKANA24', '6.1.3', 'BEVBUIKANA4', '6.1.4', 'BEVBUIKANW24', '6.1.5', 'BEVBUIKANW4', '6.1.6', 'BEVCALBINKAN2', 'Onbekend', 'BEVCALBUIKANA2', 'Onbekend', 'BEVCALBUIKANW2', 'Onbekend', 'SCHSPOEL', '6.2.7', 'SCHPC', '6.2.8', 'SCHBINKAN', '6.2.9', 'SCHBUIKAN', '6.2.10', 'SCHGRAF', '6.2.11', 'GLADHEIDBESTR', '6.2.12', fac_usrdata_upper) kostenkenmerk, prs_kostenplaats_nr FROM mld_opdr o, mld_opdr_materiaal om, fac_usrdata ud, mld_melding m, mld_stdmelding std, mld_discipline d, prs_kostenplaats k WHERE o.mld_opdr_key = om.mld_opdr_key AND ud.fac_usrdata_key = om.fac_usrdata_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND mld_statusopdr_key NOT IN (1, 2) UNION ALL SELECT 'artikel', res_reservering_key || '/' || res_rsv_ruimte_volgnr, 'Catering', b.res_status_bo_omschrijving, res_rsv_ruimte_van, ra.res_artikel_omschrijving, rra.res_rsv_artikel_aantal, ra.res_artikel_prijs, res.getartikelprijs (rra.res_rsv_artikel_key), PCHX_MON.get_index_value (SYSDATE, ra.res_artikel_groep) * res.getartikelprijs (rra.res_rsv_artikel_key), rra.res_rsv_artikel_key, ra.res_artikel_omschrijving, ra.res_artikel_groep, NULL, k.prs_kostenplaats_nr FROM res_rsv_ruimte rrr, res_rsv_artikel rra, res_artikel ra, res_status_bo b, prs_kostenplaats k WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND rra.res_artikel_key = ra.res_artikel_key AND rra.res_status_bo_key = b.res_status_bo_key AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND rra.res_rsv_artikel_verwijder IS NULL AND ra.res_artikel_groep LIKE 'SVD%'; CREATE OR REPLACE PROCEDURE pchx_select_freeze_mon ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c1 IS SELECT melding_key, indult FROM pchx_v_monitoring WHERE status = 'Afgemeld' AND gereed < TRUNC (SYSDATE, 'MONTH') AND afw IS NULL; -- geen afwijkingen die goedgekeurd moeten worden --AND afgerond IS NULL -- expliciete goedkeuring staat niet aan -- !!! controleer ook meldingen die aan elkaar gekoppeld zijn !!!!!!!!!!!!!!!!!! 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 PCHX_MON.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, 'MONTH') AND m.mld_melding_key NOT IN (SELECT melding_key FROM pchx_monitoring WHERE melding_key IS NOT NULL) ) m, pchx_v_monitoring mo WHERE m_start <> m.mld_melding_key AND m_start = mo.melding_key AND ( (status = 'Afgemeld' AND afw IS NULL) -- startmelding mag niet hangen op goedkeuring OR (status = 'Historie')); CURSOR c3 IS SELECT * FROM pchx_v_monitoring_tot WHERE groep <> 'Overschrijding'; CURSOR c_svd_opdracht IS SELECT * FROM pchx_v_rap_svd WHERE status = 'Afgerond' AND xml_node = 'opdracht' AND datum < TRUNC (SYSDATE, 'MONTH'); CURSOR c_svd_artikel IS SELECT * FROM pchx_v_rap_svd WHERE status = 'Afgemeld' AND xml_node = 'artikel' AND datum < TRUNC (SYSDATE, 'MONTH'); v_exportdate DATE; v_lastexport DATE; v_kortingen_totaal NUMBER(11,2); v_svd_totaal NUMBER(11,2); BEGIN v_exportdate := SYSDATE; -- 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 pchx_monitoring; IF TRUNC (COALESCE(v_lastexport, SYSDATE-100), 'MONTH') <> TRUNC(v_exportdate, 'MONTH') 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 mld.setmeldingstatus (rec.melding_key, 6, NULL); 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 mld.setmeldingstatus (rec.mld_melding_key, 6, NULL); 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 pchx_monitoring (melding_key, afw, indult, respijt, locatie, gebouw, verdieping, ruimte, omschrijving, begin, gereed, thtijdstip, verwerkt, eenheid, tht, wht, wht_tht, regime, groep, typekorting, basiskorting, variabelekorting, wegingsfactor, dienst, stdmelding_key, totaal, totaal_index, overlappend, gekoppeld, kinderen, prs_bedrijf_naam, klant_melding, melding_omschrijving, melding_opmerking, export_datum, bedrijf_malus, prefix) VALUES (rec.melding_key, rec.afw, rec.indult, rec.respijt, rec.locatie, rec.gebouw, rec.verdieping, rec.ruimte, rec.omschrijving, rec.begin, rec.gereed, rec.thtijdstip, rec.verwerkt, rec.eenheid, rec.tht, rec.wht, rec.wht_tht, rec.regime, rec.groep, rec.typekorting, rec.basiskorting, rec.variabelekorting, rec.wegingsfactor, rec.dienst, rec.stdmelding_key, DECODE (rec.indult, 'Ja', 0, rec.totaal), DECODE (rec.indult, 'Ja', 0, rec.totaal_index), rec.overlappend, rec.gekoppeld, rec.kinderen, rec.bedrijf_naam, rec.klant_melding, rec.melding_omschrijving, rec.melding_opmerking, v_exportdate, rec.bedrijf_malus, rec.prefix); END; END; END LOOP; INSERT INTO pchx_monitoring (melding_key, indult, export_datum) SELECT mld_melding_key, DECODE(mld_melding_indult, 1, 'Ja', 'Nee'), v_exportdate FROM mld_melding m WHERE m.mld_melding_status = 6 -- Historie AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TRUNC (SYSDATE, 'MONTH') AND m.mld_melding_key NOT IN (SELECT nm.melding_key FROM pchx_monitoring nm WHERE nm.melding_key IS NOT NULL); IF PCHX.get_user = 'PCHW' THEN -- Voeg de overschrijdingskorting toe. INSERT INTO pchx_monitoring (begin, gereed, groep, variabelekorting, totaal, totaal_index, kinderen, export_datum) SELECT ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin, TRUNC (SYSDATE, 'MONTH') gereed, 'Overschrijding' groep, 250 variabelekorting, 250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal, PCHX_MON.get_index_value(TRUNC(SYSDATE)-1, 'MON') * 250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal_index, listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting v_exportdate FROM pchx_monitoring WHERE totaal IS NOT NULL AND totaal <> 0 AND COALESCE(groep, 'Quequleque') <> 'Overschrijding' AND export_datum = v_exportdate GROUP BY 'Overschrijding' UNION ALL SELECT ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin, TRUNC (SYSDATE, 'MONTH') gereed, 'Overschrijding' groep, 50 variabelekorting, 50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal, PCHX_MON.get_index_value(TRUNC(SYSDATE)-1, 'MON') * 50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal_index, listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting v_exportdate FROM pchx_monitoring WHERE COALESCE(groep, 'Quequleque') <> 'Overschrijding' AND indult = 'Nee' AND export_datum = v_exportdate GROUP BY 'Overschrijding'; END IF; SELECT SUM(totaal) INTO v_kortingen_totaal FROM pchx_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; -- Freeze van SVD's -- 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 pchx_svd; IF TRUNC (COALESCE(v_lastexport, SYSDATE-100), 'MONTH') <> TRUNC(v_exportdate, 'MONTH') THEN FOR rec IN c_svd_opdracht LOOP BEGIN INSERT INTO pchx_svd (mld_melding_key, svd_type, status, datum, omschrijving, aantal, prijs, totaal, index_totaal, mld_opdr_key, lomschr, kostensoort, kostenkenmerk, export_datum) VALUES (rec.mld_melding_key, rec.svd_type, rec.status, rec.datum, rec.omschrijving, rec.aantal, rec.prijs, rec.totaal, rec.index_totaal, rec.mld_opdr_key, rec.lomschr, rec.kostensoort, rec.kostenkenmerk, v_exportdate); mld.setopdrachtstatus (rec.mld_opdr_key, 7, NULL); mld.updatemeldingstatus (rec.mld_melding_key, 0, NULL); END; END LOOP; FOR rec IN c_svd_artikel LOOP BEGIN INSERT INTO pchx_svd (mld_melding_key, svd_type, status, datum, omschrijving, aantal, prijs, totaal, index_totaal, mld_opdr_key, lomschr, kostensoort, kostenkenmerk, export_datum) VALUES (rec.mld_melding_key, rec.svd_type, rec.status, rec.datum, rec.omschrijving, rec.aantal, rec.prijs, rec.totaal, rec.index_totaal, rec.mld_opdr_key, rec.lomschr, rec.kostensoort, rec.kostenkenmerk, v_exportdate); UPDATE res_rsv_artikel rra SET res_rsv_artikel_verwerkt = v_exportdate, res_status_bo_key = 6 WHERE rra.res_rsv_artikel_key = rec.mld_opdr_key; END; END LOOP; SELECT SUM(totaal) INTO v_svd_totaal FROM pchx_svd WHERE export_datum = v_exportdate; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) VALUES ('FREEZE', 'SVD totaal: ' || v_svd_totaal, 2); ELSE INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) VALUES ('FREEZE', 'SVDs zijn al bevroren deze maand op ' || TO_CHAR(v_lastexport, 'dd-mm-yyyy hh24:mi:ss'), 2); END IF; COMMIT; END pchx_select_freeze_mon; / CREATE OR REPLACE PROCEDURE pchx_export_freeze_mon ( 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 pchx_v_export_freeze_mon ( result, result_order) AS SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'FREEZE'; CREATE OR REPLACE VIEW pchx_v_svd_history ( mld_melding_key, mld_opdr_key, svd_type, status, datum, omschrijving, aantal, prijs, totaal, index_totaal, export_datum, maand, lomschr, kostensoort, kostenkenmerk ) AS SELECT mld_melding_key, mld_opdr_key, svd_type, status, datum, omschrijving, aantal, prijs, totaal, index_totaal, export_datum, TO_CHAR(TRUNC(export_datum, 'MONTH')-1, 'yyyy-month') maand, lomschr, kostensoort, kostenkenmerk FROM pchx_svd; -- Rapport om aanpassingen in de stdmelding/vakgroep te signaleren. CREATE OR REPLACE VIEW pchx_v_mld_cat_aanpassing AS SELECT m.mld_melding_key, m.mld_melding_onderwerp, fac_tracking_datum, fac_tracking_oms FROM fac_tracking t, mld_melding m WHERE fac_tracking_oms LIKE '%Melding:%' AND m.mld_melding_key = t.fac_tracking_refkey; CREATE OR REPLACE VIEW pchx_v_rap_stmelding_os_check ( ins_srtdiscipline_omschrijving, ins_discipline_omschrijving, mld_stdmelding_omschrijving, mld_stdmelding_uitvoertijd_t, mld_stdmelding_uitvoertijd_e, mld_stdmelding_regime, mld_stdmelding_malus, mld_stdmelding_malusbasis, alg_srtruimte_code, mld_stdmsrtruimte_t_uitvtijd_t, mld_stdmsrtruimte_t_uitvtijd_e, mld_stdmsrtruimte_regime, mld_stdmsrtruimte_malus, mld_stdmsrtruimte_malusbasis ) AS SELECT sd.ins_srtdiscipline_omschrijving, ins_discipline_omschrijving, mld_stdmelding_omschrijving, std.mld_stdmelding_t_uitvoertijd.tijdsduur mld_stdmelding_uitvoertijd_t, std.mld_stdmelding_t_uitvoertijd.eenheid mld_stdmelding_uitvoertijd_e, DECODE (mld_stdmelding_regime, 1, 'DagregimeDienst', 2, 'DagregimeRuimte', 3, '24/7') mld_stdmelding_regime, mld_stdmelding_malus, mld_stdmelding_malusbasis, sr.alg_srtruimte_code, stdsr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur mld_stdmsrtruimte_t_uitvtijd_t, stdsr.mld_stdmsrtruimte_t_uitvtijd.eenheid mld_stdmsrtruimte_t_uitvtijd_e, DECODE (mld_stdmsrtruimte_regime, 1, 'DagregimeDienst', 2, 'DagregimeRuimte', 3, '24/7') mld_stdmsrtruimte_regime, stdsr.mld_stdmsrtruimte_malus, stdsr.mld_stdmsrtruimte_malusbasis FROM mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd, mld_stdmsrtruimte stdsr, alg_srtruimte sr WHERE std.mld_stdmelding_key = stdsr.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_stdmelding_verwijder IS NULL AND stdsr.alg_srtruimte_key = sr.alg_srtruimte_key(+); -- Notificatiejob om een bericht naar de contractmanager te sturen op het moment dat een melding afgerond of afgemeld (alleen PCHW) wordt CREATE OR REPLACE VIEW pchx_v_noti_melding_afrond ( sender, receiver, text, code, key, xkey ) AS SELECT DISTINCT NULL sender, gg.prs_perslid_key receiver, 'Facilitor: Melding: ' || m.mld_melding_key || ' is ter goedkeuring aangeboden.', 'MLDINF' code, mld_melding_key key, NULL xkey FROM mld_melding m, fac_srtnotificatie sn, fac_tracking t, fac_gebruikersgroep gg WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'MLDAFR' AND t.fac_tracking_refkey = m.mld_melding_key AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE LOWER (fac_notificatie_job_view) = 'pchx_v_noti_melding_afrond') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE LOWER (fac_notificatie_job_view) = 'pchx_v_noti_melding_afrond') -- Notificatie wordt gestuurd naar de contractbeheerders AND gg.fac_groep_key = DECODE(pchx.get_user, 'PCHW',63, 'PCHA', 61) UNION ALL SELECT DISTINCT NULL sender, gg.prs_perslid_key receiver, 'Facilitor: Melding: ' || m.mld_melding_key || ' is gereed gemeld.', 'MLDINF' code, mld_melding_key key, NULL xkey FROM mld_melding m, prs_perslid p, prs_v_afdeling a, fac_srtnotificatie sn, fac_tracking t, fac_gebruikersgroep gg WHERE m.prs_perslid_key = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = 121 -- Gemeente Westland AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'MLDAFM' AND t.fac_tracking_refkey = m.mld_melding_key AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE LOWER (fac_notificatie_job_view) = 'pchx_v_noti_melding_afrond') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE LOWER (fac_notificatie_job_view) = 'pchx_v_noti_melding_afrond') -- Notificatie wordt gestuurd naar de contractbeheerders AND gg.fac_groep_key = 63 AND pchx.get_user = 'PCHW'; /* Formatted on 4/12/2017 16:43:33 (QP5 v5.313) */ CREATE OR REPLACE VIEW pchx_v_dashboard_korting ( melding, omschrijving, bedrijf_malus, marge, hide_f_marge, totaal_index, tht_tijdstip, eenheid, tht, status, basiskorting, variabelekorting, overlap_kort, melder, afw ) AS SELECT melding_key, omschrijving, bedrijf_malus, (SELECT ROUND ( m.mld_melding_t_uitvoertijd.tijdsduur - mld.getactualuitvoer (m.mld_melding_key).tijdsduur, 2) || ' ' || m.mld_melding_t_uitvoertijd.eenheid FROM mld_melding m WHERE mo.melding_key = m.mld_melding_key) marge_txt, (SELECT ROUND ( m.mld_melding_t_uitvoertijd.tijdsduur - mld.getactualuitvoer (m.mld_melding_key).tijdsduur, 2) FROM mld_melding m WHERE mo.melding_key = m.mld_melding_key) marge, ROUND (totaal_index) totaal_index, thtijdstip, eenheid, tht, status, basiskorting, variabelekorting, DECODE (INSTR (overlappend, ',', 1, 1), 0, '', NULL, '', SUBSTR (overlappend, INSTR (overlappend, ',', 1, 1) + 1, DECODE (INSTR (overlappend, ',', 1, 2), 0, 100, DECODE (INSTR (overlappend, ',', 1, 3), 0, 100, INSTR (overlappend, ',', 1, 3) - INSTR (overlappend, ',', 1, 1) - 1)))) || DECODE (INSTR (overlappend, ',', 1, 3), NULL, '', 0, '', '...') overl_kort, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf, mld_melding m WHERE mo.melding_key = m.mld_melding_key AND m.prs_perslid_key = pf.prs_perslid_key) melder, afw FROM pchx_v_monitoring mo WHERE gereed IS NULL AND indult <> 'Ja'; -- nieuwe versie CREATE OR REPLACE VIEW pchx_v_dashboard_korting_optij ( melding, omschrijving, bedrijf_malus, marge, hide_f_marge, totaal_index, tht_tijdstip, eenheid, tht, status, basiskorting, variabelekorting, melder, afw ) AS SELECT mld_melding_key, mld_stdmelding_omschrijving, PCHX.get_kenmerk ('MLD', DECODE (PCHX.get_user, 'PCHA', 61, 121), m.mld_melding_key) bedrijf_malus, ROUND ( m.mld_melding_t_uitvoertijd.tijdsduur - mld.getactualuitvoer (m.mld_melding_key).tijdsduur, 2) || ' ' || m.mld_melding_t_uitvoertijd.eenheid marge_txt, ROUND ( m.mld_melding_t_uitvoertijd.tijdsduur - mld.getactualuitvoer (m.mld_melding_key).tijdsduur, 2) marge, NULL totaal_index, mld.geteinddatum (m.mld_melding_key) thttijdstip, m.mld_melding_t_uitvoertijd.eenheid tht_eenheid, m.mld_melding_t_uitvoertijd.tijdsduur + COALESCE (m.mld_melding_t_respijt.tijdsduur, 0) tht, s.mld_statuses_omschrijving, 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, prs_perslid_naam_full, DECODE (mld_melding_indult, 1, 'I') || DECODE (m.mld_melding_t_respijt.eenheid, NULL, '', 'R') FROM mld_melding m, mld_stdmelding std, mld_statuses s, alg_v_ruimte_gegevens rg, prs_v_perslid_fullnames_all pf WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND m.mld_melding_indult = 0 AND std.mld_stdmelding_slabewaken = 1 AND s.mld_statuses_key = m.mld_melding_status AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) IS NULL AND pchx_mon.klant_melding (m.mld_melding_key) = 1 AND m.mld_melding_parentkey IS NULL AND m.mld_melding_status <> 1 -- Afgewezen AND m.prs_perslid_key = pf.prs_perslid_key AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key; CREATE OR REPLACE VIEW pchx_v_dashboard_kwis ( ins_srtdiscipline_omschrijving, aantal ) AS SELECT ins_srtdiscipline_omschrijving, COUNT (mld_melding_key) 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 IN (0, 2, 3, 4, 7) GROUP BY ins_srtdiscipline_omschrijving; ------ 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