Files
Customer/NMMS/nmms.sql
Arthur Egberink 3e2f21f5d5 NMMS#30564 -- View voor monitoring is traag
svn path=/Customer/trunk/; revision=22790
2014-10-06 08:46:13 +00:00

1477 lines
49 KiB
PL/PgSQL
Raw Blame History

-- Script containing customer specific configuration sql statements for NMMS: Nationaal Militair Museum
-- (c) 2011 SG|facilitor
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800710
SPOOL xNMMS.LST
SET ECHO ON
--------------
CREATE OR REPLACE PACKAGE nmms
AS
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;
END;
/
CREATE OR REPLACE PACKAGE BODY nmms
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_melding m2,
mld_stdmelding std1,
mld_stdmelding std2
WHERE m1.mld_melding_key = p_melding_key
AND m1.mld_stdmelding_key = std1.mld_stdmelding_key
AND m2.mld_stdmelding_key = std2.mld_stdmelding_key
AND std1.prs_dienst_key = std2.prs_dienst_key
AND m1.mld_melding_key <> m2.mld_melding_key
AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys
AND m1.mld_melding_datum BETWEEN m2.mld_melding_datum
AND fac.gettrackingdate (
'MLDAFM',
m2.mld_melding_key)
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 :=
nmms.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_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 NUMBER;
v_uitvoertijdtype VARCHAR2 (100);
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_uitvoertijdtype,
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;
END;
/
--
-- Exact export
--
-- onderstaande procedure wordt of iedere nacht vanuit de daily_task aangeroepen of in de exact_verwerk routine. It's up to Jonathan.
/*
CREATE OR REPLACE PROCEDURE nmms_v_daily_verwerk_opdr (
fac_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT *
FROM mld_opdr o, prs_kenmerklink kl
WHERE o.mld_uitvoerende_keys = kl.prs_link_key
AND prs_kenmerk_key = 1000 -- MA/CP
AND prs_kostenplaats_key <> 1 -- AAFM
AND mld_statusopdr_key = 9
BEGIN
for rec IN c
loop
BEGIN
-- zet de status naar verwerkt (user is 4 -> facilitor)
mld.setopdrachtstatus (rec.mld_opdr_key, 7, 4);
END;
END LOOP;
END;
/
*/
--
-- Basis monitoringsview voor operationele zaken. Meldingen die opgenomen zijn in de tabel nmms_monitoring komen niet meer voor in deze view.
--
CREATE OR REPLACE VIEW nmms_v_monitoring
(
melding_key,
afw,
q_vervolg,
indult,
respijt,
kostenplaats,
locatie,
gebouw,
verdieping,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
status,
afgerond,
dienst,
stdmelding_key,
discipline_key,
overlappend,
wegingsfactor,
melding_omschrijving,
melding_opmerking
)
AS
SELECT mld_melding_key,
DECODE (antedateren, 0, '', 'T') -- de begintijd of eindtijd van de melding is aangepast
|| DECODE (mld_melding_respijt, 0, '', 'R') -- er is een respijt ingevuld
|| DECODE (mld_melding_indult, 1, 'I', '') -- indult is aangevinkt dus melding doet niet mee
|| DECODE (aantal_beschikb, 0, '', 'B'), -- binnen de looptijd van de melding is er ook een beschikbaarheidsmelding in dezelfde ruimte
q_vervolg,
DECODE (COALESCE (mld_melding_indult, 0), 0, 'Nee', 'Ja'),
DECODE (
mld_melding_respijt,
0,
NULL,
DECODE (uitvoertijdtype,
'UREN', ROUND (mld_melding_respijt * 24, 2) || ' Uren',
TO_CHAR (mld_melding_respijt) || ' Dagen'))
respijt,
prs_kostenplaats_nr,
alg_locatie_code,
alg_gebouw_upper,
alg_verdieping_volgnr,
ruimte,
object,
thema,
mld_stdmelding_omschrijving omschrijving,
t_van begin,
gereed,
thtijdstip thtijdstip,
(SELECT fac_tracking_datum
FROM fac_tracking t
WHERE fac_tracking_refkey = mld_melding_key
AND fac_srtnotificatie_key = 36)
verwerkt,
DECODE (
kortingtype,
'Q',
NULL,
DECODE (uitvoertijdtype,
'UREN', ROUND (tht * 24, 2) || ' Uren',
TO_CHAR (tht) || ' Dagen'))
tht_txt,
DECODE (kortingtype,
'Q', TO_NUMBER (NULL),
DECODE (uitvoertijdtype, 'UREN', 24, 1) * actual)
wht,
DECODE (kortingtype, 'Q', TO_NUMBER (NULL), regime) regime,
mld_stdmeldinggroep_naam groep,
'K' || LOWER (kortingtype) || DECODE (q_vervolg, 1, '/q')
typekorting,
DECODE (kortingtype,
'B', mld_stdmelding_malus,
'S', mld_stdmelding_malus,
'Q', mld_stdmelding_malus)
basiskorting,
DECODE (kortingtype, 'B', 50, 'S', 1000) variabelekorting,
DECODE (
telaat,
1,
DECODE (kortingtype,
'B', (actual - tht) * 24,
'S', (actual - tht) * 24))
uren,
DECODE (
telaat,
1,
DECODE (
kortingtype,
'Q',
mld_stdmelding_malus,
'B',
mld_stdmelding_malus
+ ( (TRUNC ( (actual - tht) * 24) + 1) * 50),
'S',
mld_stdmelding_malus
+ ( (TRUNC ( (actual - tht) / thtsla) + 1) * 1000),
NULL))
kb,
DECODE (kortingtype, 'P', mld_stdmelding_malus) prestatiekorting,
DECODE (telaat,
1,
DECODE (kortingtype, 'P', ( (actual - tht) / thtsla) + 1))
factor,
DECODE (
telaat,
1,
DECODE (
kortingtype,
'P',
TRUNC (
DECODE (telaat, 1, ( (actual - tht) / thtsla) + 1, NULL))
* mld_stdmelding_malus))
kp,
(SELECT mld_statuses_omschrijving
FROM mld_statuses s
WHERE s.mld_statuses_key = mld_melding_status),
DECODE (mld_melding_afgerond, 1, 'x'),
(SELECT prs_dienst_omschrijving
FROM prs_dienst di
WHERE di.prs_dienst_key = g.prs_dienst_key),
mld_stdmelding_key,
mld_ins_discipline_key,
overlappend,
wegingsfactor,
(SELECT mld_melding_omschrijving
FROM mld_melding mo
WHERE mo.mld_melding_key = g.mld_melding_key),
(SELECT mld_melding_opmerking
FROM mld_melding mo
WHERE mo.mld_melding_key = g.mld_melding_key)
FROM (SELECT m.aantal,
DECODE (m.aantal, 1, NULL, m.overlappend) overlappend,
m.mld_melding_status,
m.mld_melding_afgerond,
m.mld_melding_key,
m.mld_melding_indult,
std.prs_dienst_key,
std.mld_stdmelding_key,
std.mld_ins_discipline_key,
q.vervolg q_vervolg,
COALESCE (m.mld_melding_respijt, 0) mld_melding_respijt,
mld_stdmelding_omschrijving,
t_van,
DECODE (SIGN (mld_melding_uitvoertijd - 1),
-1, 'UREN',
'DAGEN')
uitvoertijdtype,
gereed,
mld_melding_einddatum_std thtijdstip,
DECODE (
q.vervolg,
NULL,
COALESCE (ins_deel_uitvoertijd, mld_melding_uitvoertijd),
0)
+ mld_melding_respijt
tht,
mld_melding_uitvoertijd thtsla,
mld_stdmeldinggroep_naam,
nmms.get_regime (std.mld_stdmelding_key,
m.mld_alg_onroerendgoed_keys,
NULL)
regime,
UPPER (SUBSTR (mld_stdmeldinggroep_naam, 1, 1)) kortingtype, -- de meldingsgroep bevat het type storing
mld_stdmelding_malus,
kp.prs_kostenplaats_nr,
rg.alg_locatie_code,
rg.alg_gebouw_upper,
rg.alg_verdieping_volgnr,
alg_ruimte_nr || '-' || alg_ruimte_omschrijving ruimte,
d.ins_deel_omschrijving object,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = d.ins_deel_key
AND ins_kenmerk_key = 9)
thema,
mld.getactualuitvoer ( -- bepaal de actuele doorlooptijd a.d.h.v. de samengestelde melding
t_van,
COALESCE (gereed, SYSDATE),
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
-- selecteer het object van de melding met de kortste doorlooptijd
obj.ins_deel_key)
actual,
(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
CASE COALESCE (q.vervolg, 0)
WHEN 1
THEN
1
ELSE
DECODE (
UPPER (SUBSTR (mld_stdmeldinggroep_naam, 1, 1)),
'Q',
SIGN (gereed - mld_melding_einddatum),
SIGN(mld.getactualuitvoer (m.mld_melding_key)
- (mld_melding_uitvoertijd
+ mld_melding_respijt)))
END
telaat,
DECODE (
d.ins_deel_key,
NULL,
alg_srtruimte_prijs4, -- wegingsfactor bij soortruimte
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = d.ins_deel_key
AND ins_kenmerk_key = 10)) -- wegingsfactor bij object
wegingsfactor,
-- is de tijd van de melding aangepast?
(SELECT COUNT ( * )
FROM fac_tracking t, fac_srtnotificatie sn
WHERE fac_tracking_refkey = m.mld_melding_key
AND t.fac_srtnotificatie_key =
sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDUPD'
AND (fac_tracking_oms LIKE '%Start :%'
OR fac_tracking_oms LIKE '%Afgemeld:%'))
antedateren
FROM ( -- selecteer de begin en eindtijd van overlappende meldingen van dezelfde dienst op dezelfde ruimte
--
SELECT m_start,
-- als er <20><>n van de onderliggende meldingen openstaat moet ook de eerste de status uitgegeven krijgen.
DECODE (SUM (open),
0, (SELECT mld_melding_status
FROM mld_melding ms
WHERE ms.mld_melding_key = m_start),
4)
mld_melding_status,
-- afgerond wordt alleen bij de eerste melding bijgehouden
(SELECT mld_melding_afgerond
FROM mld_melding ms
WHERE ms.mld_melding_key = m_start)
mld_melding_afgerond,
COUNT (mld_melding_key) aantal,
LISTAGG (mld_melding_key, ',')
WITHIN GROUP (ORDER BY mld_melding_key)
AS overlappend,
MIN (mld_melding_datum) t_van,
MAX (gereed) gereed,
MIN (mld_melding_key) mld_melding_key,
MIN (mld_stdmelding_key) mld_stdmelding_key,
MAX (prs_kostenplaats_key) prs_kostenplaats_key,
mld_alg_onroerendgoed_keys
mld_alg_onroerendgoed_keys,
SUM (mld_melding_respijt) mld_melding_respijt,
MAX (mld_melding_indult) mld_melding_indult,
MIN (mld_melding_uitvoertijd)
mld_melding_uitvoertijd,
MIN (mld_melding_einddatum_std)
mld_melding_einddatum_std,
MAX (mld_melding_einddatum) mld_melding_einddatum,
MIN (mld_melding_spoed) mld_melding_spoed
FROM (SELECT nmms.get_first_melding (mld_melding_key,
1)
m_start,
fac.gettrackingdate ('MLDAFM',
m.mld_melding_key)
gereed,
DECODE (m.mld_melding_status, 4, 1, 0)
open,
m.*
FROM mld_melding m, mld_stdmelding std
WHERE m.mld_melding_parentkey IS NULL
AND m.mld_stdmelding_key = std.mld_stdmelding_key
and std.mld_stdmelding_malus is not null -- even meldingen zonder malus uitgesloten om de performance te verbeteren
AND m.mld_melding_key NOT IN
(SELECT melding_key
FROM nmms_monitoring
WHERE melding_key IS NOT NULL)) -- we nemen geen dubbele meldingen mee
GROUP BY m_start, mld_alg_onroerendgoed_keys) m,
mld_stdmeldinggroep stdg,
alg_v_ruimte_gegevens rg,
alg_srtruimte sr,
mld_stdmelding std,
prs_kostenplaats kp,
-- vind vervolgmeldingen op Q meldingen (periodieke inspecties)
(SELECT m1.mld_melding_key,
DECODE (m2.mld_melding_key, NULL, 0, 1) vervolg
FROM mld_melding m1,
mld_stdmelding std1,
mld_stdmeldinggroep stdg1,
mld_melding m2,
mld_stdmelding std2,
mld_stdmeldinggroep stdg2
WHERE m1.mld_melding_start_key = m2.mld_melding_key
AND m2.mld_stdmelding_key = std2.mld_stdmelding_key
AND std2.mld_stdmeldinggroep_key =
stdg2.mld_stdmeldinggroep_key
AND m1.mld_stdmelding_key = std1.mld_stdmelding_key
AND std1.mld_stdmeldinggroep_key =
stdg1.mld_stdmeldinggroep_key
AND UPPER (
SUBSTR (stdg2.mld_stdmeldinggroep_naam, 1, 1)) =
'Q'
AND UPPER (
SUBSTR (stdg1.mld_stdmeldinggroep_naam, 1, 1)) <>
'Q') q,
-- vind het object met de kortste doorlooptijd
( SELECT MAX (d1.ins_deel_key) ins_deel_key,
mo1.mld_melding_key
FROM ins_deel d1,
mld_melding_object mo1,
ins_deel d2,
mld_melding_object mo2
WHERE mo1.ins_deel_key = d1.ins_deel_key
AND mo1.mld_melding_key = mo2.mld_melding_key
AND mo2.ins_deel_key = d2.ins_deel_key
AND d1.ins_deel_uitvoertijd <= d2.ins_deel_uitvoertijd
GROUP BY mo1.mld_melding_key) obj,
ins_deel d
WHERE mld_stdmelding_malus IS NOT NULL
AND m.mld_melding_status IN (0, 2, 3, 4, 5, 6, 7, 99)
-- meldingen die al geexporteerd zijn(en in de tabel nmms_monitoring staan) komen niet meer in deze view
AND m.mld_melding_key NOT IN (SELECT melding_key
FROM nmms_monitoring
WHERE melding_key IS NOT NULL)
AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key(+)
AND m.mld_melding_key = obj.mld_melding_key(+)
AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND obj.ins_deel_key = d.ins_deel_key(+)
AND rg.alg_srtruimte_key = sr.alg_srtruimte_key(+)
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND m.mld_melding_key = q.mld_melding_key(+)
AND std.mld_stdmeldinggroep_key =
stdg.mld_stdmeldinggroep_key(+)) g;
--
-- Rapportage gebasseerd op de basis rapportage
--
CREATE OR REPLACE VIEW nmms_v_rap_monitoring
(
html_melding,
hide_f_melding_key,
fclt_f_afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
fclt_f_status,
fclt_f_afgerond,
fclt_f_dienst,
hide_f_stdmelding_key,
wegingsfactor,
overlappend,
hide_f_melding_omschrijving,
hide_f_melding_opmerking
)
AS
SELECT '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=bo&'
|| 'mld_key='
|| melding_key
|| '")''>'
|| melding_key
|| '</a>'
melding,
melding_key,
afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
to_char(begin, 'dd-mm-yyyy hh24:mi:ss') begin,
to_char(gereed, 'dd-mm-yyyy hh24:mi:ss') gereed,
to_char(thtijdstip, 'dd-mm-yyyy hh24:mi:ss') thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
status,
afgerond,
dienst,
stdmelding_key,
wegingsfactor,
overlappend,
melding_omschrijving,
melding_opmerking
FROM nmms_v_monitoring;
--
-- rapportage view tbv de opdrachtgever. In deze gestylede rapportage kan de opdrachtgever afwijkingen goedkeuren.
--
CREATE OR REPLACE VIEW nmms_v_rap_monitoring_og
(
html_melding,
hide_f_melding_key,
fclt_f_afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
fclt_f_status,
fclt_f_afgerond,
fclt_f_dienst,
hide_f_stdmelding_key,
wegingsfactor,
hide_f_melding_omschrijving,
hide_f_melding_opmerking
)
AS
SELECT html_melding,
hide_f_melding_key,
fclt_f_afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
fclt_f_status,
fclt_f_afgerond,
fclt_f_dienst,
hide_f_stdmelding_key,
wegingsfactor,
hide_f_melding_omschrijving,
hide_f_melding_opmerking
FROM nmms_v_rap_monitoring
WHERE fclt_f_afw IS NOT NULL OR fclt_f_afgerond IS NOT NULL;
--
-- view van nog te exporteren meldingen die afwijken of tot een korting leiden.
--
CREATE OR REPLACE VIEW nmms_v_monitoring_tot
(
melding_key,
afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
herhalingskorting,
aantal,
kh,
wegingsfactor,
dienst,
stdmelding_key,
totaal,
kinderen
)
AS
SELECT melding_key,
afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
to_number(NULL),
to_number(NULL),
to_number(NULL),
wegingsfactor,
dienst,
stdmelding_key,
COALESCE (kb, kp) * COALESCE (wegingsfactor, 1),
NULL
FROM nmms_v_monitoring
WHERE (kb IS NOT NULL OR kp IS NOT NULL)
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 nmms_monitoring))
UNION ALL
-- herhalingskorting op beschikbaarheid bij thema
SELECT NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
thema,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Kh',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
250,
COUNT ( * ) - 4,
(COUNT ( * ) - 4) * 250,
NULL,
NULL,
NULL,
(COUNT ( * ) - 4) * 250,
LISTAGG(melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen
FROM nmms_v_monitoring
WHERE typekorting = 'Kb' AND thema IS NOT NULL 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 nmms_monitoring))
GROUP BY thema, typekorting
HAVING COUNT (ruimte) > 4
UNION ALL
-- herhalingskorting op beschikbaarheid bij ruimte
SELECT NULL,
NULL,
NULL,
NULL,
NULL,
ruimte,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Kh',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
250,
COUNT ( * ) - 4,
(COUNT ( * ) - 4) * 250,
NULL,
NULL,
NULL,
(COUNT ( * ) - 4) * 250,
LISTAGG(melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen
FROM nmms_v_monitoring
WHERE typekorting = 'Kb' AND thema IS NULL 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 nmms_monitoring))
GROUP BY ruimte, typekorting
HAVING COUNT (ruimte) > 4
UNION ALL
-- Herhalingskorting op prestatiegebrek (stdmelding)
SELECT NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
(SELECT mld_stdmelding_omschrijving
FROM mld_stdmelding std
WHERE std.mld_stdmelding_key = r.stdmelding_key),
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Kh',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
250,
COUNT ( * ) - 4,
(COUNT ( * ) - 4) * 250,
NULL,
NULL,
NULL,
(COUNT ( * ) - 4) * 250,
LISTAGG(melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen
FROM nmms_v_monitoring r
WHERE typekorting = 'Kp' AND indult = 'Nee'
AND discipline_key <> 354 -- schoonmaak
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 nmms_monitoring))
GROUP BY stdmelding_key, typekorting
HAVING COUNT (stdmelding_key) > 4
UNION ALL
-- Herhalingskorting op prestatiegebrek schoonmaak (vakgroep key 354) en ruimte
SELECT NULL,
NULL,
NULL,
NULL,
NULL,
ruimte,
NULL,
NULL,
'Schoonmaak',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
'Kh',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
250,
COUNT ( * ) - 4,
(COUNT ( * ) - 4) * 250,
NULL,
NULL,
NULL,
(COUNT ( * ) - 4) * 250,
LISTAGG(melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen
FROM nmms_v_monitoring r
WHERE typekorting = 'Kp' AND indult = 'Nee'
AND discipline_key = 354 -- schoonmaak
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 nmms_monitoring))
GROUP BY discipline_key, ruimte, typekorting
HAVING COUNT (ruimte) > 4;
-- rapportage view van nog te exporteren meldingen die afwijken of tot een korting leiden.
CREATE OR REPLACE VIEW nmms_v_rap_monitoring_tot
(
html_melding,
hide_f_melding_key,
fclt_f_afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
herhalingskorting,
aantal,
kh,
kinderen,
wegingsfactor,
totaal
)
AS
SELECT '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=bo&'
|| 'mld_key='
|| melding_key
|| '")''>'
|| melding_key
|| '</a>'
melding,
melding_key,
afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
to_char(begin, 'dd-mm-yyyy hh24:mi:ss') begin,
to_char(gereed, 'dd-mm-yyyy hh24:mi:ss') gereed,
to_char(thtijdstip, 'dd-mm-yyyy hh24:mi:ss') thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
herhalingskorting,
aantal,
kh,
kinderen,
wegingsfactor,
totaal
FROM nmms_v_monitoring_tot;
CREATE OR REPLACE VIEW nmms_v_dwh_monitoring
(
melding_key,
afw,
q_vervolg,
indult,
respijt,
kostenplaats,
locatie,
gebouw,
verdieping,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
herhalingskorting,
aantal,
kh,
status,
dienst,
stdmelding_key,
wegingsfactor,
melding_omschrijving,
melding_opmerking,
kostensoort_oms
)
AS
SELECT melding_key,
afw,
q_vervolg,
indult,
respijt,
kostenplaats,
locatie,
gebouw,
verdieping,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
herhalingskorting,
aantal,
kh,
'Historie',
dienst,
stdmelding_key,
wegingsfactor,
mld_melding_omschrijving,
mld_melding_opmerking,
(SELECT prs_kostensoort_oms
FROM prs_kostensoort ks, mld_stdmelding std
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.prs_kostensoort_key = ks.prs_kostensoort_key)
FROM nmms_monitoring mo, mld_melding m
WHERE mo.melding_key = m.mld_melding_key
AND totaal IS NOT NULL
AND totaal > 0;
CREATE OR REPLACE PROCEDURE nmms_export_freeze_monitoring (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR c1
IS
SELECT melding_key
FROM nmms_v_monitoring
WHERE status = 'Afgemeld'
AND gereed < TRUNC (SYSDATE, 'MONTH')
AND afw IS NULL
AND afgerond IS NULL;
CURSOR c2
IS
SELECT m_start, mld_melding_key, (SELECT mld_melding_status
FROM mld_melding ms
WHERE ms.mld_melding_key = m_start)
mld_melding_status
FROM (SELECT nmms.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 nmms_monitoring))
WHERE m_start <> mld_melding_key;
BEGIN
-- 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, 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
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.
INSERT INTO nmms_monitoring (melding_key,
afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
herhalingskorting,
aantal,
kh,
wegingsfactor,
dienst,
stdmelding_key,
totaal,
kinderen,
export_datum)
SELECT melding_key,
afw,
q_vervolg,
indult,
respijt,
ruimte,
object,
thema,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
herhalingskorting,
aantal,
kh,
wegingsfactor,
dienst,
stdmelding_key,
totaal,
kinderen,
SYSDATE
FROM nmms_v_monitoring_tot;
INSERT INTO nmms_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 nmms_monitoring nm
WHERE nm.melding_key IS NOT NULL);
COMMIT;
END nmms_export_freeze_monitoring;
/
CREATE OR REPLACE VIEW nmms_v_dwh_opdr_materiaal
(
opdr_id,
opdr_key,
opdr_datum,
kostenplaats,
aanvrager,
aanvrager_key,
aantal,
omschrijving,
prijs,
totaal_inkoop,
totaal_verkoop
)
AS
SELECT o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr,
o.mld_opdr_key,
TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy'),
k.prs_kostenplaats_nr,
pf.prs_perslid_naam_full,
pf.prs_perslid_key,
mld_opdr_materiaal_aantal,
ud.fac_usrdata_omschr,
mld_opdr_materiaal_prijs,
mld_opdr_materiaal_aantal * mld_opdr_materiaal_prijs,
ROUND (
mld_opdr_materiaal_aantal * mld_opdr_materiaal_prijs
* COALESCE (
(SELECT MAX (u.uplift)
FROM aaxx_imp_uplift u
WHERE UPPER (soort_order) =
UPPER (ot.mld_typeopdr_omschrijving)
AND UPPER (u.prs_kostensoort_oms) =
ks.prs_kostensoort_upper
AND TO_CHAR (o.mld_opdr_datumbegin, 'yyyy-mm') =
u.jaar || '-' || LTRIM (TO_CHAR (u.maand, '00'))),
1),
2)
prijs_uplift
FROM mld_opdr_materiaal om,
fac_usrdata ud,
mld_opdr o,
mld_melding m,
prs_v_perslid_fullnames_all pf,
prs_kostenplaats k,
mld_stdmelding std,
prs_kostensoort ks,
mld_typeopdr ot
WHERE om.mld_opdr_key = o.mld_opdr_key
AND om.fac_usrdata_key = ud.fac_usrdata_key
AND o.mld_melding_key = m.mld_melding_key
AND o.prs_perslid_key = pf.prs_perslid_key
AND o.prs_kostenplaats_key = k.prs_kostenplaats_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.prs_kostensoort_key = ks.prs_kostensoort_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key;
--------------------------------------------------------------
--
-- Dashboard views
--
--------------------------------------------------------------
CREATE OR REPLACE VIEW nmms_v_dashboard_korting
(
melding,
omschrijving,
marge,
korting,
hide_f_marge,
tht_tijdstip,
tht
)
AS
SELECT mld_melding_key,
mld_stdmelding_omschrijving,
DECODE (SIGN (1 - mld_melding_uitvoertijd),
-1, ROUND (marge, 2) || ' Dagen',
ROUND (marge * 24, 2) || ' Uren')
marge_txt,
mld_stdmelding_malus,
marge,
mld_melding_einddatum_std,
ROUND (24 * mld_melding_uitvoertijd, 2) tht
FROM (SELECT mld_melding_key,
mld.getactualuitvoer (m.mld_melding_key),
mld_melding_uitvoertijd,
mld_melding_uitvoertijd
- mld.getactualuitvoer (m.mld_melding_key)
marge,
mld_melding_datum,
mld_melding_einddatum_std,
mld_stdmelding_malus,
mld_stdmelding_omschrijving
FROM mld_melding m, mld_stdmelding std
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_stdmelding_malus IS NOT NULL
AND m.mld_melding_status IN (0, 2, 3, 4, 7, 99));
--------------------------------------------------------------
--
-- Real time monitoring views
--
--------------------------------------------------------------
CREATE OR REPLACE VIEW nmms_v_graph_vakgroep_open
(
fclt_xas_,
fclt_yas_,
fclt_yas2_,
sortering,
fclt_url,
fclt_3d_discipline_key
)
AS
SELECT ins_srtdiscipline_prefix || ' '
|| lcl.x ('ins_discipline_omschrijving',
d.ins_discipline_key,
d.ins_discipline_omschrijving),
COUNT (m.mld_melding_key) - SUM (uitvoeringoptijd) telaat,
SUM (uitvoeringoptijd) op_tijd,
-1 * COUNT (m.mld_melding_key) totaal,
'appl/mld/mld_search.asp?urole=fo'
|| '&'
|| 'autosearch=1'
|| '&'
|| 'disc_key_str='
|| d.ins_discipline_key,
d.ins_discipline_key
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
(SELECT mld_melding_key,
CASE SIGN (mld_melding_einddatum - SYSDATE)
WHEN -1 THEN 0
ELSE 1
END
uitvoeringoptijd
FROM mld_melding m2) uitv
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_key = uitv.mld_melding_key
AND mld_melding_status IN (2, 3, 4, 7, 0) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
GROUP BY d.ins_discipline_key,
d.ins_discipline_omschrijving,
ins_srtdiscipline_prefix
ORDER BY COUNT (d.ins_discipline_omschrijving) DESC;
CREATE OR REPLACE VIEW nmms_v_graph_openst_behand
(
fclt_xas_,
fclt_yas_,
fclt_yas2_op_tijd
)
AS
SELECT COALESCE (behandelaar, 'Onbekend') behandelaar,
COUNT (mld_key) - SUM (uitvoeringoptijd) totaal,
SUM (uitvoeringoptijd) op_tijd
FROM (SELECT DISTINCT
m.mld_melding_key mld_key,
CASE
WHEN fac.gettrackingdate ('MLDREJ', m.mld_melding_key) IS NULL
THEN
CASE SIGN(fac.datumtijdplusuitvoertijd (
m.mld_melding_datum,
m.mld_melding_uitvoertijd,
'DAGEN')
- COALESCE (
fac.gettrackingdate (
'MLDREJ',
m.mld_melding_key),
COALESCE (
fac.gettrackingdate (
'MLDAFM',
m.mld_melding_key),
SYSDATE)))
WHEN -1
THEN
0
ELSE
1
END
ELSE
1
END
uitvoeringoptijd,
DECODE (
mld_melding_status,
7,
(SELECT MAX (prs_bedrijf_naam)
FROM mld_opdr o, prs_bedrijf b
WHERE o.mld_melding_key = m.mld_melding_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
AND o.mld_statusopdr_key IN (3, 4, 5, 8)), -- 3- Ter fiattering, 4-Gefiatteerd, 5-Uitgegeven, 8-Geaccepteerd
4,
COALESCE (
(SELECT MAX (prs_bedrijf_naam)
FROM mld_opdr o, prs_bedrijf b
WHERE o.mld_melding_key = m.mld_melding_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
AND o.mld_statusopdr_key IN (3, 4, 5, 8)), -- 3- Ter fiattering, 4-Gefiatteerd, 5-Uitgegeven, 8-Geaccepteerd
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames pf
WHERE pf.prs_perslid_key =
m.mld_melding_behandelaar_key)),
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames pf
WHERE pf.prs_perslid_key =
m.mld_melding_behandelaar_key))
behandelaar
FROM mld_melding m,
mld_discipline md,
prs_perslid p,
mld_stdmelding std
WHERE m.prs_perslid_key = p.prs_perslid_key
AND md.ins_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = m.mld_stdmelding_key
AND mld_melding_status IN (2, 3, 4, 7, 0)) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
GROUP BY behandelaar;
GRANT SELECT ON nmms_v_dwh_monitoring TO aafm;
GRANT SELECT ON nmms_v_dwh_opdr_materiaal TO aafm;
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
BEGIN fac.registercustversion('NMMS', 4); END;
/
COMMIT;
spool off