diff --git a/MDUX/mdux.sql b/MDUX/mdux.sql index 2ca8a49bf..08e77ebf4 100644 --- a/MDUX/mdux.sql +++ b/MDUX/mdux.sql @@ -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; /