DPHM#89651 Import personen sheet custom update

svn path=/Customer/trunk/; revision=69937
This commit is contained in:
Betul Konakli
2025-08-06 14:43:11 +00:00
parent da090fff04
commit ce939814df

View File

@@ -46,6 +46,7 @@ AS
AND fi2.fac_import_app_key = fi1.fac_import_app_key
AND il2.fac_import_key > il1.fac_import_key);
CREATE OR REPLACE PROCEDURE dphm_import_prs (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
@@ -60,36 +61,19 @@ BEGIN
SET i.fac_imp_file_line = fac_imp_file_line || ';'
WHERE fac_import_key = p_import_key;
-- Functie-kolom toevoegen als 7e kolom en zetten op 'Employee' (want verplicht)!
UPDATE fac_imp_file i
SET i.fac_imp_file_line =
SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 6))
|| 'Employee'
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
-- Als Last Name is leeg (NULL), dan First Name = '-' en Last Name = First Name!
UPDATE fac_imp_file i
SET i.fac_imp_file_line =
'-;'
|| SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 1) - 1)
|| SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 2))
WHERE fac_import_key = p_import_key
AND fac_imp_file_index > 1
AND SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 1)
+ 1, INSTR (fac_imp_file_line, ';', 1, 2)
- INSTR (fac_imp_file_line, ';', 1, 1)
- 1) IS NULL;
-- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
--"First Name;Last Name;E-mail address;Windows ID;Organisation;Department"
-- 1 2 3 4 5 6 7 8
--"First Name;Last Name;E-mail address;Windows ID;Organisation;OrganisationCode;Functie;Leidinggevende"
prs.import_perslid (
p_import_key,
'0;0;0;0;0;0;5;2;0;1;'
|| '0;0;0;0;0;0;0;3;0;0;'
|| '7;4;0;0;0;0;6;0;0;0;'
'0;0;0;0;0;0;6;2;0;1;'
|| '0;0;0;0;0;0;0;3;0;4;'
|| '7;3;0;0;0;0;8;0;0;0;'
|| '0;0;0;0;0;0;0;0;0;0;'
|| '0;0;0;0;0;0',
'%First Name;Last Name;E-mail address;Windows ID;Organisation;Department%');
|| '0;0;0;0;0;0',
'%Voornaam;Achternaam;Mailadres;Personeelscode;Afdeling;Afdelingscode;Functie;Verant.LG;%');
-- Klantspecifieke aanpassingen.
@@ -114,6 +98,7 @@ AS
c_max_delta_percentage NUMBER (10) := 50; -- 50%!
v_count_prs_import NUMBER (10); -- #actieve personen na import!
v_count_prs_actual NUMBER (10); -- #actieve personen voor import!
v_prs_perslid_key NUMBER;
-- Let op! Personen die niet meer in dienst zijn -> niet in fac_imp_perslid!
-- Dubbele oslogins? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
@@ -130,17 +115,28 @@ AS
WHERE UPPER (i.prs_perslid_oslogin) =
UPPER (p.prs_perslid_oslogin))
ORDER BY 2, 1;
CURSOR c_verantw
IS
SELECT pp.prs_perslid_key,
p.prs_perslid_email,
p.prs_kenmerk1
FROM fac_imp_perslid p,
prs_perslid pp
WHERE p.fac_import_key=p_import_key
AND UPPER(pp.prs_perslid_email)=UPPER(p.prs_perslid_email);
BEGIN
-- Bepaal oslogin-match tussen FACILITOR en RECENT importbestand ofwel het aantal
-- actieve personen na import.
-- RECENT betekent niet meer dan een kwartiertje oud (14,4 minuten); dit voorkomt
-- dat - als er geen nieuw importbestand is aangeleverd - telkens dezelfde fouten
-- worden gerapporteerd (nl. op basis van een oud bestand in FAC_IMP_PERSLID).
--SELECT COUNT ( * )
-- INTO v_count_prs_import
-- FROM prs_v_aanwezigperslid p, fac_imp_perslid i
-- WHERE p.prs_perslid_oslogin IS NOT NULL
-- AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin);
SELECT COUNT ( * )
INTO v_count_prs_import
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_oslogin IS NOT NULL
AND UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin);
SELECT COUNT (DISTINCT prs_perslid_oslogin)
INTO v_count_prs_import
FROM fac_imp_perslid;
@@ -152,38 +148,64 @@ BEGIN
WHERE prs_perslid_oslogin IS NOT NULL;
/* ASTE#82955 Afsplitsing Astellas Meppel --> Delpharm het aantal zal veel minder zijn, dus deze controle tijdelijk eruit! */
IF (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) <
(100 - c_max_delta_percentage))
THEN
fac.imp_writelog (
p_import_key,
'E',
'Verschil tussen huidig aantal en te importeren aantal personen te groot; zie specificatie!',
'- max. verschilpercentage = ['
|| TO_CHAR (c_max_delta_percentage)
|| '%]'
|| CHR (13)
|| CHR (10)
|| '- #personen/import = ['
|| TO_CHAR (v_count_prs_import)
|| ']'
|| CHR (13)
|| CHR (10)
|| '- #personen/huidig = ['
|| TO_CHAR (v_count_prs_actual)
|| ']');
RETURN;
END IF;
-- IF (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) <
-- (100 - c_max_delta_percentage))
-- THEN
-- fac.imp_writelog (
-- p_import_key,
-- 'E',
-- 'Verschil tussen huidig aantal en te importeren aantal personen te groot; zie specificatie!',
-- '- max. verschilpercentage = ['
-- || TO_CHAR (c_max_delta_percentage)
-- || '%]'
-- || CHR (13)
-- || CHR (10)
-- || '- #personen/import = ['
-- || TO_CHAR (v_count_prs_import)
-- || ']'
-- || CHR (13)
-- || CHR (10)
-- || '- #personen/huidig = ['
-- || TO_CHAR (v_count_prs_actual)
-- || ']');
--
-- RETURN;
-- END IF;
-- Generieke update.
-- Match op 'e-mail'
prs.update_perslid (p_import_key, 'EMAIL', NULL);
-- Verwijder personen die niet meer in de import voorkomen.
-- Gaan we nu de verantwoordelijke ophalen en toevoegen aan de prs_perslid
FOR rec_verantw IN c_verantw
LOOP
BEGIN
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_perslid
WHERE UPPER(prs_perslid_email)=UPPER(rec_verantw.prs_kenmerk1)
AND prs_perslid_verwijder IS NULL
AND (prs_perslid_inactief IS NULL OR prs_perslid_inactief>SYSDATE);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_prs_perslid_key:=-1;
END;
IF v_prs_perslid_key>0
THEN
UPDATE prs_perslid
SET prs_perslid_key_verantw=v_prs_perslid_key
WHERE prs_perslid_key=rec_verantw.prs_perslid_key;
END IF;
END LOOP;
Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
LOOP
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END LOOP;
END dphm_update_prs;
/