SKAF#63270 -- Afas personen import - definitieve versie

svn path=/Customer/trunk/; revision=48746
This commit is contained in:
Jos Migo
2020-11-06 13:14:43 +00:00
parent 53524ac28a
commit a6502c2927

View File

@@ -52,7 +52,7 @@ IS
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voorletters VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_afdeling_naam VARCHAR2 (256);
v_prs_afdeling_naam VARCHAR2 (256); -- Versie 1 was op afdelingscode. Versie 2 is op afdelings_kostenplaats
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
@@ -60,9 +60,6 @@ IS
v_prs_perslid_wachtwoord VARCHAR2 (256);
-- Overig:
v_alg_locatie_code VARCHAR2 (256);
v_alg_gebouw_code VARCHAR2 (256);
CURSOR c1
IS
@@ -88,31 +85,27 @@ BEGIN
-- Lees alle veldwaarden
-- 01
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code);
-- 02
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
-- 03
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
-- 04
-- 02
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
-- 05
-- 03
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel);
-- 06
-- 04
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters);
-- 07
-- 05
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam);
-- 08
-- 06
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
-- 09
-- 07
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
-- 10
-- 08
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
-- 11
-- 09
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
-- 12
-- 10
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
-- 12
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_wachtwoord);
-- 11
-- fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_wachtwoord);
@@ -133,9 +126,7 @@ BEGIN
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE'
IF UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE'
AND UPPER (v_prs_perslid_naam) = 'PERSOONACHTERNAAM'
AND UPPER (v_prs_perslid_tussenvoegsel) = 'TUSSENVOEGSEL'
AND UPPER (v_prs_perslid_voorletters) = 'VOORLETTERS'
@@ -145,7 +136,6 @@ BEGIN
AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE'
AND UPPER (v_prs_perslid_nr) = 'PERSONEELSNUMMER'
AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM'
AND UPPER (v_prs_perslid_wachtwoord) = 'PASSWORD'
THEN
header_is_valid := 1;
END IF;
@@ -276,9 +266,9 @@ BEGIN
v_errorhint := 'Ongeldige afdelingscode';
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
IF LENGTH (v_prs_afdeling_naam) > 10
IF LENGTH (v_prs_afdeling_naam) > 15
THEN
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 10);
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdelingscode te lang',
@@ -329,40 +319,6 @@ BEGIN
END IF;
COMMIT;
--
v_errorhint := 'Ongeldige plaats/locatiecode';
v_alg_locatie_code := TRIM(v_alg_locatie_code);
IF LENGTH (v_alg_locatie_code) > 5
THEN
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 5);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Locatiecode te lang',
'Locatiecode wordt afgebroken tot ['
|| v_alg_locatie_code
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldige plaats/gebouwcode';
v_alg_gebouw_code := TRIM(v_alg_gebouw_code);
IF LENGTH (v_alg_gebouw_code) > 10
THEN
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 10);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Gebouwcode te lang',
'Gebouwcode wordt afgebroken tot ['
|| v_alg_gebouw_code
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldig telefoonnummer';
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
@@ -385,9 +341,9 @@ BEGIN
v_errorhint := 'Ongeldig e-mailadres';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 50
IF LENGTH (v_prs_perslid_email) > 150
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 50);
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 150);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'E-mailadres te lang',
@@ -416,23 +372,6 @@ BEGIN
COMMIT;
END IF;
--
v_errorhint := 'Ongeldig wachtwoord';
v_prs_perslid_wachtwoord := TRIM (v_prs_perslid_wachtwoord);
IF LENGTH (v_prs_perslid_wachtwoord) > 30
THEN
v_prs_perslid_wachtwoord := SUBSTR (v_prs_perslid_wachtwoord, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Wachtwoord te lang',
'Wachtwoord wordt afgebroken tot ['
|| v_prs_perslid_wachtwoord
|| ']'
);
COMMIT;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
@@ -458,12 +397,12 @@ BEGIN
v_prs_perslid_voorletters,
v_prs_perslid_voornaam, v_prs_afdeling_naam,
v_prs_srtperslid_omschrijving,
v_alg_locatie_code, v_alg_gebouw_code,
NULL, NULL,
NULL, NULL,
v_prs_perslid_telefoonnr,
v_prs_perslid_email,
v_prs_perslid_oslogin,
v_prs_perslid_wachtwoord
NULL
);
COMMIT;
v_count_import := v_count_import + 1;
@@ -530,7 +469,6 @@ EXCEPTION
END skaf_import_prs;
/
CREATE OR REPLACE PROCEDURE skaf_update_prs (
p_import_key IN NUMBER
)
@@ -538,14 +476,9 @@ IS
-- LET OP: moet idem zijn als declaratie bij SKAF_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) := 50; -- Eenmalig 25-10-2020 op 50 gezet... Moet op 20
-- Zie SKAF#41843 het verschil is op dit moment 1099-326=773 is ongeveer 70% dus om het personeelsbestand te corrigeren tijdelijk aanpassen
-- c_max_delta_percentage NUMBER (10) := 80;
c_max_delta_percentage NUMBER (10) := 50; -- Eenmalig 25-10-2020 op 50 gezet... Moet/kan daarna weer op 20
-- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
c_ruimte_nr VARCHAR2 (10) := '000';
-- Groep waar personen in geplaatst worden (indien nog geen groep)
c_key_default_rol NUMBER(10) := 1;
v_aanduiding VARCHAR2 (200);
@@ -563,14 +496,6 @@ IS
v_afdeling_key NUMBER (10);
v_srtperslid_key NUMBER (10);
v_oslogin VARCHAR2 (30);
v_wachtwoord VARCHAR2 (30);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_wp_key NUMBER (10);
v_wp_volgnr NUMBER (3);
v_wp_oms VARCHAR2 (30);
v_groep_defaultnaam VARCHAR2 (30);
-- Let op! Met eindatum zijn personen die niet meer in dienst zijn.
@@ -593,32 +518,11 @@ IS
FROM skaf_imp_prs
GROUP BY UPPER (prs_srtperslid_omschrijving);
CURSOR cperslid
IS
SELECT *
FROM skaf_imp_prs;
CURSOR cwp
IS
SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code
FROM skaf_imp_prs ip, prs_v_aanwezigperslid p
WHERE ip.alg_locatie_code IS NOT NULL
AND ip.alg_gebouw_code IS NOT NULL
AND UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr);
-- Alle actieve personen met personeelsnummer (ie. de import-doelgroep) zonder een werkplek
CURSOR cnowp
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_nr IS NOT NULL
AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
AND NOT EXISTS (SELECT 1
FROM prs_perslidwerkplek pw
WHERE pw.prs_perslid_key = p.prs_perslid_key);
-- Alle aanwezige personen met personeelsnummer (ie. de import-doelgroep) niet in een groep
CURSOR cnogroup
IS
@@ -731,8 +635,8 @@ BEGIN
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is INACTIEF gemaakt',
'Persoon is INACTIEF gemaakt'
|| '] was en blijft INACTIEF',
'Persoon was en blijft INACTIEF'
);
END IF;
COMMIT;
@@ -847,15 +751,16 @@ BEGIN
UPPER (recperslid.prs_srtperslid_omschrijving);
v_errorhint :=
'Fout bij bepalen afdeling ['
'Fout bij bepalen afdeling (via kostenplaatsnr) ['
|| recperslid.prs_afdeling_naam
|| ']';
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND UPPER (prs_afdeling_naam) =
FROM prs_afdeling a, prs_kostenplaats k
WHERE a.prs_kostenplaats_key = k.prs_kostenplaats_key
AND prs_afdeling_verwijder IS NULL
AND UPPER (k.prs_kostenplaats_nr) =
UPPER (recperslid.prs_afdeling_naam);
v_errorhint := 'Fout bij bepalen persoon';
@@ -866,13 +771,10 @@ BEGIN
WHERE prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_nr) = UPPER (recperslid.prs_perslid_nr);
-- Login afleiden uit e-mail (alles voor @) -- ACTIE: NOG VASTSTELLEN MET BRANDON
-- v_oslogin := SUBSTR (recperslid.prs_perslid_email, 1, INSTR (recperslid.prs_perslid_email, '@', 1, 1) - 1);
-- Hier wordt loginnaam expliciet (anders) in het importbestand meegegeven.
v_oslogin := SUBSTR (recperslid.prs_perslid_email, 1, INSTR (recperslid.prs_perslid_email, '@', 1, 1) - 1);
-- WAS: v_oslogin := recperslid.prs_perslid_oslogin;
v_wachtwoord := recperslid.prs_perslid_wachtwoord;
-- Login is afgeleid uit e-mail (alles voor @) en max 30 posities
-- Dit is al in import-deel geregeld
-- v_oslogin := SUBSTR (recperslid.prs_perslid_email, 1, INSTR (recperslid.prs_perslid_email, '@', 1, 1) - 1);
v_oslogin := recperslid.prs_perslid_oslogin;
IF (v_count = 0)
THEN
@@ -900,7 +802,19 @@ BEGIN
v_oslogin
) RETURNING prs_perslid_key INTO v_perslid_key;
prs.setpassword(v_perslid_key, v_wachtwoord);
fac.imp_writelog (p_import_key,
'I',
'Persoon met nummer ['
|| recperslid.prs_perslid_nr
|| '] en naam ['
|| recperslid.prs_perslid_naam
|| ', '
|| recperslid.prs_perslid_voornaam
|| '] is toegevoegd',
'Persoon is toegevoegd'
);
fac.trackaction ('PRSUPD', v_perslid_key, 4,sysdate, v_aanduiding || ' is toegevoegd uit afas-prs-import') ;
COMMIT;
ELSE
@@ -929,9 +843,6 @@ BEGIN
prs_perslid_nr = recperslid.prs_perslid_nr,
prs_perslid_oslogin = COALESCE (v_oslogin, prs_perslid_oslogin)
WHERE prs_perslid_key = v_perslid_key;
IF v_wachtwoord IS NOT NULL THEN
prs.setpassword(v_perslid_key, v_wachtwoord);
END IF;
COMMIT;
END IF;
@@ -970,251 +881,7 @@ BEGIN
);
COMMIT;
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_nr
|| '|'
|| recwp.prs_perslid_naam
|| '|'
|| recwp.prs_perslid_voornaam
|| '|'
|| recwp.alg_locatie_code
|| '|'
|| recwp.alg_gebouw_code
|| ' - ';
v_errorhint := 'Fout bij bepalen persoon';
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_nr) = UPPER (recwp.prs_perslid_nr);
v_errorhint := 'Fout bij bepalen locatie';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE UPPER (alg_locatie_code) = UPPER (recwp.alg_locatie_code);
v_errorhint := 'Fout bij bepalen gebouw';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code);
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 bepalen of persoon in gebouw een werkplek heeft';
SELECT COUNT (*)
INTO v_count
FROM prs_perslidwerkplek pw,
prs_werkplek wp,
alg_ruimte r,
alg_verdieping v
WHERE pw.prs_perslid_key = v_perslid_key
AND pw.prs_werkplek_key = wp.prs_werkplek_key
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = v_gebouw_key;
-- v_count=0 -> persoon verhuist naar/krijgt wp in gebouw.
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij bepalen ruimte';
SELECT COUNT (*)
INTO v_count
FROM alg_v_aanwezigruimte r
WHERE r.alg_verdieping_key = v_verdieping_key
AND r.alg_ruimte_nr = c_ruimte_nr;
-- v_count=0 -> ruimte '000' bestaat nog niet.
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen ruimte';
INSERT INTO alg_ruimte
(alg_verdieping_key, alg_srtruimte_key,
alg_ruimte_nr
)
VALUES (v_verdieping_key, 21, -- facilitaire ruimte
c_ruimte_nr
);
COMMIT;
END IF;
v_errorhint := 'Fout bij bepalen ruimte';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_v_aanwezigruimte r
WHERE r.alg_verdieping_key = v_verdieping_key
AND r.alg_ruimte_nr = c_ruimte_nr;
v_errorhint := 'Fout bij bepalen vrije werkplek';
SELECT COUNT (w.prs_werkplek_key)
INTO v_count
FROM prs_werkplek w
WHERE w.prs_alg_ruimte_key = v_ruimte_key
AND NOT EXISTS (
SELECT 1
FROM prs_perslidwerkplek 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 NOT EXISTS (
SELECT 1
FROM prs_perslidwerkplek 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
);
COMMIT;
ELSE
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;
v_wp_oms := c_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 koppelen 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
);
COMMIT;
END IF;
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
);
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 nummer ['
|| recnowp.prs_perslid_nr
|| '] en naam ['
|| recnowp.prs_perslid_naam
|| ', '
|| recnowp.prs_perslid_voornaam
|| '] heeft geen werkplek',
'Geen werkplek'
);
COMMIT;
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
);
COMMIT;
END;
END LOOP;
-- Iedereen krijgt _default-rol die nog geen groep heeft.
-- Iedereen krijgt _default-rol die nog geen groep heeft.
FOR recnogroup IN cnogroup
LOOP
BEGIN