2000 lines
80 KiB
MySQL
2000 lines
80 KiB
MySQL
--
|
||
-- $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;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE GDZW
|
||
AS
|
||
PROCEDURE schonen_accounts;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE BODY GDZW
|
||
AS
|
||
-- Verwijder via SCIM geinactiveerde personen!
|
||
PROCEDURE schonen_accounts
|
||
AS
|
||
c_prs_dummy_key NUMBER (10) := -1; -- DUMMY tbv overzetten verplichtingen verwijderde personen
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_del NUMBER (10);
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_email || '|' || pf.prs_perslid_naam_full || '] '
|
||
aanduiding,
|
||
p.prs_perslid_key,
|
||
COUNT (vp.prs_perslid_key) aant
|
||
FROM prs_v_aanwezigperslid p, prs_v_verplichting_keys vp, prs_v_perslid_fullnames pf
|
||
WHERE p.prs_perslid_externid IS NOT NULL -- SCIM-populatie!
|
||
AND COAlESCE (p.prs_perslid_inactief, SYSDATE) < TRUNC (SYSDATE)
|
||
AND p.prs_perslid_key = vp.prs_perslid_key(+) -- Actuele verplichtingen?
|
||
AND p.prs_perslid_key = pf.prs_perslid_key
|
||
GROUP BY '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_email || '|' || pf.prs_perslid_naam_full || '] ',
|
||
p.prs_perslid_key
|
||
ORDER BY 2;
|
||
BEGIN
|
||
v_count_del := 0;
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
IF rec.aant = 0
|
||
THEN
|
||
v_errormsg := 'Fout schonen collega';
|
||
DELETE FROM prs_collega
|
||
WHERE prs_perslid_key = rec.prs_perslid_key
|
||
OR prs_perslid_key_alt = rec.prs_perslid_key;
|
||
|
||
v_errormsg := 'Fout schonen perslid';
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_verwijder = SYSDATE
|
||
WHERE prs_perslid_key = rec.prs_perslid_key;
|
||
|
||
v_count_del := v_count_del + 1;
|
||
|
||
IF MOD (v_count_del, 1000) = 0
|
||
THEN
|
||
COMMIT;
|
||
END IF;
|
||
ELSE
|
||
fac.writelog ('GDZW_SCHONENACCOUNTS', 'I', rec.aanduiding || '/#Verplichtingen: ' || TO_CHAR (rec.aant), 'Persoon niet geschoond');
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN -- Kennelijk heeft persoon toch nog ernstige verplichtingen!
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.writelog ('GDZW_SCHONENACCOUNTS', 'W', rec.aanduiding || v_errormsg, 'Fout schonen persoon');
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.writelog ('GDZW_SCHONENACCOUNTS', 'S', 'Personen/#geschoond: ' || TO_CHAR (v_count_del), '');
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.writelog ('GDZW_SCHONENACCOUNTS', 'E', v_errormsg, '');
|
||
COMMIT;
|
||
END schonen_accounts;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE GDZW_DAILY
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
BEGIN
|
||
gdzw.schonen_accounts;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.writelog ('DAILY', 'E', 'Proces afgebroken!', v_errormsg);
|
||
END GDZW_DAILY;
|
||
/
|
||
|
||
|
||
|
||
------ 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 |