FSN#14942

svn path=/Database/trunk/; revision=9945
This commit is contained in:
Peter Feij
2008-12-08 12:35:42 +00:00
parent f31955cbf7
commit df86cc14cc
3 changed files with 130 additions and 125 deletions

View File

@@ -1,32 +1,8 @@
#ifdef CAD // 22-05-1998 KTH
/* $History: CAD_VIE1.SRC $
*
* ***************** Version 31 *****************
* User: Jgl Date: 29-07-08 Time: 13:17
* Updated in $/Facilitor/SRC/SQL/CAD
* FSN#13778 Thema's gelijktrekken
*
* ***************** Version 30 *****************
* User: Jgl Date: 12-04-07 Time: 16:17
* Updated in $/Facilitor/SRC/SQL/CAD
* TUDE#12314 impliciete werkplekken
*
* ***************** Version 29 *****************
* User: Jgl Date: 1/04/06 Time: 4:39p
* Updated in $/Facilitor/SRC/SQL/CAD
* SQLS 4.60
*
* ***************** Version 28 *****************
* User: Pf Date: 4-11-05 Time: 16:56
* Updated in $/Facilitor/SRC/SQL/CAD
* FSN#1251
*
* ***************** Version 27 *****************
* User: Pf Date: 27-10-05 Time: 16:10
* Updated in $/Facilitor/SRC/SQL/CAD
* FSN#1251
/* CAD_VIE1.SRC
*
* $Revision: 32 $
* $Modtime: 28-11-08 14:41 $
*/
#include "comsql.h"
@@ -187,19 +163,19 @@ CREATE_VIEW(cad_v_lpn_prs_werkplek_1, FAC_NORMAAL_PRIVILEGE) AS
/* 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)
CREATE_VIEW(cad_v_label_bewoner, FAC_NORMAAL_PRIVILEGE)
(alg_ruimte_key,
waarde)
-- FSN#14942: afdelingen zijn geen bewoners meer
CREATE_VIEW(cad_v_label_bewoner, 0)
(alg_ruimte_key, waarde)
AS
/* Formatted on 2005/10/03 15:11 (Formatter Plus v4.8.5) */
SELECT prs_w.prs_alg_ruimte_key, '[' || prs_a.prs_afdeling_naam || ']'
FROM prs_v_aanwezigwerkplek prs_w, prs_v_aanwezigperslidwerkplek prs_pw, prs_afdeling prs_a
WHERE prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
AND prs_pw.prs_afdeling_key IS NOT NULL
AND prs_pw.prs_afdeling_key = prs_a.prs_afdeling_key
AND prs_w.prs_werkplek_virtueel = 0
UNION
SELECT prs_w.prs_alg_ruimte_key,
prs_p.prs_perslid_naam
|| DECODE (prs_p.prs_perslid_voorletters, NULL, '', ', ' || prs_p.prs_perslid_voorletters)
@@ -216,84 +192,93 @@ SELECT prs_w.prs_alg_ruimte_key, '[Vrij]'
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;
/
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_a.prs_afdeling_naam
|| ']: '
|| TO_CHAR (NVL (prs_pw.prs_perslidwerkplek_bezetting,
0
)
)
|| '%' waarde
FROM PRS_WERKPLEK prs_w,
(SELECT *
FROM PRS_PERSLIDWERKPLEK
WHERE prs_perslidwerkplek_verwijder IS NULL) prs_pw,
PRS_AFDELING prs_a
WHERE prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
AND prs_pw.prs_perslid_key IS NULL
AND prs_pw.prs_afdeling_key = prs_a.prs_afdeling_key
UNION
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
)
)
|| '%'
FROM PRS_WERKPLEK prs_w,
(SELECT *
FROM PRS_PERSLIDWERKPLEK
WHERE prs_perslidwerkplek_verwijder IS NULL) 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,
(SELECT *
FROM PRS_PERSLIDWERKPLEK
WHERE prs_perslidwerkplek_verwijder IS NULL) prs_wb
WHERE prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key(+)
AND prs_werkplek_verwijder IS NULL
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;
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,
(SELECT *
FROM prs_perslidwerkplek
WHERE prs_perslidwerkplek_verwijder IS NULL) 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,
(SELECT *
FROM prs_perslidwerkplek
WHERE prs_perslidwerkplek_verwijder IS NULL) prs_wb
WHERE prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key(+) AND prs_werkplek_verwijder IS NULL
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 (*)
@@ -335,7 +320,7 @@ AS
wpopp) vdata;
CREATE_VIEW(CAD_V_THEMA_WPOPP, 0)
(ALG_RUIMTE_KEY, WAARDE)
(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
@@ -343,6 +328,16 @@ SELECT wp.prs_alg_ruimte_key, r.alg_ruimte_bruto_vloeropp / COUNT (prs_werkplek_
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, FAC_NORMAAL_PRIVILEGE)
(alg_ruimte_key, waarde)
AS
@@ -351,18 +346,28 @@ AS
FROM alg_v_aanwezigruimte r, alg_srtruimte sr
WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key;
-- Ruimte
CREATE_VIEW(cad_v_thema_srtruimte,FAC_NORMAAL_PRIVILEGE)
(alg_ruimte_key, waarde)
-- Ruimtesoort
CREATE_VIEW(cad_v_thema_srtruimte, 0)
(alg_ruimte_key, waarde, waarde_key)
AS
SELECT r.alg_ruimte_key, sr.alg_srtruimte_omschrijving
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,FAC_NORMAAL_PRIVILEGE)
CREATE_VIEW(cad_v_thema_vloerafwerking, 0)
(alg_ruimte_key, waarde)
AS
SELECT r.alg_ruimte_key,