Files
Customer/FLEX/flex.sql
2022-01-31 09:16:22 +00:00

817 lines
34 KiB
MySQL

--
-- $Id$
--
-- Script containing FLEX specific sql statements for the FACILITOR database
DEFINE thisfile = 'FLEX.SQL'
DEFINE dbuser = 'FLEX'
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;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE FLEX
AS
FUNCTION res_presave (p_user_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_activiteit_key IN NUMBER,
p_res_deel_key IN NUMBER,
p_datum_van IN DATE,
p_datum_tot IN DATE,
p_volgnr IN NUMBER)
RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY FLEX
AS
FUNCTION res_presave (p_user_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_activiteit_key IN NUMBER,
p_res_deel_key IN NUMBER,
p_datum_van IN DATE,
p_datum_tot IN DATE,
p_volgnr IN NUMBER)
RETURN VARCHAR2
AS
v_result VARCHAR2 (300);
v_date DATE;
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
BEGIN
v_result := 'OK';
-- op dit moment nog niet in gebruik
RETURN v_result;
IF p_activiteit_key IN (21, 61, 81) -- werkplek, restaurantplek, vergaderplek
THEN
SELECT count(*)
INTO v_count
FROM res_rsv_ruimte rrr
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rrr.res_activiteit_key = p_activiteit_key
AND rrr.res_rsv_ruimte_host_key = p_user_key
AND rrr.res_rsv_ruimte_key <> p_rsv_ruimte_key
AND res_rsv_ruimte_van = TRUNC (p_datum_tot);
-- AND p_datum_tot > rrr.res_rsv_ruimte_van
-- AND p_datum_van < rrr.res_rsv_ruimte_tot
IF v_count > 0
THEN
v_result := 'Beste collega,' || CHR(10) ||
'We hebben deze dag al een reserveringen van je gevonden. Je mag geen overlappende reserveringen boeken.';
ELSE
v_errorhint := 'Kijk of de reservering te ver in de toekomst ligt';
IF p_datum_van > TRUNC(SYSDATE + 28)
THEN
v_result := 'Beste collega,' || CHR(10) ||
'Je mag maximaal 28 dagen in de toekomst boeken.';
END IF;
END IF;
END IF;
RETURN v_result;
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 || ')';
RETURN v_result;
END;
END;
/
-- Import functie voor het importeren van vastgoed en werkplekgegevens.
CREATE OR REPLACE PROCEDURE flex_import_wp (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden:
v_klantcode VARCHAR2(255);
v_locatie_code VARCHAR2(255);
v_locatie_omschrijving VARCHAR2(255);
v_gebouw_code VARCHAR2(255);
v_gebouw_omschrijving VARCHAR2(255);
v_verdieping_volgnr VARCHAR2(255);
v_ruimte_nr VARCHAR2(255);
v_ruimte_omschrijving VARCHAR2(255);
v_kenmerkwaarde1 VARCHAR2(255);
v_kenmerkwaarde2 VARCHAR2(255);
v_kenmerkwaarde3 VARCHAR2(255);
v_kenmerkwaarde4 VARCHAR2(255);
v_kenmerkwaarde5 VARCHAR2(255);
v_deel_omschrijving VARCHAR2(255);
v_deel_reserveerbaar VARCHAR2(255);
CURSOR c IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Vorige inlees eerst verwijderen
DELETE FROM flex_imp_wp;
COMMIT;
header_is_valid := 0;
v_ongeldig := 0;
v_count := 0;
header_is_valid := 0;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
-- Lees alle veldwaarden: Klantcode Locatiecode Locatieomschrijving Gebouwcode Gebouwomschrijving Bouwlaagvolgnummer Ruimtenummer Ruimteomschrijving WPidentificatie reserveerbaar
v_errormsg := 'Fout opvragen te importeren rij (Klantcode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_klantcode);
v_errormsg := 'Fout opvragen te importeren rij (Locatiecode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_code);
v_errormsg := 'Fout opvragen te importeren rij (Locatieomschrijving)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (Gebouwcode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_code);
v_errormsg := 'Fout opvragen te importeren rij (Gebouwomschrijving)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (Bouwlaagvolgnummer)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_verdieping_volgnr);
v_errormsg := 'Fout opvragen te importeren rij (Ruimtenummer)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_nr);
v_errormsg := 'Fout opvragen te importeren rij (Ruimteomschrijving)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (WPidentificatie)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_deel_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (WPreserveerbaar)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_deel_reserveerbaar);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk1)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde1);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk2)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde2);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk3)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde3);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk4)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde4);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk5)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde5);
v_aanduiding :=
v_locatie_code
|| '|'
|| v_gebouw_code
|| '|'
|| v_verdieping_volgnr
|| '|'
|| v_ruimte_nr
|| '|'
|| v_deel_omschrijving;
-- Skip until the header is found
IF header_is_valid = 0 OR SUBSTR(rec.fac_imp_file_line,1,4) = ';;;;'
THEN
IF UPPER(v_klantcode) = 'KLANTCODE'
AND UPPER(v_locatie_code) = 'LOCATIECODE'
AND UPPER(v_locatie_omschrijving) = 'LOCATIEOMSCHRIJVING'
AND UPPER(v_gebouw_code) = 'GEBOUWCODE'
AND UPPER(v_gebouw_omschrijving) = 'GEBOUWOMSCHRIJVING'
AND UPPER(v_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER'
AND UPPER(v_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER(v_ruimte_omschrijving) = 'RUIMTEOMSCHRIJVING'
AND UPPER(v_deel_omschrijving) = 'WPIDENTIFICATIE'
AND UPPER(v_deel_reserveerbaar) = 'RESERVEERBAAR'
THEN
header_is_valid := 1;
END IF;
ELSE -- Header OK. V
BEGIN
v_ongeldig := 0;
v_klantcode := TRIM(v_klantcode);
v_errormsg := 'Controleer klantcode ' || v_klantcode;
IF LENGTH(v_klantcode) > 4 OR v_klantcode IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Klantcode mag NIET leeg zijn of groter dan 4 posities: ' || v_aanduiding, v_errormsg);
v_klantcode := SUBSTR(v_klantcode, 1, 4);
END IF;
v_locatie_code := TRIM(v_locatie_code);
v_errormsg := 'Controleer locatiecode ' || v_locatie_code;
IF LENGTH(v_locatie_code) > 10 OR v_locatie_code IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Locatiecode mag NIET leeg zijn of groter dan 10 posities: ' || v_aanduiding, v_errormsg);
v_locatie_code := SUBSTR(v_locatie_code, 1, 10);
END IF;
v_locatie_omschrijving := TRIM(v_locatie_omschrijving);
v_errormsg := 'Controleer locatieomschrijving ' || v_locatie_omschrijving;
IF LENGTH(v_locatie_omschrijving) > 60 OR v_locatie_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Locatieomschrijving mag NIET leeg zijn of groter dan 60 posities: ' || v_aanduiding, v_errormsg);
v_locatie_omschrijving := SUBSTR(v_locatie_omschrijving, 1, 60);
END IF;
v_gebouw_code := TRIM(v_gebouw_code);
v_errormsg := 'Controleer gebouwcode ' || v_gebouw_code;
IF LENGTH(v_gebouw_code) > 10 OR v_gebouw_code IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Gebouwcode mag NIET leeg zijn of groter dan 12 posities: ' || v_aanduiding, v_errormsg);
v_gebouw_code := SUBSTR(v_gebouw_code, 1, 12);
END IF;
v_gebouw_omschrijving := TRIM(v_gebouw_omschrijving);
v_errormsg := 'Controleer gebouwomschrijving ' || v_gebouw_omschrijving;
IF LENGTH(v_gebouw_omschrijving) > 30 OR v_gebouw_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Gebouwomschrijving mag NIET leeg zijn of groter dan 30 posities: ' || v_aanduiding, v_errormsg);
v_gebouw_omschrijving := SUBSTR(v_gebouw_omschrijving, 1, 30);
END IF;
v_verdieping_volgnr := TRIM(v_verdieping_volgnr);
v_errormsg := 'Controleer bouwlaagvolgnummer ' || v_verdieping_volgnr;
IF FAC.safe_to_number(v_verdieping_volgnr) IS NULL
THEN
fac.imp_writelog (p_import_key, 'E', 'Bouwlaagvolgnummer is geen getal: ' || v_aanduiding, v_errormsg);
v_ongeldig := 1;
END IF;
v_ruimte_nr := TRIM(v_ruimte_nr);
v_errormsg := 'Controleer ruimtenummer ' || v_ruimte_nr;
IF LENGTH(v_ruimte_nr) > 10 OR v_ruimte_nr IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Ruimtenummer mag NIET leeg zijn of groter dan 10 posities: ' || v_aanduiding, v_errormsg);
v_ruimte_nr := SUBSTR(v_ruimte_nr, 1, 10);
END IF;
v_ruimte_omschrijving := TRIM(v_ruimte_omschrijving);
v_errormsg := 'Controleer ruimteomschrijving ' || v_ruimte_omschrijving;
IF LENGTH(v_ruimte_omschrijving) > 30 OR v_ruimte_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Ruimteomschrijving mag NIET leeg zijn of groter dan 30 posities: ' || v_aanduiding, v_errormsg);
v_ruimte_omschrijving := SUBSTR(v_ruimte_omschrijving, 1, 30);
END IF;
v_deel_omschrijving := TRIM(v_deel_omschrijving);
v_errormsg := 'Controleer werkplekidentificatie ' || v_deel_omschrijving;
IF LENGTH(v_deel_omschrijving) > 30 OR v_deel_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Werkplekidentificatie mag NIET leeg zijn of groter dan 30 posities: ' || v_aanduiding, v_errormsg);
v_deel_omschrijving := SUBSTR(v_deel_omschrijving, 1, 30);
END IF;
v_deel_reserveerbaar := TRIM (v_deel_reserveerbaar);
v_errormsg := 'Controleer reserveerbaar ' || v_deel_reserveerbaar;
IF NOT (UPPER(v_deel_reserveerbaar) = 'J' OR UPPER(v_deel_reserveerbaar) = 'N' OR v_deel_reserveerbaar IS NULL)
THEN
fac.imp_writelog (p_import_key, 'W', 'Reserveerbaar is ongeldig: ' || v_aanduiding, v_errormsg);
END IF;
IF v_ongeldig = 0
THEN
INSERT INTO flex_imp_wp (klantcode,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_omschrijving,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
alg_kenmerkwaarde1,
alg_kenmerkwaarde2,
alg_kenmerkwaarde3,
alg_kenmerkwaarde4,
alg_kenmerkwaarde5,
ins_deel_omschrijving,
ins_deel_reserveerbaar)
VALUES (v_klantcode,
v_locatie_code,
v_locatie_omschrijving,
v_gebouw_code,
v_gebouw_omschrijving,
v_verdieping_volgnr,
v_ruimte_nr,
v_ruimte_omschrijving,
v_kenmerkwaarde1,
v_kenmerkwaarde2,
v_kenmerkwaarde3,
v_kenmerkwaarde4,
v_kenmerkwaarde5,
v_deel_omschrijving,
v_deel_reserveerbaar);
v_count := v_count + 1;
END IF;
END;
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!');
END IF;
fac.imp_writelog (p_import_key,
'S',
'Aantal ingelezen regels: ' || TO_CHAR (v_count),
'');
EXCEPTION
WHEN OTHERS
THEN
v_errorhint := v_errormsg;
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_errormsg || ' - ' || v_aanduiding,
v_errorhint);
END flex_import_wp;
/
CREATE OR REPLACE PROCEDURE flex_update_wp (
p_import_key IN NUMBER)
AS
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (150);
currentversion fac_module.fac_module_version%TYPE;
v_aanduiding VARCHAR (100);
BEGIN
v_errorhint := 'Vullen van de locatie en gebouwgegevens';
DELETE fac_imp_onrgoed1;
INSERT INTO fac_imp_onrgoed1 (alg_regio_omschrijving,
alg_district_omschrijving,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_naam,
alg_srtgebouw_omschrijving)
SELECT klantcode,
klantcode,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_omschrijving,
'Algemeen'
FROM flex_imp_wp
GROUP BY klantcode,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_omschrijving;
fac_update_onrgoed1(p_import_key);
v_errorhint := 'Vullen van de verdieping en ruimtegegevens';
DELETE fac_imp_onrgoed2;
INSERT INTO fac_imp_onrgoed2 (alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
alg_srtruimte_omschrijving
)
SELECT alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
'Algemeen'
FROM flex_imp_wp
GROUP BY alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving;
fac_update_onrgoed2(p_import_key);
v_errorhint := 'Vullen van de werkplekgegevens';
DELETE fac_imp_ins;
INSERT INTO fac_imp_ins (ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
reserveerbaar,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
ins_deel_aantal,
res_deel_alg_level,
res_discipline_omschrijving)
SELECT 'Interieur',
'Werkplekken',
'WP',
'Werkplek',
ins_deel_omschrijving,
DECODE(UPPER(ins_deel_reserveerbaar), 'J', 1, 0),
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
1,
2, -- Locatie
klantcode || '-' || 'Werkplekken'
FROM flex_imp_wp;
fac_update_ins (p_import_key);
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_errormsg || v_aanduiding,
v_errorhint);
END flex_update_wp;
/
-- Om overzicht op mobiel met mijn gereserveerde werkplekken te laten zien.
CREATE OR REPLACE VIEW flex_v_rap_mijn_wp_reservering
AS
SELECT rrr.res_rsv_ruimte_host_key,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
rg.alg_locatie_omschrijving,
rg.alg_gebouw_omschrijving,
rg.alg_verdieping_omschrijving,
rg.alg_ruimte_nr,
rd.res_deel_omschrijving,
rg.alg_ruimte_aanduiding,
rrr.res_rsv_ruimte_key
FROM res_rsv_ruimte rrr,
res_rsv_deel rrd,
res_deel rd,
alg_v_ruimte_gegevens rg
WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rrr.alg_ruimte_key = rg.alg_ruimte_key
AND rrr.res_rsv_ruimte_verwijder IS NULL
AND rrd.res_rsv_deel_verwijder IS NULL
AND rrr.res_rsv_ruimte_van > = TRUNC(SYSDATE);
CREATE OR REPLACE VIEW flex_v_thema_deel_res_d_1230
(
fclt_f_datum,
ins_deel_key,
min_van,
max_tot,
waarde1,
waarde,
waarde3
)
AS
WITH
datums
AS
( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
FROM DUAL
CONNECT BY LEVEL <= 31)
SELECT datum
fclt_f_datum,
ins_deel_key,
MIN (res_rsv_deel_van)
min_van,
MAX (res_rsv_deel_tot)
max_tot,
CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0 ELSE 3 -- hele dag
END
waarde1,
CASE
WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0
WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24MI') <= '1230' THEN 1 -- ochtend
WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24MI') >= '1230' THEN 2 -- middag
ELSE 3 -- hele dag
END
waarde,
COUNT (res_rsv_deel_tot) -- aantal reservering deze dag
waarde3
FROM (SELECT datums.datum,
res_ins_deel_key ins_deel_key,
res_rsv_deel_van,
res_rsv_deel_tot
FROM res_v_aanwezigdeel r,
ins_deel d,
datums,
(SELECT datum,
res_deel_key,
res_rsv_deel_van,
res_rsv_deel_tot
FROM datums, res_v_aanwezigrsv_deel rrd
WHERE res_rsv_deel_van > TRUNC(SYSDATE) - 1 -- negeer alle irrelevante historie sowieso
AND datum >= TRUNC (res_rsv_deel_van)
AND datum < TRUNC (res_rsv_deel_tot) + 1) blokkerend -- vandaag en nog niet afgelopen
WHERE r.res_deel_key = blokkerend.res_deel_key(+)
AND datums.datum = blokkerend.datum(+)
AND (r.res_deel_vervaldatum IS NULL or r.res_deel_vervaldatum > datums.datum)
AND d.ins_deel_key = r.res_ins_deel_key)
GROUP BY datum, ins_deel_key
ORDER BY datum, ins_deel_key;
CREATE OR REPLACE VIEW FLEX_V_CAD_LABEL_SENSOREN
(
INS_DEEL_KEY,
WAARDE
)
AS
SELECT ins_deel_key, d.ins_deel_omschrijving waarde
FROM ins_deel d
WHERE d.ins_srtdeel_key = 1;
-- deze view verzameld info over de werkplek (puck), werkplekreservering, host en pas van de host
-- t.b.v. van de koppeling met LeftClick
CREATE OR REPLACE VIEW FLEX_V_RAP_LEFTCLICK
(
FCLT_3D_LOCATIE_KEY,
LOCATIE,
GEBOUW_KEY,
GEBOUW,
VERDIEPING_KEY,
VERDIEPING,
RUIMTE_KEY,
RUIMTE_NR,
WERKPLEK_KEY,
WERKPLEK,
REGISTRATIEDATUM_RESERVERING,
RES_RSV_RUIMTE_KEY,
RSV_WERKPLEK,
RESERVERING_VAN,
DATUM_VAN,
TIJD_VAN,
RESERVERING_TOT,
DATUM_TOT,
TIJD_TOT,
PAS_OMSCHR,
PAS_NR,
EMAIL_HOST,
PERSLIDKEY_HOST
)
AS
SELECT wp.locatie_key,
wp.locatie,
wp.alg_gebouw_key,
wp.gebouw,
wp.alg_verdieping_key,
wp.verdieping,
wp.alg_ruimte_key,
wp.ruimte_nr,
wp.ins_deel_key werkpley_key,
wp.ins_deel_omschrijving werkplek,
rsvd.res_rsv_ruimte_key rsv_werkplek_key,
rd.res_deel_omschrijving rsv_werkplek,
rsvd.res_rsv_deel_aanmaak registratiedatum_reservering,
rsvd.res_rsv_deel_van reservering_van,
TO_CHAR (rsvd.res_rsv_deel_van, 'dd-mm-yyyy') datum_van,
TO_CHAR (rsvd.res_rsv_deel_van, 'hh24:mi') tijd_van,
rsvd.res_rsv_deel_tot reservering_tot,
TO_CHAR (rsvd.res_rsv_deel_tot, 'dd-mm-yyyy') datum_tot,
TO_CHAR (rsvd.res_rsv_deel_tot, 'hh24:mi') tijd_tot,
pas.ins_deel_opmerking pas_omschr,
pas.ins_deel_omschrijving pas,
p.prs_perslid_email,
p.prs_perslid_key
FROM (SELECT d.ins_deel_omschrijving,
d.ins_deel_opmerking,
d.ins_alg_ruimte_key prs_perslid_key
FROM ins_deel d, ins_srtdeel sd
WHERE sd.ins_srtdeel_code_upper = 'PAS'
AND sd.ins_srtdeel_key = d.ins_srtdeel_key
AND d.ins_deel_verwijder IS NULL
AND d.ins_alg_ruimte_type = 'P'
AND ( d.ins_deel_vervaldatum > SYSDATE
OR d.ins_deel_vervaldatum IS NULL)) pas,
(SELECT d.ins_deel_key,
d.ins_deel_omschrijving,
r.alg_ruimte_nr ruimte_nr,
r.alg_ruimte_key,
r.alg_ruimte_omschrijving ruimte_omschr,
v.alg_verdieping_key,
v.alg_verdieping_omschrijving verdieping,
g.alg_gebouw_key,
g.alg_gebouw_omschrijving gebouw,
l.alg_locatie_key locatie_key,
l.alg_locatie_omschrijving locatie
FROM ins_deel d,
alg_ruimte r,
alg_verdieping v,
alg_gebouw g,
alg_locatie l
WHERE d.ins_srtdeel_key = 1
AND d.ins_deel_verwijder IS NULL
AND r.alg_ruimte_key = d.ins_alg_ruimte_key
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
AND ( d.ins_deel_vervaldatum > SYSDATE
OR d.ins_deel_vervaldatum IS NULL)) wp,
res_deel rd,
res_rsv_deel rsvd,
res_rsv_ruimte rsv,
prs_perslid p
WHERE wp.ins_deel_key = rd.res_ins_deel_key
AND rd.res_deel_key = rsvd.res_deel_key
AND rsvd.res_rsv_deel_verwijder IS NULL
AND rsv.res_rsv_ruimte_key = rsvd.res_rsv_ruimte_key
AND rsv.res_rsv_ruimte_verwijder IS NULL
AND rsv.res_rsv_ruimte_host_key = p.prs_perslid_key
AND pas.prs_perslid_key(+) = p.prs_perslid_key;
CREATE OR REPLACE VIEW FLEX_V_RAP_VASTGOED
(
FCLT_3D_LOCATIE_KEY,
LOCATIE,
GEBOUW_KEY,
GEBOUW,
VERDIEPING_KEY,
VERDIEPING,
RUIMTE_KEY,
RUIMTE_NR,
WERKPLEK_KEY,
WERKPLEK_NR
)
AS
SELECT l.alg_locatie_key,
l.alg_locatie_omschrijving,
g.alg_gebouw_key,
g.alg_gebouw_omschrijving,
v.alg_verdieping_key,
v.alg_verdieping_code,
r.alg_ruimte_key,
r.alg_ruimte_nr,
wp.ins_deel_key,
wp.ins_deel_omschrijving
FROM alg_locatie l,
alg_gebouw g,
alg_verdieping v,
alg_ruimte r,
(SELECT d.ins_deel_key, d.ins_deel_omschrijving, r.alg_ruimte_key
FROM ins_deel d, alg_ruimte r
WHERE d.ins_srtdeel_key = 1 --- dit zijn de werkplekken in FLEX
AND d.ins_deel_verwijder IS NULL
AND r.alg_ruimte_key = d.ins_alg_ruimte_key
AND ( d.ins_deel_vervaldatum > SYSDATE
OR d.ins_deel_vervaldatum IS NULL)) wp
WHERE l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = wp.alg_ruimte_key;
CREATE OR REPLACE VIEW FLEX_V_RAP_ORGANISATIE
(
FCLT_3D_AFDELING_KEY,
AFDELING,
PERSLID_KEY,
VOORLETTERS,
INITIALEN,
VOORNAAM,
TUSSENVOEGSEL,
NAAM,
EMAIL,
MOBNR,
TELNR,
PAS_KEY,
PASNR,
PASOMSCHR
)
AS
SELECT a.prs_afdeling_key,
a.prs_afdeling_naam,
p.prs_perslid_key,
p.prs_perslid_voorletters,
p.prs_perslid_initialen,
p.prs_perslid_voornaam,
p.prs_perslid_tussenvoegsel,
p.prs_perslid_naam,
p.prs_perslid_email,
p.prs_perslid_mobiel,
p.prs_perslid_telefoonnr,
pas.ins_deel_key,
pas.ins_deel_omschrijving,
pas.ins_deel_opmerking
FROM prs_perslid p,
prs_afdeling a,
(SELECT d.ins_deel_key,
d.ins_deel_omschrijving,
d.ins_deel_opmerking,
d.ins_alg_ruimte_key prs_perslid_key
FROM ins_deel d, ins_srtdeel sd
WHERE sd.ins_srtdeel_code_upper = 'PAS'
AND sd.ins_srtdeel_key = d.ins_srtdeel_key
AND d.ins_deel_verwijder IS NULL
AND d.ins_alg_ruimte_type = 'P'
AND ( d.ins_deel_vervaldatum > SYSDATE
OR d.ins_deel_vervaldatum IS NULL)) pas
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_perslid_key = pas.prs_perslid_key(+)
AND p.prs_perslid_verwijder IS NULL;
-- Controle view om er voor te zorgen dat niemand ongescopde rechten krijgt in de Flex omgeving.
-- fac_functie_min_level = 0 -- Alleen aan/uit autorisiatie
-- fac_functie_min_level = 3 -- Alleen lees(aan/uit) of schrijf (aan/uit)
CREATE OR REPLACE VIEW flex_v_rap_check_rights
AS
SELECT fac_groep_omschrijving,
fac_functie_omschrijving,
fac_functie_min_level,
fac_gebruiker_prs_level_read,
fac_gebruiker_prs_level_write,
fac_gebruiker_alg_level_read,
fac_gebruiker_alg_level_write
FROM fac_groep g, fac_groeprechten gr, fac_functie f
WHERE g.fac_groep_key = gr.fac_groep_key
AND gr.fac_functie_key = f.fac_functie_key
AND g.fac_groep_key NOT IN (1,
2,
3,
61,
241) -- default, admin, facilitor, hmail, leftclick
AND ( ( fac_functie_min_level = 11
AND ( fac_gebruiker_alg_level_read = -1
OR fac_gebruiker_alg_level_write = -1))
OR ( fac_functie_min_level = 13
AND ( fac_gebruiker_prs_level_read = -1
OR fac_gebruiker_alg_level_read = -1))
OR ( fac_functie_min_level = 15
AND ( fac_gebruiker_prs_level_read = -1
OR fac_gebruiker_prs_level_write = -1
OR fac_gebruiker_alg_level_read = -1
OR fac_gebruiker_alg_level_write = -1))
OR fac_functie_code IN ('WEB_CADFOF', 'WEB_CADBOF'));
-- Notificatie die het rapport naar de helpdesk stuurt op het moment
-- dat bovenstaande view resultaat oplevert.
CREATE OR REPLACE VIEW flex_v_noti_check_rights
AS
SELECT NULL sender,
NULL receiver,
'FLEX: Autorisatie alarm' text,
'CUST01' code,
fac_usrrap_key key,
NULL xkey,
'helpdesk@facilitor.nl' xemail,
NULL xmobile,
NULL attachments
FROM fac_usrrap
WHERE fac_usrrap_code = 'CHECK_RIGHTS'
AND EXISTS (SELECT 1 FROM flex_v_rap_check_rights);
------ 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