GOKO#90623 -- afas-koppeling en eerste basisopzet opleveren

svn path=/Customer/trunk/; revision=70346
This commit is contained in:
Jos Migo
2025-09-17 12:57:31 +00:00
parent 8a49a5008b
commit e5252272c7

View File

@@ -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': <NOG INPASSEN / BESPREKEN MET FRANK/CLAUDIA>
----- 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, '<leeg>') <> COALESCE(rec.prs_perslid_verantw_nr, '<leeg>')
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)