Files
Customer/HGCU/hgcu.sql
Arthur Egberink 43f429ed6c HGCU#90592 Wachtdog configuratie aangepast. Watchdog wordt nu per systeem bijgehouden.
svn path=/Customer/trunk/; revision=70382
2025-09-22 12:40:59 +00:00

1662 lines
71 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 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 ';
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_vervaldatum IS NULL
AND ud.fac_usrdata_verwijder IS NULL;
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = v_usrdata_key;
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 <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, '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.
-- 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_sla_perc_optijd
AS
SELECT bedrijf_malus, ROUND (100 * SUM (optijd) / SUM (aantal), 1) perc
FROM (SELECT bedrijf_malus, DECODE (SIGN (tht - wht), -1, 0, 1) optijd, 1 aantal
FROM T_hgcu_v_monitoring_intern
WHERE TRUNC (gereed, 'YYYY') = TRUNC (SYSDATE, 'YYYY')
AND indult = 'Nee'
-- AND tht - wht >= 0
AND klant_melding = 1
AND prefix = 'S')
GROUP BY bedrijf_malus
UNION ALL
SELECT 'Totaal' bedrijf_malus, ROUND (100 * SUM (optijd) / SUM (aantal), 1) perc
FROM (SELECT bedrijf_malus, DECODE (SIGN (tht - wht), -1, 0, 1) optijd, 1 aantal
FROM T_hgcu_v_monitoring_intern
WHERE TRUNC (gereed, 'YYYY') = TRUNC (SYSDATE, 'YYYY')
AND indult = 'Nee'
-- AND tht - wht >= 0
AND klant_melding = 1
AND prefix = 'S')
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
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
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
FROM hgcu_monitoring;
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