#ifdef BEZ // 03-11-2000 PF /* $Revision: 16 $ * $Modtime: 15-01-07 15:21 $ */ #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. 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 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, lreceiver, 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 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