Files
Customer/NMMS/nmms.sql
Jos Groot Lipman 8903c6b31e FSN#27706 Merge DB20 Over systrackscriptId
svn path=/Customer/trunk/; revision=20177
2013-12-12 19:37:50 +00:00

333 lines
14 KiB
PL/PgSQL

-- 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;
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,
fac.gettrackingdate ('MLDAFM', m2.mld_melding_key) tot,
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_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);
v_melding_key NUMBER;
l_melding_key NUMBER;
v_datum_begin DATE;
l_datum_begin DATE;
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;
FOR rec IN c
LOOP
IF p_index < 10
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;
END IF;
END LOOP;
RETURN v_melding_key;
END;
END;
/
CREATE OR REPLACE VIEW nmms_v_rap_monitoring
(
html_melding,
fclt_f_afw,
q_vervolg,
indult,
respijt,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
wht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
uren,
kb,
prestatiekorting,
factor,
kp,
wegingsfactor
)
AS
SELECT '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=bo&'
|| 'mld_key='
|| mld_melding_key
|| '")''>'
|| mld_melding_key
|| '</a>'
melding,
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 (aantal, 1, '', 'S') -- betreft een samengestelde/overlappende melding
|| 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,
ruimte,
mld_stdmelding_omschrijving omschrijving,
TO_CHAR (t_van, 'dd-mm-yyyy hh24:mi:ss') begin,
TO_CHAR (einddatum, 'dd-mm-yyyy hh24:mi:ss') eind,
TO_CHAR (thtijdstip, 'dd-mm-yyyy hh24:mi:ss') thtijdstip,
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,
DECODE (kortingtype,
'B',
nmms_get_ins_weegfactor (mld_melding_key, wegingsfactor))
wegingsfactor
FROM (SELECT m.aantal,
m.mld_melding_key,
m.mld_melding_indult,
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,
t_tot einddatum,
mld_melding_einddatum_std thtijdstip,
decode(q.vervolg, null, 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,
alg_ruimte_nr || '-' || alg_ruimte_omschrijving ruimte,
mld.getactualuitvoer ( -- bepaal de actuele doorlooptijd a.d.h.v. de samengestelde melding
t_van,
COALESCE(t_tot, SYSDATE),
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
-- selecteer het object van de melding met de kortste doorlooptijd
(select max(d1.ins_deel_key) from ins_deel d1, mld_melding_object mo1, ins_deel d2, mld_melding_object mo2
where m.mld_melding_key = mo1.mld_melding_key
and mo1.ins_deel_key = d1.ins_deel_key
and m.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 )) 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.t_tot, sysdate)
OR fac.gettrackingdate ('MLDAFM', mb.mld_melding_key) BETWEEN m.t_van
AND coalesce(m.t_tot, 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(t_tot
- mld_melding_einddatum),
SIGN(mld.getactualuitvoer (m.mld_melding_key)
- (mld_melding_uitvoertijd + mld_melding_respijt)))
END telaat,
alg_srtruimte_prijs4 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,
count(mld_melding_key) aantal,
MIN (mld_melding_datum) t_van,
MAX (t_tot) t_tot,
MIN (mld_melding_key) mld_melding_key,
MIN (mld_stdmelding_key) mld_stdmelding_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) t_tot,
m.*
FROM mld_melding m
WHERE m.mld_melding_parentkey IS 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,
(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
WHERE mld_stdmelding_malus IS NOT NULL
AND m.mld_melding_key > 100007 -- tijdelijk om oude meldingen niet te tonen
AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_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;
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
BEGIN fac.registercustversion('NMMS', 1); END;
/
COMMIT;
spool off