diff --git a/GOKO/goko.sql b/GOKO/goko.sql index ca1c1e4b4..04b8517b4 100644 --- a/GOKO/goko.sql +++ b/GOKO/goko.sql @@ -723,7 +723,7 @@ AS AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL ) AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key ; - +/* NOG NETJES DROPPEN OUDE BEAUFORT - PROCEDURE CREATE OR REPLACE PROCEDURE goko_import_perslid (p_import_key IN NUMBER) AS oracle_err_num NUMBER; @@ -1594,6 +1594,859 @@ EXCEPTION v_errorhint); END goko_update_perslid; / +*/ + + +----------------------------------------------------- +--- HIERONDER NIEUWE AFAS IMPORT (2025-SEPT/OKT) ---- +---- ONDERHANDEN!!!!!! - ZIE TICKET 90623 ---- +----------------------------------------------------- + +CREATE OR REPLACE PROCEDURE goko_import_afasonline (p_import_key IN NUMBER) +AS + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_errormsg VARCHAR2 (400); + v_errorhint VARCHAR2 (400); + v_aantal_in_fclt NUMBER; + v_seq_of_columns VARCHAR (255); + v_seq_of_header VARCHAR (1000); + + -- overige variabelen + v_prs_afdeling_key NUMBER (10); + c_prs_bedrijf_key_goko NUMBER (10) := 41; + v_prs_perslid_rol_key NUMBER (10); + + CURSOR c_afd + IS + SELECT fac_imp_file_index, + prs_afdeling_naam, -- Afdelingscode + prs_kenmerk5 -- Afdeling omschrijving + FROM fac_imp_perslid + WHERE fac_import_key = p_import_key + ORDER BY fac_imp_file_index; + + CURSOR c_afd_log + IS + SELECT prs_kenmerk20 -- Nieuwe afdeling aanmaken - vullen we in dit kenmerk20 + FROM fac_imp_perslid + WHERE fac_import_key = p_import_key + AND prs_kenmerk20 IS NOT NULL + GROUP BY prs_kenmerk20; + + -- Op basis van de functie gaan we de facilitor-rol bepalen + ---- via deze rol gaan tijdens verwerkingsactie mensen juiste rechten geven + CURSOR c_rol + IS + SELECT fac_imp_file_index, prs_kenmerk6, prs_kenmerk7 + FROM fac_imp_perslid + WHERE fac_import_key = p_import_key + ORDER BY fac_imp_file_index ; + +BEGIN + -- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ; + v_errorhint := 'Delimiter goed zetten'; + + -- UPDATE fac_imp_file + -- SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';') + -- WHERE fac_import_key = p_import_key; + + -- Het aangeleverde bestand heeft aanhalingstekens om de invoervelden.. + UPDATE fac_imp_file + SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '') + WHERE fac_import_key = p_import_key; + + v_errorhint := 'Generieke update'; + -- Import AFAS_ONLINE -- csv formaat via stylesheet afas2fclt.xsl bepaald + v_seq_of_header := 'Personeelsnummer;Roepnaam;Voorletters;Voorvoegsel;Achternaam;Geslacht;Zakelijk mailadres;Dienstverb.;Begindatum functieregel;Einddatum functieregel;Afdelingscode;Afdeling omschrijving;Functiecode;Functieomschrijving;Formatieplaatscode;Formatieplaats omschrijving;Uren/wk;Leidinggevende persnr.;Naam Leidinggevende;Kofferletter;Datum in dienst;Datum uit dienst'; + -- 1. Personeelsnummer + -- 2. Roepnaam + -- 3. Voorletters + -- 4. Voorvoegsel + -- 5. Achternaam + -- 6. Geslacht + -- 7. Zakelijk mailadres + -- 8. Dienstverb. + -- 9. Begindatum functieregel + -- 10. Einddatum functieregel + -- 11. Afdelingscode + -- 12. Afdeling omschrijving + -- 13. Functiecode + -- 14. Functieomschrijving + -- 15. Formatieplaatscode + -- 16. Formatieplaats omschrijving + -- 17. Uren/wk + -- 18. Leidinggevende persnr. + -- 19. Naam Leidinggevende + -- 20. Kofferletter + -- 21. Datum in dienst + -- 22. Datum uit dienst + + -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure + v_seq_of_columns := '0;0;0;0;0;0;11;5;4;2;' + -- v_alg_locatie_code 1 + -- v_alg_gebouw_code 2 + -- v_alg_verdieping_volgnr 3 + -- v_alg_ruimte_nr 4 + -- v_prs_werkplek_volgnr 5 + -- v_prs_werkplek_omschrijving 6 + -- v_prs_afdeling_naam 7 -- VERPLICHT BIJ IMPORT + -- v_prs_perslid_naam 8 -- VERPLICHT BIJ IMPORT + -- v_prs_perslid_tussenvoegsel 9 + -- v_prs_perslid_voornaam 10 + || '3;0;0;0;6;0;0;7;0;1;' + -- v_prs_perslid_voorletters 11 + -- v_prs_perslid_partner_naam 12 + -- v_prs_perslid_partner_tussenv 13 + -- v_prs_naamgebruik_code 14 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt + -- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken + -- 2 personen die de geboortenaam van de partner willen gebruiken + -- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken + -- v_prs_perslid_geslacht 15 Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default + -- v_prs_perslid_telefoonnr 16 + -- v_prs_perslid_mobiel 17 + -- v_prs_perslid_email 18 + -- v_prs_perslid_dienstverband 19 + -- v_prs_perslid_nr 20 + || '14;0;0;0;0;0;8;9;10;11;' + -- v_prs_srtperslid_omschrijving 21 -- VERPLICHT BIJ IMPORT + -- v_prs_perslid_oslogin 22 + -- v_prs_perslid_wachtwoord 23 + -- v_prs_perslid_titel 24 + -- v_prs_perslid_apikey 25 + -- v_dummy 26 + -- v_prs_kenmerk1 27 + -- v_prs_kenmerk2 28 + -- v_prs_kenmerk3 29 + -- v_prs_kenmerk4 30 + || '12;13;14;15;16;17;18;19;20;21;' + -- v_prs_kenmerk5 31 + -- .t/m kenmerk14 40 + || '22;0;0;0;0;0'; + -- v_prs_kenmerk15 41 + -- ..t/m kenmerk20 46 + + + v_errorhint := 'Generieke update'; + -- csv verwerken naar de fac_imp_perslid-tabel + prs.import_perslid(p_import_key, v_seq_of_columns, v_seq_of_header); + + v_errorhint := 'Login afleiden van emailadres'; + -- Loginnaam afleiden van emailadres + UPDATE fac_imp_perslid + SET prs_perslid_oslogin = + UPPER ( + (SUBSTR (prs_perslid_email, + 0, + INSTR (prs_perslid_email, '@') - 1))) + WHERE prs_perslid_email IS NOT NULL ; + + v_errorhint := 'Uitfilteren records'; -- in afasonline-bestand zitten wellicht aantal zaken die niet mee hoeven naar Facilitor + -- moeten we uit afasbestand nog medewerkers verwijderen voordat we vervolg import/update-acties gaan doen? Vooralsnog niet... + NULL; + + v_errorhint := 'Bewerken records'; -- in afasonline-bestand zitten wellicht aantal zaken die we voor import naar Facilitor willen bewerken + -- Functie in Facilitor moet worden: functiecode - functieomschrijving + UPDATE fac_imp_perslid + SET prs_srtperslid_omschrijving = prs_kenmerk6 || ' - ' || prs_kenmerk7 ; + + -- Afdeling bepalen waar persoon onder komt te vallen. + ---- Deze wordt voor HUMOD direct uit AFAS gevuld. + ---- In Facilitor kiezen we er voor dat alle afdelingen op niveau 1 aangemaakt worden onder bedrijf_key c_prs_bedrijf_key_goko + ---- Indien afdeling niet gevonden dan gaan we deze aanmaken onder bedrijf Humanitas Onder Dak + FOR rec IN c_afd + LOOP + BEGIN + v_errorhint := 'Afdeling van Persoon - bestaand of nieuw?'; + + -- Afdeling op niveau 1 zoeken + SELECT MIN (a.prs_afdeling_key) + INTO v_prs_afdeling_key + FROM prs_v_afdeling a + WHERE a.prs_afdeling_upper = UPPER (rec.prs_afdeling_naam) + AND a.prs_afdeling_verwijder IS NULL + AND a.niveau = 1 -- kijken alleen naar afdelingen op niveau 1 + AND a.prs_bedrijf_key = c_prs_bedrijf_key_goko ; + + -- Als afdeling uit AFAS NIET bekend is in Facilitor dan maken we deze straks bij uitvoer/update aan - Bij deze import alvast de info-logging doen + IF v_prs_afdeling_key IS NULL + THEN + + UPDATE fac_imp_perslid + SET prs_kenmerk20 = 'Nieuwe afdeling - ' || rec.prs_afdeling_naam + WHERE fac_imp_file_index = rec.fac_imp_file_index ; + + END IF; + + END; + END LOOP; + + FOR rec IN c_afd_log + LOOP + BEGIN + v_errorhint := 'Nieuwe afdelingen aanmaken - ter info'; + + + fac.imp_writelog (p_import_key, + 'I', + rec.prs_kenmerk20, + v_errorhint); + + END; + END LOOP; + + FOR rec IN c_rol + LOOP + BEGIN + v_errorhint := 'Facilitor-rollen bepalen- ter info'; + -- Op zoek naar de Facilitor-rol voor deze medewerkers op basis van functie_code en functie_omschrijving + -- Onderhouden in eigentabellen functie_rol1 en functie_rol2 (key 901 en key 903) + + SELECT MAX((SELECT rol.fac_usrdata_code FROM fac_usrdata rol WHERE rol.fac_usrdata_key = ud.fac_usrdata_parentkey AND rol.fac_usrtab_key = 901)) + facilitor_rol + INTO v_prs_perslid_rol_key + FROM fac_usrtab ut, fac_usrdata ud + WHERE ut.fac_usrtab_key = ud.fac_usrtab_key + AND ut.fac_usrtab_key = 903 + AND ud.fac_usrdata_verwijder IS NULL + AND UPPER(ud.fac_usrdata_code) = UPPER(rec.prs_kenmerk6) -- functiecode + AND UPPER(ud.fac_usrdata_omschr) = UPPER(rec.prs_kenmerk7) -- functieomschrijving + ; + + IF v_prs_perslid_rol_key IS NOT NULL + THEN + + UPDATE fac_imp_perslid + SET prs_kenmerk19 = v_prs_perslid_rol_key + WHERE fac_imp_file_index = rec.fac_imp_file_index ; + + END IF; + + END; + END LOOP; + + + + 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 goko_import_afasonline; +/ + +CREATE OR REPLACE PROCEDURE goko_update_afasonline (p_import_key IN NUMBER) +IS + -- AFAS in sync met Facilitor bedrijf c_prs_bedrijf_key_goko + --- Alle personen verwijderen die niet meer in het import bestand voorkomen. + --- Match bij HUMOD loopt via Personeelsnummer + + -- Afdeling AFAS leading + --- Op niveau 1 gaan we de afdeling van GOKO aanmaken. + --- Indien onbekende afdelingscode dan gaan we die eerst aanmaken (in immport-deel vullen we daarvoor alvast prs_kenmerk20) + + -- Leidinggevende - verantwoordelijke + --- In de personenkaart van Facilitor wordt officiele leidinggevende uit afas gevuld + --- En op basis functie een automatische toewijzing aan juiste autorisatiegroepen van managers en teamleiders + + -- Facilitor-rollen bepalen en op basis van deze rollen autorisaties uitreiken + --- Op basis functie/code zijn er 3 rollen te onderscheiden voor GOKO in Facilitor: Teamleider locatie, Regiomanager, Manager algemeen + --- + + -- HR-mutaties in Facilitor + --- Bij mutaties in AFAS moeten in Facilitor voor desbetreffende persoon ook zaken geregeld worden. Hiervoor zetten we kenmerk/trigger 'mutatie-hr' + --- Betreft 4 wijzigingen: Nieuwe medewerker EN Gewijzigde formatieplaats op bestaande medewerker EN medewerker uit dienst EN mutatie nevenfuncties + ----- Ps. laatste NOG INPASSEN - AANLEVEREN UIT AFAS + --- Werkwijze: Via een cockpit-rapportage zijn deze in beeld en zal BedrijfsBureau de juiste HR-workflow/melding opstarten om de acties voor IT, Applicatiebeheer en Facilitair uitgevoerd te krijgen. + ----- Ps. Cockpit-rapport dus tevens bewakingsrapport dat zaken tijdig geregeld worden. + --- Voor de mutatie 'verwijderde en/of inactieve medewerkers': + ----- Werkwijze voortel: Daar voor elk medewerker een KOFFER-OBJECT koppelen zodat de medewerker bij verwijderactie uit AFAS-koppeling altijd op INACTIEF komt + + v_count NUMBER; + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_errormsg VARCHAR2 (400); + v_errorhint VARCHAR2 (400); + + -- overige variabelen + v_fac_gebruikersgroep_key NUMBER(10); + v_prs_perslid_key_verantw NUMBER(10); + v_prs_afdeling_key NUMBER (10); + c_prs_bedrijf_key_goko NUMBER (10) := 41; + c_rol_key_teamleider NUMBER (10) := 1280; + c_rol_key_regiomanager NUMBER (10) := 1740; + c_rol_key_manager NUMBER (10) := 1320; + v_prs_mutatie_hr VARCHAR2 (1000); + v_import_datum VARCHAR2 (30) := TO_CHAR(SYSDATE) ; + v_datum_vandaag DATE := TRUNC(SYSDATE) ; + + CURSOR c_afd + IS + SELECT i.prs_kenmerk20, i.prs_kenmerk4, i.prs_kenmerk5 + FROM fac_imp_perslid i + WHERE i.prs_kenmerk20 IS NOT NULL + GROUP BY i.prs_kenmerk20, i.prs_kenmerk4, i.prs_kenmerk5 ; + + CURSOR c_del + IS + SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving, a.prs_afdeling_omschrijving, b.prs_bedrijf_naam + FROM prs_perslid p, fac_imp_perslid i, prs_srtperslid sp, prs_v_afdeling a, prs_bedrijf b + WHERE p.prs_perslid_nr = i.prs_perslid_nr(+) + AND p.prs_perslid_verwijder IS NULL + AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = b.prs_bedrijf_key + AND b.prs_bedrijf_key = c_prs_bedrijf_key_goko + AND p.prs_srtperslid_key = sp.prs_srtperslid_key + AND i.prs_perslid_nr IS NULL -- in Facilitor, met onderstaande voorwaarden, is er dus geen mapping op personeelsnummer en die personen gaan we verwijderen/inactief maken + AND p.prs_perslid_nr IS NOT NULL + AND UPPER (p.prs_perslid_email) LIKE '%HUMOD.NL' + ORDER BY 1 ; + + -- HR-koffersysteem mutatie op functie en/of afdeling (= formatieplaats-wijziging) + CURSOR c_mut + IS + SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving, a.prs_afdeling_omschrijving, + flx.getflex('PRS', 1606, p.prs_perslid_key, 'P') + formatieplaats_huidig, + i.prs_kenmerk8 + formatieplaats_import, + TO_DATE(flx.getflex('PRS', 1800, p.prs_perslid_key, 'P'), 'yyyy-mm-dd') + datum_uit_dienst, + TO_DATE(i.prs_kenmerk15, 'yyyy-mm-dd') + datum_uit_dienst_import + FROM prs_perslid p, fac_imp_perslid i, prs_srtperslid sp, prs_v_afdeling a, prs_bedrijf b + WHERE p.prs_perslid_key = i.prs_perslid_key + AND p.prs_perslid_verwijder IS NULL + AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = b.prs_bedrijf_key + AND b.prs_bedrijf_key = c_prs_bedrijf_key_goko + AND p.prs_srtperslid_key = sp.prs_srtperslid_key + AND p.prs_perslid_nr IS NOT NULL + AND UPPER (p.prs_perslid_email) LIKE '%HUMOD.NL' + ORDER BY 1 ; + + CURSOR c_flex -- Voor updaten van de algemene flex-kenmerkvelden op actuele medewerkers in blok AFAS_ONLINE op personenkaart + IS + SELECT p.prs_perslid_key, i.prs_perslid_nr, i.prs_perslid_naam, i.prs_perslid_email, + 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 + FROM prs_v_aanwezigperslid p, fac_imp_perslid i + WHERE p.prs_perslid_key = i.prs_perslid_key + ORDER BY 1; + + CURSOR c_verantw + IS + SELECT p.prs_perslid_key, + p.prs_perslid_email, + p.prs_perslid_nr, + p.prs_perslid_oslogin, + CASE WHEN p.prs_perslid_key_verantw IS NOT NULL + THEN (SELECT prs_perslid_nr FROM prs_perslid WHERE prs_perslid_key = p.prs_perslid_key_verantw) + ELSE NULL + END + prs_perslid_verantw_nr, + p.prs_perslid_verantw_nr_afas + FROM fac_imp_perslid i, + (SELECT p.prs_perslid_key, + p.prs_perslid_email, + p.prs_perslid_nr, + p.prs_perslid_oslogin, + p.prs_perslid_key_verantw, + (SELECT kw.prs_kenmerklink_waarde + FROM prs_kenmerklink kw + WHERE kw.prs_kenmerk_key = 1643 + AND kw.prs_kenmerklink_niveau = 'P' + AND kw.prs_link_key = p.prs_perslid_key) + prs_perslid_verantw_nr_afas + FROM prs_perslid p) p + WHERE p.prs_perslid_key = i.prs_perslid_key + ORDER BY 1 ; + + -- cursor ROLLEN inlezen in de rol-kenmerkvelden op personenkaart + ----- en Autorisatie goed inregelen per rol --- DIT NOG APART GOED INREGELEN + CURSOR c_rol + IS + SELECT p.prs_perslid_key, + i.prs_kenmerk19, -- rol_key uit afas en eigen-tabel met de facilitor-rollen die bij functie_code en functie_omschrijving horen (tabel key 901 en key 903) + p.prs_perslid_teamleider, + p.prs_perslid_regiomanager, + p.prs_perslid_manager_algemeen + FROM fac_imp_perslid i, + (SELECT p.prs_perslid_key, + p.prs_perslid_email, + p.prs_perslid_nr, + p.prs_perslid_oslogin, + p.prs_perslid_key_verantw, + (SELECT kw.prs_kenmerklink_waarde + FROM prs_kenmerklink kw + WHERE kw.prs_kenmerk_key = c_rol_key_teamleider + AND kw.prs_kenmerklink_niveau = 'P' + AND kw.prs_link_key = p.prs_perslid_key) + prs_perslid_teamleider, + (SELECT kw.prs_kenmerklink_waarde + FROM prs_kenmerklink kw + WHERE kw.prs_kenmerk_key = c_rol_key_regiomanager + AND kw.prs_kenmerklink_niveau = 'P' + AND kw.prs_link_key = p.prs_perslid_key) + prs_perslid_regiomanager, + (SELECT kw.prs_kenmerklink_waarde + FROM prs_kenmerklink kw + WHERE kw.prs_kenmerk_key = c_rol_key_manager + AND kw.prs_kenmerklink_niveau = 'P' + AND kw.prs_link_key = p.prs_perslid_key) + prs_perslid_manager_algemeen + FROM prs_perslid p) p + WHERE p.prs_perslid_key = i.prs_perslid_key + ORDER BY 1 ; + + +BEGIN + v_errormsg := 'Update afasonline'; + v_errorhint := 'Niet genoeg personen in bestand, import afgebroken'; + + NULL; +/* HELEMAAL OP ORDE MAKEN VOOR GO KINDEROPVANG + + SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid; + + IF v_count >= 100 + THEN + -- Geldig importbestand wat betreft aantal personen + + -- Gaan we eerst de afdelingsstructuur bijwerken + FOR rec IN c_afd + LOOP + BEGIN + v_errorhint:='Fout aanvullen afdelingstructuur: ' || rec.prs_kenmerk4 || ' - ' || rec.prs_kenmerk5 ; + + INSERT INTO prs_afdeling ( + prs_bedrijf_key, + prs_afdeling_naam, + prs_afdeling_omschrijving, + prs_kostenplaats_key, + prs_perslid_key_verantw, + mld_adres_key) + VALUES ( + c_prs_bedrijf_key_goko, + rec.prs_kenmerk4, + rec.prs_kenmerk5, + NULL, + NULL, + NULL) ; + + END; + END LOOP; + + -- En dan kunnen we de generieke import draaien + v_errorhint := 'Verwerken persoonsgegevens'; + + COMMIT; + + -- generic update + -- 'EMAIL' betekent dat op basis van Email wordt gematched. + -- 'NR' betekent op basis Personeelsnummer + -- 'NULL' betekent altijd geen 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 + v_errorhint := 'Verwijderen persoonsgegevens'; + + prs.delete_perslid (p_import_key, rec.prs_perslid_key); + + END; + END LOOP; + + FOR rec IN c_mut + LOOP + BEGIN + v_errorhint := 'Triggers HR-mutatie zetten'; + + v_prs_mutatie_hr := '' ; + + -- Bestaande medewerker met wijzigende formatieplaats + IF rec.formatieplaats_huidig IS NOT NULL AND rec.formatieplaats_huidig <> rec.formatieplaats_import + THEN + + v_prs_mutatie_hr := 'Formatieplaats gewijzigd van ' || rec.formatieplaats_huidig || ' naar ' || rec.formatieplaats_import || ' (datum afasimport ' || v_import_datum || ')' ; + + -- kenmerk aanpassen + PRS.upsertkenmerk (1760, rec.prs_perslid_key, v_prs_mutatie_hr); + + -- fac_tracking op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'MDW_FORMATIEPLAATS_GEWIJZIGD'); END; + + END IF; + + -- Nieuwe medewerker in dienst + IF rec.formatieplaats_huidig IS NULL + THEN + + v_prs_mutatie_hr := 'Nieuwe medewerker in dienst met formatieplaats ' || rec.formatieplaats_import || ' (datum afasimport ' || v_import_datum || ')' ; + + -- kenmerk aanpassen + PRS.upsertkenmerk (1760, rec.prs_perslid_key, v_prs_mutatie_hr); + + -- fac_tracking op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'MDW_IN_DIENST'); END; + + END IF; + + -- Medewerker uit dienst + IF rec.datum_uit_dienst_import IS NOT NULL AND rec.datum_uit_dienst_import <> COALESCE(rec.datum_uit_dienst, v_datum_vandaag) AND rec.datum_uit_dienst_import > v_datum_vandaag + THEN + + v_prs_mutatie_hr := 'Medewerker uit dienst met formatieplaats ' || rec.formatieplaats_import || ' (datum afasimport ' || v_import_datum || ')' ; + + -- kenmerk aanpassen + PRS.upsertkenmerk (1760, rec.prs_perslid_key, v_prs_mutatie_hr); + + -- fac_tracking op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'MDW_UIT_DIENST'); END; + + END IF; + + END; + END LOOP; + + + -- Op de personenkaart de actuele humod-mederwerkers de afas-velden uit de koppeling vullen - ter informatie + FOR rec IN c_flex + LOOP + BEGIN + + -- standaardvelden: + v_errorhint:='Fout bijwerken - Naam'; + PRS.upsertkenmerk (1602, rec.prs_perslid_key, rec.prs_perslid_naam); + + v_errorhint:='Fout bijwerken - Personeelsnummer'; + PRS.upsertkenmerk (1604, rec.prs_perslid_key, rec.prs_perslid_nr); + + v_errorhint:='Fout bijwerken - Zakelijk emailadres'; + PRS.upsertkenmerk (1605, rec.prs_perslid_key, rec.prs_perslid_email); + + -- overige uit de import-kenmerkvelden: + v_errorhint:='Fout bijwerken kenmerkveld1 - Dienstverb.'; + PRS.upsertkenmerk (1660, rec.prs_perslid_key, rec.prs_kenmerk1); + + v_errorhint:='Fout bijwerken kenmerkveld2 - Begindatum functieregel'; + PRS.upsertkenmerk (1644, rec.prs_perslid_key, rec.prs_kenmerk2); + + v_errorhint:='Fout bijwerken kenmerkveld3 - Einddatum functieregel'; + PRS.upsertkenmerk (1645, rec.prs_perslid_key, rec.prs_kenmerk3); + + v_errorhint:='Fout bijwerken kenmerkveld4 - Afdelingscode'; + PRS.upsertkenmerk (1608, rec.prs_perslid_key, rec.prs_kenmerk4); + + v_errorhint:='Fout bijwerken kenmerkveld5 - Afdeling omschrijving'; + PRS.upsertkenmerk (1609, rec.prs_perslid_key, rec.prs_kenmerk5); + + v_errorhint:='Fout bijwerken kenmerkveld6 - Functiecode'; + PRS.upsertkenmerk (1610, rec.prs_perslid_key, rec.prs_kenmerk6); + + v_errorhint:='Fout bijwerken kenmerkveld7 - Functieomschrijving'; + PRS.upsertkenmerk (1611, rec.prs_perslid_key, rec.prs_kenmerk7); + + v_errorhint:='Fout bijwerken kenmerkveld8 - Formatieplaatscode'; + PRS.upsertkenmerk (1606, rec.prs_perslid_key, rec.prs_kenmerk8); + + v_errorhint:='Fout bijwerken kenmerkveld9 - Formatieplaats omschrijving'; + PRS.upsertkenmerk (1607, rec.prs_perslid_key, rec.prs_kenmerk9); + + v_errorhint:='Fout bijwerken kenmerkveld10 - Uren/wk'; + PRS.upsertkenmerk (1640, rec.prs_perslid_key, rec.prs_kenmerk10); + + v_errorhint:='Fout bijwerken kenmerkveld11 - Leidinggevende persnr'; + PRS.upsertkenmerk (1643, rec.prs_perslid_key, rec.prs_kenmerk11); + + v_errorhint:='Fout bijwerken kenmerkveld12 - Naam Leidinggevende'; + PRS.upsertkenmerk (1642, rec.prs_perslid_key, rec.prs_kenmerk12); + + v_errorhint:='Fout bijwerken kenmerkveld13 - Kofferletter'; + PRS.upsertkenmerk (1641, rec.prs_perslid_key, rec.prs_kenmerk13); + + v_errorhint:='Fout bijwerken kenmerkveld14 - Datum in Dienst'; + PRS.upsertkenmerk (1780, rec.prs_perslid_key, rec.prs_kenmerk14); + + v_errorhint:='Fout bijwerken kenmerkveld14 - Datum uit Dienst'; + PRS.upsertkenmerk (1800, rec.prs_perslid_key, rec.prs_kenmerk15); + + END; + END LOOP; + + -- En de verantwoordelijk manager updaten in de personenkaart indien nodig + FOR rec IN c_verantw + LOOP + BEGIN + v_errorhint:='Fout bijwerken verantwoordelijke'; + + -- als de aangeboden waarde uit afas anders is dan de huidige verantwoordelijke in de personenkaart dan gaan we personenkaart updaten + IF COALESCE(rec.prs_perslid_verantw_nr_afas, '') <> COALESCE(rec.prs_perslid_verantw_nr, '') + THEN + + -- geen gevonden facilitor-manager dan gevulde verantwoordelijke verwijderen + IF rec.prs_perslid_verantw_nr_afas IS NULL + THEN + + UPDATE prs_perslid + SET prs_perslid_key_verantw = '' + WHERE prs_perslid_key = rec.prs_perslid_key ; + + END IF; + + -- wel gevonden facilitor-manager dan bijbehorende verantwoordelijke_key in personenkaart vullen + IF rec.prs_perslid_verantw_nr_afas IS NOT NULL + THEN + + SELECT MIN(prs_perslid_key) + INTO v_prs_perslid_key_verantw + FROM prs_perslid + WHERE prs_perslid_nr = rec.prs_perslid_verantw_nr_afas ; + + IF v_prs_perslid_key_verantw IS NOT NULL + THEN + + UPDATE prs_perslid + SET prs_perslid_key_verantw = v_prs_perslid_key_verantw + WHERE prs_perslid_key = rec.prs_perslid_key ; + + ELSE + + UPDATE prs_perslid + SET prs_perslid_key_verantw = '' + WHERE prs_perslid_key = rec.prs_perslid_key ; + + END IF; + + END IF; + + + END IF; + + + END; + END LOOP; + + FOR rec IN c_rol + LOOP + BEGIN + v_errorhint:='Fout bijwerken facilitor-rollen'; + + -- 1. als prs_kenmerk19 leeg is dan ook alle vinkjes leegmaken... + IF rec.prs_kenmerk19 IS NULL AND (rec.prs_perslid_teamleider IS NOT NULL OR rec.prs_perslid_regiomanager IS NOT NULL OR rec.prs_perslid_manager_algemeen IS NOT NULL) + THEN + + IF rec.prs_perslid_teamleider IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_teamleider AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + IF rec.prs_perslid_regiomanager IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_regiomanager AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Regiomanager: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + IF rec.prs_perslid_manager_algemeen IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + END IF; + + -- 2. als prs_kenmerk19 gevuld is dan checken of juiste rol-vinkje gezet is, zo niet, doen.. + -- 2.1. voor c_rol_key_teamleider + IF rec.prs_kenmerk19 IS NOT NULL AND fac.safe_to_number(rec.prs_kenmerk19) = c_rol_key_teamleider + THEN + + -- toevoegen + IF rec.prs_perslid_teamleider IS NULL + THEN + + INSERT INTO prs_kenmerklink(prs_link_key,prs_kenmerk_key,prs_kenmerklink_waarde,prs_kenmerklink_niveau) + VALUES (rec.prs_perslid_key, c_rol_key_teamleider, '1', 'P') ; + + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: (leeg) --> 1 (vanuit AFAS_koppeling)'); END; + + END IF; + + -- en de andere rollen deleten als ze nog aangevinkt zijn (kan maar 1 rol krijgen) + IF rec.prs_perslid_regiomanager IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_regiomanager AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Regiomanager: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + IF rec.prs_perslid_manager_algemeen IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + END IF; + + -- 2.2. c_rol_key_regiomanager + IF rec.prs_kenmerk19 IS NOT NULL AND fac.safe_to_number(rec.prs_kenmerk19) = c_rol_key_regiomanager + THEN + + -- toevoegen + IF rec.prs_perslid_regiomanager IS NULL + THEN + + INSERT INTO prs_kenmerklink(prs_link_key,prs_kenmerk_key,prs_kenmerklink_waarde,prs_kenmerklink_niveau) + VALUES (rec.prs_perslid_key, c_rol_key_regiomanager, '1', 'P') ; + + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Regiomanager: (leeg) --> 1 (vanuit AFAS_koppeling)'); END; + + END IF; + + -- en de andere rollen deleten als ze nog aangevinkt zijn (kan maar 1 rol krijgen) + IF rec.prs_perslid_teamleider IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_teamleider AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + IF rec.prs_perslid_manager_algemeen IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + END IF; + + -- 2.3. c_rol_key_manager + IF rec.prs_kenmerk19 IS NOT NULL AND fac.safe_to_number(rec.prs_kenmerk19) = c_rol_key_manager + THEN + + -- toevoegen + IF rec.prs_perslid_manager_algemeen IS NULL + THEN + + INSERT INTO prs_kenmerklink(prs_link_key,prs_kenmerk_key,prs_kenmerklink_waarde,prs_kenmerklink_niveau) + VALUES (rec.prs_perslid_key, c_rol_key_manager, '1', 'P') ; + + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: (leeg) --> 1 (vanuit AFAS_koppeling)'); END; + + END IF; + + -- en de andere rollen deleten als ze nog aangevinkt zijn (kan maar 1 rol krijgen) + IF rec.prs_perslid_teamleider IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_teamleider AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Teamleider: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + IF rec.prs_perslid_manager_algemeen IS NOT NULL + THEN + + DELETE FROM prs_kenmerklink WHERE prs_link_key = rec.prs_perslid_key AND prs_kenmerk_key = c_rol_key_manager AND prs_kenmerklink_VERWIJDER IS NULL ; + + -- tracking doen op personenkaart + BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Manager algemeen: 1 --> (gewist vanuit AFAS_koppeling)'); END; + + END IF; + + END IF; + + END; + END LOOP; + + FOR rec IN c_aut + LOOP + BEGIN + -- Alle locatiemanagers toevoegen aan eigen autorisatiegroep' + v_errorhint:='Fout bijwerken locatiemanagers in eigen autorisatiegroep'; + + BEGIN + + SELECT fac_gebruikersgroep_key + INTO v_fac_gebruikersgroep_key + FROM fac_gebruikersgroep + WHERE fac_groep_key = 22 -- Groep 'Locatie- en Regiomanagers' + AND prs_perslid_key = rec.prs_perslid_key ; + EXCEPTION + WHEN NO_DATA_FOUND + THEN + + INSERT INTO fac_gebruikersgroep (fac_groep_key, + prs_perslid_key) + VALUES (22, rec.prs_perslid_key); + + END; + + + END; + END LOOP; + + + ELSE + fac.imp_writelog (p_import_key, + 'E', + v_errormsg, + v_errorhint); + COMMIT; + 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_errormsg, + v_errorhint); +END goko_update_afasonline; +/ + + + -- Hook functie die na het saven (bes_postsave) van een bestelling wordt aangeroepen. CREATE OR REPLACE PROCEDURE goko_bes_after_insert (p_key IN NUMBER)