diff --git a/HMOD/hmod.sql b/HMOD/hmod.sql index 25012e9c8..c32bd7a76 100644 --- a/HMOD/hmod.sql +++ b/HMOD/hmod.sql @@ -16,170 +16,6 @@ SET DEFINE OFF ------ 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: - ---- 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) AS @@ -432,6 +268,7 @@ CREATE OR REPLACE VIEW hmod_v_koffersysteem MOB, HIT, LAP_EN_SIM, + LAPT, TNC, TNC_OMSCHRIJVING, FACILITOR, @@ -455,6 +292,7 @@ AS mob, hit, lap_en_sim, + lapt, tnc, tnc_omschrijving, facilitor, @@ -713,6 +551,594 @@ BEGIN 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: + ---- 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 ------