diff --git a/HMOD/hmod.sql b/HMOD/hmod.sql index 82237a2c8..b00dc32a1 100644 --- a/HMOD/hmod.sql +++ b/HMOD/hmod.sql @@ -22,6 +22,784 @@ SET DEFINE OFF ------ payload begin ------ +-------------------------------------------------- +--- HIERONDER NIEUWE AFAS IMPORT (2025-JULI) ---- +-------------------------------------------------- + +CREATE OR REPLACE PROCEDURE hmod_import_afasonline_h (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_hmod 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 + -- EVT NOG AANVULLING VAN CLAUDIA OP: + ---- DOEL: MET FORMATIEPLAATSCODE_WIJZIGINGSDATUM of AFDELINGSCODE_WIJZIGINGSDATUM DE TRIGGER MUTATIE-KOFFERSYSTEEM TE ZETTEN + 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'; + -- 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 + + -- 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;0;' + -- v_prs_kenmerk5 31 + -- .t/m kenmerk15 40 + || '0;0;0;0;0;0'; + -- v_prs_kenmerk16 41 + -- ..t/m kenmerk20 45 + + + 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_hmod + ---- 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_hmod ; + + -- 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 = 921)) + 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 = 901 + 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 hmod_import_afasonline_h; +/ + +CREATE OR REPLACE PROCEDURE hmod_update_afasonline_h (p_import_key IN NUMBER) +IS + -- AFAS in sync met Facilitor bedrijf c_prs_bedrijf_key_hmod + --- 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 HMOD 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 hmod 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-koffersysteem' + + 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_hmod NUMBER (10) := 41; + c_rol_key_teamleider NUMBER (10) := 1280; + c_rol_key_regiomanager NUMBER (10) := 1740; + c_rol_key_manager NUMBER (10) := 1320; + + 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_hmod + 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 ; + + 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 + 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 ; + + -- HR-koffersysteem mutatie op functie en/of afdeling (=formatieplaats-wijziging) - NOG HELEMAAL GOED UITWERKEN!!! + CURSOR c_mut + IS + SELECT p.prs_perslid_key -- NOG UITWERKEN + 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 = 1082 + 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 ; + + +BEGIN + v_errormsg := 'Update afasonline'; + v_errorhint := 'Niet genoeg personen in bestand, import afgebroken'; + + 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_hmod, + 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; + + -- 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); + + 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 hmod_update_afasonline_h; +/ + + + + +--------------------------------------------------------------------------- +--- HIERONDER OUDE IMPORT ADP en KOFFERSYSTEEM NOG HELEMAAL OPSCHONEN! ---- +--------------------------------------------------------------------------- + CREATE OR REPLACE PROCEDURE hmod_import_koffer (p_import_key IN NUMBER) AS @@ -414,8 +1192,9 @@ CREATE OR REPLACE VIEW hmod_v_personenlijst NAAM, PERSONEELSNUMMER, NAAM_TOT, - TEAMLEIDER_MT, - HR_FUNCTIONARIS, + TEAMLEIDER_LOC, + MANAGER_ALGEMEEN, + REGIOMANAGER, BEDRIJF, DATUM_UITDIENST ) @@ -425,13 +1204,14 @@ AS p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam naam, p.prs_perslid_nr, - CASE WHEN v.teamleider_mt = 'ja' AND v.hr_functionaris = 'nee' THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || p.prs_perslid_nr || ') - teamleider' - WHEN v.teamleider_mt = 'nee' AND v.hr_functionaris = 'ja' THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || p.prs_perslid_nr || ') - hr-functionaris' - WHEN v.teamleider_mt = 'nee' AND v.hr_functionaris = 'ja' THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || p.prs_perslid_nr || ') - teamleider / hr-functionaris' - ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || p.prs_perslid_nr || ')' - END naam_tot, - v.teamleider_mt, - v.hr_functionaris, + p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || p.prs_perslid_nr || ')' || + DECODE(v.teamleider_loc, 'ja', ' - teamleider loc', + DECODE(v.regiomanager, 'ja', ' - regiomanager', + DECODE(v.manager_algemeen, 'ja', '- manager algemeen', + NULL))) naam_tot, + v.teamleider_loc, + v.manager_algemeen, + v.regiomanager, b.prs_bedrijf_naam, v.datum_uitdienst FROM @@ -441,11 +1221,14 @@ AS ( SELECT prs_perslid_key, (select CASE WHEN max(k.prs_kenmerklink_waarde) IS NULL THEN 'nee' ELSE 'ja' END teamleider_mt - from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1280) -- tl_mt - teamleider_mt, + from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1280) -- tl + teamleider_loc, (select CASE WHEN max(k.prs_kenmerklink_waarde) IS NULL THEN 'nee' ELSE 'ja' END hr_functionaris - from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1320) -- hr_functionaris - hr_functionaris, + from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1320) -- manager algemeen + manager_algemeen, + (select CASE WHEN max(k.prs_kenmerklink_waarde) IS NULL THEN 'nee' ELSE 'ja' END regiomanager + from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1740) -- regiomanager + regiomanager, (select TO_DATE(max(k.prs_kenmerklink_waarde),'DD-MM-YYYY') from prs_kenmerklink k where k.prs_link_key = p.prs_perslid_key and k.prs_kenmerklink_niveau = 'P' and k.prs_kenmerk_key = 1100) -- datum_uitdienst datum_uitdienst @@ -456,7 +1239,7 @@ AS AND p.prs_perslid_key = v.prs_perslid_key AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_nr IS NOT NULL - AND b.prs_bedrijf_key = 41 + AND b.prs_bedrijf_key IN (41, 8101) -- HMOD en HMOD-interne-emailadressen AND TRUNC(SYSDATE) < COALESCE(TRUNC(v.datum_uitdienst),TO_DATE('31-12-2099','DD-MM-YYYY')) ; @@ -465,17 +1248,31 @@ AS SELECT * FROM hmod_v_personenlijst WHERE - teamleider_mt = 'ja' + teamleider_loc = 'ja' ; -CREATE OR REPLACE VIEW hmod_v_personenlijst_hr +CREATE OR REPLACE VIEW hmod_v_personenlijst_man AS SELECT * FROM hmod_v_personenlijst WHERE - hr_functionaris = 'ja' + manager_algemeen = 'ja' ; +CREATE OR REPLACE VIEW hmod_v_personenlijst_rm -- Regiomanager +AS + SELECT * + FROM hmod_v_personenlijst + WHERE + regiomanager = 'ja' + ; + +-- HR is geen officiele Facilitor-rol meer en view kan tzt weg/gedropt worden +CREATE OR REPLACE VIEW hmod_v_personenlijst_hr +AS + SELECT * + FROM hmod_v_personenlijst ; + CREATE OR REPLACE VIEW hmod_v_koffersysteem_actueel AS @@ -1522,6 +2319,8 @@ AS cnt_contract_status, CASE WHEN cnt_contract_verlenging = 2 THEN 'nee' ELSE 'ja' END automatisch_verlengen, + CASE WHEN cnt_contract_inactiveren = 1 THEN 'ja' ELSE 'nee' END + automatisch_beeindigen, (SELECT kc.cnt_kenmerkcontract_waarde FROM cnt_kenmerkcontract kc, cnt_kenmerk k WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key @@ -1610,6 +2409,7 @@ AS -- Op rappel-datum naar de Beheerder/Administrateur sturen AND c.prs_perslid_key_beh <> c.prs_perslid_key_eig -- als administrateur gelijk aan 1e aanspreekpunt dan dan sturen we de info-mail niet uit AND v.contract_opgezegd IS NULL AND v.automatisch_verlengen = 'nee' + AND v.automatisch_beeindigen = 'nee' UNION ALL -- Op rappel-datum ACTIE-mail naar het 1e aanspreekpunt sturen (contractverantwoordelijke) SELECT 'CUST02', NULL, @@ -1632,6 +2432,7 @@ AS -- Op rappel-datum naar de Beheerder/Administrateur sturen AND c.prs_perslid_key_eig IS NOT NULL AND v.contract_opgezegd IS NULL AND v.automatisch_verlengen = 'nee' + AND v.automatisch_beeindigen = 'nee' UNION ALL -- Op rappel-datum ACTIE-mail naar het 'RAPPEL-ANDERS-emailadres' SELECT 'CUST03', NULL, @@ -1652,7 +2453,8 @@ AS -- Op rappel-datum naar de Beheerder/Administrateur sturen AND c.cnt_contract_status = 0 AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE) AND v.contract_opgezegd IS NULL - AND v.automatisch_verlengen = 'nee' ; + AND v.automatisch_verlengen = 'nee' + AND v.automatisch_beeindigen = 'nee' ; -- domeinview Contracten CREATE OR REPLACE VIEW hmod_v_contracten