Files
Database/BEZ/BEZ_TRI.SRC
Peter Feij ac183792b9 UWVA#12471
svn path=/Database/trunk/; revision=9506
2007-04-05 14:09:44 +00:00

243 lines
8.4 KiB
Plaintext

#ifdef BEZ // 03-11-2000 PF
/* $Revision: 21 $
* $Modtime: 5-04-07 16:08 $
*/
#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;
/
// Uitgangspunt: we notificeren op Afspraak, niet op bezoeker als het gaat om aanmelding etc
// We notificeren alleen op bezoeker als het gaat om binnenkomen en weggaan.
// Er is slechts 1 zo een notificatie per afspraak, bij nieuw weet je nog niets van de bezoekers
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
-- Er is niet noodzakelijk iets gewijzigd, maar we notificeren wel
-- (er is immers een update), zodat de namen van de bezoekers
-- kunnen worden getoond.
-- De noticaties gaat naar de contactpersoon
-- Voor bezoekrersafspraken bij een reservering notificeren we NIET
IF :NEW.res_rsv_ruimte_key IS NOT NULL
THEN
RETURN;
END IF;
scode := 'BEZMUT';
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 MIN(bez_afspraak_naam || DECODE ((SELECT COUNT (*)
FROM bez_bezoekers
WHERE bez_afspraak_key = :NEW.bez_afspraak_key), 1, '', ' c.s.'))
INTO lbezoek
FROM bez_bezoekers
WHERE bez_afspraak_key = :NEW.bez_afspraak_key;
-- 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
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.clrnotifications(scode, :NEW.bez_afspraak_key);
fac.putnotificationsrt (:NEW.prs_perslid_key,
:NEW.bez_afspraak_contact_key,
scode,
:NEW.bez_afspraak_key,
soms,
NULL,
NULL,
NULL,
NULL
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.clrnotifications (scode, :NEW.bez_afspraak_key);
END;
END IF;
END;
END;
/
CREATE_TRIGGER(bez_t_notificatie_afspraak_d)
AFTER DELETE
ON bez_afspraak
FOR EACH ROW
BEGIN
fac.clrnotifications('BEZ%', :OLD.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 COALESCE(bez_afspraak_host_key, 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;
-- Geen notificatie van wijzigingen als afspraak onder een reservering hangt;
-- Die reservering notificeert dan (meestal) wel
IF :OLD.bez_bezoekers_done IS NULL
AND :NEW.bez_bezoekers_done IS NOT NULL
THEN
scode := 'BEZDON';
ldatum := :NEW.bez_bezoekers_done;
ELSIF :OLD.bez_bezoekers_out IS NULL
AND :NEW.bez_bezoekers_out IS NOT NULL
THEN
scode := 'BEZOUT';
ldatum := :NEW.bez_bezoekers_out;
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;
fac.putnotificationsrt (lsender, lreceiver, scode, :NEW.bez_afspraak_key, soms, NULL, NULL, NULL, NULL);
END IF;
END;
END;
/
#endif // BEZ