HMOD#58494 -- Implementatie Humanitas Onder Dak - PRS-import

svn path=/Customer/trunk/; revision=45469
This commit is contained in:
Jos Migo
2020-01-17 10:12:33 +00:00
parent b34590a456
commit b185a9d7f8

View File

@@ -16,170 +16,6 @@ SET DEFINE OFF
------ payload begin ------ ------ payload begin ------
CREATE OR REPLACE PROCEDURE hmod_import_perslid (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
v_errorhint VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
v_errorhint := 'Generieke import';
-- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
prs.import_perslid (
p_import_key,
'1;2;3;4;5;6;7;8;9;11;10;20;0;0;0;13;14;15;0;17;16;18;19;12;0;0;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40',
'Locatiecode;Gebouwcode;Bouwlaagvolgnummer;Ruimtenummer;Werkplekvolgnummer;Omschrijving;Afdelingscode;Achternaam;Tussenvoegsel;Voorletters;Roepnaam;Geslacht;Telefoonnummer;Mobiel;Email;Functie;Personeelsnummer;Loginnaam;Password;Meisjesnaam;Brief aanhef;Formatieplaats;Basiskoffer;Functieomschrijving;token;mob;hit;lap+sim;lapt;Toegangsniveau;Facilitor;ADP;Absentiemanager;Regas;Checks;Accountview;Elvy;HodNet;Proactive%');
COMMIT;
UPDATE fac_imp_perslid
SET prs_perslid_geslacht =
CASE
WHEN prs_perslid_titel = 'Man' THEN 1
WHEN prs_perslid_titel = 'Vrouw' THEN 0
ELSE NULL
END,
prs_perslid_partner_naam = -- Meisjesnaam via veld Partnernaam omdat er teveel kenmerkvelden zijn... Leeg maken als geen vrouw
CASE
WHEN prs_perslid_titel = 'Man' THEN ''
ELSE prs_perslid_partner_naam
END,
prs_kenmerk20 = -- Afwijkend = keuzelijst met waarde Ja(21) en Nee(22)
CASE
WHEN prs_kenmerk20 = 'j' OR prs_kenmerk20 = 'J' OR prs_kenmerk20 = 'ja' OR prs_kenmerk20 = 'Ja' THEN '21'
ELSE '22'
END
;
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.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Inleesproces personen afgebroken!');
END hmod_import_perslid;
/
CREATE OR REPLACE PROCEDURE hmod_update_perslid (p_import_key IN NUMBER)
IS
CURSOR c_flex
IS
-- Er zijn in de hmod-import 21 kenmerken terwijl we er in fac_imp_perslid 20 ter beschikking hebben. Het eerste kenmerk 'meisjesnaam' staat daarom op prs_perslid_partner_naam
SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam,i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3,i.prs_kenmerk4,i.prs_kenmerk5,i.prs_kenmerk6,i.prs_kenmerk7,i.prs_kenmerk8,i.prs_kenmerk9,i.prs_kenmerk10,i.prs_kenmerk11,i.prs_kenmerk12,i.prs_kenmerk13,i.prs_kenmerk14,i.prs_kenmerk15,i.prs_kenmerk16,i.prs_kenmerk17,i.prs_kenmerk18,i.prs_kenmerk19,i.prs_kenmerk20
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_nr = i.prs_perslid_nr
ORDER BY 2;
-- Let op! Personen die niet meer in dienst zijn -> niet in fac_imp_perslid!
-- Dubbele perslid_nr? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
-- Voor HMOD: <NOG VASTSTELLEN! HOE/WAT !!!>
---- Indien er clienten in Faciltior zitten, deze sowieso uitsluiten van verwijderactie
---- Handmatig aangemaakte persoon 'Beumer applicatiebeheer' en 'Claudia ten Cate' + ......?
---- Omdat er via HRM-workflow wordt gewerkt, beste om dit via kenmerkveld te laten lopen met CHECK ADP-import
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_nr IS NOT NULL
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid i
WHERE UPPER (i.prs_perslid_nr) = UPPER (p.prs_perslid_nr))
ORDER BY 2;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000) := '';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_count_tot NUMBER;
v_count_new NUMBER;
BEGIN
-- Generieke update.
v_errorhint:='Fout in generieke update';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count < 1
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;
-- Generieke update.
prs.update_perslid (p_import_key, 'NR', 'NULL');
-- Update flexvelden.
FOR rec IN c_flex
LOOP
v_errorhint:='Fout bijwerken meisjes';
PRS.upsertkenmerk (1023, rec.prs_perslid_key, rec.prs_perslid_partner_naam); -- Meisjesnaam
v_errorhint:='Fout bijwerken briefaanhef';
PRS.upsertkenmerk (1024, rec.prs_perslid_key, rec.prs_kenmerk1); -- Brief aanhef
v_errorhint:='Fout bijwerken formatieplaats';
PRS.upsertkenmerk (1025, rec.prs_perslid_key, rec.prs_kenmerk2); -- Formatieplaats
v_errorhint:='Fout bijwerken Basiskoffer';
PRS.upsertkenmerk (1028, rec.prs_perslid_key, rec.prs_kenmerk3); -- Basiskoffer
v_errorhint:='Fout bijwerken Functieomschrijving';
PRS.upsertkenmerk (1040, rec.prs_perslid_key, rec.prs_kenmerk4); -- Functieomschrijving
v_errorhint:='Fout bijwerken Token';
PRS.upsertkenmerk (1068, rec.prs_perslid_key, rec.prs_kenmerk5); -- Token, 5 , 1068
v_errorhint:='Fout bijwerken Mobiel';
PRS.upsertkenmerk (1067, rec.prs_perslid_key, rec.prs_kenmerk6); -- Mobiel 6 , 1067
v_errorhint:='Fout bijwerken Hit';
PRS.upsertkenmerk (1069, rec.prs_perslid_key, rec.prs_kenmerk7); -- Hit 7 , 1069
v_errorhint:='Fout bijwerken Lap+Sim';
PRS.upsertkenmerk (1063, rec.prs_perslid_key, rec.prs_kenmerk8); -- Lap+Sim 8 , 1063
v_errorhint:='Fout bijwerken Lapt';
PRS.upsertkenmerk (1065, rec.prs_perslid_key, rec.prs_kenmerk9); -- Lapt 9, 1065
v_errorhint:='Fout bijwerken Toegangsniveau';
PRS.upsertkenmerk (1061, rec.prs_perslid_key, rec.prs_kenmerk10); -- Toegangsniveau 10, 1061
v_errorhint:='Fout bijwerken Facilitor';
PRS.upsertkenmerk (1072, rec.prs_perslid_key, rec.prs_kenmerk11); -- Facilitor 11 , 1072
v_errorhint:='Fout bijwerken ADP';
PRS.upsertkenmerk (1073, rec.prs_perslid_key, rec.prs_kenmerk12); -- ADP 12 , 1073
v_errorhint:='Fout bijwerken Absentiemanager';
PRS.upsertkenmerk (1074, rec.prs_perslid_key, rec.prs_kenmerk13); -- Absentiemanager 13, 1074
v_errorhint:='Fout bijwerken Regas';
PRS.upsertkenmerk (1075, rec.prs_perslid_key, rec.prs_kenmerk14); -- Regas 14, 1075
v_errorhint:='Fout bijwerken Checks';
PRS.upsertkenmerk (1076, rec.prs_perslid_key, rec.prs_kenmerk15); -- Checks 15, 1076
v_errorhint:='Fout bijwerken Accountview';
PRS.upsertkenmerk (1077, rec.prs_perslid_key, rec.prs_kenmerk16); -- Accountview 16, 1077
v_errorhint:='Fout bijwerken Elvy';
PRS.upsertkenmerk (1078, rec.prs_perslid_key, rec.prs_kenmerk17); -- Elvy 17, 1078
v_errorhint:='Fout bijwerken HodNet';
PRS.upsertkenmerk (1079, rec.prs_perslid_key, rec.prs_kenmerk18); -- HodNet 18, 1079
v_errorhint:='Fout bijwerken Proactive';
PRS.upsertkenmerk (1080, rec.prs_perslid_key, rec.prs_kenmerk19); -- Proactive 19, 1080
v_errorhint:='Fout bijwerken Afwijkend';
PRS.upsertkenmerk (1081, rec.prs_perslid_key, rec.prs_kenmerk20); -- Afwijkend 20, 1081
END LOOP;
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
-- prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- Deze niet draaien voor HMOD ivm de workflow HRM die men in Facilitor uitvoert...?
-- wel vullen van een kenmerkveld ADP-import 1082
v_errorhint:='Fout bijwerken Check ADP-import';
PRS.upsertkenmerk (1082, rec.prs_perslid_key, 'Let op! Niet in ADP-import - ' || sysdate); -- Niet in import
END LOOP;
COMMIT;
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.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Importproces personen afgebroken!');
END hmod_update_perslid;
/
CREATE OR REPLACE PROCEDURE hmod_import_koffer (p_import_key IN NUMBER) CREATE OR REPLACE PROCEDURE hmod_import_koffer (p_import_key IN NUMBER)
AS AS
@@ -432,6 +268,7 @@ CREATE OR REPLACE VIEW hmod_v_koffersysteem
MOB, MOB,
HIT, HIT,
LAP_EN_SIM, LAP_EN_SIM,
LAPT,
TNC, TNC,
TNC_OMSCHRIJVING, TNC_OMSCHRIJVING,
FACILITOR, FACILITOR,
@@ -455,6 +292,7 @@ AS
mob, mob,
hit, hit,
lap_en_sim, lap_en_sim,
lapt,
tnc, tnc,
tnc_omschrijving, tnc_omschrijving,
facilitor, facilitor,
@@ -713,6 +551,594 @@ BEGIN
END; END;
/ /
-- Rapport van de import-personen ADP.
---- Zowel te gebruiken bij LEZEN als bij VERWERKEN
---- Deze view wordt tevens gebruikt als cursor voor de import-proceduren
CREATE OR REPLACE VIEW hmod_v_prsimport
(
PRS_PERSLID_KEY,
PRS_PERSLID_NR,
PRS_PERSLID_NAAM,
PRS_DATUM_UITDIENST,
PRS_STATUS,
FORMATIEPLAATS_HUIDIG,
FORMATIEPLAATS_CSV,
TOKEN,
MOB,
HIT,
LAP_EN_SIM,
LAPT,
TNC,
TNC_OMSCHRIJVING,
FACILITOR,
ADP,
ABSENTIEMANAGER,
REGAS,
CHECKS,
ACCOUNTVIEW,
ELVY,
HODNET,
PROACTIVE,
OPMERKING_KOFFERSYSTEEM,
DATUM_GELEZEN,
DATUM_VERWERKT
)
AS -- Bestaande personen die ook weer in deze PRS-import zitten
SELECT basis.prs_perslid_key,
basis.prs_perslid_nr,
basis.prs_perslid_naam,
basis.DatumUitDienst,
CASE
WHEN d.datum_verwerkt is not null THEN i.prs_perslid_partner_naam -- Deze vul ik tijdens de import met de prs_status
WHEN d.datum_verwerkt is null and k.code is null THEN 'Basis - Fout'
ELSE basis.koffersysteem_status
END as prs_status,
COALESCE(basis.formatieplaats_huidig,'nvt'),
COALESCE (k.code, i.prs_kenmerk3 || ' LET OP! formatieplaats uit CSV staat niet in actueel koffersysteem') AS formatieplaats_CSV,
k.token,
k.mob,
k.hit,
k.lap_en_sim,
k.lapt,
k.tnc,
k.tnc_omschrijving,
k.facilitor,
k.adp,
k.absentiemanager,
k.regas,
k.checks,
k.accountview,
k.elvy,
k.hodnet,
k.proactive,
k.opmerking,
d.datum_gelezen,
d.datum_verwerkt
FROM (SELECT p.prs_perslid_key,
p.prs_perslid_nr,
p.prs_perslid_naam,
a.prs_bedrijf_key,
b.prs_bedrijf_naam,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1025
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS formatieplaats_huidig,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1100
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS DatumUitDienst,
(SELECT kd.fac_usrdata_omschr
FROM prs_kenmerklink k, fac_usrdata kd
WHERE k.prs_link_key = p.prs_perslid_key
AND k.prs_kenmerk_key = 1081 -- Kenmerkveld Status
AND k.prs_kenmerklink_niveau = 'P'
AND k.prs_kenmerklink_verwijder IS NULL
AND k.prs_kenmerklink_waarde = kd.fac_usrdata_key
AND kd.fac_usrtab_key = 82) as Koffersysteem_status
FROM prs_perslid p,
prs_v_afdeling a,
prs_bedrijf b
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND p.prs_perslid_verwijder IS NULL) basis,
fac_imp_perslid i,
hmod_imp_koffersysteem k,
(SELECT i.fac_import_key,
MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
FROM fac_import f, fac_imp_perslid i
WHERE f.fac_import_key = i.fac_import_key AND f.fac_import_app_key = 41
GROUP BY i.fac_import_key,
f.fac_import_datum_gelezen,
f.fac_import_datum_verwerkt) d
WHERE basis.prs_perslid_nr = i.prs_perslid_nr
AND i.prs_kenmerk3 = k.code (+)
AND basis.prs_bedrijf_key = 41 -- Alleen voor Humanitas onder Dak mensen
UNION ALL -- NIEUWE PERSONEN die nog niet in BEDRIJF HUMANITAS zitten en die dus bij import toegevoegd gaan worden en met juiste koffersysteem gevuld moet worden...
---- Nieuwe personen zitten bij INLEZEN aan deze kant (omdat ze nog geen prs_perslid_key hebben). Bij verwerken hebben ze dit wel en dan zitten de NIEUWE personen in bovenstaande union..
SELECT -1 AS prs_perslid_key,
i.prs_perslid_nr,
i.prs_perslid_naam,
'' as DatumUitDienst,
CASE
WHEN k.code is null THEN 'Nieuw - Fout'
ELSE 'Nieuw'
END as prs_status,
'nvt' AS formatieplaats_huidig,
COALESCE (k.code, i.prs_kenmerk3 || ' LET OP! formatieplaats uit CSV staat niet in actueel koffersysteem') AS formatieplaats_CSV,
k.token,
k.mob,
k.hit,
k.lap_en_sim,
k.lapt,
k.tnc,
k.tnc_omschrijving,
k.facilitor,
k.adp,
k.absentiemanager,
k.regas,
k.checks,
k.accountview,
k.elvy,
k.hodnet,
k.proactive,
k.opmerking,
d.datum_gelezen,
d.datum_verwerkt
FROM fac_imp_perslid i, hmod_imp_koffersysteem k,
(SELECT i.fac_import_key,
MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
FROM fac_import f, fac_imp_perslid i
WHERE f.fac_import_key = i.fac_import_key AND f.fac_import_app_key = 41
GROUP BY i.fac_import_key,
f.fac_import_datum_gelezen,
f.fac_import_datum_verwerkt) d
WHERE i.prs_kenmerk3 = k.code(+)
AND i.fac_import_key = d.fac_import_key
AND UPPER(i.prs_perslid_nr) NOT IN
(SELECT UPPER(p.prs_perslid_nr)
FROM prs_perslid p,
prs_bedrijf b,
prs_v_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND p.prs_perslid_verwijder IS NULL
AND b.prs_bedrijf_key = 41 -- Humanitas onder Dak
)
UNION ALL -- Alle HUMANITAS medewerkers die wel in Facilitor staan, maar niet in CSV-import zitten - Indien nodig handmatig te verwijderen
SELECT basis.prs_perslid_key,
basis.prs_perslid_nr,
basis.prs_perslid_naam,
basis.DatumUitDienst,
'Verwijderen' AS prs_status,
basis.formatieplaats_huidig,
'nvt' AS formatieplaats_CSV,
k.token,
k.mob,
k.hit,
k.lap_en_sim,
k.lapt,
k.tnc,
k.tnc_omschrijving,
k.facilitor,
k.adp,
k.absentiemanager,
k.regas,
k.checks,
k.accountview,
k.elvy,
k.hodnet,
k.proactive,
k.opmerking,
d.datum_gelezen,
d.datum_verwerkt
FROM (SELECT p.prs_perslid_key,
p.prs_perslid_nr,
p.prs_perslid_naam,
a.prs_bedrijf_key,
b.prs_bedrijf_naam,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1025
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS formatieplaats_huidig,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1100
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS DatumUitDienst,
(SELECT kd.fac_usrdata_omschr
FROM prs_kenmerklink k, fac_usrdata kd
WHERE k.prs_link_key = p.prs_perslid_key
AND k.prs_kenmerk_key = 1081 -- Kenmerkveld Status
AND k.prs_kenmerklink_niveau = 'P'
AND k.prs_kenmerklink_verwijder IS NULL
AND k.prs_kenmerklink_waarde = kd.fac_usrdata_key
AND kd.fac_usrtab_key = 82) as Koffersysteem_status
FROM prs_perslid p,
prs_v_afdeling a,
prs_bedrijf b
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 41
AND p.prs_perslid_verwijder IS NULL) basis,
hmod_imp_koffersysteem k,
( SELECT i.fac_import_key,
MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
FROM fac_import f, fac_imp_perslid i
WHERE f.fac_import_key = i.fac_import_key
AND f.fac_import_app_key = 41
GROUP BY i.fac_import_key,
f.fac_import_datum_gelezen,
f.fac_import_datum_verwerkt) d
WHERE basis.formatieplaats_huidig = k.code(+)
AND basis.prs_perslid_nr NOT IN (SELECT i.prs_perslid_nr
FROM fac_imp_perslid i) ;
CREATE OR REPLACE PROCEDURE hmod_import_perslid (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
v_errorhint VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000);
v_count NUMBER;
v_count_leeg NUMBER;
v_count_fout NUMBER;
v_count_nieuw NUMBER;
v_count_verwijder NUMBER;
CURSOR c -- Alle medewerkers HUMANITAS die in aangeleverde ADP-personen-bestand zitten
IS
SELECT prs_perslid_key,
prs_perslid_nr,
prs_status,
formatieplaats_huidig,
token,
mob,
hit,
lap_en_sim,
lapt,
tnc,
tnc_omschrijving,
facilitor,
adp,
absentiemanager,
regas,
checks,
accountview,
elvy,
hodnet,
proactive
FROM
hmod_v_prsimport WHERE instr(prs_status,'Verwijderen') = 0 and prs_status is not null ;
BEGIN
v_errorhint := 'Generieke import';
-- Standaard Import. De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
prs.import_perslid (
p_import_key,
'1;0;0;0;0;0;2;3;4;6;5;0;0;0;0;0;0;8;0;10;9;11;0;7;0;0;12;13;14;15;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0',
'Locatiecode;Afdelingscode;Achternaam;Tussenvoegsel;Voorletters;Roepnaam;Geslacht;Email;Functie;Personeelsnummer;Loginnaam;Meisjesnaam;Brief aanhef;Formatieplaats;Basiskoffer;Functieomschrijving%');
-- DEF: 'Locatiecode;Afdelingscode;Achternaam;Tussenvoegsel;Voorletters;Roepnaam;Geslacht;Email;Functie;Personeelsnummer;Loginnaam;Meisjesnaam;Brief aanhef;Formatieplaats;Basiskoffer;Functieomschrijving'
----- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
COMMIT;
FOR rec IN c
LOOP
BEGIN
-- Koffersysteem-kenmerken vullen
IF rec.prs_status = 'Basis' or rec.prs_status = 'Nieuw' -- Dan alle koffersysteemvelden naar personenkaart wegschrijven...
THEN
UPDATE fac_imp_perslid p
SET prs_kenmerk6 = rec.token, -- Token
prs_kenmerk7 = rec.mob, -- Mobiel
prs_kenmerk8 = rec.hit, -- Hit
prs_kenmerk9 = rec.lap_en_sim, -- Lap+Sim
prs_kenmerk10 = rec.lapt, -- Lapt
prs_kenmerk11 = rec.tnc, -- Toegangsniveau
prs_kenmerk12 = rec.facilitor, -- Facilitor
prs_kenmerk13 = rec.adp, -- ADP
prs_kenmerk14 = rec.absentiemanager, -- Absentiemanager
prs_kenmerk15 = rec.regas, -- Regas
prs_kenmerk16 = rec.checks, -- Checks
prs_kenmerk17 = rec.accountview, -- Accountview
prs_kenmerk18 = rec.elvy, -- Elvy
prs_kenmerk19 = rec.hodnet, -- HodNet
prs_kenmerk20 = rec.proactive -- Proactive
WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
END IF;
-- De prs_status (= status voor deze import) ook wegschrijven in fac_imp_perslid.
---- Om updateprocedure mee te sturen... + om rapport import prs goed mee te vullen..
---- Omdat er voor koffersysteem al 20 kenmerken gevuld worden, moet ik hier ander veld voor (mis)bruiken.
UPDATE fac_imp_perslid p
SET prs_perslid_partner_naam = rec.prs_status -- Partner_naam voor misbruiken. Wordt in standaard update niet gebruikt (omdat PRS_PERSLID_NAAMGEBRUIK_CODE op 0 meegaat..)
WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
END;
END LOOP;
BEGIN
v_errormsg := 'Checks op importbestand ';
v_aanduiding := 'Raadpleeg rapport en pas csv-bestand aan en lees opnieuw in';
v_count := 0;
v_count_leeg:=0;
v_count_fout := 0;
v_count_nieuw := 0;
v_count_verwijder :=0;
-- Nog even alles tellen. NOG NAGAAN/AFSPREKEN wanneer de import moet doorlopen en wanneer men het eerst wil raadplegen..
SELECT count (*) INTO v_count FROM hmod_v_prsimport;
SELECT count (*) INTO v_count_nieuw FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Nieuw') > 0 ;
SELECT count (*) INTO v_count_fout FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Fout') > 0 ;
SELECT count (*) INTO v_count_verwijder FROM hmod_v_prsimport WHERE INSTR (prs_status, 'Verwijderen') > 0 ;
SELECT count (*) INTO v_count_leeg FROM fac_imp_perslid WHERE prs_perslid_partner_naam is null ;
IF v_count_leeg > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal personen zonder import-status is: ' || v_count_leeg,
'ACTIE: ' || v_aanduiding);
END IF;
IF v_count_fout > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal personen zonder gekoppelde formatieplaats is: ' || v_count_fout,
'ACTIE: ' || v_aanduiding);
END IF;
IF v_count_verwijder > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal te verwijderen personen is: '|| v_count_verwijder,
'Ter info');
END IF;
IF v_count_nieuw > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal nieuw in te lezen personen is: '|| v_count_nieuw,
'Ter info');
END IF;
IF v_count > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal totaal te muteren personen is: '|| v_count,
'Ter info');
END IF;
END;
-- Nog wat updates uitvoeren op tussentabel...
UPDATE fac_imp_perslid
SET prs_perslid_geslacht =
CASE
WHEN prs_perslid_titel = 'Man' THEN 1
WHEN prs_perslid_titel = 'Vrouw' THEN 0
ELSE NULL
END,
prs_kenmerk1 = -- Meisjesnaam leegmaken indien man
CASE
WHEN prs_perslid_titel = 'Man' THEN ''
ELSE prs_kenmerk1
END
;
-- Titel kan nu leeggemaakt worden..
UPDATE fac_imp_perslid
SET prs_perslid_titel = '' ;
-- Nog aanvullen gebouw-string... = standard format die dus zo gehandhaafd moet worden = G, 0 '_'
UPDATE fac_imp_perslid
SET alg_gebouw_code = 'G', alg_verdieping_volgnr = '0', alg_ruimte_nr = '_'
WHERE alg_locatie_code is not null ;
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.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Inleesproces personen afgebroken!');
END hmod_import_perslid;
/
CREATE OR REPLACE PROCEDURE hmod_update_perslid (p_import_key IN NUMBER)
IS
CURSOR c_flex -- Alle records pakken. O.a. voor updaten van de algemene flex-kenmerkvelden
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam,i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3,i.prs_kenmerk4,i.prs_kenmerk5
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_nr = i.prs_perslid_nr
ORDER BY 2;
CURSOR c_flex_koffer -- De flexkenmerken koffersysteem - alleen updaten voor die gevuld zijn
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam, i.prs_kenmerk6,i.prs_kenmerk7,i.prs_kenmerk8,i.prs_kenmerk9,i.prs_kenmerk10,i.prs_kenmerk11,i.prs_kenmerk12,i.prs_kenmerk13,i.prs_kenmerk14,i.prs_kenmerk15,i.prs_kenmerk16,i.prs_kenmerk17,i.prs_kenmerk18,i.prs_kenmerk19,i.prs_kenmerk20
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_nr = i.prs_perslid_nr AND (i.prs_perslid_partner_naam = 'Basis' or i.prs_perslid_partner_naam = 'Nieuw')
ORDER BY 2;
-- CURSOR DELETE
----- Goed standaard voorbeeld van STANDAARD DELETE bij Vesteda (VEST)
---- Voor HMOD: <NOG VASTSTELLEN! HOE/WAT !!!>
---- Indien er clienten in Faciltior zitten, deze sowieso uitsluiten van verwijderactie
---- Handmatig aangemaakte persoon 'Beumer applicatiebeheer' en 'Claudia ten Cate' + ......?
---- Omdat er via HRM-workflow wordt gewerkt, beste om dit via kenmerkveld te laten lopen met CHECK ADP-import
CURSOR c_del -- Alle medewerkers HUMANITAS die niet in aangeleverde ADP-personen-bestand zitten
IS
SELECT prs_perslid_key,
prs_perslid_nr,
prs_status
FROM
hmod_v_prsimport WHERE prs_status = 'Verwijderen' ;
v_errorhint VARCHAR2 (1000) := '';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000);
v_count NUMBER;
v_count_leeg NUMBER;
v_count_fout NUMBER;
v_count_nieuw NUMBER;
v_count_verwijder NUMBER;
BEGIN
-- Generieke update.
v_errorhint :='Fout in generieke update';
-- Nog even alles tellen. NOG NAGAAN/AFSPREKEN wanneer de import moet doorlopen en wanneer men het eerst wil raadplegen..
v_aanduiding := 'Import afgebroken (conform afspraak) - Zie rapport voor specificaties';
SELECT count (*) INTO v_count FROM hmod_v_prsimport;
SELECT count (*) INTO v_count_nieuw FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Nieuw') > 0 ;
SELECT count (*) INTO v_count_fout FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Fout') > 0 ;
SELECT count (*) INTO v_count_verwijder FROM hmod_v_prsimport WHERE INSTR (prs_status, 'Verwijderen') > 0 ;
SELECT count (*) INTO v_count_leeg FROM fac_imp_perslid WHERE prs_perslid_partner_naam is null ;
IF v_count < 10
THEN
fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')', v_aanduiding);
RETURN;
END IF;
IF v_count_fout > 3
THEN
fac.imp_writelog (p_import_key, 'E', 'Er zitten in import medewerkers met prs_status FOUT (' || TO_CHAR (v_count_fout) || ')', v_aanduiding);
RETURN;
END IF;
IF v_count_nieuw > 10 -- Bijvoorbeeld als alle personeelsnr's in csv zonder vooloopnull zijn... (NOG CHECKEN in KPN)
THEN
fac.imp_writelog (p_import_key, 'E', 'Er zijn teveel NIEUWE medewerkers in import, kan niet kloppen (' || TO_CHAR (v_count_nieuw) || ')', v_aanduiding);
RETURN;
END IF;
IF v_count_leeg > 0
THEN
fac.imp_writelog (p_import_key, 'E', 'Er zitten in import medewerkers ZONDER prs_status (' || TO_CHAR (v_count_leeg) || ')', v_aanduiding);
RETURN;
END IF;
-- Generieke update. NR - key personeelsnr - NULL is geen werkplekken verwijderd
prs.update_perslid (p_import_key, 'NR', 'NULL');
-- Update flexvelden algemeen
FOR rec IN c_flex
LOOP
BEGIN
v_aanduiding := 'Import prs - ' || TO_CHAR(sysdate, 'dd/mm/yyyy - hh:mi:ss') || ' - status: ' || rec.prs_perslid_partner_naam;
v_errorhint:='Fout bijwerken meisjes';
PRS.upsertkenmerk (1023, rec.prs_perslid_key, rec.prs_kenmerk1); -- Meisjesnaam
v_errorhint:='Fout bijwerken briefaanhef';
PRS.upsertkenmerk (1024, rec.prs_perslid_key, rec.prs_kenmerk2); -- Brief aanhef
v_errorhint:='Fout bijwerken formatieplaats';
PRS.upsertkenmerk (1025, rec.prs_perslid_key, rec.prs_kenmerk3); -- Formatieplaats
v_errorhint:='Fout bijwerken Basiskoffer';
PRS.upsertkenmerk (1028, rec.prs_perslid_key, rec.prs_kenmerk4); -- Basiskoffer
v_errorhint:='Fout bijwerken Functieomschrijving';
PRS.upsertkenmerk (1040, rec.prs_perslid_key, rec.prs_kenmerk5); -- Functieomschrijving
-- Nog paar kenmerkvelden bijwerken
DELETE FROM prs_kenmerklink
WHERE prs_link_key = rec.prs_perslid_key
AND prs_kenmerk_key = 1082 -- Veld om aan te geven dat persoon verwijderd kan worden. Voor de personen die meekomen in de fac_imp_perslid moet deze leeggemaakt worden...
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL;
IF rec.prs_perslid_partner_naam = 'Nieuw' -- Ook nog voor NIEUW - FOUT zetten ??
THEN
v_errorhint:='Nieuwe personen krijgen altijd basiskoffer mee';
PRS.upsertkenmerk (1081, rec.prs_perslid_key, '143'); -- Koffersysteem (status) = key 143
END IF;
fac.trackaction ('PRSUPD', rec.prs_perslid_key, 3,sysdate, v_aanduiding) ;
END;
END LOOP;
-- Update flexvelden Koffersysteem
FOR rec IN c_flex_koffer
LOOP
BEGIN
v_errorhint:='Fout bijwerken Token';
PRS.upsertkenmerk (1068, rec.prs_perslid_key, rec.prs_kenmerk6); -- Token, 6 , 1068
v_errorhint:='Fout bijwerken Mobiel';
PRS.upsertkenmerk (1067, rec.prs_perslid_key, rec.prs_kenmerk7); -- Mobiel 7 , 1067
v_errorhint:='Fout bijwerken Hit';
PRS.upsertkenmerk (1069, rec.prs_perslid_key, rec.prs_kenmerk8); -- Hit 8 , 1069
v_errorhint:='Fout bijwerken Lap+Sim';
PRS.upsertkenmerk (1063, rec.prs_perslid_key, rec.prs_kenmerk9); -- Lap+Sim 9 , 1063
v_errorhint:='Fout bijwerken Lapt';
PRS.upsertkenmerk (1065, rec.prs_perslid_key, rec.prs_kenmerk10); -- Lapt 10, 1065
v_errorhint:='Fout bijwerken Toegangsniveau';
PRS.upsertkenmerk (1061, rec.prs_perslid_key, rec.prs_kenmerk11); -- Toegangsniveau 11, 1061
v_errorhint:='Fout bijwerken Facilitor';
PRS.upsertkenmerk (1072, rec.prs_perslid_key, rec.prs_kenmerk12); -- Facilitor 12 , 1072
v_errorhint:='Fout bijwerken ADP';
PRS.upsertkenmerk (1073, rec.prs_perslid_key, rec.prs_kenmerk13); -- ADP 13 , 1073
v_errorhint:='Fout bijwerken Absentiemanager';
PRS.upsertkenmerk (1074, rec.prs_perslid_key, rec.prs_kenmerk14); -- Absentiemanager 14, 1074
v_errorhint:='Fout bijwerken Regas';
PRS.upsertkenmerk (1075, rec.prs_perslid_key, rec.prs_kenmerk15); -- Regas 15, 1075
v_errorhint:='Fout bijwerken Checks';
PRS.upsertkenmerk (1076, rec.prs_perslid_key, rec.prs_kenmerk16); -- Checks 15, 1076
v_errorhint:='Fout bijwerken Accountview';
PRS.upsertkenmerk (1077, rec.prs_perslid_key, rec.prs_kenmerk17); -- Accountview 17, 1077
v_errorhint:='Fout bijwerken Elvy';
PRS.upsertkenmerk (1078, rec.prs_perslid_key, rec.prs_kenmerk18); -- Elvy 18, 1078
v_errorhint:='Fout bijwerken HodNet';
PRS.upsertkenmerk (1079, rec.prs_perslid_key, rec.prs_kenmerk19); -- HodNet 19, 1079
v_errorhint:='Fout bijwerken Proactive';
PRS.upsertkenmerk (1080, rec.prs_perslid_key, rec.prs_kenmerk20); -- Proactive 20, 1080
END;
END LOOP;
FOR rec IN c_del
LOOP
-- prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- Deze niet draaien voor HMOD ivm de workflow HRM die men in Facilitor uitvoert...?
-- wel vullen van een kenmerkveld ADP-import 1082
BEGIN
v_aanduiding := 'Import prs - ' || TO_CHAR(sysdate, 'dd/mm/yyyy - hh:mi:ss') || ' - status: ' || rec.prs_status;
v_errorhint:='Bijwerken veld verwijderen';
PRS.upsertkenmerk (1082, rec.prs_perslid_key,'let op: verwijderen' );
fac.trackaction ('PRSUPD', rec.prs_perslid_key, 3,sysdate, v_aanduiding) ;
END;
END LOOP;
COMMIT;
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.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Importproces personen afgebroken!');
END hmod_update_perslid;
/
------ payload end ------ ------ payload end ------