AAZC#25346 -- inlezen personeelsbestand

svn path=/Customer/trunk/; revision=17153
This commit is contained in:
Arthur Egberink
2013-03-12 12:55:41 +00:00
parent 65741a67b0
commit b1a7b8274e
3 changed files with 525 additions and 1 deletions

View File

View File

@@ -0,0 +1,72 @@
SET DEFINE OFF;
Insert into FAC_USRDATA
(FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '1', '1',
'van', 1, sysdate);
Insert into FAC_USRDATA
(FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
( 61, '2', '2',
'van de', 2, sysdate);
Insert into FAC_USRDATA
( FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
( 61, '3', '3',
'van der', 3, sysdate);
Insert into FAC_USRDATA
( FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
( 61, '4', '4',
'de', 4, sysdate);
Insert into FAC_USRDATA
( FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '5', '5',
'den', 5, sysdate);
Insert into FAC_USRDATA
( FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
( 61, '6', '6',
'in ''t', 6, sysdate);
Insert into FAC_USRDATA
( FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '7', '7',
'vander', 7, sysdate);
Insert into FAC_USRDATA
(FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '8', '8',
'der', 8, sysdate);
Insert into FAC_USRDATA
( FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
( 61, '9', '9',
'van den', 9, sysdate);
Insert into FAC_USRDATA
(FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '10', '10',
'el', 10, sysdate);
Insert into FAC_USRDATA
(FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '11', '11',
'de la', 11, sysdate);
Insert into FAC_USRDATA
(FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '12', '12',
'v.d.', 11, sysdate);
Insert into FAC_USRDATA
(FAC_USRTAB_KEY, FAC_USRDATA_CODE, FAC_USRDATA_UPPER, FAC_USRDATA_OMSCHR, FAC_USRDATA_VOLGNR, FAC_USRDATA_AANMAAK)
Values
(61, '13', '13',
'dos', 11, sysdate);
insert into fac_import_app (fac_import_app_code, fac_import_app_oms, fac_functie_key, fac_import_app_prefix)
values ('PERSLID_MUT', 'AAZC Personen import functie', 66, 'AAZC');
COMMIT;

View File

@@ -179,10 +179,462 @@ END;
CREATE OR REPLACE PROCEDURE aazc_import_perslid_mut (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_alg_locatie_code VARCHAR2 (256);
v_alg_gebouw_code VARCHAR2 (256);
v_alg_verdieping_volgnr VARCHAR2 (256);
v_alg_verdieping_volgnr_num NUMBER (3);
v_alg_ruimte_nr VARCHAR2 (256);
v_prs_werkplek_volgnr VARCHAR2 (256);
v_prs_werkplek_volgnr_num NUMBER (3);
v_prs_werkplek_omschrijving VARCHAR2 (256);
v_prs_afdeling_naam VARCHAR2 (256);
v_prs_afdeling_omschrijving VARCHAR2 (256);
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voorletters VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_titel VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_mobiel VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_nr VARCHAR2 (256);
v_prs_perslid_oslogin VARCHAR2 (256);
v_old_login VARCHAR2 (256);
v_dummy VARCHAR2 (256);
v_tekst VARCHAR2 (4000);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- cursor om de tussenvoegsels goed in te kunnen vullen. Deze staan nu achter de achternaam.
CURSOR c (p_persoonachternaam VARCHAR2)
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata u
WHERE UPPER(p_persoonachternaam) LIKE '%' || ' ' || UPPER(u.fac_usrdata_omschr)
AND fac_usrtab_key = 61
ORDER BY LENGTH (fac_usrdata_omschr) DESC;
BEGIN
DELETE FROM fac_imp_perslid;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
v_aanduiding := '';
v_old_login := 'QueQeLeQue';
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := '';
v_errorhint := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- 01
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
-- 02
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
-- 03
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
-- 04
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
-- 05
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_ruimte_nr);
-- 06
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
-- 07
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_omschrijving);
-- 08 kostenplaats
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
-- 09
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
-- 10 Vestiging
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
-- 11 Gebouw
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
-- 12
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
-- 13
fac.imp_getfield (v_newline, c_fielddelimitor, v_tekst);
--
v_aanduiding := v_prs_perslid_naam || ' - ';
-- Controleer alle veldwaarde
IF (header_is_valid = 0)
THEN
IF UPPER (v_prs_perslid_naam) = 'PERSOON'
AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAMNETWERK'
AND UPPER (v_alg_gebouw_code) = 'CODE BOUWDEEL'
THEN
IF v_tekst IS NULL -- tekst kolom bevat cr/lf die niet door de import begrepen worden.
THEN
header_is_valid := 1;
END IF;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
v_errorhint := 'Ongeldige kamer';
v_alg_locatie_code := NULL;
v_alg_gebouw_code := NULL;
v_alg_verdieping_volgnr := NULL;
IF v_alg_ruimte_nr IS NOT NULL
THEN
BEGIN
SELECT alg_locatie_code, alg_gebouw_upper, alg_verdieping_volgnr
INTO v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_volgnr
FROM alg_v_ruimte_gegevens
WHERE alg_ruimte_nr = v_alg_ruimte_nr;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'W', v_aanduiding || ' [' || v_alg_ruimte_nr || ']', v_errorhint);
v_alg_ruimte_nr := NULL;
END;
END IF;
--
v_errorhint := 'Ongeldige afdelingscode';
IF v_prs_afdeling_naam IS NULL OR v_prs_afdeling_naam = 'BLANKO'
THEN
v_prs_afdeling_naam := 'Onbekend';
ELSE
v_prs_afdeling_naam := SUBSTR(v_prs_afdeling_naam, 1, 4);
END IF;
BEGIN
SELECT prs_afdeling_naam
INTO v_prs_afdeling_naam
FROM prs_afdeling
WHERE UPPER(prs_afdeling_naam) = UPPER(v_prs_afdeling_naam)
AND prs_afdeling_verwijder IS NULL;
EXCEPTION WHEN NO_DATA_FOUND THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding, v_prs_afdeling_naam || ' - Afdeling kan niet gevonden worden!');
v_prs_afdeling_naam := NULL;
END;
--
v_errorhint := 'Ongeldige naam persoon';
-- verwijder de tussenvoegsels
v_prs_perslid_tussenvoegsel := NULL;
FOR rec1 IN c (v_prs_perslid_naam)
LOOP
BEGIN
IF v_old_login <> v_prs_perslid_oslogin THEN
v_prs_perslid_tussenvoegsel := rec1.fac_usrdata_omschr;
v_prs_perslid_naam := TRIM(SUBSTR (v_prs_perslid_naam, 1, INSTR(v_prs_perslid_naam, rec1.fac_usrdata_omschr)-2));
v_old_login := v_prs_perslid_oslogin;
END IF;
END;
END LOOP;
v_prs_perslid_voorletters := NULL;
IF INSTR(v_prs_perslid_naam, ',') >0 THEN
-- achternaam bevat ook voornaam
v_prs_perslid_voornaam := substr(v_prs_perslid_naam, INSTR(v_prs_perslid_naam, ',')+2);
IF INSTR(v_prs_perslid_voornaam, '.') <> 0
THEN -- voorletters ipv voornaam
v_prs_perslid_voorletters := SUBSTR(v_prs_perslid_voornaam,1,10);
v_prs_perslid_voornaam := NULL;
END IF;
v_prs_perslid_naam := substr(v_prs_perslid_naam, 1, INSTR(v_prs_perslid_naam, ',') -1);
END IF;
-- todo: moeten we nog checken op voorletters?
--
v_errorhint := 'Ongeldige telefoonnr. persoon';
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 || 'Telefoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_telefoonnr || ']'
);
END IF;
--
v_errorhint := 'Ongeldige email persoon';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 200
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Email persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_email || ']'
);
END IF;
--
v_errorhint := 'Ongeldige functie persoon';
v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving);
IF v_prs_srtperslid_omschrijving IS NULL
THEN
v_prs_srtperslid_omschrijving := 'Onbekend';
END IF;
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-aanduiding persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_srtperslid_omschrijving || ']'
);
ELSE
IF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
'Functie persoon moet worden opgegeven'
);
END IF;
END IF;
--
v_errorhint := 'Ongeldige persoonnr.';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF fac.safe_to_number(v_prs_perslid_nr) IS NULL
THEN
v_prs_perslid_nr := NULL;
END IF;
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 || 'Persoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_nr || ']'
);
END IF;
--
v_errorhint := 'Ongeldige loginnaam';
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 || 'Loginnaam persoon is te lang',
'Aanduiding wordt afgebroken tot [' || v_prs_perslid_oslogin || ']'
);
END IF;
--
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg := 'Fout bij toevoegen te impoteren bedrijf/afdeling [' || v_prs_afdeling_naam || ']';
INSERT INTO fac_imp_perslid (
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_afdeling_naam,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_perslid_telefoonnr,
prs_perslid_email,
prs_srtperslid_omschrijving,
prs_perslid_nr,
prs_perslid_oslogin
)
VALUES (
v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr,
v_alg_ruimte_nr,
v_prs_werkplek_volgnr,
v_prs_werkplek_omschrijving,
v_prs_afdeling_naam,
v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voorletters,
v_prs_perslid_voornaam,
v_prs_perslid_telefoonnr,
v_prs_perslid_email,
v_prs_srtperslid_omschrijving,
v_prs_perslid_nr,
UPPER(v_prs_perslid_oslogin)
);
v_count_import := v_count_import + 1;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig'
);
ELSE
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),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint);
END aazc_import_perslid_mut;
/
CREATE OR REPLACE PROCEDURE aazc_update_perslid_mut (p_import_key IN NUMBER)
IS
CURSOR c_del
IS
SELECT prs_perslid_key,
prs_perslid_naam,
prs_perslid_oslogin,
prs_perslid_oslogin2,
prs_perslid_login,
(SELECT COUNT ( * )
FROM prs_v_verplichting v
WHERE v.prs_perslid_key = p.prs_perslid_key)
verplichtingen
FROM prs_perslid p
WHERE NOT EXISTS
(SELECT prs_perslid_key
FROM fac_imp_perslid i
WHERE p.prs_perslid_oslogin = UPPER (i.prs_perslid_oslogin)
OR p.prs_perslid_oslogin2 = UPPER (i.prs_perslid_oslogin))
AND prs_afdeling_key <> 21 -- AAFM medewerkers gaan we niet verwijderen.
AND prs_perslid_verwijder IS NULL
AND (prs_perslid_oslogin NOT LIKE '/_%' ESCAPE ('/')
OR prs_perslid_oslogin IS NULL);
v_count NUMBER;
v_aanduiding VARCHAR2(100);
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count > 3000 THEN
-- generic update
aaxx.fac_gen_update_perslid (p_import_key, 'LOGIN', 1, '');
FOR rec IN c_del
LOOP
BEGIN
v_aanduiding := rec.prs_perslid_naam||' ('
|| rec.prs_perslid_oslogin||'/'||rec.prs_perslid_oslogin2||') ';
UPDATE prs_perslid p
SET prs_perslid_oslogin = NULL,
prs_perslid_oslogin2 = NULL
WHERE p.prs_perslid_key = rec.prs_perslid_key;
IF rec.verplichtingen = 0 THEN
UPDATE prs_perslid p
SET prs_perslid_verwijder = sysdate
WHERE p.prs_perslid_key = rec.prs_perslid_key;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || '- Persoon is verwijderd', '');
ELSE
UPDATE prs_perslid p
SET prs_perslid_naam = substr('Inactief ' || prs_perslid_naam, 1,60)
WHERE p.prs_perslid_key = rec.prs_perslid_key
AND p.prs_perslid_naam not like 'Inactief%';
fac.imp_writelog (p_import_key, 'I', v_aanduiding || '- Persoon is als Inactief gemarkeerd', '');
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij verwijderen persoon.'
);
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key, 'E', 'Te weinig records in personenbestand [' || v_count || ']', '');
END IF;
END;
/
BEGIN adm.systrackscript('$Workfile: aazc.sql $', '$Revision$', 0); END;
/
BEGIN fac.registercustversion('AAZC', 1); END;
BEGIN fac.registercustversion('AAZC', 2); END;
/
COMMIT;