FCLT#59433 Harder voorkomen dat _FACILITOR wordt verwijderd
svn path=/Database/trunk/; revision=44517
This commit is contained in:
209
PRS/PRS_TRI.SRC
209
PRS/PRS_TRI.SRC
@@ -123,10 +123,10 @@ BEGIN
|
||||
THEN
|
||||
-- Zet de waarde weer terug alsof er niets gewijzigd is.
|
||||
:new.prs_perslid_oslogin := :old.prs_perslid_oslogin;
|
||||
:new.prs_perslid_oslogin2 := :new.prs_perslid_oslogin2;
|
||||
:new.prs_perslid_oslogin2 := :old.prs_perslid_oslogin2;
|
||||
ELSE
|
||||
UPDATE_UPPER(prs_perslid_oslogin, prs_perslid_oslogin,prs_perslid);
|
||||
UPDATE_UPPER(prs_perslid_oslogin2, prs_perslid_oslogin2,prs_perslid);
|
||||
:new.prs_perslid_oslogin := UPPER(:new.prs_perslid_oslogin);
|
||||
:new.prs_perslid_oslogin2 := UPPER(:new.prs_perslid_oslogin2);
|
||||
END IF;
|
||||
UPDATE_AANMAAKDATUM(prs_perslid, prs_perslid_aanmaak);
|
||||
-- If this perslid belongs to the primary company of an xd-environment
|
||||
@@ -150,114 +150,115 @@ BEGIN
|
||||
NULL; -- persoon hoort niet bij de serviceorganisatie
|
||||
END;
|
||||
END IF;
|
||||
IF ( :new.prs_perslid_verwijder IS NOT NULLDATUM
|
||||
AND :old.prs_perslid_verwijder IS NULLDATUM
|
||||
AND ( BITAND(:old.prs_perslid_flags,32) = 32
|
||||
IF (:new.prs_perslid_verwijder IS NOT NULLDATUM AND :old.prs_perslid_verwijder IS NULLDATUM)
|
||||
THEN
|
||||
IF ( BITAND(:old.prs_perslid_flags,32) = 32
|
||||
OR BITAND(:new.prs_perslid_flags,32) = 32
|
||||
)
|
||||
)
|
||||
THEN
|
||||
:new.prs_perslid_verwijder := :old.prs_perslid_verwijder;
|
||||
ELSE
|
||||
DECLARE
|
||||
dummy VARCHAR2(1);
|
||||
BEGIN
|
||||
-- Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
|
||||
-- uitvoerende deze PERSLID.
|
||||
SELECT 'X'
|
||||
INTO dummy
|
||||
FROM mld_opdr MLD_O
|
||||
WHERE MLD_O.mld_statusopdr_key IN (5, 8)
|
||||
AND MLD_O.mld_uitvoerende_keys = :new.prs_perslid_key;
|
||||
APPLICATION_ERROR_GOTO(-20000, 'prs_m085');
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN NULL;
|
||||
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000, 'prs_m085');
|
||||
END;
|
||||
THEN
|
||||
-- Persoon mag niet verwijderd worden omdat flagbit=32 aan staat.
|
||||
:new.prs_perslid_verwijder := :old.prs_perslid_verwijder;
|
||||
ELSE
|
||||
DECLARE
|
||||
dummy VARCHAR2(1);
|
||||
BEGIN
|
||||
-- Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
|
||||
-- uitvoerende deze PERSLID.
|
||||
SELECT 'X'
|
||||
INTO dummy
|
||||
FROM mld_opdr MLD_O
|
||||
WHERE MLD_O.mld_statusopdr_key IN (5, 8)
|
||||
AND MLD_O.mld_uitvoerende_keys = :new.prs_perslid_key;
|
||||
APPLICATION_ERROR_GOTO(-20000, 'prs_m085');
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN NULL;
|
||||
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000, 'prs_m085');
|
||||
END;
|
||||
|
||||
DECLARE
|
||||
dummy VARCHAR2(1);
|
||||
BEGIN
|
||||
-- Persoon mag alleen verwijderd worden als deze geen objecten meer in het bezit heeft.
|
||||
-- Dit geldt alleen voor objecten die 'van de organisatie' zijn, d.i.
|
||||
-- ins_discipline_min_level <> 3. Deze mocht de gebruiker zelf bijhouden
|
||||
SELECT 'x'
|
||||
INTO dummy
|
||||
FROM ins_v_aanwezigdeel D, ins_tab_discipline DI
|
||||
WHERE ins_alg_ruimte_type = 'P'
|
||||
AND ins_alg_ruimte_key = :old.prs_perslid_key
|
||||
AND DI.ins_discipline_key = D.ins_discipline_key
|
||||
AND DI.ins_discipline_min_level <> 3;
|
||||
APPLICATION_ERROR_GOTO(-20000,'prs_m175');
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN NULL;
|
||||
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'prs_m175');
|
||||
END;
|
||||
DECLARE
|
||||
dummy VARCHAR2(1);
|
||||
BEGIN
|
||||
-- Persoon mag alleen verwijderd worden als deze geen objecten meer in het bezit heeft.
|
||||
-- Dit geldt alleen voor objecten die 'van de organisatie' zijn, d.i.
|
||||
-- ins_discipline_min_level <> 3. Deze mocht de gebruiker zelf bijhouden
|
||||
SELECT 'x'
|
||||
INTO dummy
|
||||
FROM ins_v_aanwezigdeel D, ins_tab_discipline DI
|
||||
WHERE ins_alg_ruimte_type = 'P'
|
||||
AND ins_alg_ruimte_key = :old.prs_perslid_key
|
||||
AND DI.ins_discipline_key = D.ins_discipline_key
|
||||
AND DI.ins_discipline_min_level <> 3;
|
||||
APPLICATION_ERROR_GOTO(-20000,'prs_m175');
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND THEN NULL;
|
||||
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR_GOTO(-20000,'prs_m175');
|
||||
END;
|
||||
|
||||
-- Hierna kan het verwijderen niet meer falen
|
||||
BEGIN
|
||||
-- Ja, je zou zeggen dat dit een zaak is van prs_perslidwerkplek, maar
|
||||
-- dat is toch niet zo. Bovendien krijg je dan nare mutating trigger errors.
|
||||
-- Alleen vaste werkplekken, geen flexplekken
|
||||
IF fac.getsetting ('prs_werkplek_implicit') = 1
|
||||
THEN
|
||||
DELETE FROM prs_werkplek
|
||||
WHERE prs_werkplek_key IN (SELECT prs_werkplek_key
|
||||
FROM prs_perslidwerkplek
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key)
|
||||
AND prs_werkplek_type = 0;
|
||||
-- Deze delete cascadeert naar de werkplekbezetting door, gooit die dus ook weg
|
||||
-- Let wel: de werkplekken blijven helaas wel bestaan
|
||||
ELSE
|
||||
-- Bij expliciet gooien wij de bezetting weg en blijft de werkplek leeg achter
|
||||
DELETE FROM prs_perslidwerkplek
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
END IF;
|
||||
END;
|
||||
-- Verwijder mandateringen
|
||||
DELETE FROM prs_perslidkostenplaats
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
-- Hierna kan het verwijderen niet meer falen
|
||||
BEGIN
|
||||
-- Ja, je zou zeggen dat dit een zaak is van prs_perslidwerkplek, maar
|
||||
-- dat is toch niet zo. Bovendien krijg je dan nare mutating trigger errors.
|
||||
-- Alleen vaste werkplekken, geen flexplekken
|
||||
IF fac.getsetting ('prs_werkplek_implicit') = 1
|
||||
THEN
|
||||
DELETE FROM prs_werkplek
|
||||
WHERE prs_werkplek_key IN (SELECT prs_werkplek_key
|
||||
FROM prs_perslidwerkplek
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key)
|
||||
AND prs_werkplek_type = 0;
|
||||
-- Deze delete cascadeert naar de werkplekbezetting door, gooit die dus ook weg
|
||||
-- Let wel: de werkplekken blijven helaas wel bestaan
|
||||
ELSE
|
||||
-- Bij expliciet gooien wij de bezetting weg en blijft de werkplek leeg achter
|
||||
DELETE FROM prs_perslidwerkplek
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
END IF;
|
||||
END;
|
||||
-- Verwijder mandateringen
|
||||
DELETE FROM prs_perslidkostenplaats
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
|
||||
-- Verwijder contactpersoon-link
|
||||
UPDATE prs_contactpersoon
|
||||
SET prs_perslid_key = NULL
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
-- Verwijder contactpersoon-link
|
||||
UPDATE prs_contactpersoon
|
||||
SET prs_perslid_key = NULL
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
|
||||
-- Verwijder vervangingsregistraties heen en terug
|
||||
DELETE FROM prs_collega
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key OR prs_perslid_key_alt = :old.prs_perslid_key;
|
||||
-- Verwijder vervangingsregistraties heen en terug
|
||||
DELETE FROM prs_collega
|
||||
WHERE prs_perslid_key = :old.prs_perslid_key OR prs_perslid_key_alt = :old.prs_perslid_key;
|
||||
|
||||
BEGIN
|
||||
-- Pak mijn autorisaties af
|
||||
DELETE FROM FAC_GEBRUIKERSGROEP WHERE PRS_PERSLID_KEY = :old.prs_perslid_key;
|
||||
-- Ook een stukje veiligheid
|
||||
DELETE FROM fac_session WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
DELETE FROM aut_client_perslid WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
END;
|
||||
-- Tenslotte: ruim de objecten die ik zelf mocht beheren op
|
||||
-- Aandacht: zou nog steeds kunnen dat dit faalt, niet mekkeren, jammer dan
|
||||
BEGIN
|
||||
DELETE FROM INS_DEEL WHERE ins_deel_key IN
|
||||
(SELECT D.ins_deel_key
|
||||
FROM ins_deel D, ins_tab_discipline DI
|
||||
WHERE ins_alg_ruimte_type = 'P'
|
||||
AND ins_alg_ruimte_key = :old.prs_perslid_key
|
||||
AND DI.ins_discipline_key = D.ins_discipline_key
|
||||
AND DI.ins_discipline_min_level = 3);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN NULL;
|
||||
END;
|
||||
-- Wis alle authenticatiemogelijkheden
|
||||
:new.prs_perslid_oslogin := '';
|
||||
:new.prs_perslid_oslogin2 := '';
|
||||
:new.prs_perslid_apikey := NULL;
|
||||
-- And do what prs.setpassword(:new.prs_perslid_key, NULL) would do:
|
||||
:new.prs_perslid_salt := NULL;
|
||||
:new.prs_perslid_wachtwoord_hash := NULL;
|
||||
:new.prs_perslid_wachtwoord_exp := NULL;
|
||||
:new.prs_perslid_otpsecret := NULL;
|
||||
-- Wis profiel (dat kan anders nooit opgeruimd worden)
|
||||
:new.fac_profiel_key := NULL;
|
||||
BEGIN
|
||||
-- Pak mijn autorisaties af
|
||||
DELETE FROM FAC_GEBRUIKERSGROEP WHERE PRS_PERSLID_KEY = :old.prs_perslid_key;
|
||||
-- Ook een stukje veiligheid
|
||||
DELETE FROM fac_session WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
DELETE FROM aut_client_perslid WHERE prs_perslid_key = :old.prs_perslid_key;
|
||||
END;
|
||||
-- Tenslotte: ruim de objecten die ik zelf mocht beheren op
|
||||
-- Aandacht: zou nog steeds kunnen dat dit faalt, niet mekkeren, jammer dan
|
||||
BEGIN
|
||||
DELETE FROM INS_DEEL WHERE ins_deel_key IN
|
||||
(SELECT D.ins_deel_key
|
||||
FROM ins_deel D, ins_tab_discipline DI
|
||||
WHERE ins_alg_ruimte_type = 'P'
|
||||
AND ins_alg_ruimte_key = :old.prs_perslid_key
|
||||
AND DI.ins_discipline_key = D.ins_discipline_key
|
||||
AND DI.ins_discipline_min_level = 3);
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN NULL;
|
||||
END;
|
||||
-- Wis alle authenticatiemogelijkheden
|
||||
:new.prs_perslid_oslogin := '';
|
||||
:new.prs_perslid_oslogin2 := '';
|
||||
:new.prs_perslid_apikey := NULL;
|
||||
-- And do what prs.setpassword(:new.prs_perslid_key, NULL) would do:
|
||||
:new.prs_perslid_salt := NULL;
|
||||
:new.prs_perslid_wachtwoord_hash := NULL;
|
||||
:new.prs_perslid_wachtwoord_exp := NULL;
|
||||
:new.prs_perslid_otpsecret := NULL;
|
||||
-- Wis profiel (dat kan anders nooit opgeruimd worden)
|
||||
:new.fac_profiel_key := NULL;
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
IF fac.getsetting ('login_use_email') = 0
|
||||
|
||||
Reference in New Issue
Block a user