MDUX#81808 Inactiveren personen obv einddatum

svn path=/Customer/trunk/; revision=67908
This commit is contained in:
Sander Schepers
2025-02-07 14:36:36 +00:00
parent 05238a79ac
commit ad89c899aa

View File

@@ -5166,167 +5166,62 @@ END;
CREATE OR REPLACE PACKAGE MDUX
AS
PROCEDURE verwijderen_personen;
PROCEDURE inactiveren_personen;
END;
/
CREATE OR REPLACE PACKAGE BODY MDUX
AS
-- Dagelijks verwijderen personen (deze worden vanuit MISA via REST API aangemaakt/bijgehouden)
-- Een enddate bepaalt vanuit MISA (AFAS) dat de persoon verwijderd mag worden.
PROCEDURE verwijderen_personen
-- Dagelijks inactiveren personen (deze worden vanuit MISA via REST API aangemaakt/bijgehouden, einddatum is waar we naar kijken)
-- Een einddatum bepaalt vanuit MISA (AFAS) dat de persoon verwijderd mag worden.
PROCEDURE inactiveren_personen
AS
c_applname VARCHAR2 (50) := 'VERWIJDEREN_PERSONEN';
c_applname VARCHAR2 (50) := 'INACTIVEREN_PERSONEN';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_del NUMBER (10);
v_count_tot NUMBER (10) := 0;
-- Alle personen verwijderen die door Misa zijn aangeduid als oud-medewerkers (einddatum)
CURSOR c_del IS
-- Alle personen inactiveren die een einddatum < sysdate -14
CURSOR c_inactief IS
SELECT p.prs_perslid_key,
p.prs_perslid_nr,
'['
|| TO_CHAR (p.prs_perslid_key)
|| '|'
|| p.prs_perslid_email
|| '|'
|| pf.prs_perslid_naam_full
|| '] ' aanduiding,
COUNT (vp.prs_perslid_key) aant
FROM prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_v_verplichting_keys vp
pf.prs_perslid_naam_full,
p.prs_perslid_email,
p.prs_perslid_einddatum
FROM prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_nr IS NOT NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_einddatum IS NOT NULL
AND TRUNC (p.prs_perslid_einddatum) <= TRUNC (SYSDATE)
AND p.prs_perslid_apikey IS NULL
AND p.prs_perslid_key = vp.prs_perslid_key(+) -- Actuele verplichtingen?
GROUP BY p.prs_perslid_key,
p.prs_perslid_nr,
'['
|| TO_CHAR (p.prs_perslid_key)
|| '|'
|| p.prs_perslid_email
|| '|'
|| pf.prs_perslid_naam_full
|| '] '
ORDER BY 2;
CURSOR c_actief IS
SELECT p.prs_perslid_key,
p.prs_perslid_nr,
'['
|| TO_CHAR (p.prs_perslid_key)
|| '|'
|| p.prs_perslid_email
|| '|'
|| pf.prs_perslid_naam_full
|| '] ' aanduiding,
COUNT (vp.prs_perslid_key) aant
FROM prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_v_verplichting_keys vp
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_nr IS NOT NULL
AND TRUNC (p.prs_perslid_einddatum) <=
TRUNC (SYSDATE) - 14
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_inactief IS NOT NULL
AND (p.prs_perslid_einddatum IS NULL OR TRUNC (p.prs_perslid_einddatum) > TRUNC (SYSDATE))
AND p.prs_perslid_inactief IS NULL
AND p.prs_perslid_apikey IS NULL
AND p.prs_perslid_key = vp.prs_perslid_key(+) -- Actuele verplichtingen?
GROUP BY p.prs_perslid_key,
p.prs_perslid_nr,
'['
|| TO_CHAR (p.prs_perslid_key)
|| '|'
|| p.prs_perslid_email
|| '|'
|| pf.prs_perslid_naam_full
|| '] '
ORDER BY 2;
BEGIN
v_count_del := 0;
-- LET OP: DAILY-taak draait dagelijks na middernacht (begin van dag)
FOR rec IN c_del
FOR rec IN c_inactief
LOOP
BEGIN
IF rec.aant = 0
THEN
v_errormsg := 'Fout schonen collega';
v_aanduiding :=
'['
|| TO_CHAR (rec.prs_perslid_key)
|| '|'
|| rec.prs_perslid_email
|| '] ';
v_count_tot := v_count_tot + 1;
DELETE FROM
prs_collega
WHERE prs_perslid_key = rec.prs_perslid_key
OR prs_perslid_key_alt = rec.prs_perslid_key;
UPDATE prs_perslid
SET prs_perslid_inactief = SYSDATE
WHERE prs_perslid_key = rec.prs_perslid_key;
v_errormsg := 'Fout schonen perslid';
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = rec.prs_perslid_key;
v_count_del := v_count_del + 1;
IF MOD (v_count_del, 1000) = 0
THEN
COMMIT;
END IF;
ELSE
v_errormsg := 'Fout inactief maken perslid';
UPDATE prs_perslid
SET prs_perslid_inactief = SYSDATE
WHERE prs_perslid_key = rec.prs_perslid_key
AND prs_perslid_inactief IS NULL;
fac.writelog (
'VERWIJDEREN_PERSONEN',
'I',
rec.aanduiding
|| '/#Verplichtingen: '
|| TO_CHAR (rec.aant),
'Persoon niet geschoond');
END IF;
EXCEPTION
WHEN OTHERS
THEN -- Kennelijk heeft persoon toch nog ernstige verplichtingen!
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog ('VERWIJDEREN_PERSONEN',
'W',
rec.aanduiding || v_errormsg,
'Fout schonen persoon');
END;
fac.writelog (
c_applname,
'S',
'#Accounts geinactiveerd: ' || TO_CHAR (v_count_tot),
'');
END LOOP;
fac.writelog ('VERWIJDEREN_PERSONEN',
'S',
'Personen/#geschoond: ' || TO_CHAR (v_count_del),
'');
FOR rec IN c_actief
LOOP
BEGIN
v_errormsg := 'Fout weer actief maken perslid';
UPDATE prs_perslid
SET prs_perslid_inactief = NULL
WHERE prs_perslid_key = rec.prs_perslid_key;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
@@ -5346,19 +5241,15 @@ AS
END;
/
CREATE OR REPLACE PROCEDURE MDUX_DAILY
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- Dagelijks verwijderen personen (deze worden vanuit MISA via REST API aangemaakt/bijgehouden)
-- Een enddate bepaalt vanuit MISA (AFAS) dat de persoon verwijderd mag worden.
mdux.verwijderen_personen ();
mdux_huurautos_afmelden ();
-- Dagelijks inactiveren personen (deze worden vanuit MISA via REST API aangemaakt/bijgehouden obv einddatum)
-- Een enddate bepaalt vanuit MISA (AFAS) dat de persoon verwijderd mag worden.
mdux.inactiveren_personen ();
END;
/