Files
Customer/DEMO/demo.sql
2024-09-11 11:09:27 +00:00

8347 lines
348 KiB
MySQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific db-configuration for DEMO
DEFINE thisfile = 'DEMO.SQL'
DEFINE dbuser = '^DEMO'
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;
------ payload begin ------
CREATE OR REPLACE VIEW curs_v_rap_infobord (
item_type,
item_key,
aktief,
bezoek_status,
offset,
dag,
tijd_van,
tijd_tot,
ruimte,
catalogus,
aanvrager,
gastheer,
omschrijving,
status,
bezoeker,
bedrijf,
locatie_code,
gebouw_code,
verdieping_code,
locatie_omschrijving,
gebouw_omschrijving,
verdieping_omschrijving,
alg_locatie_key,
alg_gebouw_key,
alg_verdieping_key
)
AS
SELECT 'RES',
rrr.res_rsv_ruimte_key,
( CASE
WHEN res_rsv_ruimte_van > SYSDATE THEN 'expected'
WHEN res_rsv_ruimte_tot < SYSDATE THEN 'passed'
ELSE 'active'
END)
aktief,
( CASE
WHEN B.BEZ_BEZOEKERS_OUT IS not null THEN 'out'
WHEN b.bez_bezoekers_done is not null THEN 'in'
ELSE 'expected'
END)
bezoek_status,
TRUNC ( (SYSDATE - res_rsv_ruimte_van) * 24 * 60) offset,
TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy') dag,
TO_CHAR (res_rsv_ruimte_van, 'hh24:mi') tijd_van,
TO_CHAR (res_rsv_ruimte_tot, 'hh24:mi') tijd_tot,
res_ruimte_nr ruimte,
ins_discipline_omschrijving catalogus,
aanvrager.prs_perslid_naam_full aanvrager,
gastheer.prs_perslid_naam_full gastheer,
res_rsv_ruimte_omschrijving omschrijving,
sf.res_status_fo_omschrijving status,
b.bez_afspraak_naam,
b.bez_afspraak_bedrijf,
alg_locatie_code locatie_code,
alg_gebouw_code gebouw_code,
alg_verdieping_code verdieping_code,
alg_locatie_omschrijving locatie_omschrijving,
alg_gebouw_omschrijving gebouw_omschrijving,
alg_verdieping_omschrijving verdieping_omschrijving,
l.alg_locatie_key,
g.alg_gebouw_key,
v.alg_verdieping_key
FROM res_v_aanwezigrsv_ruimte rrr,
res_ruimte_opstelling rro,
prs_v_perslid_fullnames aanvrager,
prs_v_perslid_fullnames gastheer,
res_v_res_ruimte_gegevens rrg,
alg_locatie l,
alg_gebouw g,
alg_verdieping v,
res_status_fo sf,
res_discipline rd,
bez_afspraak a,
bez_bezoekers b
WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
AND rro.res_ruimte_key = rrg.res_ruimte_key
AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key
AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key
AND TRUNC (res_rsv_ruimte_van) = TRUNC (SYSDATE)
AND rrg.alg_locatie_key = l.alg_locatie_key
AND rrg.alg_gebouw_key = g.alg_gebouw_key
AND rrg.alg_verdieping_key = v.alg_verdieping_key
AND rrr.res_status_fo_key = sf.res_status_fo_key
AND rrg.res_discipline_key = rd.ins_discipline_key
AND rrr.res_rsv_ruimte_key = a.res_rsv_ruimte_key(+)
AND a.bez_afspraak_key = b.bez_afspraak_key(+)
union all
select 'BEZ', b.bez_afspraak_key,
( CASE
WHEN A.BEZ_AFSPRAAK_DATUM > SYSDATE THEN 'expected'
WHEN a.bez_afspraak_eind < SYSDATE THEN 'passed'
ELSE 'active'
END)
aktief,
( CASE
WHEN B.BEZ_BEZOEKERS_OUT IS not null THEN 'out'
WHEN b.bez_bezoekers_done is not null THEN 'in'
ELSE 'expected'
END)
bezoek_status,
TRUNC ( (SYSDATE - BEZ_AFSPRAAK_DATUM) * 24 * 60) offset,
TO_CHAR (BEZ_AFSPRAAK_DATUM, 'dd-mm-yyyy') dag,
TO_CHAR (BEZ_AFSPRAAK_DATUM, 'hh24:mi') tijd_van,
TO_CHAR (BEZ_AFSPRAAK_eind, 'hh24:mi') tijd_tot,
null ruimte,
null catalogus,
aanvrager.prs_perslid_naam_full aanvrager,
gastheer.prs_perslid_naam_full gastheer,
null omschrijving,
null status,
b.bez_afspraak_naam,
b.bez_afspraak_bedrijf,
alg_locatie_code locatie_code,
alg_gebouw_code gebouw_code,
null verdieping_code,
alg_locatie_omschrijving locatie_omschrijving,
alg_gebouw_naam gebouw_omschrijving,
alg_verdieping_omschrijving verdieping_omschrijving,
l.alg_locatie_key,
ogg.alg_gebouw_key,
ogg.alg_verdieping_key
from bez_afspraak a, bez_bezoekers b,
prs_v_perslid_fullnames aanvrager, alg_locatie l, alg_v_allonrgoed_gegevens ogg,
prs_v_perslid_fullnames gastheer
where a.bez_afspraak_key = b.bez_afspraak_key
and A.BEZ_AFSPRAAK_HOST_KEY = gastheer.prs_perslid_key
and a.bez_afspraak_contact_key = aanvrager.prs_perslid_key
and A.ALG_LOCATIE_KEY = l.alg_locatie_key
and A.ALG_ONRGOED_KEYS = ogg.alg_onroerendgoed_keys(+)
and A.RES_RSV_RUIMTE_KEY is null;
CREATE OR REPLACE VIEW curs_v_info_loc_overzicht (
aktief,
boarding,
offset,
dag,
tijd_van,
tijd_tot,
ruimte,
aanvrager,
gastheer,
omschrijving,
status,
locatie_code,
gebouw_code,
verdieping_code,
alg_locatie_key,
alg_gebouw_key,
alg_verdieping_key
)
AS
SELECT (SELECT 'active'
FROM DUAL
WHERE res_rsv_ruimte_van < SYSDATE
AND res_rsv_ruimte_tot > SYSDATE
UNION
SELECT 'expected'
FROM DUAL
WHERE res_rsv_ruimte_van > SYSDATE
UNION
SELECT 'passed'
FROM DUAL
WHERE res_rsv_ruimte_tot < SYSDATE)
aktief,
(SELECT DECODE (COUNT ( * ), 0, 1, 0)
FROM res_rsv_ruimte rrr2
WHERE rrr2.res_rsv_ruimte_tot BETWEEN SYSDATE
AND rrr.res_rsv_ruimte_van
AND rrr2.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key)
boarding,
TRUNC ( (SYSDATE - res_rsv_ruimte_van) * 24 * 60) offset,
TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy') dag,
TO_CHAR (res_rsv_ruimte_van, 'hh24:mi') tijd_van,
TO_CHAR (res_rsv_ruimte_tot, 'hh24:mi') tijd_tot,
res_ruimte_nr ruimte,
aanvrager.prs_perslid_naam_full aanvrager,
gastheer.prs_perslid_naam_full gastheer,
res_rsv_ruimte_omschrijving omschrijving,
sf.res_status_fo_omschrijving status,
alg_locatie_code locatie_code,
alg_gebouw_code gebouw_code,
alg_verdieping_code verdieping_code,
l.alg_locatie_key,
g.alg_gebouw_key,
v.alg_verdieping_key
FROM res_v_aanwezigrsv_ruimte rrr,
res_ruimte_opstelling rro,
prs_v_perslid_fullnames aanvrager,
prs_v_perslid_fullnames gastheer,
res_v_res_ruimte_gegevens rrg,
alg_locatie l,
alg_gebouw g,
alg_verdieping v,
res_status_fo sf
WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
AND rro.res_ruimte_key = rrg.res_ruimte_key
AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key
AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key
AND TRUNC (res_rsv_ruimte_van) = TRUNC (SYSDATE)
AND rrg.alg_locatie_key = l.alg_locatie_key
AND rrg.alg_gebouw_key = g.alg_gebouw_key
AND rrg.alg_verdieping_key = v.alg_verdieping_key
AND rrr.res_status_fo_key = sf.res_status_fo_key;
CREATE OR REPLACE FORCE VIEW curs_v_prs_indienst (
fclt_f_maand,
fclt_f_naam,
nummer,
indienst,
fclt_f_afdeling
)
AS
SELECT TO_CHAR (p.prs_perslid_ingangsdatum, 'YYMM'),
pf.prs_perslid_naam_full,
p.prs_perslid_nr,
TO_CHAR (p.prs_perslid_ingangsdatum, 'DD-MM-YYYY'),
a.prs_afdeling_naam1
FROM prs_v_afdeling a, prs_v_aanwezigperslid p, prs_v_perslid_fullnames pf
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_ingangsdatum IS NOT NULL;
CREATE OR REPLACE FORCE VIEW curs_v_prs_uitdienst (
fclt_f_maand,
fclt_f_naam,
nummer,
uitdienst,
fclt_f_afdeling
)
AS
SELECT TO_CHAR (p.prs_perslid_einddatum, 'YYMM'),
pf.prs_perslid_naam_full,
p.prs_perslid_nr,
TO_CHAR (p.prs_perslid_einddatum, 'DD-MM-YYYY'),
a.prs_afdeling_naam1
FROM prs_v_afdeling a, prs_v_aanwezigperslid p, prs_v_perslid_fullnames pf
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_einddatum IS NOT NULL;
CREATE OR REPLACE FORCE VIEW curs_v_verbruik1 (
fclt_f_locatie,
objectomschrijving,
waarde,
fclt_f_datum,
datumstr,
hide_f_ins_deel_key
)
AS
SELECT l.alg_locatie_omschrijving,
d.ins_deel_omschrijving objectomschrijving,
fac.safe_to_number (kd.ins_kenmerkdeel_waarde) eindwaarde,
TO_CHAR (kd.ins_kenmerkdeel_aanmaak, 'YYMM') einddatum,
TO_CHAR (kd.ins_kenmerkdeel_aanmaak, 'DD-MM-YY') einddatumstr,
d.ins_deel_key
FROM ins_v_aanwezigsrtdeel sd,
ins_v_aanwezigdeel d,
ins_kenmerkdeel kd,
ins_kenmerk k,
ins_srtkenmerk sk,
alg_v_aanweziglocatie l
WHERE sd.ins_srtdeel_key = d.ins_srtdeel_key
AND d.ins_deel_key = kd.ins_deel_key
AND kd.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_kenmerk_verwijder IS NULL
AND k.ins_kenmerk_volgnummer >= 100
AND sk.ins_srtkenmerk_kenmerktype = 'N'
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
AND d.ins_alg_locatie_key = l.alg_locatie_key;
CREATE OR REPLACE FORCE VIEW curs_v_verbruik (
fclt_f_locatie,
objectomschrijving,
verbruik,
fclt_f_begindatum,
fclt_f_einddatum
)
AS
SELECT v1.fclt_f_locatie,
v1.objectomschrijving,
(v1.waarde - v2.waarde) verbruik,
v2.fclt_f_datum begindatum,
v1.fclt_f_datum einddatum
FROM curs_v_verbruik1 v1, curs_v_verbruik1 v2
WHERE v1.hide_f_ins_deel_key = v2.hide_f_ins_deel_key
AND v1.fclt_f_datum >= v2.fclt_f_datum
AND v1.waarde >= v2.waarde
AND (v1.waarde - v2.waarde) < 99999999;
/* Formatted on 2009/01/08 11:40 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_hv_actual (dis_oms,
loc_code,
geb_code,
ver_code,
ruimte_nr,
ruimtesoort,
wp_cap,
teken_opp,
sp_nummer,
sp_naam,
bezetting,
m2_wpnorm,
m2_tarief
)
AS
(SELECT a.alg_district_omschrijving, a.alg_locatie_code, a.alg_gebouw_code,
a.alg_verdieping_code, a.alg_ruimte_nr, b.ruimtesoort,
fac.safe_to_number (COALESCE (c.wp_cap, '0')), a.opp, d.afd_naam,
d.afd_oms, d.afd_bez,
(SELECT fac.safe_to_number
(COALESCE (kl.prs_kenmerklink_waarde, '0')
)
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = 28021 -- Atos Origin
AND kl.prs_kenmerklink_niveau = 'B'
AND kl.prs_kenmerk_key = 1240) m2_wpnorm, -- m2-wpnorm
(SELECT fac.safe_to_number
(COALESCE (kl.prs_kenmerklink_waarde, '0')
)
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = 28021 -- Atos Origin
AND kl.prs_kenmerklink_niveau = 'B'
AND kl.prs_kenmerk_key = 1180) m2_tarief -- m2-tarief
FROM (SELECT r.alg_ruimte_key, r.alg_ruimte_nr, v.alg_verdieping_code,
g.alg_gebouw_code, l.alg_locatie_code,
d.alg_district_omschrijving,
r.alg_ruimte_bruto_vloeropp opp
FROM alg_v_aanwezigruimte r,
alg_verdieping v,
alg_gebouw g,
alg_locatie l,
alg_district d
WHERE r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key) a
LEFT JOIN
(SELECT r.alg_ruimte_key,
COALESCE (sr.alg_srtruimte_omschrijving, '-') ruimtesoort
FROM alg_v_aanwezigruimte r, alg_srtruimte sr
WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key) b
ON a.alg_ruimte_key = b.alg_ruimte_key
LEFT JOIN
(SELECT ok.alg_onrgoed_key, ok.alg_onrgoedkenmerk_waarde wp_cap
FROM alg_onrgoedkenmerk ok
WHERE ok.alg_kenmerk_key = 1240 -- wp_cap
AND ok.alg_onrgoed_niveau = 'R') c
ON a.alg_ruimte_key = c.alg_onrgoed_key
LEFT JOIN -- afdeling(en) op ruimte
(SELECT ra.alg_ruimte_key, afd.prs_afdeling_naam afd_naam,
afd.prs_afdeling_omschrijving afd_oms,
ra.prs_ruimteafdeling_bezetting afd_bez
FROM prs_v_aanwezigruimteafdeling ra, prs_afdeling afd
WHERE ra.prs_afdeling_key = afd.prs_afdeling_key
UNION ALL
SELECT x.alg_ruimte_key, NULL afd_naam, NULL afd_oms,
(100 - x.rui_bez) afd_bez
FROM (SELECT ra.alg_ruimte_key,
SUM (ra.prs_ruimteafdeling_bezetting) rui_bez
FROM prs_v_aanwezigruimteafdeling ra
GROUP BY ra.alg_ruimte_key) x
WHERE x.rui_bez < 100) d ON a.alg_ruimte_key = d.alg_ruimte_key
)
/
CREATE OR REPLACE VIEW curs_v_hv_xactual (
loc_code,
geb_code,
ver_code,
ruimte_nr,
ruimtesoort,
wp_cap,
teken_opp,
sp_nummer,
sp_naam,
bezetting,
m2_wpnorm,
m2_tarief
)
AS
(SELECT a.alg_locatie_code,
a.alg_gebouw_code,
a.alg_verdieping_code,
a.alg_ruimte_nr,
b.ruimtesoort,
fac.safe_to_number (COALESCE (c.wp_cap, '0')),
a.opp,
d.afd_naam,
d.afd_oms,
d.afd_bez,
(SELECT fac.safe_to_number(COALESCE (kl.prs_kenmerklink_waarde, '0'
))
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = 28021 -- Atos Origin
AND kl.prs_kenmerklink_niveau = 'B'
AND kl.prs_kenmerk_key = 1240)
m2_wpnorm, -- m2-wpnorm
(SELECT fac.safe_to_number(COALESCE (kl.prs_kenmerklink_waarde, '0'
))
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = 28021 -- Atos Origin
AND kl.prs_kenmerklink_niveau = 'B'
AND kl.prs_kenmerk_key = 1180)
m2_tarief -- m2-tarief
FROM (SELECT r.alg_ruimte_key,
r.alg_ruimte_nr,
v.alg_verdieping_code,
g.alg_gebouw_code,
l.alg_locatie_code,
r.alg_ruimte_bruto_vloeropp opp
FROM alg_v_aanwezigruimte r,
alg_verdieping v,
alg_gebouw g,
alg_locatie l
WHERE r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key) a
LEFT JOIN
(SELECT r.alg_ruimte_key,
COALESCE (sr.alg_srtruimte_omschrijving, '-')
ruimtesoort
FROM alg_v_aanwezigruimte r, alg_srtruimte sr
WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key) b
ON a.alg_ruimte_key = b.alg_ruimte_key
LEFT JOIN
(SELECT ok.alg_onrgoed_key,
ok.alg_onrgoedkenmerk_waarde wp_cap
FROM alg_onrgoedkenmerk ok
WHERE ok.alg_kenmerk_key = 1240 -- wp_cap
AND ok.alg_onrgoed_niveau = 'R') c
ON a.alg_ruimte_key = c.alg_onrgoed_key
LEFT JOIN -- afdeling(en) op ruimte
(SELECT ra.alg_ruimte_key,
afd.prs_afdeling_naam afd_naam,
afd.prs_afdeling_omschrijving afd_oms,
ra.prs_ruimteafdeling_bezetting afd_bez
FROM prs_v_aanwezigruimteafdeling ra, prs_afdeling afd
WHERE ra.prs_afdeling_key = afd.prs_afdeling_key) d
ON a.alg_ruimte_key = d.alg_ruimte_key)
/
/* Formatted on 2009/01/08 09:15 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_rap_hv_doorbelasting (fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_afdeling_naam,
fclt_f_afdeling_nr,
aantal_m2,
kosten
)
AS
(SELECT x.dis_oms, x.loc_code, x.geb_code,
COALESCE (x.sp_naam, '[Leegstand]'),
COALESCE (x.sp_nummer, '[Leegstand]'),
SUM (DECODE (UPPER (x.ruimtesoort),
'OPEN WERKPLEK', x.wp * x.m2_wpnorm,
x.teken_opp
)
) reken_opp,
SUM (DECODE (UPPER (x.ruimtesoort),
'OPEN WERKPLEK', x.wp * x.m2_wpnorm * x.m2_tarief,
x.teken_opp * x.m2_tarief
)
) kosten
FROM (SELECT v.dis_oms, v.loc_code, v.geb_code, v.sp_nummer,
v.sp_naam, v.ruimtesoort, v.m2_tarief, v.m2_wpnorm,
SUM (v.wp_cap * COALESCE (v.bezetting, 100) / 100) wp,
SUM (v.teken_opp * COALESCE (v.bezetting, 100) / 100
) teken_opp
FROM curs_v_hv_actual v
GROUP BY v.dis_oms,
v.loc_code,
v.geb_code,
v.sp_nummer,
v.sp_naam,
v.ruimtesoort,
v.m2_tarief,
v.m2_wpnorm) x
GROUP BY x.dis_oms, x.loc_code, x.geb_code, x.sp_naam, x.sp_nummer)
/
CREATE OR REPLACE VIEW curs_v_rap_hv_xdoorbelasting (fclt_f_gebouw,
fclt_f_afdeling_naam,
fclt_f_afdeling_nr,
reken_opp
)
AS
(SELECT v.geb_code, COALESCE (v.sp_naam, '[Leegstand]'),
COALESCE (v.sp_nummer, '[Leegstand]'),
REPLACE (TO_CHAR (SUM (DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap
* v.m2_wpnorm,
v.teken_opp
)
),
'999999990D99'
),
'.',
','
) reken_opp
FROM curs_v_hv_xactual v
GROUP BY v.geb_code, v.sp_naam, v.sp_nummer)
/
/* Formatted on 2009/01/08 09:15 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_rap_hv_doorbelfrozen (fclt_f_datum,
fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_afdeling_naam,
fclt_f_afdeling_nr,
aantal_m2,
kosten
)
AS
(SELECT TO_CHAR (x.freeze_datum, 'YYYY-MM-DD') datum, x.dis_oms,
x.loc_code, x.geb_code, COALESCE (x.sp_naam, '[Leegstand]'),
COALESCE (x.sp_nummer, '[Leegstand]'),
SUM (DECODE (UPPER (x.ruimtesoort),
'OPEN WERKPLEK', x.wp * x.m2_wpnorm,
x.teken_opp
)
) reken_opp,
SUM (DECODE (UPPER (x.ruimtesoort),
'OPEN WERKPLEK', x.wp * x.m2_wpnorm * x.m2_tarief,
x.teken_opp * x.m2_tarief
)
) kosten
FROM (SELECT v.freeze_datum, v.dis_oms, v.loc_code, v.geb_code,
v.sp_nummer, v.sp_naam, v.ruimtesoort, v.m2_tarief,
v.m2_wpnorm,
SUM (v.wp_cap * COALESCE (v.bezetting, 100) / 100) wp,
SUM (v.teken_opp * COALESCE (v.bezetting, 100) / 100
) teken_opp
FROM curs_hv_freeze v
GROUP BY v.freeze_datum,
v.dis_oms,
v.loc_code,
v.geb_code,
v.sp_nummer,
v.sp_naam,
v.ruimtesoort,
v.m2_tarief,
v.m2_wpnorm) x
GROUP BY x.freeze_datum,
x.dis_oms,
x.loc_code,
x.geb_code,
x.sp_naam,
x.sp_nummer)
/
/* Formatted on 14-1-2009 17:12:04 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW curs_v_rap_hv_ruimte_details
(
fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_verdieping,
ruimte_nr,
aantal_wp,
reken_opp,
fclt_f_afdeling_naam,
fclt_f_afdeling_nr,
fclt_f_ruimtesoort,
m2_tarief,
ruimteprijs
)
AS
SELECT v.dis_oms,
v.loc_code,
v.geb_code,
v.ver_code,
v.ruimte_nr,
TO_CHAR (v.wp_cap),
(DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap * v.m2_wpnorm,
v.teken_opp
)
* COALESCE (v.bezetting, 100)
/ 100)
reken_opp,
COALESCE (v.sp_naam, '[Leegstand]'),
COALESCE (v.sp_nummer, '[Leegstand]'),
v.ruimtesoort,
REPLACE (TO_CHAR (v.m2_tarief), '.', ','),
(DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap * v.m2_wpnorm * v.m2_tarief,
v.teken_opp * v.m2_tarief
)
* COALESCE (v.bezetting, 100)
/ 100)
ruimteprijs
FROM curs_v_hv_actual v
/
/* Formatted on 2009/01/08 09:18 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_rap_hv_ruimteoverzicht (fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_verdieping,
ruimte_nr,
fclt_f_ruimtesoort,
aantal_wp,
reken_opp
)
AS
SELECT DISTINCT v.dis_oms, v.loc_code, v.geb_code, v.ver_code, v.ruimte_nr,
v.ruimtesoort, TO_CHAR (v.wp_cap),
DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap * v.m2_wpnorm,
v.teken_opp
) reken_opp
FROM curs_v_hv_actual v
/
/* Formatted on 2009/01/08 09:18 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_rap_hv_sp_totalen (fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_verdieping,
fclt_f_afdeling_naam,
fclt_f_afdeling_nr,
fclt_f_ruimtesoort,
aantal_ruimten,
aantal_wp,
reken_opp,
m2_tarief,
prijs
)
AS
(SELECT x.dis_oms, x.loc_code, x.geb_code, x.ver_code,
COALESCE (x.sp_naam, '[Leegstand]'),
COALESCE (x.sp_nummer, '[Leegstand]'), x.ruimtesoort,
x.ruimten,
REPLACE (TO_CHAR (x.wp, '999999990D99'), '.', ',') wp,
DECODE (UPPER (x.ruimtesoort),
'OPEN WERKPLEK', x.wp * x.m2_wpnorm,
x.teken_opp
) reken_opp,
REPLACE (TO_CHAR (x.m2_tarief), '.', ','),
DECODE (UPPER (x.ruimtesoort),
'OPEN WERKPLEK', x.wp * x.m2_wpnorm * x.m2_tarief,
x.teken_opp * x.m2_tarief
) prijs
FROM (SELECT v.dis_oms, v.loc_code, v.geb_code, v.ver_code,
v.sp_nummer, v.sp_naam, v.ruimtesoort, v.m2_tarief,
v.m2_wpnorm,
SUM (COALESCE (v.bezetting, 100) / 100) ruimten,
SUM (v.wp_cap * COALESCE (v.bezetting, 100) / 100) wp,
SUM (v.teken_opp * COALESCE (v.bezetting, 100) / 100
) teken_opp
FROM curs_v_hv_actual v
GROUP BY v.dis_oms,
v.loc_code,
v.geb_code,
v.ver_code,
v.sp_nummer,
v.sp_naam,
v.ruimtesoort,
v.m2_tarief,
v.m2_wpnorm) x)
/
/* Formatted on 9-1-2009 13:42:38 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW curs_v_rap_hv_leegstand
(
hide_f_sortering,
fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
totaal_opp,
leegst_opp,
leegst_ratio
)
AS
(SELECT '-',
tot.dis_oms,
tot.loc_code,
tot.geb_code,
REPLACE (TO_CHAR (COALESCE (tot.reken_opp, 0), '999999990D99'),
'.',
','
)
tot_opp,
REPLACE (TO_CHAR (COALESCE (leeg.reken_opp, 0), '999999990D99'),
'.',
','
)
lg_opp,
DECODE (
leeg.reken_opp,
NULL,
'0,00',
0,
'0,00',
REPLACE (
TO_CHAR (leeg.reken_opp / tot.reken_opp * 100,
'999999990D99'
),
'.',
','
)
)
|| '%'
lg_ratio
FROM ( SELECT v.geb_code,
v.loc_code,
v.dis_oms,
SUM(DECODE (
UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
))
reken_opp
FROM curs_v_hv_actual v
GROUP BY v.geb_code, v.loc_code, v.dis_oms) tot
LEFT JOIN
( SELECT v.geb_code,
SUM(DECODE (
UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
))
reken_opp
FROM curs_v_hv_actual v
WHERE v.sp_nummer IS NULL
GROUP BY v.geb_code) leeg
ON tot.geb_code = leeg.geb_code)
UNION ALL
(SELECT 'z',
'LANDELIJK',
'-',
'-',
REPLACE (
TO_CHAR (SUM (COALESCE (tot.reken_opp, 0)), '999999990D99'),
'.',
','
)
tot_opp,
REPLACE (
TO_CHAR (SUM (COALESCE (leeg.reken_opp, 0)), '999999990D99'),
'.',
','
)
lg_opp,
DECODE (
SUM (COALESCE (leeg.reken_opp, 0)),
NULL,
'0,00',
0,
'0,00',
REPLACE (
TO_CHAR (
SUM (COALESCE (leeg.reken_opp, 0))
/ SUM (COALESCE (tot.reken_opp, 0))
* 100,
'999999990D99'
),
'.',
','
)
)
|| '%'
lg_ratio
FROM ( SELECT v.geb_code,
v.loc_code,
v.dis_oms,
SUM(DECODE (
UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
))
reken_opp
FROM curs_v_hv_actual v
GROUP BY v.geb_code, v.loc_code, v.dis_oms) tot
LEFT JOIN
( SELECT v.geb_code,
SUM(DECODE (
UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
))
reken_opp
FROM curs_v_hv_actual v
WHERE v.sp_nummer IS NULL
GROUP BY v.geb_code) leeg
ON tot.geb_code = leeg.geb_code)
/
/* Formatted on 2009/01/08 13:55 (Formatter Plus v4.8.7) */
/* MAG WEG OF NIET? - NIET AANGEBODEN! */
CREATE OR REPLACE VIEW curs_v_rap_hv_lg_frozen (hide_f_sortering,
fclt_f_datum,
fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
totaal_opp,
leegst_opp,
leegst_ratio
)
AS
(SELECT TO_CHAR (tot.freeze_datum, 'YYYY-MM-DD') datum, '-', tot.dis_oms,
tot.loc_code, tot.geb_code,
REPLACE (TO_CHAR (tot.reken_opp, '999999990D99'), '.',
',') tot_opp,
REPLACE (TO_CHAR (leeg.reken_opp, '999999990D99'), '.',
',') lg_opp,
REPLACE (TO_CHAR (leeg.reken_opp / tot.reken_opp * 100,
'999999990D99'
),
'.',
','
)
|| '%' lg_ratio
FROM (SELECT v.geb_code, v.loc_code, v.dis_oms, v.freeze_datum,
SUM (DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
)
) reken_opp
FROM curs_hv_freeze v
GROUP BY v.geb_code, v.loc_code, v.dis_oms, v.freeze_datum) tot
LEFT JOIN
(SELECT v.geb_code, v.freeze_datum,
SUM (DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
)
) reken_opp
FROM curs_hv_freeze v
WHERE v.sp_nummer IS NULL
GROUP BY v.geb_code, v.freeze_datum) leeg
ON tot.geb_code = leeg.geb_code
AND tot.freeze_datum = leeg.freeze_datum
)
UNION ALL
(SELECT TO_CHAR (tot.freeze_datum, 'YYYY-MM-DD') datum, 'z', 'LANDELIJK',
'-', '-',
REPLACE (TO_CHAR (SUM (tot.reken_opp), '999999990D99'),
'.',
','
) tot_opp,
REPLACE (TO_CHAR (SUM (leeg.reken_opp), '999999990D99'),
'.',
','
) lg_opp,
REPLACE (TO_CHAR ( SUM (leeg.reken_opp)
/ SUM (tot.reken_opp)
* 100,
'999999990D99'
),
'.',
','
)
|| '%' lg_ratio
FROM (SELECT v.geb_code, v.loc_code, v.dis_oms, v.freeze_datum,
SUM (DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
)
) reken_opp
FROM curs_hv_freeze v
GROUP BY v.geb_code, v.loc_code, v.dis_oms, v.freeze_datum) tot
LEFT JOIN
(SELECT v.geb_code, v.freeze_datum,
SUM (DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK', v.wp_cap
* v.m2_wpnorm
* COALESCE (v.bezetting, 100)
/ 100,
v.teken_opp
* COALESCE (v.bezetting, 100)
/ 100
)
) reken_opp
FROM curs_hv_freeze v
WHERE v.sp_nummer IS NULL
GROUP BY v.geb_code, v.freeze_datum) leeg
ON tot.geb_code = leeg.geb_code
AND tot.freeze_datum = leeg.freeze_datum
GROUP BY tot.freeze_datum)
/
/* Formatted on 19-1-2009 13:15:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW curs_v_rap_hv_doorbel_delta
(
fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_afdeling_nr,
fclt_f_afdeling_naam,
m2_nu,
m2_delta
)
AS
(SELECT DISTINCT
z.dis, z.loc, z.geb, z.nr, z.naam, z.m2_actueel, z.m2_verschil
FROM (SELECT COALESCE (x.dis, y.dis) dis,
COALESCE (x.loc, y.loc) loc,
COALESCE (x.geb, y.geb) geb,
COALESCE (x.nr, y.nr) nr,
DECODE (x.naam,
COALESCE (y.naam, x.naam), x.naam,
'***GEWIJZIGD: ' || COALESCE (x.naam, '')
)
naam,
x.m2 m2_actueel,
y.m2 m2_laatste,
(COALESCE (x.m2, 0) - COALESCE (y.m2, 0)) m2_verschil
FROM (SELECT fclt_f_district dis,
fclt_f_locatie loc,
fclt_f_gebouw geb,
fclt_f_afdeling_nr nr,
fclt_f_afdeling_naam naam,
aantal_m2 m2,
kosten kosten
FROM curs_v_rap_hv_doorbelasting) x
LEFT JOIN
(SELECT fclt_f_district dis,
fclt_f_locatie loc,
fclt_f_gebouw geb,
fclt_f_afdeling_nr nr,
fclt_f_afdeling_naam naam,
aantal_m2 m2,
kosten kosten
FROM curs_v_rap_hv_doorbelfrozen
WHERE fclt_f_datum =
( SELECT TO_CHAR (MAX (freeze_datum),
'yyyy-mm-dd'
)
FROM curs_hv_freeze)) y
ON x.dis = y.dis
AND x.loc = y.loc
AND x.geb = y.geb
AND x.nr = y.nr
UNION
SELECT COALESCE (x.dis, y.dis) dis,
COALESCE (x.loc, y.loc) loc,
COALESCE (x.geb, y.geb) geb,
COALESCE (x.nr, y.nr) nr,
DECODE (y.naam,
COALESCE (x.naam, y.naam), y.naam,
'***GEWIJZIGD: ' || COALESCE (x.naam, '')
)
naam,
x.m2 m2_actueel,
y.m2 m2_laatste,
(COALESCE (x.m2, 0) - COALESCE (y.m2, 0)) m2_verschil
FROM (SELECT fclt_f_district dis,
fclt_f_locatie loc,
fclt_f_gebouw geb,
fclt_f_afdeling_nr nr,
fclt_f_afdeling_naam naam,
aantal_m2 m2,
kosten kosten
FROM curs_v_rap_hv_doorbelasting) x
RIGHT JOIN
(SELECT fclt_f_district dis,
fclt_f_locatie loc,
fclt_f_gebouw geb,
fclt_f_afdeling_nr nr,
fclt_f_afdeling_naam naam,
aantal_m2 m2,
kosten kosten
FROM curs_v_rap_hv_doorbelfrozen
WHERE fclt_f_datum =
( SELECT TO_CHAR (MAX (freeze_datum),
'yyyy-mm-dd'
)
FROM curs_hv_freeze)) y
ON x.dis = y.dis
AND x.loc = y.loc
AND x.geb = y.geb
AND x.nr = y.nr) z);
/* Formatted on 19-1-2009 13:15:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW curs_v_rap_hv_details_delta
(
fclt_f_district,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_verdieping,
ruimte_nr,
fclt_f_afdeling_nr,
fclt_f_afdeling_naam,
fclt_f_ruimtesoort,
wp_nu,
wp_delta,
m2_nu,
m2_delta
)
AS
(SELECT DISTINCT
z.dis,
z.loc,
z.geb,
z.ver,
z.rui,
z.nr,
z.naam,
z.soort,
z.wp_actueel,
z.wp_verschil,
z.m2_actueel,
z.m2_verschil
FROM (SELECT COALESCE (x.dis_oms, y.dis_oms) dis,
COALESCE (x.loc_code, y.loc_code) loc,
COALESCE (x.geb_code, y.geb_code) geb,
COALESCE (x.ver_code, y.ver_code) ver,
COALESCE (x.ruimte_nr, y.ruimte_nr) rui,
COALESCE (x.sp_nr, y.sp_nr) nr,
DECODE (x.sp_naam,
COALESCE (y.sp_naam, x.sp_naam), x.sp_naam,
'***GEWIJZIGD: ' || COALESCE (x.sp_naam, '')
)
naam,
DECODE (
x.ruimtesoort,
COALESCE (y.ruimtesoort, x.ruimtesoort),
x.ruimtesoort,
'***GEWIJZIGD: ' || COALESCE (x.ruimtesoort, '')
)
soort,
x.wp wp_actueel,
y.wp wp_laatste,
(COALESCE (x.wp, 0) - COALESCE (y.wp, 0)) wp_verschil,
x.m2 m2_actueel,
y.m2 m2_laatste,
(COALESCE (x.m2, 0) - COALESCE (y.m2, 0)) m2_verschil
FROM (SELECT v.dis_oms,
v.loc_code,
v.geb_code,
v.ver_code,
v.ruimte_nr,
COALESCE (v.sp_nummer, '[Leegstand]')
sp_nr,
v.sp_naam,
v.ruimtesoort,
v.bezetting bez,
v.wp_cap wp,
(DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap * v.m2_wpnorm,
v.teken_opp
)
* COALESCE (v.bezetting, 100)
/ 100)
m2
FROM curs_v_hv_actual v) x
LEFT JOIN
(SELECT v.dis_oms,
v.loc_code,
v.geb_code,
v.ver_code,
v.ruimte_nr,
COALESCE (v.sp_nummer, '[Leegstand]')
sp_nr,
v.sp_naam,
v.ruimtesoort,
v.bezetting bez,
v.wp_cap wp,
(DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap * v.m2_wpnorm,
v.teken_opp
)
* COALESCE (v.bezetting, 100)
/ 100)
m2
FROM curs_hv_freeze v
WHERE TRUNC (v.freeze_datum) =
( SELECT TRUNC (MAX (freeze_datum))
FROM curs_hv_freeze)) y
ON x.dis_oms = y.dis_oms
AND x.loc_code = y.loc_code
AND x.geb_code = y.geb_code
AND x.ver_code = y.ver_code
AND x.ruimte_nr = y.ruimte_nr
AND x.sp_nr = y.sp_nr
UNION
SELECT COALESCE (x.dis_oms, y.dis_oms) dis,
COALESCE (x.loc_code, y.loc_code) loc,
COALESCE (x.geb_code, y.geb_code) geb,
COALESCE (x.ver_code, y.ver_code) ver,
COALESCE (x.ruimte_nr, y.ruimte_nr) rui,
COALESCE (x.sp_nr, y.sp_nr) nr,
DECODE (y.sp_naam,
COALESCE (x.sp_naam, y.sp_naam), y.sp_naam,
'***GEWIJZIGD: ' || COALESCE (x.sp_naam, '')
)
naam,
DECODE (
y.ruimtesoort,
COALESCE (x.ruimtesoort, y.ruimtesoort),
y.ruimtesoort,
'***GEWIJZIGD: ' || COALESCE (x.ruimtesoort, '')
)
soort,
x.wp wp_actueel,
y.wp wp_laatste,
(COALESCE (x.wp, 0) - COALESCE (y.wp, 0)) wp_verschil,
x.m2 m2_actueel,
y.m2 m2_laatste,
(COALESCE (x.m2, 0) - COALESCE (y.m2, 0)) m2_verschil
FROM (SELECT v.dis_oms,
v.loc_code,
v.geb_code,
v.ver_code,
v.ruimte_nr,
COALESCE (v.sp_nummer, '[Leegstand]')
sp_nr,
v.sp_naam,
v.ruimtesoort,
v.bezetting bez,
v.wp_cap wp,
(DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap * v.m2_wpnorm,
v.teken_opp
)
* COALESCE (v.bezetting, 100)
/ 100)
m2
FROM curs_v_hv_actual v) x
RIGHT JOIN
(SELECT v.dis_oms,
v.loc_code,
v.geb_code,
v.ver_code,
v.ruimte_nr,
COALESCE (v.sp_nummer, '[Leegstand]')
sp_nr,
v.sp_naam,
v.ruimtesoort,
v.bezetting bez,
v.wp_cap wp,
(DECODE (UPPER (v.ruimtesoort),
'OPEN WERKPLEK',
v.wp_cap * v.m2_wpnorm,
v.teken_opp
)
* COALESCE (v.bezetting, 100)
/ 100)
m2
FROM curs_hv_freeze v
WHERE TRUNC (v.freeze_datum) =
( SELECT TRUNC (MAX (freeze_datum))
FROM curs_hv_freeze)) y
ON x.dis_oms = y.dis_oms
AND x.loc_code = y.loc_code
AND x.geb_code = y.geb_code
AND x.ver_code = y.ver_code
AND x.ruimte_nr = y.ruimte_nr
AND x.sp_nr = y.sp_nr) z);
/* Formatted on 2008/11/27 12:45 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_label_ruimte_sp (
alg_ruimte_key,
waarde
)
AS
SELECT DISTINCT ra.alg_ruimte_key, a.prs_afdeling_naam1
FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
UNION
SELECT DISTINCT r.alg_ruimte_key, '[Leegstand]' -- ruimten zonder sp
FROM alg_v_aanwezigruimte r
WHERE NOT EXISTS ( -- waar geen sp binnen bestaat
SELECT ra.alg_ruimte_key
FROM prs_v_aanwezigruimteafdeling ra
WHERE ra.alg_ruimte_key = r.alg_ruimte_key)
/
CREATE OR REPLACE VIEW curs_v_prj_label_ruimte_sp (
prj_ruimte_key,
waarde
)
AS
SELECT DISTINCT ra.prj_ruimte_key, a.prs_afdeling_naam1
FROM prj_ruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
UNION
SELECT DISTINCT r.prj_ruimte_key, '[Leegstand]' -- ruimten zonder sp
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL
AND NOT EXISTS
( -- waar geen sp binnen bestaat
SELECT ra.prj_ruimte_key
FROM prj_ruimteafdeling ra
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prj_ruimte_key = r.prj_ruimte_key)
/
/* Formatted on 2008/09/19 14:14 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_label_ruimte_sp_nr (alg_ruimte_key, waarde)
AS
SELECT DISTINCT ra.alg_ruimte_key, a.prs_afdeling_naam
FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
UNION
SELECT DISTINCT r.alg_ruimte_key, '[Leegstand]' -- ruimten zonder sp
FROM alg_v_aanwezigruimte r
WHERE NOT EXISTS ( -- waar geen sp binnen bestaat
SELECT ra.alg_ruimte_key
FROM prs_v_aanwezigruimteafdeling ra
WHERE ra.alg_ruimte_key = r.alg_ruimte_key)
/
CREATE OR REPLACE VIEW curs_v_prj_label_ruimte_sp_nr (prj_ruimte_key, waarde)
AS
SELECT DISTINCT ra.prj_ruimte_key, a.prs_afdeling_naam
FROM prj_ruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
UNION
SELECT DISTINCT r.prj_ruimte_key, '[Leegstand]' -- ruimten zonder sp
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL
AND NOT EXISTS
( -- waar geen sp binnen bestaat
SELECT ra.prj_ruimte_key
FROM prj_ruimteafdeling ra
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prj_ruimte_key = r.prj_ruimte_key)
/
/* Formatted on 2008/09/19 14:14 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_label_ruimte_sp_oms (alg_ruimte_key, waarde)
AS
SELECT DISTINCT ra.alg_ruimte_key, a.prs_afdeling_omschrijving
FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
UNION
SELECT DISTINCT r.alg_ruimte_key, '[Leegstand]' -- ruimten zonder sp
FROM alg_v_aanwezigruimte r
WHERE NOT EXISTS ( -- waar geen sp binnen bestaat
SELECT ra.alg_ruimte_key
FROM prs_v_aanwezigruimteafdeling ra
WHERE ra.alg_ruimte_key = r.alg_ruimte_key)
/
CREATE OR REPLACE VIEW curs_v_prj_label_ruimte_sp_oms (prj_ruimte_key, waarde)
AS
SELECT DISTINCT ra.prj_ruimte_key, a.prs_afdeling_omschrijving
FROM prj_ruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
UNION
SELECT DISTINCT r.prj_ruimte_key, '[Leegstand]' -- ruimten zonder sp
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL
AND NOT EXISTS
( -- waar geen sp binnen bestaat
SELECT ra.prj_ruimte_key
FROM prj_ruimteafdeling ra
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prj_ruimte_key = r.prj_ruimte_key)
/
/* Formatted on 2008/09/19 14:14 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_label_wp_cnt (alg_ruimte_key, waarde)
AS
SELECT a.alg_ruimte_key, COALESCE (b.wp, '0') || ' werkplekken'
FROM (SELECT r.alg_ruimte_key
FROM alg_v_aanwezigruimte r) a
LEFT JOIN
(SELECT ok.alg_onrgoed_key, ok.alg_onrgoedkenmerk_waarde wp
FROM alg_onrgoedkenmerk ok
WHERE ok.alg_onrgoed_niveau = 'R'
AND ok.alg_kenmerk_key = 1240 -- werkplekken
AND ok.alg_onrgoedkenmerk_verwijder IS NULL) b
ON a.alg_ruimte_key = b.alg_onrgoed_key
/
CREATE OR REPLACE VIEW curs_v_prj_label_wp_cnt (prj_ruimte_key, waarde)
AS
SELECT a.prj_ruimte_key, COALESCE (b.wp, '0') || ' werkplekken'
FROM (SELECT r.prj_ruimte_key
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL) a
LEFT JOIN
(SELECT r.prj_ruimte_key, ok.alg_onrgoedkenmerk_waarde wp
FROM prj_ruimte r, alg_onrgoedkenmerk ok
WHERE r.alg_ruimte_key = ok.alg_onrgoed_key
AND ok.alg_onrgoed_niveau = 'R'
AND ok.alg_kenmerk_key = 1240 -- werkplekken
AND ok.alg_onrgoedkenmerk_verwijder IS NULL) b
ON a.prj_ruimte_key = b.prj_ruimte_key
/
/* Formatted on 2008/11/28 13:40 (Formatter Plus v4.8.7) */
CREATE OR REPLACE FORCE VIEW curs_v_thema_ruimte_sp (
alg_ruimte_key,
waarde,
waarde_key
)
AS
SELECT x.alg_ruimte_key,
DECODE (y.aantal,
NULL, '[Leegstand]',
1, SUBSTR (y.sp, 1, 60),
'Meer dan 1 service afdeling!'),
DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
FROM (SELECT r.alg_ruimte_key
FROM alg_v_aanwezigruimte r) x
LEFT JOIN
(SELECT ra.alg_ruimte_key,
MIN (a.prs_afdeling_naam1) sp,
MIN (a.prs_afdeling_key) sp_key,
COUNT (ra.prs_afdeling_key) aantal
FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) y
ON x.alg_ruimte_key = y.alg_ruimte_key
UNION ALL
SELECT NULL, a.prs_afdeling_naam1, a.prs_afdeling_key
FROM prs_v_aanwezigafdeling a
WHERE NOT EXISTS
(SELECT ra.prs_afdeling_key
FROM prs_v_aanwezigruimteafdeling ra
WHERE ra.prs_afdeling_key = a.prs_afdeling_key)
/
CREATE OR REPLACE TRIGGER curs_t_thema_ruimte_sp_i_iu
INSTEAD OF INSERT OR UPDATE
ON curs_v_thema_ruimte_sp
BEGIN
IF UPDATING -- oude hard weggooien; dus DELETE (lekker opruimen)!
THEN
DELETE FROM prs_ruimteafdeling
WHERE alg_ruimte_key = :new.alg_ruimte_key
AND prs_afdeling_key <> :new.waarde_key;
END IF;
BEGIN
IF :new.waarde_key <> -1
THEN
INSERT INTO prs_ruimteafdeling
(
alg_ruimte_key, prs_afdeling_key
)
VALUES (:new.alg_ruimte_key, :new.waarde_key);
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX -- was al aanwezig
THEN
NULL;
END;
END;
/
CREATE OR REPLACE VIEW curs_v_prj_thema_ruimte_sp (
prj_ruimte_key,
waarde,
waarde_key
)
AS
SELECT x.prj_ruimte_key,
DECODE (y.aantal,
NULL, '[Leegstand]',
1, SUBSTR (y.sp, 1, 60),
'Meer dan 1 service afdeling!'),
DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
FROM (SELECT r.prj_ruimte_key
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL) x
LEFT JOIN
(SELECT ra.prj_ruimte_key,
MIN (a.prs_afdeling_naam1) sp,
MIN (a.prs_afdeling_key) sp_key,
COUNT (ra.prs_afdeling_key) aantal
FROM prj_ruimteafdeling ra, prs_v_aanwezigafdeling a
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.prj_ruimte_key) y
ON x.prj_ruimte_key = y.prj_ruimte_key
UNION ALL
SELECT NULL, a.prs_afdeling_naam1, a.prs_afdeling_key
FROM prs_v_aanwezigafdeling a
WHERE NOT EXISTS
(SELECT ra.prs_afdeling_key
FROM prj_ruimteafdeling ra
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = a.prs_afdeling_key)
/
CREATE OR REPLACE TRIGGER curs_t_prj_t_ruimte_sp_i_iu
INSTEAD OF INSERT OR UPDATE
ON curs_v_prj_thema_ruimte_sp
BEGIN
IF UPDATING -- oude logisch weggooien, dus g<><67>n DELETE!
THEN
UPDATE prj_ruimteafdeling
SET prj_ruimteafdeling_verwijder = SYSDATE
WHERE prj_ruimte_key = :new.prj_ruimte_key
AND prs_afdeling_key <> :new.waarde_key;
END IF;
BEGIN
IF :new.waarde_key <> -1
THEN
UPDATE prj_ruimteafdeling
SET prj_ruimteafdeling_verwijder = NULL
WHERE prj_ruimte_key = :new.prj_ruimte_key
AND prs_afdeling_key = :new.waarde_key;
INSERT INTO prj_ruimteafdeling
(
prj_ruimte_key, prs_afdeling_key
)
VALUES (:new.prj_ruimte_key, :new.waarde_key);
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX -- was al aanwezig
THEN
NULL;
END;
END;
/
-- Thema om airco's op de plattegrond te tonen bij het invoeren van een melding
CREATE OR REPLACE VIEW demo_v_thema_equipm
(
ins_deel_key,
alg_ruimte_key,
waarde
)
AS
SELECT ins_deel_key,
alg_ruimte_key,
DECODE ((SELECT COUNT (*)
FROM mld_melding m, mld_melding_object mo
WHERE m.mld_melding_key = mo.mld_melding_key
AND mo.ins_deel_key = d.ins_deel_key
AND mld_melding_status IN (0, -- Bij frontoffice
2, -- Nieuw
3, -- Te accepteren
4, -- In behandeling
7, -- Uitgegeven
99)), -- Niet opgelost
0, 'Normaal',
'Defect') ins_status
FROM ins_v_deel_gegevens d
WHERE ins_srtdeel_upper = 'AIRCO';
CREATE OR REPLACE VIEW curs_v_thema_ruimteafd
(
ALG_RUIMTE_KEY,
WAARDE,
WAARDE_KEY
)
AS
SELECT x.alg_ruimte_key,
DECODE (y.aantal,
NULL, '[Leegstand]',
1, SUBSTR (y.sp, 1, 60),
'[Meerdere afdelingen]'),
DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
FROM (SELECT r.alg_ruimte_key
FROM alg_v_aanwezigruimte r) x
LEFT JOIN
( SELECT ra.alg_ruimte_key,
MIN (a.prs_afdeling_naam1) sp,
MIN (a.prs_afdeling_key) sp_key,
COUNT (ra.prs_afdeling_key) aantal
FROM prs_v_aanwezigruimteafdeling ra,
prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) y
ON x.alg_ruimte_key = y.alg_ruimte_key
UNION ALL
SELECT NULL, SUBSTR (a.prs_afdeling_naam1, 1, 60), a.prs_afdeling_key
FROM prs_v_aanwezigafdeling a
WHERE NOT EXISTS (SELECT ra.prs_afdeling_key
FROM prs_v_aanwezigruimteafdeling ra
WHERE ra.prs_afdeling_key = a.prs_afdeling_key);
CREATE OR REPLACE TRIGGER curs_t_thema_ruimteafd_i_iu
INSTEAD OF INSERT OR UPDATE
ON curs_v_thema_ruimteafd
BEGIN
IF UPDATING -- oude hard weggooien; dus DELETE (lekker opruimen)!
THEN
DELETE FROM prs_ruimteafdeling
WHERE alg_ruimte_key = :new.alg_ruimte_key
AND prs_afdeling_key <> :new.waarde_key;
END IF;
BEGIN
IF :new.waarde_key <> -1
THEN
INSERT INTO prs_ruimteafdeling
(
alg_ruimte_key, prs_afdeling_key
)
VALUES (:new.alg_ruimte_key, :new.waarde_key);
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX -- was al aanwezig
THEN
NULL;
END;
END;
/
/* Formatted on 2008/09/19 15:30 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW curs_v_thema_wp_cnt (alg_ruimte_key, waarde)
AS
SELECT a.alg_ruimte_key,
DECODE (b.wp,
NULL, '0',
'0', '0',
'1', '1',
'2', '2',
'3', '3',
'4', '4',
'5', '5',
'>5'
)
FROM (SELECT r.alg_ruimte_key
FROM alg_v_aanwezigruimte r) a
LEFT JOIN
(SELECT ok.alg_onrgoed_key, ok.alg_onrgoedkenmerk_waarde wp
FROM alg_onrgoedkenmerk ok
WHERE ok.alg_onrgoed_niveau = 'R'
AND ok.alg_kenmerk_key = 1240 -- werkplekken
AND ok.alg_onrgoedkenmerk_verwijder IS NULL) b
ON a.alg_ruimte_key = b.alg_onrgoed_key
/
CREATE OR REPLACE VIEW curs_v_prj_thema_wp_cnt (prj_ruimte_key, waarde)
AS
SELECT a.prj_ruimte_key,
DECODE (b.wp,
NULL, '0',
'0', '0',
'1', '1',
'2', '2',
'3', '3',
'4', '4',
'5', '5',
'>5'
)
FROM (SELECT r.prj_ruimte_key
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL) a
LEFT JOIN
(SELECT r.prj_ruimte_key, ok.alg_onrgoedkenmerk_waarde wp
FROM prj_ruimte r, alg_onrgoedkenmerk ok
WHERE r.alg_ruimte_key = ok.alg_onrgoed_key
AND ok.alg_onrgoed_niveau = 'R'
AND ok.alg_kenmerk_key = 1240 -- werkplekken
AND ok.alg_onrgoedkenmerk_verwijder IS NULL) b
ON a.prj_ruimte_key = b.prj_ruimte_key
/
-- Real-time monitors
CREATE OR REPLACE VIEW demo_v_graph_meldingpm_fm
(
fclt_xas_,
fclt_yas_,
volgorde
)
AS
SELECT DECODE( lcl.getuserlanguage(),
'NL', DECODE (SUBSTR (TO_CHAR (mld_melding_datum, 'yyyymm'), 5),
'01', 'Januari',
'02', 'Februari',
'03', 'Maart',
'04', 'April',
'05', 'Mei',
'06', 'Juni',
'07', 'Juli',
'08', 'Augustus',
'09', 'September',
'10', 'Oktober',
'11', 'November',
'December'),
DECODE (SUBSTR (TO_CHAR (mld_melding_datum, 'yyyymm'), 5),
'01', 'January',
'02', 'February',
'03', 'March',
'04', 'April',
'05', 'May',
'06', 'June',
'07', 'July',
'08', 'August',
'09', 'September',
'10', 'October',
'11', 'November',
'December') ),
COUNT (d.ins_discipline_omschrijving),
TO_CHAR (mld_melding_datum, 'yyyymm')
FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d
WHERE mld_melding_datum BETWEEN ADD_MONTHS (
TO_DATE (
TO_CHAR (SYSDATE, 'yyyymm') || '01',
'yyyymmdd'),
-11)
AND SYSDATE
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key IN (1, 81, 101, 241)
GROUP BY TO_CHAR (mld_melding_datum, 'yyyymm');
CREATE OR REPLACE VIEW demo_v_graph_meldingpm_ict
(
fclt_xas_,
fclt_yas_,
volgorde
)
AS
SELECT DECODE( lcl.getuserlanguage(),
'NL', DECODE (SUBSTR (TO_CHAR (mld_melding_datum, 'yyyymm'), 5),
'01', 'Januari',
'02', 'Februari',
'03', 'Maart',
'04', 'April',
'05', 'Mei',
'06', 'Juni',
'07', 'Juli',
'08', 'Augustus',
'09', 'September',
'10', 'Oktober',
'11', 'November',
'December'),
DECODE (SUBSTR (TO_CHAR (mld_melding_datum, 'yyyymm'), 5),
'01', 'January',
'02', 'February',
'03', 'March',
'04', 'April',
'05', 'May',
'06', 'June',
'07', 'July',
'08', 'August',
'09', 'September',
'10', 'October',
'11', 'November',
'December') ),
COUNT (d.ins_discipline_omschrijving),
TO_CHAR (mld_melding_datum, 'yyyymm')
FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d
WHERE mld_melding_datum BETWEEN ADD_MONTHS (
TO_DATE (
TO_CHAR (SYSDATE, 'yyyymm') || '01',
'yyyymmdd'),
-11)
AND SYSDATE
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key IN (201, 202)
GROUP BY TO_CHAR (mld_melding_datum, 'yyyymm');
CREATE OR REPLACE VIEW demo_v_graph_openst_behand
(
fclt_xas_,
fclt_yas_,
fclt_yas2_
)
AS
SELECT 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_t_uitvoertijd.tijdsduur,
m.mld_melding_t_uitvoertijd.eenheid)
- 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 p.prs_perslid_key != 28421
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
AND md.ins_srtdiscipline_key IN (1, 81, 101, 241, 201, 202))
WHERE behandelaar IS NOT NULL
GROUP BY behandelaar;
CREATE OR REPLACE VIEW demo_v_graph_ppi_acc
(
fclt_xas_,
fclt_yas_
)
AS
SELECT SUM (acceptoptijd) aantal, COUNT (mld_key) totaal
FROM (SELECT DISTINCT
m.mld_melding_key mld_key,
CASE SIGN(fac.datumtijdplusuitvoertijd (
fac.gettrackingdate ('MLDNEW', m.mld_melding_key),
std.mld_stdmelding_t_accepttijd.tijdsduur,
std.mld_stdmelding_t_accepttijd.eenheid
)
- COALESCE (
fac.gettrackingdate ('MLDREJ', m.mld_melding_key),
COALESCE (
fac.gettrackingdate ('MLDACP', m.mld_melding_key),
SYSDATE)))
WHEN -1
THEN
0
ELSE
1
END
acceptoptijd
FROM mld_melding m, mld_discipline md, mld_stdmelding std
WHERE md.ins_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = m.mld_stdmelding_key
AND md.ins_srtdiscipline_key IN (1, 81, 101, 241, 201, 202)
AND mld_melding_status IN (2, 3) -- 2-ingevoerd, 3-ingezien
);
CREATE OR REPLACE VIEW demo_v_graph_ppi_uitv
(
fclt_xas_,
fclt_yas_
)
AS
SELECT SUM (uitvoeringoptijd) aantal, COUNT (mld_key) totaal
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_t_uitvoertijd.tijdsduur,
m.mld_melding_t_uitvoertijd.eenheid)
- 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
FROM mld_melding m, mld_discipline md, mld_stdmelding std
WHERE md.ins_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = m.mld_stdmelding_key
AND md.ins_srtdiscipline_key IN (1, 81, 101, 241, 201, 202)
AND mld_melding_status IN (2, 3, 4, 7, 0) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
);
CREATE OR REPLACE VIEW demo_v_graph_vakgroep_afg
(
fclt_xas_,
fclt_yas_,
fclt_url,
fclt_3d_discipline_key
)
AS
SELECT d.ins_discipline_omschrijving,
COUNT (d.ins_discipline_omschrijving),
'appl/mld/mld_search.asp?urole=fo'
|| '&'
|| 'autosearch=1'
|| '&'
|| 'disc_key_str=',
d.ins_discipline_key
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
fac_tracking t
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key IN (1, 81, 101, 241, 201, 202)
AND t.fac_tracking_refkey = mld_melding_key
AND t.fac_srtnotificatie_key = 22 -- MLDAFM
AND t.fac_tracking_datum > SYSDATE - 30
GROUP BY d.ins_discipline_key, d.ins_discipline_omschrijving;
CREATE OR REPLACE VIEW demo_v_graph_vakgroep_open
(
fclt_xas_,
fclt_yas_,
fclt_url,
fclt_3d_discipline_key
)
AS
SELECT lcl.x('ins_discipline_omschrijving', d.ins_discipline_key, d.ins_discipline_omschrijving),
COUNT (d.ins_discipline_omschrijving),
'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
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND mld_melding_status IN (2, 3, 4, 7, 0) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
AND d.ins_srtdiscipline_key IN (1, 81, 101, 241, 201, 202)
GROUP BY d.ins_discipline_key, d.ins_discipline_omschrijving
ORDER BY COUNT (d.ins_discipline_omschrijving) DESC;
CREATE OR REPLACE VIEW demo_v_thema_ruimte_afd
(
ALG_RUIMTE_KEY,
WAARDE,
WAARDE_KEY
)
AS
SELECT x.alg_ruimte_key,
DECODE (
y.aantal,
NULL,
DECODE (x.verhuur, 0, '[Niet verhuurbaar]', '[GEEN DIVISIE!]'),
1,
DECODE (y.afd,
0, '[Geen afdeling toegewezen]',
SUBSTR (y.sp, 1, 60)),
'[Meerdere afdelingen!]'),
DECODE (y.aantal,
NULL, DECODE (x.verhuur, 0, -1, NULL),
1, DECODE (y.afd, 0, -1, y.sp_key),
NULL)
FROM (SELECT r.alg_ruimte_key,
COALESCE (sr.prs_verhuurbaar, 0) verhuur,
COALESCE (sr.prs_bevat_werkplek, 0) werkplek
FROM alg_v_aanwezigruimte r, alg_srtruimte sr
WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key(+)) x
LEFT JOIN
( SELECT ra.alg_ruimte_key,
MIN (a.prs_afdeling_naam1) sp,
MIN (a.prs_afdeling_key) sp_key,
COUNT (ra.prs_afdeling_key) aantal,
MAX (COALESCE (a.prs_afdeling_parentkey, 0)) afd
FROM prs_v_aanwezigruimteafdeling ra,
prs_v_aanwezigafdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) y
ON x.alg_ruimte_key = y.alg_ruimte_key
UNION ALL
SELECT NULL, a.prs_afdeling_naam1, a.prs_afdeling_key
FROM prs_v_aanwezigafdeling a
WHERE NOT EXISTS (SELECT ra.prs_afdeling_key
FROM prs_v_aanwezigruimteafdeling ra
WHERE ra.prs_afdeling_key = a.prs_afdeling_key)
UNION ALL
SELECT DISTINCT
NULL, a.prs_afdeling_naam1 waarde, a.prs_afdeling_key waarde_key
FROM (SELECT DISTINCT ra.prs_afdeling_key
FROM prs_v_aanwezigruimteafdeling ra
MINUS
SELECT DISTINCT ra.prs_afdeling_key
FROM prs_v_aanwezigruimteafdeling ra, alg_v_aanwezigruimte r
WHERE ra.alg_ruimte_key IN (SELECT alg_ruimte_key
FROM ( SELECT alg_ruimte_key,
COUNT ( * ) aantal
FROM prs_v_aanwezigruimteafdeling
GROUP BY alg_ruimte_key)
WHERE aantal = 1)
AND ra.alg_ruimte_key = r.alg_ruimte_key) x,
prs_v_aanwezigafdeling a
WHERE x.prs_afdeling_key = a.prs_afdeling_key;
CREATE OR REPLACE VIEW demo_v_rap_voorraad
(
HIDE_F_EXTERN_DISKEY,
HIDE_F_SRTGROEP_OMSCHRIJVING,
FCLT_F_CATALOGUS,
ARTIKEL_NR,
ARTIKEL_OMSCHRIJVING,
ARTIKEL_PRIJS,
MAGAZIJN,
MIN_VOORRAAD,
MAX_VOORRAAD,
INKOOP_GELEVERD,
INTERN_BESTELD,
VOORRAAD,
INKOOP_BESTELD,
INKOOP_LEVERDATUM,
INKOOP_GEWENST
)
AS
SELECT extern.dkey,
COALESCE (intern.bes_srtgroep_omschrijving,
extern.bes_srtgroep_omschrijving),
COALESCE (intern.ins_discipline_omschrijving,
extern.ins_discipline_omschrijving),
extern.bes_srtdeel_nr,
COALESCE (intern.bes_srtdeel_omschrijving,
extern.bes_srtdeel_omschrijving),
COALESCE (intern.srtdeel_prijs, extern.srtdeel_prijs),
intern.magazijn,
extern.vmin,
extern.vmax,
extern.geleverd,
intern.besteld,
extern.geleverd - COALESCE (intern.besteld, 0) voorraad,
extern.besteld,
TO_CHAR(extern.leverdatum, 'dd-mm-yyyy'),
CASE
WHEN ( (COALESCE (extern.besteld, 0)
+ COALESCE (extern.geleverd, 0))
- COALESCE (intern.besteld, 0)) < extern.vmin
THEN
extern.vmax
- ( (COALESCE (extern.besteld, 0)
+ COALESCE (extern.geleverd, 0))
- COALESCE (intern.besteld, 0))
ELSE
NULL
END
extern_gewenst
FROM (SELECT bd.ins_discipline_key dkey, -- INKOOP-key
g.bes_srtgroep_omschrijving,
sd.bes_srtdeel_nr, -- ext. artikelnr
sd.bes_srtdeel_omschrijving,
bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
srtdeel_prijs,
bd.ins_discipline_omschrijving, -- ext. catalogusnaam
sd.bes_srtdeel_voorraadmin vmin, -- ext. voorraadmin
sd.bes_srtdeel_voorraadmax vmax, -- ext. voorraadmax
(SELECT SUM (coalesce(boi.bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal)-COALESCE(boi.bes_bestelopdr_item_aantalontv,0))
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_item_status IN (2, 3, 4, 5)
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
besteld,
(SELECT MIN (b.bes_bestelling_leverdatum)
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_item_status IN (2, 3, 4, 5)
AND COALESCE(bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal) <> COALESCE(bes_bestelopdr_item_aantalontv, 0)
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
leverdatum,
(SELECT SUM (boi.bes_bestelopdr_item_aantalontv)
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE -- boi.bes_bestelopdr_item_status in (6,7) AND
b.bes_bestelling_key = bi.bes_bestelling_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
geleverd
FROM bes_srtdeel sd,
bes_srtgroep g,
bes_discipline bd,
bes_disc_params dp
WHERE sd.bes_srtdeel_verwijder IS NULL
AND sd.bes_srtgroep_key = g.bes_srtgroep_key
AND g.ins_discipline_key = bd.ins_discipline_key
AND bd.ins_discipline_key = dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NULL
AND bd.ins_discipline_key IN
(SELECT bes_ins_discipline_key_inkoop
FROM bes_disc_params
WHERE bes_ins_discipline_key_inkoop IS NOT NULL))
extern -- Inkoop artikelen uit externe catalogus!
FULL JOIN
(SELECT dp.bes_ins_discipline_key_inkoop dkey, -- INKOOP-key
g.bes_srtgroep_omschrijving,
sd.bes_srtdeel_nr, -- int. artikelnr
sd.bes_srtdeel_omschrijving,
sd.bes_srtdeel_notitie magazijn,
bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
srtdeel_prijs,
bd.ins_discipline_omschrijving, -- int. catalogusnaam
(SELECT SUM (COALESCE(boi.bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal))
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
besteld
FROM bes_srtdeel sd,
bes_srtgroep g,
bes_discipline bd,
bes_disc_params dp
WHERE sd.bes_srtdeel_verwijder IS NULL
AND sd.bes_srtgroep_key = g.bes_srtgroep_key
AND g.ins_discipline_key = bd.ins_discipline_key
AND bd.ins_discipline_key = dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NOT NULL) intern -- Verkoop artikelen uit interne catalogus!
ON extern.dkey = intern.dkey
AND extern.bes_srtdeel_nr = intern.bes_srtdeel_nr;
CREATE OR REPLACE VIEW demo_v_rap_dienstrapport
AS
SELECT TO_CHAR(m.mld_melding_datum, 'yyyymmddhh24') hide_f_srt,
TO_CHAR(m.mld_melding_datum, 'dd-mm-yyyy') fclt_d_datum,
sd.ins_srtdiscipline_prefix||m.mld_melding_key dienstrapport,
pf.prs_perslid_naam_full persoon,
'<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_opdr_xml.asp?mld_key='
|| m.mld_melding_key || '")''>'
|| 'Print dienstrapport '||sd.ins_srtdiscipline_prefix||m.mld_melding_key || '</a>' html_print
FROM ins_srtdiscipline sd,
mld_discipline d,
mld_stdmelding s,
mld_melding m,
prs_v_perslid_fullnames pf
WHERE m.mld_stdmelding_key = 1241
AND s.mld_stdmelding_key = m.mld_stdmelding_key
AND d.ins_discipline_key = s.mld_ins_discipline_key
AND sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key
AND pf.prs_perslid_key = m.prs_perslid_key;
-- Overzicht aanschafdata ICT-middelen, gegroepeerd per jaar ('geleend' van HPJI)
CREATE OR REPLACE VIEW demo_v_rap_it_inventaris_jaar
(
hide_f_regel,
fclt_f_organisatie,
fclt_f_categorie,
fclt_f_aanschafjaar,
aantal
)
AS
SELECT grid.onderdeel || '-' || grid.rubriek regel,
grid.onderdeel,
grid.rubriek,
grid.jaar,
COALESCE (x.aantal, 0)
FROM (SELECT a.prs_afdeling_key onderdeel_key,
sd.ins_srtdeel_key rubriek_key,
j.jaar jaar,
a.prs_afdeling_omschrijving onderdeel,
sd.ins_srtdeel_omschrijving rubriek
FROM (SELECT prs_afdeling_key,
prs_afdeling_omschrijving
FROM prs_v_aanwezigafdeling
WHERE prs_afdeling_parentkey IS NULL
UNION ALL
SELECT -1 prs_afdeling_key,
'Onbekend' prs_afdeling_omschrijving
FROM DUAL) a,
ins_v_aanwezigsrtdeel sd,
ins_v_aanwezigsrtgroep sg,
(SELECT DISTINCT
TO_CHAR (
fac.safe_to_date (
ins_kenmerkdeel_waarde,
'dd-mm-yyyy'
),
'yyyy'
)
jaar
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_kenmerk_key = 761) j -- Aanschafdatum
WHERE sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = 896) grid -- Hardware
LEFT JOIN
( SELECT asd.prs_afdeling_key1 onderdeel_key,
asd.ins_srtdeel_key rubriek_key,
j.jaar jaar,
COUNT ( * ) aantal
FROM (SELECT DECODE (ra.aantal,
1, ab.prs_afdeling_key1,
-1)
prs_afdeling_key1,
d.ins_srtdeel_key,
d.ins_deel_key
FROM ins_v_aanwezigdeel d,
alg_v_allonrgoed_gegevens aog,
( SELECT alg_ruimte_key,
MAX (prs_afdeling_key)
prs_afdeling_key,
COUNT ( * ) aantal
FROM prs_ruimteafdeling
GROUP BY alg_ruimte_key) ra,
prs_v_afdeling_boom ab
WHERE d.ins_alg_ruimte_type NOT IN
('A', 'P', 'W')
AND d.ins_alg_ruimte_key =
aog.alg_onroerendgoed_keys
AND aog.alg_ruimte_key =
ra.alg_ruimte_key
AND ra.prs_afdeling_key =
ab.prs_afdeling_key
UNION ALL
SELECT -1 prs_afdeling_key1,
d.ins_srtdeel_key,
d.ins_deel_key
FROM ins_v_aanwezigdeel d,
alg_v_allonrgoed_gegevens aog
WHERE d.ins_alg_ruimte_type NOT IN
('A', 'P', 'W')
AND d.ins_alg_ruimte_key =
aog.alg_onroerendgoed_keys
AND (aog.alg_ruimte_key IS NULL
OR NOT EXISTS
(SELECT 1
FROM prs_ruimteafdeling ra
WHERE ra.alg_ruimte_key =
aog.alg_ruimte_key))
UNION ALL
SELECT ab.prs_afdeling_key1,
d.ins_srtdeel_key,
d.ins_deel_key
FROM ins_v_aanwezigdeel d,
prs_v_afdeling_boom ab
WHERE d.ins_alg_ruimte_type = 'A'
AND d.ins_alg_ruimte_key =
ab.prs_afdeling_key
UNION ALL
SELECT ab.prs_afdeling_key1,
d.ins_srtdeel_key,
d.ins_deel_key
FROM ins_v_aanwezigdeel d,
prs_perslid p,
prs_v_afdeling_boom ab
WHERE d.ins_alg_ruimte_type = 'P'
AND d.ins_alg_ruimte_key =
p.prs_perslid_key
AND p.prs_afdeling_key =
ab.prs_afdeling_key
UNION ALL
SELECT DECODE (ra.aantal,
1, ab.prs_afdeling_key1,
-1)
prs_afdeling_key1,
d.ins_srtdeel_key,
d.ins_deel_key
FROM ins_v_aanwezigdeel d,
prs_werkplek w,
( SELECT alg_ruimte_key,
MAX (prs_afdeling_key)
prs_afdeling_key,
COUNT ( * ) aantal
FROM prs_ruimteafdeling
GROUP BY alg_ruimte_key) ra,
prs_v_afdeling_boom ab
WHERE d.ins_alg_ruimte_type = 'W'
AND d.ins_alg_ruimte_key =
w.prs_werkplek_key
AND w.prs_alg_ruimte_key =
ra.alg_ruimte_key
AND ra.prs_afdeling_key =
ab.prs_afdeling_key
UNION ALL
SELECT -1 prs_afdeling_key1,
d.ins_srtdeel_key,
d.ins_deel_key
FROM ins_v_aanwezigdeel d, prs_werkplek w
WHERE d.ins_alg_ruimte_type = 'W'
AND d.ins_alg_ruimte_key =
w.prs_werkplek_key
AND NOT EXISTS
(SELECT 1
FROM prs_ruimteafdeling ra
WHERE ra.alg_ruimte_key =
w.prs_alg_ruimte_key))
asd
LEFT JOIN
(SELECT ins_deel_key,
TO_CHAR (
fac.safe_to_date (
ins_kenmerkdeel_waarde,
'dd-mm-yyyy'
),
'yyyy'
)
jaar
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_kenmerk_key = 761) j -- Aanschafdatum
ON asd.ins_deel_key = j.ins_deel_key
GROUP BY asd.prs_afdeling_key1, asd.ins_srtdeel_key, j.jaar)
x
ON grid.onderdeel_key = x.onderdeel_key
AND grid.rubriek_key = x.rubriek_key
AND grid.jaar = x.jaar;
-- Overzicht aanschafdata ICT-middelen ('geleend' van HPJI)
CREATE OR REPLACE VIEW demo_v_rap_it_inventaris_stuk
(
fclt_f_organisatie,
fclt_f_categorie,
html_obj_id,
fclt_x_obj_id,
fclt_f_merk,
fclt_f_type,
fclt_d_aanschafdatum,
fclt_f_locatie,
ruimte_nr,
ruimte_oms
)
AS
SELECT a.prs_afdeling_omschrijving,
sd.ins_srtdeel_omschrijving,
'<a class="details" onclick=''FcltMgr.openDetail("appl/ins/ins_deel.asp?urole=bo&'||'autosearch=1&'||'ins_key='
|| asd.ins_deel_key || '")''>'
|| htf.escape_sc(asd.ins_deel_omschrijving) || '</a>'
html_obj_id,
asd.ins_deel_omschrijving,
x.merk,
y.model,
TO_CHAR (z.datum, 'dd-mm-yyyy'),
asd.vestiging,
asd.ruimte_nr,
asd.ruimte_oms
FROM (SELECT d.ins_srtdeel_key,
d.ins_deel_key,
d.ins_deel_omschrijving,
DECODE (rv.aantal, 1, rv.prs_afdeling_key1, -1)
prs_afdeling_key1,
aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
vestiging,
aog.alg_ruimte_nr ruimte_nr,
aog.alg_ruimte_omschrijving ruimte_oms
FROM ins_v_aanwezigdeel d,
alg_v_allonrgoed_gegevens aog,
( SELECT alg_ruimte_key,
MAX (prs_afdeling_key1) prs_afdeling_key1,
COUNT ( * ) aantal
FROM prs_ruimteafdeling ra, prs_v_afdeling_boom ab
WHERE ra.prs_afdeling_key = ab.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) rv
WHERE d.ins_alg_ruimte_type NOT IN ('A', 'P', 'W')
AND d.ins_alg_ruimte_key = aog.alg_onroerendgoed_keys
AND aog.alg_ruimte_key = rv.alg_ruimte_key
UNION ALL
SELECT d.ins_srtdeel_key,
d.ins_deel_key,
d.ins_deel_omschrijving,
-1 prs_afdeling_key1,
aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
vestiging,
aog.alg_ruimte_nr ruimte_nr,
aog.alg_ruimte_omschrijving ruimte_oms
FROM ins_v_aanwezigdeel d, alg_v_allonrgoed_gegevens aog
WHERE d.ins_alg_ruimte_type NOT IN ('A', 'P', 'W')
AND d.ins_alg_ruimte_key = aog.alg_onroerendgoed_keys
AND (aog.alg_ruimte_key IS NULL
OR NOT EXISTS
(SELECT 1
FROM prs_ruimteafdeling ra
WHERE ra.alg_ruimte_key =
aog.alg_ruimte_key))
UNION ALL
SELECT d.ins_srtdeel_key,
d.ins_deel_key,
d.ins_deel_omschrijving,
ab.prs_afdeling_key1,
'Onbekend',
NULL ruimte_nr,
NULL ruimte_oms
FROM ins_v_aanwezigdeel d, prs_v_afdeling_boom ab
WHERE d.ins_alg_ruimte_type = 'A'
AND d.ins_alg_ruimte_key = ab.prs_afdeling_key
UNION ALL
SELECT d.ins_srtdeel_key,
d.ins_deel_key,
d.ins_deel_omschrijving,
ab.prs_afdeling_key1,
'Onbekend',
NULL ruimte_nr,
NULL ruimte_oms
FROM ins_v_aanwezigdeel d,
prs_perslid p,
prs_v_afdeling_boom ab
WHERE d.ins_alg_ruimte_type = 'P'
AND d.ins_alg_ruimte_key = p.prs_perslid_key
AND p.prs_afdeling_key = ab.prs_afdeling_key
UNION ALL
SELECT d.ins_srtdeel_key,
d.ins_deel_key,
d.ins_deel_omschrijving,
DECODE (rv.aantal, 1, rv.prs_afdeling_key1, -1)
prs_afdeling_key1,
aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
vestiging,
aog.alg_ruimte_nr ruimte_nr,
aog.alg_ruimte_omschrijving ruimte_oms
FROM ins_v_aanwezigdeel d,
prs_werkplek w,
( SELECT alg_ruimte_key,
MAX (prs_afdeling_key1) prs_afdeling_key1,
COUNT ( * ) aantal
FROM prs_ruimteafdeling ra, prs_v_afdeling_boom ab
WHERE ra.prs_afdeling_key = ab.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) rv,
alg_v_allonrgoed_gegevens aog
WHERE d.ins_alg_ruimte_type = 'W'
AND d.ins_alg_ruimte_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = rv.alg_ruimte_key
AND rv.alg_ruimte_key = aog.alg_ruimte_key
UNION ALL
SELECT d.ins_srtdeel_key,
d.ins_deel_key,
d.ins_deel_omschrijving,
-1 prs_afdeling_key1,
aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam
vestiging,
aog.alg_ruimte_nr ruimte_nr,
aog.alg_ruimte_omschrijving ruimte_oms
FROM ins_v_aanwezigdeel d,
prs_werkplek w,
alg_v_allonrgoed_gegevens aog
WHERE d.ins_alg_ruimte_type = 'W'
AND d.ins_alg_ruimte_key = w.prs_werkplek_key
AND NOT EXISTS
(SELECT 1
FROM prs_ruimteafdeling ra
WHERE ra.alg_ruimte_key =
w.prs_alg_ruimte_key)
AND w.prs_alg_ruimte_key = aog.alg_ruimte_key) asd,
ins_srtdeel sd,
ins_srtgroep sg,
(SELECT prs_afdeling_key, prs_afdeling_omschrijving
FROM prs_v_aanwezigafdeling
WHERE prs_afdeling_parentkey IS NULL
UNION ALL
SELECT -1 prs_afdeling_key,
'Onbekend' prs_afdeling_omschrijving
FROM DUAL) a,
(SELECT ins_deel_key, ins_kenmerkdeel_waarde merk
FROM ins_v_aanwezigkenmerkdeel kd, ins_kenmerk k
WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 42) x, -- Merk
(SELECT ins_deel_key, ins_kenmerkdeel_waarde model
FROM ins_v_aanwezigkenmerkdeel kd, ins_kenmerk k
WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 41) y, -- Type
(SELECT ins_deel_key,
fac.safe_to_date (ins_kenmerkdeel_waarde, 'dd-mm-yyyy')
datum
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_kenmerk_key = 761) z -- Aanschafdatum
WHERE asd.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = 896 -- Hardware
AND asd.prs_afdeling_key1 = a.prs_afdeling_key
AND asd.ins_deel_key = x.ins_deel_key(+)
AND asd.ins_deel_key = y.ins_deel_key(+)
AND asd.ins_deel_key = z.ins_deel_key(+);
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
BEGIN fac.registercustversion('DEMO', 0); END;
/
commit;
--- CAPACITATIEVE PLANNING, 'GELEEND' VAN ARAI ---------------------------------
-- Alle (potentiele) uitvoerders met de disciplines waarvoor ze uitvoerder kunnen zijn.
CREATE OR REPLACE VIEW demo_v_uitvoerders
AS
SELECT DISTINCT p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_naam,
p.prs_perslid_voornaam,
p.prs_perslid_voorletters,
p.prs_perslid_dienstverband,
sp.prs_srtperslid_omschrijving,
p.prs_afdeling_key,
a.prs_afdeling_omschrijving,
d.ins_discipline_key,
d.ins_discipline_omschrijving
FROM prs_perslid p, prs_srtperslid sp, prs_afdeling a, mld_discipline d, fac_groeprechten gr, fac_gebruikersgroep gg, fac_functie f, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_key = gg.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND gr.fac_groep_key = gg.fac_groep_key
AND gr.ins_discipline_key = d.ins_discipline_key
AND gr.fac_functie_key = f.fac_functie_key
AND f.fac_functie_code = 'WEB_MLDORD';
CREATE OR REPLACE VIEW demo_v_uitvoerders_full
AS SELECT DISTINCT prs_perslid_key, prs_perslid_naam_full FROM demo_v_uitvoerders;
-- Teamlid welke nu (!), op dit moment (!) een (of meer) lopende opdracht(en) heeft.
-- Alle uitvoerders met alle opdrachten in de tijd uitgezet.
CREATE OR REPLACE VIEW demo_v_opdr_uitvoerders
AS
SELECT p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_naam,
p.prs_perslid_voornaam,
p.prs_perslid_voorletters,
p.prs_perslid_dienstverband,
p.prs_afdeling_key,
a.prs_afdeling_omschrijving,
o.mld_melding_key,
o.mld_opdr_key,
o.mld_opdr_datumbegin,
o.mld_opdr_einddatum,
o.mld_opdr_uren,
o.mld_statusopdr_key,
s.mld_statusopdr_omschrijving
FROM prs_perslid p, mld_opdr o, mld_statusopdr s, prs_afdeling a, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_key = o.mld_uitvoerende_keys
AND p.prs_perslid_key = pf.prs_perslid_key
AND o.mld_statusopdr_key = s.mld_statusopdr_key
AND p.prs_afdeling_key = a.prs_afdeling_key;
CREATE OR REPLACE VIEW demo_v_opdr_uitvoerders_all
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband,
prs_afdeling_key,
prs_afdeling_omschrijving,
mld_melding_key,
mld_opdr_key,
mld_opdr_datumbegin,
mld_opdr_einddatum,
mld_opdr_uren,
mld_statusopdr_omschrijving
FROM demo_v_opdr_uitvoerders
WHERE mld_statusopdr_key IN (5,8)
UNION
SELECT DISTINCT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband,
prs_afdeling_key,
prs_afdeling_omschrijving,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
FROM demo_v_uitvoerders p WHERE NOT EXISTS (SELECT 'x' FROM demo_v_opdr_uitvoerders u WHERE u.prs_perslid_key = p.prs_perslid_key);
CREATE OR REPLACE VIEW demo_v_opdr_uitvoerders_grp
( prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband_uren,
prs_afdeling_key,
prs_afdeling_omschrijving,
aantal_opdrachten,
som_mld_opdr_uren,
url)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
COALESCE(40*prs_perslid_dienstverband/100,0),
prs_afdeling_key,
prs_afdeling_omschrijving,
COUNT(mld_opdr_key),
COALESCE(SUM(mld_opdr_uren),0),
'appl/mld/opdr_search.asp?urole=bo' || '&' || 'autosearch=1' || '&' || 'handler_key=' || prs_perslid_key
FROM demo_v_opdr_uitvoerders_all
GROUP BY prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband,
prs_afdeling_key,
prs_afdeling_omschrijving;
CREATE OR REPLACE VIEW demo_v_opdr_afdeling_grp
( prs_afdeling_key,
prs_afdeling_omschrijving,
aantal_opdrachten,
som_mld_opdr_uren,
url)
AS
SELECT prs_afdeling_key,
prs_afdeling_omschrijving,
COUNT(mld_opdr_key),
COALESCE(SUM(mld_opdr_uren),0),
NULL
FROM demo_v_opdr_uitvoerders_all
GROUP BY prs_afdeling_key,
prs_afdeling_omschrijving;
-- Dienstverband uren van medewerkers bij volle week, dus b.v. 40, 32, 30 etc
-- Beschikbare_uren_groen: normaal dienstverband, maar als ergen midden in de week, dan dienstverband - aantal voorbije dagen * # uren bij medewerker - # uren van vandaag gerekend vanaf 9 uur smorgens
-- Opdracht_uren_rood: opdrachturen bij medewerker, maar niet meer dan Beschikbare_uren_groen
CREATE OR REPLACE VIEW demo_v_opdr_uitvoerders_wk0
(
prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
prs_perslid_dienstverband_uren -
( GREATEST( (TO_CHAR(SYSDATE,'D')-2),0)*(prs_perslid_dienstverband_uren/5) + (TO_CHAR(SYSDATE,'HH24') - 9) ) beschikbare_uren_groen,
LEAST(som_mld_opdr_uren, prs_perslid_dienstverband_uren - (GREATEST((TO_CHAR(SYSDATE,'D')-2),0)*(prs_perslid_dienstverband_uren/5) + (TO_CHAR(SYSDATE,'HH24') - 9) ) ) opdracht_uren_rood,
url
FROM demo_v_opdr_uitvoerders_grp;
CREATE OR REPLACE VIEW demo_v_graph_capac_mdw_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM demo_v_opdr_uitvoerders_wk0;
CREATE OR REPLACE VIEW demo_v_opdr_uitvoerders_wk1
(
prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT g1.prs_perslid_key,
g1.prs_afdeling_key,
g1.prs_perslid_naam,
g1.prs_perslid_dienstverband_uren,
g1.prs_perslid_dienstverband_uren - LEAST(g1.som_mld_opdr_uren - w0.opdracht_uren_rood , g1.prs_perslid_dienstverband_uren) beschikbare_uren_groen,
LEAST(g1.som_mld_opdr_uren - w0.opdracht_uren_rood , g1.prs_perslid_dienstverband_uren) opdracht_uren_rood,
g1.url
FROM demo_v_opdr_uitvoerders_grp g1, demo_v_opdr_uitvoerders_wk0 w0
WHERE g1.prs_perslid_key = w0.prs_perslid_key;
CREATE OR REPLACE VIEW demo_v_graph_capac_mdw_week_1
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk1;
CREATE OR REPLACE VIEW demo_v_opdr_uitvoerders_wk2
(
prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT g1.prs_perslid_key,
g1.prs_afdeling_key,
g1.prs_perslid_naam,
g1.prs_perslid_dienstverband_uren,
g1.prs_perslid_dienstverband_uren - LEAST(g1.som_mld_opdr_uren - w0.opdracht_uren_rood - w1.opdracht_uren_rood, g1.prs_perslid_dienstverband_uren) beschikbare_uren_groen,
LEAST(g1.som_mld_opdr_uren - w0.opdracht_uren_rood - w1.opdracht_uren_rood , g1.prs_perslid_dienstverband_uren) opdracht_uren_rood,
g1.url
FROM demo_v_opdr_uitvoerders_grp g1, demo_v_opdr_uitvoerders_wk0 w0, demo_v_opdr_uitvoerders_wk1 w1
WHERE g1.prs_perslid_key = w0.prs_perslid_key
AND g1.prs_perslid_key = w1.prs_perslid_key;
CREATE OR REPLACE VIEW demo_v_graph_capac_mdw_week_2
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk2;
CREATE OR REPLACE VIEW demo_v_graph_capac_TD_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM demo_v_opdr_uitvoerders_wk0
WHERE prs_afdeling_key = 630;
-- Grafiek van de medewerkers Technische Dienst Electra (key = 98)
CREATE OR REPLACE VIEW demo_v_graph_capac_ELE_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM demo_v_opdr_uitvoerders_wk0
WHERE prs_afdeling_key = 31481;
-- Grafiek van de medewerkers Technische Dienst Werktuigbouw (key = 99)
CREATE OR REPLACE VIEW demo_v_graph_capac_WTB_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM demo_v_opdr_uitvoerders_wk0
WHERE prs_afdeling_key = 31482;
-- Grafiek van de medewerkers Technische Dienst (key = 97)
CREATE OR REPLACE VIEW demo_v_graph_capac_TD_week_1
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk1
WHERE prs_afdeling_key = 630;
-- Grafiek van de medewerkers Technische Dienst Electra (key = 98)
CREATE OR REPLACE VIEW demo_v_graph_capac_ELE_week_1
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk1
WHERE prs_afdeling_key = 31481;
-- Grafiek van de medewerkers Technische Dienst Werktuigbouw (key = 99)
CREATE OR REPLACE VIEW demo_v_graph_capac_WTB_week_1
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk1
WHERE prs_afdeling_key = 31482;
CREATE OR REPLACE VIEW demo_v_graph_capac_TD_week_2
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk2
WHERE prs_afdeling_key = 630;
CREATE OR REPLACE VIEW demo_v_graph_capac_ELE_week_2
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk2
WHERE prs_afdeling_key = 31481;
CREATE OR REPLACE VIEW demo_v_graph_capac_WTB_week_2
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM demo_v_opdr_uitvoerders_wk2
WHERE prs_afdeling_key = 31482;
CREATE OR REPLACE VIEW demo_v_capac_mdw_max_weeknr
(max_weeknr)
AS
SELECT ROUND(COALESCE(MAX(som_mld_opdr_uren), 0) / 40 ) + 2
FROM demo_v_opdr_uitvoerders_grp;
CREATE OR REPLACE VIEW demo_v_graph_capac_mdw_all
(
prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
40 * max_weeknr,
ROUND(som_mld_opdr_uren * (prs_perslid_dienstverband_uren / 40)),
url
FROM demo_v_opdr_uitvoerders_grp, demo_v_capac_mdw_max_weeknr;
CREATE OR REPLACE VIEW demo_v_graph_capac_mdw_totaal
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
url
FROM demo_v_graph_capac_mdw_all;
CREATE OR REPLACE VIEW demo_v_graph_aantopdr_mdw_all
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_AANTAL,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
aantal_opdrachten,
url
FROM demo_v_opdr_uitvoerders_grp;
CREATE OR REPLACE VIEW demo_v_graph_capac_afd_totaal
(
prs_afdeling_key,
FCLT_XAS_AFDELING,
FCLT_YAS_UREN,
FCLT_URL
)
AS
SELECT prs_afdeling_key,
prs_afdeling_omschrijving,
som_MLD_OPDR_UREN,
url
FROM demo_v_opdr_afdeling_grp;
CREATE OR REPLACE VIEW demo_v_graph_aantopdr_afd_all
(
prs_afdeling_key,
FCLT_XAS_AFDELING,
FCLT_YAS_AANTAL,
FCLT_URL
)
AS
SELECT prs_afdeling_key,
prs_afdeling_omschrijving,
aantal_opdrachten,
url
FROM demo_v_opdr_afdeling_grp;
--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-
--------- MeerJarenonderhoudsBegroting (MJB) en InvesteringsBegroting (IB) <20> la LUDE ---------------
--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=-
-- Rapportage "Begrotingsoverzicht"
-- Toont alle meldingen in vakgroeptype "Investeringsbegroting", plus alle opdrachten-met-kosten
-- bij reguliere meldingen op een investeringsbegroting-projectkostenplaats
CREATE OR REPLACE VIEW demo_v_rap_invbegr
AS
SELECT hide_f_sort,
fclt_f_jaar,
fclt_f_locatie,
budget fclt_x_budget,
prs_kostenplaats_limiet hide_f_limiet,
DECODE( INSTR(budget, fclt_f_jaar),
0, '<font style="font-weight:bold;color:#f00">'||budget||'</font><br/>(gepland: '||gepland||')',
budget)
html_budget,
html_nummer,
omschrijving,
fac.safe_to_number(
DECODE (fclt_f_substatus,
'Geannuleerd', NULL,
'Afgewezen', NULL,
geraamd) )
fclt_c_geraamd,
fac.safe_to_number(
DECODE (fclt_f_substatus,
'Geannuleerd', NULL,
'Afgewezen', NULL,
toegekend) )
fclt_c_toegekend,
fac.safe_to_number(
DECODE(besteed,
0, NULL,
besteed) )
fclt_c_besteed,
fclt_f_substatus,
fclt_f_status
FROM (
SELECT TO_CHAR(m.mld_melding_einddatum, 'YYYY')||LPAD(TO_CHAR(m.mld_melding_key), 6, '0') hide_f_sort,
TO_CHAR(m.mld_melding_einddatum, 'YYYY') fclt_f_jaar,
TO_CHAR(m.mld_melding_einddatum, 'DD-MM-YYYY') gepland,
l.alg_locatie_omschrijving fclt_f_locatie,
REPLACE(htf.escape_sc(km.prs_kostenplaats_omschrijving), '&'||'amp;', '&') budget,
km.prs_kostenplaats_limiet,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/MLD/mld_melding.asp?urole=fo&'||'mld_key='||m.mld_melding_key
|| '")''>'
|| htf.escape_sc(vt.ins_srtdiscipline_prefix||m.mld_melding_key)
|| '</a>'
html_nummer,
m.mld_melding_omschrijving omschrijving,
fac.safe_to_number(geraamd.mld_kenmerkmelding_waarde) geraamd,
fac.safe_to_number(toegekend.mld_kenmerkmelding_waarde) toegekend,
COALESCE(o_open.mld_opdr_kosten,0) + COALESCE(o_klaar.mld_opdr_kosten,0) besteed,
CASE
WHEN status.mld_melding_key IS NOT NULL
THEN ud_status.fac_usrdata_omschr
WHEN status.mld_melding_key IS NULL
THEN
CASE
WHEN m.mld_melding_status IN (0,2,3,4,7,99)
THEN
CASE
WHEN COALESCE(o_open.mld_opdr_kosten,0) > 0
THEN 'Uitgegeven'
WHEN COALESCE(o_klaar.mld_opdr_kosten,0) > 0
THEN 'Niet opgelost'
WHEN toegekend.mld_melding_key IS NOT NULL
THEN 'Toegekend'
WHEN geraamd.mld_melding_key IS NOT NULL
THEN 'Geraamd'
ELSE
'Aangevraagd'
END
ELSE
'Afgerond'
END
END
fclt_f_substatus,
CASE
WHEN m.mld_melding_status IN (0,2,3,4,7,99)
THEN 'Open'
ELSE 'Gesloten'
END
fclt_f_status
FROM mld_melding m,
mld_stdmelding sm,
mld_discipline vg,
ins_srtdiscipline vt,
alg_locatie l,
prs_kostenplaats km,
-- Opdrachten die al klaar zijn (met kosten)
(SELECT mld_melding_key,
SUM(mld_opdr_kosten) mld_opdr_kosten
FROM mld_opdr
WHERE mld_statusopdr_key NOT IN (1,2,3,4,5,8,10)
AND mld_opdr_kosten > 0
GROUP BY mld_melding_key) o_klaar,
-- Opdrachten die nog lopen (met kosten)
(SELECT mld_melding_key,
SUM(mld_opdr_kosten) mld_opdr_kosten
FROM mld_opdr
WHERE mld_statusopdr_key NOT IN (1,2,6,7,9)
AND mld_opdr_kosten > 0
GROUP BY mld_melding_key) o_open,
(SELECT km.* FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE k.mld_kenmerk_key = km.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 2480
AND km.mld_kenmerkmelding_verwijder IS NULL) geraamd,
(SELECT km.* FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE k.mld_kenmerk_key = km.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 2481
AND km.mld_kenmerkmelding_verwijder IS NULL) toegekend,
(SELECT km.* FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE k.mld_kenmerk_key = km.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 2483
AND km.mld_kenmerkmelding_verwijder IS NULL) status,
(SELECT * FROM fac_usrdata
WHERE fac_usrtab_key = 1) ud_status
WHERE m.mld_melding_status != 1
-- Afgemelde meldingen alleen meenemen als er geldige opdrachten m<>t kosten bij zitten
AND NOT ( m.mld_melding_status IN (5,6)
AND NOT EXISTS (SELECT 1 FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key
AND mld_opdr_kosten > 0
AND mld_statusopdr_key NOT IN (1,2) ) )
AND sm.mld_stdmelding_key = m.mld_stdmelding_key
AND vg.ins_discipline_key = sm.mld_ins_discipline_key
AND vt.ins_srtdiscipline_key = vg.ins_srtdiscipline_key
AND vt.ins_srtdiscipline_key = 521
AND km.prs_kostenplaats_key = m.prs_kostenplaats_key
AND geraamd.mld_melding_key(+) = m.mld_melding_key
AND toegekend.mld_melding_key(+) = m.mld_melding_key
AND status.mld_melding_key(+) = m.mld_melding_key
AND ud_status.fac_usrdata_key(+) = fac.safe_to_number(status.mld_kenmerkmelding_waarde)
AND l.alg_locatie_key = m.mld_alg_locatie_key
AND o_open.mld_melding_key(+) = m.mld_melding_key
AND o_klaar.mld_melding_key(+) = m.mld_melding_key
UNION ALL
SELECT TO_CHAR(m.mld_melding_einddatum, 'YYYY')||LPAD(TO_CHAR(m.mld_melding_key), 6, '0') hide_f_sort,
TO_CHAR(m.mld_melding_einddatum, 'YYYY') fclt_f_jaar,
TO_CHAR(m.mld_melding_einddatum, 'DD-MM-YYYY') gepland,
l.alg_locatie_omschrijving fclt_f_locatie,
htf.escape_sc(k.prs_kostenplaats_omschrijving) budget,
k.prs_kostenplaats_limiet,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/MLD/mld_melding.asp?urole=fo&'||'mld_key='||m.mld_melding_key
|| '")''>'
|| htf.escape_sc(vt.ins_srtdiscipline_prefix||m.mld_melding_key)
|| '</a>'
html_nummer,
m.mld_melding_omschrijving omschrijving,
NULL geraamd,
NULL toegekend,
o.mld_opdr_kosten besteed,
CASE
WHEN m.mld_melding_status IN (0,2,3,4,7,99)
THEN
CASE
WHEN o.mld_opdr_key IS NOT NULL AND o.mld_statusopdr_key IN (3,4,5,8,10)
THEN 'Uitgegeven'
WHEN o.mld_opdr_key IS NOT NULL AND o.mld_statusopdr_key IN (6,7,9)
THEN 'Niet opgelost'
ELSE 'Aangevraagd'
END
ELSE
'Afgemeld'
END
fclt_f_substatus,
CASE
WHEN m.mld_melding_status IN (0,2,3,4,7,99)
THEN 'Open'
ELSE 'Gesloten'
END
fclt_f_status
FROM mld_opdr o,
mld_melding m,
mld_stdmelding sm,
mld_discipline vg,
ins_srtdiscipline vt,
alg_locatie l,
prs_kostenplaats k
WHERE m.mld_melding_key = o.mld_melding_key
AND m.mld_melding_status != 1
AND sm.mld_stdmelding_key = m.mld_stdmelding_key
AND vg.ins_discipline_key = sm.mld_ins_discipline_key
AND vt.ins_srtdiscipline_key = vg.ins_srtdiscipline_key
AND vt.ins_srtdiscipline_key != 521
AND l.alg_locatie_key = m.mld_alg_locatie_key
AND k.prs_kostenplaats_key = o.prs_kostenplaats_key
AND k.prs_kostenplaats_module = 'PRJ'
AND o.mld_opdr_kosten > 0);
-- Rapportage "Budget per locatie"
-- Sommeert bovenstaande rapportage per budget en locatie
CREATE OR REPLACE VIEW demo_v_rap_invbegr_budg_loc
AS
SELECT fclt_f_locatie||fclt_f_jaar||fclt_x_budget hide_f_sort,
fclt_f_jaar, fclt_f_locatie,
fclt_x_budget, html_budget,
hide_f_limiet,
SUM(fclt_c_toegekend) fclt_c_toegekend,
SUM(DECODE(fclt_f_status,
'Open', fclt_c_besteed) )
fclt_c_openstaand,
SUM(DECODE(fclt_f_status,
'Gesloten', fclt_c_besteed) )
fclt_c_uitgevoerd,
SUM(fclt_c_besteed) fclt_c_besteed,
SUM( COALESCE(fclt_c_besteed, fclt_c_toegekend) )
fclt_c_prognose
FROM demo_v_rap_invbegr
WHERE fclt_f_substatus NOT IN ('Geannuleerd', 'Afgewezen')
GROUP BY fclt_f_jaar, fclt_f_locatie, hide_f_limiet, fclt_x_budget, html_budget;
-- Rapportage "Budgetuitnuttig"
-- Beschikbaar budget per kostenplaats (categorie), uitgezet uitnutting.
-- Uitnutting = toegekend bedrag voor lopende meldingen, besteed bedrag voor afgesloten meldingen.
CREATE OR REPLACE VIEW demo_v_rap_invbegr_budg_uitnut
AS
SELECT fclt_f_jaar,
fclt_x_budget fclt_x_categorie,
html_budget html_categorie,
hide_f_limiet fclt_c_budget,
SUM(fclt_c_toegekend) fclt_c_toegekend,
SUM(fclt_c_openstaand) fclt_c_openstaand,
SUM(fclt_c_uitgevoerd) fclt_c_uitgevoerd,
SUM(fclt_c_besteed) fclt_c_besteed,
SUM(fclt_c_prognose) fclt_c_prognose
FROM demo_v_rap_invbegr_budg_loc
GROUP BY fclt_f_jaar, hide_f_limiet, fclt_x_budget, html_budget;
---------------------------------------------------------------------------------
-- MJB (MeerJarenonderhoudsBegroting) --
---------------------------------------------------------------------------------
-- Element = inspectie op MJB-object (component).
-- Elementen definieren met welke frequentie gebouwen/inventaris/apparatuur/... moeten
-- worden onderhouden/vervangen/...
-- Deze view levert alle inspecties op objectsoorten/-groepen in discipline "MJB", inclusief
-- periode, eenheidsprijs, eenheid, groep (categorie), verantwoordelijke (huurder/eigenaar)
-- en toelichting.
-- ins_discipline MJB 2689
CREATE OR REPLACE VIEW demo_v_mjb_elementen
AS
SELECT ins_srtcontrole_key,
sd.ins_srtdeel_key,
sc.ins_srtcontrole_groep categorie,
sdg.ins_srtdeel_omschrijving objectsoort,
sc.ins_srtcontrole_omschrijving element,
sc.ins_srtcontrole_kosten eenheidsprijs,
sd.ins_srtdeel_eenheid eenheid,
sc.ins_srtcontrole_periode periode,
sc.ins_srtcontrole_opmerking verantwoordelijke,
sc.ins_srtcontrole_info toelichting
FROM ins_srtcontrole sc,
ins_v_srtdeel_gegevens sdg,
ins_srtdeel sd
WHERE sc.ins_srtinstallatie_key =
DECODE(sc.ins_srtcontrole_niveau,
'S', sdg.ins_srtdeel_key,
'G', sdg.ins_srtgroep_key,
'D', sdg.ins_discipline_key)
AND sdg.ins_discipline_key = 2689
AND sd.ins_srtdeel_key = sdg.ins_srtdeel_key;
-- Rapportage met alle elementen
CREATE OR REPLACE VIEW demo_v_rap_mjb_elementen
AS
SELECT categorie fclt_f_categorie,
objectsoort fclt_f_objectsoort,
element fclt_f_element,
eenheidsprijs fclt_c_eenheidsprijs,
eenheid,
periode,
verantwoordelijke fclt_f_verantwoordelijke,
toelichting
FROM demo_v_mjb_elementen;
-- Component = MJB-object met inspectie(s).
-- Componenten zijn bulkobjecten ("30 TL-armaturen") waarmee vastgelegd wordt wanneer
-- bepaalde zaken op lokaties zijn aangeschaft. M.b.v. de elementen wordt dan bepaald
-- wanneer ze vervangen/onderhouden moeten worden en wat dat naar verwachting gaat kosten.
-- Daarbij kan per inspectieresultaat de prijs overruled worden. Uitstel is mogelijk.
-- ins_discipline MJB 2689
-- ins_kenmerk Aantal 961
-- ins_kenmerk Uplift 962
-- ins_srtkenmerk Werkelijke eenh.prijs 681
CREATE OR REPLACE VIEW demo_v_mjb_componenten
AS
SELECT alg_locatie_key,
locatie,
categorie,
ins_srtdeel_key,
objectsoort,
e.ins_deel_key,
element,
aantal,
COALESCE(werkelijk, eenheidsprijs) eenheidsprijs,
eenheid,
uplift,
aantal * COALESCE(werkelijk, eenheidsprijs) * (1 + COALESCE(uplift, 0) / 100) totaalprijs,
werkelijk,
aanschaf,
laatste,
uitstel,
periode,
COALESCE(uitstel, COALESCE(laatste, aanschaf) + periode ) vervangingsjaar
-- ,verantwoordelijke
FROM (
SELECT l.alg_locatie_key,
l.alg_locatie_omschrijving locatie,
el.categorie categorie,
sd.ins_srtdeel_key,
sd.ins_srtdeel_omschrijving objectsoort,
el.ins_srtcontrole_key,
el.element element,
d.ins_deel_key,
fac.safe_to_number(aantal.ins_kenmerkdeel_waarde) aantal,
el.eenheidsprijs eenheidsprijs,
sd.ins_srtdeel_eenheid eenheid,
fac.safe_to_number(uplift.ins_kenmerkdeel_waarde) uplift,
fac.safe_to_number(TO_CHAR(d.ins_deel_aanmaak, 'YYYY')) aanschaf,
el.periode periode,
el.verantwoordelijke verantwoordelijke
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
demo_v_mjb_elementen el,
ins_v_alg_onroerendgoed og,
alg_locatie l,
(SELECT * FROM ins_kenmerkdeel
WHERE ins_kenmerk_key = 961
AND ins_kenmerkdeel_verwijder IS NULL) aantal,
(SELECT * FROM ins_kenmerkdeel
WHERE ins_kenmerk_key = 962
AND ins_kenmerkdeel_verwijder IS NULL) uplift
WHERE d.ins_deel_verwijder IS NULL
AND sd.ins_srtdeel_key = d.ins_srtdeel_key
AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
AND sg.ins_discipline_key = 2689
AND og.alg_onrgoed_type = d.ins_alg_ruimte_type
AND og.alg_onrgoed_keys = d.ins_alg_ruimte_key
AND l.alg_locatie_key = og.alg_locatie_key
AND el.ins_srtdeel_key(+) = sd.ins_srtdeel_key
AND aantal.ins_deel_key = d.ins_deel_key
AND uplift.ins_deel_key(+) = d.ins_deel_key ) e
LEFT OUTER JOIN (
SELECT dsc.ins_srtcontrole_key, dsc.ins_deel_key,
fac.safe_to_number(TO_CHAR(dsc.ins_deelsrtcontrole_datum, 'YYYY')) laatste,
NULL uitstel,
fac.safe_to_number(ins_kmdeelsrtcontr_waarde) werkelijk
FROM ins_deelsrtcontrole dsc,
ins_srtcontroledl_xcp xcp,
(SELECT kdsc.* FROM ins_kmdeelsrtcontr kdsc, ins_kenmerk k
WHERE k.ins_kenmerk_key = kdsc.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 681
AND kdsc.ins_kmdeelsrtcontr_verwijder IS NULL) werkelijk
WHERE werkelijk.ins_deelsrtcontrole_key(+) = dsc.ins_deelsrtcontrole_key
AND xcp.ins_srtcontrole_key(+) = dsc.ins_srtcontrole_key
AND xcp.ins_deel_key(+) = dsc.ins_deel_key
AND dsc.ins_deelsrtcontrole_key =
(SELECT MAX(ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole
WHERE ins_deel_key = dsc.ins_deel_key
AND ins_srtcontrole_key = dsc.ins_srtcontrole_key) ) c
ON e.ins_deel_key = c.ins_deel_key
AND e.ins_srtcontrole_key = c.ins_srtcontrole_key;
-- Rapportage met alle componenten
CREATE OR REPLACE VIEW demo_v_rap_mjb_componenten
AS
SELECT locatie||COALESCE(categorie,'_')||objectsoort||vervangingsjaar hide_f_sort,
locatie fclt_f_locatie,
categorie fclt_f_categorie,
objectsoort fclt_x_objectsoort,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/INS/ins_deel.asp?urole=bo&'||'ins_key='||ins_deel_key
|| '")''>'
|| htf.escape_sc(objectsoort)
|| '</a>'
html_object,
element fclt_f_element,
aantal,
eenheidsprijs,
'p/ '||eenheid eenheid,
uplift,
totaalprijs fclt_c_totaalprijs,
TO_CHAR(aanschaf) aanschaf,
TO_CHAR(laatste) uitgevoerd,
TO_CHAR(periode) periode,
TO_CHAR(uitstel) uitstel,
TO_CHAR(vervangingsjaar) fclt_f_vervangingsjaar
-- ,verantwoordelijke
FROM demo_v_mjb_componenten;
-- Gestylede rapportage die per jaar/locatie/categorie aangeeft hoeveel kiloeuro er
-- begroot moet worden voor MJB
CREATE OR REPLACE VIEW demo_v_rap_mjb_grid
AS
SELECT grid.locatie || '-' || grid.categorie hide_f_regel,
grid.locatie fclt_f_locatie,
grid.categorie fclt_f_categorie,
TO_CHAR(grid.jaar) fclt_f_aanschafjaar,
COALESCE (comp.totaalprijs, 0) bedrag
FROM (
SELECT DISTINCT a.alg_locatie_key,
j.jaar,
a.alg_locatie_omschrijving locatie,
e.categorie
FROM (SELECT alg_locatie_key,
alg_locatie_omschrijving
FROM alg_v_aanweziglocatie
UNION ALL
SELECT -1 alg_gebouw_key,
'Onbekend' alg_locatie_omschrijving
FROM DUAL) a,
ins_v_aanwezigdeel d,
demo_v_mjb_elementen e,
(SELECT n jaar
FROM (SELECT ROWNUM n FROM DUAL
CONNECT BY LEVEL <= TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY'))+12)
WHERE n >= TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY'))-2) j
WHERE e.ins_srtdeel_key = d.ins_srtdeel_key
ORDER BY locatie, jaar
) grid
LEFT OUTER JOIN (
SELECT alg_locatie_key,
categorie,
SUM(totaalprijs/1000) totaalprijs,
vervangingsjaar
FROM demo_v_mjb_componenten
WHERE vervangingsjaar IS NOT NULL
GROUP BY alg_locatie_key, categorie, vervangingsjaar, periode
UNION ALL
SELECT alg_locatie_key,
categorie,
SUM(totaalprijs/1000) totaalprijs,
vervangingsjaar + periode vervangingsjaar
FROM demo_v_mjb_componenten
WHERE vervangingsjaar IS NOT NULL
GROUP BY alg_locatie_key, categorie, (vervangingsjaar + periode)
UNION ALL
SELECT alg_locatie_key,
categorie,
SUM(totaalprijs/1000) totaalprijs,
vervangingsjaar + 2*periode vervangingsjaar
FROM demo_v_mjb_componenten
WHERE vervangingsjaar IS NOT NULL
GROUP BY alg_locatie_key, categorie, (vervangingsjaar + 2*periode)
UNION ALL
SELECT alg_locatie_key,
categorie,
SUM(totaalprijs/1000) totaalprijs,
vervangingsjaar + 3*periode vervangingsjaar
FROM demo_v_mjb_componenten
WHERE vervangingsjaar IS NOT NULL
GROUP BY alg_locatie_key, categorie, (vervangingsjaar + 3*periode)
) comp
ON comp.alg_locatie_key = grid.alg_locatie_key
AND comp.categorie = grid.categorie
AND comp.vervangingsjaar = grid.jaar
;
-- Alle opgeroepen bezoekers, dat is:
-- * bezoeker is binnen en opgeroepen, maar nog niet vertrokken
-- * bezoeker is aangemeld voor vandaag
-- * bij de afspraak hoort een oproep-actie (geen ophaal-actie)
-- * badgenummer is gevuld
-- Filtering via de API kan op gebouw, verdieping en wachtzone (groep), dus die ook ophalen
CREATE OR REPLACE VIEW demo_v_api_bez_oproep
AS
SELECT TO_CHAR(b.bez_bezoekers_oproep, 'YYYY-MM-DD HH24:MI:SS') oproep_tijd,
rr.res_ruimte_nr ruimtenr,
COALESCE(rr.res_ruimte_groep, ' ') groep,
b.bez_bezoekers_pasnr oproep_nummer,
b.bez_bezoekers_key bezoeker_key,
g.alg_gebouw_code gebouw_code,
g.alg_gebouw_key gebouw_key,
v.alg_verdieping_code verdieping_code,
v.alg_verdieping_key verdieping_key
FROM bez_bezoekers b,
bez_afspraak a,
bez_actie ac,
res_rsv_ruimte rrr,
res_ruimte_opstelling ro,
res_ruimte rr,
res_alg_ruimte rar,
alg_ruimte r,
alg_verdieping v,
alg_gebouw g
WHERE rrr.res_rsv_ruimte_van BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 1
AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND ac.bez_actie_key = a.bez_actie_key
AND BITAND(ac.bez_actie_flags, 1) = 1
AND b.bez_afspraak_key = a.bez_afspraak_key
AND b.bez_bezoekers_done IS NOT NULL
AND b.bez_bezoekers_oproep IS NOT NULL
AND b.bez_bezoekers_out IS NULL
AND b.bez_bezoekers_pasnr IS NOT NULL
AND ro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key
AND rr.res_ruimte_key = ro.res_ruimte_key
AND rar.res_ruimte_key = rr.res_ruimte_key
AND r.alg_ruimte_key = rar.alg_ruimte_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
ORDER BY 1 DESC;
-- Rapportage t.b.v. voorbeeld oproepscherm (= gestylede rapportage)
CREATE OR REPLACE VIEW demo_v_rap_bez_oproep
AS
SELECT oproep_tijd hide_f_oproeptijd,
gebouw_code fclt_f_gebouwcode,
verdieping_code fclt_f_verdiepingcode,
groep fclt_f_wachtzonde,
ruimtenr fclt_f_ruimtenr,
oproep_nummer oproepnr
FROM demo_v_api_bez_oproep
ORDER BY oproep_tijd DESC;
CREATE OR REPLACE VIEW demo_v_leverancier
AS
SELECT *
FROM prs_bedrijf
WHERE prs_bedrijf_leverancier = 1;
CREATE OR REPLACE VIEW demo_v_rap_fin_bijtelling
AS
SELECT p.prs_perslid_nr personeelsnummer,
DECODE (
pfa.prs_perslid_key,
NULL, 'POOL',
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/prs/prs_perslid.asp?key='
|| pfa.prs_perslid_key
|| '")''>'
|| HTF.escape_sc (pfa.prs_perslid_naam_full)
|| '</a>')
html_berijder,
COALESCE (pfa.prs_perslid_naam_full, 'POOL') fclt_x_berijder,
ad.ins_deel_omschrijving fclt_f_voertuig,
c.cnt_contract_nummer_intern fclt_x_contract,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/cnt/cnt_contract.asp?urole=bo&'
|| 'cnt_key='
|| c.cnt_contract_key
|| '")''>'
|| HTF.escape_sc (c.cnt_contract_nummer_intern)
|| '</a>'
html_contract,
b.prs_bedrijf_naam fclt_f_bedrijf,
DECODE (
c.ins_discipline_key,
2789,
'huur',
TO_CHAR (
ROUND (MONTHS_BETWEEN (c.cnt_contract_looptijd_tot, c.cnt_contract_looptijd_van))))
looptijd,
ROUND(demo.getAantalDagenInPeriode (c.cnt_contract_looptijd_van,
c.cnt_contract_looptijd_tot,
TRUNC (SYSDATE, 'MM'))
* CAST (TO_CHAR (LAST_DAY (SYSDATE), 'DD') AS INT))
aantal_dagen,
ROUND (
c.cnt_contract_termijnkosten
* demo.getAantalDagenInPeriode (c.cnt_contract_looptijd_van,
c.cnt_contract_looptijd_tot,
TRUNC (SYSDATE, 'MM')),
2)
fclt_c_kosten,
fisc.waarde fclt_c_fiscale_waarde,
DECODE (bij.fac_usrdata_prijs, NULL, NULL, TO_CHAR (bij.fac_usrdata_prijs) || '%')
percentage,
ROUND (
fisc.waarde * bij.fac_usrdata_prijs / 1200
* demo.getAantalDagenInPeriode (c.cnt_contract_looptijd_van,
c.cnt_contract_looptijd_tot,
TRUNC (SYSDATE, 'MM')),
2)
fclt_c_bruto_bijtelling
FROM cnt_contract c,
cnt_contract_object co,
ins_v_aanwezigdeel ad,
prs_perslid p,
prs_v_perslid_fullnames_all pfa,
prs_bedrijf b,
(SELECT kd.ins_deel_key, ud.fac_usrdata_prijs
FROM ins_kenmerkdeel kd, ins_kenmerk k, fac_usrdata ud
WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
AND kd.ins_kenmerkdeel_verwijder IS NULL
AND k.ins_srtkenmerk_key = 749
AND k.ins_kenmerk_verwijder IS NULL
AND ud.fac_usrtab_key = 884
AND fac.safe_to_number (kd.ins_kenmerkdeel_waarde) = ud.fac_usrdata_key) bij,
(SELECT kd.ins_deel_key, fac.safe_to_number (kd.ins_kenmerkdeel_waarde) waarde
FROM ins_kenmerkdeel kd, ins_kenmerk k
WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
AND kd.ins_kenmerkdeel_verwijder IS NULL
AND k.ins_srtkenmerk_key = 747
AND k.ins_kenmerk_verwijder IS NULL) fisc
WHERE c.ins_discipline_key IN (2788, 2789)
AND c.cnt_contract_looptijd_van <= LAST_DAY (SYSDATE)
AND c.cnt_contract_looptijd_tot >= TRUNC (SYSDATE, 'MM')
AND co.cnt_contract_key = c.cnt_contract_key
AND ad.ins_deel_key = co.cnt_ins_deel_key
AND p.prs_perslid_key(+) = ad.ins_alg_ruimte_key
AND pfa.prs_perslid_key(+) = p.prs_perslid_key
AND b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND bij.ins_deel_key(+) = ad.ins_deel_key
AND fisc.ins_deel_key(+) = ad.ins_deel_key;
----- KPI's --------------------------------------------------------------------
CREATE OR REPLACE VIEW demo_v_rap_kpi_definitie
AS
SELECT * FROM kpi_definitie;
----- Views voor berekenen KPI's -----------------------------------------------
-- Views voor berekening (genormeerde) KPI-scores o.b.v. handmatig/automatisch ingevulde KPI-meldingen.
-- E<>n view per melding. Nummering is gelijk aan die van de de standaardmeldingen.
-- mld_stdmelding Budget en Kosten 1542 A
-- mld_kenmerk Catering^
-- mld_kenmerk Werkelijke kosten 2319 A
-- mld_kenmerk Extra kosten 2295 A
-- mld_kenmerk Receptie^
-- mld_kenmerk Werkelijke kosten 2320 A
-- mld_kenmerk Extra kosten 2296 A
-- mld_kenmerk Schoonmaak^
-- mld_kenmerk Werkelijke kosten 2321 A
-- mld_kenmerk Extra kosten 2297 A
-- mld_kenmerk Documentmanagement^
-- mld_kenmerk Werkelijke kosten 2322 A
-- mld_kenmerk Extra kosten 2298 A
CREATE OR REPLACE VIEW demo_v_kpi1
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('CK1','RK11','RK12','SK23','SK25','DK33')),
kosten AS
(SELECT mld_melding_key,
alg_locatie_key,
periode,
(cat_kost + cat_extra) / cat_kost cat_score,
(rec_kost + rec_extra) / rec_kost rec_score,
(sch_kost + sch_extra) / sch_kost sch_score,
(doc_kost + doc_extra) / doc_kost doc_score,
rec_extra / (rec_kost + rec_extra) rec_onvoorz_score,
sch_extra / (sch_kost + sch_extra) sch_regie_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
fac.safe_to_number(cat_kost.mld_kenmerkmelding_waarde) cat_kost,
fac.safe_to_number(cat_extra.mld_kenmerkmelding_waarde) cat_extra,
fac.safe_to_number(rec_kost.mld_kenmerkmelding_waarde) rec_kost,
fac.safe_to_number(rec_extra.mld_kenmerkmelding_waarde) rec_extra,
fac.safe_to_number(sch_kost.mld_kenmerkmelding_waarde) sch_kost,
fac.safe_to_number(sch_extra.mld_kenmerkmelding_waarde) sch_extra,
fac.safe_to_number(doc_kost.mld_kenmerkmelding_waarde) doc_kost,
fac.safe_to_number(doc_extra.mld_kenmerkmelding_waarde) doc_extra
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2319) cat_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2295) cat_extra,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2320) rec_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2296) rec_extra,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2321) sch_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2297) sch_extra,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2322) doc_kost,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2298) doc_extra,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 1542
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND cat_kost.mld_melding_key = m.mld_melding_key
AND cat_extra.mld_melding_key(+) = m.mld_melding_key
AND rec_kost.mld_melding_key = m.mld_melding_key
AND rec_extra.mld_melding_key(+) = m.mld_melding_key
AND sch_kost.mld_melding_key = m.mld_melding_key
AND sch_extra.mld_melding_key(+) = m.mld_melding_key
AND doc_kost.mld_melding_key = m.mld_melding_key
AND doc_extra.mld_melding_key(+) = m.mld_melding_key) )
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
DECODE(SUBSTR(n.kpi_code, 1, 1),
'R', 'Receptie',
'S', 'Schoonmaak',
'D', 'Documentmanagement',
'C', 'Catering') proces,
'Kosten' onderdeel,
DECODE(n.kpi_code,
'CK1', cat_score,
'RK11', rec_score,
'RK12', rec_onvoorz_score,
'SK23', sch_regie_score,
'SK25', sch_score,
'DK33', doc_score) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, kosten k) m
;
-- mld_stdmelding Audit Catering 1541
-- mld_kenmerk Wachttijden bij kassa^
-- mld_kenmerk Tijdstip1
-- mld_kenmerk Aantal bezoekers 2281 A
-- mld_kenmerk Aantal op tijd 2285 A
-- mld_kenmerk Tijdstip2
-- mld_kenmerk Aantal bezoekers 2282 A
-- mld_kenmerk Aantal op tijd 2286 A
-- mld_kenmerk Tijdstip3
-- mld_kenmerk Aantal bezoekers 2283 A
-- mld_kenmerk Aantal op tijd 2287 A
-- mld_kenmerk Opmerking
-- mld_kenmerk Assortimentsaanbod^
-- mld_kenmerk Aantal producten assortiment 2289 A
-- mld_kenmerk Aantal producten aanwezig 2288 A
-- mld_kenmerk Opmerking
-- mld_kenmerk HACCP controle^
-- mld_kenmerk Totaal aantal HACCP punten 2317 A
-- mld_kenmerk Aantal goede HACCP punten 2284 A
CREATE OR REPLACE VIEW demo_v_kpi2
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('CK2', 'CK3', 'CK4')),
audits AS
(SELECT mld_melding_key,
alg_locatie_key,
periode,
(tijdig1 + tijdig2 + tijdig3) / (num_bez1 + num_bez2 + num_bez3) wachttijd_score,
aanw_prod / num_prod assortiment_score,
goed_haccp / num_haccp haccp_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
fac.safe_to_number(num_bez1.mld_kenmerkmelding_waarde) num_bez1,
fac.safe_to_number(tijdig1.mld_kenmerkmelding_waarde) tijdig1,
fac.safe_to_number(num_bez2.mld_kenmerkmelding_waarde) num_bez2,
fac.safe_to_number(tijdig2.mld_kenmerkmelding_waarde) tijdig2,
fac.safe_to_number(num_bez3.mld_kenmerkmelding_waarde) num_bez3,
fac.safe_to_number(tijdig3.mld_kenmerkmelding_waarde) tijdig3,
fac.safe_to_number(num_prod.mld_kenmerkmelding_waarde) num_prod,
fac.safe_to_number(aanw_prod.mld_kenmerkmelding_waarde) aanw_prod,
fac.safe_to_number(num_haccp.mld_kenmerkmelding_waarde) num_haccp,
fac.safe_to_number(goed_haccp.mld_kenmerkmelding_waarde) goed_haccp
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2281) num_bez1,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2285) tijdig1,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2282) num_bez2,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2286) tijdig2,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2283) num_bez3,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2287) tijdig3,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2289) num_prod,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2288) aanw_prod,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2317) num_haccp,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2284) goed_haccp,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 1541
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND num_bez1.mld_melding_key(+) = m.mld_melding_key
AND tijdig1.mld_melding_key(+) = m.mld_melding_key
AND num_bez2.mld_melding_key(+) = m.mld_melding_key
AND tijdig2.mld_melding_key(+) = m.mld_melding_key
AND num_bez3.mld_melding_key(+) = m.mld_melding_key
AND tijdig3.mld_melding_key(+) = m.mld_melding_key
AND num_prod.mld_melding_key(+) = m.mld_melding_key
AND aanw_prod.mld_melding_key(+) = m.mld_melding_key
AND num_haccp.mld_melding_key(+) = m.mld_melding_key
AND goed_haccp.mld_melding_key(+) = m.mld_melding_key) )
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
'Catering' proces,
'Kwaliteit' onderdeel,
DECODE(n.kpi_code,
'CK2', wachttijd_score,
'CK3', assortiment_score,
'CK4', haccp_score) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, audits k) m
;
-- mld_stdmelding KTO Receptie 1544 A
-- mld_srtkenmerk Cijfer 2647 A
-- mld_srtkenmerk Opmerking
-- TODO: divide-by-zero voorkomen
CREATE OR REPLACE VIEW demo_v_kpi3
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('RT19')), --('CT6','RT19','RT20','ST30','DT40')),
kto AS
(SELECT MIN(mld_melding_key) mld_melding_key,
alg_locatie_key,
periode,
mld_stdmelding_key, SUM(cijfer) / COUNT(*) avg_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
m.mld_stdmelding_key,
fac.safe_to_number(cijfer.mld_kenmerkmelding_waarde) cijfer
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL
AND mld_kenmerk_key IN (SELECT mld_kenmerk_key FROM mld_kenmerk
WHERE mld_kenmerk_verwijder IS NULL
AND mld_srtkenmerk_key = 2647) ) cijfer,
alg_locatie dloc,
fac_usrdata dperiode
WHERE m.mld_stdmelding_key IN (1544)
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND cijfer.mld_melding_key = m.mld_melding_key)
GROUP BY alg_locatie_key, periode, mld_stdmelding_key)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
DECODE(SUBSTR(n.kpi_code, 1, 1),
'R', 'Receptie',
'S', 'Schoonmaak',
'D', 'Documentmanagement',
'C', 'Catering') proces,
'Tevredenheid' onderdeel,
avg_score score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, kto k
WHERE k.mld_stdmelding_key = DECODE(n.kpi_code,
'RT19', 1544)) m
;
-- mld_stdmelding Duurzaamheid en derving Catering 1543
-- mld_kenmerk Gebruik biologische producten^
-- mld_kenmerk Percentage Biologisch 2310 A
-- mld_kenmerk Opmerking
-- mld_kenmerk Derving^
-- mld_kenmerk Percentage derving 2311 A
-- mld_kenmerk Opmerking
CREATE OR REPLACE VIEW demo_v_kpi4
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code IN ('CD7', 'CD8')),
audits AS
(SELECT mld_melding_key,
alg_locatie_key,
periode,
perc_bio / 100 bio_score,
perc_derv / 100 derving_score
FROM (
SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_datum, 'MM') periode,
fac.safe_to_number(perc_bio.mld_kenmerkmelding_waarde) perc_bio,
fac.safe_to_number(perc_derv.mld_kenmerkmelding_waarde) perc_derv
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2310) perc_bio,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2311) perc_derv,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 1543
-- AND m.mld_melding_status IN (5)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND perc_bio.mld_melding_key(+) = m.mld_melding_key
AND perc_derv.mld_melding_key(+) = m.mld_melding_key ) )
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
'Catering' proces,
'Duurzaamheid' onderdeel,
DECODE(n.kpi_code,
'CD7', bio_score,
'CD8', derving_score) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, audits k) m
;
CREATE OR REPLACE VIEW demo_v_kpi_all
AS
SELECT * FROM demo_v_kpi1
UNION ALL
SELECT * FROM demo_v_kpi2
UNION ALL
SELECT * FROM demo_v_kpi3
UNION ALL
SELECT * FROM demo_v_kpi4;
CREATE OR REPLACE PACKAGE demo
AS
FUNCTION getAantalDagenInPeriode(p_van IN DATE,
p_tot IN DATE,
p_periode_van IN DATE,
p_periode_tot IN DATE := NULL)
RETURN NUMBER;
PROCEDURE refreshscore(pUserKey IN NUMBER);
-- Maakt afspraak met bezoekers aan, indien nodig
PROCEDURE setBezoekers(p_import_key IN NUMBER,
p_appt_id IN VARCHAR2,
p_recur_id IN VARCHAR2,
p_rsv_ruimte_key IN NUMBER);
-- Haalt bestaande afspraak bij rsv_ruimte op, of maakt een nieuwe
FUNCTION getAfspraak (p_rsv_ruimte_key IN NUMBER,
p_createnew IN NUMBER)
RETURN NUMBER;
-- Update of insert bezoeker met de juiste voorwaarden
PROCEDURE upsertBezoeker (p_import_key IN NUMBER,
p_afspraak_key IN NUMBER,
p_bezoekers_key IN NUMBER,
p_att_mail IN VARCHAR2,
p_att_name IN VARCHAR2,
p_perslid_key IN NUMBER,
p_afdeling_naam IN VARCHAR2);
PROCEDURE upsertkenmerk_bez (p_kenmerk_key IN NUMBER,
p_bez_key IN NUMBER,
p_waarde IN VARCHAR2);
PROCEDURE upsertkenmerk_res(p_kenmerk_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_waarde IN VARCHAR2);
FUNCTION getOpstelling(p_room_id IN VARCHAR2)
RETURN NUMBER;
PROCEDURE checkParking(p_bezoekers_key IN NUMBER);
PROCEDURE set_ruimtes_clean(p_import_key IN NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY demo
AS
-- Zorg dat de bezoekers bij de deelreservering matchen met de genodigden bij de appointment
-- - host niet toevoegen als bezoeker
-- - AMB-en SSCA-medewerkers met een badgenummer alleen in een genodigdenlijst
-- Afspraak aanmaken of verwijderen indien nodig
-- Bezoekers aanmaken, bijwerken of verwijderen zoals nodig
-- Als vergaderruimte op kantoorverdieping (OF-ruimte), dan geen bezoekers (alleen genodigdenlijst),
-- noch voorzieningen
-- - OF = res_disc 1485 "Vergaderruimtes nw A'dam"
-- - EXCO = res_disc 1505 "Vergaderzalen 9de PA's"
-- - MC = res_disc 1445 "Vergaderzalen NW Amsterdam"
-- TODO: nu worden voor appointments met meerdere zalen waarschijnlijk de attendees bij iedere
-- deelreservering toegevoegd.
-- KFSG#57950: Voor Schiphol geldt (voor enige locatie/catalogus/activiteit) alleen externen als
-- bezoeker (en eigen medewerkers in Genodigden-kenmerk?).
PROCEDURE setBezoekers(p_import_key IN NUMBER,
p_appt_id IN VARCHAR2,
p_recur_id IN VARCHAR2,
p_rsv_ruimte_key IN NUMBER)
IS
v_debug BOOLEAN := TRUE;
v_count NUMBER (10);
c_km_key_genodigden NUMBER (10) := 181;
v_genodigden VARCHAR2 (4000);
v_afspraak_key NUMBER (10);
v_datum_old DATE;
v_eind_old DATE;
v_datum_new DATE;
v_eind_new DATE;
v_discipline_key NUMBER (10) := NULL;
-- Alle bezoekers bij deze rsv_ruimte, die niet meer in het importbestand zitten
-- AKZA#38972: zorgen dat personen die als bezoeker aangemeld waren, maar nu 'slechts' genodigde zijn, ook verwijderd worden
-- En als we toch bezig zijn: ruimtes kunnen geen bezoekers meer zijn; ook die weggooien dus.
CURSOR c_del
IS
-- Niet meer in de import
SELECT a.res_rsv_ruimte_key,
kw.bez_kenmerkwaarde_waarde bez_email,
b.*
FROM bez_afspraak a,
bez_bezoekers b,
bez_kenmerkwaarde kw
WHERE a.res_rsv_ruimte_key = p_rsv_ruimte_key
AND b.bez_afspraak_key = a.bez_afspraak_key
AND kw.bez_bezoekers_key = b.bez_bezoekers_key
AND kw.bez_kenmerk_key = 1120 -- E-mailadres Exchange
AND kw.bez_kenmerkwaarde_verwijder IS NULL
AND NOT EXISTS (SELECT 1
FROM demo_imp_exchange
WHERE UPPER(att_mail) = UPPER(kw.bez_kenmerkwaarde_waarde) )
UNION ALL
-- Naam al aanwezig in lijst van genodigden
SELECT a.res_rsv_ruimte_key,
kw.bez_kenmerkwaarde_waarde bez_email,
b.*
FROM bez_afspraak a,
bez_bezoekers b,
bez_kenmerkwaarde kw,
res_kenmerkwaarde rkw
WHERE a.res_rsv_ruimte_key = p_rsv_ruimte_key
AND b.bez_afspraak_key = a.bez_afspraak_key
AND kw.bez_bezoekers_key = b.bez_bezoekers_key
AND kw.bez_kenmerk_key = 1120 -- E-mailadres Exchange
AND kw.bez_kenmerkwaarde_verwijder IS NULL
AND rkw.res_kenmerk_key = c_km_key_genodigden
AND rkw.res_kenmerkwaarde_verwijder IS NULL
AND rkw.res_rsv_ruimte_key = a.res_rsv_ruimte_key
AND rkw.res_kenmerkreservering_waarde LIKE '%'||b.bez_afspraak_naam||'%'
UNION ALL
-- Mailadres bekend als extern ID van ruimte
SELECT a.res_rsv_ruimte_key,
kw.bez_kenmerkwaarde_waarde bez_email,
b.*
FROM bez_afspraak a,
bez_bezoekers b,
bez_kenmerkwaarde kw
WHERE a.res_rsv_ruimte_key = p_rsv_ruimte_key
AND b.bez_afspraak_key = a.bez_afspraak_key
AND kw.bez_bezoekers_key = b.bez_bezoekers_key
AND kw.bez_kenmerk_key = 1120 -- E-mailadres Exchange
AND kw.bez_kenmerkwaarde_verwijder IS NULL
AND EXISTS (SELECT 1
FROM res_ruimte
WHERE UPPER(res_ruimte_extern_id) = UPPER(kw.bez_kenmerkwaarde_waarde));
-- Voor iedere persoon kijken of dit een bekende AN-medewerker is en op welke locatie
-- Als mailadres deelnemer == mailadres organizer, dan negeren
-- Group by, zodat we voor mensen op AMB/SSCA (en AHO) alleen die werkplek overhouden (overige locaties leveren NULL)
-- AKZA#38968: ook badgenummer ophalen
CURSOR c_attendees
IS
SELECT att_mail,
COALESCE(prs_perslid_naam_full, att_name) att_name,
prs_perslid_key,
prs_afdeling_naam,
MAX(alg_locatie_key) alg_locatie_key,
MAX(alg_locatie_code) alg_locatie_code,
--badgenr,
bez_bezoekers_key
FROM (
SELECT DISTINCT att_mail, att_name
FROM demo_imp_exchange
WHERE appt_id||'|'||recur_id = p_appt_id||'|'||p_recur_id
AND att_mail != organizer
AND NOT EXISTS (SELECT 1
FROM res_ruimte
WHERE UPPER(res_ruimte_extern_id) = UPPER(att_mail) ) ) e
LEFT OUTER JOIN (
SELECT p.prs_perslid_key,
p.prs_perslid_email,
pf.prs_perslid_naam_full,
--kl.prs_kenmerklink_waarde badgenr
a.prs_afdeling_naam,
l.alg_locatie_key,
l.alg_locatie_code
FROM prs_perslid p,
prs_v_perslid_fullnames pf,
--(SELECT * FROM prs_kenmerklink
-- WHERE prs_kenmerk_key = -1 -- Badgenummer (van medewerker)
-- AND prs_kenmerklink_niveau = 'P'
-- AND prs_kenmerklink_verwijder IS NULL) kl,
prs_afdeling a,
prs_perslidwerkplek pw,
prs_werkplek w,
alg_ruimte r,
alg_verdieping v,
alg_gebouw g,
(SELECT * FROM alg_locatie
WHERE alg_locatie_key = 41) l -- SHG - Schipholgebouw
WHERE p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_email IS NOT NULL
--AND kl.prs_link_key(+) = p.prs_perslid_key
AND pf.prs_perslid_key = p.prs_perslid_key
AND a.prs_afdeling_key = p.prs_afdeling_key
AND pw.prs_perslid_key = p.prs_perslid_key
AND w.prs_werkplek_key = pw.prs_werkplek_key
AND r.alg_ruimte_key = w.prs_alg_ruimte_key
AND r.alg_ruimte_verwijder IS NULL
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND l.alg_locatie_key(+) = g.alg_locatie_key) p
ON UPPER(p.prs_perslid_email) = UPPER(att_mail)
LEFT OUTER JOIN (
SELECT b.bez_bezoekers_key,
kw.bez_kenmerkwaarde_waarde email
FROM bez_afspraak a,
bez_bezoekers b,
bez_kenmerkwaarde kw
WHERE a.res_rsv_ruimte_key = p_rsv_ruimte_key
AND b.bez_afspraak_key = a.bez_afspraak_key
AND kw.bez_bezoekers_key = b.bez_bezoekers_key
AND kw.bez_kenmerk_key = 1120 -- E-mailadres Exchange
AND kw.bez_kenmerkwaarde_verwijder IS NULL) b
ON UPPER(b.email) = UPPER(att_mail)
GROUP BY att_mail,
att_name,
prs_perslid_key,
prs_perslid_naam_full,
prs_afdeling_naam,
--badgenr,
bez_bezoekers_key;
BEGIN
v_genodigden := NULL;
SELECT COUNT(*)
INTO v_count
FROM demo_imp_exchange
WHERE appt_id||'|'||recur_id = p_appt_id||'|'||p_recur_id
AND att_mail != organizer;
IF (v_count = 0)
THEN
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key, 'Geen gasten');
END IF;
-- Lijst genodigden wissen
DELETE res_kenmerkwaarde
WHERE res_kenmerk_key = c_km_key_genodigden
AND res_rsv_ruimte_key = p_rsv_ruimte_key;
-- Afspraak wissen
v_afspraak_key := demo.getAfspraak(p_rsv_ruimte_key, 0);
IF v_afspraak_key IS NOT NULL
THEN
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key, 'Afspraak verwijderen');
END IF;
DELETE bez_afspraak
WHERE bez_afspraak_key = v_afspraak_key;
END IF;
ELSE
-- Niet-meer bekende attendees verwijderen
FOR rec IN c_del
LOOP
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key, 'Bezoeker '||rec.bez_email||' verwijderen');
END IF;
DELETE bez_kenmerkwaarde
WHERE bez_bezoekers_key = rec.bez_bezoekers_key;
DELETE bez_bezoekers
WHERE bez_bezoekers_key = rec.bez_bezoekers_key;
END LOOP;
FOR rec IN c_attendees
LOOP
-- Bepalen om wat voor soort ruimte het gaat (OF vs MC/EXCO)
IF (v_discipline_key IS NULL)
THEN
SELECT r.res_discipline_key
INTO v_discipline_key
FROM res_ruimte r,
res_ruimte_opstelling ro,
res_rsv_ruimte rr
WHERE rr.res_rsv_ruimte_key = p_rsv_ruimte_key
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key;
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key, 'Discipline = '||v_discipline_key);
END IF;
END IF;
-- AMB- of SSCA-medewerker: alleen in tekstveld zetten
-- (Zowel bij create als update hele string weer opbouwen)
-- Voor OF-ruimtes (res_disc 1485) behandelen we iedereen als AMB-/SSCA-medewerker
-- AKZA#38968: badgenummer is voortaan vereist om genodigde te zijn
-- AKZA#40274: bepaling van bezoekers/deelnemers voor ruimtes uit disc 1485 op dezelfde wijze als andere ruimtes / op verzoek van Andr<64> weer ongedaan gemaakt
-- KFSG#57950: Bovenstaande nog even laten staan. Voor Schiphol geldt dat medewerkers (@schiphol in e-mail adres) in Genodigden-veld komen.
-- TODO: Of Genodigden-veld helemaal weg???
--IF (rec.alg_locatie_key IS NOT NULL AND rec.badgenr IS NOT NULL)
IF (rec.alg_locatie_key IS NOT NULL AND INSTR (UPPER (rec.att_mail), '@SCHIPHOL.NL') > 0)
THEN
v_genodigden := v_genodigden || rec.att_name || CHR(13);
-- Overige AN-medewerkers en gasten aanmelden als bezoeker (of registratie bijwerken)
ELSE
-- Er zijn niet-AMB-/SSCA-medewerker attendees, zorgen dat er een afspraak is
IF (v_afspraak_key IS NULL)
THEN
v_afspraak_key := demo.getAfspraak(p_rsv_ruimte_key, 1);
-- Moet de afspraak verplaatst worden in de tijd?
SELECT bez_afspraak_datum,
bez_afspraak_eind,
rr.res_rsv_ruimte_van,
rr.res_rsv_ruimte_tot
INTO v_datum_old, v_eind_old, v_datum_new, v_eind_new
FROM res_rsv_ruimte rr,
bez_afspraak a
WHERE rr.res_rsv_ruimte_key = p_rsv_ruimte_key
AND a.res_rsv_ruimte_key = rr.res_rsv_ruimte_key;
IF (v_datum_old != v_datum_new OR v_eind_old != v_eind_new)
THEN
UPDATE bez_afspraak
SET bez_afspraak_datum = v_datum_new,
bez_afspraak_eind = v_eind_new
WHERE bez_afspraak_key = v_afspraak_key;
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key||', AFSPRAAK '||v_afspraak_key,
'Tijden aangepast van '
||TO_CHAR(v_datum_old,'HH24:MI')||'-'
||TO_CHAR(v_eind_old, 'HH24:MI')||' --> '
||TO_CHAR(v_datum_new,'HH24:MI')||'-'
||TO_CHAR(v_eind_new, 'HH24:MI') );
END IF;
END IF;
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key, 'AFSPRAAK '||v_afspraak_key);
END IF;
END IF;
demo.upsertBezoeker(p_import_key, v_afspraak_key, rec.bez_bezoekers_key, rec.att_mail, rec.att_name, rec.prs_perslid_key, rec.prs_afdeling_naam );
END IF;
-- Opruiming: afspraken zonder bezoekers (kan gebeuren als er alleen nog interne deelnemers zijn,
-- of de meeting is verplaatst naar een OF-ruimte)
DELETE bez_afspraak a
WHERE res_rsv_ruimte_key = p_rsv_ruimte_key
AND NOT EXISTS (SELECT 1 FROM bez_bezoekers WHERE bez_afspraak_key = a.bez_afspraak_key);
END LOOP;
IF (v_debug AND v_discipline_key IS NOT NULL) THEN
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key, 'Ruimte-catalogus = '||v_discipline_key);
fac.imp_writelog (p_import_key, 'D',
p_rsv_ruimte_key, SUBSTR('GENODIGDEN: '||CHR(13) ||v_genodigden, 1, 1000) );
END IF;
demo.upsertkenmerk_res(c_km_key_genodigden, p_rsv_ruimte_key, v_genodigden );
END IF;
END;
-- Haalt bestaande afspraak bij rsv_ruimte op, of maakt een nieuwe
FUNCTION getAfspraak (p_rsv_ruimte_key IN NUMBER,
p_createnew IN NUMBER)
RETURN NUMBER
IS
v_count NUMBER;
r_afspraak_key NUMBER;
BEGIN
r_afspraak_key := NULL;
--Bestaat er al een afspraak?
SELECT COUNT(*)
INTO v_count
FROM bez_afspraak
WHERE res_rsv_ruimte_key IS NOT NULL
AND res_rsv_ruimte_key = p_rsv_ruimte_key;
-- Nee, maak eerst een nieuwe, mits createnew = 1
IF (v_count = 0 AND p_createnew = 1)
THEN
INSERT INTO bez_afspraak (
prs_perslid_key,
bez_afspraak_datum,
bez_actie_key,
bez_afspraak_ruimte,
bez_afspraak_opmerking,
bez_afspraak_eind,
alg_locatie_key,
alg_onrgoed_keys,
bez_afspraak_host_key,
bez_afspraak_contact_key,
res_rsv_ruimte_key)
SELECT rr.res_rsv_ruimte_contact_key,
rr.res_rsv_ruimte_van,
NULL,
SUBSTR (r.res_ruimte_nr, 1, 30),
SUBSTR ('Overgenomen uit Exchange', 1, 320),
rr.res_rsv_ruimte_tot,
g.alg_locatie_key,
MIN(rar.alg_ruimte_key),
rr.res_rsv_ruimte_host_key,
rr.res_rsv_ruimte_contact_key,
rr.res_rsv_ruimte_key
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r,
res_alg_ruimte rar,
alg_v_aanwezigruimte ar,
alg_verdieping v,
alg_gebouw g
WHERE rr.res_rsv_ruimte_key = p_rsv_ruimte_key
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND rar.res_ruimte_key = r.res_ruimte_key
AND rar.res_alg_ruimte_verwijder IS NULL
AND ar.alg_ruimte_key = rar.alg_ruimte_key
AND v.alg_verdieping_key = ar.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
GROUP BY rr.res_rsv_ruimte_contact_key, rr.res_rsv_ruimte_van, r.res_ruimte_nr,
rr.res_rsv_ruimte_tot, g.alg_locatie_key, rr.res_rsv_ruimte_host_key,
rr.res_rsv_ruimte_contact_key, rr.res_rsv_ruimte_key;
-- TODO:
-- BEGIN fac.trackaction('BEZMUT', -1, 3, NULL, NULL); END;
END IF;
-- Haal bestaande / nieuwe key op (RETURNING kan niet met een INSERT .. SELECT)
-- (alleen als we er net een hebben aangemaakt of er al een was
IF NOT (v_count = 0 AND p_createnew = 0)
THEN
SELECT bez_afspraak_key
INTO r_afspraak_key
FROM bez_afspraak
WHERE res_rsv_ruimte_key IS NOT NULL
AND res_rsv_ruimte_key = p_rsv_ruimte_key;
END IF;
RETURN r_afspraak_key;
END;
PROCEDURE upsertBezoeker (p_import_key IN NUMBER,
p_afspraak_key IN NUMBER,
p_bezoekers_key IN NUMBER,
p_att_mail IN VARCHAR2,
p_att_name IN VARCHAR2,
p_perslid_key IN NUMBER,
p_afdeling_naam IN VARCHAR2)
IS
v_debug BOOLEAN := TRUE;
v_bez_flags NUMBER (10);
v_bezoekers_key NUMBER (10);
v_count NUMBER;
BEGIN
v_bez_flags := 0;
-- AN-medewerkers op overige locaties:
-- aanmelden als bezoeker (met perslid_key, als bekend), zonder (mogelijkheid tot) parkeerplaats
-- flags (AKZA#34209)
-- 2: andere locatie
-- 16: geen parkeerplaats mogelijk
IF (UPPER(p_att_mail) LIKE '%@SCHIPHOL.NL')
THEN
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_afspraak_key, 'SG-mw '||p_att_name|| ' ('||COALESCE(TO_CHAR(p_perslid_key), p_att_mail)||')');
END IF;
v_bez_flags := 2 + 16;
-- Gasten: aanmelden als gewone bezoeker (zonder perslid_key), met parkeerplaats
-- flags = 0
ELSE
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
p_afspraak_key, 'Gast '||p_att_name|| ' ('||p_att_mail||')');
END IF;
v_bez_flags := 0;
END IF;
-- Bestaat bezoeker al bij deelreservering? Dan alleen basisgegevens bijwerken
IF (p_bezoekers_key IS NOT NULL)
THEN
-- Bijwerken
UPDATE bez_bezoekers
SET prs_perslid_key = p_perslid_key,
bez_afspraak_naam = SUBSTR(p_att_name, 1, 30),
bez_afspraak_bedrijf = SUBSTR(p_afdeling_naam, 1, 60),
bez_bezoekers_flags = v_bez_flags
WHERE bez_bezoekers_key = p_bezoekers_key;
-- Als deze bezoeker een parkeerplaats heeft, probeer dan een nieuwe te claimen
-- alg_gebouw "SHG" 48
IF ( bez.hasparking(p_bezoekers_key) = 1)
THEN
DELETE FROM res_rsv_deel
WHERE bez_bezoekers_key = p_bezoekers_key;
IF ( BITAND(v_bez_flags, 16) = 0)
THEN
bez.claim_parking(p_bezoekers_key, 48);
END IF;
-- TODO: track?
END IF;
-- Nieuwe bezoeker: toevoegen, plus parkeerplaats en mailadres
ELSE
INSERT INTO bez_bezoekers (
bez_afspraak_key,
prs_perslid_key,
bez_afspraak_naam,
bez_afspraak_bedrijf,
bez_bezoekers_flags)
VALUES (
p_afspraak_key,
p_perslid_key,
SUBSTR(p_att_name, 1, 30),
SUBSTR(p_afdeling_naam, 1, 60),
v_bez_flags)
RETURNING bez_bezoekers_key INTO v_bezoekers_key;
-- Voor nieuwe gasten een parkeerplek claimen
-- alg_gebouw "SHG" 48
IF ( BITAND(v_bez_flags, 16) = 0)
THEN
bez.claim_parking(v_bezoekers_key, 48);
END IF;
-- Mailadres opslaan
-- bez_kenmerk E-mail 1120
demo.upsertkenmerk_bez(1120, v_bezoekers_key, p_att_mail);
END IF;
-- TODO: tracking; liefst geen aparte regel per bezoeker
-- fac.trackaction('BEZMUT', p_afspraak_key, NULL, NULL, 'Bezoeker '||p_att_name||' toegevoegd/gewijzigd');
END;
PROCEDURE upsertkenmerk_bez (p_kenmerk_key IN NUMBER,
p_bez_key IN NUMBER,
p_waarde IN VARCHAR2)
IS
v_count NUMBER;
BEGIN
SELECT COUNT ( * )
INTO v_count
FROM bez_kenmerkwaarde
WHERE bez_bezoekers_key = p_bez_key
AND bez_kenmerk_key = p_kenmerk_key
AND bez_kenmerkwaarde_verwijder IS NULL;
IF v_count = 1
THEN
IF p_waarde IS NULL
THEN
DELETE bez_kenmerkwaarde
WHERE bez_bezoekers_key = p_bez_key
AND bez_kenmerk_key = p_kenmerk_key
AND bez_kenmerkwaarde_verwijder IS NULL;
ELSE
UPDATE bez_kenmerkwaarde
SET bez_kenmerkwaarde_waarde = p_waarde
WHERE bez_bezoekers_key = p_bez_key
AND bez_kenmerk_key = p_kenmerk_key
AND bez_kenmerkwaarde_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
THEN
INSERT INTO bez_kenmerkwaarde (bez_kenmerk_key,
bez_bezoekers_key,
bez_kenmerkwaarde_waarde)
VALUES (p_kenmerk_key,
p_bez_key,
p_waarde);
END IF;
END IF;
END;
PROCEDURE upsertkenmerk_res(p_kenmerk_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_waarde IN VARCHAR2)
IS
v_count NUMBER;
BEGIN
SELECT COUNT ( * )
INTO v_count
FROM res_kenmerkwaarde
WHERE res_rsv_ruimte_key = p_rsv_ruimte_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
IF v_count = 1
THEN
IF p_waarde IS NULL
THEN
DELETE res_kenmerkwaarde
WHERE res_rsv_ruimte_key = p_rsv_ruimte_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
ELSE
UPDATE res_kenmerkwaarde
SET res_kenmerkreservering_waarde = p_waarde
WHERE res_rsv_ruimte_key = p_rsv_ruimte_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
THEN
INSERT INTO res_kenmerkwaarde (res_kenmerk_key,
res_rsv_ruimte_key,
res_kenmerkreservering_waarde)
VALUES (p_kenmerk_key,
p_rsv_ruimte_key,
p_waarde);
END IF;
END IF;
END;
-- Zoek de default (of anders oudste) opstelling bij de ruimte obv room-id
FUNCTION getOpstelling(p_room_id IN VARCHAR2)
RETURN NUMBER
IS
v_ruimte_opstel_key NUMBER (10);
BEGIN
v_ruimte_opstel_key := NULL;
SELECT COALESCE(ro1.res_ruimte_opstel_key, ro2.res_ruimte_opstel_key) res_ruimte_opstel_key
INTO v_ruimte_opstel_key
FROM res_ruimte r,
(SELECT * FROM res_ruimte_opstelling
WHERE res_ruimte_opstel_verwijder IS NULL
AND res_ruimte_opstel_default = 1) ro1,
(SELECT * FROM res_ruimte_opstelling
WHERE res_ruimte_opstel_verwijder IS NULL) ro2
WHERE r.res_ruimte_extern_id = p_room_id
AND r.res_ruimte_verwijder IS NULL
AND COALESCE(r.res_ruimte_vervaldatum, SYSDATE+1) > SYSDATE
AND ro1.res_ruimte_key(+) = r.res_ruimte_key
AND ro2.res_ruimte_key = r.res_ruimte_key
AND ro2.res_ruimte_opstel_key = (SELECT MIN(res_ruimte_opstel_key)
FROM res_ruimte_opstelling
WHERE res_ruimte_opstel_verwijder IS NULL
AND res_ruimte_key = r.res_ruimte_key);
RETURN v_ruimte_opstel_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN NULL;
END;
-- Aangeroepen vanuit bez_postsave hook. Controleert of deze bezoeker wel een parkeerplaats
-- mag hebben (obv bez_bezoekers_flags) en verwijdert zonodig
PROCEDURE checkParking(p_bezoekers_key IN NUMBER)
IS
v_bez_flags bez_bezoekers.bez_bezoekers_flags%TYPE;
v_rsv_deel_key NUMBER (10);
BEGIN
-- Haal bezoeker-flags op, en een eventuele
SELECT b.bez_bezoekers_flags, rd.res_rsv_deel_key
INTO v_bez_flags, v_rsv_deel_key
FROM bez_bezoekers b,
(SELECT * FROM res_rsv_deel
WHERE res_rsv_deel_verwijder IS NULL) rd
WHERE b.bez_bezoekers_key = p_bezoekers_key
AND rd.bez_bezoekers_key(+) = b.bez_bezoekers_key;
-- Bezoeker mag geen parkeerplaats, maar heeft er wel een --> weg ermee!
-- bits: +1 Medewerker uit eigen locatie, is waarschijnlijk al binnen
-- +2 Medewerker van andere locatie (heeft doorgaans bedrijfspasje)
-- +4 Deelnemer die niet fysiek komt (Skype/Video conference)
-- +8 Bezoekers meldt zich niet aan de balie (waarschijnlijk bij een +1/2/4)
-- +16 Geen parkeerplaats toe (te) kennen of af te pakken (vaak icm. +1/2/4)
IF ( BITAND(v_bez_flags, 31) != 0 AND v_rsv_deel_key IS NOT NULL)
THEN
DELETE res_rsv_deel
WHERE res_rsv_deel_key = v_rsv_deel_key;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;
-- Welbeschouwd kunnen door de Exchange-constraints ruimte reserveringen nooit overlappen
-- Als er in FACILITOR toch een overlap is ontstaan is dat eigenlijk een gebrek van
-- de synchronisatie procedure
-- Daarom veronderstellen wij dat toch degene die dirty was geworden de waarheid is
-- en de 'andere' dirty had moeten worden of sterker nog: we verwijderen de andere
PROCEDURE set_ruimtes_clean(p_import_key IN NUMBER)
IS
dirtlevel res_rsv_ruimte.res_rsv_ruimte_dirtlevel%TYPE;
v_errorhint VARCHAR2 (1000);
CURSOR c_prsv_ruimte_new
IS
SELECT rr.res_rsv_ruimte_key,
r.res_ruimte_key,
res_rsv_ruimte_van,
res_reservering_key,
res_rsv_ruimte_volgnr
FROM res_ruimte r, res_ruimte_opstelling ro, res_rsv_ruimte rr
WHERE ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND res_rsv_ruimte_dirtlevel = 512 -- alleen ruimteoverlap corrigeren we
AND res_rsv_ruimte_verwijder IS NULL
AND res_ruimte_extern_id IS NOT NULL
AND res_rsv_ruimte_van > TRUNC (SYSDATE)
ORDER BY res_rsv_ruimte_key DESC
FOR UPDATE OF res_rsv_ruimte_dirtlevel;
BEGIN
FOR prsv_ruimte_new IN c_prsv_ruimte_new
LOOP
-- Wij in ieder geval niet meer dirty
v_errorhint := 'Cleanup reservering '
|| TO_CHAR(prsv_ruimte_new.res_reservering_key) || '/' || prsv_ruimte_new.res_rsv_ruimte_volgnr
|| ' (' || TO_CHAR(prsv_ruimte_new.res_rsv_ruimte_key) || ')';
fac.imp_writelog (p_import_key, 'I', v_errorhint, '');
UPDATE res_rsv_ruimte
SET res_rsv_ruimte_dirtlevel = 0
WHERE CURRENT OF c_prsv_ruimte_new; -- geen tracking
-- Controleer alle andere reserveringen op die dag in die zaal om te weten welke
-- ons dirty had gemaakt
FOR prsv_ruimte_old
IN (SELECT rr.res_rsv_ruimte_key,
res_rsv_ruimte_van,
res_rsv_ruimte_tot,
res_reservering_key,
res_rsv_ruimte_volgnr
FROM res_ruimte r, res_ruimte_opstelling ro, res_rsv_ruimte rr
WHERE r.res_ruimte_key = prsv_ruimte_new.res_ruimte_key
AND rr.res_rsv_ruimte_key <> prsv_ruimte_new.res_rsv_ruimte_key
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND BITAND(res_rsv_ruimte_dirtlevel, 512) = 0
AND res_rsv_ruimte_verwijder IS NULL
AND res_rsv_ruimte_van BETWEEN TRUNC(prsv_ruimte_new.res_rsv_ruimte_van)
AND TRUNC(prsv_ruimte_new.res_rsv_ruimte_van) + 1)
LOOP
-- Degene die met ons overlapte zal dirty worden nu wij vrij zijn
v_errorhint := 'Checking reservering '
|| TO_CHAR(prsv_ruimte_old.res_reservering_key) || '/' || prsv_ruimte_old.res_rsv_ruimte_volgnr
|| ' (' || TO_CHAR(prsv_ruimte_old.res_rsv_ruimte_key) || ')';
fac.imp_writelog (p_import_key, 'D', v_errorhint, '');
res.set_ruimte_dirty (prsv_ruimte_old.res_rsv_ruimte_key); -- deze houdt rekening met schoonmaaak
SELECT res_rsv_ruimte_dirtlevel
INTO dirtlevel
FROM res_rsv_ruimte
WHERE res_rsv_ruimte_key = prsv_ruimte_old.res_rsv_ruimte_key;
IF BITAND(dirtlevel, 512) <> 0
THEN
v_errorhint := 'Remove dirty reservering '
|| TO_CHAR(prsv_ruimte_old.res_reservering_key) || '/' || prsv_ruimte_old.res_rsv_ruimte_volgnr
|| ' (' || TO_CHAR(prsv_ruimte_old.res_rsv_ruimte_key);
fac.imp_writelog (p_import_key, 'I', v_errorhint, '');
UPDATE res_rsv_ruimte
SET res_status_fo_key = 1, -- nooit doorbelasten
res_rsv_ruimte_verwijder = SYSDATE
WHERE res_rsv_ruimte_key = prsv_ruimte_old.res_rsv_ruimte_key;
fac.trackaction ('RESDEL', prsv_ruimte_old.res_rsv_ruimte_key, NULL, SYSDATE, NULL);
res.set_ruimtes_clean (prsv_ruimte_old.res_rsv_ruimte_van); -- onwaarschijnlijk
res.follow_artikel (prsv_ruimte_old.res_rsv_ruimte_key,
prsv_ruimte_old.res_rsv_ruimte_van,
prsv_ruimte_old.res_rsv_ruimte_tot);
res.follow_deel (prsv_ruimte_old.res_rsv_ruimte_key,
prsv_ruimte_old.res_rsv_ruimte_van,
prsv_ruimte_old.res_rsv_ruimte_tot);
v_errorhint := 'res_reservering verwijderen';
UPDATE res_reservering
SET res_reservering_verwijder = SYSDATE
WHERE res_reservering_key = prsv_ruimte_old.res_reservering_key
AND NOT EXISTS
(SELECT *
FROM res_v_aanwezigrsv_ruimte
WHERE res_reservering_key = prsv_ruimte_old.res_reservering_key);
END IF;
END LOOP;
END LOOP;
END;
-- Bepaal aantal dagen in begin- of eindperiode waarvoor huur betaald moet worden
-- Periode moet binnen dezelfde kalendermaand liggen.
-- Als p_periode_tot leeg is, gaan we uit van het einde van de maand
-- Als p_van en/of p_tot leeg zijn, dan zetten we die op begin resp. eind van de periode
FUNCTION getAantalDagenInPeriode(p_van IN DATE,
p_tot IN DATE,
p_periode_van IN DATE,
p_periode_tot IN DATE := NULL)
RETURN NUMBER
IS
o_aantal_dagen NUMBER(4);
v_periode_tot DATE;
v_van DATE;
v_tot DATE;
BEGIN
-- Einddatum van de periode die we beschouwen.
-- Als geen einddatum, dan einde van de maand (startdatum zou dan eerste dag van de maand moeten zijn)
v_periode_tot := COALESCE( p_periode_tot, LAST_DAY(p_periode_van) );
-- Valt periode (p_van - p_tot) geheel buiten (p_periode_van - p_periode_tot)? Dan nul dagen overlap!
IF ( p_tot < p_periode_van
OR p_van > p_periode_tot)
THEN
RETURN 0;
END IF;
-- Aantal dagen is maximaal de hele periode
o_aantal_dagen := CAST( TO_CHAR(v_periode_tot, 'DD') AS INT)
- CAST( TO_CHAR(p_periode_van, 'DD') AS INT)
+ 1;
v_van := p_van;
v_tot := p_tot;
-- Als geen van/tot datum opgegeven, of als van/tot datum buiten periode valt,
-- dan zet op begin-/einddatum van de periode (periode)
IF (v_van IS NULL OR v_van < p_periode_van)
THEN
v_van := p_periode_van;
END IF;
IF (v_tot IS NULL OR v_tot > v_periode_tot)
THEN
v_tot := v_periode_tot;
END IF;
-- Beslaat het contract de volledige periode, of beginnen/eindigen we halverwege?
-- DAN:
-- - ingangsmaand is hetzelfde als van huidige periode
-- - ingangsdag is later dan de eerste dag van de periode
-- EN/OF:
-- - eindmaand is hetzelfde als van huidige periode
-- - einddag is eerder dan de laatste dag van de periode
IF ( ( TRUNC(v_van, 'MM') = TRUNC(p_periode_van, 'MM')
AND TRUNC(v_van, 'DD') > p_periode_van )
OR ( TRUNC(v_tot, 'MM') = TRUNC(v_periode_tot, 'MM')
AND TRUNC(v_tot, 'DD') < v_periode_tot ) )
THEN
-- prijsfactor = aantal_dagen_gehuurd / aantal_dagen_in_deze_periode
-- = einddag - begindag + 1 / aantal_dagen_in_deze_periode
o_aantal_dagen := ( CAST( TO_CHAR(v_tot, 'DD') AS INT)
- CAST( TO_CHAR(v_van, 'DD') AS INT)
+ 1 );
END IF;
RETURN o_aantal_dagen;
END;
PROCEDURE refreshscore(pUserKey IN NUMBER)
AS
BEGIN
-- Waarden van de huidige periode(s) verwijderen.
-- TODO: tricky met KPI's op basis van storingsmeldingen, klachten etc; daar kan voor een
-- periode maar zo een extra melding afgemeld worden, waardoor de score opnieuw berekend wordt
DELETE kpi_score
WHERE (kpi_definitie_key, kpi_score_datum, alg_locatie_key) IN (
SELECT DISTINCT kpi_definitie_key, kpi_score_datum, alg_locatie_key
FROM demo_v_kpi_all);
-- Opnieuw genereren van KPI scores
INSERT INTO kpi_score (
kpi_definitie_key,
kpi_score_datum,
alg_locatie_key,
kpi_score_xmlnode,
kpi_score_refkey,
kpi_score_score,
kpi_score_norm_score,
kpi_score_drempels)
SELECT * FROM demo_v_kpi_all;
COMMIT;
END;
END;
/
--------------------------------------------------------------------------------------------------
------------------------------- IMPORT -----------------------------------------------------------
--------------------------------------------------------------------------------------------------
-- Met behulp van demo_imp_exchange.gelukt kunnen importregels bewaard worden, zodat mutaties
-- aan appointments die gefaald zijn, alsnog kunnen worden doorgevoerd. Betekenis waarden 'gelukt':
-- NULL = niet correct verwerkt in vorige import --> nogmaals proberen
-- 1 = succesvol verwerkt in vorige import --> importregel verwijderen
-- 2 = er is in een latere import een nieuwere status van dezelfde appointment ingelezen,
-- dus deze importregel is outdated --> regel verwijderen
CREATE OR REPLACE PROCEDURE demo_import_exchange (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
c_max_errors NUMBER := 100;
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
v_import_filenaam fac_import.fac_import_filenaam%TYPE;
v_ruimte_id res_ruimte.res_ruimte_extern_id%TYPE;
-- De importvelden:
v_room_id VARCHAR2 (200);
v_subject VARCHAR2 (200);
v_starttime VARCHAR2 (100);
v_endtime VARCHAR2 (100);
v_organizer VARCHAR2 (200);
v_att_mail VARCHAR2 (200);
v_att_name VARCHAR2 (200);
v_modifier VARCHAR2 (100);
v_appt_id VARCHAR2 (500);
v_recur_id VARCHAR2 (500);
v_seq_nr VARCHAR2 (100);
d_starttime DATE;
d_endtime DATE;
n_seq_nr NUMBER(13);
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- AKZA#36457: de ID van de ruimte is niet meer uit de inhoud van de XML te halen.
-- Dan maar de bestandsnaam gebruiken (refkey is niet handig, want dan moeten we voor
-- elke room de import draaien).
SELECT r.res_ruimte_extern_id, i.fac_import_filenaam
INTO v_ruimte_id, v_import_filenaam
FROM res_ruimte r, fac_import i
WHERE i.fac_import_key = p_import_key
AND r.res_ruimte_verwijder IS NULL
AND r.res_ruimte_extern_id IS NOT NULL
AND UPPER(i.fac_import_filenaam) LIKE '%'||UPPER(r.res_ruimte_extern_id)||'%';
fac.imp_writelog (p_import_key, 'S',
'Start inlezen importbestand in importtabel',
v_import_filenaam );
-- We willen mislukte regels uit eerdere imports bewaren, zodat we die nog eens kunnen proberen.
-- Alle correct verwerkte importregels krijgen een vlag, dus die gooien we weg.
DELETE FROM demo_imp_exchange
WHERE gelukt IS NOT NULL;
-- We gaan uit van een geldig bestand, mogelijk verandert dat onderweg
header_is_valid := 0;
v_ongeldig := 0;
v_count_tot := 0;
v_count_error := 0;
v_count_import := 0;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_aanduiding := '';
d_starttime := NULL;
d_endtime := NULL;
v_errorhint := 'Fout bij opvragen te importeren rij';
-- Lees alle veldwaarden
-- AKZA#36457: room ID wordt voortaan opgehaald uit de bestandsnaam van de import
v_room_id := v_ruimte_id;
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_subject);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_starttime);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_endtime);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_organizer);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_att_mail);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_att_name);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_modifier);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_appt_id);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_recur_id);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_seq_nr);
v_aanduiding := '[' || v_room_id || '|' || v_starttime || '|' || v_att_mail || '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
-- NB: doordat deze import een stylesheet gebruikt, zullen deze kolommen altijd kloppen,
-- ook al wordt een verkeerd bestand ingelezen (mits de stylesheet klopt)
IF (header_is_valid = 0)
THEN
IF UPPER(v_subject) = 'SUBJECT'
AND UPPER(v_starttime) = 'STARTTIME'
THEN
header_is_valid := 1;
END IF;
ELSE
-- Bij volgende importbestanden headerregels overslaan
IF UPPER(v_subject) = 'SUBJECT'
AND UPPER(v_starttime) = 'STARTTIME'
THEN
CONTINUE;
END IF;
v_count_tot := v_count_tot + 1;
-- Controleer tijden
v_errorhint := 'Ongeldige starttijd';
v_starttime := TRIM(v_starttime);
IF ( fac.safe_to_date(v_starttime, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') IS NOT NULL)
THEN
d_starttime := CAST (
(FROM_TZ (
CAST (fac.safe_to_date(v_starttime, 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
AS TIMESTAMP),
'+00:00') AT TIME ZONE 'Europe/Amsterdam')
AS DATE);
ELSE
v_ongeldig := 1;
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key, 'W',
v_aanduiding || 'Starttijd ontbreekt',
'' );
END IF;
v_errorhint := 'Ongeldige eindtijd';
v_endtime := TRIM(v_endtime);
IF ( fac.safe_to_date(v_endtime, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') IS NOT NULL)
THEN
d_endtime := CAST (
(FROM_TZ (
CAST (fac.safe_to_date(v_endtime, 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
AS TIMESTAMP),
'+00:00') AT TIME ZONE 'Europe/Amsterdam')
AS DATE);
ELSE
v_ongeldig := 1;
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key, 'W',
v_aanduiding || 'Eindtijd ontbreekt',
'' );
END IF;
v_errorhint := 'Opschonen naam bezoeker';
v_att_name := TRIM(BOTH '''' FROM v_att_name);
v_errorhint := 'Ongeldig sequence nr';
v_seq_nr := TRIM(v_seq_nr);
IF ( fac.safe_to_number(v_seq_nr) IS NOT NULL)
THEN
n_seq_nr := fac.safe_to_number(v_seq_nr);
ELSE
v_ongeldig := 1;
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key, 'W',
v_aanduiding || 'Sequence nr ontbreekt',
'' );
END IF;
-- Insert geformatteerde import record,
-- mits het een toekomstige appointment betreft
IF (v_ongeldig = 0 AND d_starttime > SYSDATE)
THEN
BEGIN
v_errorhint := 'Fout bij toevoegen regel aan importtabel';
INSERT INTO demo_imp_exchange
(room_id,
subject,
starttime,
endtime,
organizer,
att_mail,
att_name,
modifier,
appt_id,
recur_id,
seq_nr,
fac_import_key)
VALUES
(v_room_id,
v_subject,
d_starttime,
d_endtime,
v_organizer,
v_att_mail,
v_att_name,
SUBSTR(v_modifier, 1, 1),
v_appt_id,
v_recur_id,
n_seq_nr,
p_import_key);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ': ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
v_ongeldig := 1;
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand! Geen header of header niet volgens specificatie.',
'Heeft u wel het juiste bestand ingelezen?'
);
ELSIF (v_ongeldig = 1)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand! Bestand bevat een of meer ongeldige regels.',
''
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'Importbestand succesvol ingelezen: '
|| TO_CHAR (v_count_import) || ' regels (deelnemers).',
''
);
END IF;
COMMIT;
-- demo_import_exchange() wordt voor elk importbestand aangeroepen. Dat gebeurt steeds met dezelfde
-- fac_import_key, dus er kan achteraf niet bepaald worden welke importregels bij welk bestand (en
-- dus welke ruimte horen. Daarom fac_imp_file handmatig legen, zodat we bij het volgende bestand
-- met een schone lei beginnen.
DELETE FROM fac_imp_file
WHERE fac_import_key = p_import_key;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
-- AKZA#38120: ook als er iets mis gaat bij inlezen (bijvoorbeeld de extern_id bestaat niet, of
-- komt vaker voor) de importregels weggooien, anders worden ze bij de volgende ruimte ingelezen.
-- Liever niets inlezen (totdat de situatie verholpen is), dan fout inlezen.
DELETE FROM fac_imp_file
WHERE fac_import_key = p_import_key;
COMMIT;
END demo_import_exchange;
/
CREATE OR REPLACE PROCEDURE demo_update_exchange (
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
v_ruimte_extern_id res_ruimte.res_ruimte_extern_id%TYPE;
v_count_wanted NUMBER (10);
v_count_all_booked NUMBER (10);
v_count_all_needed NUMBER (10);
v_ongeldig NUMBER (1);
v_debug BOOLEAN := TRUE;
c_activiteit_key NUMBER (10) := 1; -- Vergadering vanuit Exchange
v_reservering_key NUMBER (10);
v_rsv_ruimte_volgnr res_rsv_ruimte.res_rsv_ruimte_volgnr%TYPE;
v_ruimte_opstel_key NUMBER (10);
v_rsv_ruimte_key NUMBER (10);
v_perslid_key NUMBER (10);
v_kostenplaats_key NUMBER (10);
v_status_fo_key NUMBER (10);
v_discipline_key NUMBER (10);
v_code VARCHAR2(7);
-- ANNULEREN
-- Eerst alle toekomstige reserveringen waar geen appointments meer bij zijn annuleren, zodat
-- ruimte ontstaat voor nieuwe/omgeboekte reserveringen.
-- Triggers voor het annuleren van een deelreservering:
-- - DELETE-modifier in synchro; appointment is verwijderd
-- - UPDATE-modifier in synchro, met bekend appointment-ID, maar zonder resource: de appointment
-- bestaat nog, maar is niet meer in een bekende zaal (TODO: krijgen we die dan als UPD, of als DEL?)
-- - UPDATE-modifier in synchro, met bekend appointment-ID, maar voorheen zonder recurrence-ID (= single)
-- en nu met recurrence-ID (= occurence). Die single verwijderen, daarna de occurences toevoegen.
-- NB: checken of in deze synchro een appointment niet zowel toegevoegd/bijgewerkt als verwijderd is;
-- dan hoeven we 'm natuurlijk niet meer toe te voegen / bij te werken.
-- (TODO: weet niet of dat <20>berhaupt voorkomt met EWS)
-- TODO: notificeren
CURSOR c_del
IS
SELECT 'Cancelled' reden,
i.*,
rr.*
FROM (SELECT DISTINCT room_id,
subject,
starttime,
endtime,
organizer,
modifier,
appt_id,
recur_id
FROM demo_imp_exchange
WHERE modifier = 'D'
AND starttime > SYSDATE
AND gelukt IS NULL) i,
res_rsv_ruimte rr
WHERE rr.res_rsv_ruimte_externnr IS NOT NULL
AND rr.res_rsv_ruimte_externnr LIKE i.appt_id||'|'||i.recur_id||'|%'
AND rr.res_rsv_ruimte_verwijder IS NULL
UNION ALL
SELECT 'Unknown room' reden,
i.*,
rr.*
FROM (SELECT DISTINCT room_id,
subject,
starttime,
endtime,
organizer,
modifier,
appt_id,
recur_id
FROM demo_imp_exchange
WHERE modifier = 'U'
AND starttime > SYSDATE
AND gelukt IS NULL) i,
res_rsv_ruimte rr
WHERE rr.res_rsv_ruimte_externnr LIKE i.appt_id||'|'||i.recur_id||'|%'
AND rr.res_rsv_ruimte_verwijder IS NULL
AND NOT EXISTS (SELECT 1
FROM res_ruimte
WHERE res_ruimte_extern_id = i.room_id
AND res_ruimte_verwijder IS NULL)
UNION ALL
-- AKZA#35459: appointments die eerst single waren en nu recurring (eerst geen
-- recur_id, nu wel). Daar kan vanalles mee gebeurd zijn (andere ruimte, ander tijdstip,
-- meerdere ruimtes). Dan maar verwijderen en opnieuw aanmaken...
-- (recur_id en tijden niet ophalen, anders wordt de 'oude' single voor elke recurrence verwijderd)
SELECT 'Made recurring' reden,
i.*,
rr.*
FROM (SELECT DISTINCT room_id,
subject,
NULL starttime,
NULL endtime,
organizer,
modifier,
appt_id,
NULL recur_id
FROM demo_imp_exchange
WHERE modifier = 'U'
AND starttime > SYSDATE
AND recur_id IS NOT NULL
AND gelukt IS NULL) i,
res_rsv_ruimte rr
WHERE rr.res_rsv_ruimte_externnr LIKE i.appt_id||'||%'
AND rr.res_rsv_ruimte_verwijder IS NULL;
-- TODO: Voor later: res_cat_t1 en res_t1 gebruiken ipv TRUNC
CURSOR c_del_doorbelast (p_rsv_ruimte_key IN NUMBER)
IS
SELECT soort, ref_key, oms, van,
fac.safe_to_number(SYSDATE - TRUNC(SYSDATE)) * 24 uren,
DECODE( exp_tijd,
NULL, van - exp_dagen,
DECODE( SIGN(exp_tijd - fac.safe_to_number(SYSDATE - TRUNC(SYSDATE)) * 24),
1, TRUNC(van),
TRUNC(van) + 1
)
) t_expire,
exp_dagen, exp_tijd, cnl_dagen
FROM (
SELECT 'ruimte' soort,
rr.res_rsv_ruimte_key ref_key,
r.res_ruimte_nr oms,
rr.res_rsv_ruimte_van van,
dp.res_disc_params_kosten kosten,
dp.res_disc_params_expire_dagen exp_dagen,
dp.res_disc_params_expire_tijd exp_tijd,
dp.res_disc_params_cancel_dagen cnl_dagen
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r,
res_discipline d,
res_disc_params dp
WHERE rr.res_rsv_ruimte_key = p_rsv_ruimte_key
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND d.ins_discipline_key = r.res_discipline_key
AND dp.res_ins_discipline_key = d.ins_discipline_key
AND dp.res_disc_params_kosten > 0
UNION ALL
SELECT 'artikel' soort,
ra.res_rsv_artikel_key,
a.res_artikel_omschrijving,
ra.res_rsv_artikel_levering,
dp.res_disc_params_kosten,
dp.res_disc_params_expire_dagen,
dp.res_disc_params_expire_tijd,
dp.res_disc_params_cancel_dagen
FROM res_rsv_artikel ra,
res_artikel a,
res_discipline d,
res_disc_params dp
WHERE ra.res_rsv_ruimte_key = p_rsv_ruimte_key
AND a.res_artikel_key = ra.res_artikel_key
AND d.ins_discipline_key = a.res_discipline_key
AND dp.res_ins_discipline_key = d.ins_discipline_key
AND dp.res_disc_params_kosten > 0
UNION ALL
SELECT 'deel' soort,
rd.res_rsv_deel_key,
de.res_deel_omschrijving,
rd.res_rsv_deel_van,
dp.res_disc_params_kosten,
dp.res_disc_params_expire_dagen,
dp.res_disc_params_expire_tijd,
dp.res_disc_params_cancel_dagen
FROM res_rsv_deel rd,
res_deel de,
res_discipline d,
res_disc_params dp
WHERE rd.res_rsv_ruimte_key = p_rsv_ruimte_key
AND de.res_deel_key = rd.res_deel_key
AND d.ins_discipline_key = de.res_discipline_key
AND dp.res_ins_discipline_key = d.ins_discipline_key
AND dp.res_disc_params_kosten > 0);
-- BIJWERKEN
-- Triggers voor het bijwerken van een bestaande toekomstige deelreservering:
-- - UPDATE-modifier in synchro, met bekend appointment-ID en bekende resource(s) (zonder bekende resource
-- krijgen we 'm niet eens binnen)
-- TODO: combi van appt_id, recur_id en room_id!
-- Dan checken of het nog wel om dezelfde resources (ruimtes) gaat, tijden zijn aangepast, deelnemers gewijzigd,
-- andere omschrijving, ...
-- - Omschrijving kan zonder notificatie aangepast worden
-- - Andere ruimte --> Moet er worden doorbelast? Voorwaarden voor catering hetzelfde (van MC naar OF bijv)?
-- TODO: notificeren
-- - Deelnemers erbij / eraf --> Bezoekers toevoegen / verwijderen, deelnemerslijst bijwerken.
-- TODO: notificeren
-- NB: checken of in deze synchro een appointment niet zowel bijgewerkt als verwijderd is;
-- dan hoeven we 'm natuurlijk niet meer bij te werken (weet niet of dat <20>berhaupt voorkomt met EWS)
-- TODO: dit detecteert geen room changes, alleen mutaties aan res op dezelfde ruimte.
CURSOR c_upd
IS
SELECT i.*,
rr.*,
rnew.res_ruimte_key,
rnew.res_ruimte_nr,
rnew.res_ruimte_extern_id,
rnew.res_discipline_key
FROM (SELECT room_id,
subject,
starttime,
endtime,
organizer,
modifier,
appt_id,
recur_id,
COUNT(*) num_bez
FROM demo_imp_exchange
WHERE modifier = 'U'
AND starttime > SYSDATE
AND gelukt IS NULL
AND NOT EXISTS (SELECT 1
FROM res_ruimte
WHERE UPPER(res_ruimte_extern_id) = UPPER(att_mail) )
GROUP BY recur_id, appt_id, room_id, subject, starttime,
endtime, organizer, modifier) i,
res_rsv_ruimte rr,
res_ruimte rnew
WHERE rr.res_rsv_ruimte_externnr LIKE i.appt_id||'|'||i.recur_id||'|%'
AND rr.res_rsv_ruimte_verwijder IS NULL
AND rnew.res_ruimte_extern_id = i.room_id
AND rnew.res_ruimte_verwijder IS NULL;
-- TOEVOEGEN
-- Triggers voor het toevoegen van een toekomstige (deel)reservering:
-- - ADD-modifier in synchro; appointment is nieuw
-- - UPDATE-modifier in synchro, met onbekend appointment- en recurrence-ID voor deze room: dan (<28>f)
-- - appointment bestond al, maar er is nu pas een ruimte aan toegevoegd;
-- - het was een single en nu recurring.
-- - appointment met meerdere ruimtes, maar nog geen deelreservering voor deze ruimte (zal vooral
-- voorkomen bij calendarview, als we de boekingen voor alle ruimtes op dit tijdstip binnenkrijgen --
-- bij de synchro-import is dat niet gegarandeerd)
-- TODO: verwijderde deelreserveringen 'undeleten'?
CURSOR c_add
IS
SELECT i.*,
r.*
FROM (SELECT room_id,
subject,
starttime,
endtime,
organizer,
modifier,
appt_id,
recur_id,
seq_nr,
COUNT(*) num_bez
FROM demo_imp_exchange
WHERE modifier = 'C'
AND starttime > SYSDATE
AND gelukt IS NULL
AND NOT EXISTS (SELECT 1
FROM res_ruimte
WHERE UPPER(res_ruimte_extern_id) = UPPER(att_mail) )
GROUP BY recur_id, appt_id, seq_nr, room_id, subject, starttime,
endtime, organizer, modifier) i,
res_v_aanwezigruimte r
WHERE i.room_id = r.res_ruimte_extern_id
UNION ALL
SELECT i.*,
r.*
FROM (SELECT room_id,
subject,
starttime,
endtime,
organizer,
modifier,
appt_id,
recur_id,
seq_nr,
COUNT(*) num_bez
FROM demo_imp_exchange
WHERE modifier = 'U'
AND starttime > SYSDATE
AND gelukt IS NULL
AND NOT EXISTS (SELECT 1
FROM res_ruimte
WHERE UPPER(res_ruimte_extern_id) = UPPER(att_mail) )
GROUP BY recur_id, appt_id, seq_nr, room_id, subject, starttime,
endtime, organizer, modifier) i,
res_v_aanwezigruimte r
WHERE i.room_id = r.res_ruimte_extern_id
AND NOT EXISTS (SELECT 1
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r
WHERE rr.res_rsv_ruimte_externnr IS NOT NULL
AND rr.res_rsv_ruimte_externnr LIKE i.appt_id||'|'||i.recur_id||'|%'
AND rr.res_rsv_ruimte_verwijder IS NULL
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND r.res_ruimte_verwijder IS NULL
AND r.res_ruimte_extern_id = i.room_id);
BEGIN
-- We doen niets met boekingen in het verleden
UPDATE demo_imp_exchange i
SET gelukt = 4
WHERE endtime < SYSDATE;
-- En res_ruimtes als deelnemers, dat kan natuurlijk niet
UPDATE demo_imp_exchange i
SET gelukt = 5
WHERE EXISTS (SELECT 1
FROM res_ruimte
WHERE UPPER(res_ruimte_extern_id) = UPPER(att_mail) );
-- Eerst verwijderen; dat scheelt onterechte "dirties" bij toevoegen
-- Bij verplaatsen naar een andere ruimte krijg je mogelijk een delete op de oude
-- ruimte; die voeren we niet uit. Ook deletes van niet-bekende appointments negeren we.
UPDATE demo_imp_exchange i
SET gelukt = 3
WHERE modifier IN ('D')
AND EXISTS (SELECT 1 FROM demo_imp_exchange
WHERE modifier != 'D'
AND appt_id||'|'||recur_id = i.appt_id||'|'||i.recur_id
AND seq_nr > i.seq_nr);
UPDATE demo_imp_exchange i
SET gelukt = 3
WHERE modifier IN ('D')
AND NOT EXISTS (SELECT 1 FROM res_rsv_ruimte
WHERE res_rsv_ruimte_externnr LIKE i.appt_id||'|%');
FOR rec IN c_del
LOOP
BEGIN
v_aanduiding := rec.res_reservering_key||'/'||rec.res_rsv_ruimte_volgnr
||' ('||rec.res_rsv_ruimte_key||'|'||rec.room_id || '|' || rec.subject||')';
v_perslid_key := NULL;
v_kostenplaats_key := NULL;
v_rsv_ruimte_key := NULL;
v_status_fo_key := 1;
v_count := 0;
-- Zie ook res_delete_save.asp
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'VERWIJDEREN '||v_aanduiding);
END IF;
v_errorhint := 'Doorbelasting kosten';
-- Moeten kosten worden doorbelast?
-- (I.e. zitten we binnen de expiretijd van een van de onderdelen?)
FOR rec_db IN c_del_doorbelast (rec.res_rsv_ruimte_key)
LOOP
v_count := v_count + 1;
END LOOP;
-- Minstens <20><>n onderdeel moet worden doorbelast
-- FO-status van rsv_ruimte wordt "Vervallen" (4)
IF (v_count > 0)
THEN
v_status_fo_key := 4;
FOR rec_db IN c_del_doorbelast (rec.res_rsv_ruimte_key)
LOOP
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding,
rec_db.oms||' kosteloos annuleerbaar tot '||
TO_CHAR(rec_db.t_expire, 'DD-MM-YYYY HH24:MI'));
END IF;
END LOOP;
END IF;
v_errorhint := 'Deelreservering verwijderen';
UPDATE res_rsv_ruimte
SET res_status_fo_key = v_status_fo_key,
res_rsv_ruimte_verwijder = SYSDATE
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
fac.trackaction ('RESDEL', rec.res_rsv_ruimte_key, NULL, SYSDATE, NULL);
res.set_ruimte_dirty(rec.res_rsv_ruimte_key);
res.set_ruimtes_clean(rec.res_rsv_ruimte_van);
res.follow_artikel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
res.follow_deel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
v_errorhint := 'res_reservering verwijderen';
UPDATE res_reservering
SET res_reservering_verwijder = SYSDATE
WHERE res_reservering_key = rec.res_reservering_key
AND NOT EXISTS (SELECT *
FROM res_v_aanwezigrsv_ruimte
WHERE res_reservering_key = rec.res_reservering_key);
-- Succesvol afgerond; zet vlag.
-- AKZA#35459: vlag niet zetten voor een single die recurring is geworden;
-- die recurrence moeten we straks in de add-cursor nog toevoegen.
IF NOT (rec.reden = 'Made recurring')
THEN
UPDATE demo_imp_exchange
SET gelukt = 1
WHERE appt_id||'|'||recur_id = rec.appt_id||'|'||rec.recur_id
AND gelukt IS NULL;
END IF;
fac.imp_writelog (p_import_key,
'I',
v_aanduiding,
'Deelreservering verwijderd.'
);
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error '
|| oracle_err_num || '/'
|| oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
v_errorhint||': '||v_errormsg
);
END;
END LOOP;
COMMIT;
-- Omdat we entries die gefaald zijn 'bewaren', kan het zijn dat we voor <20><>n appointment
-- meerdere updates - of zelfs een delete - hebben. Dan zijn we alleen ge<67>nteresseerd in de
-- nieuwste, de rest kan genegeerd/weg. (Als we een nieuwere UPDate hebben, kan de originele
-- ADD/create ook weg; een update van een nog-niet-bestaande reservering zorgt voor aanmaken.)
-- Hoger seq_nr = latere mutatie in Exchange
UPDATE demo_imp_exchange i
SET gelukt = 2
WHERE modifier IN ('C', 'U')
AND EXISTS (SELECT 1 FROM demo_imp_exchange
WHERE appt_id||'|'||recur_id = i.appt_id||'|'||i.recur_id
AND fac_import_key != i.fac_import_key
AND seq_nr > i.seq_nr);
-- Hetzelfde voor deletes van niet-bestaande reserveringen
UPDATE demo_imp_exchange i
SET gelukt = 2
WHERE modifier = 'D'
AND NOT EXISTS (SELECT 1 FROM res_rsv_ruimte
WHERE res_rsv_ruimte_externnr LIKE i.appt_id||'|'||i.recur_id||'|%');
-- Dan bestaande bijwerken, anders kan het gebeuren dat we op basis van een UPDATE
-- eerst een rsv_ruimte aanmaken en 'm daarna meteen proberen bij te werken.
-- TODO: is dat nog steeds zo met "gelukt = 1"?
FOR rec IN c_upd
LOOP
BEGIN
v_aanduiding := rec.room_id || '|' || rec.subject || '|' || TO_CHAR(rec.starttime, 'DD-MM-YYYY HH24:MI')
|| '-->'||rec.res_reservering_key||'/'||rec.res_rsv_ruimte_volgnr;
v_perslid_key := NULL;
v_kostenplaats_key := NULL;
v_rsv_ruimte_volgnr := 1;
v_rsv_ruimte_key := NULL;
v_count := NULL;
v_count_all_booked := NULL;
v_count_all_needed := NULL;
v_count_wanted := NULL;
v_ruimte_extern_id := NULL;
-- Bepalen of dit een single-room of multi-room boeking is, door te achterhalen hoeveel ruimtes er in
-- FACILITOR geboekt (count_all_booked) zijn en hoeveel we er uit EWS hebben binnengekregen (count_all_needed).
-- Als count_all_booked > 1 en/of count_all_needed > 1, dan betreft het een appointment met meerdere
-- rooms en dus meerdere rsv_ruimtes. Dan moeten we nog meer weten.
-- Als count_all_booked = 1 <20>n count_all_needed = 1, dan betreft het een single-room boeking en kunnen we
-- r<>cksichtslos bijwerken.
-- (Dat is niet correct als er een room aan een bestaande appointment is toegevoegd, waar we nu nog
-- maar <20><>n room van hebben. Maar de sync-functionaliteit van EWS biedt geen manier om die situatie te
-- achterhalen... Met de calendar view kan dit wel, omdat we dan alle gelijktijdige boekingen op de
-- verschillende ruimtes binnenkrijgen, daarom:)
-- Als we een full import doen (calendar view), kan het maar zo zijn dat we in de import meerdere
-- ruimtes in dezelfde appointment tegenkomen (count_all_needed > 1), terwijl we daar nu nog maar <20><>n
-- ruimte van kennen (count_all_booked = 1). Dan is het dus een multi-room boeking, die nog niets alszodanig
-- bekend stond.
v_errorhint := 'Totaal aantal geboekte zalen bepalen';
SELECT COUNT(*)
INTO v_count_all_booked
FROM res_rsv_ruimte rr
WHERE rr.res_rsv_ruimte_externnr LIKE rec.appt_id||'|'||rec.recur_id||'|%'
AND rr.res_rsv_ruimte_verwijder IS NULL;
v_errorhint := 'Totaal aantal benodigde zalen bepalen';
SELECT COUNT(DISTINCT room_id)
INTO v_count_all_needed
FROM demo_imp_exchange i
WHERE i.modifier IN ('U', 'C')
AND i.starttime > SYSDATE
AND i.appt_id||'|'||i.recur_id||'|' LIKE rec.appt_id||'|'||rec.recur_id||'|';
-- De cursor bevat voor iedere appointment alle rsv_ruimtes met dezelfde appt_id en recur_id.
-- Er zal hoogstens <20><>n rsv_ruimte op de betreffende room zijn.
-- Bestaat er al een rsv_ruimte voor deze room (count = 1)?
v_errorhint := 'Bepalen of zaal al geboekt is';
SELECT COUNT(*)
INTO v_count
FROM res_rsv_ruimte rr,
res_ruimte_opstelling rops,
res_ruimte r
WHERE rr.res_rsv_ruimte_externnr LIKE rec.appt_id||'|'||rec.recur_id||'|%'
AND rr.res_rsv_ruimte_verwijder IS NULL
AND rops.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = rops.res_ruimte_key
AND r.res_ruimte_extern_id = rec.room_id;
-- Als er al een rsv_ruimte voor deze room is, is dat dan degene die we nu in de cursor hebben?
-- Zo ja, dan willen we die bijwerken.
-- Zo nee, dan doen we niets
v_errorhint := 'Bepalen zaal huidige deelreservering';
SELECT r.res_ruimte_extern_id
INTO v_ruimte_extern_id
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r
WHERE rr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND r.res_ruimte_verwijder IS NULL;
-- De room is nog niet geboekt. Dan kunnen we <20>f een bestaande boeking omhangen naar deze ruimte,
-- <20>f een nieuwe boeking maken (in de ADD-cursor)
-- Daarom: kunnen we de huidige rsv_ruimte aanpassen, of is die ruimte nog gewoon geboekt in Exchange?
v_errorhint := 'Bepalen of voor room/zaal nog een boeking gewenst is';
SELECT COUNT(DISTINCT room_id)
INTO v_count_wanted
FROM demo_imp_exchange i
WHERE appt_id||'|'||recur_id||'|' = rec.appt_id||'|'||rec.recur_id||'|'
AND room_id = v_ruimte_extern_id;
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding,
v_count_all_booked||' deelreservering(en) bij deze appointment ('||
v_count_all_needed||' nodig), waarvan '||v_count||' voor deze room'
);
END IF;
-- NB: Deze oplossing is niet waterdicht. Daarvoor moet je eigenlijk weten in welke room een appointment
-- eerst was. Het lijkt handig om daarvoor uit de EWS-XML de Location en OldLocation nodes
-- te gebruiken, omdat daarin alle uitgenodigde ruimtes uitgelijst staan, maar helaas is Location
-- aanpasbaar in Outlook...
-- Multi-room? Dan nog wat checks, anders 'gewoon' bijwerken.
IF (v_count_all_booked > 1 OR v_count_all_needed > 1)
THEN
IF (v_debug)
THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding,
'Deze deelres. is op '||v_ruimte_extern_id||
'. Benodigde deelres.: '||v_count_all_needed||
', waarvan op deze ruimte: '||v_count_wanted
);
END IF;
-- Hebben we al een boeking voor deze zaal?
IF (v_count = 1)
THEN
-- Met deze rsv_ruimte?
-- Zo niet, dan skippen.
-- Zo ja, dan bijwerken (hier niets doen)
IF (v_ruimte_extern_id != rec.res_ruimte_extern_id)
THEN
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding,
'Skip (boeking op deze ruimte met andere rsv_ruimte)'
);
END IF;
CONTINUE;
END IF;
ELSIF (v_count = 0)
THEN
-- Willen we de ruimte van deze rsv_ruimte nog?
-- Zo ja, dan skippen.
-- Zo niet, dan kunnen we deze rsv_ruimte bijwerken (hier niets doen)
IF (v_count_wanted > 0)
THEN
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding,
'Skip (deze boeking ''bewaren'')'
);
END IF;
CONTINUE;
END IF;
END IF;
END IF;
-- We hebben niet geskipt, dus willen we deze rsv_ruimte bijwerken
-- Basisgegevens reservering gewijzigd?
IF ( v_ruimte_extern_id != rec.res_ruimte_extern_id
OR rec.res_rsv_ruimte_omschrijving != SUBSTR(rec.subject, 1, 60)
OR rec.res_rsv_ruimte_bezoekers != rec.num_bez
OR rec.res_rsv_ruimte_van != rec.starttime
OR rec.res_rsv_ruimte_tot != rec.endtime)
THEN
v_errorhint := 'Opstelling ophalen';
v_ruimte_opstel_key := demo.getOpstelling(rec.room_id);
IF (v_ruimte_opstel_key IS NULL)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
'Geen ruimte-opstelling gedefinieerd'
);
CONTINUE;
END IF;
v_errorhint := 'Basisgegevens bijwerken';
UPDATE res_rsv_ruimte
SET res_ruimte_opstel_key = v_ruimte_opstel_key,
res_rsv_ruimte_omschrijving = SUBSTR(rec.subject, 1, 60),
res_rsv_ruimte_van = rec.starttime,
res_rsv_ruimte_tot = rec.endtime,
res_rsv_ruimte_bezoekers = rec.num_bez
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
-- Opruimen en voorzieningen en bezoekers laten volgen
v_errorhint := 'Dirty, clean, voorzieningen';
res.set_ruimte_dirty(rec.res_rsv_ruimte_key);
res.set_ruimtes_clean(rec.starttime);
res.follow_artikel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
res.follow_deel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
res.follow_afspraak(rec.res_rsv_ruimte_key, 0);
--TODO: tracking + notificatie
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'RES: '||rec.res_reservering_key||'/'||rec.res_rsv_ruimte_volgnr);
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'Room: '||v_ruimte_extern_id||'-->'||rec.res_ruimte_extern_id);
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'Desc: "'||rec.res_rsv_ruimte_omschrijving||'"-->"'||SUBSTR(rec.subject, 1, 60)||'"');
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'Start: '||TO_CHAR(rec.res_rsv_ruimte_van,'DD-MM-YYYY HH24:MI')||'-->'||TO_CHAR(rec.starttime,'DD-MM-YYYY HH24:MI'));
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'Einde: '||TO_CHAR(rec.res_rsv_ruimte_tot,'DD-MM-YYYY HH24:MI')||'-->'||TO_CHAR(rec.endtime,'DD-MM-YYYY HH24:MI'));
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'Bezoekers: '||rec.res_rsv_ruimte_bezoekers||'-->'||rec.num_bez);
END IF;
fac.trackaction ('RESUPD', rec.res_rsv_ruimte_key, NULL, SYSDATE, NULL);
fac.imp_writelog (p_import_key,
'I',
v_aanduiding,
'Reservering bijgewerkt'
);
ELSE
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'Geen verschil in basisgegevens');
END IF;
END IF;
-- Bezoekers bijwerken
v_errorhint := 'Bezoekers bijwerken';
demo.setBezoekers(p_import_key, rec.appt_id, rec.recur_id, rec.res_rsv_ruimte_key);
-- Succesvol afgerond; zet vlag.
-- All<6C><6C>n voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn)
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
UPDATE demo_imp_exchange
SET gelukt = 1
WHERE appt_id||'|'||recur_id = rec.appt_id||'|'||rec.recur_id
AND room_id = rec.room_id
AND gelukt IS NULL;
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'gelukt=1');
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error '
|| oracle_err_num || '/'
|| oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
v_errorhint||': '||v_errormsg
);
END;
END LOOP;
COMMIT;
-- Ten slotte nieuwe reserveringen toevoegen
FOR rec IN c_add
LOOP
BEGIN
v_aanduiding := rec.room_id || '|' || rec.subject;
v_perslid_key := NULL;
v_kostenplaats_key := NULL;
v_reservering_key := NULL;
v_rsv_ruimte_volgnr := 1;
v_rsv_ruimte_key := NULL;
v_errorhint := 'Host ' || rec.organizer || ' onbekend, of meer personen met dit e-mailadres! Geen boeking.';
-- Kennen we deze persoon eigenlijk wel?
SELECT COUNT(*)
INTO v_count
FROM prs_v_aanwezigperslid p
WHERE UPPER(p.prs_perslid_email) = UPPER(rec.organizer);
-- Niet bekend, of niet eenduidig --> jammer dan.
IF (v_count != 1)
THEN
fac.imp_writelog (p_import_key,
'E',
v_errorhint,
v_aanduiding
);
-- Eenduidig bekend --> reservering maken
ELSE
v_errorhint := 'Persoonsgegevens ophalen';
SELECT p.prs_perslid_key, a.prs_kostenplaats_key
INTO v_perslid_key, v_kostenplaats_key
FROM prs_v_aanwezigperslid p,
prs_v_aanwezigafdeling a
WHERE UPPER(p.prs_perslid_email) = UPPER(rec.organizer)
AND a.prs_afdeling_key = p.prs_afdeling_key;
v_errorhint := 'Opstelling ophalen';
v_ruimte_opstel_key := demo.getOpstelling(rec.room_id);
IF (v_ruimte_opstel_key IS NULL)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
'Geen ruimte-opstelling gedefinieerd'
);
CONTINUE;
END IF;
-- Is dit een op zichzelf staande appointment, of onderdeel van een reeks (recurrence)?
-- (obv recur_id, die samen met appt_id in res_rsv_ruimte_externnr staat)
v_errorhint := 'Check recurrence';
SELECT COUNT(*)
INTO v_count
FROM res_rsv_ruimte
WHERE res_rsv_ruimte_externnr IS NOT NULL
AND res_rsv_ruimte_externnr LIKE rec.appt_id||'|%'
-- AND res_rsv_ruimte_externnr NOT LIKE '%|'||rec.recur_id||'|%'
AND res_rsv_ruimte_verwijder IS NULL;
-- Er bestaan al deelreserveringen voor andere occurences van deze recurring appointment
-- Deelreservering binnen de bijbehorende res_reservering aanmaken
IF (v_count > 0)
THEN
v_errorhint := 'Reservering + volgnr ophalen';
SELECT res_reservering_key, MAX(res_rsv_ruimte_volgnr)+1
INTO v_reservering_key, v_rsv_ruimte_volgnr
FROM res_rsv_ruimte
WHERE res_rsv_ruimte_externnr IS NOT NULL
AND res_rsv_ruimte_externnr LIKE rec.appt_id||'|%'
-- AND res_rsv_ruimte_externnr NOT LIKE '%|'||rec.recur_id||'|%'
AND res_rsv_ruimte_verwijder IS NULL
GROUP BY res_reservering_key;
fac.imp_writelog (p_import_key,
'I',
v_aanduiding,
'Is occurence van '||v_reservering_key
);
-- Nog geen andere occurences --> nieuwe res_reservering
ELSE
v_errorhint := 'Reservering aanmaken';
-- res_reservering aanmaken
INSERT INTO res_reservering
(res_reservering_ispool)
VALUES (0)
RETURNING res_reservering_key
INTO v_reservering_key;
END IF;
v_errorhint := 'Deelreservering aanmaken';
-- res_rsv_ruimte aanmaken voor deze appointment+resource
INSERT INTO res_rsv_ruimte (
res_rsv_ruimte_omschrijving,
res_rsv_ruimte_opmerking,
res_rsv_ruimte_externnr,
res_ruimte_opstel_key,
res_rsv_ruimte_van,
res_rsv_ruimte_tot,
prs_kostenplaats_key,
res_rsv_ruimte_host_key,
res_activiteit_key,
res_status_fo_key,
res_rsv_ruimte_ordernr,
res_rsv_ruimte_kosten_klant,
res_rsv_ruimte_contact_key,
res_rsv_ruimte_bezoekers,
res_reservering_key,
res_rsv_ruimte_volgnr,
res_status_bo_key)
VALUES (
SUBSTR(rec.subject, 1, 60),
NULL,
rec.appt_id||'|'||rec.recur_id||'|'||rec.seq_nr,
v_ruimte_opstel_key,
rec.starttime,
rec.endtime,
v_kostenplaats_key,
v_perslid_key,
c_activiteit_key,
2,
NULL,
1,
v_perslid_key,
rec.num_bez,
v_reservering_key,
v_rsv_ruimte_volgnr,
2)
RETURNING res_rsv_ruimte_key
INTO v_rsv_ruimte_key;
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'RESERVERING '||v_reservering_key||'/'||v_rsv_ruimte_volgnr||' ('||v_rsv_ruimte_key||')');
END IF;
v_errorhint := 'Toevoegen bezoekers';
demo.setBezoekers(p_import_key, rec.appt_id, rec.recur_id, v_rsv_ruimte_key);
-- Succesvol afgerond; zet vlag.
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
UPDATE demo_imp_exchange
SET gelukt = 1
WHERE appt_id||'|'||recur_id = rec.appt_id||'|'||rec.recur_id
AND gelukt IS NULL;
IF (v_debug) THEN
fac.imp_writelog (p_import_key, 'D',
v_aanduiding, 'gelukt=1');
END IF;
-- res_discipline achterhalen; alleen tracken voor EXCO en MC zalen
v_errorhint := 'res_discipline bepalen';
SELECT r.res_discipline_key
INTO v_discipline_key
FROM res_ruimte r,
res_ruimte_opstelling ro,
res_rsv_ruimte rr
WHERE rr.res_rsv_ruimte_key = v_rsv_ruimte_key
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key;
-- Altijd tracken <20>n notificeren!
v_errorhint := 'Tracking NEW';
v_code := 'RESNEW';
fac.trackaction (v_code, v_rsv_ruimte_key, NULL, SYSDATE, 'Booking confirmation meeting room, booking ref.: '||v_reservering_key||'/'||v_rsv_ruimte_volgnr);
-- Is er iets dirty?
res.set_ruimte_dirty(v_rsv_ruimte_key);
fac.imp_writelog (p_import_key,
'I',
v_reservering_key||'/'||v_rsv_ruimte_volgnr
||'('||TO_CHAR(rec.starttime, 'DD-MM-YYYY HH24:MI')
||' - '||TO_CHAR(rec.endtime, 'HH24:MI')
||') aangemaakt',
rec.subject
);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error '
|| oracle_err_num || '/'
|| oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
v_errorhint||': '||v_errormsg
);
END;
END LOOP;
-- Bij dirty ruimtes de *oudere* opruimen
v_aanduiding := 'Calling set_ruimtes_clean';
v_errorhint := '';
demo.set_ruimtes_clean(p_import_key);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error '
|| oracle_err_num || '/'
|| oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
v_errorhint||': '||v_errormsg
);
COMMIT;
END demo_update_exchange;
/
CREATE OR REPLACE PROCEDURE demo_import_exchsync (
p_import_key IN NUMBER
)
IS
BEGIN
demo_import_exchange(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE demo_update_exchsync (
p_import_key IN NUMBER
)
IS
BEGIN
demo_update_exchange(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE demo_import_exchfull (
p_import_key IN NUMBER
)
IS
BEGIN
demo_import_exchange(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE demo_update_exchfull (
p_import_key IN NUMBER
)
IS
v_errorhint VARCHAR2 (1000);
BEGIN
demo_update_exchange(p_import_key); -- Eerst de gewone import
-- Nu alle reserveringen die niet zijn aangetroffen verwijderen
-- (Alleen voor ruimtes die in de importtabel voorkomen. Normaliter zijn dat alle ruimtes,
-- maar zo voorkom je dat je alle reserveringen weggooit als een ruimte 'per ongeluk' een
-- keer niet in de import zit. Handmatig verwijderen kan altijd.)
FOR rec IN (WITH this_import AS (SELECT *
FROM demo_imp_exchange
WHERE fac_import_key = p_import_key)
SELECT res_rsv_ruimte_key,
res_rsv_ruimte_van,
res_rsv_ruimte_tot,
res_reservering_key,
res_rsv_ruimte_volgnr
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r
WHERE rr.res_rsv_ruimte_externnr IS NOT NULL
AND rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_rsv_ruimte_van >= (SELECT MIN(starttime) FROM this_import)
AND rr.res_rsv_ruimte_van <= (SELECT MAX(starttime) FROM this_import)
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND r.res_ruimte_extern_id IN (SELECT DISTINCT room_id FROM this_import)
AND NOT EXISTS
(SELECT 1
FROM this_import i
WHERE rr.res_rsv_ruimte_externnr LIKE i.appt_id||'|'||i.recur_id||'|%'
AND r.res_ruimte_extern_id = i.room_id)
)
LOOP
v_errorhint := 'Verwijderen reservering '
|| TO_CHAR(rec.res_reservering_key) || '/' || rec.res_rsv_ruimte_volgnr
|| ' (' || TO_CHAR(rec.res_rsv_ruimte_key) || ')';
fac.imp_writelog (p_import_key, 'I', v_errorhint, '');
UPDATE res_rsv_ruimte
SET res_status_fo_key = 1, -- nooit doorbelasten of v_status_fo_key?
res_rsv_ruimte_verwijder = SYSDATE
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
fac.trackaction ('RESDEL', rec.res_rsv_ruimte_key, NULL, SYSDATE, NULL);
res.set_ruimte_dirty(rec.res_rsv_ruimte_key);
res.set_ruimtes_clean(rec.res_rsv_ruimte_van);
res.follow_artikel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
res.follow_deel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
v_errorhint := 'res_reservering verwijderen';
UPDATE res_reservering
SET res_reservering_verwijder = SYSDATE
WHERE res_reservering_key = rec.res_reservering_key
AND NOT EXISTS (SELECT *
FROM res_v_aanwezigrsv_ruimte
WHERE res_reservering_key = rec.res_reservering_key);
END LOOP;
END;
/
------------------------------------------
CREATE OR REPLACE VIEW demo_v_mld_inkoopaanvraag
AS
SELECT mld_melding_key,
'A' || mld_melding_key mld_melding_nr,
CASE
WHEN mld_melding_status IN (2, 3, 4, 7)
THEN NULL
ELSE SYSDATE-1
END vervallen
FROM mld_melding
WHERE mld_stdmelding_key = 922;
CREATE OR REPLACE VIEW demo_v_mld_changes
AS
SELECT mld_melding_key,
mld_melding_omschrijving,
t.ins_srtdiscipline_prefix
|| m.mld_melding_key || ' '
|| m.mld_melding_omschrijving
aanduiding,
CASE
WHEN m.mld_melding_status IN (0, 2, 3, 4, 7, 99)
THEN NULL
ELSE SYSDATE -1
END vervallen
FROM mld_melding m,
mld_stdmelding s,
mld_discipline d,
ins_srtdiscipline t
WHERE s.mld_stdmelding_key = m.mld_stdmelding_key
AND d.ins_discipline_key = s.mld_ins_discipline_key
AND d.ins_discipline_key IN (2468, 2848)
AND t.ins_srtdiscipline_key = d.ins_srtdiscipline_key;
CREATE OR REPLACE VIEW demo_v_mld_problems
AS
SELECT m.mld_melding_key,
m.mld_melding_omschrijving,
t.ins_srtdiscipline_prefix
|| m.mld_melding_key || ' '
|| m.mld_melding_omschrijving
aanduiding,
eig.prs_perslid_key eig_key,
eig.prs_perslid_naam_full eigenaar,
coord.prs_perslid_key coord_key,
coord.prs_perslid_naam_full coordinator,
CASE
WHEN m.mld_melding_status IN (0, 2, 3, 4, 7, 99)
THEN NULL
ELSE SYSDATE -1
END vervallen
FROM mld_melding m,
mld_stdmelding s,
mld_discipline d,
ins_srtdiscipline t,
mld_kenmerkmelding kme,
mld_kenmerkmelding kmc,
prs_v_perslid_fullnames_all eig,
prs_v_perslid_fullnames_all coord
WHERE s.mld_stdmelding_key = m.mld_stdmelding_key
AND d.ins_discipline_key = s.mld_ins_discipline_key
AND d.ins_discipline_key IN (2472)
AND t.ins_srtdiscipline_key = d.ins_srtdiscipline_key
AND kme.mld_melding_key = m.mld_melding_key
AND kmc.mld_melding_key = m.mld_melding_key
AND kme.mld_kenmerk_key = 1923
AND kmc.mld_kenmerk_key = 2181
AND kme.mld_kenmerkmelding_verwijder IS NULL
AND kmc.mld_kenmerkmelding_verwijder IS NULL
AND eig.prs_perslid_key = fac.safe_to_number (kme.mld_kenmerkmelding_waarde)
AND coord.prs_perslid_key = fac.safe_to_number (kmc.mld_kenmerkmelding_waarde);
CREATE OR REPLACE VIEW demo_v_mob_reserveernu
AS
SELECT res_ruimte_nr hide_f_sort,
res_ruimte_nr fclt_f_ruimte,
res_ruimte_key hide_f_ruimte_key,
DECODE( lcl.getuserlanguage(),
'NL', 'Vrij tot ',
'EN', 'Available until ',
'DE', 'Verf<EFBFBD>gbar bis ',
'FR', 'Disponible avant ')
|| DECODE (van,
NULL, TO_CHAR (TRUNC (SYSDATE) + res_ruimte_eindtijd / 24, 'HH24:MI'),
TO_CHAR (van, 'HH24:MI'))
vrij_tot,
'<img src="../../cust/demo/photos/'
|| res_ruimte_image
|| '" width="100" style="float:left; margin-right: 10px;"/>'
html_,
info
FROM (SELECT ruimte.res_ruimte_key,
lcl.xl ('res_ruimte_nr', ruimte.res_ruimte_key,
ruimte.res_ruimte_nr, lcl.getuserlanguage() ) res_ruimte_nr,
ruimte.res_ruimte_eindtijd,
ruimte.res_ruimte_image,
ruimte.omsteltijd,
CASE WHEN omsteltijd < 0.5 THEN van - 1 / 48 ELSE van - (omsteltijd / 24) END
drempel,
van.van - (omsteltijd / 24) van,
tot.tot,
SUBSTR (lcl.xl ('res_ruimte_omschrijving', ruimte.res_ruimte_key,
ruimte.res_ruimte_omschrijving, lcl.getuserlanguage() ),
1, 100) || '...' info
FROM (SELECT rr.*, dp.res_disc_params_preposttime omsteltijd
FROM res_ruimte rr, res_disc_params dp
WHERE res_ruimte_verwijder IS NULL
AND res_discipline_key IN (281, 2268, 784)
AND TRUNC (SYSDATE) + res_ruimte_eindtijd / 24 > SYSDATE + 1 / 24
AND dp.res_ins_discipline_key = rr.res_discipline_key) ruimte
LEFT OUTER JOIN ( SELECT res_ruimte_key, MIN (res_rsv_ruimte_van) van
FROM res_rsv_ruimte rr, res_ruimte_opstelling ro
WHERE res_rsv_ruimte_verwijder IS NULL
AND rr.res_ruimte_opstel_key IS NOT NULL
AND TRUNC (res_rsv_ruimte_van) = TRUNC (SYSDATE)
AND res_rsv_ruimte_van > SYSDATE
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
GROUP BY res_ruimte_key) van
ON van.res_ruimte_key = ruimte.res_ruimte_key
LEFT OUTER JOIN ( SELECT res_ruimte_key, MAX (res_rsv_ruimte_tot) tot
FROM res_rsv_ruimte rr, res_ruimte_opstelling ro
WHERE res_rsv_ruimte_verwijder IS NULL
AND rr.res_ruimte_opstel_key IS NOT NULL
AND TRUNC (res_rsv_ruimte_tot) = TRUNC (SYSDATE)
AND SYSDATE BETWEEN res_rsv_ruimte_van
AND res_rsv_ruimte_tot
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
GROUP BY res_ruimte_key) tot
ON tot.res_ruimte_key = ruimte.res_ruimte_key)
WHERE tot IS NULL OR (SYSDATE BETWEEN tot AND drempel);
-- procedure om ontvangen emails te processen. De klant specifieke eigenschappen, keys e.d. moeten
-- in de aanroep meegegeven worden.
CREATE OR REPLACE PROCEDURE demo_processemail (
pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
sender_key prs_perslid.prs_perslid_key%TYPE;
melder_key prs_perslid.prs_perslid_key%TYPE;
kostenplaats_key prs_afdeling.prs_kostenplaats_key%TYPE;
mldkey mld_melding.mld_melding_key%TYPE;
opdrkey mld_opdr.mld_opdr_key%TYPE;
stdmelding mld_stdmelding.mld_stdmelding_key%TYPE;
subject_regexp fac_setting.fac_setting_default%TYPE;
kkey mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
behandelaar_key mld_melding.mld_melding_behandelaar_key%TYPE;
typeopdrkey mld_typeopdr.mld_typeopdr_key%TYPE;
mldnum VARCHAR2 (4000);
opdrnum VARCHAR2 (4000);
opdrvolgnr NUMBER (10);
srtdisc VARCHAR2 (4000);
cnt NUMBER (10);
v_flag_on_fenote NUMBER (10);
v_flag_on_bonote NUMBER (10);
v_from VARCHAR2 (4000);
v_body VARCHAR2 (4000);
v_subject VARCHAR2 (1000);
v_pos NUMBER;
v_factuur_key fin_factuur.fin_factuur_key%TYPE;
BEGIN
errormsg := '(0x143)';
-- de mailberichten worden doorgestuurd vanuit de AAFM exchange omgeving. Hierbij
-- is het niet mogelijk de afzender te laten staan. Daarom wordt de afzender in het subject
-- van de mail geplaatst. Scheidingsteken in de ';'.
v_from := SUBSTR (psubject, 1, INSTR (psubject, ';') - 1);
v_subject := SUBSTR (psubject, INSTR (psubject, ';') + 1);
-- Verwijder de Bounce Address Tag Validation
IF v_from LIKE 'prvs=%'
THEN
v_from := SUBSTR (v_from, INSTR (v_from, '=', -1) + 1);
END IF;
v_body :=
v_from || ': ' || CHR (13) || CHR (10)
|| SUBSTR (
v_subject || CHR (13) || CHR (10)
|| REPLACE (SUBSTR (pbody, 1, 3900 - (LENGTH (v_subject) + 2)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
3900); -- verwijder onnodige witregels
-- DBMS_OUTPUT.PUT_LINE('v_from: '||v_from);
-- Valideer de sender in pfrom: kennen we deze?
SELECT MIN (prs_perslid_key), MIN (d.prs_kostenplaats_key)
INTO sender_key, kostenplaats_key
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_email) = UPPER (v_from);
IF sender_key IS NULL
THEN
sender_key := 11; -- prs_perslid_key onbekend mail adres.
SELECT d.prs_kostenplaats_key
INTO kostenplaats_key
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND prs_perslid_verwijder IS NULL
AND p.prs_perslid_key = sender_key;
END IF;
CASE
WHEN UPPER (pto) LIKE 'INVOICE@%'
THEN
INSERT INTO fin_factuur (fin_factuur_statuses_key,
fin_factuur_datum,
fin_factuur_totaal_btw,
fin_factuur_nr)
VALUES (3,
SYSDATE,
0,
' ')
RETURNING fin_factuur_key
INTO v_factuur_key;
-- vul het kenmerk voor de bijlage
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkpath',
'FIN\F'
|| TO_CHAR (TRUNC (v_factuur_key / 1000), 'FM0000')
|| '___\F'
|| v_factuur_key
|| '\'
|| 21
|| '\');
WHEN UPPER (pto) LIKE 'SERVICEDESK@%'
THEN
errormsg := '(0x145)';
-- append (as a note?) to an existing melding if #key is found in the subject
-- Alternatief was: scannen van fac_srtnotificatie_oms maar dat voelt ook niet echt lekker
-- subject_regexp := fac.getsetting ('mld_reply_subject_regexp'); -- [[:alpha:]]*[[:digit:]]{3,}
-- hebben we een referentie naar een opdracht of naar een melding?
subject_regexp := '[[:digit:]]{3,}/[[:digit:]]*';
opdrnum :=
REGEXP_SUBSTR (v_subject,
subject_regexp,
1,
1,
'i'); -- MA12345
DBMS_OUTPUT.put_line ('opdrnum: ' || opdrnum);
IF opdrnum IS NOT NULL
THEN
opdrvolgnr :=
fac.safe_to_number (
SUBSTR (opdrnum, INSTR (opdrnum, '/') + 1));
DBMS_OUTPUT.put_line ('opdrvolgnr: ' || opdrvolgnr);
mldkey :=
fac.safe_to_number (
SUBSTR (opdrnum, 1, INSTR (opdrnum, '/') - 1));
DBMS_OUTPUT.put_line ('mldkey: ' || mldkey);
ELSE
subject_regexp := '[[:alpha:]]*[[:digit:]]{3,}';
mldnum :=
REGEXP_SUBSTR (v_subject,
subject_regexp,
1,
1,
'i'); -- MA12345
srtdisc :=
REGEXP_SUBSTR (mldnum,
'[[:alpha:]]*',
1,
1,
'i'); -- MA
mldkey :=
fac.safe_to_number (SUBSTR (mldnum, LENGTH (srtdisc) + 1));
END IF;
DBMS_OUTPUT.put_line ('mldnum: ' || mldnum);
DBMS_OUTPUT.put_line ('srtdisc: ' || srtdisc);
DBMS_OUTPUT.put_line ('mldkey: ' || mldkey);
-- We eisen
-- - Goed meldingnummer
-- - Goede srtdiscipline
-- - Afzender is degene voor wie de melding was
-- suggested extensions: ook collega's toestaan?
SELECT MIN (mm.mld_stdmelding_key), MIN (prs_perslid_key_voor)
INTO stdmelding, melder_key
FROM mld_melding mm,
mld_stdmelding msm,
ins_tab_discipline insd,
ins_srtdiscipline isd
WHERE mm.mld_melding_key = mldkey
AND mm.mld_stdmelding_key = msm.mld_stdmelding_key
AND msm.mld_ins_discipline_key = insd.ins_discipline_key
AND insd.ins_srtdiscipline_key = isd.ins_srtdiscipline_key;
-- Controle op srtdisc werkt niet goed. Mails worden na binnenkomst namelijk doorgezet
-- naar de definitieve stdmelding(/discipline/srtdiscpline) en daarmee verandert de
-- prefix letter
--AND isd.ins_srtdiscipline_prefix = srtdisc
--AND mm.prs_perslid_key_voor = sender; -- Mogen anderen ook reageren?
DBMS_OUTPUT.put_line (
'mld_stdmelding_key: ' || TO_CHAR (stdmelding));
-- kijk of de referentie naar de opdracht wel correct is:
IF opdrvolgnr IS NOT NULL
THEN
BEGIN
SELECT mld_opdr_key, mld_typeopdr_key
INTO opdrkey, typeopdrkey
FROM mld_opdr
WHERE mld_melding_key = mldkey
AND mld_opdr_bedrijfopdr_volgnr = opdrvolgnr;
EXCEPTION
WHEN OTHERS
THEN
opdrkey := NULL;
END;
END IF;
BEGIN
IF opdrkey IS NOT NULL
THEN
SELECT o.prs_perslid_key
INTO behandelaar_key
FROM mld_opdr o, prs_perslid p
WHERE o.mld_opdr_key = opdrkey
AND o.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND p.prs_perslid_verwijder IS NULL;
ELSE
SELECT mld_melding_behandelaar_key
INTO behandelaar_key
FROM mld_melding m, prs_perslid p
WHERE mld_melding_key = mldkey
AND mld_melding_behandelaar_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND p.prs_perslid_verwijder IS NULL;
END IF;
EXCEPTION
WHEN OTHERS
THEN
behandelaar_key := NULL;
END;
IF (stdmelding IS NOT NULL)
THEN -- Bestaande opdracht.
IF opdrkey IS NOT NULL
THEN
INSERT INTO mld_opdr_note (mld_opdr_key,
mld_opdr_note_omschrijving,
prs_perslid_key)
VALUES (opdrkey, v_body, sender_key);
fac.trackaction ('ORDUPD',
opdrkey,
sender_key,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
DBMS_OUTPUT.put_line ('Notitie toegevoegd.');
ELSE
INSERT INTO mld_melding_note (mld_melding_key,
mld_melding_note_omschrijving,
prs_perslid_key,
mld_melding_note_flag)
VALUES (mldkey,
v_body,
sender_key,
DECODE (sender_key, melder_key, 1, 0)); -- 1 is zichtbaar FE want zelf ingevoerd.
fac.trackaction ('MLDNOT',
mldkey,
sender_key,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
DBMS_OUTPUT.put_line ('Notitie toegevoegd.');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Als notitie toegevoegd aan melding ' || mldkey);
IF behandelaar_key IS NOT NULL
THEN
-- Notificatie naar behandelaar
fac.putnotificationsrtprio (
NULL,
behandelaar_key,
'MLDNOB',
mldkey,
'Melding ' || mldkey || ' is door de klant aangepast.',
2,
NULL,
NULL,
NULL,
2,
NULL);
END IF;
END IF;
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet
BEGIN
IF fac.getsetting('mld_melding_actiecode') = 1
THEN
UPDATE mld_melding
SET mld_melding_actiecode = 1+128 -- Backoffice + Attentie
WHERE mld_melding_key = mldkey;
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line( 'Niet gelukt om flag '
|| v_flag_on_fenote
|| ' te zetten.');
END;
ELSE
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
errormsg := '(0x148)';
BEGIN
stdmelding :=
fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
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)
VALUES ('MLD',
4, -- email
SYSDATE,
v_body,
NULL,
mld_t_uitvoertijd (2, 'D'),
stdmelding,
sender_key,
sender_key,
kostenplaats_key,
3)
RETURNING mld_melding_key
INTO mldkey;
-- DBMS_OUTPUT.PUT_LINE('Melding toegevoegd: ' || mldkey);
errormsg := '(0x165)';
mld.setmeldingstatus (mldkey, 2, sender_key);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Geregistreerd onder melding ' || mldkey);
END;
END IF;
IF opdrkey IS NULL
THEN
-- Zoek het laagste bijlagen kenmerk key (AAEN#34590) om de bijlagen onder te stoppen
errormsg := '(0x151)';
SELECT MIN (mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k,
mld_srtkenmerk sk,
mld_stdmelding std,
ins_tab_discipline d
WHERE mld_srtkenmerk_kenmerktype = 'M'
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND std.mld_stdmelding_key = stdmelding
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key
AND k.mld_kenmerk_niveau = 'S')
OR (k.mld_stdmelding_key = d.ins_discipline_key
AND k.mld_kenmerk_niveau = 'D')
OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key
AND k.mld_kenmerk_niveau = 'T'))
AND k.mld_kenmerk_verwijder IS NULL
AND NOT EXISTS
(SELECT mld_kenmerk_volgnummer
FROM mld_kenmerk k1,
mld_srtkenmerk sk1,
mld_stdmelding std1,
ins_tab_discipline d1
WHERE sk1.mld_srtkenmerk_kenmerktype = 'M'
AND sk1.mld_srtkenmerk_key = k1.mld_srtkenmerk_key
AND std1.mld_stdmelding_key = stdmelding
AND std1.mld_ins_discipline_key =
d1.ins_discipline_key
AND ( (k1.mld_stdmelding_key =
std1.mld_stdmelding_key
AND k1.mld_kenmerk_niveau = 'S')
OR (k1.mld_stdmelding_key = d1.ins_discipline_key
AND k1.mld_kenmerk_niveau = 'D')
OR (k1.mld_stdmelding_key =
d1.ins_srtdiscipline_key
AND k1.mld_kenmerk_niveau = 'T'))
AND k1.mld_kenmerk_verwijder IS NULL
AND k1.mld_kenmerk_key < k.mld_kenmerk_key);
errormsg := '(0x153)';
IF kkey IS NOT NULL
THEN
-- DBMS_OUTPUT.PUT_LINE('Bijlagen kenmerk: ' || kkey);
errormsg := '(0x157)';
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkpath',
'MLD\M'
|| TO_CHAR (TRUNC (mldkey / 1000), 'FM0000')
|| '___\M'
|| mldkey
|| '\'
|| kkey
|| '\');
END IF;
ELSE
-- Zoek het laagste bijlagen kenmerk om de bijlagen onder te stoppen
errormsg := '(0x152)';
SELECT MIN (mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k, mld_srtkenmerk sk
WHERE sk.mld_srtkenmerk_kenmerktype = 'M'
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND k.mld_typeopdr_key = typeopdrkey
AND k.mld_kenmerk_niveau = 'O'
AND k.mld_kenmerk_verwijder IS NULL
AND NOT EXISTS
(SELECT mld_kenmerk_volgnummer
FROM mld_kenmerk k1, mld_srtkenmerk sk1
WHERE sk1.mld_srtkenmerk_kenmerktype = 'M'
AND sk1.mld_srtkenmerk_key = k1.mld_srtkenmerk_key
AND k1.mld_typeopdr_key = typeopdrkey
AND k1.mld_kenmerk_niveau = 'O'
AND k1.mld_kenmerk_verwijder IS NULL
AND k1.mld_kenmerk_volgnummer <
k.mld_kenmerk_volgnummer);
errormsg := '(0x154)';
IF kkey IS NOT NULL
THEN
-- DBMS_OUTPUT.PUT_LINE('Bijlagen kenmerk: ' || kkey);
errormsg := '(0x157)';
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkpath',
'MLD\O'
|| TO_CHAR (TRUNC (opdrkey / 1000), 'FM0000')
|| '___\O'
|| opdrkey
|| '\'
|| kkey
|| '\');
END IF;
END IF;
ELSE
errormsg := '(0x188)';
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder '
|| errormsg);
END CASE;
EXCEPTION
WHEN OTHERS
THEN
-- DBMS_OUTPUT.PUT_LINE('Mail niet geaccepteerd: ' || 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder '
|| errormsg);
fac.writelog (
'PROCESSEMAIL',
'E',
'Mail kon niet ingelezen worden afzender:'
|| v_from
|| '['
|| errormsg
|| ']'
|| psubject,
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END;
/
-- Klantoverzicht voor CRM-demo
CREATE OR REPLACE VIEW demo_v_rap_klantoverzicht
AS
SELECT prs_bedrijf_naam fclt_x_klant,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/prs/prs_bedrijf.asp?bedrijf_key='
|| prs_bedrijf_key
|| '&'
|| 'intern=1'
|| '")''>'
|| HTF.escape_sc (prs_bedrijf_naam)
|| '</a>'
html_klant,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/prs/prs_perslid_search.asp?dis_key='
|| d.alg_district_key
|| '&'
|| 'autosearch=1'
|| '","Contactpersonen '
|| prs_bedrijf_naam
|| '")''>'
|| 'Contactpersonen'
|| '</a>'
html_contactpersonen,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/cnt/cnt_search.asp?urole=bo&'
|| 'comp_key='
|| prs_bedrijf_key
|| '&'
|| 'search=1'
|| '","Contracten '
|| prs_bedrijf_naam
|| '")''>'
|| 'Contracten'
|| '</a>'
html_contracten,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/mld/mld_search.asp?urole=fo&'
|| 'comp_key='
|| prs_bedrijf_key
|| '&'
|| 'autosearch=1'
|| '","Meldingen '
|| prs_bedrijf_naam
|| '")''>'
|| 'Meldingen'
|| '</a>'
html_meldingen,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/mld/mld_search.asp?urole=bo&'
|| 'districtkey='
|| d.alg_district_key
|| '&'
|| 'srtdisc=481&'
|| 'autosearch=1'
|| '","Taken '
|| prs_bedrijf_naam
|| '")''>'
|| 'Taken'
|| '</a>'
html_taken,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/mld/mld_melding.asp?urole=fe&'
|| 'loc_key='
|| MIN (l.alg_locatie_key)
|| '&'
|| 'srtdisc=481&'
|| '","Nieuwe taak '
|| prs_bedrijf_naam
|| '")''>'
|| 'Nieuwe taak'
|| '</a>'
html_nieuwe_taak
FROM prs_v_aanwezigbedrijf b, alg_district d, alg_locatie l
WHERE b.prs_bedrijf_huurder = 1
AND b.prs_bedrijf_intern = 1
AND d.alg_district_upper = b.prs_bedrijf_naam_upper
AND l.alg_district_key = d.alg_district_key
GROUP BY b.prs_bedrijf_key, b.prs_bedrijf_naam, d.alg_district_key;
/* Origineel - Pre-beurs 2019
CREATE OR REPLACE FORCE VIEW DEMO.DEMO_V_THEMA_DEEL_RES_PVH
(
INS_DEEL_KEY,
INS_ALG_RUIMTE_KEY,
WAARDE
)
AS
SELECT r.ins_deel_key,
ins_alg_ruimte_key,
DECODE (k.ins_kenmerkdeel_waarde,
NULL,
COALESCE (MIN (TRUNC (tijdvrij * 24 * 60) - 1), 999999),
1)
waarde -- MIN want perssimistisch
FROM (SELECT res_ins_deel_key ins_deel_key,
ins_alg_ruimte_key,
res_rsv_deel_van - SYSDATE tijdvrij
FROM res_v_aanwezigdeel r,
ins_deel d,
(SELECT res_deel_key, res_rsv_deel_van, res_rsv_deel_tot
FROM res_v_aanwezigrsv_deel rrd
WHERE SYSDATE BETWEEN TRUNC (res_rsv_deel_van)
AND res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen
WHERE r.res_deel_key = blokkerend.res_deel_key(+)
AND d.ins_deel_key = r.res_ins_deel_key) r
LEFT OUTER JOIN
(SELECT ins_deel_key, ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel
WHERE ins_kenmerk_key = 1141
AND ins_kenmerkdeel_verwijder IS NULL) k
ON k.ins_deel_key = r.ins_deel_key
GROUP BY r.ins_deel_key, ins_alg_ruimte_key, k.ins_kenmerkdeel_waarde;
*/
CREATE OR REPLACE VIEW DEMO_V_THEMA_DEEL_RES_PVH
(
INS_DEEL_KEY,
INS_ALG_RUIMTE_KEY,
WAARDE
)
AS
SELECT r.ins_deel_key,
r.ins_alg_ruimte_key,
DECODE (r.status,
0,
COALESCE (MIN (TRUNC (r.tijdvrij * 24 * 60) - 1), 999999),
1)
waarde -- MIN want pessimistisch
FROM (SELECT r.res_ins_deel_key ins_deel_key,
d.ins_alg_ruimte_key,
blokkerend.res_rsv_deel_van - SYSDATE tijdvrij,
DECODE (INITCAP (d.ins_deel_state),
'0', -- Als de sensor uit is kijken we naar de reservering
DECODE (blokkerend.res_deel_key,
NULL,
0, -- Als er geen reservering loopt, dan is de status uit
1), -- Anders aan
1)
status
FROM res_v_aanwezigdeel r,
ins_deel d,
(SELECT res_deel_key, res_rsv_deel_van, res_rsv_deel_tot
FROM res_v_aanwezigrsv_deel
WHERE SYSDATE BETWEEN TRUNC (res_rsv_deel_van)
AND res_rsv_deel_tot) blokkerend -- Vandaag en nog niet afgelopen
WHERE r.res_ins_deel_key = d.ins_deel_key
AND d.ins_alg_ruimte_type = 'R'
AND r.res_deel_key = blokkerend.res_deel_key(+)) r
LEFT JOIN -- Waarom dit kenmerk en bezetting niet op basis van reservering?
(SELECT ins_deel_key, ins_kenmerkdeel_waarde
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_kenmerk_key = 1141) k -- Bezet door
ON r.ins_deel_key = k.ins_deel_key
WHERE r.ins_deel_key IN (26486, 26506) -- LeftClick puck+slof!
GROUP BY r.ins_deel_key, ins_alg_ruimte_key, r.status
UNION ALL -- En dan de reserveerbare delen zonder sensor
SELECT r.ins_deel_key,
r.ins_alg_ruimte_key,
DECODE (k.ins_kenmerkdeel_waarde,
NULL,
COALESCE (MIN (TRUNC (r.tijdvrij * 24 * 60) - 1), 999999),
1)
waarde -- MIN want pessimistisch
FROM (SELECT r.res_ins_deel_key ins_deel_key,
d.ins_alg_ruimte_key,
blokkerend.res_rsv_deel_van - SYSDATE tijdvrij
FROM res_v_aanwezigdeel r,
ins_deel d,
(SELECT res_deel_key, res_rsv_deel_van, res_rsv_deel_tot
FROM res_v_aanwezigrsv_deel
WHERE SYSDATE BETWEEN TRUNC (res_rsv_deel_van)
AND res_rsv_deel_tot) blokkerend -- Vandaag en nog niet afgelopen
WHERE r.res_ins_deel_key = d.ins_deel_key
AND d.ins_alg_ruimte_type = 'R'
AND r.res_deel_key = blokkerend.res_deel_key(+)) r
LEFT JOIN -- Waarom dit kenmerk en bezetting niet op basis van reservering?
(SELECT ins_deel_key, ins_kenmerkdeel_waarde
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_kenmerk_key = 1141) k -- Bezet door
ON r.ins_deel_key = k.ins_deel_key
WHERE r.ins_deel_key NOT IN (26486, 26506) -- LeftClick puck+slof!
GROUP BY r.ins_deel_key, r.ins_alg_ruimte_key, k.ins_kenmerkdeel_waarde;
CREATE OR REPLACE VIEW demo_v_rap_searchresult
(
fclt_f_datum,
fclt_f_persoon,
fclt_f_zoekterm,
resultaat,
fclt_f_keuze_type,
keuze_url,
keuze_omschrijving
)
AS
SELECT fac_gui_counter_date datum,
prs_perslid_naam_full persoon,
fgc.fac_gui_counter_info zoekterm,
COALESCE (result.result, 'Geen') resultaat,
COALESCE (choice.TYPE, 'Geen') keuze_type,
choice.url keuze_url,
choice.oms keuze_omschrijving
FROM fac_gui_counter fgc,
prs_v_perslid_fullnames pf,
(SELECT fac_gui_counter_refkey,
fac_gui_counter_info url,
'Reserveerbaar artikel' TYPE,
res_artikel_omschrijving oms
FROM fac_gui_counter fgc, res_artikel ra
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchchoice'
AND fac_gui_counter_info LIKE '%res_artikel%'
AND ra.res_artikel_key(+) =
fac.safe_to_number(SUBSTR (
fac_gui_counter_info,
(INSTR (fac_gui_counter_info,
'key=')
+ 4)))
UNION
SELECT fac_gui_counter_refkey,
fac_gui_counter_info,
'Reserveerbaar object',
res_deel_omschrijving
FROM fac_gui_counter fgc, res_deel rd
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchchoice'
AND fac_gui_counter_info LIKE '%res_deel%'
AND rd.res_deel_key(+) =
fac.safe_to_number(SUBSTR (
fac_gui_counter_info,
(INSTR (fac_gui_counter_info,
'key=')
+ 4)))
UNION
SELECT fac_gui_counter_refkey,
fac_gui_counter_info,
'Melding',
std.mld_stdmelding_omschrijving oms
FROM fac_gui_counter fgc, mld_stdmelding std
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchchoice'
AND fac_gui_counter_info LIKE '%stdm%'
AND std.mld_stdmelding_key(+) =
fac.safe_to_number(SUBSTR (
fac_gui_counter_info,
(INSTR (fac_gui_counter_info,
'=')
+ 1)))
UNION
SELECT fac_gui_counter_refkey,
fac_gui_counter_info,
'Kennisbank',
fac_faq_question oms
FROM fac_gui_counter fgc, fac_faq faq
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchchoice'
AND fac_gui_counter_info LIKE '%faq%'
AND fac_faq_key(+) =
fac.safe_to_number(SUBSTR (
fac_gui_counter_info,
(INSTR (fac_gui_counter_info,
'=')
+ 1)))
UNION
SELECT fac_gui_counter_refkey,
fac_gui_counter_info,
'Reserveerbare ruimte',
res_ruimte_nr oms
FROM fac_gui_counter fgc, res_ruimte
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchchoice'
AND fac_gui_counter_info LIKE '%res_ruimte%'
AND res_ruimte_key(+) =
fac.safe_to_number(SUBSTR (
fac_gui_counter_info,
(INSTR (fac_gui_counter_info,
'=')
+ 1)))
UNION
SELECT fac_gui_counter_refkey,
fac_gui_counter_info,
'Bestelling',
ins_discipline_omschrijving
FROM fac_gui_counter fgc, bes_discipline
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchchoice'
AND fac_gui_counter_info LIKE '%bes%'
AND ins_discipline_key(+) =
fac.safe_to_number(SUBSTR (
fac_gui_counter_info,
(INSTR (fac_gui_counter_info,
'dis_key=')
+ 8)))
UNION
SELECT fac_gui_counter_refkey,
fac_gui_counter_info,
'Telefoonboek',
prs_perslid_naam_full
FROM fac_gui_counter fgc, prs_v_perslid_fullnames pf
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchchoice'
AND fac_gui_counter_info LIKE '%phone%'
AND pf.prs_perslid_key(+) =
fac.safe_to_number(SUBSTR (
fac_gui_counter_info,
(INSTR (fac_gui_counter_info,
'=')
+ 1)))) choice,
(SELECT fac_gui_counter_refkey,
REPLACE (REPLACE (fac_gui_counter_info, '{', ''), '}', '')
result
FROM fac_gui_counter fgc
WHERE fac_gui_counter_info IS NOT NULL
AND fac_gui_counter_group = 'searchresult') result
WHERE fac_gui_counter_group = 'search'
AND fgc.fac_gui_counter_info IS NOT NULL
AND fgc.prs_perslid_key = pf.prs_perslid_key
AND choice.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key
AND result.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key;
-- Beurs 2020, sensoren bij flexplekken (ins_deel - ins_deel koppeling)
CREATE OR REPLACE VIEW DEMO_V_THEMA_DEEL_RES_SENSOR
(
INS_DEEL_KEY,
INS_ALG_RUIMTE_KEY,
WAARDE
)
BEQUEATH DEFINER
AS
SELECT r.ins_deel_key,
r.ins_alg_ruimte_key,
-- k.vaste_bezetting,
-- s.sensor,
-- s.sensor_status,
-- r.tijdvrij,
DECODE (
k.vaste_bezetting, -- vaste bezetter gaat voor alles, FLEX030 heeft een vaste gebruiker
NULL, (DECODE (
s.sensor_status, --- dan kijken of er een sensor op 1 staat
1, 1,
COALESCE (MIN (TRUNC (r.tijdvrij * 24 * 60) - 1),
999999))),
1) WAARDE
FROM (SELECT r.res_ins_deel_key ins_deel_key,
d.ins_alg_ruimte_key,
blokkerend.res_rsv_deel_van - SYSDATE tijdvrij
FROM res_v_aanwezigdeel r,
ins_deel d,
(SELECT res_deel_key, res_rsv_deel_van, res_rsv_deel_tot
FROM res_v_aanwezigrsv_deel
WHERE SYSDATE BETWEEN TRUNC (res_rsv_deel_van)
AND res_rsv_deel_tot) blokkerend -- Vandaag en nog niet afgelopen
WHERE r.res_ins_deel_key = d.ins_deel_key
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_srtdeel_key = 48701 --- alleen flexplekken
AND r.res_deel_key = blokkerend.res_deel_key(+)) r,
(SELECT ins_deel_key, ins_kenmerkdeel_waarde vaste_bezetting
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_kenmerk_key = 1141) k, -- Bezet door
(SELECT dk.ins_deelkoppeling_van_key flexplek_deel_key,
d.ins_deel_omschrijving sensor,
d.ins_deel_state sensor_status
FROM ins_deelkoppeling dk, ins_deel d
WHERE d.ins_deel_key = dk.ins_deelkoppeling_naar_key
AND d.ins_srtdeel_key IN (48802, 48803)) s ---- Sensoren
WHERE r.ins_deel_key = k.ins_deel_key(+)
AND r.ins_deel_key = s.flexplek_deel_key(+)
GROUP BY r.ins_deel_key,
r.ins_alg_ruimte_key,
k.vaste_bezetting,
s.sensor,
sensor_status,
r.tijdvrij;
CREATE OR REPLACE VIEW demo_v_rap_res_looplijst
AS
SELECT DISTINCT
TO_CHAR (rr.res_rsv_ruimte_van, 'yyyy-mm-dd')
|| rg.alg_gebouw_upper
|| TO_CHAR (rr.res_rsv_ruimte_van, 'hh24:mi')
hide_f_srt,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr nr,
rg.alg_gebouw_omschrijving fclt_f_gebouw,
rr.res_rsv_ruimte_van datum,
TO_CHAR (rr.res_rsv_ruimte_van, 'hh24:mi') begintijd,
TO_CHAR (rr.res_rsv_ruimte_tot, 'hh24:mi') eindtijd,
r.res_ruimte_nr fclt_f_ruimte,
o.res_opstelling_omschrijving opstelling,
rr.res_rsv_ruimte_bezoekers aantal,
rr.res_rsv_ruimte_omschrijving omschrijving,
mld.aant Meldingen,
voorzieningen,
CASE
WHEN LENGTH (catering) > 75
THEN
SUBSTR (catering, 1, 75) || ' ...'
ELSE
catering
END
catering,
rr.res_rsv_ruimte_key
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_opstelling o,
res_ruimte r,
res_alg_ruimte ar,
alg_v_ruimte_gegevens rg,
( SELECT res_rsv_ruimte_key,
'Ja (' || COUNT (res_rsv_ruimte_key) || ')' aant
FROM mld_melding
WHERE res_rsv_ruimte_key IS NOT NULL
GROUP BY res_rsv_ruimte_key) mld,
( SELECT res_rsv_ruimte_key,
LISTAGG (voorziening, CHR (13) || CHR (10))
WITHIN GROUP (ORDER BY voorziening)
AS Voorzieningen
FROM (SELECT res_rsv_ruimte_key,
res_deel_omschrijving voorziening
FROM res_deel rd, res_rsv_deel rrd
WHERE RES_RSV_DEEL_verwijder IS NULL
AND rd.res_deel_key = rrd.res_deel_key
AND res_rsv_ruimte_key IS NOT NULL)
GROUP BY res_rsv_ruimte_key) voorz,
( SELECT res_rsv_ruimte_key,
LISTAGG (artikel, ', ') WITHIN GROUP (ORDER BY artikel)
AS catering
FROM (SELECT res_rsv_ruimte_key,
res_rsv_artikel_aantal
|| ' x '
|| res_artikel_omschrijving
artikel
FROM res_artikel ra, res_rsv_artikel rra
WHERE RES_RSV_artikel_verwijder IS NULL
AND ra.res_artikel_key = rra.res_artikel_key
AND res_rsv_ruimte_key IS NOT NULL)
GROUP BY res_rsv_ruimte_key) cat
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND o.res_opstelling_key = ro.res_opstelling_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND ar.res_ruimte_key = r.res_ruimte_key
AND ar.res_alg_ruimte_verwijder IS NULL
AND rg.alg_ruimte_key = ar.alg_ruimte_key
AND mld.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key
AND voorz.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key
AND cat.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key;
CREATE OR REPLACE VIEW demo_v_rap_mob_looplijst
AS
SELECT *
FROM demo_v_rap_res_looplijst dvr
WHERE TRUNC (datum) = TRUNC (SYSDATE)
AND NOT EXISTS
(SELECT '1'
FROM res_kenmerkwaarde rk, res_kenmerk k
WHERE rk.res_kenmerk_key = k.res_kenmerk_key
AND res_srtkenmerk_key = 101
AND rk.res_rsv_ruimte_key = dvr.res_rsv_ruimte_key
AND fac.safe_to_number (
res_kenmerkreservering_waarde) = 1);
-- alleen catering, alleen vandaag
CREATE OR REPLACE VIEW demo_v_rap_cateringtoday
AS
SELECT dvr.*,
DECODE (st.res_kenmerkreservering_waarde, 1, lcl.l('lcl_Yes'), lcl.l('lcl_No'))
afgeleverd
FROM demo_v_rap_res_looplijst dvr,
(SELECT rk.res_rsv_ruimte_key,
sk.res_srtkenmerk_omschrijving,
res_kenmerkreservering_waarde
FROM res_kenmerkwaarde rk, res_kenmerk k, res_srtkenmerk sk
WHERE rk.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 101
AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key) st
WHERE st.res_rsv_ruimte_key(+) = dvr.res_rsv_ruimte_key
AND dvr.catering is not null
AND TRUNC (datum) = TRUNC (SYSDATE);
--=============================================================================
-- EXPORTFUNCTIES EXACT - Inkoopinterface
-------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE demo_add_xml_row_p (
p_bestand IN VARCHAR2,
p_prefix IN VARCHAR2,
p_regel IN VARCHAR2)
AS
v_index NUMBER;
BEGIN
SELECT COALESCE( MAX(fac_rapport_volgnr), 0) + 1
INTO v_index
FROM fac_rapport
WHERE fac_rapport_node = p_bestand;
INSERT INTO fac_rapport (
fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel)
VALUES (p_bestand,
v_index,
p_prefix || p_regel);
END;
/
CREATE OR REPLACE PROCEDURE demo_add_xml_element_p (
p_bestand IN VARCHAR2,
p_prefix IN VARCHAR2,
p_tag IN VARCHAR2,
p_value IN VARCHAR2)
AS
BEGIN
demo_add_xml_row_p(p_bestand,
p_prefix,
'<' || p_tag || '>'
|| xml.char_to_html(p_value)
|| '</' || p_tag || '>');
END;
/
CREATE OR REPLACE PROCEDURE demo_add_xml_row (
p_bestand IN VARCHAR2,
p_regel IN VARCHAR2)
AS
BEGIN
demo_add_xml_row_p (p_bestand, NULL, p_regel);
END;
/
CREATE OR REPLACE PROCEDURE demo_add_xml_element (
p_bestand IN VARCHAR2,
p_tag IN VARCHAR2,
p_value IN VARCHAR2)
AS
BEGIN
demo_add_xml_element_p (p_bestand, NULL, p_tag, p_value);
END;
/
CREATE OR REPLACE PROCEDURE demo_set_kenmerk(p_module IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_link_key IN NUMBER,
p_kenmerk_waarde IN VARCHAR2,
p_history IN NUMBER)
AS
v_count NUMBER;
v_niveau VARCHAR2 (1);
BEGIN
CASE p_module
WHEN 'PRS'
THEN
-- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
-- opgeslagen (da's dus redundant..?)
SELECT prs_kenmerk_niveau
INTO v_niveau
FROM prs_kenmerk
WHERE prs_kenmerk_key = p_kenmerk_key;
SELECT COUNT ( * )
INTO v_count
FROM prs_kenmerklink
WHERE prs_link_key = p_link_key
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
DELETE prs_kenmerklink
WHERE prs_link_key = p_link_key
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder IS NULL;
ELSE
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = p_kenmerk_waarde
WHERE prs_link_key = p_link_key
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerklink_waarde)
VALUES (p_kenmerk_key,
p_link_key,
v_niveau,
p_kenmerk_waarde);
END IF;
END IF;
WHEN 'ALG'
THEN
-- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
-- opgeslagen (da's dus redundant..?)
SELECT alg_kenmerk_niveau
INTO v_niveau
FROM alg_kenmerk
WHERE alg_kenmerk_key = p_kenmerk_key;
SELECT COUNT ( * )
INTO v_count
FROM alg_onrgoedkenmerk
WHERE alg_onrgoed_key = p_link_key
AND alg_kenmerk_key = p_kenmerk_key
AND alg_onrgoedkenmerk_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
DELETE alg_onrgoedkenmerk
WHERE alg_onrgoed_key = p_link_key
AND alg_kenmerk_key = p_kenmerk_key
AND alg_onrgoedkenmerk_verwijder IS NULL;
ELSE
UPDATE alg_onrgoedkenmerk
SET alg_onrgoedkenmerk_waarde = p_kenmerk_waarde
WHERE alg_onrgoed_key = p_link_key
AND alg_kenmerk_key = p_kenmerk_key
AND alg_onrgoedkenmerk_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO alg_onrgoedkenmerk (alg_kenmerk_key,
alg_onrgoed_key,
alg_onrgoed_niveau,
alg_onrgoedkenmerk_waarde)
VALUES (p_kenmerk_key,
p_link_key,
v_niveau,
p_kenmerk_waarde);
END IF;
END IF;
WHEN 'MLD'
THEN
-- melding- of opdrachtkenmerk?
SELECT mld_kenmerk_niveau
INTO v_niveau
FROM mld_kenmerk
WHERE mld_kenmerk_key = p_kenmerk_key;
CASE v_niveau
WHEN 'O'
THEN
SELECT COUNT ( * )
INTO v_count
FROM mld_kenmerkopdr
WHERE mld_opdr_key = p_link_key
AND mld_kenmerk_key = p_kenmerk_key
AND mld_kenmerkopdr_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
DELETE mld_kenmerkopdr
WHERE mld_opdr_key = p_link_key
AND mld_kenmerk_key = p_kenmerk_key
AND mld_kenmerkopdr_verwijder IS NULL;
ELSE
UPDATE mld_kenmerkopdr
SET mld_kenmerkopdr_waarde = p_kenmerk_waarde
WHERE mld_opdr_key = p_link_key
AND mld_kenmerk_key = p_kenmerk_key
AND mld_kenmerkopdr_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO mld_kenmerkopdr (mld_kenmerk_key,
mld_opdr_key,
mld_kenmerkopdr_waarde)
VALUES (p_kenmerk_key,
p_link_key,
p_kenmerk_waarde);
END IF;
END IF;
WHEN 'S'
THEN
SELECT COUNT ( * )
INTO v_count
FROM mld_kenmerkmelding
WHERE mld_melding_key = p_link_key
AND mld_kenmerk_key = p_kenmerk_key
AND mld_kenmerkmelding_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
DELETE mld_kenmerkmelding
WHERE mld_melding_key = p_link_key
AND mld_kenmerk_key = p_kenmerk_key
AND mld_kenmerkmelding_verwijder IS NULL;
ELSE
UPDATE mld_kenmerkmelding
SET mld_kenmerkmelding_waarde = p_kenmerk_waarde
WHERE mld_melding_key = p_link_key
AND mld_kenmerk_key = p_kenmerk_key
AND mld_kenmerkmelding_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO mld_kenmerkmelding (mld_kenmerk_key,
mld_melding_key,
mld_kenmerkmelding_waarde)
VALUES (p_kenmerk_key,
p_link_key,
p_kenmerk_waarde);
END IF;
END IF;
END CASE;
WHEN 'RES'
THEN
-- melding- of opdrachtkenmerk?
SELECT res_kenmerk_niveau
INTO v_niveau
FROM res_kenmerk
WHERE res_kenmerk_key = p_kenmerk_key;
CASE v_niveau
WHEN 'A'
THEN
SELECT COUNT ( * )
INTO v_count
FROM res_kenmerkwaarde
WHERE res_rsv_ruimte_key = p_link_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
DELETE res_kenmerkwaarde
WHERE res_rsv_ruimte_key = p_link_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
ELSE
UPDATE res_kenmerkwaarde
SET res_kenmerkreservering_waarde = p_kenmerk_waarde
WHERE res_rsv_ruimte_key = p_link_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO res_kenmerkwaarde (res_kenmerk_key,
res_rsv_ruimte_key,
res_kenmerkreservering_waarde)
VALUES (p_kenmerk_key,
p_link_key,
p_kenmerk_waarde);
END IF;
END IF;
-- Voorlopig alleen op ruimte niveau.
END CASE;
WHEN 'FIN'
THEN
-- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
-- opgeslagen (da's dus redundant..?)
SELECT fin_kenmerk_type
INTO v_niveau
FROM fin_kenmerk
WHERE fin_kenmerk_key = p_kenmerk_key;
IF v_niveau = 'F'
THEN
SELECT COUNT ( * )
INTO v_count
FROM fin_kenmerkfactuur
WHERE fin_factuur_key = p_link_key
AND fin_kenmerk_key = p_kenmerk_key
AND fin_kenmerkfactuur_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
DELETE fin_kenmerkfactuur
WHERE fin_factuur_key = p_link_key
AND fin_kenmerk_key = p_kenmerk_key
AND fin_kenmerkfactuur_verwijder IS NULL;
ELSE
UPDATE fin_kenmerkfactuur
SET fin_kenmerkfactuur_waarde = p_kenmerk_waarde
WHERE fin_factuur_key = p_link_key
AND fin_kenmerk_key = p_kenmerk_key
AND fin_kenmerkfactuur_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO fin_kenmerkfactuur (fin_kenmerk_key,
fin_factuur_key,
fin_kenmerkfactuur_waarde)
VALUES (p_kenmerk_key,
p_link_key,
p_kenmerk_waarde);
END IF;
END IF;
ELSE
-- Kenmerk bij factuurregel
SELECT COUNT ( * )
INTO v_count
FROM fin_kenmerkfactregel
WHERE fin_factuurregel_key = p_link_key
AND fin_kenmerk_key = p_kenmerk_key
AND fin_kenmerkfactregel_verwijder IS NULL;
IF v_count = 1
THEN
IF p_kenmerk_waarde IS NULL
THEN
DELETE fin_kenmerkfactregel
WHERE fin_factuurregel_key = p_link_key
AND fin_kenmerk_key = p_kenmerk_key
AND fin_kenmerkfactregel_verwijder IS NULL;
ELSE
UPDATE fin_kenmerkfactregel
SET fin_kenmerkfactregel_waarde = p_kenmerk_waarde
WHERE fin_factuurregel_key = p_link_key
AND fin_kenmerk_key = p_kenmerk_key
AND fin_kenmerkfactregel_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
THEN
INSERT INTO fin_kenmerkfactregel (fin_kenmerk_key,
fin_factuurregel_key,
fin_kenmerkfactregel_waarde)
VALUES (p_kenmerk_key,
p_link_key,
p_kenmerk_waarde);
END IF;
END IF;
END IF;
END CASE;
END;
/
-------------------------------------------------------------------------------
-- EXPORTFUNCTIE - Export exact
-------------------------------------------------------------------------------
CREATE OR REPLACE VIEW demo_v_aanwezigfactuur
(
FIN_FACTUUR_KEY,
FIN_FACTUUR_NR,
FIN_FACTUUR_TOTAAL,
FIN_FACTUUR_TOTAAL_BTW,
MLD_OPDR_KEY,
CNT_CONTRACT_KEY,
BES_BESTELOPDR_KEY,
PRS_PERSLID_KEY_USER,
FIN_FACTUUR_DATUM,
FIN_FACTUUR_BOEKMAAND,
FIN_FACTUUR_DEBITEUR_NR,
PRS_KOSTENSOORT_KEY,
FIN_FACTUUR_OPMERKING,
FIN_FACTUUR_STATUSES_KEY,
FIN_FACTUUR_VERWIJDER
)
AS
SELECT FIN_FACTUUR_KEY,
FIN_FACTUUR_NR,
FIN_FACTUUR_TOTAAL,
FIN_FACTUUR_TOTAAL_BTW,
MLD_OPDR_KEY,
CNT_CONTRACT_KEY,
BES_BESTELOPDR_KEY,
PRS_PERSLID_KEY_USER,
FIN_FACTUUR_DATUM,
FIN_FACTUUR_BOEKMAAND,
FIN_FACTUUR_DEBITEUR_NR,
PRS_KOSTENSOORT_KEY,
FIN_FACTUUR_OPMERKING,
FIN_FACTUUR_STATUSES_KEY,
FIN_FACTUUR_VERWIJDER
FROM fin_factuur
WHERE fin_factuur_verwijder IS NULL AND fin_factuur_statuses_key > 1;
-- fin_kenmerk_key 2 is de keuze of dit de laatste factuur van de opdracht is.
CREATE OR REPLACE VIEW demo_v_factuur_gegevens (
fin_factuur_key,
opdracht_id,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuurregel_totaal,
fin_factuurregel_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_key,
fin_factuurregel_nr,
fin_factuur_debiteur_nr,
fin_factuur_opmerking,
fin_factuur_boekmaand,
opdr_datum,
laatste_factuur,
project_nummer,
project_naam,
prs_kostensoort_oms,
prs_kostensoort_refcode,
prs_kostensoort_key,
prs_kostenplaats_key,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
fin_factuur_statuses_key,
lev_kpn
)
AS
SELECT f.fin_factuur_key,
DECODE (c.cnt_contract_key, null,
DECODE (bo.bes_bestelopdr_key, null,
(SELECT sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE m.mld_melding_key = o.mld_melding_key
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)
, bo.bes_bestelopdr_id)
, 'C' || TO_CHAR (cnt_contract_nummer_intern)
|| DECODE (cnt_contract_versie, NULL, NULL, '.' || cnt_contract_versie)
)
opdracht_id,
f.fin_factuur_datum,
f.fin_factuur_nr,
COALESCE (b_c.prs_bedrijf_key, COALESCE(b_o.prs_bedrijf_key, b_b.prs_bedrijf_key)) prs_bedrijf_key,
fr.fin_factuurregel_totaal,
round(fr.fin_factuurregel_totaal* DECODE(btw.fin_btwtabelwaarde_verlegd, 1, 0, btw.fin_btwtabelwaarde_perc/100),2) fin_factuurregel_btw,
btw.fin_btwtabelwaarde_code,
btw.fin_btwtabelwaarde_key,
fr.fin_factuurregel_nr,
f.fin_factuur_debiteur_nr,
f.fin_factuur_opmerking,
f.fin_factuur_boekmaand,
o.mld_opdr_datumbegin opdr_datum,
-- COALESCE ( (SELECT fac.safe_to_number (fac_usrdata_code)
-- FROM fin_kenmerkfactuur fk, fac_usrdata ud
-- WHERE fk.fin_factuur_key = f.fin_factuur_key
-- AND fk.fin_kenmerk_key = 2
-- AND fac.safe_to_number (fin_kenmerkfactuur_waarde) =
-- fac_usrdata_key),
-- 1
-- ),
1 laatste_factuur,
NULL projectnummer,
NULL projectnaam,
prs_kostensoort_oms,
k.prs_kostensoort_refcode,
k.prs_kostensoort_key,
COALESCE(o.prs_kostenplaats_key,
COALESCE(c.prs_kostenplaats_key,
(SELECT DISTINCT b.prs_kostenplaats_key
FROM bes_bestelling b,
bes_bestelopdr_item boi,
bes_bestelling_item bi
WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_key = b.bes_bestelling_key)
)
),
o.mld_opdr_key,
c.cnt_contract_key,
bo.bes_bestelopdr_key,
( -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn
-- met status ingevoerd, afgewezen of incompleet
SELECT DECODE(count(*), 0, f.fin_factuur_statuses_key, 2)
FROM fin_factuur f_t, cnt_contract c_t, bes_bestelopdr b_t, mld_opdr o_t
WHERE f_t.fin_factuur_verwijder is null
AND f_t.mld_opdr_key = o_t.mld_opdr_key(+)
AND f_t.cnt_contract_key = c_t.cnt_contract_key(+)
AND f_t.bes_bestelopdr_key = b_t.bes_bestelopdr_key(+)
AND COALESCE(o_t.mld_uitvoerende_keys, COALESCE(b_t.prs_bedrijf_key, c_t.cnt_prs_bedrijf_key))
= COALESCE(o.mld_uitvoerende_keys, COALESCE(bo.prs_bedrijf_key, c.cnt_prs_bedrijf_key))
AND f.fin_factuur_nr = f_t.fin_factuur_nr
AND f_t.fin_factuur_statuses_key in (1,2,3)
AND f.fin_factuur_statuses_key = 6) fin_factuur_statuses_key,
lk.prs_kostenplaats_nr lev_kpn
FROM fin_factuur f,
fin_factuurregel fr,
fin_btwtabelwaarde btw,
mld_opdr o,
mld_typeopdr ot,
cnt_contract c,
bes_bestelopdr bo,
prs_bedrijf b_o,
prs_bedrijf b_c,
prs_bedrijf b_b,
prs_kostensoort k,
prs_kostensoortgrp kg,
prs_kostenplaats lk
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
AND f.mld_opdr_key = o.mld_opdr_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+)
AND f.cnt_contract_key = c.cnt_contract_key(+)
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)
AND bo.prs_bedrijf_key = b_b.prs_bedrijf_key(+)
AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+)
AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+)
AND f.prs_kostensoort_key = k.prs_kostensoort_key(+)
AND k.prs_kostenplaats_key = lk.prs_kostenplaats_key(+)
AND k.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key(+)
AND f.fin_factuur_verwijder IS NULL;
-- De exact export kan meerdere administraties bevatten. In dat geval wordt de
-- regel opgeslagen met een prefix van het administratienummer met een ##
-- Hier splitsen we deze weer naar losse velden in de view. De kolom adm_exact is de bestandsnaam
-- zoals deze in de importdefinitie bepaald is.
CREATE OR REPLACE VIEW demo_v_export_exact_xml (
result,
result_order,
adm_exact
)
AS
SELECT SUBSTR (fac_rapport_regel, INSTR (fac_rapport_regel, '##') + 2),
fac_rapport_volgnr,
SUBSTR (fac_rapport_regel, 1, INSTR (fac_rapport_regel, '##') - 1)
FROM fac_rapport
WHERE fac_rapport_node = 'EXACT' AND INSTR (fac_rapport_regel, '##') <> 0
UNION ALL
SELECT fac_rapport_regel, fac_rapport_volgnr, NULL
FROM fac_rapport
WHERE fac_rapport_node = 'EXACT' AND INSTR (fac_rapport_regel, '##') = 0;
/* nieuwe view om oude demo_v_export_exact_xml view op termijn te vervangen. Door gebruik te maken
van de nieuwe view hoeft er per klant geen specifieke export in de cust.sql. De prefix in de
export tabel staat dan op DEMO */
CREATE OR REPLACE VIEW demo_v_export_exact (
result,
result_order,
adm_exact
)
AS
SELECT result, result_order, adm_exact
FROM demo_v_export_exact_xml;
CREATE OR REPLACE VIEW demo_v_bron_export_exact_xml
(
fin_factuur_key,
oms25,
opdracht_id,
factuur_nr,
datum,
crdnr,
projectnr,
projectnaam,
bedrag_txt,
bedrag,
bedrag_incl,
betaalref,
itemcode,
reknr,
kstplcode,
kstdrcode,
btw_code,
lev_kpn,
administratie
)
AS
SELECT fin_factuur_key,
fin_factuur_nr
|| ' - '
|| REPLACE (SUBSTR (fin_factuur_opmerking, 1, 30), ',', '')
oms25,
opdracht_id,
fin_factuur_nr,
TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum,
(SELECT prs_leverancier_nr
FROM prs_bedrijf b
WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key)
crdnr,
project_nummer,
project_naam,
REPLACE (TO_CHAR (bedrag), ',', '.') bedrag_txt,
bedrag,
bedrag_incl,
fin_factuur_nr || '/' || fin_factuur_debiteur_nr betaalref,
prs_kostensoort_oms itemcode,
prs_kostensoort_refcode reknr,
(SELECT prs_kostenplaats_nr
FROM prs_kostenplaats kp
WHERE kp.prs_kostenplaats_key = fg.prs_kostenplaats_key) kstplcode,
'KD999999' kstdrcode,
fin_btwtabelwaarde_code btw_code,
lev_kpn,
administratie
FROM ( SELECT g.fin_factuur_key,
opdracht_id,
project_nummer,
project_naam,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
fin_factuur_opmerking,
SUM (fin_factuurregel_totaal) bedrag,
SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incl,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
prs_kostenplaats_key,
lev_kpn,
administratie
FROM demo_v_factuur_gegevens g, demo_exp_factuur e
WHERE fin_factuur_statuses_key = 6
AND g.fin_factuur_key = e.fin_factuur_key
GROUP BY g.fin_factuur_key,
opdracht_id,
project_nummer,
project_naam,
fin_factuur_datum,
fin_factuur_nr,
prs_bedrijf_key,
fin_factuur_debiteur_nr,
fin_factuur_opmerking,
fin_btwtabelwaarde_code,
prs_kostensoort_oms,
prs_kostensoort_refcode,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
prs_kostenplaats_key,
lev_kpn,
administratie) fg;
-- Procedure om alle facturen te exporteren naar exact.
CREATE OR REPLACE PROCEDURE demo_select_exact_xml (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
CURSOR c (c_administratie VARCHAR2)
IS
SELECT crdnr, factuur_nr, MAX(datum) datum
FROM demo_v_bron_export_exact_xml
WHERE COALESCE(administratie, 'LEEG') = COALESCE(c_administratie, 'LEEG')
GROUP BY crdnr, factuur_nr;
CURSOR c_sub (c_administratie VARCHAR2, c_crdnr VARCHAR2, c_factuur_nr VARCHAR2)
IS
SELECT *
FROM demo_v_bron_export_exact_xml
WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr')
AND factuur_nr = c_factuur_nr
AND COALESCE(administratie, 'LEEG') = COALESCE(c_administratie, 'LEEG');
CURSOR c_adm
IS
SELECT NULL administratie FROM DUAL;
v_order_count NUMBER;
v_amount_sum NUMBER(10,2);
v_amount_sum_incl NUMBER(10,2);
v_count NUMBER;
v_sub_count NUMBER;
v_bestand VARCHAR2(12);
v_boekstuknummer NUMBER;
v_crdnr PRS_BEDRIJF.PRS_LEVERANCIER_NR%TYPE;
v_factuur_nr FIN_FACTUUR.FIN_FACTUUR_NR%TYPE;
v_prefix VARCHAR2(10);
BEGIN
v_order_count := 0;
v_amount_sum := 0;
v_amount_sum_incl := 0;
v_bestand := SUBSTR(p_applname, 1, 12);
v_crdnr := 'Q';
v_factuur_nr := 'Q';
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = v_bestand;
-- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan
-- ## AAIT#36589
DELETE fin_kenmerkfactuur kf
WHERE fin_kenmerk_key = 43
AND fin_factuur_key IN (SELECT fin_factuur_key
FROM fin_factuur
WHERE fin_factuur_statuses_key <> 7);
-- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export)
-- deze keys gebruikt kunnen worden.
DELETE demo_exp_factuur;
INSERT INTO demo_exp_factuur (fin_factuur_key, administratie)
( SELECT DISTINCT fin_factuur_key, NULL
FROM demo_v_factuur_gegevens fg, prs_kostenplaats kp, prs_kostenplaatsgrp kpg
WHERE fg.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND fg.fin_factuur_statuses_key = 6
AND fg.fin_factuur_datum > SYSDATE - (5 * 365) -- Check op geldige factuurdatum:
AND fg.fin_factuur_datum < SYSDATE + 365 -- facturen mogen niet ouder zijn dan 5 jaar of meer dan <20><>n jaar in de toekomst.
);
-- Bepaal het boekstuknummer (key 3) met het hoogste nummer van dit jaar
-- ## AAIT#36589
SELECT MAX(fin_kenmerkfactuur_waarde)
INTO v_boekstuknummer
FROM fin_kenmerkfactuur
WHERE fin_kenmerk_key = 43
AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY');
IF v_boekstuknummer IS NULL
THEN
v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || '000000');
END IF;
FOR rec_adm IN c_adm
LOOP
BEGIN
v_order_count := 0;
v_amount_sum := 0;
v_amount_sum_incl := 0;
IF rec_adm.administratie IS NULL
THEN
v_prefix := NULL;
ELSE
v_prefix := rec_adm.administratie || '##';
END IF;
-- header
demo_add_xml_row_p (v_bestand, v_prefix, '<?xml version="1.0" encoding="windows-1252"?>');
demo_add_xml_row_p (v_bestand, v_prefix, '<eExact>');
demo_add_xml_row_p (v_bestand, v_prefix, '<GLEntries>');
FOR rec IN c(rec_adm.administratie)
LOOP
BEGIN
-- Als we een nieuwe leverancier/factuurnummer tegenkomen gaan we het boekstuknummer ophogen.
IF rec.crdnr <> v_crdnr OR rec.factuur_nr <> v_factuur_nr
THEN
v_boekstuknummer := v_boekstuknummer + 1;
v_crdnr := rec.crdnr;
v_factuur_nr := rec.factuur_nr;
END IF;
demo_add_xml_row_p (v_bestand, v_prefix, '<GLEntry status="E" entry="' || xml.char_to_html(v_boekstuknummer) || '">');
demo_add_xml_element_p (v_bestand, v_prefix, 'Description', rec.factuur_nr);
demo_add_xml_element_p (v_bestand, v_prefix, 'Date', rec.datum);
demo_add_xml_element_p (v_bestand, v_prefix, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
demo_add_xml_row_p (v_bestand, v_prefix, '<Journal type="I" code="42"/>');
v_sub_count := 1;
FOR rec1 IN c_sub (rec_adm.administratie, v_crdnr, v_factuur_nr)
LOOP
BEGIN
-- Eerst maar even een kenmerk voor het boestuknummer aanmaken
demo_set_kenmerk('FIN', 43, rec1.fin_factuur_key, v_boekstuknummer, 0);
demo_add_xml_row_p (v_bestand, v_prefix, '<FinEntryLine number="' || v_sub_count || '" subtype="T" type="N">');
demo_add_xml_element_p (v_bestand, v_prefix, 'Date', rec1.datum);
demo_add_xml_row_p (v_bestand, v_prefix, '<GLAccount code="' || xml.char_to_html(rec1.reknr) || '"/>');
-- Meldingnummer alleen vermelden voor opdrachten met type 'Projectorder'
IF (rec1.projectnr IS NOT NULL)
THEN
demo_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.oms25);
demo_add_xml_row_p (v_bestand, v_prefix, '<Project code="' || rec1.projectnr || '" type="I" status="A">');
demo_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.projectnaam);
demo_add_xml_row_p (v_bestand, v_prefix, '</Project>');
ELSE
demo_add_xml_element_p (v_bestand, v_prefix, 'Description', rec1.oms25);
END IF;
demo_add_xml_row_p (v_bestand, v_prefix, '<Costcenter code="' || xml.char_to_html(rec1.kstplcode) || '"/>');
demo_add_xml_row_p (v_bestand, v_prefix, '<Costunit code="' || xml.char_to_html(rec1.kstdrcode) || '"/>');
demo_add_xml_row_p (v_bestand, v_prefix, '<Creditor number="' || xml.char_to_html(rec1.crdnr) || '"/>');
demo_add_xml_row_p (v_bestand, v_prefix, '<Item code="' || xml.char_to_html(rec1.itemcode) || '"/>');
demo_add_xml_row_p (v_bestand, v_prefix, '<Amount>');
demo_add_xml_element_p (v_bestand, v_prefix, 'Debit', rec1.bedrag_txt);
demo_add_xml_row_p (v_bestand, v_prefix, '<VAT code="' || xml.char_to_html(rec1.btw_code) || '"/>');
demo_add_xml_row_p (v_bestand, v_prefix, '</Amount>');
demo_add_xml_row_p (v_bestand, v_prefix, '<Payment>');
demo_add_xml_element_p (v_bestand, v_prefix, 'Reference', rec1.betaalref);
demo_add_xml_element_p (v_bestand, v_prefix, 'InvoiceNumber', rec1.fin_factuur_key); -- of moet dit v_boekstuknummer worden????
demo_add_xml_row_p (v_bestand, v_prefix, '</Payment>');
demo_add_xml_row_p (v_bestand, v_prefix, '<FinReferences>');
demo_add_xml_element_p (v_bestand, v_prefix, 'YourRef', rec1.betaalref);
demo_add_xml_element_p (v_bestand, v_prefix, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
demo_add_xml_row_p (v_bestand, v_prefix, '</FinReferences>');
demo_add_xml_row_p (v_bestand, v_prefix, '<FreeFields>');
demo_add_xml_row_p (v_bestand, v_prefix, '<FreeTexts>');
demo_add_xml_row_p (v_bestand, v_prefix, '<FreeText number="3">' || rec1.opdracht_id || '</FreeText>');
demo_add_xml_row_p (v_bestand, v_prefix, '</FreeTexts>');
demo_add_xml_row_p (v_bestand, v_prefix, '</FreeFields>');
demo_add_xml_row_p (v_bestand, v_prefix, '</FinEntryLine>');
v_sub_count := v_sub_count + 1;
v_amount_sum := v_amount_sum + rec1.bedrag;
v_amount_sum_incl := v_amount_sum_incl + rec1.bedrag_incl;
END;
END LOOP;
IF v_sub_count = 1
THEN
fac.writelog (p_applname, 'E', 'Fout tijdens Exact export. Factuurnummer: ' || v_factuur_nr || ' Crdnr: ' || v_crdnr,'');
END IF;
demo_add_xml_row_p (v_bestand, v_prefix, '</GLEntry>');
v_order_count := v_order_count + 1;
END;
END LOOP;
demo_add_xml_row_p (v_bestand, v_prefix, '</GLEntries>');
demo_add_xml_row_p (v_bestand, v_prefix, '</eExact>');
fac.writelog (p_applname, 'S', 'Exact export uitgevoerd (' || rec_adm.administratie || '). Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum || ' Totaal bedrag (incl): ' || v_amount_sum_incl, '');
END;
END LOOP;
END;
/
/* nieuwe procedure om oude demo_select_exact_xml procedure op termijn te vervangen. Door gebruik te maken
van de nieuwe procedure hoeft er per klant geen specifieke export in de cust.sql. De prefix in de
export tabel staat dan op DEMO */
CREATE OR REPLACE PROCEDURE demo_select_exact (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
BEGIN
demo_select_exact_xml (p_applname, p_applrun);
END;
/
CREATE OR REPLACE PROCEDURE demo_export_exact (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
CURSOR c_fact
IS
SELECT DISTINCT f.fin_factuur_key
FROM demo_exp_factuur f
, demo_v_factuur_gegevens fg
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.fin_factuur_statuses_key = 6;
CURSOR c_opdr
IS
SELECT distinct fg.mld_opdr_key, mld_statusopdr_key, m.mld_melding_status, m.mld_melding_key
FROM demo_exp_factuur f
, demo_v_factuur_gegevens fg
, mld_opdr o
, mld_melding m
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6;
CURSOR c_bes
IS
SELECT bo.*
FROM demo_exp_factuur f
, demo_v_factuur_gegevens fg
, bes_bestelopdr bo
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6;
-- pas de bedragen in het factuurschema aan als de laatste factuur ontvangen is.
CURSOR c_cnt
IS
SELECT DISTINCT fg.cnt_contract_key, fs.cnt_factuurschema_key
FROM demo_exp_factuur f,
demo_v_factuur_gegevens fg,
cnt_contract c,
cnt_factuurschema fs
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.cnt_contract_key = c.cnt_contract_key
AND c.cnt_contract_key = fs.cnt_contract_key
AND fg.fin_factuur_boekmaand = fs.cnt_factuurschema_boekmaand
AND laatste_factuur = 1
AND fg.fin_factuur_statuses_key = 6;
CURSOR c_sync_kostensoort
IS
SELECT COALESCE (kstd.prs_kostensoort_key, kvg.prs_kostensoort_key)
std_kostensoort_key,
f.prs_kostensoort_key fac_kostensoort_key,
f.fin_factuur_key
FROM fin_factuur f,
demo_exp_factuur ef,
mld_opdr o,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline md,
prs_kostensoort kstd,
prs_kostensoort kvg
WHERE f.fin_factuur_key = ef.fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key
AND m.mld_melding_key = o.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND std.prs_kostensoort_key = kstd.prs_kostensoort_key(+)
AND md.prs_kostensoort_key = kvg.prs_kostensoort_key(+);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanvrager NUMBER;
v_bestelling_key NUMBER;
v_logdate DATE;
BEGIN
v_errormsg := 'Geen akties';
-- Facilitor user
v_aanvrager := 28142;
FOR rec1 IN c_bes
LOOP
BEGIN
-- indien nog niet afgemeld, dan maar even afmelden.
IF rec1.bes_bestelopdr_status = 3 THEN -- in behandeling
UPDATE bes_bestelopdr
SET bes_bestelopdr_status = 4
WHERE bes_bestelopdr_key= rec1.bes_bestelopdr_key
AND bes_bestelopdr_status = 3;
END IF;
IF rec1.bes_bestelopdr_status = 5 -- bevestigd
OR rec1.bes_bestelopdr_status = 4 -- in bestelling
OR rec1.bes_bestelopdr_status = 3 THEN
UPDATE bes_bestelopdr_item B
SET bes_bestelopdr_item_aantalontv = COALESCE(bes_bestelopdr_item_aantal, 0),
bes_bestelopdr_item_ontvangen = SYSDATE
WHERE b.bes_bestelopdr_key = rec1.bes_bestelopdr_key;
UPDATE bes_bestelling_item bi
SET bes_bestelling_item_aantalontv = COALESCE(bes_bestelling_item_aantal, 0)
WHERE EXISTS (SELECT bes_bestelopdr_key
FROM bes_bestelopdr_item boi
WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bes_bestelopdr_key = rec1.bes_bestelopdr_key);
SELECT distinct bes_bestelling_key
INTO v_bestelling_key
FROM bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bes_bestelopdr_key = rec1.bes_bestelopdr_key;
bes.updatebestelopdrstatus(rec1.bes_bestelopdr_key, v_aanvrager);
bes.updatebestellingstatus(v_bestelling_key, v_aanvrager);
END IF;
END;
END LOOP;
-- set de status van de opdracht en neem de kosten over van de factuur.
FOR rec1 IN c_opdr
LOOP
BEGIN
-- indien nog niet afgemeld, dan maar even afmelden.
IF rec1.mld_statusopdr_key <> 6 AND rec1.mld_statusopdr_key <> 7 AND rec1.mld_statusopdr_key <> 9 THEN
mld.setopdrachtstatus (rec1.mld_opdr_key, 6, v_aanvrager);
mld.setopdrachtstatus (rec1.mld_opdr_key, 9, v_aanvrager);
END IF;
UPDATE mld_opdr o
SET mld_opdr_kosten =
(SELECT SUM (fin_factuurregel_totaal)
FROM demo_v_aanwezigfactuur f
, fin_factuurregel fr
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key
AND f.fin_factuur_statuses_key >= 6)
WHERE o.mld_opdr_key = rec1.mld_opdr_key
AND rec1.mld_melding_status IN (4, 5, 7); -- anders faalt de trigger sowieso
-- update meldingstatus
mld.updatemeldingstatusAV (rec1.mld_melding_key, 0, v_aanvrager, 0);
-- zet de status naar verwerkt (user is facilitor)
mld.setopdrachtstatus (rec1.mld_opdr_key, 7, v_aanvrager);
END;
END LOOP;
-- Neem de kosten van de factuur over in het termijnbedrag
FOR rec1 IN c_cnt
LOOP
BEGIN
UPDATE cnt_factuurschema fs
SET (cnt_factuurschema_opmerking,
cnt_factuurschema_bedrag) =
(SELECT SUBSTR(DECODE(cnt_factuurschema_opmerking, NULL, '', cnt_factuurschema_opmerking || CHR(10)) || 'Bedrag na verwerken facturen ' || TO_CHAR(SYSDATE, 'DD-MM-YYYY') || ' aangepast van ' || cnt_factuurschema_bedrag || ' naar ' || SUM (fin_factuurregel_totaal),1,320) opmerking,
SUM (fin_factuurregel_totaal) totaal
FROM demo_v_aanwezigfactuur f
, fin_factuurregel fr
WHERE f.fin_factuur_key = fr.fin_factuur_key
AND f.cnt_contract_key = fs.cnt_contract_key
AND f.fin_factuur_boekmaand = fs.cnt_factuurschema_boekmaand
AND f.fin_factuur_statuses_key >= 6)
WHERE fs.cnt_factuurschema_key = rec1.cnt_factuurschema_key;
UPDATE cnt_contract c
SET c. cnt_contract_kosten = (SELECT SUM(cnt_factuurschema_bedrag)
FROM cnt_factuurschema fs
WHERE fs.cnt_contract_key = rec1.cnt_contract_key)
WHERE c.cnt_contract_key = rec1.cnt_contract_key;
END;
END LOOP;
FOR rec1 IN c_fact
LOOP
BEGIN
UPDATE fin_factuur f
SET fin_factuur_statuses_key = 7
WHERE f.fin_factuur_key = rec1.fin_factuur_key;
fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL);
END;
END LOOP;
-- verwijder de enties uit de tijdelijke tabel. (AAEY#29465)
DELETE demo_exp_factuur;
END;
/
-- rapport voor calender weergave
CREATE OR REPLACE VIEW demo_v_rap_opdrcal
AS
SELECT ot.MLD_TYPEOPDR_OMSCHRIJVING
|| ': '
|| o.mld_melding_key
|| '/'
|| mld_opdr_bedrijfopdr_volgnr
|| ' '
|| mo.NAAM title,
o.MLD_OPDR_DATUMBEGIN van,
o.mld_opdr_einddatum tot,
o.MLD_OPDR_KEY,
CASE WHEN mo.TYPE = 'B' THEN '#343F4D ' ELSE '#00B0F0' END color
FROM mld_opdr o,
mld_melding m,
mld_typeopdr ot,
MLD_V_UITVOERENDE mo
WHERE m.mld_melding_key = o.mld_opdr_key
AND o.MLD_TYPEOPDR_KEY = ot.MLD_TYPEOPDR_KEY
AND o.MLD_UITVOERENDE_KEYS = mo.MLD_UITVOERENDE_KEY
AND o.MLD_STATUSOPDR_KEY IN (3,
4,
5,
8,
10);
CREATE OR REPLACE VIEW DEMO_V_RAP_PRS_LOOKUP
AS
SELECT p.prs_perslid_key, p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_inactief IS NULL
AND p.prs_perslid_verwijder IS NULL
AND (p.prs_perslid_einddatum IS NULL OR p.prs_perslid_einddatum > TRUNC (SYSDATE))
AND p.prs_perslid_apikey IS NULL;
------ 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