328 lines
11 KiB
Plaintext
328 lines
11 KiB
Plaintext
#ifdef PRJ
|
|
|
|
#include "comsql.h"
|
|
|
|
/* Revisie:
|
|
**
|
|
** 22-07-1999 EGR prj_t_prj_ruimte_B_IU, prj_t_prj_deel_b_iu, prj_t_prj_deel_s_b_iu,
|
|
** prj_t_prj_deel_s_a_iu, prj_t_prj_werkplek_b_iu aangemaakt.
|
|
** 20-04-1999 ABO Aangemaakt
|
|
*/
|
|
|
|
CREATE_TRIGGER(prj_t_prj_project_b_iu)
|
|
BEFORE INSERT OR UPDATE ON prj_project
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(prj_project_key
|
|
,prj_s_prj_project_key);
|
|
END;
|
|
/
|
|
CREATE_TRIGGER(cad_t_cad_tekening_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cad_tekening
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cad_tekening_key
|
|
,cad_s_cad_tekening_key);
|
|
UPDATE_AANMAAKDATUM(cad_tekening
|
|
,cad_tekening_aanmaak);
|
|
IF :new.prj_project_key IS NOT NULL
|
|
THEN
|
|
:new.cad_tekening_filenaam := :new.cad_tekening_key ||'.DWG';
|
|
END IF;
|
|
END;
|
|
/
|
|
CREATE_TRIGGER(prj_t_prj_ruimte_B_IU)
|
|
BEFORE INSERT OR UPDATE ON prj_ruimte
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(alg_ruimte_key
|
|
,alg_s_alg_onroerendgoed_keys);
|
|
CHECK_CADMUTATIE(alg_ruimte_verwijder
|
|
,alg_ruimte_getekend
|
|
,'alg_m245');
|
|
/*
|
|
** Als er een INV-deel bestaat in de te verwijderen ruimte
|
|
** dan mag de ruimte niet verwijderd worden.
|
|
*/
|
|
IF :new.alg_ruimte_verwijder IS NOT NULL
|
|
THEN
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
FROM prj_deel
|
|
WHERE ins_alg_ruimte_key = :new.alg_ruimte_key
|
|
AND prj_project_key = :new.prj_project_key
|
|
AND ins_alg_ruimte_type = 'R'
|
|
AND ins_deel_verwijder IS NULL;
|
|
APPLICATION_ERROR(-20000, 'prs_m055');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN APPLICATION_ERROR(-20000, 'prs_m055');
|
|
END;
|
|
END IF;
|
|
#ifdef PRS
|
|
/*
|
|
** Als de ruimte verwijderd wordt, dan moeten ook de bijbehorende
|
|
** werkplekken verwijderd worden.
|
|
*/
|
|
BEGIN
|
|
IF :new.alg_ruimte_verwijder IS NOT NULL
|
|
OR (:new.alg_ruimte_verwijder IS NULL AND :old.alg_ruimte_verwijder IS NOT NULL)
|
|
THEN
|
|
UPDATE prj_werkplek
|
|
SET prs_werkplek_verwijder = :new.alg_ruimte_verwijder
|
|
WHERE prj_werkplek.prs_alg_ruimte_key = :new.alg_ruimte_key
|
|
AND prj_werkplek.prj_project_key = :new.prj_project_key;
|
|
END IF;
|
|
END;
|
|
#endif // PRS
|
|
#ifdef INS
|
|
/*
|
|
** Als de ruimte verwijderd wordt, dan moeten ook de bijbehorende
|
|
** objecten verwijderd wordne.
|
|
*/
|
|
BEGIN
|
|
IF :new.alg_ruimte_verwijder IS NOT NULL
|
|
OR (:new.alg_ruimte_verwijder IS NULL AND :old.alg_ruimte_verwijder IS NOT NULL)
|
|
THEN
|
|
UPDATE prj_deel
|
|
SET ins_deel_verwijder = :new.alg_ruimte_verwijder
|
|
, ins_deel_getekend = :new.alg_ruimte_getekend
|
|
WHERE prj_deel.ins_alg_ruimte_key = :new.alg_ruimte_key
|
|
AND prj_deel.prj_project_key = :new.prj_project_key
|
|
AND ins_alg_ruimte_type <> 'W';
|
|
END IF;
|
|
END;
|
|
#endif // INS
|
|
END;
|
|
/
|
|
CREATE_TRIGGER(prj_t_prj_deel_S_B_IU)
|
|
BEFORE INSERT OR UPDATE ON prj_deel
|
|
DECLARE
|
|
Dummy BOOLEAN;
|
|
BEGIN
|
|
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL');
|
|
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_VERWIJDER');
|
|
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_CASCADE');
|
|
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_PROJECT');
|
|
END;
|
|
/
|
|
CREATE_TRIGGER(prj_t_prj_deel_B_IU)
|
|
BEFORE INSERT OR UPDATE ON prj_deel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
LOG('Begin PRJ_T_PRJ_DEEL_B_IU');
|
|
UPDATE_PRIMARY_KEY(ins_deel_key
|
|
,ins_s_ins_inst_keys);
|
|
CHECK_CADMUTATIE2(ins_deel_verwijder
|
|
,ins_deel_getekend
|
|
,ins_alg_ruimte_key
|
|
,'ins_m187');
|
|
/*
|
|
** Het zetten van de verwijderingsdatum gebeurt via FAC_P_FAC_SAVE_RESTORE-package. De key
|
|
** voor het verwijderen wordt vastgelegd als tabelnaam PRJ_DEEL_VERWIJDER.
|
|
** Verwijderen van INS_DEELKOPPELING-records gebeurt via FAC_P_FAC_SAVE_RESTORE-package.
|
|
** Hier hoeft alleen de PRJ_DEEL_KEY onthouden te worden.
|
|
** anders krijg je ORA-4094: Mutating-trigger-bla.
|
|
*/
|
|
IF :new.ins_deel_verwijder IS NOT NULL
|
|
THEN
|
|
DECLARE
|
|
Dummy BOOLEAN;
|
|
BEGIN
|
|
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL' , :new.ins_deel_key);
|
|
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL_VERWIJDER', :new.ins_deel_key);
|
|
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL_PROJECT' , :new.prj_project_key);
|
|
END;
|
|
END IF;
|
|
/*
|
|
** Vul het veld INS_DISCIPLINE van het huidige deel.
|
|
*/
|
|
IF :old.ins_srtdeel_key IS NULL
|
|
OR :old.ins_srtdeel_key <> :new.ins_srtdeel_key
|
|
OR :old.ins_discipline_key IS NULL
|
|
THEN
|
|
BEGIN
|
|
SELECT INS_D.ins_discipline_key
|
|
INTO :new.ins_discipline_key
|
|
FROM ins_srtdeel INS_SD
|
|
, ins_srtgroep INS_SG
|
|
, ins_tab_discipline INS_D
|
|
WHERE INS_SD.ins_srtdeel_key = :new.ins_srtdeel_key
|
|
AND INS_SD.ins_srtgroep_key = INS_SG.ins_srtgroep_key
|
|
AND INS_SG.ins_discipline_key = INS_D.ins_discipline_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN :new.ins_discipline_key := NULL;
|
|
END;
|
|
END IF;
|
|
/*
|
|
** Vul het veld INS_ALG_LOCATIE_KEY van het huidige deel
|
|
*/
|
|
IF :old.ins_alg_ruimte_key IS NULL
|
|
OR :old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
|
|
OR :new.ins_alg_locatie_key IS NULL
|
|
THEN
|
|
BEGIN
|
|
SELECT prj_project_locatie_key
|
|
INTO :new.ins_alg_locatie_key
|
|
FROM prj_project
|
|
WHERE prj_project_key = :new.prj_project_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN :new.ins_alg_locatie_key := NULL;
|
|
END;
|
|
END IF;
|
|
/*
|
|
** Bij INS_DEEL moet INS_ALG_RUIMTE_KEY ingevuld zijn
|
|
** en wel met ruimte, werkplek of terreinsector.
|
|
** Daarvoor moet ook het INS_ALG_RUIMTE_TYPE veld goed ingevuld zijn
|
|
** (met 'R' of 'W' of 'T').
|
|
** Dit geldt als INS_ALG_RUIMTE_KEY veranderd is of als er een
|
|
** nieuw record geinsert wordt.
|
|
*/
|
|
IF (:old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
|
|
OR :old.ins_alg_ruimte_key IS NULL)
|
|
THEN
|
|
IF :new.ins_alg_ruimte_type = 'W'
|
|
THEN
|
|
DECLARE
|
|
dummy NUMBER(10);
|
|
BEGIN
|
|
SELECT prs_werkplek_key
|
|
INTO dummy
|
|
FROM prj_v_aanwezigwerkplek
|
|
WHERE prs_werkplek_key = :new.ins_alg_ruimte_key
|
|
AND prj_project_key = :new.prj_project_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN APPLICATION_ERROR(-20000,'ins_m174');
|
|
END;
|
|
ELSIF :new.ins_alg_ruimte_type = 'R'
|
|
THEN
|
|
DECLARE
|
|
dummy NUMBER(10);
|
|
BEGIN
|
|
SELECT alg_ruimte_key
|
|
INTO dummy
|
|
FROM prj_v_aanwezigruimte
|
|
WHERE alg_ruimte_key = :new.ins_alg_ruimte_key
|
|
AND prj_project_key = :new.prj_project_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN APPLICATION_ERROR(-20000,'ins_m092');
|
|
END;
|
|
ELSIF :new.ins_alg_ruimte_type = 'T'
|
|
THEN
|
|
null;
|
|
/* terreinsector wordt nog niet gebuikt in project.
|
|
DECLARE
|
|
dummy NUMBER(10);
|
|
BEGIN
|
|
SELECT alg_terreinsector_key
|
|
INTO dummy
|
|
FROM prj_v_aanwezigterreinsector
|
|
WHERE alg_terreinsector_key = :new.ins_alg_ruimte_key
|
|
AND prj_project_key = :new.prj_project_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN APPLICATION_ERROR(-20000,'ins_m095');
|
|
END;
|
|
*/
|
|
ELSE
|
|
APPLICATION_ERROR(-20000, 'ins_m84');
|
|
END IF;
|
|
|
|
DECLARE
|
|
Dummy BOOLEAN;
|
|
BEGIN
|
|
Dummy := fac_p_fac_save_restore.SavePrimaryKey('PRJ_DEEL_CASCADE', :new.ins_deel_key);
|
|
END;
|
|
END IF;
|
|
LOG('Eind PRJ_T_PRJ_DEEL_B_IU');
|
|
END;
|
|
/
|
|
CREATE_TRIGGER(prj_t_prj_deel_S_A_IU)
|
|
AFTER INSERT OR UPDATE ON prj_deel
|
|
BEGIN
|
|
DECLARE
|
|
IndexNr NUMBER;
|
|
PrimaryKey NUMBER(10);
|
|
ProjectKey NUMBER(10);
|
|
Dummy BOOLEAN;
|
|
BEGIN
|
|
/* Zet de verwijderdatum voor PRJ_DEEL. */
|
|
IndexNr := 1;
|
|
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL', IndexNr);
|
|
ProjectKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_PROJECT',1);
|
|
WHILE PrimaryKey IS NOT NULL
|
|
LOOP
|
|
UPDATE prj_deel
|
|
SET ins_deel_verwijder = SYSDATE
|
|
WHERE ins_deel.ins_deel_parent_key = PrimaryKey
|
|
AND prj_project_key = ProjectKey
|
|
AND ins_deel_verwijder IS NULL;
|
|
IndexNr := IndexNr + 1;
|
|
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_VERWIJDER', IndexNr);
|
|
END LOOP;
|
|
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_VERWIJDER');
|
|
/*
|
|
** (onder)deel is verplaatst; dus ook de children naar die plaats.
|
|
*/
|
|
IndexNr := 1;
|
|
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_CASCADE', IndexNr);
|
|
WHILE PrimaryKey IS NOT NULL
|
|
LOOP
|
|
UPDATE prj_deel
|
|
SET (ins_alg_ruimte_key
|
|
, ins_alg_ruimte_type
|
|
, ins_alg_locatie_key) = (SELECT ins_alg_ruimte_key
|
|
, ins_alg_ruimte_type
|
|
, ins_alg_locatie_key
|
|
FROM prj_deel
|
|
WHERE ins_deel_key = PrimaryKey
|
|
AND prj_project_key = ProjectKey)
|
|
WHERE ins_deel.ins_deel_parent_key = PrimaryKey
|
|
AND prj_project_key = ProjectKey;
|
|
IndexNr := IndexNr + 1;
|
|
PrimaryKey := fac_p_fac_save_restore.GetPrimaryKey('PRJ_DEEL_CASCADE', IndexNr);
|
|
END LOOP;
|
|
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_CASCADE');
|
|
Dummy := fac_p_fac_save_restore.ResetSelectie('PRJ_DEEL_PROJECT');
|
|
END;
|
|
END;
|
|
/
|
|
CREATE_TRIGGER(prj_t_prj_werkplek_B_IU)
|
|
BEFORE INSERT OR UPDATE ON prj_werkplek
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(prs_werkplek_key
|
|
,prs_s_prs_werkplek_key);
|
|
CHECK_CADMUTATIE2(prs_werkplek_verwijder
|
|
,prs_werkplek_getekend
|
|
,prs_alg_ruimte_key
|
|
,'prs_m161');
|
|
#ifdef INS
|
|
BEGIN
|
|
IF :new.prs_werkplek_verwijder IS NOT NULL
|
|
OR (:new.prs_werkplek_verwijder IS NULL AND :old.prs_werkplek_verwijder IS NOT NULL)
|
|
THEN
|
|
UPDATE prj_deel
|
|
SET ins_deel_verwijder = :new.prs_werkplek_verwijder
|
|
, ins_deel_getekend = :new.prs_werkplek_getekend
|
|
WHERE prj_deel.ins_alg_ruimte_key = :new.prs_werkplek_key
|
|
AND prj_deel.prj_project_key = :new.prj_project_key
|
|
AND ins_alg_ruimte_type = 'W';
|
|
END IF;
|
|
END;
|
|
#endif // INS
|
|
END;
|
|
/
|
|
|
|
|
|
#endif // PRJ
|