692 lines
25 KiB
Plaintext
692 lines
25 KiB
Plaintext
#ifdef RES
|
|
/*
|
|
* $Revision: 79 $
|
|
* $Modtime: 15-01-07 14:53 $
|
|
*/
|
|
|
|
#include "comsql.h"
|
|
|
|
CREATE_TRIGGER(res_t_res_disc_params_b_iu)
|
|
BEFORE INSERT OR UPDATE ON res_disc_params
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_disc_params_key, res_s_res_disc_params_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_reservering_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_reservering
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_reservering_key, res_s_res_reservering_key);
|
|
SET_VERWIJDER_CHILDREN(res_rsv_ruimte, res_reservering_key, res_reservering_verwijder,res_rsv_ruimte_verwijder,res_reservering);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_ruimte_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_ruimte
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_ruimte_key, res_s_res_ruimte_key);
|
|
UPDATE_UPPER(res_ruimte_nr, res_ruimte_upper,res_ruimte);
|
|
IF :new.res_ruimte_verwijder IS NOT NULL AND :old.res_ruimte_verwijder IS NULL THEN
|
|
DECLARE dummy CHAR;
|
|
BEGIN
|
|
-- Een res_ruimte mag niet inactief worden als er nog *openstaande* reserveringen zijn...
|
|
SELECT 'x' INTO dummy
|
|
FROM res_v_aanwezigrsv_ruimte rr, res_ruimte_opstelling ro
|
|
WHERE rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
|
|
AND ro.res_ruimte_key = :old.res_ruimte_key
|
|
AND rr.res_status_bo_key IN (2,3,4,7);
|
|
raise_application_error(-20000,'res_m035');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN
|
|
raise_application_error(-20000,'res_m035');
|
|
END;
|
|
-- inactivate corresponding reference(s) to alg_ruimte
|
|
BEGIN
|
|
UPDATE res_alg_ruimte
|
|
SET res_alg_ruimte_verwijder = :new.res_ruimte_verwijder
|
|
WHERE res_ruimte_key = :old.res_ruimte_key
|
|
AND res_alg_ruimte_verwijder IS NULL;
|
|
END;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_alg_ruimte_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_alg_ruimte
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_alg_ruimte_key, res_s_alg_ruimte_key);
|
|
IF :NEW.res_alg_ruimte_verwijder IS NOT NULL AND :OLD.res_alg_ruimte_verwijder IS NULL
|
|
THEN
|
|
DECLARE
|
|
cntafspr NUMBER;
|
|
BEGIN
|
|
SELECT COUNT (*)
|
|
INTO cntafspr
|
|
FROM bez_afspraak ba
|
|
WHERE ba.res_rsv_ruimte_key IN (
|
|
SELECT rrr.res_rsv_ruimte_key
|
|
FROM res_rsv_ruimte rrr, res_ruimte_opstelling rro
|
|
WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
|
|
AND rro.res_ruimte_key = :NEW.res_ruimte_key
|
|
AND ba.alg_onrgoed_keys = :OLD.alg_ruimte_key
|
|
AND ba.bez_afspraak_datum > SYSDATE);
|
|
|
|
IF cntafspr > 0
|
|
THEN
|
|
raise_application_error (-20000,
|
|
'res_m583 Er zijn nog toekomstige afspraken die naar deze ruimte verwijzen.'
|
|
);
|
|
END IF;
|
|
END;
|
|
END IF;
|
|
IF :NEW.alg_ruimte_key <> :OLD.alg_ruimte_key
|
|
THEN
|
|
UPDATE bez_afspraak ba
|
|
SET alg_onrgoed_keys = :NEW.alg_ruimte_key
|
|
WHERE ba.res_rsv_ruimte_key IN (
|
|
SELECT rrr.res_rsv_ruimte_key
|
|
FROM res_rsv_ruimte rrr, res_ruimte_opstelling rro
|
|
WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
|
|
AND rro.res_ruimte_key = :NEW.res_ruimte_key)
|
|
AND ba.alg_onrgoed_keys = :OLD.alg_ruimte_key;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_opstelling_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_opstelling
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_opstelling_key, res_s_res_opstelling_key);
|
|
UPDATE_UPPER(res_opstelling_omschrijving, res_opstelling_upper,res_opstelling);
|
|
CHECK_NOG_REFERENCES(res_opstelling, res_opstelling_verwijder, res_ruimte_opstelling,
|
|
res_opstelling_key, 'res_m038');
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
END;
|
|
/
|
|
|
|
|
|
CREATE_TRIGGER(res_t_res_ruimte_opstel_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_ruimte_opstelling
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_ruimte_opstel_key, res_s_res_ruimte_opstel_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_deel_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_deel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_deel_key, res_s_res_deel_key);
|
|
UPDATE_AANMAAKDATUM(res_deel, res_deel_aanmaak);
|
|
IF :new.res_deel_verwijder IS NOT NULL AND :old.res_deel_verwijder IS NULL
|
|
THEN
|
|
DECLARE
|
|
lCount NUMBER;
|
|
BEGIN
|
|
-- Een res_deel mag niet inactief worden als er nog *openstaande* reserveringen zijn.
|
|
SELECT COUNT(*)
|
|
INTO lCount
|
|
FROM res_v_aanwezigrsv_deel rs
|
|
WHERE rs.res_deel_key = :old.res_deel_key
|
|
AND rs.res_status_bo_key IN (2,3,4,7);
|
|
IF lCount > 0 THEN
|
|
APPLICATION_ERROR_GOTO(-20000,'res_m034');
|
|
END IF;
|
|
END;
|
|
END IF;
|
|
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_artikel_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_artikel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_AANMAAKDATUM(res_artikel, res_artikel_aanmaak);
|
|
UPDATE_PRIMARY_KEY(res_artikel_key, res_s_res_artikel_key);
|
|
IF :new.res_artikel_verwijder IS NOT NULL AND :old.res_artikel_verwijder IS NULL
|
|
THEN
|
|
DECLARE
|
|
lCount NUMBER;
|
|
BEGIN
|
|
-- Een res_deel mag niet inactief worden als er nog *openstaande* reserveringen zijn...
|
|
SELECT COUNT(*)
|
|
INTO lCount
|
|
FROM res_v_aanwezigrsv_artikel rs
|
|
WHERE rs.res_artikel_key = :old.res_artikel_key
|
|
AND rs.res_status_bo_key IN (2,3,4,7);
|
|
IF lCount > 0 THEN
|
|
APPLICATION_ERROR_GOTO(-20000,'res_m033');
|
|
END IF;
|
|
END;
|
|
END IF;
|
|
#ifdef MS_SQL
|
|
lerror:
|
|
#endif
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_rsv_artikel_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_rsv_artikel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF :old.res_status_bo_key=6 THEN raise_application_error(-20000, 'Reserveringsgegevens zijn verwerkt; wijzigen is niet meer toegestaan.'); END IF;
|
|
UPDATE_PRIMARY_KEY(res_rsv_artikel_key, res_s_res_rsv_artikel_key);
|
|
IF :new.res_status_bo_key = 6 AND :old.res_status_bo_key <> 6 AND :new.res_rsv_artikel_verwerkt IS NULL THEN
|
|
:new.res_rsv_artikel_verwerkt := SYSDATE;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_rsv_deel_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_rsv_deel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF :old.res_status_bo_key=6 THEN raise_application_error(-20000, 'Reserveringsgegevens zijn verwerkt; wijzigen is niet meer toegestaan.'); END IF;
|
|
UPDATE_PRIMARY_KEY(res_rsv_deel_key, res_s_res_rsv_deel_key);
|
|
IF :new.res_status_bo_key = 6 AND :old.res_status_bo_key <> 6 AND :new.res_rsv_deel_verwerkt IS NULL THEN
|
|
:new.res_rsv_deel_verwerkt := SYSDATE;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_cyclus_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_cyclus
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_cyclus_key, res_s_res_cyclus);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_activiteit_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_activiteit
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_activiteit_key, res_s_res_activiteit_key);
|
|
UPDATE_UPPER(res_activiteit_omschrijving, res_activiteit_upper,res_activiteit);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_refsrtkenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE ON res_refsrtkenmerk
|
|
FOR EACH ROW
|
|
DECLARE
|
|
ObjectType USER_OBJECTS.OBJECT_TYPE%TYPE;
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_refsrtkenmerk_key, res_s_res_refsrtkenmerk_key);
|
|
UPDATE_UPPER(res_refsrtkenmerk_omschrijving, res_refsrtkenmerk_upper,res_refsrtkenmerk);
|
|
UPDATE_AANMAAKDATUM(res_refsrtkenmerk, res_refsrtkenmerk_aanmaak);
|
|
--
|
|
-- Controleer of de ingevulde tablenaam, kolomnaam en kolomtxt
|
|
-- wel bestaan. Controle moet ook gebeuren als de omschrijving
|
|
-- is gewijzigd; de objectnaam is dan hetzelfde.
|
|
--
|
|
BEGIN
|
|
SELECT object_type
|
|
INTO ObjectType
|
|
FROM USER_OBJECTS
|
|
WHERE object_name = UPPER(:new.res_refsrtkenmerk_objectnaam);
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN ObjectType := NULL;
|
|
END;
|
|
--
|
|
IF ObjectType IS NULL
|
|
THEN
|
|
raise_application_error(-20000, 'res_m244');
|
|
ELSIF ObjectType = 'TABLE'
|
|
OR ObjectType = 'VIEW'
|
|
THEN
|
|
-- Bij een TABLE of VIEW staan de kolommen in USER_TAB_COLUMNS
|
|
-- Controleer of deze KOLOMNAAM en KOLOMTXT bestaan.
|
|
--
|
|
DECLARE
|
|
Dummy VARCHAR2(30);
|
|
BEGIN
|
|
SELECT column_name
|
|
INTO Dummy
|
|
FROM USER_TAB_COLUMNS
|
|
WHERE table_name = UPPER(:new.res_refsrtkenmerk_objectnaam)
|
|
AND column_name = UPPER(:new.res_refsrtkenmerk_kolomnaam)
|
|
AND data_type = 'NUMBER';
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'res_m245');
|
|
END;
|
|
--
|
|
DECLARE
|
|
Dummy VARCHAR2(30);
|
|
BEGIN
|
|
SELECT column_name
|
|
INTO Dummy
|
|
FROM USER_TAB_COLUMNS
|
|
WHERE table_name = UPPER(:new.res_refsrtkenmerk_objectnaam)
|
|
AND column_name = UPPER(:new.res_refsrtkenmerk_kolomtxt)
|
|
AND data_type LIKE '%CHAR%';
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'res_m246');
|
|
END;
|
|
ELSIF ObjectType <> 'SYNONYM'
|
|
THEN
|
|
-- Bij een SYNONYM kan er niet gecontroleerd worden
|
|
-- of de ingevulde kolommen bestaan.
|
|
--
|
|
/* NULL;
|
|
ELSE */
|
|
raise_application_error(-20000, 'res_m244');
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_srtkenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE ON res_srtkenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_srtkenmerk_key, res_s_res_srtkenmerk_key);
|
|
UPDATE_UPPER(res_srtkenmerk_omschrijving, res_srtkenmerk_upper,res_srtkenmerk);
|
|
UPDATE_AANMAAKDATUM(res_srtkenmerk, res_srtkenmerk_aanmaak);
|
|
--
|
|
IF (:new.res_srtkenmerk_kenmerktype = 'C'
|
|
OR :new.res_srtkenmerk_kenmerktype = 'N')
|
|
AND :new.res_srtkenmerk_lengte IS NULL
|
|
THEN
|
|
raise_application_error(-20000, 'res_C_res_SRTKENMERK_LENGTE');
|
|
END IF;
|
|
--
|
|
IF :new.res_srtkenmerk_kenmerktype = 'N'
|
|
AND :old.res_srtkenmerk_key IS NOT NULL
|
|
THEN
|
|
IF :old.res_srtkenmerk_nmin <> :new.res_srtkenmerk_nmin
|
|
OR (:old.res_srtkenmerk_nmin IS NULL AND :new.res_srtkenmerk_nmin IS NOT NULL)
|
|
THEN
|
|
DECLARE
|
|
Dummy CHAR;
|
|
BEGIN
|
|
SELECT 'X'
|
|
INTO Dummy
|
|
FROM res_kenmerkwaarde
|
|
WHERE FAC.SAFE_TO_NUMBER(res_kenmerkreservering_waarde) < :new.res_srtkenmerk_nmin
|
|
AND res_kenmerk_key IN
|
|
(SELECT res_kenmerk_key
|
|
FROM res_kenmerk
|
|
WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key
|
|
);
|
|
raise_application_error(-20000, 'res_C_res_SRTKENMERK_MIN');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN raise_application_error(-20000, 'res_C_res_SRTKENMERK_MIN');
|
|
END;
|
|
END IF;
|
|
--
|
|
IF :old.res_srtkenmerk_nmax <> :new.res_srtkenmerk_nmax
|
|
OR (:old.res_srtkenmerk_nmax IS NULL AND :new.res_srtkenmerk_nmax IS NOT NULL)
|
|
THEN
|
|
DECLARE
|
|
Dummy CHAR;
|
|
BEGIN
|
|
SELECT 'X'
|
|
INTO Dummy
|
|
FROM res_kenmerkwaarde
|
|
WHERE FAC.SAFE_TO_NUMBER(res_kenmerkreservering_waarde) > :new.res_srtkenmerk_nmax
|
|
AND res_kenmerk_key IN
|
|
(SELECT res_kenmerk_key
|
|
FROM res_kenmerk
|
|
WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key
|
|
);
|
|
raise_application_error(-20000, 'res_C_res_SRTKENMERK_MAX');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN raise_application_error(-20000, 'res_C_res_SRTKENMERK_MAX');
|
|
END;
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_srtkenmerk_b_d)
|
|
BEFORE DELETE ON res_srtkenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF :old.res_srtkenmerk_systeem = 1
|
|
THEN
|
|
raise_application_error(-20003, 'RES_C_RES_SRTKENMERK_SYSTEEM');
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_rsv_ruimte_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_rsv_ruimte
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF :old.res_status_bo_key=6 THEN raise_application_error(-20000, 'Reserveringsgegevens zijn verwerkt; wijzigen is niet meer toegestaan.'); END IF;
|
|
UPDATE_PRIMARY_KEY(res_rsv_ruimte_key, res_s_res_rsv_ruimte_key);
|
|
BEGIN IF :new.res_rsv_ruimte_verwijder IS NOT NULL OR (:new.res_rsv_ruimte_verwijder IS NULL AND :old.res_rsv_ruimte_verwijder IS NOT NULL) THEN UPDATE res_rsv_artikel SET res_rsv_artikel_verwijder = :new.res_rsv_ruimte_verwijder WHERE res_rsv_artikel.res_rsv_ruimte_key = :new.res_rsv_ruimte_key AND res_rsv_artikel.res_rsv_artikel_verwijder IS NULL; END IF; END;
|
|
BEGIN IF :new.res_rsv_ruimte_verwijder IS NOT NULL OR (:new.res_rsv_ruimte_verwijder IS NULL AND :old.res_rsv_ruimte_verwijder IS NOT NULL) THEN UPDATE res_rsv_deel SET res_rsv_deel_verwijder = :new.res_rsv_ruimte_verwijder WHERE res_rsv_deel.res_rsv_ruimte_key = :new.res_rsv_ruimte_key AND res_rsv_deel.res_rsv_deel_verwijder IS NULL; END IF; END;
|
|
BEGIN IF :new.res_rsv_ruimte_verwijder IS NOT NULL THEN DELETE FROM bez_afspraak WHERE bez_afspraak.res_rsv_ruimte_key = :new.res_rsv_ruimte_key; END IF; END;
|
|
IF :new.res_status_bo_key = 6 AND :old.res_status_bo_key <> 6 AND :new.res_rsv_ruimte_verwerkt IS NULL THEN
|
|
:new.res_rsv_ruimte_verwerkt := SYSDATE;
|
|
END IF;
|
|
BEGIN IF :new.res_rsv_ruimte_host_key <> :old.res_rsv_ruimte_host_key THEN UPDATE bez_afspraak set bez_afspraak_host_key = :new.res_rsv_ruimte_host_key WHERE res_rsv_ruimte_key = :new.res_rsv_ruimte_key AND bez_afspraak_host_key IS NOT NULL; END IF; END;
|
|
BEGIN IF :new.res_rsv_ruimte_contact_key <> :old.res_rsv_ruimte_contact_key THEN UPDATE bez_afspraak set bez_afspraak_contact_key= :new.res_rsv_ruimte_contact_key WHERE res_rsv_ruimte_key =:new.res_rsv_ruimte_key; END IF; END;
|
|
END;
|
|
/
|
|
|
|
|
|
CREATE_TRIGGER(res_t_res_kenmerkwaarde_b_iu)
|
|
BEFORE INSERT OR UPDATE ON res_kenmerkwaarde
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_kenmerkwaarde_key, res_s_res_kenmerkwaarde_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_kenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE ON res_kenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- Een kenmerk mag niet verplicht worden gemaakt als er al
|
|
-- waarden ingevuld zijn en hij daarvoor niet verplicht was.
|
|
-- Dit is alleen bij wijzigen te controleren, doordat
|
|
-- de PrimaryKey niet NULL is.
|
|
--
|
|
IF :new.res_kenmerk_key IS NOT NULL
|
|
AND :new.res_kenmerk_verplicht IS NOT NULL
|
|
AND :old.res_kenmerk_verplicht IS NULL
|
|
THEN
|
|
DECLARE
|
|
Dummy CHAR;
|
|
BEGIN
|
|
SELECT 'X'
|
|
INTO Dummy
|
|
FROM res_kenmerkwaarde
|
|
WHERE res_kenmerk_key = :new.res_kenmerk_key;
|
|
raise_application_error(-20004, 'RES_C_RES_KENMERK_VERPLICHT0');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN raise_application_error(-20004, 'RES_C_RES_KENMERK_VERPLICHT0');
|
|
END;
|
|
END IF;
|
|
--
|
|
UPDATE_PRIMARY_KEY(res_kenmerk_key, res_s_res_kenmerk_key);
|
|
UPDATE_AANMAAKDATUM(res_kenmerk, res_kenmerk_aanmaak);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_srtartikel_og_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_srtartikel_onrgoed
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_srtartikel_onrgoed_key, res_s_res_srtartikel_og_key);
|
|
END;
|
|
/
|
|
|
|
/* For this moment we define the same notification event for all kinds of changes to a reservation */
|
|
//CREATE_TRIGGER(res_t_notificatie_reservering)
|
|
//AFTER INSERT OR UPDATE ON RES_RESERVERING
|
|
//FOR EACH ROW
|
|
//BEGIN
|
|
// _EXEC3(RES.Res_NotifyChange2User, :new.res_reservering_key, 'RESDEL', :new.res_rsv_ruimte_contact_key);
|
|
//END;
|
|
//
|
|
|
|
CREATE_TRIGGER(res_t_notificatie_rsv_ruimte)
|
|
AFTER INSERT OR UPDATE
|
|
ON res_rsv_ruimte
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- Proc+edure to create a notification to the enduser that requested the reservation
|
|
-- pReceiver is optional, if it's null we'll look for the receiver ourself.
|
|
-- Note that since 4.70 most info is at res_rsv_ruimte level, not res_reservering
|
|
-- Sometimes we delete previous notifications first
|
|
DECLARE
|
|
soms fac_srtnotificatie.fac_srtnotificatie_oms%TYPE;
|
|
scode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
lomschrijving res_rsv_ruimte.res_rsv_ruimte_omschrijving%TYPE;
|
|
lstatuswijziging BOOLEAN;
|
|
BEGIN
|
|
lstatuswijziging := FALSE;
|
|
|
|
IF :OLD.res_rsv_ruimte_key IS NULL
|
|
THEN
|
|
scode := 'RESNEW';
|
|
ELSIF :NEW.res_status_bo_key = 5 AND :OLD.res_status_bo_key <> 5
|
|
THEN
|
|
scode := 'RESAFM';
|
|
ELSIF :NEW.res_status_bo_key = 6 AND :OLD.res_status_bo_key <> 6
|
|
THEN
|
|
scode := 'RESVER';
|
|
ELSIF :NEW.res_status_fo_key = 1 AND :OLD.res_status_fo_key <> 1
|
|
THEN
|
|
scode := 'RESOPT';
|
|
lstatuswijziging := TRUE;
|
|
ELSIF :NEW.res_status_fo_key = 2 AND :OLD.res_status_fo_key <> 2
|
|
THEN
|
|
scode := 'RESBEV';
|
|
lstatuswijziging := TRUE;
|
|
ELSIF :NEW.res_status_fo_key = 4 AND :OLD.res_status_fo_key <> 4
|
|
THEN
|
|
scode := 'RESDEL';
|
|
lstatuswijziging := TRUE;
|
|
ELSIF :NEW.res_ruimte_opstel_key <> :OLD.res_ruimte_opstel_key
|
|
OR :NEW.res_rsv_ruimte_van <> :OLD.res_rsv_ruimte_van
|
|
OR :NEW.res_rsv_ruimte_tot <> :OLD.res_rsv_ruimte_tot
|
|
OR :NEW.res_activiteit_key <> :OLD.res_activiteit_key
|
|
OR :NEW.res_rsv_ruimte_bezoekers <> :OLD.res_rsv_ruimte_bezoekers
|
|
THEN
|
|
scode := 'RESUPD';
|
|
END IF;
|
|
|
|
IF scode IS NOT NULL
|
|
THEN
|
|
BEGIN
|
|
SELECT sn.fac_srtnotificatie_oms
|
|
INTO soms
|
|
FROM fac_srtnotificatie sn
|
|
WHERE sn.fac_srtnotificatie_code = scode AND sn.fac_srtnotificatie_mode > 0;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
-- Nothing to do
|
|
RETURN;
|
|
END;
|
|
|
|
-- We support substitution of placeholders in the messages
|
|
-- ##DESC## = res_rsv_ruimte_omschrijving
|
|
-- ##KEY## = res_reservering_key
|
|
IF INSTR2(soms, '#') > 0
|
|
THEN
|
|
soms :=
|
|
REPLACE (REPLACE (soms, '##DESC##', :NEW.res_rsv_ruimte_omschrijving),
|
|
'##KEY##',
|
|
:NEW.res_reservering_key
|
|
);
|
|
END IF;
|
|
|
|
-- Stuur notificatie naar de aanvrager
|
|
IF lstatuswijziging
|
|
THEN
|
|
-- eventuele voorgaande statuswijzigingen wissen
|
|
fac.clrnotifications ('RESDEL', :NEW.res_reservering_key);
|
|
fac.clrnotifications ('RESBEV', :NEW.res_reservering_key);
|
|
END IF;
|
|
|
|
fac.clrnotifications (scode, :NEW.res_reservering_key);
|
|
fac.putnotificationsrt (NULL,
|
|
:NEW.res_rsv_ruimte_contact_key,
|
|
scode,
|
|
:NEW.res_reservering_key,
|
|
soms,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL
|
|
);
|
|
END IF;
|
|
END;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_notificatie_rsv_deel)
|
|
AFTER INSERT OR UPDATE OR DELETE
|
|
ON res_rsv_deel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- Only 1 message is visible to that user. If new events occur that would issue a
|
|
-- new notification, the old message is deleted first.
|
|
-- Note that since 4.70 most info is at res_rsv_ruimte level, not res_reservering
|
|
DECLARE
|
|
soms fac_srtnotificatie.fac_srtnotificatie_oms%TYPE;
|
|
scode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
lomschrijving res_rsv_ruimte.res_rsv_ruimte_omschrijving%TYPE;
|
|
lreskey res_rsv_ruimte.res_reservering_key%TYPE;
|
|
lresrsvruimteomschrijving res_rsv_ruimte.res_rsv_ruimte_omschrijving%TYPE;
|
|
lresrsvruimtecontactkey res_rsv_ruimte.res_rsv_ruimte_contact_key%TYPE;
|
|
BEGIN
|
|
IF :new.res_rsv_ruimte_key IS NULL
|
|
THEN
|
|
-- parkeerplaats
|
|
RETURN;
|
|
END IF;
|
|
-- scode := 'RESNEW'; hoeft nooit genotificeerd te worden, daarvoor heeft een parent altijd al gezorgd
|
|
-- scode := 'RESAFM'; veronderstellen we ook hooguit interessant indien dat op hoger niveau gebeurt
|
|
-- scode := 'RESVER'; veronderstellen we ook hooguit interessant indien dat op hoger niveau gebeurt
|
|
-- scode := 'RESBEV'; hoeft nooit genotificeerd te worden, daarvoor heeft een parent altijd al gezorgd
|
|
-- scode := 'RESDEL'; hoeft nooit genotificeerd te worden, daarvoor heeft een parent altijd al gezorgd
|
|
IF :old.res_rsv_deel_levering IS NULL
|
|
OR :new.res_rsv_deel_levering <> :OLD.res_rsv_deel_levering
|
|
OR :new.res_rsv_deel_verwijder <> :OLD.res_rsv_deel_verwijder
|
|
OR :new.res_rsv_deel_key IS NULL
|
|
THEN
|
|
-- nb: een echte delete notificeren we dus niet echt; komt deze voor?
|
|
scode := 'RESUPD';
|
|
END IF;
|
|
IF scode IS NOT NULL
|
|
THEN
|
|
BEGIN
|
|
SELECT sn.fac_srtnotificatie_oms
|
|
INTO soms
|
|
FROM fac_srtnotificatie sn
|
|
WHERE sn.fac_srtnotificatie_code = scode AND sn.fac_srtnotificatie_mode > 0;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
-- Nothing to do
|
|
RETURN;
|
|
END;
|
|
BEGIN
|
|
SELECT res_reservering_key, res_rsv_ruimte_omschrijving, res_rsv_ruimte_contact_key
|
|
INTO lreskey,lresrsvruimteomschrijving, lresrsvruimtecontactkey
|
|
FROM res_rsv_ruimte
|
|
WHERE res_rsv_ruimte_key = NVL(:new.res_rsv_ruimte_key, :old.res_rsv_ruimte_key);
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
NULL;
|
|
END;
|
|
-- We support substitution of placeholders in the messages
|
|
-- ##DESC## = res_rsv_ruimte_omschrijving
|
|
-- ##KEY## = res_reservering_key
|
|
IF INSTR2(soms, '#') > 0
|
|
THEN
|
|
soms := REPLACE (REPLACE (soms, '##DESC##', lresrsvruimteomschrijving), '##KEY##', lreskey);
|
|
END IF;
|
|
fac.clrnotifications (scode, lreskey);
|
|
fac.putnotificationsrt (NULL, lresrsvruimtecontactkey, scode, lreskey, soms, NULL, NULL, NULL, NULL);
|
|
END IF;
|
|
END;
|
|
END;
|
|
/
|
|
|
|
/* Formatted on 2006/11/14 09:37 (Formatter Plus v4.8.5) */
|
|
CREATE_TRIGGER(res_t_notificatie_rsv_artikel)
|
|
AFTER INSERT OR UPDATE OR DELETE
|
|
ON res_rsv_artikel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- Only 1 message is visible to that user. If new events occur that would issue a
|
|
-- new notification, the old message is deleted first.
|
|
-- Note that since 4.70 most info is at res_rsv_ruimte level, not res_reservering
|
|
DECLARE
|
|
soms fac_srtnotificatie.fac_srtnotificatie_oms%TYPE;
|
|
scode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
lomschrijving res_rsv_ruimte.res_rsv_ruimte_omschrijving%TYPE;
|
|
lreskey res_rsv_ruimte.res_reservering_key%TYPE;
|
|
lresrsvruimteomschrijving res_rsv_ruimte.res_rsv_ruimte_omschrijving%TYPE;
|
|
lresrsvruimtecontactkey res_rsv_ruimte.res_rsv_ruimte_contact_key%TYPE;
|
|
BEGIN
|
|
-- scode := 'RESNEW'; hoeft nooit genotificeerd te worden, daarvoor heeft een parent altijd al gezorgd
|
|
-- scode := 'RESAFM'; veronderstellen we ook hooguit interessant indien dat op hoger niveau gebeurt
|
|
-- scode := 'RESVER'; veronderstellen we ook hooguit interessant indien dat op hoger niveau gebeurt
|
|
-- scode := 'RESBEV'; hoeft nooit genotificeerd te worden, daarvoor heeft een parent altijd al gezorgd
|
|
-- scode := 'RESDEL'; hoeft nooit genotificeerd te worden, daarvoor heeft een parent altijd al gezorgd
|
|
IF :OLD.res_rsv_artikel_aantal IS NULL
|
|
OR :new.res_rsv_artikel_aantal <> :OLD.res_rsv_artikel_aantal
|
|
OR :new.res_rsv_artikel_levering <> :OLD.res_rsv_artikel_levering
|
|
OR :new.res_rsv_artikel_verwijder <> :OLD.res_rsv_artikel_verwijder
|
|
OR :new.res_rsv_artikel_key IS NULL
|
|
THEN
|
|
-- nb: een echte delete notificeren we dus niet echt; komt deze voor?
|
|
scode := 'RESUPD';
|
|
END IF;
|
|
IF scode IS NOT NULL
|
|
THEN
|
|
BEGIN
|
|
SELECT sn.fac_srtnotificatie_oms
|
|
INTO soms
|
|
FROM fac_srtnotificatie sn
|
|
WHERE sn.fac_srtnotificatie_code = scode AND sn.fac_srtnotificatie_mode > 0;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
-- Nothing to do
|
|
RETURN;
|
|
END;
|
|
BEGIN
|
|
SELECT res_reservering_key, res_rsv_ruimte_omschrijving, res_rsv_ruimte_contact_key
|
|
INTO lreskey,lresrsvruimteomschrijving,lresrsvruimtecontactkey
|
|
FROM res_rsv_ruimte
|
|
WHERE res_rsv_ruimte_key = NVL(:new.res_rsv_ruimte_key,:old.res_rsv_ruimte_key);
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
NULL;
|
|
END;
|
|
-- We support substitution of placeholders in the messages
|
|
-- ##DESC## = res_rsv_ruimte_omschrijving
|
|
-- ##KEY## = res_reservering_key
|
|
IF INSTR2(soms, '#') > 0
|
|
THEN
|
|
soms := REPLACE (REPLACE (soms, '##DESC##', lresrsvruimteomschrijving), '##KEY##', lreskey);
|
|
END IF;
|
|
fac.clrnotifications (scode, lreskey);
|
|
fac.putnotificationsrt (NULL, lresrsvruimtecontactkey, scode, lreskey, soms, NULL, NULL, NULL, NULL);
|
|
END IF;
|
|
END;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(res_t_res_activiteitdisc_B_IU)
|
|
BEFORE INSERT OR UPDATE ON res_activiteitdiscipline
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(res_activiteitdiscipline_key, res_s_res_activiteitdisc_key);
|
|
END;
|
|
/
|
|
|
|
#endif // RES |