#ifdef MLD // 13-03-96 AH /* * $Revision$ * $Id$ */ CREATE_TRIGGER(mld_t_mld_behandelgroep_B_IU) BEFORE INSERT OR UPDATE ON mld_behandelgroep FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_behandelgroep_key, mld_s_mld_behandelgroep_key); END; / AUDIT_BEGIN(mld_disc_params) AUDIT_VALUE(mld_disc_params, mld_behandelgroep_key) AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet) AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet2) AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet3) AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet4) AUDIT_VALUE(mld_disc_params, mld_disc_params_bestellimiet5) AUDIT_VALUE(mld_disc_params, mld_disc_params_pgb) AUDIT_VALUE(mld_disc_params, mld_disc_params_startdatum) AUDIT_VALUE(mld_disc_params, mld_disc_params_directklaar) AUDIT_VALUE(mld_disc_params, mld_disc_params_keten) AUDIT_VALUE(mld_disc_params, mld_disc_params_frontendprio) AUDIT_VALUE(mld_disc_params, mld_disc_params_eigen_kp) AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurpct) AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurmarge) AUDIT_VALUE(mld_disc_params, mld_disc_params_factmatchmode) AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurappr) AUDIT_VALUE(mld_disc_params, mld_disc_params_factuurgrens) AUDIT_VALUE(mld_disc_params, mld_disc_params_bonotify) AUDIT_VALUE(mld_disc_params, mld_disc_params_benotify) AUDIT_VALUE(mld_disc_params, mld_disc_params_notify) AUDIT_VALUE(mld_disc_params, mld_disc_params_noti_dagen) AUDIT_VALUE(mld_disc_params, mld_disc_params_opdr_kosten) AUDIT_VALUE(mld_disc_params, fac_activiteit_key) AUDIT_VALUE(mld_disc_params, mld_disc_params_offerteauto) AUDIT_VALUE(mld_disc_params, mld_disc_params_fenotes) AUDIT_VALUE(mld_disc_params, mld_disc_params_offhours) AUDIT_END() CREATE_TRIGGER(mld_t_mld_disc_params_b_iu) BEFORE INSERT OR UPDATE ON mld_disc_params FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_disc_params_key, mld_s_mld_disc_params_key); END; / CREATE_TRIGGER(mld_t_mld_oorzaak_B_IU) BEFORE INSERT OR UPDATE ON mld_oorzaak FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_oorzaak_key,mld_s_mld_oorzaak_key); UPDATE_UPPER(mld_oorzaak_omschrijving,mld_oorzaak_upper,mld_oorzaak); END; / CREATE_TRIGGER(mld_t_mld_meldbron_B_IU) BEFORE INSERT OR UPDATE ON mld_meldbron FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_meldbron_key,mld_s_mld_meldbron_key); UPDATE_UPPER(mld_meldbron_omschrijving,mld_meldbron_upper,mld_meldbron); END; / CREATE_TRIGGER(mld_t_mld_standaardopdr_B_IU) BEFORE INSERT OR UPDATE ON mld_standaardopdr FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_standaardopdr_key,mld_s_mld_standaardopdr_key); UPDATE_UPPER(mld_standaardopdr_afk,mld_standaardopdr_afk_upper,mld_standaardopdr); END; / AUDIT_BEGIN(mld_stdmelding) AUDIT_VALUE(mld_stdmelding, mld_stdmelding_malusbasis) AUDIT_VALUE(mld_stdmelding, mld_stdmelding_malus) AUDIT_VALUE(mld_stdmelding, mld_stdmelding_malusmax) AUDIT_VALUE(mld_stdmelding, mld_stdmelding_verwijder) AUDIT_END() CREATE_TRIGGER(mld_t_mld_stdmelding_B_IU) BEFORE INSERT OR UPDATE ON mld_stdmelding FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_stdmelding_key,mld_s_mld_stdmelding_key); UPDATE_UPPER(mld_stdmelding_omschrijving,mld_stdmelding_upper,mld_stdmelding); UPDATE_UPPER(mld_stdmelding_code,mld_stdmelding_code,mld_stdmelding); IF :new.mld_stdmelding_planbaar = 1 THEN :new.mld_stdmelding_planbaarfe := 1; END IF; IF :new.mld_stdmelding_planbaar = 2 THEN :new.mld_stdmelding_planbaarfe := 0; END IF; IF :new.mld_ins_discipline_key <> :old.mld_ins_discipline_key THEN -- is omhangen, dus afhankelijken laten volgen UPDATE mld_stdmeldingfaq SET ins_discipline_key = :new.mld_ins_discipline_key WHERE mld_stdmelding_key = :new.mld_stdmelding_key; END IF; IF :new.mld_stdmelding_verwijder IS NOT NULL AND :old.mld_stdmelding_verwijder IS NULL THEN DELETE FROM mld_afmeldtekst WHERE mld_stdmelding_key = :new.mld_stdmelding_key; END IF; END; / CREATE_TRIGGER(mld_t_mld_stdm_srtinst_B_IU) BEFORE INSERT OR UPDATE ON mld_stdmelding_srtinst FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_stdmelding_srtinst_key, mld_s_mld_stdm_srtinst_key); END; / CREATE_TRIGGER(mld_t_mld_stdmeldinggroep_B_IU) BEFORE INSERT OR UPDATE ON mld_stdmeldinggroep FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_stdmeldinggroep_key, mld_s_mld_stdmeldinggroep_key); END; / AUDIT_BEGIN(mld_typeopdr) AUDIT_VALUE(mld_typeopdr, mld_typeopdr_gvs) AUDIT_VALUE(mld_typeopdr, mld_typeopdr_fvs) AUDIT_VALUE(mld_typeopdr, mld_typeopdr_kosten) AUDIT_VALUE(mld_typeopdr, mld_typeopdr_factuur) AUDIT_END() CREATE_TRIGGER(mld_t_mld_typeopdr_B_IU) BEFORE INSERT OR UPDATE ON mld_typeopdr FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_typeopdr_key,mld_s_mld_stdmelding_key); UPDATE_UPPER(mld_typeopdr_omschrijving,mld_typeopdr_upper,mld_typeopdr); END; / CREATE_TRIGGER(mld_t_mld_typeopdr_srtdi_B_IU) BEFORE INSERT OR UPDATE ON mld_typeopdr_srtdiscipline FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_typeopdr_srtdisc_key,mld_s_mld_typeopdr_srtdisc); END; / CREATE_TRIGGER(mld_t_mld_melding_B_I) BEFORE INSERT ON mld_melding FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_melding_key, mld_s_mld_melding_key); END; / CREATE_TRIGGER(mld_t_mld_melding_B_IU) BEFORE INSERT OR UPDATE ON mld_melding FOR EACH ROW BEGIN -- Vul het dan redundante veld MLD_ALG_LOCATIE_KEY als de onroerendgoed_key gedefinieerd is, -- zo niet, dan krijgt mld_alg_locatie_key gewoon de waarde die wordt meegegeven (of die het had) IF :new.mld_alg_onroerendgoed_keys IS NOT NULL AND (:old.mld_alg_onroerendgoed_keys IS NULL OR :old.mld_alg_onroerendgoed_keys <> :new.mld_alg_onroerendgoed_keys) THEN CHECK_REFERENCE_ONROERENDGOED(mld_alg_onroerendgoed_keys, 'alg_m090'); /* wordt m.i. geimpliceerd door het volgende */ SELECT alg_locatie_key INTO :NEW.mld_alg_locatie_key FROM mld_v_onroerendgoed_locatie WHERE alg_onroerendgoed_keys = :NEW.mld_alg_onroerendgoed_keys; END IF; -- Remember/update the default SLA-data if new or possibly changed IF :new.mld_melding_acceptdatum_std IS NULL OR UPDATING ('mld_melding_datum') OR UPDATING ('mld_stdmelding_key') OR UPDATING ('mld_melding_spoed') THEN :new.mld_melding_acceptdatum_std := mld.getacceptdatum (:new.mld_melding_datum, :new.mld_stdmelding_key, :new.mld_alg_onroerendgoed_keys, :new.mld_melding_spoed); END IF; -- Als prs_perslid_key_voor geen waarde heeft dan gelijk aan prs_perslid_key. -- en afhankelijk van de setting ook gelijkhouden. IF :new.prs_perslid_key_voor IS NULL OR (:new.prs_perslid_key <> :old.prs_perslid_key AND fac.getSetting('mld_allow_for_others') < 1) THEN :new.prs_perslid_key_voor := :new.prs_perslid_key; END IF; DECLARE l_planbaar mld_stdmelding.mld_stdmelding_planbaar%TYPE; l_default_t_accepttijd mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE; BEGIN IF :new.mld_melding_einddatum_std IS NULL OR UPDATING ('mld_melding_datum') OR UPDATING ('mld_stdmelding_key') OR UPDATING ('mld_melding_spoed') OR UPDATING ('mld_alg_onroerendgoed_keys') THEN :new.mld_melding_einddatum_std := mld.geteinddatum (:new.mld_melding_datum, :new.mld_stdmelding_key, :new.mld_melding_spoed, :new.mld_alg_onroerendgoed_keys, mld.getlowestobjectuitvoer(:new.mld_melding_key)); -- Ik weet bij nieuwe meldingen nog niet welke objecten aan de meldingen zijn gekoppeld. Dan is de waarde null. -- Jammer dat ik dat zelf nog een keer moet ophalen, maar ja -- Deze waarden bewaren, want is iha niet terug te berekenen SELECT mld.getstduitvoer(:new.mld_stdmelding_key, :new.mld_melding_spoed, :new.mld_alg_onroerendgoed_keys, mld.getlowestobjectuitvoer(:new.mld_melding_key)), DECODE (:new.mld_melding_spoed, 1, mld_stdmelding_t_accept_pr1, 2, mld_stdmelding_t_accept_pr2, 3, mld_stdmelding_t_accepttijd, 4, mld_stdmelding_t_accept_pr4, mld_stdmelding_t_accepttijd), mld_stdmelding_t_accepttijd, mld_stdmelding_planbaar INTO :new.mld_melding_t_uitvoertijd, :new.mld_melding_t_accepttijd, l_default_t_accepttijd, l_planbaar FROM mld_stdmelding msm WHERE msm.mld_stdmelding_key = :new.mld_stdmelding_key; IF :new.mld_melding_t_accepttijd.tijdsduur IS NULL THEN :new.mld_melding_t_accepttijd := l_default_t_accepttijd; END IF; -- Alleen aanpassen aan de SLA indien niet meegegeven en mogelijk gewijzigd (!) IF (UPDATING AND NOT UPDATING('mld_melding_einddatum') AND (:old.mld_melding_einddatum_std IS NULL OR :old.mld_melding_einddatum_std <> :new.mld_melding_einddatum_std) AND l_planbaar = 1) OR (INSERTING AND :new.mld_melding_einddatum IS NULL) THEN :new.mld_melding_einddatum := :new.mld_melding_einddatum_std; END IF; END IF; END; IF :new.prs_perslid_key IS NULL THEN raise_application_error(-20000, 'mld_m233'); END IF; -- Verwerken IF :new.mld_melding_status = 6 AND :old.mld_melding_status <> 6 THEN -- De melding wordt nu verwerkt IF :old.mld_melding_status <> 5 THEN -- wat alleen mag als de status afgemeld(5) was raise_application_error(-20000, 'mld_m203'); END IF; END IF; -- Melding is/wordt In Behandeling IF :new.mld_melding_status = 4 OR :new.mld_melding_status = 7 THEN -- controleer hier de status van de bijbehorende opdrachten -- updates mogen de status wel op 4 of 7 zetten, maar wij bepalen HIER welke het daarvan wordt. -- NB: als je consequent mld.updatemeldingstatus() zou aanroepen zou dit niet hoeven DECLARE actieveopdrachten NUMBER; BEGIN SELECT COUNT(*) INTO actieveopdrachten FROM mld_opdr o WHERE o.mld_melding_key = :new.mld_melding_key AND mld_statusopdr_key NOT IN (1, 2, 6, 7, 9); IF actieveopdrachten > 0 THEN -- Open orders: status = in progress :new.mld_melding_status := 7; ELSE -- Only closed orders: status = Accepted again :new.mld_melding_status := 4; END IF; END; END IF; END; / CREATE_TRIGGER(mld_t_mld_opdr_B_I) BEFORE INSERT ON mld_opdr FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_opdr_key, mld_s_mld_opdr_key); BEGIN IF fac.getSetting ('mld_opdr_discipline_mode') = 1 THEN -- altijd vakgroep discipline SELECT msm.mld_ins_discipline_key INTO :NEW.mld_opdr_discipline_key FROM mld_melding m, mld_stdmelding msm WHERE m.mld_melding_key = :NEW.mld_melding_key AND msm.mld_stdmelding_key = m.mld_stdmelding_key; ELSE -- voorkeur voor behandelteam discipline SELECT COALESCE(m.mld_ins_discipline_key, msm.mld_ins_discipline_key) INTO :NEW.mld_opdr_discipline_key FROM mld_melding m, mld_stdmelding msm WHERE m.mld_melding_key = :NEW.mld_melding_key AND msm.mld_stdmelding_key = m.mld_stdmelding_key; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; /* TWYN heeft geen meldingen boven de opdracht */ END; END; / CREATE_TRIGGER(mld_t_mld_opdr_B_IU) BEFORE INSERT OR UPDATE ON mld_opdr FOR EACH ROW BEGIN /* Controleer of de opdracht bij een melding hoort die de goede status heeft, * Het voorkomt dat er onverwachts opdrachten zijn op Afgewezen of nog niet Geaccepteerde meldingen * namelijk: GEACCEPTEERD, UITGEGEVEN of AFGEMELD * Sinds FSN#30228 hoort daar zelfs ook VERWERKT bij * Zo niet, dan mag het alleen als de contract_key is ingevuld */ IF :NEW.mld_melding_key IS NOT NULL THEN DECLARE dummy CHAR; BEGIN SELECT 'X' INTO dummy FROM mld_melding WHERE mld_melding_key = :NEW.mld_melding_key AND mld_melding_status IN (4,5,6,7); EXCEPTION WHEN NO_DATA_FOUND THEN IF :NEW.cnt_contract_key IS NULL THEN raise_application_error(-20000, 'mld_m201'); END IF; END; END IF; CHECK_REFERENCE_UITVOERENDE(mld_uitvoerende_keys, 'mld_m37'); -- gooi fiatverzoeknotificaties weg als gefiatteerd of afgewezen-> opnemen in bovenste deel IF :OLD.mld_statusopdr_key = 3 AND :new.mld_statusopdr_key IN (4, 2) THEN fac.clrnotifications ('MLDAP1', :new.mld_opdr_key); END IF; END; / CREATE_TRIGGER(mld_t_mld_adres_B_IU) BEFORE INSERT OR UPDATE ON mld_adres FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_adres_key, mld_s_mld_adres_key); UPDATE_UPPER(mld_adres_naam, mld_adres_upper,mld_adres); END; / CREATE_TRIGGER(mld_t_mld_vrije_dagen_b_iu) BEFORE INSERT OR UPDATE ON mld_vrije_dagen FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_vrije_dagen_key, mld_s_mld_vrije_dagen_key); /* Haal het tijdgedeelte van de ingevoerde datum af. */ :new.mld_vrije_dagen_datum := TRUNC_DATE(:new.mld_vrije_dagen_datum); END; / CREATE_TRIGGER(mld_t_mld_mld_object_B_IU) BEFORE INSERT OR UPDATE ON mld_melding_object FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_melding_object_key, mld_s_mld_object_key); END; / CREATE_TRIGGER(mld_t_mld_srtkenmerk_b_iu) BEFORE INSERT OR UPDATE ON mld_srtkenmerk FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_srtkenmerk_key, mld_s_mld_srtkenmerk_key); UPDATE_UPPER(mld_srtkenmerk_omschrijving, mld_srtkenmerk_upper,mld_srtkenmerk); UPDATE_UPPER(mld_srtkenmerk_code, mld_srtkenmerk_code, mld_srtkenmerk); UPDATE_AANMAAKDATUM(mld_srtkenmerk, mld_srtkenmerk_aanmaak); IF (:new.mld_srtkenmerk_verwijder IS NOT NULL AND :old.mld_srtkenmerk_verwijder IS NULL AND BITAND(:new.mld_srtkenmerk_systeem, 1) = 1) THEN raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_SYSTEEM'); END IF; -- IF :new.mld_srtkenmerk_kenmerktype IN ('C', 'N', 'B') AND :new.mld_srtkenmerk_lengte IS NULL THEN raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_LENGTE'); END IF; IF :new.mld_srtkenmerk_kenmerktype IN ('N', 'B') AND :new.mld_srtkenmerk_lengte > 20 THEN :new.mld_srtkenmerk_lengte := 20; END IF; -- IF :new.mld_srtkenmerk_kenmerktype IN ('N', 'B') AND :old.mld_srtkenmerk_key IS NOT NULL THEN IF :old.mld_srtkenmerk_nmin <> :new.mld_srtkenmerk_nmin OR (:old.mld_srtkenmerk_nmin IS NULL AND :new.mld_srtkenmerk_nmin IS NOT NULL) THEN DECLARE Dummy CHAR; BEGIN SELECT 'X' INTO Dummy FROM mld_kenmerkmelding WHERE FAC.SAFE_TO_NUMBER(mld_kenmerkmelding_waarde) < :new.mld_srtkenmerk_nmin AND mld_kenmerk_key IN (SELECT mld_kenmerk_key FROM mld_kenmerk WHERE mld_srtkenmerk_key = :old.mld_srtkenmerk_key ); raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MIN'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MIN'); END; END IF; -- IF :old.mld_srtkenmerk_nmax <> :new.mld_srtkenmerk_nmax OR (:old.mld_srtkenmerk_nmax IS NULL AND :new.mld_srtkenmerk_nmax IS NOT NULL) THEN DECLARE Dummy CHAR; BEGIN SELECT 'X' INTO Dummy FROM mld_kenmerkmelding WHERE FAC.SAFE_TO_NUMBER(mld_kenmerkmelding_waarde) > :new.mld_srtkenmerk_nmax AND mld_kenmerk_key IN (SELECT mld_kenmerk_key FROM mld_kenmerk WHERE mld_srtkenmerk_key = :old.mld_srtkenmerk_key ); raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MAX'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000, 'MLD_C_MLD_SRTKENMERK_MAX'); END; END IF; END IF; END; / CREATE_TRIGGER(mld_t_mld_kenmerk_b_iu) BEFORE INSERT OR UPDATE ON mld_kenmerk FOR EACH ROW BEGIN -- FSN#13902: we tolereren het achteraf verplicht maken UPDATE_PRIMARY_KEY(mld_kenmerk_key, mld_s_mld_kenmerk_key); UPDATE_UPPER(mld_kenmerk_code, mld_kenmerk_code, mld_kenmerk); UPDATE_AANMAAKDATUM(mld_kenmerk, mld_kenmerk_aanmaak); END; / CREATE_TRIGGER(mld_t_mld_kenmerkmelding_b_i) BEFORE INSERT ON mld_kenmerkmelding FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_kenmerkmelding_key, mld_s_mld_kenmerkmelding_key); END; / CREATE_TRIGGER(mld_t_mld_kenmerkmelding_b_iu) BEFORE INSERT OR UPDATE ON mld_kenmerkmelding FOR EACH ROW BEGIN -- Controleer eerst of de ingevulde waarde goed is. -- IF :new.mld_kenmerkmelding_waarde <> :old.mld_kenmerkmelding_waarde OR :old.mld_kenmerkmelding_waarde IS NULL OR :new.mld_kenmerkmelding_waarde IS NULL THEN DECLARE SrtKenmerkOmschr mld_srtkenmerk.mld_srtkenmerk_omschrijving%TYPE; SrtKenmerkType mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE; SrtKenmerkLengte mld_srtkenmerk.mld_srtkenmerk_lengte%TYPE; SrtKenmerkDec mld_srtkenmerk.mld_srtkenmerk_dec%TYPE; SrtKenmerkNMin mld_srtkenmerk.mld_srtkenmerk_nmin%TYPE; SrtKenmerkNMax mld_srtkenmerk.mld_srtkenmerk_nmax%TYPE; KenmerkVerplicht mld_kenmerk.mld_kenmerk_verplicht%TYPE; NumberWaarde NUMBER(25,5); FormatMask VARCHAR2(60); KenmerkMeldingWaarde mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE; BEGIN KenmerkMeldingWaarde := :new.mld_kenmerkmelding_waarde; -- SELECT COALESCE(MLD_K.mld_kenmerk_omschrijving, MLD_SK.mld_srtkenmerk_omschrijving) , MLD_SK.mld_srtkenmerk_kenmerktype , MLD_SK.mld_srtkenmerk_lengte , MLD_SK.mld_srtkenmerk_dec , MLD_SK.mld_srtkenmerk_nmin , MLD_SK.mld_srtkenmerk_nmax , MLD_K.mld_kenmerk_verplicht INTO SrtKenmerkOmschr , SrtKenmerkType , SrtKenmerkLengte , SrtKenmerkDec , SrtKenmerkNMin , SrtKenmerkNMax , KenmerkVerplicht FROM mld_srtkenmerk MLD_SK , mld_kenmerk MLD_K WHERE MLD_SK.mld_srtkenmerk_key = MLD_K.mld_srtkenmerk_key AND MLD_K.mld_kenmerk_key = :new.mld_kenmerk_key; -- -- Controleer eerst of het verplichte veld ingevuld is. -- IF KenmerkVerplicht IS NOT NULL AND KenmerkMeldingWaarde IS NULL THEN APPLICATION_ERROR_GOTO(-20004, 'mld_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(KenmerkMeldingWaarde) > SrtKenmerkLengte THEN APPLICATION_ERROR_GOTO(-20004, 'mld_m241,'||SrtKenmerkOmschr||','||TO_CHAR(SrtKenmerkLengte)); END IF; ELSIF SrtKenmerkType IN ('N', 'B') 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(KenmerkMeldingWaarde); EXCEPTION WHEN OTHERS THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004, 'mld_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, 'mld_m243,'||SrtKenmerkOmschr||','|| TO_CHAR(SrtKenmerkNMin)||','|| TO_CHAR(SrtKenmerkNMax)); ELSE -- Controleer of de waarde aan het formaat voldoet. KenmerkMeldingWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask)); IF INSTR2(KenmerkMeldingWaarde, '#') <> 0 THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004,'mld_m242,'||SrtKenmerkOmschr||','||FormatMask); END IF; END IF; -- Zet de geconverteerde waarde terug. :new.mld_kenmerkmelding_waarde := KenmerkMeldingWaarde; ELSIF SrtKenmerkType = 'D' THEN -- DATUM KenmerkMeldingWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkMeldingWaarde,'DD-MM-YY'),'DD-MM-YYYY'); -- Zet de geconverteerde waarde terug. :new.mld_kenmerkmelding_waarde := KenmerkMeldingWaarde; END IF; END; END IF; END; / CREATE_TRIGGER(mld_t_mld_kenmerkopdr_b_i) BEFORE INSERT ON mld_kenmerkopdr FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_kenmerkopdr_key, mld_s_mld_kenmerkopdr_key); END; / CREATE_TRIGGER(mld_t_mld_kenmerkopdr_b_iu) BEFORE INSERT OR UPDATE ON mld_kenmerkopdr FOR EACH ROW BEGIN -- Controleer eerst of de ingevulde waarde goed is. -- IF :new.mld_kenmerkopdr_waarde <> :old.mld_kenmerkopdr_waarde OR :old.mld_kenmerkopdr_waarde IS NULL OR :new.mld_kenmerkopdr_waarde IS NULL THEN DECLARE SrtKenmerkOmschr mld_srtkenmerk.mld_srtkenmerk_omschrijving%TYPE; SrtKenmerkType mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE; SrtKenmerkLengte mld_srtkenmerk.mld_srtkenmerk_lengte%TYPE; SrtKenmerkDec mld_srtkenmerk.mld_srtkenmerk_dec%TYPE; SrtKenmerkNMin mld_srtkenmerk.mld_srtkenmerk_nmin%TYPE; SrtKenmerkNMax mld_srtkenmerk.mld_srtkenmerk_nmax%TYPE; KenmerkVerplicht mld_kenmerk.mld_kenmerk_verplicht%TYPE; NumberWaarde NUMBER(25,5); FormatMask VARCHAR2(60); KenmerkOpdrWaarde mld_kenmerkopdr.mld_kenmerkopdr_waarde%TYPE; BEGIN KenmerkOpdrWaarde := :new.mld_kenmerkopdr_waarde; -- SELECT COALESCE(MLD_K.mld_kenmerk_omschrijving, MLD_SK.mld_srtkenmerk_omschrijving) , MLD_SK.mld_srtkenmerk_kenmerktype , MLD_SK.mld_srtkenmerk_lengte , MLD_SK.mld_srtkenmerk_dec , MLD_SK.mld_srtkenmerk_nmin , MLD_SK.mld_srtkenmerk_nmax , MLD_K.mld_kenmerk_verplicht INTO SrtKenmerkOmschr , SrtKenmerkType , SrtKenmerkLengte , SrtKenmerkDec , SrtKenmerkNMin , SrtKenmerkNMax , KenmerkVerplicht FROM mld_srtkenmerk MLD_SK , mld_kenmerk MLD_K WHERE MLD_SK.mld_srtkenmerk_key = MLD_K.mld_srtkenmerk_key AND MLD_K.mld_kenmerk_key = :new.mld_kenmerk_key; -- -- Controleer eerst of het verplichte veld ingevuld is. -- IF KenmerkVerplicht IS NOT NULL AND KenmerkOpdrWaarde IS NULL THEN APPLICATION_ERROR_GOTO(-20004, 'mld_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(KenmerkOpdrWaarde) > SrtKenmerkLengte THEN APPLICATION_ERROR_GOTO(-20004, 'mld_m241,'||SrtKenmerkOmschr||','||TO_CHAR(SrtKenmerkLengte)); END IF; ELSIF SrtKenmerkType IN ('N', 'B') 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(KenmerkOpdrWaarde); EXCEPTION WHEN OTHERS THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004, 'mld_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, 'mld_m243,'||SrtKenmerkOmschr||','|| TO_CHAR(SrtKenmerkNMin)||','|| TO_CHAR(SrtKenmerkNMax)); ELSE -- Controleer of de waarde aan het formaat voldoet. KenmerkOpdrWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask)); IF INSTR2(KenmerkOpdrWaarde, '#') <> 0 THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004,'mld_m242,'||SrtKenmerkOmschr||','||FormatMask); END IF; END IF; -- Zet de geconverteerde waarde terug. :new.mld_kenmerkopdr_waarde := KenmerkOpdrWaarde; ELSIF SrtKenmerkType = 'D' THEN -- DATUM KenmerkOpdrWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkOpdrWaarde,'DD-MM-YY'),'DD-MM-YYYY'); -- Zet de geconverteerde waarde terug. :new.mld_kenmerkopdr_waarde := KenmerkOpdrWaarde; END IF; END; END IF; END; / /* Workflow triggers */ CREATE_TRIGGER(mld_t_mld_workflowstep_B_IU) BEFORE INSERT OR UPDATE ON mld_workflowstep FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_workflowstep_key,mld_s_mld_workflowstep_key); END; / CREATE_TRIGGER(mld_t_mld_workflowstep_B_D) BEFORE DELETE ON mld_workflowstep FOR EACH ROW BEGIN UPDATE mld_melding SET mld_workflowstep_key = NULL where mld_workflowstep_key = :old.mld_workflowstep_key; END; / CREATE_TRIGGER(mld_t_mld_workflowrule_B_IU) BEFORE INSERT OR UPDATE ON mld_workflowrule FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_workflowrule_key,mld_s_mld_workflowrule_key); END; / CREATE_TRIGGER(mld_t_mld_deelwerk_b_iu) BEFORE INSERT OR UPDATE ON mld_deelwerk FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_deelwerk_key, mld_s_mld_deelwerk_key); END; / CREATE_TRIGGER(mld_t_mld_deelwerkmat_b_iu) BEFORE INSERT OR UPDATE ON mld_deelwerkmateriaal FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_deelwerkmateriaal_key, mld_s_mld_deelwerkmat_key); END; / CREATE_TRIGGER(mld_t_mld_melding_note_b_iu) BEFORE INSERT OR UPDATE ON mld_melding_note FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_melding_note_key, mld_s_mld_melding_note_key); END; / CREATE OR REPLACE TRIGGER mld_t_mld_melding_note_b_u BEFORE INSERT OR UPDATE ON mld_melding_note FOR EACH ROW BEGIN IF :new.mld_melding_note_omschrijving <> :old.mld_melding_note_omschrijving OR :old.mld_melding_note_omschrijving IS NULL THEN :new.mld_melding_note_wijzigdatum := SYSDATE; END IF; END; / CREATE OR REPLACE TRIGGER mld_t_mld_opdr_note_B_U BEFORE INSERT OR UPDATE ON mld_opdr_note FOR EACH ROW BEGIN IF :new.mld_opdr_note_omschrijving <> :old.mld_opdr_note_omschrijving OR :old.mld_opdr_note_omschrijving IS NULL THEN :new.mld_opdr_note_wijzigdatum := SYSDATE; END IF; END; / CREATE_TRIGGER(mld_t_mld_opdr_note_b_iu) BEFORE INSERT OR UPDATE ON mld_opdr_note FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_opdr_note_key, mld_s_mld_opdr_note_key); END; / CREATE_TRIGGER(mld_t_mld_opdr_uren_b_i) BEFORE INSERT ON mld_opdr_uren FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_opdr_uren_key, mld_s_mld_opdr_uren_key); END; / CREATE_TRIGGER(mld_t_mld_opdr_uren_b_u) BEFORE UPDATE ON mld_opdr_uren FOR EACH ROW BEGIN IF :new.mld_opdr_uren_besteed <> :old.mld_opdr_uren_besteed OR :old.mld_opdr_uren_besteed IS NULL THEN :new.mld_opdr_uren_wijzigdatum := SYSDATE; END IF; END; / CREATE_TRIGGER(mld_t_mld_impropdr_b_iu) BEFORE INSERT OR UPDATE ON mld_impropdr FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_impropdr_key, mld_s_mld_impropdr_key); END; / CREATE_TRIGGER(mld_t_mld_kosten_b_iu) BEFORE INSERT OR UPDATE ON mld_kosten FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_kosten_key, mld_s_mld_kosten_key); END; / CREATE_TRIGGER(mld_t_mld_opdruren_kosten_b_iu) BEFORE INSERT OR UPDATE ON mld_opdruren_kosten FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_opdruren_kosten_key, mld_s_mld_opdruren_kosten_key); END; / CREATE_TRIGGER(mld_t_mld_opdruren_dagk_b_iu) BEFORE INSERT OR UPDATE ON mld_opdruren_dagkosten FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_opdruren_dagkosten_key, mld_s_mld_opdruren_dagk_key); END; / CREATE_TRIGGER(mld_t_dienstniveau_b_iu) BEFORE INSERT OR UPDATE ON mld_dienstniveau FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_dienstniveau_key, mld_s_dienstniveau_key); END; / CREATE_TRIGGER(mld_t_dienstpakket_b_iu) BEFORE INSERT OR UPDATE ON mld_dienstpakket FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_dienstpakket_key, mld_s_dienstpakket_key); END; / CREATE_TRIGGER(mld_t_mld_opdr_uitvoeren_B_IU) BEFORE INSERT OR UPDATE ON mld_opdr_uitvoeren FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_opdr_uitvoeren_key, mld_s_mld_opdr_uitvoeren_key); END; / CREATE_TRIGGER(mld_t_mld_opdr_materiaal_B_I) BEFORE INSERT ON mld_opdr_materiaal FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_opdr_materiaal_key, mld_s_mld_opdr_materiaal_key); END; / CREATE_TRIGGER(mld_t_mld_afmeldtekst_B_IU) BEFORE INSERT OR UPDATE ON mld_afmeldtekst FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_afmeldtekst_key, mld_s_mld_afmeldtekst_key); END; / CREATE_TRIGGER(mld_t_mld_stdmeldingfaq_B_IU) BEFORE INSERT OR UPDATE ON mld_stdmeldingfaq FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_stdmeldingfaq_key, mld_s_mld_stdmeldingfaq_key); END; / CREATE_TRIGGER(mld_t_mld_stdmsrtruimte_B_IU) BEFORE INSERT OR UPDATE ON mld_stdmsrtruimte FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_stdmsrtruimte_key, mld_s_mld_stdmsrtruimte_key); END; / CREATE_TRIGGER(mld_t_mld_stdmsrtgebouw_B_IU) BEFORE INSERT OR UPDATE ON mld_stdmsrtgebouw FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_stdmsrtgebouw_key, mld_s_mld_stdmsrtgebouw_key); END; / CREATE_TRIGGER(mld_t_mld_stdmsrtterrein_B_IU) BEFORE INSERT OR UPDATE ON mld_stdmsrtterrein FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(mld_stdmsrtterrein_key, mld_s_mld_stdmsrtterrein_key); END; / REGISTERRUN('$Id$') #endif // MLD