Files
Customer/HGCU/hgcu.sql
2025-02-05 12:12:39 +00:00

1083 lines
48 KiB
PL/PgSQL
Raw Blame History

--
-- $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 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_tijdstip VARCHAR2 (100);
v_date DATE;
v_gbs_melding VARCHAR2 (1000);
v_count NUMBER;
v_error NUMBER;
v_newline VARCHAR2 (4000);
v_tag VARCHAR2 (4000);
v_from VARCHAR2 (4000);
v_body VARCHAR2 (4000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_volgnr NUMBER;
BEGIN
-- Verwijder de Bounce Address Tag Validation
IF pfrom LIKE 'prvs=%'
THEN
v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1);
ELSE
v_from := pfrom;
END IF;
IF psubject = 'Watchdog Alarm'
THEN
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = 181; -- Watchdog
ELSE
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = 60; -- Laatst ontvangen bericht
-- filter nu de essentiele velden uit de mailbody
-- vervang cr door lf
-- TO DO: MOETEN WE EEN FALLBACK STDMELDING KEY DEFINIEREN??????????????????????
v_stdmelding_key := fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
v_body := pbody;
v_body := REPLACE (v_body, CHR (13), CHR (10));
-- verwijder dubbele lf's
v_body := REPLACE (v_body, CHR (10) || CHR (10), CHR (10));
v_omschrijving := v_body;
v_onderwerp := psubject;
v_errorhint := 'Bepaal volgnummer';
SELECT MAX (fac_rapport_volgnr)
INTO v_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'GBS_MELDING';
v_errorhint := 'Bewaar mail ' || v_volgnr;
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel)
VALUES ('GBS_MELDING',
v_volgnr + 1,
SUBSTR (pfrom || CHR (10) || psubject || CHR (10) || v_omschrijving, 1, 2000));
END IF;
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'maillog', 'Geregistreerd onder melding xxx');
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 <20><>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,
24
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, '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 hgcu_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
CURSOR c1
IS
SELECT mld_melding_key
FROM hgcu_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
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, 'MONTH')
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;
BEGIN
-- Gaan we vandaag de freeze starten? Dit mag alleen op de derde werkdag van de maand om 17:00 uur.
IF fac.count_Work_Days(trunc(sysdate, 'MON'), sysdate) = 2
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.mld_melding_key, 6, 4);
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, 4);
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,
ruimte,
object,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
eenheid,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
dienst,
stdmelding_key,
totaal,
totaal_index,
overlappend,
prs_bedrijf_naam,
bedrijf_malus,
klant_melding,
export_datum)
VALUES (rec.mld_melding_key,
rec.afw,
rec.indult,
rec.respijt,
rec.ruimte,
rec.object,
rec.omschrijving,
rec.begin,
rec.gereed,
rec.thtijdstip,
rec.verwerkt,
rec.eenheid,
rec.tht,
rec.wht,
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.overlappend,
rec.bedrijf_naam,
rec.bedrijf_malus,
rec.klant_melding,
SYSDATE);
END;
END;
END LOOP;
INSERT INTO hgcu_monitoring (melding_key, export_datum)
SELECT mld_melding_key, SYSDATE
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 hgcu_monitoring nm
WHERE nm.melding_key IS NOT NULL);
COMMIT;
END IF;
END hgcu_export_freeze_monitoring;
/
-- View om het aantal percentage meldingen op tijd opgelost t.o.v. het totaal aantal meldingen te bepalen.
-- Het afmeldtijdstip 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_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(+);
------ 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