229 lines
7.8 KiB
Plaintext
229 lines
7.8 KiB
Plaintext
#ifdef BEZ // 03-11-2000 PF
|
|
|
|
/* $Revision: 11 $
|
|
* $Modtime: 27-11-06 22:56 $
|
|
*/
|
|
|
|
#include "comsql.h"
|
|
|
|
CREATE_TRIGGER(bez_t_bez_afspraak_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bez_afspraak
|
|
FOR EACH ROW
|
|
DECLARE dummy NUMBER;
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bez_afspraak_key,bez_s_bez_afspraak_key);
|
|
|
|
dummy := :new.bez_afspraak_key;
|
|
|
|
IF :new.bez_afspraak_contact_key IS NULL AND :new.prs_perslid_key IS NOT NULL THEN
|
|
#ifdef MS_SQL
|
|
update bez_afspraak set bez_afspraak_contact_key = prs_perslid_key
|
|
where bez_afspraak_key = @new__bez_afspraak_key;
|
|
#else
|
|
:new.bez_afspraak_contact_key := :new.prs_perslid_key;
|
|
#endif
|
|
END IF;
|
|
|
|
IF :new.bez_afspraak_host_key IS NULL AND :new.bez_afspraak_gastheer IS NULL THEN
|
|
#ifdef MS_SQL
|
|
update bez_afspraak set bez_afspraak_host_key = bez_afspraak_contact_key
|
|
where bez_afspraak_key = @new__bez_afspraak_key;
|
|
#else
|
|
:new.bez_afspraak_host_key := :new.bez_afspraak_contact_key;
|
|
#endif
|
|
END IF;
|
|
IF :new.bez_afspraak_host_key IS NOT NULL THEN
|
|
#ifdef MS_SQL
|
|
update bez_afspraak set bez_afspraak_gastheer =
|
|
(select SUBSTRING(prs_perslid_naam_full,1,50) FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key=:new.bez_afspraak_host_key)
|
|
where bez_afspraak_key = @new__bez_afspraak_key;
|
|
#else
|
|
SELECT SUBSTR(prs_perslid_naam_full,1,50)
|
|
INTO :new.bez_afspraak_gastheer FROM prs_v_perslid_fullnames_all
|
|
WHERE prs_perslid_key=:new.bez_afspraak_host_key;
|
|
#endif
|
|
END IF;
|
|
IF :new.alg_onrgoed_keys IS NOT NULL THEN
|
|
#ifdef MS_SQL
|
|
update bez_afspraak set bez_afspraak_ruimte =
|
|
(select SUBSTRING(alg_plaatsaanduiding,1,30) FROM alg_v_plaatsaanduiding_all WHERE alg_onroerendgoed_keys=:new.alg_onrgoed_keys)
|
|
where bez_afspraak_key = @new__bez_afspraak_key;
|
|
#else
|
|
SELECT SUBSTR(alg_plaatsaanduiding,1,30)
|
|
INTO :new.bez_afspraak_ruimte FROM alg_v_plaatsaanduiding_all
|
|
WHERE alg_onroerendgoed_keys=:new.alg_onrgoed_keys AND alg_onroerendgoed_type<> 'L';
|
|
#endif
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bez_t_bez_bezoekers_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bez_bezoekers
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bez_bezoekers_key,bez_s_bez_bezoekers_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bez_t_bez_actie_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bez_actie
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bez_actie_key,bez_s_bez_actie_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bez_t_notificatie_afspraak)
|
|
AFTER INSERT OR UPDATE
|
|
ON bez_afspraak
|
|
FOR EACH ROW
|
|
BEGIN
|
|
DECLARE
|
|
soms fac_srtnotificatie.fac_srtnotificatie_oms%TYPE;
|
|
scode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
lbezoek VARCHAR2 (50);
|
|
lreceiver prs_perslid.prs_perslid_key%TYPE;
|
|
BEGIN
|
|
-- Alleen registratie van globale mutaties; per bezoeker wordt ook genotificeerd
|
|
IF :OLD.bez_afspraak_datum <> :NEW.bez_afspraak_datum
|
|
OR :OLD.res_rsv_ruimte_key <> :NEW.res_rsv_ruimte_key
|
|
OR :OLD.alg_onrgoed_keys <> :NEW.alg_onrgoed_keys
|
|
THEN
|
|
scode := 'BEZMUT';
|
|
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
|
|
-- ##KEY## = ins_srtdiscipline_prefix+key+/+volgnr
|
|
-- ##NAAM## = volledige naam van de afmelder
|
|
IF INSTR2 (soms, '#') > 0
|
|
THEN
|
|
SELECT bez_afspraak_naam
|
|
|| DECODE ((SELECT COUNT (*)
|
|
FROM bez_bezoekers
|
|
WHERE bez_afspraak_key = :NEW.bez_afspraak_key),
|
|
1, '',
|
|
'...'
|
|
)
|
|
INTO lbezoek
|
|
FROM bez_bezoekers
|
|
WHERE bez_afspraak_key = :NEW.bez_afspraak_key;
|
|
|
|
soms :=
|
|
REPLACE (REPLACE (REPLACE (soms, '##NAAM##', lbezoek),
|
|
'##KEY##',
|
|
NUMBER_TO_CHAR (:NEW.bez_afspraak_key)
|
|
),
|
|
'##DATUM##',
|
|
DATE_TO_CHAR (:NEW.bez_afspraak_datum, 'DD-MM-YY HH:MI')
|
|
);
|
|
END IF;
|
|
|
|
fac.putnotificationsrt (:NEW.prs_perslid_key, lreceiver, scode, :NEW.bez_afspraak_key, soms, NULL);
|
|
END IF;
|
|
END;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bez_t_notificatie_afspraak_d)
|
|
AFTER DELETE
|
|
ON bez_afspraak
|
|
FOR EACH ROW
|
|
BEGIN
|
|
fac.clrnotifications('BEZ%', :NEW.bez_afspraak_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bez_t_notificatie_bezoekers)
|
|
AFTER INSERT OR UPDATE
|
|
ON bez_bezoekers
|
|
FOR EACH ROW
|
|
BEGIN
|
|
DECLARE
|
|
soms fac_srtnotificatie.fac_srtnotificatie_oms%TYPE;
|
|
scode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
lbezoek bez_bezoekers.bez_afspraak_naam%TYPE;
|
|
lreceiver prs_perslid.prs_perslid_key%TYPE;
|
|
lsender prs_perslid.prs_perslid_key%TYPE;
|
|
ldatum DATE;
|
|
BEGIN
|
|
SELECT bez_afspraak_contact_key, bez_afspraak_datum, prs_perslid_key
|
|
INTO lreceiver, ldatum, lsender
|
|
FROM bez_afspraak
|
|
WHERE bez_afspraak_key = :NEW.bez_afspraak_key;
|
|
|
|
IF :OLD.bez_bezoekers_key IS NULL
|
|
THEN
|
|
scode := 'BEZNEW';
|
|
ELSIF :OLD.bez_bezoekers_done IS NULL
|
|
AND :NEW.bez_bezoekers_done IS NOT NULL
|
|
THEN
|
|
scode := 'BEZDON';
|
|
ELSIF :OLD.bez_bezoekers_out IS NULL
|
|
AND :NEW.bez_bezoekers_out IS NOT NULL
|
|
THEN
|
|
scode := 'BEZOUT';
|
|
ELSE
|
|
-- update komt eigenlijk niet voor (vanuit de GUI), want er wordt altijd delete+insert uitgevoerd
|
|
scode := 'BEZUPD';
|
|
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
|
|
-- ##KEY## = ins_srtdiscipline_prefix+key+/+volgnr
|
|
-- ##NAAM## = volledige naam van de afmelder
|
|
IF INSTR2 (soms, '#') > 0
|
|
THEN
|
|
lbezoek := :NEW.bez_afspraak_naam;
|
|
soms :=
|
|
REPLACE (REPLACE (REPLACE (soms, '##NAAM##', lbezoek),
|
|
'##KEY##',
|
|
NUMBER_TO_CHAR (:NEW.bez_afspraak_key)
|
|
),
|
|
'##DATUM##',
|
|
DATE_TO_CHAR (ldatum, 'DD-MM-YY HH:MI')
|
|
);
|
|
END IF;
|
|
|
|
-- Note: de clear wist alle bezoekers bij deze afspraak, zodat er maar 1 regel overblijft.
|
|
-- Indien hierin de naam van de bezoeker staat, is er de verdenking dat er iets niet goed is gegaan
|
|
-- Alternatief is om de BEZNEW niet te notificeren, want reservering of afspraak doen dat al.
|
|
-- We kunnen hier (diep in de trigger) niet kijken of er nog meer bezoekers zijn bij deze afspraak.
|
|
fac.clrnotifications(scode, :NEW.bez_afspraak_key);
|
|
fac.putnotificationsrt (lsender, lreceiver, scode, :NEW.bez_afspraak_key, soms, NULL);
|
|
END IF;
|
|
END;
|
|
END;
|
|
/
|
|
|
|
#endif // BEZ
|