Files
Database/CAD/CAD_VIE.SRC
Jos Groot Lipman 0d0fa9a49d Merge DB23c patches
svn path=/Database/trunk/; revision=23497
2014-11-27 14:21:17 +00:00

827 lines
32 KiB
Plaintext

#ifdef CAD // 22-05-1998 KTH
/* CAD_VIE.SRC
* $Revision$
* $Id$
*/
CREATE_VIEW(cad_v_cad_aanwezigtekening,0) AS
SELECT * FROM cad_tekening C_T
WHERE cad_tekening_verwijder IS NULL
AND (C_T.ins_discipline_key IN (SELECT ins_discipline_key
FROM ins_discipline)
OR C_T.ins_discipline_key IS NULL);
CREATE_VIEW(cad_v_cad_tekening_gegevens,0)
(cad_tekening_key,
alg_locatie_key,
alg_locatie_code,
alg_gebouw_key,
alg_gebouw_code,
alg_verdieping_key,
alg_verdieping_omschrijving,
ins_discipline_key,
ins_discipline_omschrijving) AS
SELECT C_T.cad_tekening_key,
C_T.alg_locatie_key,
ALG_L.alg_locatie_code,
ALG_G.alg_gebouw_key,
ALG_G.alg_gebouw_code,
C_T.alg_verdieping_key,
ALG_V.alg_verdieping_omschrijving,
C_T.ins_discipline_key,
INS_D.ins_discipline_omschrijving
FROM alg_locatie ALG_L,
alg_verdieping ALG_V,
alg_gebouw ALG_G,
ins_discipline INS_D,
cad_v_cad_aanwezigtekening C_T
WHERE C_T.alg_locatie_key = ALG_L.alg_locatie_key
AND C_T.alg_verdieping_key = ALG_V.alg_verdieping_key (+)
AND ALG_V.alg_gebouw_key = ALG_G.alg_gebouw_key (+)
AND C_T.ins_discipline_key = INS_D.ins_discipline_key (+);
CREATE_VIEW(cad_v_plattegrond,0) AS
SELECT * FROM cad_tekening
WHERE cad_tekening_verwijder IS NULL
AND UPPER(cad_tekening_type) = 'P';
CREATE_VIEW(cad_v_contour,0) AS
SELECT * FROM cad_tekening
WHERE cad_tekening_verwijder IS NULL
AND UPPER(cad_tekening_type) = 'C';
CREATE_VIEW(cad_v_discipline,0) AS
SELECT * FROM cad_tekening
WHERE cad_tekening_verwijder IS NULL
AND UPPER(cad_tekening_type) = 'D';
/* mapping van labels in tekening met ruimtenr in database
* let op: de applicatie kan van een specifieke variant gebruikmaken
* deze heet dan XXXX_V_SYNC..
*/
CREATE_VIEW(cad_v_sync_alg_ruimte,0)
(alg_ruimte_key,
alg_verdieping_key,
cadlabel
) AS
SELECT R.alg_ruimte_key,
R.alg_verdieping_key,
R.alg_ruimte_nr
FROM alg_v_aanwezigruimte R;
CREATE_VIEW(cad_v_sync_alg_terrein,0)
(alg_terreinsector_key,
alg_locatie_key,
cadlabel
) AS
SELECT
t.alg_terreinsector_key,
t.alg_locatie_key,
t.alg_terreinsector_code
FROM alg_v_aanwezigterreinsector t;
/* View met ALLE tekeningen, ongeacht de autorisatie; minimale kolommen, gebruikt in CAD_PAC.SRC */
CREATE_VIEW(cad_v_cad_tekening,0) AS
SELECT ins_discipline_key,
alg_locatie_key,
alg_verdieping_key,
cad_tekening_type,
cad_tekening_filenaam
FROM cad_tekening C_T
WHERE cad_tekening_verwijder IS NULL;
/* 29-06-1998 KTH LOG#1905
* View CAD_V_INS_DEEL wordt door de AutoCAD Map-user FCLTCAD geraadpleegd.
* Bij die user heet de SYNONYM ernaar toe anders (zie CAD_ROL).
*/
CREATE_VIEW(cad_v_ins_deel,0)
(ins_deel_key,
ins_deel_cadlabel,
ins_srtdeel_omschrijving,
ins_deel_oppervlak,
ins_deel_omtrek
) AS
SELECT D.ins_deel_key,
D.ins_deel_omschrijving,
SD.ins_srtdeel_omschrijving,
NVL(TO_CHAR(D.ins_deel_oppervlak),'-')||' m2',
NVL(TO_CHAR(D.ins_deel_omtrek),'-')||' m'
FROM all_v_aanwezigdeel D, ins_srtdeel SD
WHERE SD.ins_srtdeel_key=D.ins_srtdeel_key;
CREATE_VIEW(cad_v_lpn_ins_deel_2,0) AS
SELECT
D.ins_deel_key,
ins_srtkenmerk_omschrijving,
KD.ins_kenmerkdeel_waarde ||' '|| SK.ins_srtkenmerk_dimensie INS_KENMERKDEEL_WAARDE2
FROM
ins_srtkenmerk SK,
ins_kenmerk K,
ins_kenmerkdeel KD,
ins_deel D
WHERE SK.ins_srtkenmerk_key=K.ins_srtkenmerk_key
AND K.ins_kenmerk_key=KD.ins_kenmerk_key
AND KD.ins_deel_key=D.ins_deel_key
AND KD.ins_kenmerkdeel_verwijder IS NULL;
CREATE_VIEW(cad_v_lpn_ins_deel_1,0) AS
SELECT
D.ins_deel_key,
SD.ins_srtdeel_omschrijving,
D.ins_deel_omschrijving
FROM
ins_srtdeel SD,
ins_deel D
WHERE D.ins_srtdeel_key = SD.ins_srtdeel_key;
CREATE_VIEW(cad_v_prs_werkplek,0)
(prs_werkplek_key,
prs_werkplek_cadlabel,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_werkplek_opp
) AS
SELECT W.prs_werkplek_key,
W.prs_werkplek_volgnr,
W.prs_werkplek_volgnr,
W.prs_werkplek_omschrijving,
W.prs_werkplek_opp /* Alleen een waarde indien prs_werkplek_vastopp 1 is, anders te traag? */
FROM prs_werkplek W;
CREATE_VIEW(cad_v_lpn_prs_werkplek_1,0) AS
SELECT W.prs_werkplek_key,
W.prs_werkplek_volgnr,
W.prs_werkplek_omschrijving
FROM prs_werkplek W;
/* Standard thema/label views */
// Zowel label-views als thema-views hebben de kolommen alg_ruimte_key en waarde
// Feature: Sommige thema views kunnen updatable zijn!
// In dat geval moet de kolom waarde_key ook aanwezig zijn, en zal de code met
// een UPDATE (drop) of een INSERT (shift-drop) opereren. Om die te ondersteunen
// zal meestal een INSTEAD OF trigger moeten worden gedefinieerd, dat moet
// dan ook hier gebeuren. Let op de naamgevingsconventies: cad_v_thema_x
// heeft trigger cad_t_thema_x_i_iu (of _i_i resp _i_u)
-- FSN#14942: afdelingen zijn geen bewoners meer
CREATE_VIEW(cad_v_label_bewoner, 0)
(alg_ruimte_key, waarde)
AS
SELECT prs_w.prs_alg_ruimte_key,
prs_p.prs_perslid_naam
|| DECODE (prs_p.prs_perslid_voorletters, NULL, '', ', ' || prs_p.prs_perslid_voorletters)
|| DECODE (prs_p.prs_perslid_voornaam, NULL, '', ' (' || prs_p.prs_perslid_voornaam || ')')
FROM prs_werkplek prs_w, prs_perslidwerkplek prs_pw, prs_perslid prs_p
WHERE prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
AND prs_pw.prs_perslid_key IS NOT NULL
AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
AND prs_w.prs_werkplek_virtueel = 0
UNION
SELECT prs_w.prs_alg_ruimte_key, '[Vrij]'
FROM prs_werkplek prs_w, prs_v_werkplek_bezetting prs_wb
WHERE prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key
AND prs_w.prs_werkplek_virtueel = 0
AND prs_wb.prs_werkplek_bezetting < 100;
-- Toont alle afdelingen die aan een ruimte gekoppeld zijn
CREATE_VIEW(cad_v_label_afdelingen, 0)
(alg_ruimte_key, waarde)
AS
SELECT alg_ruimte_key, prs_afdeling_naam
FROM prs_ruimteafdeling ra, prs_v_afdeling d
WHERE ra.prs_afdeling_key = d.prs_afdeling_key;
-- Toont de afdeling die aan een ruimte gekoppeld is, en Meerdere! indien meerdere.
CREATE_VIEW(cad_v_thema_afdelingen, 0)
(alg_ruimte_key, waarde, waarde_key)
AS
SELECT x.alg_ruimte_key,
DECODE (x.aantal,
1, SUBSTR (x.sp, 1, 60),
'Meerdere!'),
DECODE (x.aantal, 1, x.sp_key, NULL)
FROM (SELECT ra.alg_ruimte_key,
MIN (d.prs_afdeling_naam) sp,
MIN (d.prs_afdeling_key) sp_key,
COUNT (ra.prs_afdeling_key) aantal
FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling d
WHERE ra.prs_afdeling_key = d.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) x;
-- Update is: oude situatie weg, nieuwe wordt gedefinieerd.
-- Insert is: toevoegen aan oude situatie
CREATE_TRIGGER(cad_t_thema_afdelingen_i_iu)
INSTEAD OF INSERT OR UPDATE
ON cad_v_thema_afdelingen
BEGIN
IF UPDATING -- oude weggooien
THEN
DELETE FROM prs_ruimteafdeling
WHERE alg_ruimte_key = :new.alg_ruimte_key
AND prs_afdeling_key <> :new.waarde_key;
END IF;
BEGIN
INSERT INTO prs_ruimteafdeling (alg_ruimte_key, prs_afdeling_key)
VALUES (:new.alg_ruimte_key, :new.waarde_key);
EXCEPTION
WHEN DUP_VAL_ON_INDEX -- Hij was al aanwezig
THEN
NULL;
END;
END;
/
// De afdelingsbezetting maar dan gebaseerd op de afdelingen
// van de de personen die op de werkplekken zitten
CREATE_VIEW(cad_v_thema_prsafdelingen, 0)
(alg_ruimte_key, waarde)
AS
SELECT wp.prs_alg_ruimte_key, d.prs_afdeling_naam
FROM prs_werkplek wp, prs_perslidwerkplek pwp, prs_perslid p, prs_afdeling d
WHERE d.prs_afdeling_key = p.prs_afdeling_key
AND pwp.prs_perslid_key = p.prs_perslid_key
AND pwp.prs_werkplek_key = wp.prs_werkplek_key;
CREATE_VIEW(cad_v_label_bewonerwp, 0) (alg_ruimte_key,waarde)
AS
SELECT DISTINCT prs_alg_ruimte_key, waarde
FROM (SELECT prs_w.prs_alg_ruimte_key,
CHR (1)
|| prs_w.prs_werkplek_volgnr
|| ' '
|| prs_p.prs_perslid_naam
|| DECODE (prs_p.prs_perslid_voorletters, NULL, '', ', ' || prs_p.prs_perslid_voorletters)
|| DECODE (prs_p.prs_perslid_voornaam, NULL, '', ' (' || prs_p.prs_perslid_voornaam || ')')
|| ': '
|| TO_CHAR (NVL (prs_pw.prs_perslidwerkplek_bezetting, 0))
|| '%' waarde
FROM prs_werkplek prs_w,
prs_perslidwerkplek prs_pw,
prs_perslid prs_p
WHERE prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
AND prs_pw.prs_perslid_key IS NOT NULL
AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
UNION
SELECT prs_w.prs_alg_ruimte_key,
CHR (1)
|| prs_w.prs_werkplek_volgnr
|| ' Vrij: '
|| TO_CHAR (100 - NVL (SUM (prs_wb.prs_perslidwerkplek_bezetting), 0))
|| '%'
FROM prs_werkplek prs_w,
prs_perslidwerkplek prs_wb
WHERE prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key(+)
GROUP BY prs_w.prs_alg_ruimte_key, prs_w.prs_werkplek_key, prs_w.prs_werkplek_volgnr
HAVING SUM (NVL (prs_wb.prs_perslidwerkplek_bezetting, 0)) < 100) DATA
/
CREATE_VIEW(CAD_V_THEMA_AANTALWP, 0) (ALG_RUIMTE_KEY, WAARDE)
AS
SELECT wp.prs_alg_ruimte_key, COUNT (*)
FROM PRS_WERKPLEK wp
GROUP BY prs_alg_ruimte_key;
/
CREATE_VIEW(cad_v_label_werkplekken,0)
(alg_ruimte_key, waarde, highlight)
AS
SELECT prs_alg_ruimte_key,
CHR (1)
|| prs_werkplek_volgnr
|| ' ('
|| TO_CHAR (wpopp, 'FM9990.0')
|| ' m2'
|| DECODE (bez, 100, '', ' '||TO_CHAR (bez) || '%')
|| ')'
waarde,
DECODE (SIGN (bez - 100), 1, 2, 0) highlight
FROM ( SELECT prs_w.prs_alg_ruimte_key,
prs_w.prs_werkplek_volgnr,
SUM (NVL (prs_pw.prs_perslidwerkplek_bezetting, 0)) bez,
wpopp
FROM prs_werkplek prs_w,
prs_v_werkplek_oppervlakte pwo,
prs_perslidwerkplek prs_pw
WHERE prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key(+)
AND pwo.prs_werkplek_key(+) = prs_w.prs_werkplek_key
GROUP BY prs_w.prs_alg_ruimte_key,
prs_w.prs_werkplek_volgnr,
'prs_werkplek',
prs_w.prs_werkplek_key,
wpopp);
CREATE_VIEW(CAD_V_THEMA_WPOPP, 0)
(alg_ruimte_key, waarde)
AS
SELECT wp.prs_alg_ruimte_key, r.alg_ruimte_bruto_vloeropp / COUNT (prs_werkplek_key)
FROM PRS_WERKPLEK wp, ALG_RUIMTE r
WHERE wp.prs_alg_ruimte_key = r.alg_ruimte_key
GROUP BY wp.prs_alg_ruimte_key, r.alg_ruimte_bruto_vloeropp
/
CREATE_VIEW(cad_v_thema_bezetmismatch, 0)
(alg_ruimte_key, waarde)
AS
SELECT ra.alg_ruimte_key, 'mismatch'
FROM prs_ruimteafdeling ra, prs_werkplek wp, prs_perslidwerkplek pwp, prs_perslid p
WHERE pwp.prs_perslid_key = p.prs_perslid_key
AND pwp.prs_werkplek_key = wp.prs_werkplek_key
AND wp.prs_alg_ruimte_key = ra.alg_ruimte_key
AND ra.prs_afdeling_key <> p.prs_afdeling_key;
CREATE_VIEW(cad_v_label_srtruimteopp,0)
(alg_ruimte_key, waarde)
AS
SELECT r.alg_ruimte_key,
sr.alg_srtruimte_omschrijving || ' (' || r.alg_ruimte_bruto_vloeropp || ' m2)'
FROM alg_v_aanwezigruimte r, alg_srtruimte sr
WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key;
-- Ruimtesoort
CREATE_VIEW(cad_v_thema_srtruimte, 0)
(alg_ruimte_key, waarde, waarde_key)
AS
SELECT r.alg_ruimte_key, sr.alg_srtruimte_omschrijving, r.alg_srtruimte_key
FROM alg_v_aanwezigruimte r, alg_srtruimte sr
WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key(+);
CREATE_TRIGGER(cad_t_thema_srtruimte_i_iu)
INSTEAD OF INSERT OR UPDATE ON cad_v_thema_srtruimte
FOR EACH ROW
BEGIN
UPDATE alg_ruimte
SET alg_srtruimte_key = :new.waarde_key
WHERE alg_ruimte_key = :new.alg_ruimte_key;
END;
/
-- Bezetting
-- Afdelingen
CREATE_VIEW(cad_v_thema_vloerafwerking, 0)
(alg_ruimte_key, waarde)
AS
SELECT r.alg_ruimte_key,
va.fac_usrdata_omschr
FROM alg_ruimte r,
(SELECT rr.alg_ruimte_key, ud.fac_usrdata_omschr
FROM alg_onrgoedkenmerk ok,
fac_usrdata ud,
fac_kenmerkdomein rk,
alg_kenmerk k,
alg_v_aanwezigruimte rr
WHERE rk.fac_usrtab_key = ud.fac_usrtab_key
AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key
AND TO_CHAR (ud.fac_usrdata_key) = ok.alg_onrgoedkenmerk_waarde
AND k.alg_kenmerk_key = 2
AND rr.alg_ruimte_key = ok.alg_onrgoed_key) va
WHERE va.alg_ruimte_key = r.alg_ruimte_key;
--Meldingen
CREATE_VIEW(cad_v_thema_openmeldingen,0)
(alg_ruimte_key, waarde)
AS
SELECT r.alg_ruimte_key, COUNT (mld_melding_key)
FROM alg_ruimte r, mld_melding m
WHERE m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key
AND m.mld_melding_status IN (2, 3, 4, 7)
GROUP BY r.alg_ruimte_key;
CREATE_VIEW(cad_v_label_bewoner2,0) (alg_ruimte_key, waarde)
AS
SELECT alg_ruimte_key,
prs_p.prs_perslid_naam
|| DECODE (prs_p.prs_perslid_voorletters,
NULL, '',
', ' || prs_p.prs_perslid_voorletters
)
|| DECODE (prs_p.prs_perslid_voornaam,
NULL, '',
' (' || prs_p.prs_perslid_voornaam || ')'
)
|| '-'
|| CASE
WHEN aantalwp > 1
THEN norm_verband || '/'
ELSE ''
END
|| prs_p.prs_perslid_dienstverband
|| ' FTE'
FROM prs_perslid prs_p, prs_v_norm_verband pnv
WHERE pnv.prs_perslid_key = prs_p.prs_perslid_key;
CREATE OR REPLACE FORCE VIEW PRJ_V_CAD_LABEL_BEWONERWPE
(
PRJ_WERKPLEK_KEY,
WAARDE,
HIGHLIGHT
)
AS
SELECT DISTINCT
prj_werkplek_key, waarde, DECODE (prj_selectie_key, NULL, 0, 1)
FROM (SELECT prj_r.prj_scenario_key,
prs_w.prj_werkplek_key,
prs_p.prs_perslid_naam
|| DECODE (prs_p.prs_perslid_voorletters,
NULL, '',
', ' || prs_p.prs_perslid_voorletters)
|| DECODE (prs_p.prs_perslid_voornaam,
NULL, '',
' (' || prs_p.prs_perslid_voornaam || ')')
|| ': '
|| TO_CHAR (NVL (prs_pw.prj_perslidwerkplek_bezetting, 0))
|| '%'
waarde,
'PRJ_WERKPLEK' label_soort,
prs_pw.prj_werkplek_key label_key
FROM PRJ_RUIMTE prj_r,
PRJ_WERKPLEK prs_w,
(SELECT *
FROM PRJ_PERSLIDWERKPLEK
WHERE prj_perslidwerkplek_verwijder IS NULL) prs_pw,
PRS_PERSLID prs_p
WHERE prs_w.prj_werkplek_key = prs_pw.prj_werkplek_key
AND prs_pw.prs_perslid_key IS NOT NULL
AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
AND prs_w.prj_ruimte_key = prj_r.prj_ruimte_key
UNION
SELECT -1,
prs_w.prj_werkplek_key,
' Vrij: '
|| TO_CHAR(100
- NVL (
SUM (prs_wb.prj_perslidwerkplek_bezetting),
0))
|| '%',
'PRJ_WERKPLEK',
prs_w.prj_werkplek_key
FROM PRJ_WERKPLEK prs_w,
(SELECT *
FROM PRJ_PERSLIDWERKPLEK
WHERE prj_perslidwerkplek_verwijder IS NULL) prs_wb
WHERE prs_w.prj_werkplek_key = prs_wb.prj_werkplek_key(+)
AND prj_werkplek_verwijder IS NULL
GROUP BY prs_w.prj_werkplek_key,
prs_w.prj_werkplek_key,
prs_w.prj_werkplek_volgnr
HAVING SUM (NVL (prs_wb.prj_perslidwerkplek_bezetting, 0)) < 100)
DATA,
PRJ_SELECTIE ps
WHERE ps.prj_scenario_key(+) = DATA.prj_scenario_key
AND ps.prj_selectie_tabelnaam(+) = label_soort
AND ps.prj_selectie_tabelkey(+) = label_key;
/* Lijstje met (ALGCAD) wijzigingen op een ruimte
Kolom FAC_TRACKING_DATUM om een klantspecifieke beperking mogelijk te maken
*/
CREATE_VIEW(cad_v_label_track_algcad, 0)
(
ALG_RUIMTE_KEY,
WAARDE,
FAC_TRACKING_DATUM
)
AS
SELECT fac_tracking_refkey,
TO_CHAR (fac_tracking_datum, 'YYYY-MM')
|| ' '
|| fac_tracking_oms
|| CHR (10)
|| '[s10][i][cd0d0d0]'
|| TO_CHAR (fac_tracking_datum, 'YYYY-MM-DD HH24:MI:SS')
|| ' '
|| PP.PRS_PERSLID_NAAM_FULL,
fac_tracking_datum
FROM fac_srtnotificatie fs,
fac_tracking fn,
prs_v_perslid_fullnames_all pp
WHERE fac_srtnotificatie_code = 'ALGCAD'
AND fs.fac_srtnotificatie_key = fn.fac_srtnotificatie_key
AND fn.prs_perslid_key = pp.prs_perslid_key(+)
ORDER BY fac_tracking_refkey, fac_tracking_datum DESC;
-- Nog wat basis views voor flexplekthemas
CREATE_VIEW(cad_v_thema_flexplekken_totaal, 0) AS select alg_ruimte_key, vrij+bezet waarde from prs_v_flexplekken;
CREATE_VIEW(cad_v_thema_flexplekken_bezet, 0) AS select alg_ruimte_key, bezet waarde from prs_v_flexplekken;
-- met -1=ruimte zonder wp en -2=ruimte met wp en n=aantal beschikbare flexplekken
CREATE_VIEW(cad_v_thema_flexplekken_vrij, 0)
AS
SELECT alg_ruimte_key, vrij waarde FROM prs_v_flexplekken
UNION
SELECT alg_ruimte_key, -1
FROM alg_ruimte
WHERE NOT EXISTS
(SELECT ''
FROM prs_werkplek
WHERE prs_alg_ruimte_key = alg_ruimte_key)
UNION
SELECT DISTINCT prs_alg_ruimte_key, -2
FROM prs_werkplek;
CREATE_VIEW(cad_v_label_flexwerkers, 0)
(
alg_ruimte_key,
waarde
)
AS
SELECT prs_alg_ruimte_key alg_ruimte_key, prs_perslid_naam_full waarde
FROM prs_werkplek wp, prs_perslidwerkplek pwp, prs_v_perslid_fullnames pf
WHERE pwp.prs_perslid_key = pf.prs_perslid_key
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
AND wp.prs_werkplek_type = 1;
-- Een werkplekkleurenthema, flex/vast/vrij/bezet
CREATE_VIEW(cad_v_thema_flexwp, 0)
(
prs_werkplek_key,
waarde
)
AS
SELECT wp.prs_werkplek_key prs_werkplek_key,
MAX (CASE
WHEN wp.prs_werkplek_type = 1 AND pwp.prs_perslid_key IS NULL THEN 0
WHEN wp.prs_werkplek_type = 1 AND pwp.prs_perslid_key IS NOT NULL THEN 1
WHEN wp.prs_werkplek_type = 0 AND pwp.prs_perslid_key IS NOT NULL THEN 2
WHEN wp.prs_werkplek_type = 0 AND pwp.prs_perslid_key IS NULL THEN 3
END)
status
FROM prs_werkplek wp, prs_perslidwerkplek pwp
WHERE wp.prs_werkplek_virtueel = 0
AND pwp.prs_werkplek_key(+) = wp.prs_werkplek_key
GROUP BY wp.prs_werkplek_key;
-- Werkplekthema met de bezetter(s) ervan
CREATE_VIEW(cad_v_label_wp_bewoner, 0)
(
prs_werkplek_key,
waarde
)
AS
SELECT DISTINCT
prs_w.prs_werkplek_key,
DECODE (
prs_p.prs_perslid_voornaam,
NULL,
DECODE (prs_p.prs_perslid_voorletters,
NULL, '',
prs_p.prs_perslid_voorletters || ' '),
prs_p.prs_perslid_voornaam || ' ')
|| DECODE (prs_p.prs_perslid_tussenvoegsel,
NULL, '',
prs_p.prs_perslid_tussenvoegsel || ' ')
|| prs_p.prs_perslid_naam
|| CASE
WHEN prs_pw.prs_perslidwerkplek_bezetting < 100
THEN
' (' || TO_CHAR (NVL (prs_pw.prs_perslidwerkplek_bezetting, 0)) || '%)'
END
waarde
FROM prs_werkplek prs_w,
prs_perslidwerkplek prs_pw,
prs_perslid prs_p
WHERE prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
AND prs_pw.prs_perslid_key IS NOT NULL
AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key;
-- Reserveerbare ruimtes kleurenthema (waarde = aantal minuten nog vrij)
CREATE_VIEW(cad_v_thema_ruimte_reservering,0)
(ALG_RUIMTE_KEY, WAARDE)
AS
SELECT alg_ruimte_key alg_ruimte_key,
COALESCE (MIN (TRUNC ( (tijdvrij) * 24 * 60) - 1), 999999) waarde -- MIN want pessimistisch
FROM (SELECT rar.alg_ruimte_key, res_rsv_ruimte_van - SYSDATE tijdvrij
FROM res_ruimte_opstelling rro,
res_ruimte rr,
res_alg_ruimte rar,
res_opstelling ro,
(SELECT res_ruimte_opstel_key, res_rsv_ruimte_van
FROM res_v_aanwezigrsv_ruimte rrr
WHERE SYSDATE BETWEEN TRUNC (res_rsv_ruimte_van)
AND res_rsv_ruimte_tot) blokkerend -- vandaag en nog niet afgelopen
WHERE rro.res_ruimte_key = rr.res_ruimte_key
AND rro.res_opstelling_key = ro.res_opstelling_key
AND rar.res_alg_ruimte_verwijder IS NULL
AND rar.res_ruimte_key = rr.res_ruimte_key
AND rro.res_ruimte_opstel_key =
blokkerend.res_ruimte_opstel_key(+))
GROUP BY alg_ruimte_key;
-- Reserveerbare ruimtes label thema, toont de ruimtenaam van
-- ruimtes die reserveerbaar zijn, hetzij door een reservering,
-- hetzij door een sensor
-- DEZE VIEW WORDT STANDAARD GEBRUIKT ALS DEFAULT THEMA VOOR HET INFOBORD
CREATE_VIEW(cad_v_label_bezetbareruimtes, 0)
(
alg_ruimte_key,
waarde
)
AS
SELECT rar.alg_ruimte_key, MIN (res_ruimte_nr) waarde
FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rar
WHERE rro.res_ruimte_key = rr.res_ruimte_key
AND rar.res_ruimte_key = rr.res_ruimte_key
AND rar.res_alg_ruimte_verwijder IS NULL
GROUP BY rar.alg_ruimte_key
UNION
SELECT alg_ruimte_key, alg_ruimte_nr
FROM alg_ruimte r, ins_deel d, ins_srtdeel sd
WHERE d.ins_alg_ruimte_key = r.alg_ruimte_key
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_deel_state IS NOT NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = fac.getSetting('ins_occupationsensors_srtgroep_key')
AND NOT EXISTS (SELECT ''
FROM res_alg_ruimte
WHERE alg_ruimte_key = r.alg_ruimte_key);
-- Reserveerbare ruimtes label thema
-- Let op: Toont *eerstvolgende* reservering als die binnen een uur begint
CREATE_VIEW(cad_v_label_ruimte_reservering,0)
(ALG_RUIMTE_KEY, WAARDE)
AS
SELECT rar.alg_ruimte_key, MAX (res_ruimte_nr || res_info.tekst) waarde
FROM res_ruimte_opstelling rro,
res_ruimte rr,
res_alg_ruimte rar,
res_opstelling ro,
( SELECT res_ruimte_opstel_key,
MAX( '[br]'
|| TO_CHAR (res_rsv_ruimte_van, 'HH24:MI')
|| '-'
|| TO_CHAR (res_rsv_ruimte_tot, 'HH24:MI')
|| '[br][s50]'
|| prs_perslid_naam_full
|| '[br][s80][b]'
|| res_rsv_ruimte_omschrijving)
tekst
FROM res_v_aanwezigrsv_ruimte rrr, prs_v_perslid_fullnames pp
WHERE pp.prs_perslid_key = res_rsv_ruimte_host_key
AND SYSDATE BETWEEN res_rsv_ruimte_van - (1 / 24)
AND res_rsv_ruimte_tot
GROUP BY res_ruimte_opstel_key) res_info
WHERE res_info.res_ruimte_opstel_key(+) = rro.res_ruimte_opstel_key
AND rro.res_ruimte_key = rr.res_ruimte_key
AND rro.res_opstelling_key = ro.res_opstelling_key
AND rar.res_ruimte_key = rr.res_ruimte_key
AND rar.res_alg_ruimte_verwijder IS NULL
GROUP BY rar.alg_ruimte_key;
-- Reserveerbare delen kleurenthema (waarde = aantal minuten nog vrij)
CREATE_VIEW(cad_v_thema_deel_reservering,0)
(
INS_DEEL_KEY,
WAARDE
)
AS
SELECT ins_deel_key,
COALESCE (MIN (TRUNC (tijdvrij * 24 * 60)-1), 999999) waarde -- MIN want perssimistisch
FROM (SELECT res_ins_deel_key ins_deel_key,
res_rsv_deel_van - SYSDATE tijdvrij
FROM res_v_aanwezigdeel r,
(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(+))
GROUP BY ins_deel_key;
-- Reserveerbare delen label thema
CREATE_VIEW(cad_v_label_deel_reservering,0)
(
INS_DEEL_KEY,
WAARDE
)
AS
SELECT ins_deel_key, prs_perslid_naam_full
FROM ins_v_aanwezigdeel isd,
(SELECT res_ins_deel_key, prs_perslid_naam_full
FROM res_v_aanwezigdeel r,
res_v_aanwezigrsv_deel rrd,
res_rsv_ruimte rrr,
prs_v_perslid_fullnames p
WHERE r.res_deel_key = rrd.res_deel_key
AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
AND SYSDATE BETWEEN res_rsv_deel_van - 1 / 24 / 60
AND res_rsv_deel_tot - 1 / 24 / 60) res -- NU bezig
WHERE isd.ins_deel_key = res.res_ins_deel_key(+);
--
-- Thema's gebaseerd op objectstatus van objecten binnen ruimte/werkplek (typisch sensoren)
--
CREATE_VIEW(cad_v_thema_ruimtesensor,0)
(
alg_ruimte_key,
waarde
)
AS
SELECT r.alg_ruimte_key alg_ruimte_key, initcap(d.ins_deel_state) status
FROM alg_ruimte r, ins_deel d, ins_srtdeel sd
WHERE r.alg_ruimte_verwijder IS NULL
AND d.ins_deel_verwijder IS NULL
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = fac.getSetting('ins_occupationsensors_srtgroep_key')
AND d.ins_deel_state IS NOT NULL;
-- Kleurenthema dat reserveringen en actuele bezetting weergeeft
-- Geeft van de overige ruimte de ruimtesoort terug
-- DEZE VIEW WORDT STANDAARD GEBRUIKT ALS DEFAULT THEMA VOOR HET INFOBORD
CREATE_VIEW(cad_v_thema_srtruimtesensor, 0)
(
alg_ruimte_key,
waarde
)
AS
-- zalen met een sensor
SELECT alg_ruimte_key, DECODE (MAX (status), 0, 'Uit', 2, 'Aan', 'NoShow')
FROM ( SELECT r.alg_ruimte_key,
DECODE (
INITCAP (d.ins_deel_state),
'0', -- als de sensor uit is kijken we naar de reservering
DECODE (r2a.res_reservering_key,
NULL, 0, -- als er geen reservering gescheduled staat is de status uit
DECODE (eerste10min, 1, 2, 1)), -- in de eerste 10 minuten v/d reservering melden we nog geen noshow(1) aan(2)
2)
status
FROM alg_ruimte r,
ins_deel d,
ins_srtdeel sd,
(SELECT rr2a.res_reservering_key,
rr2a.alg_ruimte_key,
CASE WHEN (SYSDATE - res_rsv_ruimte_van > 10 / 1440)
THEN 0
ELSE 1
END eerste10min
FROM res_v_rsv_ruimte_2_alg_ruimte rr2a
WHERE res_rsv_ruimte_dirtlevel = 0
AND rr2a.res_alg_ruimte_verwijder IS NULL
AND rr2a.res_rsv_ruimte_van BETWEEN TRUNC(SYSDATE) AND SYSDATE -- Voorkennis: geen meerdaagse ruimtereserveringen
AND rr2a.res_rsv_ruimte_tot BETWEEN SYSDATE AND TRUNC(SYSDATE + 1)) r2a
WHERE r.alg_ruimte_verwijder IS NULL
AND d.ins_deel_verwijder IS NULL
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = fac.getSetting('ins_occupationsensors_srtgroep_key')
AND d.ins_deel_state IS NOT NULL
AND r.alg_ruimte_key = r2a.alg_ruimte_key(+))
GROUP BY alg_ruimte_key
UNION ALL -- en dan de ruimten zonder sensor
SELECT r.alg_ruimte_key,
DECODE (rr.res_ruimte_key, -- is dit een vergaderruimte?
NULL, '*' || sr.alg_srtruimte_omschrijving,
DECODE (r2a.res_reservering_key, NULL, 'Uit', 'Aan')) -- 0 uit / 1 noshow / 2 aan
FROM alg_v_aanwezigruimte r,
alg_srtruimte sr,
(SELECT rr2a.res_reservering_key, rr2a.alg_ruimte_key
FROM res_v_rsv_ruimte_2_alg_ruimte rr2a
WHERE res_rsv_ruimte_dirtlevel = 0
AND rr2a.res_alg_ruimte_verwijder IS NULL
AND rr2a.res_rsv_ruimte_van BETWEEN TRUNC(SYSDATE) AND SYSDATE
AND rr2a.res_rsv_ruimte_tot BETWEEN SYSDATE AND TRUNC(SYSDATE + 1)) r2a,
( SELECT alg_ruimte_key, MAX (res_ruimte_key) res_ruimte_key
FROM res_alg_ruimte
WHERE res_alg_ruimte_verwijder IS NULL
GROUP BY alg_ruimte_key) rr
WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
AND r.alg_ruimte_key = r2a.alg_ruimte_key(+)
AND r.alg_ruimte_key = rr.alg_ruimte_key(+)
AND NOT EXISTS
(SELECT r.alg_ruimte_key
FROM ins_deel d, ins_srtdeel sd
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = fac.getSetting('ins_occupationsensors_srtgroep_key')
AND d.ins_deel_state IS NOT NULL);
CREATE_VIEW(cad_v_thema_wpsensor,0)
(
prs_werkplek_key,
waarde
)
AS
SELECT wp.prs_werkplek_key prs_werkplek_key, initcap(d.ins_deel_state) status
FROM prs_werkplek wp, ins_deel d, ins_srtdeel sd
WHERE d.ins_deel_verwijder IS NULL
AND wp.prs_werkplek_virtueel = 0
AND d.ins_alg_ruimte_type = 'W'
AND d.ins_alg_ruimte_key = wp.prs_werkplek_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = fac.getSetting('ins_occupationsensors_srtgroep_key')
AND d.ins_deel_state IS NOT NULL;
REGISTERRUN('$Id$')
#endif // CAD