STPH#54546 Personenkoppeling AFAS gerealiseerd, eerdere import perslid kan worden opgeruimd.

svn path=/Customer/trunk/; revision=44528
This commit is contained in:
Sander Schepers
2019-10-14 11:10:15 +00:00
parent aadf91c417
commit a528d7a94b

View File

@@ -16,176 +16,6 @@ WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
--
-- Personen import
--
CREATE OR REPLACE PROCEDURE stph_import_perslid (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
v_errorhint := 'Generieke update';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
prs.import_perslid (p_import_key,
'0;0;0;0;0;0;6;4;3;1;' ||
'2;0;0;0;0;10;0;8;0;5;' ||
'7;11;0;0;0;0;12;0;0;0;'||
'0;0;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0',
'Roepnaam;Voorletters;Tussenvoegsel;Achternaam;Persnr.;Afdnr.;Functie;Email;Mobile;Telefoon;Loginnaam;%'
);
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_errormsg, v_errorhint);
END stph_import_perslid;
/
CREATE OR REPLACE PROCEDURE stph_post_update_perslid (p_import_key IN NUMBER)
AS
v_kostenplaats_key_perslid NUMBER(10);
v_kostenplaats_key_afdeling NUMBER(10);
v_prs_afdeling_key NUMBER(10);
CURSOR c_perslid_kpn_kenmerk
IS
SELECT prs_perslid_nr, prs_kenmerk1, prs_perslid_naam, prs_afdeling_naam
FROM fac_imp_perslid;
BEGIN
FOR rc IN c_perslid_kpn_kenmerk
LOOP
BEGIN
-- Kostenplaats die als kenmerk is meegegeven bij de persoon
SELECT MAX(prs_kostenplaats_key)
INTO v_kostenplaats_key_perslid
FROM prs_kostenplaats
WHERE prs_kostenplaats_upper = UPPER(rc.prs_kenmerk1)
AND prs_kostenplaats_verwijder IS NULL;
IF v_kostenplaats_key_perslid IS NULL
THEN
-- Kostenplaats bij de persoon (vanuit AFAS) staat niet in Facilitor, persoon blijft aan de afdeling gekoppeld volgens AFAS (dus niet naar evt. 'fictieve' afdeling).
fac.imp_writelog (p_import_key,
'W',
'Kostenplaats van persoon' || rc.prs_perslid_nr || ' is NIET gevonden)',
'Naam:' || rc.prs_perslid_naam || ' / Afdeling: ' || rc.prs_afdeling_naam
);
ELSE
-- Kostenplaats record bij de persoon is gevonden,
-- Nu eerst de kostenplaats van de afdeling bepalen
SELECT MAX(a.prs_kostenplaats_key)
INTO v_kostenplaats_key_afdeling
FROM prs_afdeling a, prs_perslid p
WHERE p.prs_perslid_nr = rc.prs_perslid_nr
AND p.prs_perslid_verwijder IS NULL
AND a.prs_afdeling_key = p.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL;
-- Als deze afwijkt van de kostenplaats van de afdeling waar persoon onder valt, dan persoon verhuizen naar die fictieve afdeling
IF v_kostenplaats_key_afdeling IS NOT NULL
THEN
-- Afdeling heeft kostenplaats, nu vergelijken met die van persoon
-- Indien ongelijk, dan zoek de fictieve afdeling, want daar persoon aan koppelen.
IF v_kostenplaats_key_perslid <> v_kostenplaats_key_afdeling
THEN
-- Zoek de eerste afdeling (MAX) die kostenplaats van persoon heeft, daar gaat persoon onder vallen.
SELECT MAX(a.prs_afdeling_key)
INTO v_prs_afdeling_key
FROM prs_afdeling a
WHERE a.prs_kostenplaats_key = v_kostenplaats_key_perslid
AND a.prs_afdeling_verwijder IS NULL;
IF v_prs_afdeling_key IS NOT NULL
THEN
UPDATE prs_perslid p
SET p.prs_afdeling_key = v_prs_afdeling_key
WHERE p.prs_perslid_nr = rc.prs_perslid_nr
AND p.prs_perslid_verwijder IS NULL;
END IF;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'W',
'Post update bij persoon' || rc.prs_perslid_nr || ' is NIET volledig uitgevoerd )',
'Naam:' || rc.prs_perslid_naam || ' / Afdeling: ' || rc.prs_afdeling_naam
);
END;
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE stph_update_perslid (
p_import_key IN NUMBER
) IS
-- Alle personen verwijderen die niet meer in import bestand voorkomen.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_nr IS NOT NULL
AND i.prs_perslid_nr IS NULL
AND p.prs_perslid_verwijder IS NULL
ORDER BY 2;
v_count NUMBER;
BEGIN
-- generic update
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count < 300
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;
-- 'NR' betekent dat op basis van personeelsNummeR wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'NR', NULL);
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
STPH_post_update_perslid (p_import_key);
END stph_update_perslid;
/
--
-- BES-CATALOGUS IMPORT