FCLT#65380: Implementatie AkzoNobel Sassenheim en A'hem/A'dam naar Saas --> Personenimport inc contractors
svn path=/Customer/trunk/; revision=52296
This commit is contained in:
395
AKZO/AKZO.sql
395
AKZO/AKZO.sql
@@ -1040,34 +1040,391 @@ END;
|
||||
|
||||
CREATE OR REPLACE PROCEDURE akzo_update_perslid (p_import_key IN NUMBER)
|
||||
IS
|
||||
v_count NUMBER;
|
||||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||||
|
||||
-- als er geen mailadres betreft het een contractor en voegen we toe obv persnr
|
||||
CURSOR c_insert IS
|
||||
SELECT *
|
||||
FROM fac_imp_perslid i
|
||||
WHERE i.prs_perslid_email IS NULL;
|
||||
v_errormsg VARCHAR2 (1000);
|
||||
v_errorhint VARCHAR2 (1000);
|
||||
oracle_err_num NUMBER;
|
||||
oracle_err_mes VARCHAR2 (200);
|
||||
v_aanduiding VARCHAR2 (200);
|
||||
v_sleutelkolom VARCHAR2 (200);
|
||||
|
||||
-- met wel een mailadres kunnen we vergelijken en dus ook bijwerken
|
||||
CURSOR c_upsert IS
|
||||
v_count NUMBER (10);
|
||||
v_ongeldig NUMBER (1);
|
||||
v_count_update NUMBER (10);
|
||||
v_count_error NUMBER (10);
|
||||
v_count_tot NUMBER (10);
|
||||
v_wpcount_error NUMBER (10);
|
||||
|
||||
--
|
||||
v_perslid_key NUMBER (10);
|
||||
v_perslid_nr VARCHAR2 (100);
|
||||
v_afdeling_key NUMBER (10);
|
||||
v_srtperslid_key NUMBER (10);
|
||||
v_prs_perslid_naam VARCHAR2 (200);
|
||||
v_prs_perslid_tussenvoegsel VARCHAR2 (200);
|
||||
v_kostenplaats_nr VARCHAR2 (100);
|
||||
|
||||
v_locatie_key NUMBER (10);
|
||||
v_gebouw_key NUMBER (10);
|
||||
v_verdieping_key NUMBER (10);
|
||||
v_ruimte_key NUMBER (10);
|
||||
v_space VARCHAR2 (1);
|
||||
|
||||
--- import van perslid
|
||||
CURSOR c_imp_perslid IS
|
||||
SELECT *
|
||||
FROM fac_imp_perslid i
|
||||
WHERE i.prs_perslid_email IS NOT NULL;
|
||||
|
||||
FROM fac_imp_perslid ip;
|
||||
BEGIN
|
||||
FOR rec IN c_insert
|
||||
v_count_update := 0;
|
||||
v_count_tot := 0;
|
||||
v_count_error := 0;
|
||||
v_wpcount_error := 0;
|
||||
|
||||
SELECT COUNT (*) INTO v_count FROM fac_imp_perslid;
|
||||
|
||||
IF v_count < 500
|
||||
THEN
|
||||
fac.imp_writelog (
|
||||
p_import_key,
|
||||
'E',
|
||||
'Het aantal te importeren personen is te klein ('
|
||||
|| TO_CHAR (v_count)
|
||||
|| ')',
|
||||
'Zie Specificatie');
|
||||
RETURN;
|
||||
END IF;
|
||||
|
||||
----------------------------------------------------
|
||||
--- BEGIN STANDAARD IMPORT -------------------------
|
||||
----------------------------------------------------
|
||||
FOR rec IN c_imp_perslid
|
||||
LOOP
|
||||
BEGIN
|
||||
prs.update_perslid (p_import_key, 'NR', NULL);
|
||||
v_aanduiding := '';
|
||||
v_errormsg := '';
|
||||
v_errorhint := '';
|
||||
v_count_tot := v_count_tot + 1;
|
||||
|
||||
v_aanduiding :=
|
||||
rec.prs_perslid_naam
|
||||
|| '|'
|
||||
|| rec.prs_perslid_voornaam
|
||||
|| '| ';
|
||||
v_errormsg := '';
|
||||
|
||||
v_errorhint := 'Fout bij bepalen functie';
|
||||
|
||||
SELECT prs_srtperslid_key
|
||||
INTO v_srtperslid_key
|
||||
FROM prs_srtperslid
|
||||
WHERE prs_srtperslid_verwijder IS NULL
|
||||
AND UPPER (prs_srtperslid_omschrijving) =
|
||||
UPPER (rec.prs_srtperslid_omschrijving);
|
||||
|
||||
IF rec.prs_perslid_email IS NOT NULL
|
||||
THEN
|
||||
v_sleutelkolom := 'EMAIL';
|
||||
ELSE
|
||||
v_sleutelkolom := 'NR';
|
||||
END IF;
|
||||
|
||||
v_errorhint :=
|
||||
'Afdeling niet gevonden [' || rec.prs_afdeling_naam || ']';
|
||||
|
||||
SELECT a.prs_afdeling_key
|
||||
INTO v_afdeling_key
|
||||
FROM prs_v_aanwezigafdeling_boom b, prs_afdeling a
|
||||
WHERE UPPER (a.prs_afdeling_naam) =
|
||||
UPPER (rec.prs_afdeling_naam)
|
||||
AND a.prs_afdeling_verwijder IS NULL
|
||||
AND a.prs_afdeling_key = b.prs_afdeling_key;
|
||||
|
||||
v_space := '';
|
||||
|
||||
-- kijk hoe we met partnernamen moeten omgaan:
|
||||
IF rec.prs_perslid_naamgebruik_code = 0
|
||||
THEN
|
||||
-- normaal gebruik van naam. Eigen naam wordt gebruikt
|
||||
v_prs_perslid_naam := rec.prs_perslid_naam;
|
||||
v_prs_perslid_tussenvoegsel := rec.prs_perslid_tussenvoegsel;
|
||||
ELSIF rec.prs_perslid_naamgebruik_code = 1
|
||||
THEN
|
||||
-- personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
|
||||
IF rec.prs_perslid_tussenvoegsel IS NOT NULL
|
||||
THEN
|
||||
v_space := ' ';
|
||||
END IF;
|
||||
|
||||
v_prs_perslid_naam :=
|
||||
rec.prs_perslid_partner_naam
|
||||
|| ' - '
|
||||
|| rec.prs_perslid_tussenvoegsel
|
||||
|| v_space
|
||||
|| rec.prs_perslid_naam;
|
||||
v_prs_perslid_tussenvoegsel :=
|
||||
rec.prs_perslid_partner_tussenv;
|
||||
ELSIF rec.prs_perslid_naamgebruik_code = 2
|
||||
THEN
|
||||
-- personen die de geboortenaam van de partner willen gebruiken
|
||||
v_prs_perslid_naam := rec.prs_perslid_partner_naam;
|
||||
v_prs_perslid_tussenvoegsel :=
|
||||
rec.prs_perslid_partner_tussenv;
|
||||
ELSIF rec.prs_perslid_naamgebruik_code = 3
|
||||
THEN
|
||||
-- personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
|
||||
IF rec.prs_perslid_partner_tussenv IS NOT NULL
|
||||
THEN
|
||||
v_space := ' ';
|
||||
END IF;
|
||||
|
||||
v_prs_perslid_naam :=
|
||||
rec.prs_perslid_naam
|
||||
|| ' - '
|
||||
|| rec.prs_perslid_partner_tussenv
|
||||
|| v_space
|
||||
|| rec.prs_perslid_partner_naam;
|
||||
v_prs_perslid_tussenvoegsel := rec.prs_perslid_tussenvoegsel;
|
||||
END IF;
|
||||
|
||||
IF LENGTH (v_prs_perslid_naam) > 60
|
||||
THEN
|
||||
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 60);
|
||||
fac.imp_writelog (
|
||||
p_import_key,
|
||||
'W',
|
||||
rec.prs_perslid_naam
|
||||
|| '|'
|
||||
|| rec.prs_perslid_voornaam
|
||||
|| '| '
|
||||
|| 'Samengestelde achternaam is te lang',
|
||||
'Aanduiding wordt afgebroken tot ['
|
||||
|| v_prs_perslid_naam
|
||||
|| ']');
|
||||
END IF;
|
||||
|
||||
-- v_sleutelkolom
|
||||
-- NR = prs_perslid_nr
|
||||
-- LOGIN = prs_perslid_oslogin
|
||||
v_errorhint := 'Kijken of de persoon al bestaat';
|
||||
|
||||
SELECT MAX (prs_perslid_key), COUNT (*)
|
||||
INTO v_perslid_key, v_count
|
||||
FROM prs_perslid
|
||||
WHERE prs_perslid_verwijder IS NULL
|
||||
AND ( ( UPPER (v_sleutelkolom) = 'NR'
|
||||
AND UPPER (prs_perslid_nr) =
|
||||
UPPER (rec.prs_perslid_nr))
|
||||
OR ( UPPER (v_sleutelkolom) = 'EMAIL'
|
||||
AND UPPER (prs_perslid_oslogin) =
|
||||
UPPER (rec.prs_perslid_oslogin)));
|
||||
|
||||
IF (v_count = 0)
|
||||
THEN
|
||||
v_errorhint := 'Fout bij toevoegen persoon';
|
||||
|
||||
INSERT INTO prs_perslid (prs_perslid_module,
|
||||
prs_srtperslid_key,
|
||||
prs_afdeling_key,
|
||||
prs_perslid_naam,
|
||||
prs_perslid_voorletters,
|
||||
prs_perslid_tussenvoegsel,
|
||||
prs_perslid_voornaam,
|
||||
prs_perslid_telefoonnr,
|
||||
prs_perslid_mobiel,
|
||||
prs_perslid_email,
|
||||
prs_perslid_nr,
|
||||
prs_perslid_geslacht,
|
||||
prs_perslid_titel,
|
||||
prs_perslid_dienstverband,
|
||||
prs_perslid_oslogin,
|
||||
prs_perslid_apikey)
|
||||
VALUES ('PRS',
|
||||
v_srtperslid_key,
|
||||
v_afdeling_key,
|
||||
v_prs_perslid_naam,
|
||||
rec.prs_perslid_voorletters,
|
||||
v_prs_perslid_tussenvoegsel,
|
||||
rec.prs_perslid_voornaam,
|
||||
rec.prs_perslid_telefoonnr,
|
||||
rec.prs_perslid_mobiel,
|
||||
rec.prs_perslid_email,
|
||||
rec.prs_perslid_nr,
|
||||
rec.prs_perslid_geslacht,
|
||||
rec.prs_perslid_titel,
|
||||
rec.prs_perslid_dienstverband,
|
||||
rec.prs_perslid_oslogin,
|
||||
rec.prs_perslid_apikey)
|
||||
RETURNING prs_perslid_key
|
||||
INTO v_perslid_key;
|
||||
|
||||
prs.setpassword (v_perslid_key, rec.prs_perslid_wachtwoord);
|
||||
|
||||
COMMIT;
|
||||
v_count_update := v_count_update + 1;
|
||||
ELSIF v_count = 1
|
||||
THEN
|
||||
UPDATE prs_perslid
|
||||
SET prs_srtperslid_key = v_srtperslid_key,
|
||||
prs_afdeling_key = v_afdeling_key,
|
||||
prs_perslid_naam = v_prs_perslid_naam,
|
||||
prs_perslid_voorletters = rec.prs_perslid_voorletters,
|
||||
prs_perslid_tussenvoegsel =
|
||||
v_prs_perslid_tussenvoegsel,
|
||||
prs_perslid_voornaam = rec.prs_perslid_voornaam,
|
||||
prs_perslid_nr = rec.prs_perslid_nr,
|
||||
prs_perslid_dienstverband =
|
||||
rec.prs_perslid_dienstverband,
|
||||
prs_perslid_geslacht = rec.prs_perslid_geslacht,
|
||||
prs_perslid_titel = rec.prs_perslid_titel,
|
||||
prs_perslid_telefoonnr = rec.prs_perslid_telefoonnr,
|
||||
prs_perslid_mobiel = rec.prs_perslid_mobiel,
|
||||
prs_perslid_email = rec.prs_perslid_email,
|
||||
prs_perslid_oslogin = rec.prs_perslid_oslogin,
|
||||
prs_perslid_apikey = rec.prs_perslid_apikey
|
||||
WHERE prs_perslid_key = v_perslid_key;
|
||||
|
||||
IF rec.prs_perslid_wachtwoord IS NOT NULL
|
||||
THEN
|
||||
prs.setpassword (v_perslid_key,
|
||||
rec.prs_perslid_wachtwoord);
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
|
||||
UPDATE fac_imp_perslid
|
||||
SET prs_perslid_key = v_perslid_key
|
||||
WHERE fac_import_key = rec.fac_import_key
|
||||
AND fac_imp_file_index = rec.fac_imp_file_index;
|
||||
|
||||
COMMIT; -- persoon in ieder geval toegevoegd.
|
||||
|
||||
v_aanduiding :=
|
||||
rec.prs_perslid_nr
|
||||
|| '|'
|
||||
|| rec.prs_perslid_naam
|
||||
|| '|'
|
||||
|| rec.prs_perslid_voornaam
|
||||
|| '|'
|
||||
|| rec.alg_locatie_code
|
||||
|| '|'
|
||||
|| rec.alg_gebouw_code
|
||||
|| '|'
|
||||
|| rec.alg_verdieping_volgnr
|
||||
|| '|'
|
||||
|| rec.alg_ruimte_nr
|
||||
|| ' - ';
|
||||
|
||||
v_locatie_key := NULL;
|
||||
v_gebouw_key := NULL;
|
||||
v_verdieping_key := NULL;
|
||||
v_ruimte_key := NULL;
|
||||
|
||||
v_errorhint := 'Fout bij bepalen locatie';
|
||||
|
||||
SELECT MAX (alg_locatie_key)
|
||||
INTO v_locatie_key
|
||||
FROM alg_v_aanweziglocatie
|
||||
WHERE UPPER (alg_locatie_code) = UPPER (rec.alg_locatie_code);
|
||||
|
||||
v_errorhint := 'Fout bij bepalen gebouw';
|
||||
|
||||
SELECT MAX (alg_gebouw_key)
|
||||
INTO v_gebouw_key
|
||||
FROM alg_v_aanweziggebouw
|
||||
WHERE UPPER (alg_gebouw_code) = UPPER (rec.alg_gebouw_code)
|
||||
AND alg_locatie_key = v_locatie_key;
|
||||
|
||||
v_errorhint := 'Fout bij bepalen verdieping';
|
||||
|
||||
SELECT MAX (alg_verdieping_key)
|
||||
INTO v_verdieping_key
|
||||
FROM alg_v_aanwezigverdieping
|
||||
WHERE UPPER (alg_verdieping_volgnr) =
|
||||
UPPER (rec.alg_verdieping_volgnr)
|
||||
AND alg_gebouw_key = v_gebouw_key;
|
||||
|
||||
v_errorhint := 'Fout bij bepalen beoogde ruimte';
|
||||
|
||||
SELECT MAX (alg_ruimte_key)
|
||||
INTO v_ruimte_key
|
||||
FROM alg_v_aanwezigruimte r
|
||||
WHERE r.alg_ruimte_upper_nr = UPPER (rec.alg_ruimte_nr)
|
||||
AND r.alg_verdieping_key = v_verdieping_key;
|
||||
|
||||
-- standaard ruimte moet door cust gedeelte van deFout bij bepalen beoogde ruimte import ingevuld worden.
|
||||
|
||||
-- als er een locatie ingevuld is willen we ook een ruimte vinden.
|
||||
IF v_ruimte_key IS NULL AND rec.alg_locatie_code IS NOT NULL
|
||||
THEN
|
||||
fac.imp_writelog (
|
||||
p_import_key,
|
||||
'W',
|
||||
v_aanduiding || ' Ruimte kan niet gevonden worden',
|
||||
'Controleer locatie,gebouw en verdieping');
|
||||
END IF;
|
||||
|
||||
-- fouten bij het bepalen van de werkplek worden als waarschuwing weergegeven.
|
||||
BEGIN
|
||||
v_errorhint := 'Fout bij het aanpassen van de werkplek';
|
||||
PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'A');
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
v_wpcount_error := v_wpcount_error + 1;
|
||||
oracle_err_num := SQLCODE;
|
||||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||||
v_errormsg :=
|
||||
' (ORACLE error number = <'
|
||||
|| ORACLE_err_num
|
||||
|| '> ORACLE error message = <'
|
||||
|| ORACLE_err_mes
|
||||
|| '>)';
|
||||
fac.imp_writelog (p_import_key,
|
||||
'W',
|
||||
v_aanduiding || v_errormsg,
|
||||
v_errorhint);
|
||||
END;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
v_count_error := v_count_error + 1;
|
||||
oracle_err_num := SQLCODE;
|
||||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||||
v_errormsg :=
|
||||
' (ORACLE error number = <'
|
||||
|| ORACLE_err_num
|
||||
|| '> ORACLE error message = <'
|
||||
|| ORACLE_err_mes
|
||||
|| '>)';
|
||||
fac.imp_writelog (p_import_key,
|
||||
'E',
|
||||
v_aanduiding || v_errormsg,
|
||||
v_errorhint);
|
||||
COMMIT; -- tbv logging
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
FOR rec IN c_upsert
|
||||
LOOP
|
||||
BEGIN
|
||||
prs.update_perslid (p_import_key, 'EMAIL', NULL);
|
||||
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),
|
||||
'');
|
||||
|
||||
fac.imp_writelog (
|
||||
p_import_key,
|
||||
'S',
|
||||
'Werkplek: verwerkte regels met foutmelding: '
|
||||
|| TO_CHAR (v_wpcount_error),
|
||||
'');
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user