Files
Customer/HCAS/HCAS.sql
2018-03-19 11:39:49 +00:00

300 lines
11 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'HCAS.SQL'
DEFINE dbuser = '^HCAS'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
----- Personenimport -------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE hcas_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);
BEGIN
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;8;1;2;0;3;'
|| '0;0;0;0;0;0;0;6;0;0;'
|| '5;1;0;0;0;0;4;0;0;0;'
|| '0;0;0;0;0;0;0;0;0;0;'
|| '0;0;0;0;0;0',
'"SamAccountName";"sn";"GivenName";"Department";"Function";"Mail";"TelephoneNumber";"Location"%');
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 hcas_import_perslid;
/
CREATE OR REPLACE PROCEDURE hcas_update_perslid (p_import_key IN NUMBER)
IS
-- Alle personen verwijderen die niet meer in import bestand voorkomen.
-- Key bij HCAS is SAMAccountName, hieronder de query om alle personen te verwijderen die:
-- a) niet meer in het importbestand staan, wel in Facilitor, en
-- b) waarvan de persoon in Facilitor geen alternatieve login heeft (gevuld alt. login van af blijven, dit zijn persleden die handmatig zijn toegevoegd)
-- c) waarvan de persoon in Facilitor niet begint met een _ in de loginnaam (ook van af blijven)
CURSOR c_del
IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_oslogin2,
pf.prs_perslid_naam_full
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin(+))
AND SUBSTR (p.prs_perslid_oslogin, 1, 1) <> '_'
AND i.prs_perslid_oslogin IS NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin2 IS NULL
AND pf.prs_perslid_key = p.prs_perslid_key
ORDER BY 2;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_count NUMBER;
BEGIN
-- generic update
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
UPDATE fac_imp_perslid i
SET i.prs_perslid_telefoonnr =
(SELECT p.prs_perslid_telefoonnr
FROM prs_perslid p
WHERE p.prs_perslid_verwijder IS NULL
AND UPPER (P.PRS_PERSLID_OSLOGIN) =
UPPER (I.PRS_PERSLID_OSLOGIN))
WHERE i.fac_import_key = p_import_key;
UPDATE fac_imp_perslid i
SET i.prs_perslid_mobiel =
(SELECT p.prs_perslid_mobiel
FROM prs_perslid p
WHERE p.prs_perslid_verwijder IS NULL
AND UPPER (P.PRS_PERSLID_OSLOGIN) =
UPPER (I.PRS_PERSLID_OSLOGIN))
WHERE i.fac_import_key = p_import_key;
-- Afdelingsomschrijving ingelezen in kenmerk; op basis daarvan de afdelingscode
-- invullen (verplicht veld afdelingscode tijdelijk gevuld met oslogin).
UPDATE fac_imp_perslid i
SET prs_afdeling_naam =
(SELECT prs_afdeling_naam
FROM prs_afdeling a
WHERE prs_afdeling_verwijder IS NULL
AND UPPER (a.prs_afdeling_omschrijving) =
UPPER (i.prs_kenmerk1));
-- Onbekende afdelingen bewaren voor logging
UPDATE fac_imp_perslid
SET prs_afdeling_naam = SUBSTR (prs_kenmerk1, 1, 15)
WHERE prs_afdeling_naam IS NULL;
-- Locatieomschrijving ingelezen; op basis daarvan de juiste vastgoedgegevens
-- in de juiste kolommen zetten.
-- Omdat werkplekken alleen worden aangevuld, dit alleen doen voor personen die
-- nog geen werkplek hebben.
UPDATE fac_imp_perslid i
SET
(alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr
) =
( SELECT rg.alg_locatie_code,
MIN (rg.alg_gebouw_upper),
MIN (rg.alg_verdieping_volgnr),
rg.alg_ruimte_nr
FROM alg_v_ruimte_gegevens rg
WHERE i.prs_werkplek_omschrijving =
rg.alg_locatie_omschrijving
AND rg.alg_ruimte_nr = '_WP'
GROUP BY rg.alg_locatie_code, rg.alg_ruimte_nr)
WHERE NOT EXISTS
(SELECT DISTINCT prs_perslid_oslogin
FROM prs_perslidwerkplek pw, prs_v_aanwezigperslid ap
WHERE ap.prs_perslid_key = pw.prs_perslid_key
AND ap.prs_perslid_oslogin =
UPPER (i.prs_perslid_oslogin));
-- Tijdelijke gegevens opruimen
UPDATE fac_imp_perslid i
SET prs_werkplek_omschrijving = NULL, prs_kenmerk1 = NULL;
COMMIT;
-- 'LOGIN' betekent dat op basis van Login wordt gematched.
-- 'NR' betekent dat op basis van Personeelsnummer wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'LOGIN', 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;
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,
'Importproces personen afgebroken!');
END hcas_update_perslid;
/
----- Rapportage-views -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW hcas_v_rap_qrc_ins_mld
AS
SELECT i.ins_deel_omschrijving hide_f_sort,
l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving
fclt_f_locatie,
o.alg_gebouw_omschrijving fclt_f_gebouw,
o.alg_plaatsaanduiding fclt_f_plaats,
d.ins_discipline_omschrijving fclt_f_discipline,
g.ins_srtgroep_omschrijving fclt_f_objectgroep,
s.ins_srtdeel_omschrijving fclt_f_objectsoort,
i.ins_deel_omschrijving fclt_f_identificatie,
b.fac_bookmark_naam fclt_f_bookmark,
i.ins_deel_key,
s.ins_srtdeel_key,
i.ins_discipline_key fclt_3d_discipline_key,
l.alg_locatie_key fclt_3d_locatie_key,
i.ins_alg_ruimte_type,
i.ins_alg_ruimte_key,
b.fac_bookmark_id hide_f_bookmark_id
FROM ins_deel i,
ins_v_alg_overzicht o,
ins_srtdeel s,
ins_srtgroep g,
ins_discipline d,
alg_locatie l,
fac_bookmark b,
mld_stdmelding sm,
mld_stdmelding_srtinst si
WHERE b.fac_bookmark_path = 'appl/pda/melding.asp'
AND b.fac_bookmark_query LIKE
'%stdm_key=' || sm.mld_stdmelding_key || '%'
AND (b.fac_bookmark_expire IS NULL
OR b.fac_bookmark_expire > SYSDATE)
AND ins_deel_verwijder IS NULL
AND i.ins_deel_module = 'INS'
AND i.ins_deel_parent_key IS NULL
AND s.ins_srtdeel_key = i.ins_srtdeel_key
AND g.ins_srtgroep_key = s.ins_srtgroep_key
AND d.ins_discipline_key = g.ins_discipline_key
AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
AND o.alg_locatie_key = i.ins_alg_locatie_key
AND i.ins_alg_locatie_key = l.alg_locatie_key
AND sm.mld_stdmelding_key = si.mld_stdmelding_key
AND si.ins_srtinstallatie_key = DECODE (si.ins_srtinstallatie_niveau,
'S', i.ins_srtdeel_key,
'G', s.ins_srtgroep_key,
'D', g.ins_discipline_key);
CREATE OR REPLACE VIEW hcas_v_rap_qrc_ins
AS
SELECT i.ins_deel_omschrijving hide_f_sort,
l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving
fclt_f_locatie,
o.alg_gebouw_omschrijving fclt_f_gebouw,
o.alg_plaatsaanduiding fclt_f_plaats,
d.ins_discipline_omschrijving fclt_f_discipline,
g.ins_srtgroep_omschrijving fclt_f_objectgroep,
s.ins_srtdeel_omschrijving fclt_f_objectsoort,
i.ins_deel_omschrijving fclt_f_identificatie,
b.fac_bookmark_naam fclt_f_bookmark,
i.ins_deel_key,
s.ins_srtdeel_key,
i.ins_discipline_key fclt_3d_discipline_key,
l.alg_locatie_key fclt_3d_locatie_key,
i.ins_alg_ruimte_type,
i.ins_alg_ruimte_key,
b.fac_bookmark_id hide_f_bookmark_id
FROM ins_deel i,
ins_v_alg_overzicht o,
ins_srtdeel s,
ins_srtgroep g,
ins_discipline d,
alg_locatie l,
fac_bookmark b
WHERE b.fac_bookmark_path = 'appl/pda/ins_deel.asp'
AND COALESCE (b.fac_bookmark_expire, SYSDATE + 1) > SYSDATE
AND ins_deel_verwijder IS NULL
AND COALESCE (i.ins_deel_vervaldatum, SYSDATE + 1) > SYSDATE
AND i.ins_deel_module = 'INS'
AND i.ins_deel_parent_key IS NULL
AND s.ins_srtdeel_key = i.ins_srtdeel_key
AND g.ins_srtgroep_key = s.ins_srtgroep_key
AND d.ins_discipline_key = g.ins_discipline_key
AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
AND o.alg_locatie_key = i.ins_alg_locatie_key
AND l.alg_locatie_key = i.ins_alg_locatie_key;
--- HCAS#37147 rapportage met aantallen nog actieve medewerkers per afdeling
CREATE OR REPLACE VIEW HCAS_V_RAP_MDW_AFDELING
(
AANTAL,
AFDELING,
AFDELINGOMSCHRIJVING,
KOSTENPLAATS
)
AS
SELECT COUNT (prs_perslid_key),
a.prs_afdeling_upper,
PRS_AFDELING_OMSCHRIJVING,
PRS_KOSTENPLAATS_KEY
FROM prs_v_aanwezigperslid p, prs_afdeling a
WHERE P.PRS_AFDELING_KEY(+) = A.PRS_AFDELING_KEY
AND prs_afdeling_verwijder IS NULL
GROUP BY a.prs_afdeling_upper,
PRS_AFDELING_OMSCHRIJVING,
PRS_KOSTENPLAATS_KEY;
------ 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