APGR#61840 -- Fix voor toekennen autorisatiegroep na AD import

svn path=/Customer/trunk/; revision=46383
This commit is contained in:
Robin Stoker
2020-03-26 14:04:08 +00:00
parent 6ba82a9193
commit e90aa43f65

View File

@@ -189,224 +189,33 @@ END apgr_update_prs;
CREATE OR REPLACE PROCEDURE apgr_post_update_prs (p_import_key IN NUMBER)
AS
-- Personen die in de ADgroup "FMIS_Personeel" zitten moeten de autorisatie "Personeel"(4) krijgen (als ze dat al niet hebben).
-- Hetzelfde geldt voor de groepen "Frontend"(5), "Directie"(6), "Backoffice"(7) en "Applicatiebeheer"(8)
-- Persoon aan authorisatiegroep toevoegen als deze daar nog niet in zat.
CURSOR c_auth_personeel
CURSOR c_auth
IS
SELECT DISTINCT f.prs_perslid_key, f.prs_kenmerk1, DECODE (sub.aantal, NULL, 0, sub.aantal) aantal
FROM fac_imp_perslid f,
( SELECT DISTINCT prs_perslid_key, COUNT (prs_perslid_key) aantal
FROM fac_gebruikersgroep
GROUP BY prs_perslid_key) sub
WHERE f.prs_kenmerk1 LIKE '%Personeel%'
AND f.fac_import_key = p_import_key
AND f.prs_perslid_key IS NOT NULL
AND f.prs_perslid_key = sub.prs_perslid_key(+);
SELECT DISTINCT p.prs_perslid_key, f.fac_groep_key
FROM prs_perslid p,
fac_groep f,
fac_imp_perslid i,
fac_gebruikersgroep g
WHERE UPPER (i.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin)
AND UPPER (i.prs_kenmerk1) = f.fac_groep_upper
AND p.prs_perslid_verwijder IS NULL
AND NOT EXISTS
(SELECT 'x'
FROM fac_gebruikersgroep
WHERE prs_perslid_key = p.prs_perslid_key
AND fac_groep_key = f.fac_groep_key);
CURSOR c_auth_frontend
IS
SELECT DISTINCT f.prs_perslid_key, f.prs_kenmerk1, DECODE (sub.aantal, NULL, 0, sub.aantal) aantal
FROM fac_imp_perslid f,
( SELECT DISTINCT prs_perslid_key, COUNT (prs_perslid_key) aantal
FROM fac_gebruikersgroep
GROUP BY prs_perslid_key) sub
WHERE f.prs_kenmerk1 LIKE '%Front%'
AND f.fac_import_key = p_import_key
AND f.prs_perslid_key IS NOT NULL
AND f.prs_perslid_key = sub.prs_perslid_key(+);
CURSOR c_auth_directie
IS
SELECT DISTINCT f.prs_perslid_key, f.prs_kenmerk1, DECODE (sub.aantal, NULL, 0, sub.aantal) aantal
FROM fac_imp_perslid f,
( SELECT DISTINCT prs_perslid_key, COUNT (prs_perslid_key) aantal
FROM fac_gebruikersgroep
GROUP BY prs_perslid_key) sub
WHERE f.prs_kenmerk1 LIKE '%Directie%'
AND f.fac_import_key = p_import_key
AND f.prs_perslid_key IS NOT NULL
AND f.prs_perslid_key = sub.prs_perslid_key(+);
CURSOR c_auth_fmbackoffice
IS
SELECT DISTINCT f.prs_perslid_key, f.prs_kenmerk1, DECODE (sub.aantal, NULL, 0, sub.aantal) aantal
FROM fac_imp_perslid f,
( SELECT DISTINCT prs_perslid_key, COUNT (prs_perslid_key) aantal
FROM fac_gebruikersgroep
GROUP BY prs_perslid_key) sub
WHERE f.prs_kenmerk1 LIKE '%FMBack%'
AND f.fac_import_key = p_import_key
AND f.prs_perslid_key IS NOT NULL
AND f.prs_perslid_key = sub.prs_perslid_key(+);
CURSOR c_auth_ictbackoffice
IS
SELECT DISTINCT f.prs_perslid_key, f.prs_kenmerk1, DECODE (sub.aantal, NULL, 0, sub.aantal) aantal
FROM fac_imp_perslid f,
( SELECT DISTINCT prs_perslid_key, COUNT (prs_perslid_key) aantal
FROM fac_gebruikersgroep
GROUP BY prs_perslid_key) sub
WHERE f.prs_kenmerk1 LIKE '%ICTBack%'
AND f.fac_import_key = p_import_key
AND f.prs_perslid_key IS NOT NULL
AND f.prs_perslid_key = sub.prs_perslid_key(+);
CURSOR c_auth_fmbeheer
IS
SELECT DISTINCT prs_perslid_key, prs_kenmerk1
FROM fac_imp_perslid
WHERE prs_kenmerk1 LIKE '%FMApp%'
AND fac_import_key = p_import_key
AND prs_perslid_key IS NOT NULL
AND prs_perslid_key NOT IN (SELECT prs_perslid_key
FROM fac_gebruikersgroep
WHERE fac_groep_key = 27);
CURSOR c_auth_ictbeheer
IS
SELECT DISTINCT prs_perslid_key, prs_kenmerk1
FROM fac_imp_perslid
WHERE prs_kenmerk1 LIKE '%ICTApp%'
AND fac_import_key = p_import_key
AND prs_perslid_key IS NOT NULL
AND prs_perslid_key NOT IN (SELECT prs_perslid_key
FROM fac_gebruikersgroep
WHERE fac_groep_key = 27);
BEGIN
IF sysdate = sysdate -1
THEN
-- plaats personen in de juiste autorisatie groepen
FOR rec IN c_auth_personeel
LOOP
BEGIN
-- Nog geen bestaand persoon? Dan record toevoegen
IF rec.aantal = 0
THEN
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 23);
END IF;
-- Al wel in een groep, dan reduceren naar 1 en de laatste omhangen naar Personeel
IF rec.aantal > 1
THEN
DELETE FAC_GEBRUIKERSGROEP
WHERE prs_perslid_key = rec.prs_perslid_key
AND fac_gebruikersgroep_key <
(SELECT MAX (fac_gebruikersgroep_key)
FROM fac_gebruikersgroep
WHERE prs_perslid_key = rec.prs_perslid_key);
UPDATE FAC_GEBRUIKERSGROEP
SET fac_groep_key = 23
WHERE prs_perslid_key = rec.prs_perslid_key;
END IF;
-- Persoon heeft nu 1 autorisatiegroep? Dan wordt deze omgehangen naar Personeel
UPDATE FAC_GEBRUIKERSGROEP
SET fac_groep_key = 23
WHERE prs_perslid_key = rec.prs_perslid_key AND rec.aantal = 1;
END;
END LOOP;
FOR rec IN c_auth_frontend
LOOP
BEGIN
-- Nog geen bestaand persoon? Dan record toevoegen
IF rec.aantal = 0
THEN
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 24);
END IF;
-- Persoon heeft nu 1 autorisatiegroep? Dan wordt deze vervangen door de AD import
UPDATE FAC_GEBRUIKERSGROEP
SET fac_groep_key = 24
WHERE prs_perslid_key = rec.prs_perslid_key
AND rec.aantal = 1;
END;
END LOOP;
FOR rec IN c_auth_directie
LOOP
BEGIN
-- Nog geen bestaand persoon? Dan record toevoegen
IF rec.aantal = 0
THEN
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 25);
END IF;
-- Persoon heeft nu 1 autorisatiegroep? Dan wordt deze vervangen door de AD import
UPDATE FAC_GEBRUIKERSGROEP
SET fac_groep_key = 25
WHERE prs_perslid_key = rec.prs_perslid_key
AND rec.aantal = 1;
END;
END LOOP;
FOR rec IN c_auth_fmbackoffice
LOOP
BEGIN
-- Nog geen bestaand persoon? Dan record toevoegen
IF rec.aantal = 0
THEN
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 26);
END IF;
-- Persoon heeft nu 1 autorisatiegroep? Dan wordt deze vervangen door de AD import
UPDATE FAC_GEBRUIKERSGROEP
SET fac_groep_key = 26
WHERE prs_perslid_key = rec.prs_perslid_key
AND rec.aantal = 1;
END;
END LOOP;
FOR rec IN c_auth_ictbackoffice
LOOP
BEGIN
-- Nog geen bestaand persoon? Dan record toevoegen
IF rec.aantal = 0
THEN
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 41);
END IF;
-- Persoon heeft nu 1 autorisatiegroep? Dan wordt deze vervangen door de AD import
UPDATE FAC_GEBRUIKERSGROEP
SET fac_groep_key = 41
WHERE prs_perslid_key = rec.prs_perslid_key
AND rec.aantal = 1;
END;
END LOOP;
FOR rec IN c_auth_fmbeheer
LOOP
BEGIN
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 27);
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 26);
END;
END LOOP;
FOR rec IN c_auth_ictbeheer
LOOP
BEGIN
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 27);
INSERT INTO FAC_GEBRUIKERSGROEP (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, 41);
END;
END LOOP;
COMMIT;
END IF;
END;
BEGIN
FOR rec IN c_auth
LOOP
BEGIN
INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
VALUES (rec.prs_perslid_key, rec.fac_groep_key);
END;
END LOOP;
END;
/
-- Import van statusupdates en kosten uit ESIS voor opdrachten van Explora EST