Files
Customer/MRUS/mrus.sql
Robin Stoker 50563520ae MRUS#79006 -- Aanpassingen personenimport
svn path=/Customer/trunk/; revision=61066
2023-07-04 15:37:28 +00:00

300 lines
8.9 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the MRUS database
DEFINE thisfile = 'MRUS.SQL'
DEFINE dbuser = 'MRUS'
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 ------
--
-- Personen import
--
CREATE OR REPLACE PROCEDURE mrus_import_perslid (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
v_newline FAC_IMP_FILE.FAC_IMP_FILE_LINE%TYPE;
BEGIN
BEGIN
SELECT fac_imp_file_line
INTO v_newline
FROM fac_imp_file
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
IF v_newline LIKE
CHR (TO_NUMBER ('EF', 'xx'))
|| CHR (TO_NUMBER ('BB', 'xx'))
|| CHR (TO_NUMBER ('BF', 'xx'))
|| '%'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.'
);
v_newline := SUBSTR (v_newline, 4);
END IF;
-- Verwijder de dubbele quotes
v_newline := REPLACE (v_newline, '"');
UPDATE fac_imp_file
SET fac_imp_file_line = v_newline
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
EXCEPTION WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'E',
'Fout bij controle op Byte Order Mark',
''
);
END;
v_errorhint := 'Generieke update';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
prs.import_perslid (p_import_key,
'0;0;0;0;0;0;3;2;0;1;' ||
'0;0;0;0;0;0;0;4;0;0;' ||
'5;0;0;0;0;0;3;0;0;0;'||
'0;0;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0',
'GivenName;Surname;Department;EmailAddress;Title%'
);
-- Soms komen er personen binnen zonder email, die mogen niet mee.
DELETE FROM fac_imp_perslid
WHERE prs_perslid_email IS NULL;
COMMIT;
DECLARE
CURSOR c1
IS
SELECT f.prs_perslid_email, p.prs_afdeling_naam
FROM fac_imp_perslid f, prs_afdeling p
WHERE UPPER (f.prs_kenmerk1) = UPPER (p.prs_afdeling_omschrijving);
BEGIN
FOR rec IN c1
LOOP
UPDATE fac_imp_perslid
SET prs_afdeling_naam = rec.prs_afdeling_naam
WHERE prs_perslid_email = rec.prs_perslid_email;
END LOOP;
END;
UPDATE fac_imp_perslid
SET prs_kenmerk1 = NULL;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END mrus_import_perslid;
/
CREATE OR REPLACE PROCEDURE mrus_update_perslid (
p_import_key IN NUMBER
) IS
-- Alle personen verwijderen die niet meer in import bestand voorkomen.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin IS NULL
AND NOT EXISTS
(SELECT 'x'
FROM fac_imp_perslid i
WHERE UPPER(p.prs_perslid_email) = UPPER(i.prs_perslid_email));
-- Autmatisch autorisatiegroep toekennen a.d.h.v. bussinesunit
CURSOR c1
IS
SELECT x.prs_perslid_key, x.afdeling, g.fac_groep_key
FROM
(SELECT p.prs_perslid_key,
CASE
WHEN a.prs_afdeling_parentkey > 0
THEN
(SELECT f.prs_afdeling_upper
FROM prs_afdeling f
WHERE a.prs_afdeling_parentkey = f.prs_afdeling_key)
ELSE
a.prs_afdeling_upper
END afdeling
FROM prs_perslid p, prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key) x,
fac_groep g
WHERE g.fac_groep_upper = x.afdeling
AND NOT EXISTS
(SELECT 'x'
FROM fac_gebruikersgroep
WHERE prs_perslid_key = x.prs_perslid_key
AND fac_groep_key = g.fac_groep_key);
CURSOR c2
IS
SELECT p.prs_perslid_key
FROM prs_perslid p
WHERE p.prs_perslid_oslogin IS NULL
AND NOT EXISTS
(SELECT 'x'
FROM fac_gebruikersgroep f
WHERE p.prs_perslid_key = f.prs_perslid_key
AND f.fac_groep_key = 1);
v_count NUMBER;
BEGIN
-- generic update
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count < 150
THEN
fac.imp_writelog (p_import_key,
'E',
'Het aantal te importeren personen is te klein ('
|| TO_CHAR (v_count) || ')',
'Zie Specificatie'
);
RETURN;
END IF;
-- 'LOGIN' betekent dat op basis van oslogin wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'EMAIL', NULL);
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
-- Toekennen van de op afdeling gebaseerde autorisatiegroep
FOR rec IN c1
LOOP
BEGIN
INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, rec.fac_groep_key);
END;
END LOOP;
-- Toekennen van de default autorisatiegroep
FOR rec IN c2
LOOP
BEGIN
INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 1);
END;
END LOOP;
-- Als laatst nog zorgen dat alle personen zichtbaar zijn (ivm namen op de plattegronden).
UPDATE prs_perslid
SET prs_perslid_visibility = 1
WHERE prs_perslid_visibility = 0
AND prs_perslid_oslogin IS NULL
AND prs_perslid_verwijder IS NULL;
END mrus_update_perslid;
/
-- Om overzicht op mobiel met mijn gereserveerde werkplekken te laten zien.
CREATE OR REPLACE VIEW mrus_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);
-- CAD thema die alleen de werkplekken laat zien waar de ingelogde user recht op heeft (RESUSE).
CREATE OR REPLACE VIEW MRUS_V_THEMA_WERKPLEK_AUTORISATIE
(
FCLT_F_DATUM,
INS_DEEL_KEY,
MIN_VAN,
MAX_TOT,
WAARDE1,
WAARDE,
WAARDE3,
FCLT_F_3D_USER_KEY
)
AS
SELECT t."FCLT_F_DATUM",
t."INS_DEEL_KEY",
t."MIN_VAN",
t."MAX_TOT",
t."WAARDE1",
t."WAARDE",
t."WAARDE3",
fg.prs_perslid_key
FROM cad_v_thema_deel_res_datum t, res_deel rd, fac_v_webgebruiker fg
WHERE t.ins_deel_key = rd.res_deel_key
AND fg.ins_discipline_key = rd.res_discipline_key
AND fg.fac_functie_key = 143;
------ 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