Files
Customer/PCHX/pchx_mon.sql
Arthur Egberink ffc5838fc9 PCHW#37813 -- Implementatie Gemeente Westland
svn path=/Customer/trunk/; revision=35861
2017-10-31 11:20:21 +00:00

1749 lines
66 KiB
PL/PgSQL
Raw Blame History

-- Script containing customer generic configuration sql statements for all PCHA and PCHW accounts
-- $Revision$
-- $Id$
--
DEFINE thisfile = 'PCHX.SQL'
DEFINE dbuser = 'PCHA|PCHW'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE PCHX_MON
AS
-- PPS functies voor PCHA en PCHW
FUNCTION get_first_melding (p_melding_key IN NUMBER, p_index IN NUMBER)
RETURN NUMBER;
FUNCTION get_regime (p_stdm_key IN NUMBER,
p_alg_key IN NUMBER, -- Altijd gebouw of hoger, locatie niet ondersteund
p_ins_key IN NUMBER)
RETURN NUMBER;
FUNCTION get_index_value (p_date IN DATE, p_categorie IN VARCHAR2)
RETURN NUMBER;
FUNCTION klant_melding (p_melding_key IN NUMBER)
RETURN NUMBER;
END;
/
CREATE OR REPLACE PACKAGE BODY PCHX_MON
AS
FUNCTION get_first_melding (p_melding_key IN NUMBER,
p_index IN NUMBER)
RETURN NUMBER
AS
CURSOR c
IS
SELECT m2.mld_melding_datum van, m2.mld_melding_key
FROM mld_melding m1,
mld_stdmelding std1,
mld_melding m2,
mld_stdmelding std2
WHERE m1.mld_melding_key = p_melding_key
AND m1.mld_stdmelding_key = std1.mld_stdmelding_key
AND m2.mld_melding_parentkey IS NULL
AND NOT EXISTS (SELECT 1
FROM pchx_monitoring
WHERE melding_key = m2.mld_melding_key)
AND m2.mld_stdmelding_key = std2.mld_stdmelding_key
AND (
(
pchx.get_user = 'PCHW'
AND std2.mld_stdmelding_malus IS NOT NULL -- alleen meldingen waarvoor een malus geldt
AND std1.mld_Stdmeldinggroep_key = std2.mld_stdmeldinggroep_key -- voor stdmeldinggroep
AND (
( std1.mld_stdmeldinggroep_key = 181 -- Prestatiekortingen
AND std1.mld_ins_discipline_key = std2.mld_ins_discipline_key)
OR
( std1.mld_stdmeldinggroep_key <> 181 -- Prestatiekortingen
AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys) -- op dezelfde ruimte
)
)
OR
( pchx.get_user = 'PCHA'
AND std1.mld_ins_discipline_key NOT IN (232,220) -- V-G en W-R koppelen we nooit
AND std1.mld_stdmeldinggroep_key = std2.mld_stdmeldinggroep_key -- voor stdmeldinggroep
AND (
( std1.mld_stdmeldinggroep_key = 161 -- FTRC
AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys) -- op dezelfde ruimte
OR
( std1.mld_stdmeldinggroep_key <> 161 -- FTRC
AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys) -- op dezelfde ruimte
AND std1.mld_ins_discipline_key = std2.mld_ins_discipline_key -- zelfde vakgroep.
)
)
)
AND m1.mld_melding_key <> m2.mld_melding_key
AND m2.mld_melding_indult <> 1
AND m2.mld_melding_status <> 1 -- Afgewezen
AND m1.mld_melding_datum BETWEEN m2.mld_melding_datum
AND COALESCE(fac.gettrackingdate ('MLDAFM', m2.mld_melding_key), SYSDATE)
ORDER BY m2.mld_melding_datum;
v_melding_key NUMBER;
l_melding_key NUMBER;
v_datum_begin DATE;
l_datum_begin DATE;
v_loop_index NUMBER;
BEGIN
v_melding_key := p_melding_key;
IF pchx_mon.klant_melding (p_melding_key) = 0 THEN
RETURN p_melding_key;
END IF;
SELECT mld_melding_datum
INTO v_datum_begin
FROM mld_melding
WHERE mld_melding_key = p_melding_key;
v_loop_index := 1;
FOR rec IN c
LOOP
-- door de sortering op de cursor hoeven we alleen het eerste record te gebruiken tenzij deze niet door de klant is ingediend.
IF p_index < 10 AND v_loop_index = 1
THEN
-- DBMS_OUTPUT.put_line(p_melding_key || '-' || rec.mld_melding_key || '-' || p_index);
-- DBMS_OUTPUT.put_line('Klant melding: ' || '-' || pchx_mon.klant_melding (rec.mld_melding_key));
IF pchx_mon.klant_melding (rec.mld_melding_key) = 1
THEN
BEGIN
l_melding_key :=
PCHX_MON.get_first_melding (rec.mld_melding_key, p_index + 1);
END;
--- DBMS_OUTPUT.put_line('Resultaat: ' || rec.mld_melding_key || '-' || l_melding_key);
SELECT mld_melding_datum
INTO l_datum_begin
FROM mld_melding
WHERE mld_melding_key = l_melding_key;
IF l_datum_begin < v_datum_begin
THEN
v_datum_begin := l_datum_begin;
v_melding_key := l_melding_key;
END IF;
v_loop_index := v_loop_index + 1;
END IF;
END IF;
END LOOP;
IF pchx_mon.klant_melding (v_melding_key) = 1
THEN
RETURN v_melding_key;
ELSE
RETURN p_melding_key;
END IF;
END;
FUNCTION get_regime (p_stdm_key IN NUMBER,
p_alg_key IN NUMBER, -- Altijd gebouw of hoger, locatie niet ondersteund
p_ins_key IN NUMBER)
RETURN NUMBER
AS
v_mld_stdmelding_regime NUMBER;
v_norm_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL);
v_beginuur NUMBER;
v_einduur NUMBER;
v_werkdagen NUMBER;
BEGIN
mld.getslaparams (p_stdm_key,
3, -- prio
p_alg_key,
NULL, -- ins key
v_mld_stdmelding_regime,
v_norm_uitvoertijd,
v_beginuur,
v_einduur,
v_werkdagen);
-- kantoortijden of openingstijden waarbij de tijd niet gevuld is.
IF v_mld_stdmelding_regime = 1 OR (v_mld_stdmelding_regime = 2 AND (v_beginuur = -1 OR v_einduur = -1))
THEN
RETURN fac.safe_to_number (fac.getsetting ('fac_t_endofworkday'))
- fac.safe_to_number (fac.getsetting ('fac_t_startofworkday'));
END IF;
IF v_mld_stdmelding_regime = 2 -- openingstijden
THEN
RETURN v_einduur - v_beginuur;
END IF;
IF v_mld_stdmelding_regime = 3 -- 24/7
THEN
RETURN 24;
END IF;
RETURN NULL;
END;
FUNCTION get_index_value (p_date IN DATE, p_key IN NUMBER)
RETURN NUMBER
AS
CURSOR c
IS
SELECT COALESCE(fac_usrdata_volgnr, 1) * fac_usrdata_prijs / 100000 fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrtab_key = p_key
AND fac_usrdata_verwijder IS NULL
AND p_date > add_months(fac_usrdata_vervaldatum, -12);
v_result NUMBER;
BEGIN
dbms_output.put_line('start ' || p_key);
v_result := 1;
FOR rec IN c LOOP
BEGIN
dbms_output.put_line(rec.fac_usrdata_prijs);
v_result := v_result * (rec.fac_usrdata_prijs / 100 + 1);
END;
END LOOP;
RETURN v_result;
END;
FUNCTION get_index_value (p_date IN DATE, p_categorie IN VARCHAR2)
RETURN NUMBER
AS
v_index_1_key NUMBER;
v_index_4_key NUMBER;
v_index_5_key NUMBER;
v_index_7_key NUMBER;
v_index_10_key NUMBER;
v_index_14_key NUMBER;
v_index_19_key NUMBER;
v_index_20_key NUMBER;
v_index_24_key NUMBER;
v_index_25_key NUMBER;
v_index_28_key NUMBER;
v_index_1_value NUMBER;
v_index_4_value NUMBER;
v_index_5_value NUMBER;
v_index_7_value NUMBER;
v_index_10_value NUMBER;
v_index_14_value NUMBER;
v_index_19_value NUMBER;
v_index_20_value NUMBER;
v_index_24_value NUMBER;
v_index_25_value NUMBER;
v_index_28_value NUMBER;
v_result NUMBER;
BEGIN
IF PCHX.get_user = 'PCHA'
THEN
v_index_1_key := 181;
v_index_4_key := 182;
v_index_5_key := 183;
v_index_7_key := 184;
v_index_20_key := 185;
ELSE
-- PCHW
v_index_1_key := 121;
v_index_10_key := 122;
v_index_14_key := 123;
v_index_19_key := 124;
v_index_24_key := 125;
v_index_25_key := 141;
v_index_28_key := 126;
END IF;
v_index_1_value := get_index_value (p_date, v_index_1_key);
v_index_4_value := get_index_value (p_date, v_index_4_key);
v_index_5_value := get_index_value (p_date, v_index_5_key);
v_index_7_value := get_index_value (p_date, v_index_7_key);
v_index_10_value := get_index_value (p_date, v_index_10_key);
v_index_14_value := get_index_value (p_date, v_index_14_key);
v_index_19_value := get_index_value (p_date, v_index_19_key);
v_index_20_value := get_index_value (p_date, v_index_20_key);
v_index_24_value := get_index_value (p_date, v_index_24_key);
v_index_25_value := get_index_value (p_date, v_index_25_key);
v_index_28_value := get_index_value (p_date, v_index_28_key);
CASE p_categorie
WHEN 'MON'
THEN v_result := v_index_1_value;
WHEN 'CAT'
THEN v_result := 1;
WHEN 'BEV'
THEN v_result := 0.75 * v_index_5_value + 0.25 * v_index_7_value;
WHEN 'SCH'
THEN v_result := 0.80 * v_index_4_value + 0.15 * v_index_7_value + 0.05 * v_index_20_value;
WHEN 'GLA'
THEN v_result := 0.05 * v_index_1_value + 0.80 * v_index_4_value + 0.15 * v_index_7_value;
WHEN 'SVD1'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD2'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD3'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD4'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD5'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD6'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD7'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD8'
THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
WHEN 'SVD9'
THEN v_result := 0.3 * v_index_10_value + 0.7 * v_index_28_value;
WHEN 'SVD10'
THEN v_result := 0.3 * v_index_10_value + 0.7 * v_index_28_value;
WHEN 'SVD11'
THEN v_result := v_index_10_value;
WHEN 'SVD12'
THEN v_result := v_index_10_value;
WHEN 'SVD13'
THEN v_result := 0.2 * v_index_10_value + 0.8 * v_index_19_value;
ELSE v_result := 1;
END CASE;
RETURN v_result;
END;
FUNCTION klant_melding (p_melding_key IN NUMBER)
RETURN NUMBER
AS
v_klant_melding NUMBER;
BEGIN
SELECT DECODE (a.prs_bedrijf_key, DECODE (pchx.get_user, 'PCHW', 121, 102), 1, 0) klant_melding
INTO v_klant_melding
FROM mld_melding m,
prs_perslid p,
prs_v_afdeling a
WHERE m.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND m.mld_melding_key = p_melding_key;
RETURN v_klant_melding;
EXCEPTION WHEN OTHERS
THEN
RETURN 0;
END;
END;
/
-- Monitoring
CREATE OR REPLACE VIEW pchx_v_startmelding_geg
(
m_start,
mld_alg_onroerendgoed_keys,
mld_melding_status,
mld_melding_afgerond,
aantal,
overlappend,
t_van,
gereed,
mld_melding_spoed,
mld_stdmelding_key,
prs_kostenplaats_key,
max_t_actual,
min_t_sla,
max_t_respijt,
min_tht_einddatum_start,
mld_melding_indult,
mld_melding_einddatum_std,
mld_melding_einddatum,
mld_melding_omschrijving,
mld_melding_opmerking,
klant_melding,
prs_bedrijf_key
)
AS
SELECT m.m_start,
x.mld_alg_onroerendgoed_keys,
-- als <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
m.gereed, -- max_actual_einddatum
x.mld_melding_spoed, -- mld_melding_spoed van alleen M_START
x.mld_stdmelding_key, -- mld_stdmelding_key van alleen M_START
x.prs_kostenplaats_key, -- prs_kostenplaats_key van alleen M_START
mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd!
m.t_van,
COALESCE (m.gereed, SYSDATE),
x.mld_stdmelding_key,
x.mld_melding_spoed,
x.mld_alg_onroerendgoed_keys,
NULL)
max_t_actual,
mld_t_uitvoertijd (m.min_uitvoertijd, m.min_uitvoertijd_eenheid)
min_t_sla,
mld_t_uitvoertijd (COALESCE (m.max_respijt, 0),
m.max_respijt_eenheid)
max_t_respijt, -- altijd dezelfde eenheid als uitvoertijd???
mld.geteinddatum (
m.m_start,
mld_t_uitvoertijd (m.min_uitvoertijd + m.max_respijt,
m.min_uitvoertijd_eenheid),
m.t_van)
min_tht_einddatum_start, -- meest nabije tht-einddatum van overlappende meldingen (t_van + MIN SLA + MAX respijt)
m.mld_melding_indult, -- max_melding_indult
m.mld_melding_einddatum_std, -- min_melding_einddatum_std of min_tht_einddatum_start???
m.mld_melding_einddatum, -- max_melding_einddatum
x.mld_melding_omschrijving, -- mld_melding_oms. van alleen M_START
x.mld_melding_opmerking, -- mld_melding_opm. van alleen M_START
m.klant_melding, -- melding gemeld door medewerker klant
m.prs_bedrijf_key -- bedrijf key van de melder
FROM ( SELECT m.m_start,
SUM (m.open) open,
COUNT (m.mld_melding_key) aantal,
listagg (m.mld_melding_key, ',')
WITHIN GROUP (ORDER BY m.mld_melding_key)
AS overlappend,
MIN (m.mld_melding_datum) t_van, -- min_melding_datum
MAX (m.gereed) gereed, -- max_actual_einddatum
MIN (m.mld_melding_t_uitvoertijd.tijdsduur) min_uitvoertijd,
MIN (m.mld_melding_t_uitvoertijd.eenheid)
min_uitvoertijd_eenheid,
MAX (m.mld_melding_t_respijt.tijdsduur) max_respijt,
MAX (m.mld_melding_t_respijt.eenheid) max_respijt_eenheid, -- altijd dezelfde eenheid als uitvoertijd???
MAX (m.mld_melding_indult) mld_melding_indult,
MIN (m.mld_melding_einddatum_std) mld_melding_einddatum_std, -- min_melding_einddatum_std of min_thtsla_einddatum_start???
MAX (m.mld_melding_einddatum) mld_melding_einddatum,
MAX (m.klant_melding) klant_melding,
MAX (m.prs_bedrijf_key) prs_bedrijf_key
FROM (SELECT PCHX_MON.get_first_melding (m.mld_melding_key, 1)
m_start,
m.mld_melding_key,
DECODE (m.mld_melding_status, 4, 1, 0) open, -- open = Geaccepteerd???
m.mld_melding_datum,
fac.gettrackingdate ('MLDAFM', m.mld_melding_key)
gereed,
m.mld_melding_t_uitvoertijd,
m.mld_melding_t_respijt,
m.mld_melding_indult,
m.mld_melding_einddatum_std,
m.mld_melding_einddatum,
a.prs_bedrijf_key,
pchx_mon.klant_melding(m.mld_melding_key) klant_melding
FROM mld_melding m,
mld_stdmelding std,
prs_perslid p,
prs_v_afdeling a
WHERE m.mld_melding_parentkey IS NULL
AND m.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
-- meldingen die al geexporteerd zijn (en in de tabel nmms_monitoring staan) komen niet meer in deze view
AND NOT EXISTS
(SELECT 1
FROM pchx_monitoring
WHERE melding_key = m.mld_melding_key)
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_stdmelding_slabewaken = 1 -- alleen meldingen waarvoor een malus geldt
) m
GROUP BY m.m_start) m,
mld_melding x -- gedefinieerde set gegevens bij M_START als referentie
WHERE m.m_start = x.mld_melding_key;
CREATE OR REPLACE VIEW pchx_v_monitoring
(
melding_key,
afw,
indult,
respijt,
kostenplaats,
locatie,
gebouw,
verdieping,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
eenheid,
tht,
wht,
regime,
groep,
basiskorting,
variabelekorting,
wht_tht,
totaal,
totaal_index,
status,
afgerond,
dienst,
stdmelding_key,
discipline_key,
overlappend,
wegingsfactor,
melding_omschrijving,
melding_opmerking,
klant_melding,
bedrijf_naam,
og,
bedrijf_malus,
prefix
)
AS
SELECT m_start, --mld_melding_key,
DECODE (antedateren, 0, '', 'T') -- de begintijd of eindtijd van de melding is aangepast
|| DECODE (g.respijt.tijdsduur, 0, '', 'R') -- er is een respijt ingevuld
|| DECODE (mld_melding_indult, 1, 'I', '') -- indult is aangevinkt dus melding doet niet mee
|| DECODE (aantal_beschikb, 0, '', 'B'), -- binnen de looptijd van de melding is er ook een beschikbaarheidsmelding in dezelfde ruimte
DECODE (COALESCE (mld_melding_indult, 0), 0, 'Nee', 'Ja'),
DECODE (g.respijt.tijdsduur,
0, NULL,
TO_CHAR (ROUND (g.respijt.tijdsduur, 2)))
respijt,
prs_kostenplaats_nr,
alg_locatie_code,
alg_gebouw_upper,
alg_verdieping_volgnr,
ruimte,
mld_stdmelding_omschrijving,
t_van,
gereed,
thtijdstip,
(SELECT fac_tracking_datum
FROM fac_tracking
WHERE fac_tracking_refkey = m_start --mld_melding_key
AND fac_srtnotificatie_key = 46)
verwerkt,
eenheid,
ROUND (g.tht.tijdsduur, 2) tht,
ROUND (g.actual.tijdsduur, 2) wht,
regime,
mld_stdmeldinggroep_naam groep,
bk basiskorting,
vk variabelekorting,
DECODE (telaat, 1, ROUND (g.uitloop.tijdsduur, 2)) wht_tht,
DECODE (
telaat,
1, -- Westland rond de breuk af op 1 decimaal en HGH rond af op gehele getallen.
coalesce(bk,0) + DECODE(vk, null, 0, (ROUND (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur), DECODE(pchx.get_user, 'PCHW', 1,0)) * vk)), -- Alleen als dagen x24!
NULL)
totaal,
DECODE (
telaat,
1,
coalesce(bk,0) + DECODE(vk, null, 0, (ROUND (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur), DECODE(pchx.get_user, 'PCHW', 1,0)) * vk)), -- Alleen als dagen x24!
NULL) * PCHX_MON.get_index_value(t_van, 'MON')
totaal_index,
(SELECT mld_statuses_omschrijving
FROM mld_statuses
WHERE mld_statuses_key = mld_melding_status),
DECODE (mld_melding_afgerond, 1, 'x'),
(SELECT prs_dienst_omschrijving
FROM prs_dienst
WHERE prs_dienst_key = g.prs_dienst_key),
mld_stdmelding_key,
mld_ins_discipline_key,
DECODE(overlappend, NULL, NULL, overlappend || ',') ||
(SELECT listagg (m2.mld_melding_key, ',') WITHIN GROUP (ORDER BY m2.mld_melding_key)
AS overlappend
FROM mld_melding m2
WHERE m2.mld_melding_parentkey = m_start) overlappend,
wegingsfactor,
mld_melding_omschrijving,
mld_melding_opmerking,
klant_melding,
(SELECT prs_bedrijf_naam
FROM prs_bedrijf b
WHERE b.prs_bedrijf_key = g.prs_bedrijf_key)
prs_bedrijf_naam,
DECODE (antedateren + g.respijt.tijdsduur + mld_melding_indult + mld_melding_afgerond, 0, 0, 1),
PCHX.get_kenmerk('MLD', DECODE(PCHX.get_user, 'PCHA', 61, -1), m_start),
ins_srtdiscipline_prefix
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,
m.t_van,
m.gereed,
m.mld_melding_einddatum_std thtijdstip,
stdg.mld_stdmeldinggroep_naam,
PCHX_MON.get_regime (std.mld_stdmelding_key,
m.mld_alg_onroerendgoed_keys,
NULL)
regime, -- aantal werkuren per dag
UPPER (SUBSTR (stdg.mld_stdmeldinggroep_naam, 1, 1))
kortingtype, -- de meldingsgroep bevat het type storing
kp.prs_kostenplaats_nr,
rg.alg_locatie_code,
rg.alg_gebouw_upper,
rg.alg_verdieping_volgnr,
rg.alg_ruimte_nr || '-' || rg.alg_ruimte_omschrijving
ruimte,
COALESCE ((SELECT stsr.mld_stdmsrtruimte_malusbasis
FROM mld_stdmsrtruimte stsr
WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key), std.mld_stdmelding_malusbasis)
bk,
COALESCE ((SELECT stsr.mld_stdmsrtruimte_malus
FROM mld_stdmsrtruimte stsr
WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key), std.mld_stdmelding_malus) vk,
(SELECT COUNT (mb.mld_melding_key) aantal -- kijk of er op het moment van de melding er een beschikbaarheidsstoring was
FROM mld_melding mb, mld_stdmelding std_b
WHERE (mb.mld_melding_datum BETWEEN m.t_van
AND COALESCE (m.gereed,
SYSDATE)
OR fac.gettrackingdate ('MLDAFM', mb.mld_melding_key) BETWEEN m.t_van
AND COALESCE (
m.gereed,
SYSDATE))
AND mb.mld_alg_onroerendgoed_keys =
m.mld_alg_onroerendgoed_keys
AND mb.mld_stdmelding_key = std_b.mld_stdmelding_key
AND std_b.mld_stdmeldinggroep_key = 63 -- beschikbaarheid
AND std.mld_stdmeldinggroep_key <> 63)
aantal_beschikb, -- beschikbaarheid
-- vervolgmelding op een inspectie zijn per definitie te laat
-- inspecties zelf zijn te laat als de geplande einddatum verstreken is.
-- anders geldt de normale formule
SIGN( m.max_t_actual.tijdsduur
- m.min_t_sla.tijdsduur
- m.max_t_respijt.tijdsduur) -- positief, dan te laat
telaat,
m.max_t_actual actual, -- MAX actuele doorlooptijd
m.min_t_sla thtsla, -- MIN SLA
m.min_t_sla.eenheid eenheid,
m.max_t_respijt respijt, -- MAX respijt
mld_t_uitvoertijd (
m.min_t_sla.tijdsduur
+ m.max_t_respijt.tijdsduur,
m.min_t_sla.eenheid)
tht, -- MIN SLA + MAX respijt
mld_t_uitvoertijd (
m.max_t_actual.tijdsduur
- m.min_t_sla.tijdsduur
- m.max_t_respijt.tijdsduur,
m.max_t_actual.eenheid)
uitloop, -- hoeveel te laat
sr.alg_srtruimte_prijs4 wegingsfactor, -- wegingsfactor bij soortruimte
-- is de tijd van de melding aangepast?
(SELECT COUNT ( * )
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_tracking_refkey = m.m_start -- mld_melding_key VAN MELDING MET LAAGSTE KEY???
AND t.fac_srtnotificatie_key =
sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDUPD'
AND (t.fac_tracking_oms LIKE '%Start :%'
OR t.fac_tracking_oms LIKE '%Afgemeld:%'))
antedateren,
klant_melding,
prs_bedrijf_key,
ins_srtdiscipline_prefix
FROM pchx_v_startmelding_geg m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
mld_stdmeldinggroep stdg,
prs_kostenplaats kp,
alg_v_ruimte_gegevens rg,
alg_srtruimte sr
WHERE m.mld_melding_status IN (0, 2, 3, 4, 5, 6, 7, 99) -- alles behalve 1=Afgewezen
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND std.mld_stdmeldinggroep_key =
stdg.mld_stdmeldinggroep_key(+)
AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key(+)
AND rg.alg_srtruimte_key = sr.alg_srtruimte_key(+)
AND (UPPER (SUBSTR (sd.ins_srtdiscipline_prefix, 1, 1)) = 'Q'
OR (PCHX.get_user = 'PCHA' AND d.ins_discipline_key in (232, 220)) -- V en G, W en R
OR klant_melding = 1)
-- meldingen op inspecties worden altijd getoond (Kq)
-- anders alleen storingen ingelegd door klant medewerkers
-- alleen meldingen waarvoor een malus geldt
AND (std.mld_stdmelding_malus IS NOT NULL OR EXISTS (SELECT mld_stdmsrtruimte_key FROM mld_stdmsrtruimte stdsr WHERE stdsr.mld_stdmelding_key = std.mld_stdmelding_key))) g;
-- Rapport om de niet gegroeperde data te zien
CREATE OR REPLACE VIEW pchx_v_monitoring_onderlegger
(
start_key,
melding_key,
afw,
indult,
respijt,
locatie,
gebouw,
verdieping,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
tht,
eenheid,
wht,
regime,
basiskorting,
variabelekorting,
melding_omschrijving,
melding_opmerking,
klant_melding
)
AS
SELECT pchx_mon.get_first_melding (m.mld_melding_key, 1) m_start,
m.mld_melding_key,
DECODE (antedateren.aantal, 0, '', NULL, '', 'T') -- de begintijd of eindtijd van de melding is aangepast
|| DECODE (m.mld_melding_t_respijt.tijdsduur, 0, '', NULL, '', 'R') -- er is een respijt ingevuld
|| DECODE (m.mld_melding_indult, 1, 'I', '')
afw, -- indult is aangevinkt dus melding doet niet mee
m.mld_melding_indult indult,
m.mld_melding_t_respijt.tijdsduur respijt,
alg_locatie_code,
alg_gebouw_upper,
alg_verdieping_volgnr,
alg_ruimte_nr,
std.mld_stdmelding_omschrijving,
m.mld_melding_datum begin,
fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed,
m.mld_melding_einddatum_std thttijdstip,
m.mld_melding_t_uitvoertijd.tijdsduur tht,
m.mld_melding_t_uitvoertijd.eenheid thteenheid,
mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd!
m.mld_melding_datum,
COALESCE (fac.gettrackingdate ('MLDAFM', m.mld_melding_key), SYSDATE),
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
NULL).tijdsduur
wht,
pchx_mon.get_regime (std.mld_stdmelding_key, m.mld_alg_onroerendgoed_keys, NULL) regime,
COALESCE (
(SELECT stsr.mld_stdmsrtruimte_malusbasis
FROM mld_stdmsrtruimte stsr
WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
std.mld_stdmelding_malusbasis)
bk,
COALESCE (
(SELECT stsr.mld_stdmsrtruimte_malus
FROM mld_stdmsrtruimte stsr
WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
std.mld_stdmelding_malus)
vk,
mld_melding_omschrijving,
mld_melding_opmerking,
pchx_mon.klant_melding(m.mld_melding_key)
FROM mld_melding m,
mld_stdmelding std,
alg_v_ruimte_gegevens rg,
( SELECT COUNT ( * ) aantal, t.fac_tracking_refkey
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDUPD'
AND (t.fac_tracking_oms LIKE '%Start :%' OR t.fac_tracking_oms LIKE '%Afgemeld:%')
GROUP BY t.fac_tracking_refkey) antedateren
WHERE m.mld_melding_parentkey IS NULL
AND m.mld_melding_key = antedateren.fac_tracking_refkey(+)
AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key(+)
-- meldingen die al geexporteerd zijn (en in de tabel nmms_monitoring staan) komen niet meer in deze view
AND NOT EXISTS (SELECT 1
FROM pchx_monitoring
WHERE melding_key = m.mld_melding_key)
AND m.mld_stdmelding_key = std.mld_stdmelding_key -- alleen meldingen waarvoor een malus geldt
AND (std.mld_stdmelding_malus IS NOT NULL OR EXISTS (SELECT mld_stdmsrtruimte_key FROM mld_stdmsrtruimte stdsr WHERE stdsr.mld_stdmelding_key = std.mld_stdmelding_key));
-- Het rapport monitoring totaal bevat alle kortingen van de afgelopen maand als deze nog niet
-- bevroren zijn. Als dit wel zo is dan bevat het rapport de gegevens van de huidige maand.
CREATE OR REPLACE VIEW pchx_v_monitoring_tot
(
melding_key,
afw,
indult,
respijt,
locatie,
gebouw,
verdieping,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
eenheid,
tht,
wht,
wht_tht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
wegingsfactor,
dienst,
stdmelding_key,
totaal,
totaal_index,
overlappend,
kinderen,
bedrijf_naam,
klant_melding,
bedrijf_malus,
prefix
)
AS
SELECT melding_key,
afw,
indult,
respijt,
locatie,
gebouw,
verdieping,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
eenheid,
tht,
wht,
wht_tht,
regime,
groep,
NULL typekorting,
basiskorting,
variabelekorting,
wegingsfactor,
dienst,
stdmelding_key,
totaal,
totaal_index,
SUBSTR (overlappend, 1, 100),
NULL, -- kinderen bij herhalingskorting
bedrijf_naam,
klant_melding,
bedrijf_malus,
prefix
FROM pchx_v_monitoring
WHERE totaal IS NOT NULL
AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie'))
AND (gereed < TRUNC (SYSDATE, 'MONTH') -- Vorige maand afgemeld als we al over de maandgrens zitten.
OR TRUNC (SYSDATE, 'MONTH') = -- Huidige maand. Dan is de huidige maand gelijk aan de maand van de laatste export
(SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring))
UNION ALL
SELECT NULL melding_key,
NULL afw,
NULL indult,
NULL respijt,
NULL locatie,
NULL gebouw,
NULL verdieping,
NULL ruimte,
NULL omschrijving,
ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin,
TRUNC (SYSDATE, 'MONTH') gereed,
NULL thtijdstip,
NULL verwerkt,
NULL eenheid,
NULL tht,
NULL wht,
NULL wht_tht,
NULL regime,
'Overschrijding' groep,
NULL typekorting,
NULL basiskorting,
250 variabelekorting,
NULL wegingsfactor,
NULL dienst,
NULL stdmelding_key,
250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal,
PCHX_MON.get_index_value(TRUNC(SYSDATE)-1, 'MON') * 250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal_index,
NULL overlappend,
listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting
NULL bedrijf_naam,
NULL klant_melding,
NULL bedrijf_malus,
NULL prefix
FROM pchx_v_monitoring
WHERE PCHX.get_user = 'PCHW'
AND totaal IS NOT NULL
AND totaal <> 0
AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie'))
AND (gereed < TRUNC (SYSDATE, 'MONTH')
OR TRUNC (SYSDATE, 'MONTH') =
(SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring))
GROUP BY 'Overschrijding'
UNION ALL
SELECT NULL melding_key,
NULL afw,
NULL indult,
NULL respijt,
NULL locatie,
NULL gebouw,
NULL verdieping,
NULL ruimte,
NULL omschrijving,
ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin,
TRUNC (SYSDATE, 'MONTH') gereed,
NULL thtijdstip,
NULL verwerkt,
NULL eenheid,
NULL tht,
NULL wht,
NULL wht_tht,
NULL regime,
'Overschrijding' groep,
NULL typekorting,
NULL basiskorting,
50 variabelekorting,
NULL wegingsfactor,
NULL dienst,
NULL stdmelding_key,
50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal,
PCHX_MON.get_index_value(TRUNC(SYSDATE)-1, 'MON') * 50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal_index,
NULL overlappend,
listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting
NULL bedrijf_naam,
NULL klant_melding,
NULL bedrijf_malus,
NULL prefix
FROM pchx_v_monitoring
WHERE PCHX.get_user = 'PCHW'
AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie'))
AND (gereed < TRUNC (SYSDATE, 'MONTH')
OR TRUNC (SYSDATE, 'MONTH') =
(SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring))
GROUP BY 'Overschrijding';
CREATE OR REPLACE VIEW pchx_v_monitoring_history
( export_datum,
melding_key,
afw,
indult,
respijt,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
eenheid,
tht,
wht,
wht_tht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
totaal,
totaal_index,
dienst,
hide_f_stdmelding_key,
wegingsfactor,
overlappend,
klant_melding,
bedrijf,
melding_omschrijving,
melding_opmerking,
bedrijf_malus,
prefix
)
AS
SELECT export_datum,
melding_key,
afw,
indult,
respijt,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
eenheid,
tht,
wht,
wht_tht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
totaal,
totaal_index,
dienst,
stdmelding_key,
wegingsfactor,
overlappend,
klant_melding,
prs_bedrijf_naam,
melding_omschrijving,
melding_opmerking,
bedrijf_malus,
prefix
FROM pchx_monitoring mo
WHERE begin IS NOT NULL;
CREATE OR REPLACE VIEW pchx_v_facuur_onderlegger
( export_datum,
melding_key,
afw,
indult,
respijt,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
eenheid,
tht,
wht,
wht_tht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
totaal,
totaal_index,
dienst,
hide_f_stdmelding_key,
wegingsfactor,
overlappend,
klant_melding,
bedrijf,
melding_omschrijving,
melding_opmerking,
bedrijf_malus,
prefix
)
AS
SELECT export_datum,
melding_key,
afw,
indult,
respijt,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
eenheid,
tht,
wht,
wht_tht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
totaal,
totaal_index,
dienst,
stdmelding_key,
wegingsfactor,
overlappend,
klant_melding,
prs_bedrijf_naam,
melding_omschrijving,
melding_opmerking,
bedrijf_malus,
prefix
FROM pchx_monitoring mo
WHERE totaal <> 0;
CREATE OR REPLACE VIEW pchx_v_rap_svd
(
xml_node,
mld_melding_key,
svd_type,
status,
datum,
omschrijving,
aantal,
prijs,
totaal,
index_totaal,
mld_opdr_key,
lomschr,
kostensoort,
kostenkenmerk,
kostenplaats
)
AS
SELECT 'opdracht',
TO_CHAR (m.mld_melding_key),
DECODE (SUBSTR (fac_usrdata_upper, 1, 3), 'BEV', 'Risicobeheersing', 'Schoonmaken'),
DECODE (mld_statusopdr_key, 6, 'Afgemeld', 9, 'Afgerond', 7, 'Verwerkt', 'Open'),
COALESCE (mld_opdr_plandatum, mld_opdr_einddatum),
COALESCE (mld_opdr_materiaal_omschr, ud.fac_usrdata_omschr),
mld_opdr_materiaal_aantal,
mld_opdr_materiaal_prijs,
mld_opdr_materiaal_aantal * mld_opdr_materiaal_prijs totaal,
ROUND (
PCHX_MON.get_index_value (COALESCE (mld_opdr_plandatum, mld_opdr_einddatum), SUBSTR(fac_usrdata_code, 1,3) )
* mld_opdr_materiaal_aantal
* mld_opdr_materiaal_prijs,
2)
index_totaal,
o.mld_opdr_key,
DECODE (
fac_usrdata_upper,
'BEVBINKAN24',
'Extra capaciteit beveiliging binnen reguliere gebruikstijden, die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.',
'BEVBINKAN4',
'Extra capaciteit beveiliging binnen reguliere gebruikstijden, die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.',
'BEVBUIKANA24',
'Extra capaciteit beveiliging buiten reguliere gebruikstijden, avond die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.',
'BEVBUIKANA4',
'Extra capaciteit beveiliging buiten reguliere gebruikstijden, avond die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.',
'BEVBUIKANW24',
'Extra capaciteit beveiliging buiten reguliere gebruikstijden, weekend die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.',
'BEVBUIKANW4',
'Extra capaciteit beveiliging buiten reguliere gebruikstijden, weekend die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.',
'BEVCALBINKAN2',
'Onbekend',
'BEVCALBUIKANA2',
'Onbekend',
'BEVCALBUIKANW2',
'Onbekend',
'SCHSPOEL',
'Extra capaciteit schoonmaak, spoelkeuken medewerker',
'SCHPC',
'Extra capaciteit schoonmaak, reiniging PC en toebehoren (= toetsenbord en muis)',
'SCHBINKAN',
'Extra capaciteit schoonmaak, dagkracht',
'SCHBUIKAN',
'Extra capaciteit schoonmaak, avonden / weekenden',
'SCHGRAF',
'Extra capaciteit schoonmaak, verwijderen graffiti',
'GLADHEIDBESTR',
'Gladheidbestrijding',
fac_usrdata_upper)
lomschr,
DECODE (fac_usrdata_upper,
'BEVBINKAN24', '80',
'BEVBINKAN4', '81',
'BEVBUIKANA24', '82',
'BEVBUIKANA4', '83',
'BEVBUIKANW24', '84',
'BEVBUIKANW4', '85',
'BEVCALBINKAN2', 'Onbekend',
'BEVCALBUIKANA2', 'Onbekend',
'BEVCALBUIKANW2', 'Onbekend',
'SCHSPOEL', '88',
'SCHPC', '89',
'SCHBINKAN', '90',
'SCHBUIKAN', '91',
'SCHGRAF', '92',
'GLADHEIDBESTR', '93',
fac_usrdata_upper)
kostensoort,
DECODE (fac_usrdata_upper,
'BEVBINKAN24', '6.1.1',
'BEVBINKAN4', '6.1.2',
'BEVBUIKANA24', '6.1.3',
'BEVBUIKANA4', '6.1.4',
'BEVBUIKANW24', '6.1.5',
'BEVBUIKANW4', '6.1.6',
'BEVCALBINKAN2', 'Onbekend',
'BEVCALBUIKANA2', 'Onbekend',
'BEVCALBUIKANW2', 'Onbekend',
'SCHSPOEL', '6.2.7',
'SCHPC', '6.2.8',
'SCHBINKAN', '6.2.9',
'SCHBUIKAN', '6.2.10',
'SCHGRAF', '6.2.11',
'GLADHEIDBESTR', '6.2.12',
fac_usrdata_upper)
kostenkenmerk,
prs_kostenplaats_nr
FROM mld_opdr o,
mld_opdr_materiaal om,
fac_usrdata ud,
mld_melding m,
mld_stdmelding std,
mld_discipline d,
prs_kostenplaats k
WHERE o.mld_opdr_key = om.mld_opdr_key
AND ud.fac_usrdata_key = om.fac_usrdata_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND mld_statusopdr_key NOT IN (1, 2)
UNION ALL
SELECT 'artikel',
res_reservering_key || '/' || res_rsv_ruimte_volgnr,
'Catering',
b.res_status_bo_omschrijving,
res_rsv_ruimte_van,
ra.res_artikel_omschrijving,
rra.res_rsv_artikel_aantal,
ra.res_artikel_prijs,
res.getartikelprijs (rra.res_rsv_artikel_key),
PCHX_MON.get_index_value (SYSDATE, ra.res_artikel_groep) * res.getartikelprijs (rra.res_rsv_artikel_key),
rra.res_rsv_artikel_key,
ra.res_artikel_omschrijving,
ra.res_artikel_groep,
NULL,
k.prs_kostenplaats_nr
FROM res_rsv_ruimte rrr,
res_rsv_artikel rra,
res_artikel ra,
res_status_bo b,
prs_kostenplaats k
WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
AND rra.res_artikel_key = ra.res_artikel_key
AND rra.res_status_bo_key = b.res_status_bo_key
AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND rra.res_rsv_artikel_verwijder IS NULL
AND ra.res_artikel_groep LIKE 'SVD%';
CREATE OR REPLACE PROCEDURE pchx_select_freeze_mon (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
CURSOR c1
IS
SELECT melding_key
FROM pchx_v_monitoring
WHERE status = 'Afgemeld'
AND gereed < TRUNC (SYSDATE, 'MONTH')
AND afw IS NULL -- geen afwijkingen die goedgekeurd moeten worden
AND afgerond IS NULL; -- expliciete goedkeuring staat niet aan
-- !!! controleer ook meldingen die aan elkaar gekoppeld zijn !!!!!!!!!!!!!!!!!!
CURSOR c2
IS
SELECT m_start,
m.mld_melding_key,
(SELECT mld_melding_status
FROM mld_melding ms
WHERE ms.mld_melding_key = m_start)
mld_melding_status
FROM (SELECT PCHX_MON.get_first_melding (mld_melding_key, 1) m_start,
fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed,
m.*
FROM mld_melding m
WHERE m.mld_melding_parentkey IS NULL
AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) <
TRUNC (SYSDATE, 'MONTH')
AND m.mld_melding_key NOT IN
(SELECT melding_key FROM pchx_monitoring WHERE melding_key IS NOT NULL)
) m,
pchx_v_monitoring mo
WHERE m_start <> m.mld_melding_key AND m_start = mo.melding_key
AND ( (status = 'Afgemeld' AND afw IS NULL) -- startmelding mag niet hangen op goedkeuring
OR (status = 'Historie'));
CURSOR c3
IS
SELECT * FROM pchx_v_monitoring_tot;
CURSOR c_svd_opdracht
IS
SELECT * FROM pchx_v_rap_svd
WHERE status = 'Afgerond'
AND xml_node = 'opdracht'
AND datum < TRUNC (SYSDATE, 'MONTH');
CURSOR c_svd_artikel
IS
SELECT * FROM pchx_v_rap_svd
WHERE status = 'Afgemeld'
AND xml_node = 'artikel'
AND datum < TRUNC (SYSDATE, 'MONTH');
v_exportdate DATE;
v_lastexport DATE;
v_kortingen_totaal NUMBER(11,2);
v_svd_totaal NUMBER(11,2);
BEGIN
v_exportdate := SYSDATE;
-- Als ik deze maand al een freeze heb uitgevoerd dan mag ik dat niet nog een keer doen.
SELECT MAX(export_datum)
INTO v_lastexport
FROM pchx_monitoring;
IF TRUNC (COALESCE(v_lastexport, SYSDATE-100), 'MONTH') <> TRUNC(v_exportdate, 'MONTH')
THEN
-- Zet de meldingen die geen afwijking kennen en die niet op status afgerond staan naar status verwerkt
FOR rec IN c1
LOOP
BEGIN
BEGIN
mld.setmeldingstatus (rec.melding_key, 6, NULL);
END;
END;
END LOOP;
-- zet slave meldingen van samenvallende meldingen ook op verwerkt
FOR rec IN c2
LOOP
BEGIN
IF rec.mld_melding_status = 6 OR rec.mld_melding_status = 5 -- verwerkt of afgemeld
THEN
BEGIN
mld.setmeldingstatus (rec.mld_melding_key, 6, NULL);
END;
END IF;
END;
END LOOP;
-- Voeg de entries uit het monitoringsoverzicht toe aan de freeze tabel.
FOR rec IN c3
LOOP
BEGIN
BEGIN
INSERT INTO pchx_monitoring (melding_key,
afw,
indult,
respijt,
locatie,
gebouw,
verdieping,
ruimte,
omschrijving,
begin,
gereed,
thtijdstip,
verwerkt,
eenheid,
tht,
wht,
wht_tht,
regime,
groep,
typekorting,
basiskorting,
variabelekorting,
wegingsfactor,
dienst,
stdmelding_key,
totaal,
totaal_index,
overlappend,
kinderen,
prs_bedrijf_naam,
klant_melding,
melding_omschrijving,
melding_opmerking,
export_datum,
bedrijf_malus,
prefix)
VALUES (rec.melding_key,
rec.afw,
rec.indult,
rec.respijt,
rec.locatie,
rec.gebouw,
rec.verdieping,
rec.ruimte,
rec.omschrijving,
rec.begin,
rec.gereed,
rec.thtijdstip,
rec.verwerkt,
rec.eenheid,
rec.tht,
rec.wht,
rec.wht_tht,
rec.regime,
rec.groep,
rec.typekorting,
rec.basiskorting,
rec.variabelekorting,
rec.wegingsfactor,
rec.dienst,
rec.stdmelding_key,
DECODE (rec.indult, 'Ja', 0, rec.totaal),
DECODE (rec.indult, 'Ja', 0, rec.totaal_index),
rec.overlappend,
rec.kinderen,
rec.bedrijf_naam,
rec.klant_melding,
rec.melding_omschrijving,
rec.melding_opmerking,
v_exportdate,
rec.bedrijf_malus,
rec.prefix);
END;
END;
END LOOP;
INSERT INTO pchx_monitoring (melding_key, 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 pchx_monitoring nm
WHERE nm.melding_key IS NOT NULL);
SELECT SUM(totaal)
INTO v_kortingen_totaal
FROM pchx_monitoring
WHERE export_datum = v_exportdate;
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
VALUES ('FREEZE', 'Kortingen totaal: ' || v_kortingen_totaal, 1);
ELSE
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
VALUES ('FREEZE', 'Kortingen zijn al bevroren deze maand op ' || TO_CHAR(v_lastexport, 'dd-mm-yyyy hh24:mi:ss'), 1);
END IF;
-- Freeze van SVD's
-- Als ik deze maand al een freeze heb uitgevoerd dan mag ik dat niet nog een keer doen.
SELECT MAX(export_datum)
INTO v_lastexport
FROM pchx_svd;
IF TRUNC (COALESCE(v_lastexport, SYSDATE-100), 'MONTH') <> TRUNC(v_exportdate, 'MONTH')
THEN
FOR rec IN c_svd_opdracht
LOOP
BEGIN
INSERT INTO pchx_svd (mld_melding_key,
svd_type,
status,
datum,
omschrijving,
aantal,
prijs,
totaal,
index_totaal,
mld_opdr_key,
lomschr,
kostensoort,
kostenkenmerk,
export_datum)
VALUES (rec.mld_melding_key,
rec.svd_type,
rec.status,
rec.datum,
rec.omschrijving,
rec.aantal,
rec.prijs,
rec.totaal,
rec.index_totaal,
rec.mld_opdr_key,
rec.lomschr,
rec.kostensoort,
rec.kostenkenmerk,
v_exportdate);
mld.setopdrachtstatus (rec.mld_opdr_key, 7, NULL);
mld.updatemeldingstatus (rec.mld_melding_key, 0, NULL);
END;
END LOOP;
FOR rec IN c_svd_artikel
LOOP
BEGIN
INSERT INTO pchx_svd (mld_melding_key,
svd_type,
status,
datum,
omschrijving,
aantal,
prijs,
totaal,
index_totaal,
mld_opdr_key,
lomschr,
kostensoort,
kostenkenmerk,
export_datum)
VALUES (rec.mld_melding_key,
rec.svd_type,
rec.status,
rec.datum,
rec.omschrijving,
rec.aantal,
rec.prijs,
rec.totaal,
rec.index_totaal,
rec.mld_opdr_key,
rec.lomschr,
rec.kostensoort,
rec.kostenkenmerk,
v_exportdate);
UPDATE res_rsv_artikel rra
SET res_rsv_artikel_verwerkt = v_exportdate, res_status_bo_key = 6
WHERE rra.res_rsv_artikel_key = rec.mld_opdr_key;
END;
END LOOP;
SELECT SUM(totaal)
INTO v_svd_totaal
FROM pchx_svd
WHERE export_datum = v_exportdate;
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
VALUES ('FREEZE', 'Kortingen totaal: ' || v_svd_totaal, 2);
ELSE
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
VALUES ('FREEZE', 'SVDs zijn al bevroren deze maand op ' || TO_CHAR(v_lastexport, 'dd-mm-yyyy hh24:mi:ss'), 2);
END IF;
COMMIT;
END pchx_select_freeze_mon;
/
CREATE OR REPLACE PROCEDURE pchx_export_freeze_mon (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
BEGIN
DELETE fac_rapport WHERE fac_rapport_node = 'FREEZE';
END;
/
CREATE OR REPLACE VIEW pchx_v_export_freeze_mon
( result,
result_order)
AS
SELECT fac_rapport_regel, fac_rapport_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'FREEZE';
CREATE OR REPLACE VIEW pchx_v_svd_history
(
mld_melding_key,
mld_opdr_key,
svd_type,
status,
datum,
omschrijving,
aantal,
prijs,
totaal,
index_totaal,
export_datum,
lomschr,
kostensoort,
kostenkenmerk
)
AS
SELECT mld_melding_key,
mld_opdr_key,
svd_type,
status,
datum,
omschrijving,
aantal,
prijs,
totaal,
index_totaal,
export_datum,
lomschr,
kostensoort,
kostenkenmerk
FROM pchx_svd;
-- Rapport om aanpassingen in de stdmelding/vakgroep te signaleren.
CREATE OR REPLACE VIEW pchx_v_mld_cat_aanpassing
AS
SELECT m.mld_melding_key,
m.mld_melding_onderwerp,
fac_tracking_datum,
fac_tracking_oms
FROM fac_tracking t, mld_melding m
WHERE fac_tracking_oms LIKE '%Melding:%' AND m.mld_melding_key = t.fac_tracking_refkey;
CREATE OR REPLACE VIEW pchx_v_rap_stmelding_os_check
(
ins_srtdiscipline_omschrijving,
ins_discipline_omschrijving,
mld_stdmelding_omschrijving,
mld_stdmelding_uitvoertijd_t,
mld_stdmelding_uitvoertijd_e,
mld_stdmelding_regime,
mld_stdmelding_malus,
mld_stdmelding_malusbasis,
alg_srtruimte_code,
mld_stdmsrtruimte_t_uitvtijd_t,
mld_stdmsrtruimte_t_uitvtijd_e,
mld_stdmsrtruimte_regime,
mld_stdmsrtruimte_malus,
mld_stdmsrtruimte_malusbasis
)
AS
SELECT sd.ins_srtdiscipline_omschrijving,
ins_discipline_omschrijving,
mld_stdmelding_omschrijving,
std.mld_stdmelding_t_uitvoertijd.tijdsduur mld_stdmelding_uitvoertijd_t,
std.mld_stdmelding_t_uitvoertijd.eenheid mld_stdmelding_uitvoertijd_e,
DECODE (mld_stdmelding_regime, 1, 'DagregimeDienst', 2, 'DagregimeRuimte', 3, '24/7')
mld_stdmelding_regime,
mld_stdmelding_malus,
mld_stdmelding_malusbasis,
sr.alg_srtruimte_code,
stdsr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur mld_stdmsrtruimte_t_uitvtijd_t,
stdsr.mld_stdmsrtruimte_t_uitvtijd.eenheid mld_stdmsrtruimte_t_uitvtijd_e,
DECODE (mld_stdmsrtruimte_regime, 1, 'DagregimeDienst', 2, 'DagregimeRuimte', 3, '24/7')
mld_stdmsrtruimte_regime,
stdsr.mld_stdmsrtruimte_malus,
stdsr.mld_stdmsrtruimte_malusbasis
FROM mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
mld_stdmsrtruimte stdsr,
alg_srtruimte sr
WHERE std.mld_stdmelding_key = stdsr.mld_stdmelding_key(+)
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND std.mld_stdmelding_verwijder IS NULL
AND stdsr.alg_srtruimte_key = sr.alg_srtruimte_key(+);
CREATE OR REPLACE VIEW pchx_v_noti_melding_afrond
(
sender,
receiver,
text,
code,
key,
xkey
)
AS
SELECT NULL sender,
gg.prs_perslid_key receiver,
'Facilitor: Melding: ' || m.mld_melding_key || ' is ter goedkeuring aangeboden.',
'MLDINF' code,
mld_melding_key key,
NULL xkey
FROM mld_melding m,
fac_srtnotificatie sn,
fac_tracking t,
fac_gebruikersgroep gg
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFR'
AND t.fac_tracking_refkey = m.mld_melding_key
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval / 24
FROM fac_notificatie_job
WHERE LOWER (fac_notificatie_job_view) =
'pchx_v_noti_melding_afrond')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE LOWER (fac_notificatie_job_view) =
'pchx_v_noti_melding_afrond')
-- Notificatie wordt gestuurd naar de contractbeheerders
AND gg.fac_groep_key = DECODE(pchx.get_user, 'PCHW',63, 'PCHA', 61);
-- Notificatiejob om een bericht naar de contractmanager te sturen op het moment dat een melding afgerond of afgemeld (alleen PCHW) wordt
CREATE OR REPLACE VIEW pchx_v_noti_melding_afrond
(
sender,
receiver,
text,
code,
key,
xkey
)
AS
SELECT NULL sender,
gg.prs_perslid_key receiver,
'Facilitor: Melding: ' || m.mld_melding_key || ' is ter goedkeuring aangeboden.',
'MLDINF' code,
mld_melding_key key,
NULL xkey
FROM mld_melding m,
fac_srtnotificatie sn,
fac_tracking t,
fac_gebruikersgroep gg
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFR'
AND t.fac_tracking_refkey = m.mld_melding_key
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval / 24
FROM fac_notificatie_job
WHERE LOWER (fac_notificatie_job_view) =
'pchx_v_noti_melding_afrond')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE LOWER (fac_notificatie_job_view) =
'pchx_v_noti_melding_afrond')
-- Notificatie wordt gestuurd naar de contractbeheerders
AND gg.fac_groep_key = DECODE(pchx.get_user, 'PCHW',63, 'PCHA', 61)
UNION ALL
SELECT NULL sender,
gg.prs_perslid_key receiver,
'Facilitor: Melding: ' || m.mld_melding_key || ' is gereed gemeld.',
'MLDINF' code,
mld_melding_key key,
NULL xkey
FROM mld_melding m,
prs_perslid p,
prs_v_afdeling a,
fac_srtnotificatie sn,
fac_tracking t,
fac_gebruikersgroep gg
WHERE m.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = 121 -- Gemeente Westland
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFM'
AND t.fac_tracking_refkey = m.mld_melding_key
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval / 24
FROM fac_notificatie_job
WHERE LOWER (fac_notificatie_job_view) =
'pchx_v_noti_melding_afrond')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE LOWER (fac_notificatie_job_view) =
'pchx_v_noti_melding_afrond')
-- Notificatie wordt gestuurd naar de contractbeheerders
AND gg.fac_groep_key = 63
AND pchx.get_user = 'PCHW';
------ 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