Files
Customer/GDZW/gdzw.sql
Sander Schepers 7b45cef1f0 GDZW#74289 Mail 2 melding voor meldingen dataveiligheid
svn path=/Customer/trunk/; revision=57724
2022-10-24 09:34:27 +00:00

1900 lines
76 KiB
MySQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific configuration sql statements for GDZW
DEFINE thisfile = 'GDZW.SQL'
DEFINE dbuser = '^GDZW'
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 VIEW gdzw_v_import_log
AS
SELECT imp_log_status fclt_f_status,
imp_log_omschrijving omschrijving,
imp_log_hint opmerking
FROM imp_log
WHERE imp_log_applicatie = 'PRS';
CREATE OR REPLACE PROCEDURE gdzw_import_prs (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
-- LET OP: moet idem zijn als declaratie bij GDZW_UPDATE_PRS
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_geslacht VARCHAR2 (256);
v_prs_perslid_oslogin VARCHAR2 (256);
v_prs_perslid_nr VARCHAR2 (256);
v_prs_afdeling_omschrijving VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_mobiel VARCHAR2 (256);
v_BSN VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM gdzw_imp_prs;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- EMPLOYEENUMBER
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam); -- SN
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam); -- GIVENNAME
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin); -- SAMACCOUNTNAME
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_omschrijving); -- DEPARTMENT
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving); -- TITLE
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr); -- TELEPHONENUMBER
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- MAIL
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_geslacht); -- EXTENSIONATTRIBUTE1
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel); -- MOBILE
--fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel); --
v_aanduiding :=
'['
|| v_prs_perslid_oslogin
|| '|'
|| v_prs_perslid_naam
|| '|'
|| v_prs_perslid_voornaam
|| '|'
|| v_prs_perslid_email
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_prs_perslid_nr) = 'EMPLOYEENUMBER'
AND UPPER (v_prs_perslid_naam) = 'SN'
AND UPPER (v_prs_perslid_voornaam) = 'GIVENNAME'
AND UPPER (v_prs_perslid_oslogin) = 'SAMACCOUNTNAME'
AND UPPER (v_prs_afdeling_omschrijving) = 'DEPARTMENT'
AND UPPER (v_prs_srtperslid_omschrijving) = 'TITLE'
AND UPPER (v_prs_perslid_telefoonnr) = 'TELEPHONENUMBER'
AND UPPER (v_prs_perslid_email) = 'MAIL'
AND UPPER (v_prs_perslid_geslacht) = 'EXTENSIONATTRIBUTE1'
AND UPPER (v_prs_perslid_mobiel) = 'MOBILE'
--AND UPPER (v_prs_perslid_tussenvoegsel) = ''
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errorhint := 'Ongeldig personeelsnummer';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Personeelsnummer te lang',
'Personeelsnummer wordt afgebroken tot ['
|| v_prs_perslid_nr
|| ']');
--ELSE
-- IF (v_prs_perslid_nr IS NULL)
-- THEN
-- v_ongeldig := 1;
-- fac.imp_writelog (
-- p_import_key,
-- 'E',
-- v_aanduiding || 'Personeelsnummer onbekend',
-- 'Personeelsnummer is verplicht; regel wordt overgeslagen!');
-- END IF;
END IF;
v_errorhint := 'Ongeldige achternaam';
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 30
THEN
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Achternaam te lang',
'Achternaam wordt afgebroken tot ['
|| v_prs_perslid_naam
|| ']');
ELSE
IF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Achternaam onbekend',
'Achternaam is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Ongeldige voornaam';
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
IF LENGTH (v_prs_perslid_voornaam) > 30
THEN
v_prs_perslid_voornaam := SUBSTR (v_prs_perslid_voornaam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Voornaam te lang',
'Voornaam wordt afgebroken tot ['
|| v_prs_perslid_voornaam
|| ']');
END IF;
v_errorhint := 'Ongeldige accountnaam';
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
IF LENGTH (v_prs_perslid_oslogin) > 30
THEN
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'accountnaam te lang',
'accountnaam wordt afgebroken tot ['
|| v_prs_perslid_oslogin
|| ']');
ELSE
IF (v_prs_perslid_oslogin IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'accountnaam onbekend',
'accountnaam is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Ongeldige afdeling';
v_prs_afdeling_omschrijving := TRIM (v_prs_afdeling_omschrijving);
IF LENGTH (v_prs_afdeling_omschrijving) > 60
THEN
v_prs_afdeling_omschrijving := SUBSTR (v_prs_afdeling_omschrijving, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdeling te lang',
'Afdeling wordt afgebroken tot ['
|| v_prs_afdeling_omschrijving
|| ']');
ELSE
IF (v_prs_afdeling_omschrijving IS NULL)
THEN
v_prs_afdeling_omschrijving := 'Onbekend';
--TODO: verplicht maken?
--v_ongeldig := 1;
--fac.imp_writelog (
-- p_import_key,
-- 'E',
-- v_aanduiding || 'Afdeling onbekend',
-- 'Afdeling is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Ongeldige functie';
v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving);
IF LENGTH (v_prs_srtperslid_omschrijving) > 60
THEN
v_prs_srtperslid_omschrijving :=
SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Functie te lang',
'Functie wordt afgebroken tot ['
|| v_prs_srtperslid_omschrijving
|| ']');
ELSE
IF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_prs_srtperslid_omschrijving := 'Onbekend';
--TODO: verplicht maken?
--v_ongeldig := 1;
--fac.imp_writelog (
-- p_import_key,
-- 'E',
-- v_aanduiding || 'Functie onbekend',
-- 'Functie is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Telefoonnummer te lang';
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
IF LENGTH (v_prs_perslid_telefoonnr) > 15
THEN
v_prs_perslid_telefoonnr :=
SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Nummer wordt afgebroken tot ['
|| v_prs_perslid_telefoonnr
|| ']');
END IF;
v_errorhint := 'E-mailadres te lang';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 100
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 100);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'E-mailadres wordt afgebroken tot ['
|| v_prs_perslid_email
|| ']');
END IF;
v_errorhint := 'Ongeldig geslacht';
v_prs_perslid_geslacht := TRIM (v_prs_perslid_geslacht);
IF (UPPER (v_prs_perslid_geslacht) != 'M'
AND UPPER (v_prs_perslid_geslacht) != 'V')
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Geslacht is [' || v_prs_perslid_geslacht || ']');
ELSIF (v_prs_perslid_geslacht IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Geslacht niet ingevuld');
END IF;
v_errorhint := 'Mobiel nummer te lang';
v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);
IF LENGTH (v_prs_perslid_mobiel) > 15
THEN
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Nummer wordt afgebroken tot ['
|| v_prs_perslid_mobiel
|| ']');
END IF;
--v_errorhint := 'Ongeldig tussenvoegsel';
--v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
--
--IF LENGTH (v_prs_perslid_tussenvoegsel) > 15
--THEN
-- v_prs_perslid_tussenvoegsel :=
-- SUBSTR (v_prs_perslid_tussenvoegsel, 1, 15);
-- fac.imp_writelog (
-- p_import_key,
-- 'W',
-- v_aanduiding || 'Tussenvoegsel te lang',
-- 'Tussenvoegsel wordt afgebroken tot ['
-- || v_prs_perslid_tussenvoegsel
-- || ']');
--END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel gdzw_IMP_PRS';
INSERT INTO gdzw_imp_prs (imp_datum,
prs_perslid_naam,
--prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_geslacht,
prs_perslid_oslogin,
prs_perslid_nr,
prs_afdeling_omschrijving,
prs_srtperslid_omschrijving,
prs_perslid_email,
prs_perslid_telefoonnr,
prs_perslid_mobiel
)
VALUES (SYSDATE,
v_prs_perslid_naam,
--v_prs_perslid_tussenvoegsel,
v_prs_perslid_voornaam,
v_prs_perslid_geslacht,
v_prs_perslid_oslogin,
v_prs_perslid_nr,
v_prs_afdeling_omschrijving,
v_prs_srtperslid_omschrijving,
v_prs_perslid_email,
v_prs_perslid_telefoonnr,
v_prs_perslid_mobiel
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!');
COMMIT;
END;
END IF;
END IF; -- header_valid
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
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_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END gdzw_import_prs;
/
CREATE OR REPLACE PROCEDURE gdzw_update_prs (p_import_key IN NUMBER)
IS
-- LET OP: moet idem zijn als declaratie bij gdzw_IMPORT_PRS
c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: ';
-- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
c_max_delta_percentage NUMBER (10) := 10;
-- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
c_gebouw_code VARCHAR2 (10) := 'ZAVUR';
c_ruimte_nr VARCHAR2 (10) := '999';
c_gebouw_key NUMBER (10);
c_ruimte_key NUMBER (10);
-- Groep waar personen in geplaatst worden (indien nog geen groep)
c_groep_upper VARCHAR2 (30) := '_DEFAULT';
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_prs_import NUMBER (10); -- #actieve personen na import!
v_count_prs_actual NUMBER (10); -- #actieve personen v<><76>r import!
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
--
v_perslid_key NUMBER (10);
v_perslid_naam VARCHAR2 (30);
v_perslid_tussenvoegsel VARCHAR2 (15);
v_afdeling_key NUMBER (10);
v_srtperslid_key NUMBER (10);
--v_oslogin VARCHAR2 (30);
--v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_ruimte_nr VARCHAR2 (10);
v_wp_key NUMBER (10);
v_wp_volgnr NUMBER (3);
v_wp_oms VARCHAR2 (30);
v_groep_key NUMBER (10);
v_kenmerklink_key NUMBER (10);
v_dbg_gebouw_code VARCHAR2 (10);
v_dbg_ruimte_nr VARCHAR2 (10);
-- Alle personen met primaire login in Facilitor, die in de import niet voorkomen.
-- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
-- 47286 = Extern niet in AD
CURSOR cdelprs
IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND p.prs_srtperslid_key != 47286
AND p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\'
AND NOT EXISTS
(SELECT 1
FROM gdzw_imp_prs ip
WHERE UPPER (ip.prs_perslid_oslogin) =
p.prs_perslid_oslogin)
UNION ALL
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NULL
AND p.prs_perslid_naam LIKE 'INACTIEF:%'
AND NOT EXISTS (SELECT 1
FROM prs_v_verplichting_keys pv
WHERE p.prs_perslid_key = pv.prs_perslid_key);
-- Dubbele nummers? Dan worden gewoon 2 (of meer) personen toegevoegd!
-- Alle gegevens uit importtabel geformatteerd volgens specificatie
CURSOR cperslid
IS
SELECT prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
DECODE (UPPER (prs_perslid_geslacht),
'M', 1,
'V', 0)
prs_perslid_geslacht,
prs_perslid_oslogin,
prs_perslid_nr,
prs_afdeling_omschrijving,
prs_srtperslid_omschrijving,
prs_perslid_email,
prs_perslid_telefoonnr,
prs_perslid_mobiel
FROM gdzw_imp_prs
WHERE prs_perslid_oslogin IS NOT NULL;
-- Soort perslid/functie
CURSOR csrtperslid
IS
SELECT MIN (prs_perslid_oslogin) prs_perslid_oslogin,
MIN (prs_perslid_naam) prs_perslid_naam,
MIN (prs_perslid_voornaam) prs_perslid_voornaam,
MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
FROM gdzw_imp_prs
GROUP BY UPPER (prs_srtperslid_omschrijving);
-- Dubbele nummers? Dan krijgt iemand mogelijk de verkeerde plaats!
-- Personen in importsheet + hun werkplekken
-- (voor maken nieuwe/verhuizen naar (virtuele) werkplek)
CURSOR cwp
IS
SELECT p.*
FROM gdzw_imp_prs ip, prs_v_aanwezigperslid p
WHERE UPPER (ip.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin);
-- Alle actieve personen met primaire login (ie. de import-doelgroep) zonder een werkplek
-- Voor logging: lijst van mensen zonder werkplek
CURSOR cnowp
IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
AND NOT EXISTS (SELECT pw.prs_perslid_key
FROM prs_perslidwerkplek pw
WHERE pw.prs_perslid_key = p.prs_perslid_key);
-- Alle aanwezige personen met primaire login (ie. de import-doelgroep) niet in een authorisatiegroep
CURSOR cnogroup
IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND NOT EXISTS (SELECT 1
FROM fac_gebruikersgroep g
WHERE g.prs_perslid_key = p.prs_perslid_key);
BEGIN
-- Bepaal accountnaam-match tussen Facilitor en RECENT importbestand ofwel
-- het aantal actieve personen na import.
-- RECENT betekent niet meer dan een kwartiertje oud (14,4 minuten); dit voorkomt
-- dat - als er geen nieuw importbestand is aangeleverd - telkens dezelfde fouten
-- worden gerapporteerd (nl. op basis van een oud importbestand in GDZW_IMP_PRS).
SELECT COUNT ( * )
INTO v_count_prs_import
FROM prs_v_aanwezigperslid p, gdzw_imp_prs ip
WHERE p.prs_perslid_oslogin IS NOT NULL
AND UPPER (p.prs_perslid_oslogin) = UPPER (ip.prs_perslid_oslogin)
AND (ip.imp_datum + 0.01) > SYSDATE;
-- Bepaal huidig aantal actieve personen in Facilitor.
SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
INTO v_count_prs_actual
FROM prs_v_aanwezigperslid
WHERE prs_perslid_oslogin IS NOT NULL;
IF ( (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) >=
(100 - c_max_delta_percentage)
AND v_count_prs_import <= v_count_prs_actual)
OR (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) <=
(100 + c_max_delta_percentage)
AND v_count_prs_import >= v_count_prs_actual))
THEN
-- v_errorhint := 'Fout bij bepalen standaardgebouw';
--
-- SELECT COUNT ( * )
-- INTO v_count
-- FROM alg_v_aanweziggebouw
-- WHERE UPPER (alg_gebouw_code) = UPPER (c_gebouw_code);
--
-- -- v_count=0 --> gebouw 'ZAVUR' bestaat niet!
-- IF (v_count = 0)
-- THEN
-- fac.imp_writelog (
-- p_import_key,
-- 'E',
-- v_aanduiding || v_errorhint,
-- 'Gebouw ['
-- || c_gebouw_code
-- || '] voor standaardwerkplek bestaat niet!');
-- c_gebouw_key := NULL;
-- ELSE
-- SELECT alg_gebouw_key
-- INTO c_gebouw_key
-- FROM alg_v_aanweziggebouw
-- WHERE UPPER (alg_gebouw_code) = UPPER (c_gebouw_code);
-- END IF;
--
-- v_errorhint := 'Fout bij bepalen standaardruimte';
--
-- SELECT COUNT ( * )
-- INTO v_count
-- FROM alg_v_aanwezigruimte r, alg_v_aanwezigverdieping v
-- WHERE UPPER (alg_ruimte_nr) = UPPER (c_ruimte_nr)
-- AND r.alg_verdieping_key = v.alg_verdieping_key
-- AND v.alg_gebouw_key = c_gebouw_key;
--
-- -- v_count=0 -> ruimte '999' bestaat nog niet.
-- IF (v_count = 0)
-- THEN
-- v_errorhint := 'Fout bij bepalen verdieping';
--
-- SELECT alg_verdieping_key
-- INTO v_verdieping_key
-- FROM alg_v_aanwezigverdieping
-- WHERE alg_gebouw_key = v_gebouw_key
-- AND alg_verdieping_volgnr =
-- (SELECT MIN (v.alg_verdieping_volgnr)
-- FROM alg_verdieping v
-- WHERE v.alg_gebouw_key = v_gebouw_key
-- AND v.alg_verdieping_volgnr >= 0);
--
-- v_errorhint := 'Fout bij toevoegen standaardruimte';
--
-- INSERT INTO alg_ruimte (alg_verdieping_key,
-- alg_srtruimte_key,
-- alg_ruimte_nr)
-- VALUES (v_verdieping_key, 37, -- onbekend
-- c_ruimte_nr)
-- RETURNING alg_ruimte_key
-- INTO c_ruimte_key;
-- ELSE
-- SELECT alg_ruimte_key
-- INTO c_ruimte_key
-- FROM alg_v_aanwezigruimte r, alg_v_aanwezigverdieping v
-- WHERE UPPER (alg_ruimte_nr) = UPPER (c_ruimte_nr)
-- AND r.alg_verdieping_key = v.alg_verdieping_key
-- AND v.alg_gebouw_key = c_gebouw_key;
-- END IF;
--
-- -- fac.imp_writelog (
-- -- p_import_key,
-- -- 'I',
-- -- 'Standaardgebouw en -ruimte:',
-- -- '['
-- -- || TO_CHAR (c_gebouw_key)
-- -- || '|'
-- -- || TO_CHAR (c_ruimte_key)
-- -- || ']');
--
-- COMMIT;
-- Geldig importbestand wat betreft aantal personen
FOR recdelprs IN cdelprs
LOOP
BEGIN
-- Heeft persoon actuele/toekomstige verplichtingen?
SELECT COUNT ( * )
INTO v_count
FROM prs_perslid p, prs_v_verplichting_keys r
WHERE p.prs_perslid_key = r.prs_perslid_key
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij verwijderen persoon';
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is verwijderd',
'Persoon is verwijderd');
ELSE
-- Staat persoon INACTIEF?
SELECT COUNT ( * )
INTO v_count
FROM prs_perslid p
WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%'
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij INACTIEF zetten persoon';
-- Persoon INACTIEF zetten (update naam + reset oslogin)
UPDATE prs_perslid
SET prs_perslid_naam =
SUBSTR (c_persoon_inactief || prs_perslid_naam,
1,
30),
prs_perslid_oslogin = NULL
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is INACTIEF gezet',
'Persoon is INACTIEF gezet');
ELSE
v_errorhint := 'Fout bij INACTIEF maken persoon';
-- Persoon INACTIEF maken (reset oslogin; indien handmatig INACTIEF gezet)
UPDATE prs_perslid
SET prs_perslid_oslogin = NULL
WHERE prs_perslid_naam LIKE c_persoon_inactief || '%'
AND prs_perslid_oslogin IS NOT NULL;
fac.imp_writelog (
p_import_key,
'I',
'Persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is INACTIEF gemaakt',
'Persoon is INACTIEF gemaakt (en account is verwijderd)');
END IF;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
v_count_tot := 0;
v_count_error := 0;
FOR recsrtperslid IN csrtperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
recsrtperslid.prs_perslid_oslogin
|| '|'
|| recsrtperslid.prs_perslid_naam
|| '|'
|| recsrtperslid.prs_perslid_voornaam
|| '|'
|| recsrtperslid.prs_srtperslid_omschrijving
|| ' - ';
v_errorhint := 'Fout bij bepalen functie';
SELECT COUNT ( * )
INTO v_count
FROM prs_srtperslid
WHERE UPPER (prs_srtperslid_omschrijving) =
UPPER (recsrtperslid.prs_srtperslid_omschrijving)
AND prs_srtperslid_verwijder IS NULL;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen functie';
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
VALUES (recsrtperslid.prs_srtperslid_omschrijving);
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Functie: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Functie: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
'');
COMMIT;
v_count_tot := 0;
v_count_error := 0;
FOR recperslid IN cperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| recperslid.prs_perslid_oslogin
|| '|'
|| recperslid.prs_perslid_naam
|| '|'
|| recperslid.prs_perslid_voornaam
|| '] - ';
v_errorhint :=
'Fout bij bepalen functie ['
|| recperslid.prs_srtperslid_omschrijving
|| ']';
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_verwijder IS NULL
AND UPPER (prs_srtperslid_omschrijving) =
UPPER (recperslid.prs_srtperslid_omschrijving);
v_errorhint :=
'Fout bij bepalen afdeling ['
|| recperslid.prs_afdeling_omschrijving
|| ']';
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND UPPER (prs_afdeling_omschrijving) =
UPPER (recperslid.prs_afdeling_omschrijving);
v_errorhint :=
'Fout bij bepalen naam ['
|| recperslid.prs_perslid_naam
|| ']';
--TODO: Is die lengte-check wel nodig? Doet import_prs ook al!
-- (Let op: v_perslid_naam wordt hieronder gebruikt!)
IF LENGTH (recperslid.prs_perslid_naam) > 30
THEN
v_perslid_naam := SUBSTR (recperslid.prs_perslid_naam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Achternaam te lang',
'Achternaam wordt afgebroken tot ['
|| v_perslid_naam
|| ']');
ELSE
v_perslid_naam := recperslid.prs_perslid_naam;
END IF;
v_errorhint := 'Fout bij bepalen persoon';
SELECT COUNT ( * ), MAX (prs_perslid_key)
INTO v_count, v_perslid_key
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_oslogin) =
UPPER (recperslid.prs_perslid_oslogin);
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen persoon';
INSERT INTO prs_perslid (prs_perslid_module,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_geslacht,
prs_perslid_oslogin,
prs_perslid_nr,
prs_afdeling_key,
prs_srtperslid_key,
prs_perslid_email,
prs_perslid_telefoonnr,
prs_perslid_mobiel)
VALUES ('PRS',
v_perslid_naam,
recperslid.prs_perslid_tussenvoegsel,
recperslid.prs_perslid_voornaam,
recperslid.prs_perslid_geslacht,
recperslid.prs_perslid_oslogin,
recperslid.prs_perslid_nr,
v_afdeling_key,
v_srtperslid_key,
recperslid.prs_perslid_email,
recperslid.prs_perslid_telefoonnr,
recperslid.prs_perslid_mobiel)
RETURNING prs_perslid_key
INTO v_perslid_key;
--TODO: voeg persoon toe op standaardwerkplek (ZAVUR-0-999)
ELSE
IF (v_count > 1)
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || ' kan persoon niet eenduidig bepalen',
v_errorhint);
END IF;
v_errorhint := 'Fout bij wijzigen persoon';
-- TODO: coalesce's voor velden die nog niet overschreven moeten worden.
UPDATE prs_perslid
SET prs_perslid_naam = v_perslid_naam,
prs_perslid_tussenvoegsel = recperslid.prs_perslid_tussenvoegsel,
prs_perslid_voornaam = recperslid.prs_perslid_voornaam,
prs_perslid_geslacht = recperslid.prs_perslid_geslacht,
prs_perslid_oslogin = recperslid.prs_perslid_oslogin,
prs_perslid_nr = recperslid.prs_perslid_nr,
prs_afdeling_key = v_afdeling_key,
prs_srtperslid_key = v_srtperslid_key,
prs_perslid_email = recperslid.prs_perslid_email,
prs_perslid_telefoonnr = COALESCE (recperslid.prs_perslid_telefoonnr, prs_perslid_telefoonnr),
prs_perslid_mobiel = COALESCE (recperslid.prs_perslid_mobiel, prs_perslid_mobiel)
WHERE prs_perslid_key = v_perslid_key;
--TODO: als nog geen werkplek, dan standaardwerkplek?
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Geen data gevonden',
v_errorhint);
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Persoon: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
'');
v_count_tot := 0;
v_count_error := 0;
-- FOR recwp IN cwp
-- LOOP
-- BEGIN
-- v_count_tot := v_count_tot + 1;
-- v_aanduiding :=
-- recwp.prs_perslid_oslogin
-- || '|'
-- || recwp.prs_perslid_naam
-- || '|'
-- || recwp.prs_perslid_voornaam
-- || '|'
-- || recwp.alg_gebouw_code
-- || '|'
-- || recwp.alg_ruimte_nr
-- || ' - ';
-- v_errorhint := 'Fout bij bepalen persoon';
--
-- SELECT prs_perslid_key
-- INTO v_perslid_key
-- FROM prs_v_aanwezigperslid
-- WHERE prs_perslid_login IS NOT NULL
-- AND UPPER (prs_perslid_oslogin) = UPPER (recwp.prs_perslid_oslogin);
--
-- v_gebouw_key := NULL;
-- v_ruimte_key := NULL;
--
-- -- standaardwaardes
-- IF v_gebouw_key IS NULL OR v_ruimte_key IS NULL
-- THEN
-- v_gebouw_key := c_gebouw_key;
-- v_ruimte_key := c_ruimte_key;
-- END IF;
--
-- -- Bepalen wat er moet gebeuren:
-- -- . als WEL geldige waardes uit Compas:
-- -- . . ZELFDE als in Facilitor --> huidige werkplek behouden
-- -- . . ANDERS dan in Facililtor --> werkplek uit Compas overnemen (bestaande werkplek ontkoppelen)
-- -- . als GEEN (geldige) waardes uit Compas:
-- -- . . al IETS in Facilitor --> huidige werkplek behouden
-- -- . . nog NIETS in Facililtor --> standaardwerkplek gebruiken
-- IF ( recwp.alg_gebouw_code IS NOT NULL
-- AND recwp.alg_ruimte_nr IS NOT NULL
-- AND v_gebouw_key != c_gebouw_key
-- AND v_ruimte_key != c_ruimte_key)
-- THEN
-- v_errorhint :=
-- 'Fout bij bepalen of persoon in ruimte een werkplek heeft';
--
-- SELECT COUNT ( * )
-- INTO v_count
-- FROM prs_v_aanwezigperslidwerkplek apw, prs_werkplek wp
-- WHERE apw.prs_perslid_key = v_perslid_key
-- AND apw.prs_werkplek_key = wp.prs_werkplek_key
-- AND wp.prs_alg_ruimte_key = v_ruimte_key;
--
-- -- v_count=0 --> persoon verhuist --> ontkoppel van huidige werkplek
-- IF (v_count = 0)
-- THEN
-- -- Verwijder (keihard) de koppeling van deze persoon met een werkplek!
-- -- TODO: Dit verwijdert alle werkplekken, ook in andere gebouwen!
-- DELETE FROM prs_perslidwerkplek pw
-- WHERE pw.prs_perslid_key = v_perslid_key;
--
-- -- "echte" ruimte, met <20><>n werkplek per persoon
-- -- kijk of er een bestaande werkplek beschikbaar is in deze ruimte
-- SELECT COUNT (w.prs_werkplek_key)
-- INTO v_count
-- FROM prs_werkplek w
-- WHERE w.prs_alg_ruimte_key = v_ruimte_key
-- AND w.prs_werkplek_verwijder IS NULL
-- AND NOT EXISTS
-- (SELECT 1
-- FROM prs_v_aanwezigperslidwerkplek pw
-- WHERE pw.prs_werkplek_key =
-- w.prs_werkplek_key);
--
-- IF (v_count > 0)
-- THEN
-- SELECT MIN (w.prs_werkplek_key)
-- INTO v_wp_key
-- FROM prs_werkplek w
-- WHERE w.prs_alg_ruimte_key = v_ruimte_key
-- AND w.prs_werkplek_verwijder IS NULL
-- AND NOT EXISTS
-- (SELECT 1
-- FROM prs_v_aanwezigperslidwerkplek pw
-- WHERE pw.prs_werkplek_key =
-- w.prs_werkplek_key);
--
-- v_errorhint :=
-- 'Fout bij koppelen persoon aan vrije werkplek';
--
-- INSERT INTO prs_perslidwerkplek (prs_perslid_key,
-- prs_werkplek_key,
-- prs_perslidwerkplek_bezetting)
-- VALUES (v_perslid_key, v_wp_key, 100);
--
-- SELECT prs_werkplek_omschrijving
-- INTO v_wp_oms
-- FROM prs_v_aanwezigwerkplek
-- WHERE prs_werkplek_key = v_wp_key;
--
-- fac.imp_writelog (
-- p_import_key,
-- 'I',
-- v_aanduiding || 'is verhuisd naar bestaande werkplek',
-- 'Werkplek: [' || v_wp_oms || ']');
-- ELSE -- geen vrije werkplek beschikbaar in ruimte
-- -- Als nieuwe werkplekken automatisch aangemaakt mogen worden:
-- IF (0 = 1)
-- THEN
-- v_errorhint := 'Fout bij bepalen nieuwe werkplek';
--
-- SELECT prs_s_prs_werkplek_key.NEXTVAL
-- INTO v_wp_key
-- FROM DUAL;
--
-- SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1
-- INTO v_wp_volgnr
-- FROM prs_werkplek w
-- WHERE w.prs_alg_ruimte_key = v_ruimte_key;
--
-- SELECT alg_ruimte_nr
-- INTO v_ruimte_nr
-- FROM alg_ruimte
-- WHERE alg_ruimte_key = v_ruimte_key;
--
-- v_wp_oms :=
-- v_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr);
--
-- v_errorhint := 'Fout bij aanmaken nieuwe werkplek';
--
-- INSERT INTO prs_werkplek (prs_werkplek_key,
-- prs_werkplek_module,
-- prs_werkplek_volgnr,
-- prs_werkplek_omschrijving,
-- prs_alg_ruimte_key)
-- VALUES (v_wp_key,
-- 'PRR',
-- v_wp_volgnr,
-- v_wp_oms,
-- v_ruimte_key);
--
-- v_errorhint :=
-- 'Fout bij verhuizen persoon aan nieuwe werkplek';
--
-- INSERT INTO prs_perslidwerkplek (prs_perslid_key,
-- prs_werkplek_key,
-- prs_perslidwerkplek_bezetting)
-- VALUES (v_perslid_key, v_wp_key, 100);
--
-- SELECT prs_werkplek_omschrijving
-- INTO v_wp_oms
-- FROM prs_werkplek
-- WHERE prs_werkplek_key = v_wp_key;
--
-- fac.imp_writelog (
-- p_import_key,
-- 'I',
-- v_aanduiding
-- || 'is verhuisd naar nieuwe aangemaakte werkplek',
-- 'Werkplek: [' || v_wp_oms || ']');
-- ELSE -- als nieuwe werkplekken NIET automatisch aangemaakt mogen worden:
-- fac.imp_writelog (
-- p_import_key,
-- 'W',
-- 'Geen vrije werkplek beschikbaar voor'
-- || v_aanduiding,
-- 'Ruimte: ['
-- || recwp.alg_gebouw_code
-- || '|'
-- || recwp.alg_ruimte_nr
-- || ']');
-- END IF;
-- END IF; -- werkplek beschikbaar?
-- END IF;
--
-- ELSE -- geen (geldige) waardes vanuit Compas
-- v_errorhint := 'Fout bij bepalen of persoon al een werkplek heeft';
--
-- SELECT COUNT ( * )
-- INTO v_count
-- FROM prs_v_aanwezigperslidwerkplek apw, prs_werkplek wp
-- WHERE apw.prs_perslid_key = v_perslid_key
-- AND apw.prs_werkplek_key = wp.prs_werkplek_key;
--
-- -- v_count=0 --> nog geen werkplek --> standaardruimte!
-- IF (v_count = 0)
-- THEN
-- v_errorhint := 'Fout bij bepalen vrije werkplek';
--
-- -- werkplek in fictieve standaardruimte:
-- -- . daar is maar <20><>n werkplek, waar iedereen aan gekoppeld is
-- -- . kijk of die werkplek al bestaat
-- -- . zoniet, maak aan
-- -- . voeg persoon toe met bezetting 1%
-- -- kijk de werkplek in de standaardruimte al is aangemaakt
-- SELECT COUNT (w.prs_werkplek_key)
-- INTO v_count
-- FROM prs_werkplek w
-- WHERE w.prs_alg_ruimte_key = c_ruimte_key
-- AND w.prs_werkplek_verwijder IS NULL;
--
-- -- nog niet; maak aan
-- IF (v_count = 0)
-- THEN
-- v_errorhint := 'Fout bij aanmaken standaardwerkplek';
--
-- SELECT prs_s_prs_werkplek_key.NEXTVAL
-- INTO v_wp_key
-- FROM DUAL;
--
-- SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1
-- INTO v_wp_volgnr
-- FROM prs_werkplek w
-- WHERE w.prs_alg_ruimte_key = v_ruimte_key;
--
-- SELECT alg_ruimte_nr
-- INTO v_ruimte_nr
-- FROM alg_ruimte
-- WHERE alg_ruimte_key = v_ruimte_key;
--
-- v_wp_oms := v_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr);
--
-- v_errorhint := 'Fout bij aanmaken nieuwe werkplek';
--
-- INSERT INTO prs_werkplek (prs_werkplek_key,
-- prs_werkplek_module,
-- prs_werkplek_volgnr,
-- prs_werkplek_omschrijving,
-- prs_alg_ruimte_key)
-- VALUES (v_wp_key,
-- 'PRR',
-- v_wp_volgnr,
-- v_wp_oms,
-- v_ruimte_key);
-- END IF;
--
-- -- Voeg persoon toe aan standaardwerkplek, bezetting 1%
-- v_errorhint :=
-- 'Fout bij koppelen persoon aan standaardwerkplek';
--
-- SELECT MIN (w.prs_werkplek_key)
-- INTO v_wp_key
-- FROM prs_werkplek w
-- WHERE w.prs_alg_ruimte_key = v_ruimte_key
-- AND w.prs_werkplek_verwijder IS NULL;
--
-- INSERT INTO prs_perslidwerkplek (prs_perslid_key,
-- prs_werkplek_key,
-- prs_perslidwerkplek_bezetting)
-- VALUES (v_perslid_key, v_wp_key, 1);
--
-- SELECT prs_werkplek_omschrijving
-- INTO v_wp_oms
-- FROM prs_werkplek
-- WHERE prs_werkplek_key = v_wp_key;
--
-- fac.imp_writelog (
-- p_import_key,
-- 'I',
-- v_aanduiding || 'is gekoppeld naar standaardwerkplek',
-- 'Werkplek: [' || v_wp_oms || ']');
-- END IF; -- al een werkplek?
-- END IF; -- geldige waardes?
--
-- COMMIT;
--
-- EXCEPTION
-- WHEN OTHERS
-- THEN
-- v_count_error := v_count_error + 1;
-- oracle_err_num := SQLCODE;
-- oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
-- v_errormsg :=
-- 'OTHERS (error '
-- || oracle_err_num
-- || '/'
-- || oracle_err_mes
-- || ')';
-- fac.imp_writelog (p_import_key,
-- 'E',
-- v_aanduiding || v_errormsg,
-- v_errorhint);
-- COMMIT;
-- END;
-- END LOOP;
--
-- fac.imp_writelog (
-- p_import_key,
-- 'S',
-- 'Werkplek: verwerkte regels zonder foutmelding: '
-- || TO_CHAR (v_count_tot - v_count_error),
-- '');
-- fac.imp_writelog (
-- p_import_key,
-- 'S',
-- 'Werkplek: verwerkte regels met foutmelding: '
-- || TO_CHAR (v_count_error),
-- '');
--
-- COMMIT;
--
-- FOR recnowp IN cnowp
-- LOOP
-- BEGIN
-- fac.imp_writelog (
-- p_import_key,
-- 'I',
-- 'Persoon met login ['
-- || recnowp.prs_perslid_oslogin
-- || '] en naam ['
-- || recnowp.prs_perslid_naam
-- || ', '
-- || recnowp.prs_perslid_voornaam
-- || '] heeft geen werkplek',
-- 'Geen werkplek');
-- EXCEPTION
-- WHEN OTHERS
-- THEN
-- oracle_err_num := SQLCODE;
-- oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
-- v_errormsg :=
-- 'OTHERS (error '
-- || oracle_err_num
-- || '/'
-- || oracle_err_mes
-- || ')';
-- fac.imp_writelog (p_import_key,
-- 'E',
-- v_errormsg,
-- v_errorhint);
-- END;
-- END LOOP;
--
-- COMMIT;
FOR recnogroup IN cnogroup
LOOP
BEGIN
v_aanduiding :=
recnogroup.prs_perslid_oslogin
|| '|'
|| recnogroup.prs_perslid_naam
|| '|'
|| recnogroup.prs_perslid_voornaam
|| ' - ';
v_errorhint := 'Fout bij bepalen groep [' || c_groep_upper || ']';
SELECT fac_groep_key
INTO v_groep_key
FROM fac_groep
WHERE fac_groep_upper = c_groep_upper;
v_errorhint :=
'Fout bij koppelen persoon aan groep ['
|| c_groep_upper
|| ']';
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
VALUES (v_groep_key, recnogroup.prs_perslid_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
END LOOP;
COMMIT;
-- Verwijder ongebruikte functies; deze import bepaalt de functies!
DELETE FROM prs_srtperslid sp
WHERE NOT EXISTS
(SELECT 1
FROM prs_perslid P
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key)
AND sp.prs_srtperslid_key != 47286;
ELSE
IF (v_count_prs_import = 0)
THEN
fac.imp_writelog (
p_import_key,
'S',
'Geen nieuw/recent bestand met te importeren personen aangetroffen!',
'');
ELSE
fac.imp_writelog (
p_import_key,
'E',
'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!',
'- max. verschilpercentage = ['
|| TO_CHAR (c_max_delta_percentage)
|| '%] <br> '
|| '- matchend #personen importbestand = ['
|| TO_CHAR (v_count_prs_import)
|| '] <br> '
|| '- #personen Facilitor = ['
|| TO_CHAR (v_count_prs_actual)
|| ']');
END IF;
END IF;
COMMIT;
END gdzw_update_prs;
/
-- Rappelnotificaties naar contractbeheerder en -eigenaar.
-- (Notificatie naar eigenaar alleen als dit niet ook de beheerder is)
-- Dagelijks schedulen; rapporteert alleen de contracten die vandaag de rappeltermijn ingaan.
CREATE OR REPLACE VIEW gdzw_v_noti_cntreminder_geg
AS
SELECT 'CNTMAI' code,
'' sender,
c.prs_perslid_key_beh beh,
c.prs_perslid_key_eig eig,
cnt.cnt_getrappeldatum (c.cnt_contract_key) rap,
cnt.cnt_getopzegdatum (c.cnt_contract_key) opz,
'Rappel: Contract '
|| c.cnt_contract_nummer_intern
|| ' ('
|| c.cnt_contract_omschrijving
|| ' '
|| b.prs_bedrijf_naam
|| ')'
|| ' moet uiterlijk per '
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.' text,
c.cnt_contract_key key,
c.cnt_contract_nummer_intern par1,
cnt.cnt_getopzegdatum (c.cnt_contract_key) par2,
NULL xkey
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND TRUNC(SYSDATE) = TRUNC(cnt.cnt_getrappeldatum(c.cnt_contract_key));
CREATE OR REPLACE VIEW gdzw_v_noti_cntreminder
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
PAR1,
PAR2,
XKEY
)
AS
SELECT code,
sender,
beh receiver,
text,
key,
par1,
par2,
xkey
FROM gdzw_v_noti_cntreminder_geg
WHERE beh IS NOT NULL
UNION ALL
SELECT code,
sender,
eig receiver,
text,
key,
par1,
par2,
xkey
FROM gdzw_v_noti_cntreminder_geg
WHERE eig IS NOT NULL
AND eig != beh;
CREATE OR REPLACE VIEW gdzw_v_rap_keyvsfe
(
soort_gebruiker,
Naam,
Loginnaam,
laatste_login
)
AS
SELECT DECODE (key_user, 1, 'KEY', 'FE'),
pf.prs_perslid_naam_full,
oslogin,
prs_perslid_login
FROM (SELECT *
FROM (SELECT p.prs_perslid_key prs_key,
COALESCE (p.prs_perslid_oslogin,
p.prs_perslid_oslogin2)
oslogin,
1 login, -- 1=user heeft login + groep + rechten
DECODE (
SIGN(TRUNC(COALESCE (p.prs_perslid_login + 92,
SYSDATE - 1))
- TRUNC (SYSDATE)),
-1,
0,
1) -- 1=user heeft laatste 92 dagen ingelogd
recent_login
FROM prs_v_aanwezigperslid p
WHERE EXISTS -- op basis van login + groep + rechten
(SELECT 1
FROM fac_v_webgebruiker gg
WHERE gg.prs_perslid_key = p.prs_perslid_key)
AND NOT EXISTS -- FSN#36597: WEB_FACFAC-users niet meetellen!
(SELECT 1
FROM fac_v_webgebruiker gg, fac_functie f
WHERE gg.prs_perslid_key =
p.prs_perslid_key
AND gg.fac_functie_key =
f.fac_functie_key
AND fac_functie_code = 'WEB_FACFAC')
UNION ALL -- FSN#24029: Soms ook personen zonder login meetellen!
SELECT p.prs_perslid_key,
NULL oslogin,
1 login, -- 1=user telt mee, want allow_for_others!
0 recent_login -- geen login, dus nooit recent ingelogd
FROM prs_v_aanwezigperslid p
WHERE COALESCE (p.prs_perslid_oslogin,
p.prs_perslid_oslogin2) IS NULL
AND (fac.getSetting ('mld_allow_for_others') = 1
OR EXISTS
(SELECT 1
FROM bes_disc_params dp
WHERE dp.bes_disc_params_for_others = 1))
UNION ALL -- FSN#27315: En ook eventuele "sensorusers" meetellen!
SELECT NULL prs_perslid_key,
NULL oslogin,
COUNT ( * ) login, -- elke sensoruser telt mee als FE!
1 recent_login -- recent actief dus tellen als recent
FROM ins_v_aanwezigdeel d
WHERE ins_deel_statedate > TRUNC (SYSDATE - 30)) x
LEFT JOIN -- 1=user heeft rechten op key-codes=notFE-codes
(SELECT DISTINCT fclt_f_login, 1 key_user
FROM fac_v_rap_groeprechten gr, fac_functie f
WHERE gr.fclt_f_funcode = f.fac_functie_code
AND f.fac_functie_groep IN (1, 2)) a
ON x.oslogin = a.fclt_f_login
LEFT JOIN -- FSN#30404: 1=user is cross-domain (xd) user
(SELECT p.prs_perslid_key, 1 xd_user
FROM prs_v_aanwezigperslid p,
prs_v_afdeling_boom ab
WHERE p.prs_afdeling_key = ab.prs_afdeling_key
AND p.prs_perslid_apikey IS NOT NULL
AND ab.prs_bedrijf_key =
fac.safe_to_number(fac.getSetting('xd_primary_bedrijfkey')))
b
ON x.prs_key = b.prs_perslid_key) st,
prs_perslid p,
prs_v_perslid_fullnames pf
WHERE login = 1
AND p.prs_perslid_key = st.prs_key
AND pf.prs_perslid_key = p.prs_perslid_key;
CREATE OR REPLACE VIEW GDZW_V_NOTI_HRMEXTRA
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY,
XSENDER,
XEMAIL,
XMOBILE
)
AS
SELECT DISTINCT
'CUST01'
AS code,
NULL
AS sender,
NULL
AS receiver,
'Er is een onderdeel in een HR workflow afgerond'
AS text,
m.mld_melding_key
AS key,
NULL
AS extra_key,
NULL,
(SELECT LISTAGG ((kmm1.mld_kenmerkmelding_waarde), '; ')
WITHIN GROUP (ORDER BY m.mld_melding_key DESC) AS xemail
FROM mld_kenmerkmelding kmm1, mld_kenmerk km1
WHERE kmm1.mld_melding_key = m.mld_melding_key
AND kmm1.mld_kenmerkmelding_verwijder IS NULL
AND kmm1.mld_kenmerk_key = km1.mld_kenmerk_key
AND ( UPPER (km1.mld_kenmerk_omschrijving) =
'EMAILADRES MEDEWERKER'
OR UPPER (km1.mld_srtkenmerk_key) = 321))
AS xemail,
NULL
FROM mld_melding m,
mld_stdmelding sm,
ins_tab_discipline d,
ins_srtdiscipline sd,
mld_kenmerkmelding kmm,
mld_kenmerk km
WHERE m.mld_melding_key NOT IN
(SELECT t.fac_tracking_refkey
FROM fac_tracking t
WHERE t.fac_tracking_oms LIKE '%CUST01%'
AND t.fac_tracking_refkey = m.mld_melding_key)
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_key IN (141, 142) -- Vakgroeptypen 'Facilitair - PnO workflows' en 'ICT - PnO workflows'
AND kmm.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = kmm.mld_kenmerk_key
AND m.mld_melding_status = 2
AND ( UPPER (km.mld_kenmerk_omschrijving) =
'EMAILADRES MEDEWERKER'
OR UPPER (km.mld_srtkenmerk_key) = 321)
AND kmm.mld_melding_key = m.mld_melding_key
AND kmm.mld_kenmerkmelding_verwijder IS NULL
AND kmm.mld_kenmerk_key = km.mld_kenmerk_key
ORDER BY m.mld_melding_key;
CREATE OR REPLACE PROCEDURE gdzw_processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
v_sender prs_perslid.prs_perslid_key%TYPE;
v_kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
v_mldstat mld_melding.mld_melding_status%TYPE;
v_stdmelding mld_stdmelding.mld_stdmelding_key%TYPE;
v_stduitvoer mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE;
v_errormsg fac_result.fac_result_waarde%TYPE;
v_from VARCHAR2 (4000);
v_fromaddr VARCHAR2 (4000);
v_body VARCHAR2 (4000);
m_body VARCHAR2 (4000);
v_mldkey mld_melding.mld_melding_key%TYPE;
v_mailorigin mld_kenmerk.mld_kenmerk_key%TYPE;
BEGIN
v_sender := 4; --Standaard de persoon Facilitor
v_stdmelding := fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
v_mailorigin := 1121; --Kenmerk_key oorspronkelijke mail
-- Verwijder de Bounce Address Tag Validation
v_errormsg := '(0x101)';
IF pfrom LIKE 'prvs=%'
THEN
v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1);
ELSE
v_from := pfrom;
END IF;
v_errormsg := '(0x102)';
-- Indien een mail is doorgestuurd, dan moet er teruggevallen worden op de v_fromaddr.
SELECT fac_result_waarde
INTO v_fromaddr
FROM fac_result
WHERE fac_result_sessionid = psessionid AND fac_result_naam = 'fromaddr';
v_fromaddr := REPLACE (REPLACE (v_fromaddr, '>', ''), '<', '');
v_body := pbody;
m_body := pbody;
-- Valideer de sender in pfrom: kennen we deze?
v_errormsg := '(0x111)';
SELECT MIN (p.prs_perslid_key), MIN (d.prs_kostenplaats_key)
INTO v_sender, v_kostenplaats
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND p.prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_email) = UPPER (v_from);
CASE
WHEN UPPER (pto) LIKE 'FACILITORM2M@%'
THEN
BEGIN
v_errormsg :=
SUBSTR (('(0x201)' || psessionid || pfrom || m_body),
0,
4000);
-- Valideer de sender in pfromaddr: kennen we deze?
-- Bij facilitorm2m@gdzw.facilitor.nl worden de mails via facilitorm2m@ggdzw.nl doorgestuurd.
-- Dit zijn meldingen mbt dataveiligheid.
-- In fromaddr zit dan het mailadres van de oorspronkelijke melder.
-- Bij facilitorm2m meldingen mag de fromaddr de v_sender uit v_from overschrijven.
SELECT MIN (p.prs_perslid_key), MIN (d.prs_kostenplaats_key)
INTO v_sender, v_kostenplaats
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND p.prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_email) = UPPER (v_fromaddr);
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'PROCESSEMAIL',
'W',
'Mail kon niet geformateerd worden afzender:'
|| pfrom
|| '['
|| v_errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END;
--Hieronder de acties die gedaan moeten worden.
BEGIN
v_errormsg := '(0x211)' || pfrom || psubject;
v_stdmelding := 1041; -- Standaardmelding 'Dataveiligheid' in vakgroeptype ICT Servicedesk
v_mldstat := 2; -- Standaard de status in Nieuw (2).
v_stduitvoer :=
mld.getstduitvoer (v_stdmelding,
NULL,
NULL,
NULL);
v_errormsg := '(0x212)' || pfrom || v_mldkey || psubject;
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_onderwerp,
mld_melding_omschrijving,
mld_melding_status,
mld_melding_t_uitvoertijd,
mld_stdmelding_key,
mld_alg_locatie_key,
mld_melding_externnr,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES (
'MLD',
4, -- email
SYSDATE,
SUBSTR (psubject, 1, 80),
SUBSTR (
REPLACE (
SUBSTR (v_body, 1, 4000),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
v_mldstat,
NULL, -- v_stduitvoer
v_stdmelding,
NULL, -- Locatie onbekend
NULL,
v_sender,
v_sender,
v_kostenplaats,
3)
RETURNING mld_melding_key
INTO v_mldkey;
v_errormsg := '(0x221)';
mld.setmeldingstatus (v_mldkey, v_mldstat, v_sender);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Geregistreerd onder melding ' || v_mldkey);
END;
IF v_mldkey IS NOT NULL
THEN
BEGIN
-- Originele email wordt opgeslagen bij de opdracht
v_errormsg := '(0x231`)' || v_mldkey || psubject;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'kenmerkorgmailpath',
'MLD\M'
|| TO_CHAR (TRUNC (v_mldkey / 1000),
'FM0000')
|| '___\M'
|| v_mldkey
|| '\'
|| v_mailorigin
|| '\');
END;
END IF;
ELSE
v_errormsg :=
'(0x900)' || v_mldkey || psubject || ' - geen pto herkend';
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', v_errormsg);
END CASE;
EXCEPTION
WHEN OTHERS
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', v_errormsg);
fac.writelog (
'PROCESSEMAIL',
'E',
'Mail kon niet ingelezen worden afzender:'
|| pfrom
|| '['
|| v_errormsg
|| v_mldkey
|| psubject
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END;
/
------ 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