OFWD#88128 Realisatie koppeling met AFAS
svn path=/Customer/trunk/; revision=69527
This commit is contained in:
385
OFWD/ofwd.sql
385
OFWD/ofwd.sql
@@ -171,6 +171,391 @@ AS
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
CREATE OR REPLACE PROCEDURE ofwd_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;
|
||||
|
||||
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';
|
||||
|
||||
-- WORDT 2025-MRT
|
||||
prs.import_perslid (
|
||||
p_import_key,
|
||||
'0;0;0;0;0;0;9;1;2;4;'
|
||||
|| '3;0;0;0;0;0;0;6;0;5;'
|
||||
|| '8;0;0;0;0;0;9;10;11;12;'
|
||||
|| '13;14;0;0;0;0;0;0;0;0;'
|
||||
|| '0;0;0;0;0;0',
|
||||
'Achternaam;Tussenvoegsel;Voorletters;Roepnaam;Personeelsnummer;EMail_werk;Functie_code;Functie_omschrijving;Organisatorische_eenheid_code;Organisatorische_eenheid_omschrijving;Datum_indienst;Datum_uitdienst;Leidinggevende_personeelsnummer;Leidinggevende_Naam%');
|
||||
-- "Achternaam";"Tussenvoegsel";"Voorletters";"Roepnaam";"personeelsnummer";"E-Mail_werk";"Functie_code";"Functie_omschrijving";"Organisatorische_eenheid_code";"Organisatorische_eenheid_omschrijving";"Datum_indienst";"Datum_uitdienst";"Leidinggevende_personeelsnummer";"Leidinggevende_Naam";
|
||||
-- 1 (8) 2 (9) 3 (11) 4 (10) 5 (10) 6 (18) 7 (20) 8(21) 9 (27) 10 (28) 11 (29) 12 (30) 13 (31) 14 (32)
|
||||
-- DEF:'Achternaam;Tussenvoegsel;Voorletters;Roepnaam;Personeelsnummer;E-Mail_werk;Functie_code;Functie_omschrijving;Organisatorische_eenheid_code;Organisatorische_eenheid_omschrijving; Datum_indienst;Datum_uitdienst;Leidinggevende_personeelsnummer;Leidinggevende_Naam');
|
||||
|
||||
---- we nemen uit afas alleen de bedrijven/domeinen mee van ofw
|
||||
DELETE fac_imp_perslid
|
||||
WHERE (
|
||||
UPPER (prs_perslid_email) NOT LIKE '%@OFW.NL'
|
||||
)
|
||||
;
|
||||
|
||||
DELETE fac_imp_organisatie;
|
||||
|
||||
INSERT INTO fac_imp_organisatie (prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_omschrijving)
|
||||
SELECT DISTINCT 'OFW', prs_afdeling_naam, prs_kenmerk2
|
||||
FROM fac_imp_perslid
|
||||
WHERE fac_import_key = p_import_key;
|
||||
|
||||
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 ofwd_import_afasonline;
|
||||
/
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
CREATE OR REPLACE PROCEDURE ofwd_update_afasonline (p_import_key IN NUMBER)
|
||||
IS
|
||||
|
||||
CURSOR c_del
|
||||
IS
|
||||
SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, a.prs_afdeling_omschrijving, b.prs_bedrijf_naam
|
||||
FROM prs_perslid p, fac_imp_perslid i, 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_naam = 'OFW'
|
||||
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
|
||||
ORDER BY 1 ;
|
||||
|
||||
CURSOR c_upd
|
||||
IS
|
||||
SELECT p.prs_perslid_key,
|
||||
pf.prs_perslid_naam_full,
|
||||
p.prs_perslid_aanmaak,
|
||||
i.prs_kenmerk3 indienst,
|
||||
i.prs_kenmerk4 uitdienst,
|
||||
prs_kenmerk5 leid_prs_nr
|
||||
FROM prs_v_perslid_fullnames pf,
|
||||
prs_perslid p,
|
||||
fac_imp_perslid i
|
||||
WHERE p.prs_perslid_nr = i.prs_perslid_nr
|
||||
AND p.prs_perslid_key = pf.prs_perslid_key;
|
||||
|
||||
v_count NUMBER;
|
||||
oracle_err_num NUMBER;
|
||||
oracle_err_mes VARCHAR2 (200);
|
||||
v_errormsg VARCHAR2 (400);
|
||||
v_errorhint VARCHAR2 (400);
|
||||
|
||||
v_indienst_kenmerk_key NUMBER(10);
|
||||
v_uitdienst_kenmerk_key NUMBER(10);
|
||||
v_leidg_perslid_key NUMBER(10);
|
||||
v_melding_key NUMBER(10);
|
||||
v_indienst_stdmelding_key NUMBER(10);
|
||||
v_uitdienst_stdmelding_key NUMBER(10);
|
||||
v_uitdienst NUMBER(1);
|
||||
v_indienstdatum VARCHAR2(10);
|
||||
v_uitdienstdatum VARCHAR2(10);
|
||||
|
||||
BEGIN
|
||||
v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';
|
||||
|
||||
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
|
||||
|
||||
IF v_count >= 50
|
||||
THEN
|
||||
v_errorhint := 'Verwerken persoonsgegevens';
|
||||
|
||||
-- Geldig importbestand wat betreft aantal personen
|
||||
|
||||
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);
|
||||
|
||||
v_errorhint := 'Verwijderen persoonsgegevens';
|
||||
|
||||
-- Verwijder personen die niet meer in de import voorkomen.
|
||||
FOR rec IN c_del
|
||||
LOOP
|
||||
BEGIN
|
||||
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
SELECT k.prs_kenmerk_key
|
||||
INTO v_indienst_kenmerk_key
|
||||
FROM prs_kenmerk k
|
||||
WHERE k.prs_kenmerk_verwijder IS NULL
|
||||
AND k.prs_kenmerk_code = 'INDIENST';
|
||||
|
||||
SELECT k.prs_kenmerk_key
|
||||
INTO v_uitdienst_kenmerk_key
|
||||
FROM prs_kenmerk k
|
||||
WHERE k.prs_kenmerk_verwijder IS NULL
|
||||
AND k.prs_kenmerk_code = 'UITDIENST';
|
||||
|
||||
SELECT mld_stdmelding_key
|
||||
INTO v_indienst_stdmelding_key
|
||||
FROM mld_stdmelding
|
||||
WHERE mld_stdmelding_code = 'INDIENST';
|
||||
|
||||
SELECT mld_stdmelding_key
|
||||
INTO v_uitdienst_stdmelding_key
|
||||
FROM mld_stdmelding
|
||||
WHERE mld_stdmelding_code = 'UITDIENST';
|
||||
|
||||
FOR rec IN c_upd
|
||||
LOOP
|
||||
BEGIN
|
||||
v_uitdienst := 0;
|
||||
v_indienstdatum := NULL;
|
||||
v_uitdienstdatum := NULL;
|
||||
|
||||
IF rec.indienst IS NOT NULL
|
||||
THEN
|
||||
v_indienstdatum := TO_CHAR(FAC.SAFE_TO_DATE(rec.indienst, 'yyyy-mm-dd'), 'dd-mm-yyyy');
|
||||
END IF;
|
||||
v_errorhint:='Fout bijwerken kenmerkveld3 - Indienst datum: ' || rec.indienst;
|
||||
PRS.upsertkenmerk (v_indienst_kenmerk_key, rec.prs_perslid_key, v_indienstdatum);
|
||||
|
||||
IF rec.uitdienst IS NOT NULL
|
||||
THEN
|
||||
v_uitdienstdatum := TO_CHAR(FAC.SAFE_TO_DATE(rec.uitdienst, 'yyyy-mm-dd'), 'dd-mm-yyyy');
|
||||
IF FLX.getflex('PRS', v_uitdienst_kenmerk_key, rec.prs_perslid_key, 'P', 1) IS NULL
|
||||
THEN
|
||||
v_uitdienst := 1;
|
||||
END IF;
|
||||
END IF;
|
||||
v_errorhint:='Fout bijwerken kenmerkveld4 - Uitdienst datum';
|
||||
PRS.upsertkenmerk (v_uitdienst_kenmerk_key, rec.prs_perslid_key, v_uitdienstdatum);
|
||||
|
||||
v_errorhint:='Fout bijwerken leidinggevende';
|
||||
BEGIN
|
||||
SELECT prs_perslid_key
|
||||
INTO v_leidg_perslid_key
|
||||
FROM prs_v_aanwezigperslid p
|
||||
WHERE p.prs_perslid_nr = rec.leid_prs_nr;
|
||||
|
||||
UPDATE prs_perslid
|
||||
SET prs_perslid_key_verantw = v_leidg_perslid_key
|
||||
WHERE prs_perslid_key = rec.prs_perslid_key;
|
||||
EXCEPTION WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
fac.imp_writelog (p_import_key, 'E', 'Leidinggevende kan niet gevonden worden: ' || rec.leid_prs_nr, '');
|
||||
END;
|
||||
|
||||
-- Aanmaken in diensttredingsmelding
|
||||
-- Persoon is vandaag aangemaakt.
|
||||
-- en er is niet eerder een indiensttredingsworkflow gestart.
|
||||
SELECT count(*)
|
||||
INTO v_count
|
||||
FROM mld_melding
|
||||
WHERE prs_perslid_key = rec.prs_perslid_key
|
||||
AND mld_stdmelding_key = v_indienst_stdmelding_key;
|
||||
|
||||
IF TRUNC(rec.prs_perslid_aanmaak) = TRUNC(SYSDATE) AND v_count = 0
|
||||
THEN
|
||||
|
||||
INSERT INTO mld_melding (mld_melding_module,
|
||||
mld_meldbron_key,
|
||||
mld_melding_datum,
|
||||
mld_melding_onderwerp,
|
||||
mld_melding_omschrijving,
|
||||
mld_melding_status,
|
||||
mld_stdmelding_key,
|
||||
prs_perslid_key,
|
||||
prs_perslid_key_voor,
|
||||
prs_kostenplaats_key,
|
||||
mld_melding_spoed)
|
||||
VALUES ('MLD',
|
||||
6, -- systeem
|
||||
SYSDATE,
|
||||
'Indienst tredingsbericht: ' || rec.prs_perslid_naam_full,
|
||||
NULL,
|
||||
NULL,
|
||||
v_indienst_stdmelding_key,
|
||||
rec.prs_perslid_key,
|
||||
rec.prs_perslid_key,
|
||||
NULL,
|
||||
3)
|
||||
RETURNING mld_melding_key
|
||||
INTO v_melding_key;
|
||||
|
||||
mld.setmeldingstatus (v_melding_key, 2, null); -- nieuw
|
||||
END IF;
|
||||
|
||||
-- Aanmaken uitdiensttredingsmelding
|
||||
-- Persoon is vandaag uitdienstgemeld.
|
||||
-- en er is niet eerder een indiensttredingsworkflow gestart.
|
||||
SELECT count(*)
|
||||
INTO v_count
|
||||
FROM mld_melding
|
||||
WHERE prs_perslid_key = rec.prs_perslid_key
|
||||
AND mld_stdmelding_key = v_uitdienst_stdmelding_key;
|
||||
|
||||
IF v_uitdienst = 1 AND v_count = 0
|
||||
THEN
|
||||
|
||||
INSERT INTO mld_melding (mld_melding_module,
|
||||
mld_meldbron_key,
|
||||
mld_melding_datum,
|
||||
mld_melding_onderwerp,
|
||||
mld_melding_omschrijving,
|
||||
mld_melding_status,
|
||||
mld_stdmelding_key,
|
||||
prs_perslid_key,
|
||||
prs_perslid_key_voor,
|
||||
prs_kostenplaats_key,
|
||||
mld_melding_spoed)
|
||||
VALUES ('MLD',
|
||||
6, -- systeem
|
||||
SYSDATE,
|
||||
'Uitdienst tredingsbericht: ' || rec.prs_perslid_naam_full,
|
||||
NULL,
|
||||
NULL,
|
||||
v_uitdienst_stdmelding_key,
|
||||
rec.prs_perslid_key,
|
||||
rec.prs_perslid_key,
|
||||
NULL,
|
||||
3)
|
||||
RETURNING mld_melding_key
|
||||
INTO v_melding_key;
|
||||
|
||||
mld.setmeldingstatus (v_melding_key, 2, null); -- nieuw
|
||||
END IF;
|
||||
|
||||
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 ofwd_update_afasonline;
|
||||
/
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
-- Rapportage om het kenmerkdomein met optionele profielen (objectsoort_key = 42) te vullen
|
||||
CREATE OR REPLACE VIEW ofwd_v_optionele_profielen
|
||||
AS
|
||||
SELECT ins_deel_key, ins_deel_omschrijving, ins_deel_verwijder
|
||||
FROM ins_deel
|
||||
WHERE ins_srtdeel_key = 42;
|
||||
|
||||
-- Rapportage om de relatie tussen persoon - functie en rol vast te leggen
|
||||
CREATE OR REPLACE VIEW ofwd_v_rap_prs_rol_recht
|
||||
AS
|
||||
SELECT pf.prs_perslid_naam_full naam,
|
||||
NULL functie,
|
||||
ins_deel_omschrijving rol,
|
||||
sd.ins_srtdeel_omschrijving soort_rol,
|
||||
DECODE (TRUNC (k.ins_kenmerk_volgnummer, -2), 100, 'Sharepoint', 300, 'Mail', 500, 'Applicatie') groep,
|
||||
k.ins_kenmerk_omschrijving recht
|
||||
FROM prs_perslid p,
|
||||
prs_v_perslid_fullnames pf,
|
||||
prs_kenmerklink kl,
|
||||
prs_kenmerk k,
|
||||
fac_kenmerkdomein kdo,
|
||||
ins_deel d,
|
||||
ins_kenmerkdeel kde,
|
||||
ins_kenmerk k,
|
||||
ins_srtdeel sd,
|
||||
prs_v_afdeling a
|
||||
WHERE p.prs_perslid_verwijder IS NULL
|
||||
AND p.prs_perslid_key = pf.prs_perslid_key
|
||||
AND p.prs_afdeling_key = a.prs_afdeling_key
|
||||
AND a.prs_bedrijf_key = 41 -- OFW
|
||||
AND p.prs_perslid_key = kl.prs_link_key(+)
|
||||
AND kl.prs_kenmerk_key = k.prs_kenmerk_key
|
||||
AND k.fac_kenmerkdomein_key = kdo.fac_kenmerkdomein_key(+)
|
||||
AND kdo.fac_kenmerkdomein_xmlnode = 'deel'
|
||||
AND fac.safe_to_number (kl.prs_kenmerklink_waarde) = d.ins_deel_key(+)
|
||||
AND d.ins_deel_key = kde.ins_deel_key(+)
|
||||
AND kde.ins_kenmerk_key = k.ins_kenmerk_key(+)
|
||||
AND d.ins_srtdeel_key = sd.ins_srtdeel_key(+)
|
||||
UNION ALL
|
||||
SELECT pf.prs_perslid_naam_full,
|
||||
df.ins_deel_omschrijving,
|
||||
dr.ins_deel_omschrijving,
|
||||
sd.ins_srtdeel_omschrijving soort_rol,
|
||||
DECODE (TRUNC (k.ins_kenmerk_volgnummer, -2), 100, 'Sharepoint', 300, 'Mail', 500, 'Applicatie') groep,
|
||||
k.ins_kenmerk_omschrijving
|
||||
FROM prs_perslid p,
|
||||
prs_v_perslid_fullnames pf,
|
||||
prs_srtperslid sp,
|
||||
(SELECT ins_deel_key, fac.safe_to_number (ins_kenmerkdeel_waarde) ins_kenmerkdeel_waarde
|
||||
FROM ins_kenmerkdeel
|
||||
WHERE ins_kenmerk_key = 21) kdf,
|
||||
ins_deel df,
|
||||
(SELECT ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key
|
||||
FROM ins_deelkoppeling
|
||||
WHERE ins_deelkoppeling_verwijder IS NULL
|
||||
UNION
|
||||
SELECT ins_deelkoppeling_naar_key, ins_deelkoppeling_van_key
|
||||
FROM ins_deelkoppeling
|
||||
WHERE ins_deelkoppeling_verwijder IS NULL) dk,
|
||||
ins_deel dr,
|
||||
ins_kenmerkdeel kde,
|
||||
ins_kenmerk k,
|
||||
ins_srtdeel sd,
|
||||
prs_v_afdeling a
|
||||
WHERE p.prs_perslid_verwijder IS NULL
|
||||
AND p.prs_perslid_key = pf.prs_perslid_key
|
||||
AND p.prs_afdeling_key = a.prs_afdeling_key
|
||||
AND a.prs_bedrijf_key = 41 -- OFW
|
||||
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
|
||||
AND sp.prs_srtperslid_key = kdf.ins_kenmerkdeel_waarde(+)
|
||||
AND kdf.ins_deel_key = df.ins_deel_key(+)
|
||||
AND df.ins_deel_key = dk.ins_deelkoppeling_van_key(+)
|
||||
AND dk.ins_deelkoppeling_naar_key = dr.ins_deel_key(+)
|
||||
AND dr.ins_deel_key = kde.ins_deel_key(+)
|
||||
AND kde.ins_kenmerk_key = k.ins_kenmerk_key(+)
|
||||
AND dr.ins_srtdeel_key = sd.ins_srtdeel_key(+);
|
||||
------ payload end ------
|
||||
|
||||
SET DEFINE OFF
|
||||
|
||||
Reference in New Issue
Block a user