#ifdef RES /* * $Revision$ * $Id$ */ AUDIT_BEGIN(res_disc_params) AUDIT_VALUE(res_disc_params, res_disc_params_preposttime) AUDIT_VALUE(res_disc_params, res_disc_params_notify) AUDIT_VALUE(res_disc_params, res_disc_params_kosten) AUDIT_VALUE(res_disc_params, res_disc_params_noti_dagen) AUDIT_VALUE(res_disc_params, res_disc_params_expire_dagen) AUDIT_VALUE(res_disc_params, res_disc_params_expire_tijd) AUDIT_VALUE(res_disc_params, res_disc_params_cancel_dagen) AUDIT_VALUE(res_disc_params, res_disc_params_maxduur) AUDIT_END() AUDIT_BEGIN(res_ruimte) AUDIT_VALUE(res_ruimte, res_discipline_key) AUDIT_VALUE(res_ruimte, res_ruimte_prijs_vast) AUDIT_VALUE(res_ruimte, res_ruimte_prijs) AUDIT_VALUE(res_ruimte, res_ruimte_prijs_ochtend) AUDIT_VALUE(res_ruimte, res_ruimte_prijs_middag) AUDIT_VALUE(res_ruimte, res_ruimte_prijs_avond) AUDIT_VALUE(res_ruimte, res_ruimte_prijs_dag) AUDIT_VALUE(res_ruimte, res_ruimte_intprijs) AUDIT_VALUE(res_ruimte, res_ruimte_intprijs_ochtend) AUDIT_VALUE(res_ruimte, res_ruimte_intprijs_middag) AUDIT_VALUE(res_ruimte, res_ruimte_intprijs_avond) AUDIT_VALUE(res_ruimte, res_ruimte_intprijs_dag) AUDIT_VALUE(res_ruimte, res_ruimte_vervaldatum) AUDIT_END() 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 geldige* 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 rr.res_rsv_ruimte_dirtlevel = 0 AND ro.res_ruimte_key = :old.res_ruimte_key AND res_rsv_ruimte_tot > SYSDATE-14 -- na 14 dagen niet meer klagen 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); /* Het is niet aan deze tabel om afspraken te controleren */ 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'); 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 dummy NUMBER; BEGIN -- Een res_deel mag niet inactief worden als er nog *openstaande* reserveringen zijn. SELECT '' INTO dummy FROM res_v_aanwezigrsv_deel rs WHERE rs.res_deel_key = :OLD.res_deel_key AND rs.res_rsv_deel_dirtlevel = 0 AND res_rsv_deel_tot > SYSDATE-14 -- na 14 dagen niet meer klagen AND rs.res_status_bo_key IN (2, 3, 4, 7); raise_application_error(-20000, 'res_m034'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'res_m034'); END; END IF; 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_rsv_artikel_dirtlevel = 0 AND res_rsv_artikel_levering > SYSDATE-14 -- na 14 dagen niet meer klagen AND rs.res_status_bo_key IN (2,3,4,7); IF lCount > 0 THEN raise_application_error(-20000,'res_m033'); END IF; END; END IF; END; / CREATE_TRIGGER(res_t_res_arrangement_B_I) BEFORE INSERT ON res_arrangement FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(res_arrangement_key, res_s_res_arrangement_key); END; / CREATE_TRIGGER(res_t_res_arrangement_art_B_I) BEFORE INSERT ON res_arrangement_artikel FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(res_arrangement_artikel_key, res_s_res_arrangement_art_key); END; / CREATE_TRIGGER(res_t_res_rsv_artikel_B_I) BEFORE INSERT ON res_rsv_artikel FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(res_rsv_artikel_key, res_s_res_rsv_artikel_key); 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(-20001, 'Reserveringsgegevens zijn verwerkt; wijzigen is niet meer toegestaan.'); END IF; IF :new.res_status_bo_key = 5 AND :old.res_status_bo_key <> 5 THEN :new.res_rsv_artikel_afgemeld := SYSDATE; END IF; IF :new.res_status_bo_key = 6 AND :old.res_status_bo_key <> 6 THEN :new.res_rsv_artikel_verwerkt := SYSDATE; END IF; IF UPDATING ('res_rsv_artikel_aantal') THEN :new.res_rsv_artikel_mutatie := SYSDATE; END IF; END; / CREATE_TRIGGER(res_t_res_rsv_deel_B_I) BEFORE INSERT ON res_rsv_deel FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(res_rsv_deel_key, res_s_res_rsv_deel_key); 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(-20001, 'Reserveringsgegevens zijn verwerkt; wijzigen is niet meer toegestaan.'); END IF; IF :new.res_status_bo_key = 5 AND :old.res_status_bo_key <> 5 THEN :new.res_rsv_deel_afgemeld := SYSDATE; END IF; IF :new.res_status_bo_key = 6 AND :old.res_status_bo_key <> 6 THEN :new.res_rsv_deel_verwerkt := SYSDATE; END IF; IF UPDATING ('res_rsv_deel_aantal') OR UPDATING ('res_rsv_deel_van') OR UPDATING ('res_rsv_deel_tot') THEN :new.res_rsv_deel_mutatie := 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); -- Mag niet verwijderen als er nog actieve reserveringen zijn IF :new.res_activiteit_verwijder IS NOT NULL AND :old.res_activiteit_verwijder IS NULL THEN DECLARE dummy CHAR; BEGIN SELECT 'x' INTO dummy FROM res_v_aanwezigrsv_ruimte WHERE res_activiteit_key = :new.res_activiteit_key AND res_rsv_ruimte_tot > SYSDATE-14 -- na 14 dagen niet meer klagen AND res_status_bo_key IN (2, 3, 4, 7); raise_application_error(-20001, 'res_m999 Reservations exist'); EXCEPTION WHEN NO_DATA_FOUND THEN DELETE_CHILDREN(res_activiteitdiscipline, res_activiteit_key); WHEN TOO_MANY_ROWS THEN raise_application_error(-20001, 'res_m999 Reservations exist'); END; END IF; END; / CREATE_TRIGGER(res_t_res_srtactiviteit_B_IU) BEFORE INSERT OR UPDATE ON res_srtactiviteit FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(res_srtactiviteit_key, res_s_res_srtactiviteit_key); 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_UPPER(res_srtkenmerk_code, res_srtkenmerk_code, res_srtkenmerk); UPDATE_AANMAAKDATUM(res_srtkenmerk, res_srtkenmerk_aanmaak); IF (:new.res_srtkenmerk_verwijder IS NOT NULL AND :old.res_srtkenmerk_verwijder IS NULL AND BITAND(:new.res_srtkenmerk_systeem, 1) = 1) THEN raise_application_error(-20000, 'RES_C_RES_SRTKENMERK_SYSTEEM'); END IF; -- IF :new.res_srtkenmerk_kenmerktype IN ('C', 'N') AND :new.res_srtkenmerk_lengte IS NULL THEN raise_application_error(-20000, 'res_C_res_SRTKENMERK_LENGTE'); END IF; -- Numeriek mag niet te lang zijn (numeric overflow) IF :new.res_srtkenmerk_kenmerktype = 'N' AND :new.res_srtkenmerk_lengte > 20 THEN :new.res_srtkenmerk_lengte := 20; 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 (SELECT 'X' 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 ) UNION SELECT 'X' FROM res_kenmerkartikel WHERE FAC.SAFE_TO_NUMBER(res_kenmerkartikel_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 (SELECT 'X' 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 ) UNION SELECT 'X' FROM res_kenmerkartikel WHERE FAC.SAFE_TO_NUMBER(res_kenmerkartikel_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_rsv_ruimte_B_I) BEFORE INSERT ON res_rsv_ruimte FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(res_rsv_ruimte_key, res_s_res_rsv_ruimte_key); END; / CREATE_TRIGGER(res_t_res_rsv_ruimte_B_IU) BEFORE INSERT OR UPDATE ON res_rsv_ruimte FOR EACH ROW BEGIN IF sys_context('USERENV', 'ACTION') = 'ANONYMIZE' OR sys_context('USERENV', 'ACTION') = 'DBUPGRADE' THEN RETURN; END IF; -- Niet waterdicht, meestal adequaat IF NOT UPDATING('res_rsv_ruimte_satisfaction') THEN IF :old.res_status_bo_key=6 THEN raise_application_error(-20001, 'Reserveringsgegevens '||:new.res_rsv_ruimte_key||'/'||:new.res_rsv_ruimte_volgnr||' zijn verwerkt; wijzigen is niet meer toegestaan.'); END IF; END IF; 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; 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; -- Beoordeling van de reservering IF (:new.res_rsv_ruimte_satisfaction IS NOT NULL AND (:old.res_rsv_ruimte_satisfaction IS NULL OR :old.res_rsv_ruimte_satisfaction <> :new.res_rsv_ruimte_satisfaction)) THEN fac.trackaction('#RESLIK', :old.res_rsv_ruimte_key, NULL , SYSDATE, REPLACE(lcl.l('lcl_faclike_changed'), '{0}', :new.res_rsv_ruimte_satisfaction)); END IF; END; / CREATE_TRIGGER(res_t_res_kenmerk_b_iu) BEFORE INSERT OR UPDATE ON res_kenmerk FOR EACH ROW BEGIN -- FSN#13902: we tolereren het achteraf verplicht maken UPDATE_PRIMARY_KEY(res_kenmerk_key, res_s_res_kenmerk_key); UPDATE_AANMAAKDATUM(res_kenmerk, res_kenmerk_aanmaak); UPDATE_UPPER(res_kenmerk_code, res_kenmerk_code, res_kenmerk); END; / CREATE_TRIGGER(res_t_res_kenmerkwaarde_b_iu) BEFORE INSERT OR UPDATE ON res_kenmerkwaarde FOR EACH ROW BEGIN -- Controleer eerst of de ingevulde waarde goed is. -- IF :new.res_kenmerkreservering_waarde <> :old.res_kenmerkreservering_waarde OR:old.res_kenmerkreservering_waarde IS NULL OR:new.res_kenmerkreservering_waarde IS NULL THEN DECLARE srtkenmerkomschr res_srtkenmerk.res_srtkenmerk_omschrijving%TYPE; srtkenmerktype res_srtkenmerk.res_srtkenmerk_kenmerktype%TYPE; srtkenmerklengte res_srtkenmerk.res_srtkenmerk_lengte%TYPE; srtkenmerkdec res_srtkenmerk.res_srtkenmerk_dec%TYPE; srtkenmerknmin res_srtkenmerk.res_srtkenmerk_nmin%TYPE; srtkenmerknmax res_srtkenmerk.res_srtkenmerk_nmax%TYPE; kenmerkverplicht res_kenmerk.res_kenmerk_verplicht%TYPE; numberwaarde NUMBER (25, 5); formatmask VARCHAR2 (60); kenmerkreswaarde res_kenmerkwaarde.res_kenmerkreservering_waarde%TYPE; BEGIN kenmerkreswaarde := :new.res_kenmerkreservering_waarde; -- SELECT res_sk.res_srtkenmerk_omschrijving, res_sk.res_srtkenmerk_kenmerktype, res_sk.res_srtkenmerk_lengte, res_sk.res_srtkenmerk_dec, res_sk.res_srtkenmerk_nmin, res_sk.res_srtkenmerk_nmax, res_k.res_kenmerk_verplicht INTO srtkenmerkomschr, srtkenmerktype, srtkenmerklengte, srtkenmerkdec, srtkenmerknmin, srtkenmerknmax, kenmerkverplicht FROM res_srtkenmerk res_sk, res_kenmerk res_k WHERE res_sk.res_srtkenmerk_key = res_k.res_srtkenmerk_key AND res_k.res_kenmerk_niveau = 'A' AND res_k.res_kenmerk_key = :new.res_kenmerk_key; -- -- Controleer eerst of het verplichte veld ingevuld is. -- IF kenmerkverplicht IS NOT NULL AND kenmerkreswaarde IS NULL THEN APPLICATION_ERROR_GOTO(-20004, 'res_m240,' || srtkenmerkomschr); -- -- Kijk welk KenmerkType gebruikt wordt. -- Aan de hand daarvan moet een controle uitgevoerd worden. -- ELSIF srtkenmerktype = 'C' THEN -- CHAR -- Controleer of de lengte te groot of goed is. IF LENGTH (kenmerkreswaarde) > srtkenmerklengte THEN APPLICATION_ERROR_GOTO( -20004, 'res_m241,' || srtkenmerkomschr || ',' || TO_CHAR (srtkenmerklengte)); END IF; ELSIF srtkenmerktype = 'N' THEN -- NUMBER -- Controleer of er een numerieke waarde ingevuld is. IF srtkenmerkdec IS NULL OR srtkenmerkdec = 0 THEN formatmask := RPAD ('9', srtkenmerklengte, '9'); ELSE formatmask := RPAD ('9', srtkenmerklengte - srtkenmerkdec, '9') || 'D' || RPAD ('9', srtkenmerkdec, '9'); END IF; -- BEGIN numberwaarde := TO_NUMBER (kenmerkreswaarde); EXCEPTION WHEN OTHERS THEN formatmask := REPLACE (formatmask, '9', '#'); formatmask := REPLACE (formatmask, '0', '#'); formatmask := REPLACE (formatmask, 'D', '.'); APPLICATION_ERROR_GOTO( -20004, 'res_m242,' || srtkenmerkomschr || ',' || formatmask); END; -- Controleer of de waarde binnen NMin en NMax ligt. IF (srtkenmerknmin IS NOT NULL AND numberwaarde < srtkenmerknmin) OR (srtkenmerknmax IS NOT NULL AND numberwaarde > srtkenmerknmax) THEN APPLICATION_ERROR_GOTO( -20004, 'res_m243,' || srtkenmerkomschr || ',' || TO_CHAR (srtkenmerknmin) || ',' || TO_CHAR (srtkenmerknmax)); ELSE -- Controleer of de waarde aan het formaat voldoet. kenmerkreswaarde := LTRIM (TO_CHAR (numberwaarde, formatmask)); IF INSTR (kenmerkreswaarde, '#') <> 0 THEN formatmask := REPLACE (formatmask, '9', '#'); formatmask := REPLACE (formatmask, '0', '#'); formatmask := REPLACE (formatmask, 'D', '.'); APPLICATION_ERROR_GOTO( -20004, 'res_m242,' || srtkenmerkomschr || ',' || formatmask); END IF; END IF; -- Zet de geconverteerde waarde terug. :new.res_kenmerkreservering_waarde := kenmerkreswaarde; ELSIF srtkenmerktype = 'D' THEN -- DATUM kenmerkreswaarde := TO_CHAR (TO_DATE (kenmerkreswaarde, 'DD-MM-YY'), 'DD-MM-YYYY'); -- Zet de geconverteerde waarde terug. :new.res_kenmerkreservering_waarde := kenmerkreswaarde; END IF; END; UPDATE_PRIMARY_KEY(res_kenmerkwaarde_key, res_s_res_kenmerkwaarde_key); END IF; END; / CREATE_TRIGGER(res_t_res_kenmerkartikel_b_iu) BEFORE INSERT OR UPDATE ON res_kenmerkartikel FOR EACH ROW BEGIN -- Controleer eerst of de ingevulde waarde goed is. -- IF :new.res_kenmerkartikel_waarde <> :old.res_kenmerkartikel_waarde OR:old.res_kenmerkartikel_waarde IS NULL OR:new.res_kenmerkartikel_waarde IS NULL THEN DECLARE srtkenmerkomschr res_srtkenmerk.res_srtkenmerk_omschrijving%TYPE; srtkenmerktype res_srtkenmerk.res_srtkenmerk_kenmerktype%TYPE; srtkenmerklengte res_srtkenmerk.res_srtkenmerk_lengte%TYPE; srtkenmerkdec res_srtkenmerk.res_srtkenmerk_dec%TYPE; srtkenmerknmin res_srtkenmerk.res_srtkenmerk_nmin%TYPE; srtkenmerknmax res_srtkenmerk.res_srtkenmerk_nmax%TYPE; kenmerkverplicht res_kenmerk.res_kenmerk_verplicht%TYPE; numberwaarde NUMBER (25, 5); formatmask VARCHAR2 (60); kenmerkreswaarde res_kenmerkartikel.res_kenmerkartikel_waarde%TYPE; BEGIN kenmerkreswaarde := :new.res_kenmerkartikel_waarde; -- SELECT res_sk.res_srtkenmerk_omschrijving, res_sk.res_srtkenmerk_kenmerktype, res_sk.res_srtkenmerk_lengte, res_sk.res_srtkenmerk_dec, res_sk.res_srtkenmerk_nmin, res_sk.res_srtkenmerk_nmax, res_k.res_kenmerk_verplicht INTO srtkenmerkomschr, srtkenmerktype, srtkenmerklengte, srtkenmerkdec, srtkenmerknmin, srtkenmerknmax, kenmerkverplicht FROM res_srtkenmerk res_sk, res_kenmerk res_k WHERE res_sk.res_srtkenmerk_key = res_k.res_srtkenmerk_key --AND res_k.res_kenmerk_niveau = 'D' AND res_k.res_kenmerk_key = :new.res_kenmerk_key; -- -- Controleer eerst of het verplichte veld ingevuld is. -- IF kenmerkverplicht IS NOT NULL AND kenmerkreswaarde IS NULL THEN APPLICATION_ERROR_GOTO(-20004, 'res_m244,' || srtkenmerkomschr); -- -- Kijk welk KenmerkType gebruikt wordt. -- Aan de hand daarvan moet een controle uitgevoerd worden. -- ELSIF srtkenmerktype = 'C' THEN -- CHAR -- Controleer of de lengte te groot of goed is. IF LENGTH (kenmerkreswaarde) > srtkenmerklengte THEN APPLICATION_ERROR_GOTO( -20004, 'res_m245,' || srtkenmerkomschr || ',' || TO_CHAR (srtkenmerklengte)); END IF; ELSIF srtkenmerktype = 'N' THEN -- NUMBER -- Controleer of er een numerieke waarde ingevuld is. IF srtkenmerkdec IS NULL OR srtkenmerkdec = 0 THEN formatmask := RPAD ('9', srtkenmerklengte, '9'); ELSE formatmask := RPAD ('9', srtkenmerklengte - srtkenmerkdec, '9') || 'D' || RPAD ('9', srtkenmerkdec, '9'); END IF; -- BEGIN numberwaarde := TO_NUMBER (kenmerkreswaarde); EXCEPTION WHEN OTHERS THEN formatmask := REPLACE (formatmask, '9', '#'); formatmask := REPLACE (formatmask, '0', '#'); formatmask := REPLACE (formatmask, 'D', '.'); APPLICATION_ERROR_GOTO( -20004, 'res_m246,' || srtkenmerkomschr || ',' || formatmask); END; -- Controleer of de waarde binnen NMin en NMax ligt. IF (srtkenmerknmin IS NOT NULL AND numberwaarde < srtkenmerknmin) OR (srtkenmerknmax IS NOT NULL AND numberwaarde > srtkenmerknmax) THEN APPLICATION_ERROR_GOTO( -20004, 'res_m247,' || srtkenmerkomschr || ',' || TO_CHAR (srtkenmerknmin) || ',' || TO_CHAR (srtkenmerknmax)); ELSE -- Controleer of de waarde aan het formaat voldoet. kenmerkreswaarde := LTRIM (TO_CHAR (numberwaarde, formatmask)); IF INSTR (kenmerkreswaarde, '#') <> 0 THEN formatmask := REPLACE (formatmask, '9', '#'); formatmask := REPLACE (formatmask, '0', '#'); formatmask := REPLACE (formatmask, 'D', '.'); APPLICATION_ERROR_GOTO( -20004, 'res_m246,' || srtkenmerkomschr || ',' || formatmask); END IF; END IF; -- Zet de geconverteerde waarde terug. :new.res_kenmerkartikel_waarde := kenmerkreswaarde; ELSIF srtkenmerktype = 'D' THEN -- DATUM kenmerkreswaarde := TO_CHAR (TO_DATE (kenmerkreswaarde, 'DD-MM-YY'), 'DD-MM-YYYY'); -- Zet de geconverteerde waarde terug. :new.res_kenmerkartikel_waarde := kenmerkreswaarde; END IF; END; UPDATE_PRIMARY_KEY(res_kenmerkartikel_key, res_s_res_kenmerkartikel_key); END IF; 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; / CREATE_TRIGGER(res_t_notificatie_res_reserv) AFTER DELETE ON res_reservering FOR EACH ROW BEGIN fac.clrnotifications ('RES%', :OLD.res_reservering_key); 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; / REGISTERRUN('$Id$') #endif // RES