#ifdef FIN /* $Revision$ * $Id$ */ CREATE_TRIGGER(fin_t_fin_factuur_b_i) BEFORE INSERT ON fin_factuur FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_factuur_key, fin_s_fin_factuur_key); /* constraint: gefiatteerd of hoger mag pas als 1 van de referenties is ingevuld */ IF :new.fin_factuur_boekmaand IS NULL THEN :new.fin_factuur_boekmaand := DATE_TO_CHAR(:new.fin_factuur_datum, 'YYYY-MM'); END IF; END; / CREATE_TRIGGER(fin_t_fin_factuurregel_b_i) BEFORE INSERT ON fin_factuurregel FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_factuurregel_key, fin_s_fin_factuurregel_key); END; / CREATE_TRIGGER(fin_t_fin_kenmerkfactuur_b_iu) BEFORE INSERT OR UPDATE ON fin_kenmerkfactuur FOR EACH ROW BEGIN UPDATE_AANMAAKDATUM(fin_kenmerkfactuur, fin_kenmerkfactuur_aanmaak); /* ** Controleer eerst of de ingevulde waarde goed is. */ IF :new.fin_kenmerkfactuur_waarde <> :old.fin_kenmerkfactuur_waarde OR :old.fin_kenmerkfactuur_waarde IS NULL OR :new.fin_kenmerkfactuur_waarde IS NULL THEN DECLARE KenmerkOmschr fin_kenmerk.fin_kenmerk_omschrijving%TYPE; KenmerkType fin_kenmerk.fin_kenmerk_kenmerktype%TYPE; KenmerkLengte fin_kenmerk.fin_kenmerk_lengte%TYPE; KenmerkDec fin_kenmerk.fin_kenmerk_dec%TYPE; KenmerkNMin fin_kenmerk.fin_kenmerk_nmin%TYPE; KenmerkNMax fin_kenmerk.fin_kenmerk_nmax%TYPE; NumberWaarde NUMBER(25,5); FormatMask VARCHAR2(60); KenmerkWaarde fin_kenmerkfactuur.fin_kenmerkfactuur_waarde%TYPE; BEGIN KenmerkWaarde := :new.fin_kenmerkfactuur_waarde; BEGIN DECLARE dummy VARCHAR2(1); BEGIN SELECT fin_kenmerk_omschrijving , fin_kenmerk_kenmerktype , fin_kenmerk_lengte , fin_kenmerk_dec , fin_kenmerk_nmin , fin_kenmerk_nmax INTO KenmerkOmschr , KenmerkType , KenmerkLengte , KenmerkDec , KenmerkNMin , KenmerkNMax FROM fin_kenmerk WHERE fin_kenmerk_key = :new.fin_kenmerk_key; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'INS_R_INS_KENMERK_KEY1'); END; /* Kijk welk KenmerkType gebruikt wordt. ** Aan de hand daarvan moet een controle uitgevoerd worden. **/ IF KenmerkType = 'C' /* ** Char */ THEN /* ** Controleer of de lengte te groot of goed is */ IF LENGTH(KenmerkWaarde) > KenmerkLengte THEN APPLICATION_ERROR_GOTO(-20004, 'fin_M232,'|| KenmerkOmschr ||',' || TO_CHAR(KenmerkLengte)); END IF; ELSIF KenmerkType = 'N' /* ** Number */ THEN /* ** Controleer of er een numerieke waarde ingevuld is */ IF KenmerkDec IS NULL OR KenmerkDec = 0 THEN FormatMask := RPAD('9', KenmerkLengte, '9'); ELSE FormatMask := RPAD('9', KenmerkLengte - KenmerkDec, '9') ||'D'||RPAD('9', KenmerkDec, '9'); END IF; /* ** Controleer of er een numerieke waarde ingevuld is */ BEGIN NumberWaarde := TO_NUMBER(KenmerkWaarde); EXCEPTION WHEN OTHERS THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004, 'fin_M233,'|| KenmerkOmschr ||',' || FormatMask); END; /* ** Controleer of de waarde binnen NMin en NMax ligt */ IF ( (KenmerkNMin IS NOT NULL AND NumberWaarde < KenmerkNMin) OR (KenmerkNMax IS NOT NULL AND NumberWaarde > KenmerkNMax)) THEN APPLICATION_ERROR_GOTO(-20004, 'fin_M234,'|| KenmerkOmschr ||',' || TO_CHAR(KenmerkNMin)||',' || TO_CHAR(KenmerkNMax)); ELSE /* ** Controleer of de waarde aan het formaat voldoet */ KenmerkWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask)); IF INSTR2(KenmerkWaarde, '#') <> 0 THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004, 'fin_M233,'|| KenmerkOmschr ||',' || FormatMask); END IF; END IF; /* ** Zet de geconverteerde waarde terug */ :new.fin_kenmerkfactuur_waarde := KenmerkWaarde; ELSIF KenmerkType = 'D' /* ** Datum */ THEN KenmerkWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkWaarde,'DD-MM-YY'),'DD-MM-YYYY'); /* ** Zet de geconverteerde waarde terug */ :new.fin_kenmerkfactuur_waarde := KenmerkWaarde; END IF; END; END; UPDATE_PRIMARY_KEY(fin_kenmerkfactuur_key, fin_s_fin_kenmerkfactuur_key); END IF; END; / CREATE_TRIGGER(fin_t_fin_kenmerkfacreg_b_iu) BEFORE INSERT OR UPDATE ON fin_kenmerkfactregel FOR EACH ROW BEGIN UPDATE_AANMAAKDATUM(fin_kenmerkfactregel, fin_kenmerkfactregel_aanmaak); /* ** Controleer eerst of de ingevulde waarde goed is. */ IF :new.fin_kenmerkfactregel_waarde <> :old.fin_kenmerkfactregel_waarde OR :old.fin_kenmerkfactregel_waarde IS NULL OR :new.fin_kenmerkfactregel_waarde IS NULL THEN DECLARE KenmerkOmschr fin_kenmerk.fin_kenmerk_omschrijving%TYPE; KenmerkType fin_kenmerk.fin_kenmerk_kenmerktype%TYPE; KenmerkLengte fin_kenmerk.fin_kenmerk_lengte%TYPE; KenmerkDec fin_kenmerk.fin_kenmerk_dec%TYPE; KenmerkNMin fin_kenmerk.fin_kenmerk_nmin%TYPE; KenmerkNMax fin_kenmerk.fin_kenmerk_nmax%TYPE; NumberWaarde NUMBER(25,5); FormatMask VARCHAR2(60); KenmerkWaarde fin_kenmerkfactregel.fin_kenmerkfactregel_waarde%TYPE; BEGIN KenmerkWaarde := :new.fin_kenmerkfactregel_waarde; BEGIN DECLARE dummy VARCHAR2(1); BEGIN SELECT fin_kenmerk_omschrijving , fin_kenmerk_kenmerktype , fin_kenmerk_lengte , fin_kenmerk_dec , fin_kenmerk_nmin , fin_kenmerk_nmax INTO KenmerkOmschr , KenmerkType , KenmerkLengte , KenmerkDec , KenmerkNMin , KenmerkNMax FROM fin_kenmerk WHERE fin_kenmerk_key = :new.fin_kenmerk_key; EXCEPTION WHEN NO_DATA_FOUND THEN raise_application_error(-20000, 'INS_R_INS_KENMERK_KEY1'); END; /* Kijk welk KenmerkType gebruikt wordt. ** Aan de hand daarvan moet een controle uitgevoerd worden. **/ IF KenmerkType = 'C' /* ** Char */ THEN /* ** Controleer of de lengte te groot of goed is */ IF LENGTH(KenmerkWaarde) > KenmerkLengte THEN APPLICATION_ERROR_GOTO(-20004, 'fin_M232,'|| KenmerkOmschr ||',' || TO_CHAR(KenmerkLengte)); END IF; ELSIF KenmerkType = 'N' /* ** Number */ THEN /* ** Controleer of er een numerieke waarde ingevuld is */ IF KenmerkDec IS NULL OR KenmerkDec = 0 THEN FormatMask := RPAD('9', KenmerkLengte, '9'); ELSE FormatMask := RPAD('9', KenmerkLengte - KenmerkDec, '9') ||'D'||RPAD('9', KenmerkDec, '9'); END IF; /* ** Controleer of er een numerieke waarde ingevuld is */ BEGIN NumberWaarde := TO_NUMBER(KenmerkWaarde); EXCEPTION WHEN OTHERS THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004, 'fin_M233,'|| KenmerkOmschr ||',' || FormatMask); END; /* ** Controleer of de waarde binnen NMin en NMax ligt */ IF ( (KenmerkNMin IS NOT NULL AND NumberWaarde < KenmerkNMin) OR (KenmerkNMax IS NOT NULL AND NumberWaarde > KenmerkNMax)) THEN APPLICATION_ERROR_GOTO(-20004, 'fin_M234,'|| KenmerkOmschr ||',' || TO_CHAR(KenmerkNMin)||',' || TO_CHAR(KenmerkNMax)); ELSE /* ** Controleer of de waarde aan het formaat voldoet */ KenmerkWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask)); IF INSTR2(KenmerkWaarde, '#') <> 0 THEN FormatMask := REPLACE(FormatMask, '9', '#'); FormatMask := REPLACE(FormatMask, '0', '#'); FormatMask := REPLACE(FormatMask, 'D', '.'); APPLICATION_ERROR_GOTO(-20004, 'fin_M233,'|| KenmerkOmschr ||',' || FormatMask); END IF; END IF; /* ** Zet de geconverteerde waarde terug */ :new.fin_kenmerkfactregel_waarde := KenmerkWaarde; ELSIF KenmerkType = 'D' /* ** Datum */ THEN KenmerkWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkWaarde,'DD-MM-YY'),'DD-MM-YYYY'); /* ** Zet de geconverteerde waarde terug */ :new.fin_kenmerkfactregel_waarde := KenmerkWaarde; END IF; END; END; UPDATE_PRIMARY_KEY(fin_kenmerkfactregel_key, fin_s_fin_kenmerkfactregel_key); END IF; END; / CREATE_TRIGGER(fin_t_fin_kenmerk_b_iu) BEFORE INSERT OR UPDATE ON fin_kenmerk FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_kenmerk_key, fin_s_fin_kenmerk_key); UPDATE_UPPER(fin_kenmerk_omschrijving, fin_kenmerk_upper, fin_kenmerk); UPDATE_UPPER(fin_kenmerk_code, fin_kenmerk_code, fin_kenmerk); IF (:new.fin_kenmerk_verwijder IS NOT NULL AND :old.fin_kenmerk_verwijder IS NULL AND :new.fin_kenmerk_systeem = 1) THEN raise_application_error(-20000, 'fin_M238'); END IF; IF :new.fin_kenmerk_kenmerktype IN ('C','N') AND :new.fin_kenmerk_lengte IS NULL THEN raise_application_error(-20000, 'fin_C_fin_KENMERK_LENGTE'); END IF; -- Numeriek mag niet te lang zijn (numeric overflow) IF :new.fin_kenmerk_kenmerktype = 'N' AND :new.fin_kenmerk_lengte > 20 THEN :new.fin_kenmerk_lengte := 20; END IF; IF :new.fin_kenmerk_kenmerktype = 'N' AND :old.fin_kenmerk_key IS NOT NULL THEN IF :old.fin_kenmerk_nmin <> :new.fin_kenmerk_nmin OR :old.fin_kenmerk_nmin IS NULL AND :new.fin_kenmerk_nmin IS NOT NULL THEN DECLARE Dummy CHAR; BEGIN SELECT 'X' INTO Dummy FROM fin_kenmerkfactuur WHERE fin_kenmerk_key = :old.fin_kenmerk_key AND fin_kenmerk_key IN (SELECT fin_kenmerk_key FROM fin_kenmerkfactuur WHERE fin_kenmerk_key = :old.fin_kenmerk_key AND FAC.SAFE_TO_NUMBER(fin_kenmerkfactuur_waarde) < :new.fin_kenmerk_nmin AND rownum=1); raise_application_error(-20000, 'FIN_C_FIN_KENMERK_MIN'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN raise_application_error(-20000, 'FIN_C_FIN_KENMERK_MIN'); END; END IF; IF :old.fin_kenmerk_nmax <> :new.fin_kenmerk_nmax OR :old.fin_kenmerk_nmax IS NULL AND :new.fin_kenmerk_nmax IS NOT NULL THEN DECLARE Dummy CHAR; BEGIN SELECT 'X' INTO Dummy FROM fin_kenmerkfactuur WHERE fin_kenmerk_key = :old.fin_kenmerk_key AND fin_kenmerk_key IN (SELECT fin_kenmerk_key FROM fin_kenmerkfactuur WHERE fin_kenmerk_key = :old.fin_kenmerk_key AND FAC.SAFE_TO_NUMBER(fin_kenmerkfactuur_waarde) > :new.fin_kenmerk_nmax AND rownum=1); raise_application_error(-20000, 'FIN_C_FIN_KENMERK_MAX'); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN BEGIN raise_application_error(-20000, 'FIN_C_FIN_KENMERK_MAX'); END; END; END IF; END IF; UPDATE_AANMAAKDATUM(fin_kenmerk, fin_kenmerk_aanmaak); END; / CREATE_TRIGGER(fin_t_fin_btwtabel_b_iu) BEFORE INSERT OR UPDATE ON fin_btwtabel FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_btwtabel_key, fin_s_fin_btwtabel_key); END; / CREATE_TRIGGER(fin_t_fin_btwtabelwaarde_b_iu) BEFORE INSERT OR UPDATE ON fin_btwtabelwaarde FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_btwtabelwaarde_key, fin_s_fin_btwtabelwaarde_key); END; / CREATE_TRIGGER(fin_t_fin_factuur_note_b_iu) BEFORE INSERT OR UPDATE ON fin_factuur_note FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_factuur_note_key, fin_s_fin_factuur_note_key); END; / CREATE_TRIGGER(fin_t_verkoopfactuurkop_b_i) BEFORE INSERT ON fin_verkoopfactuurkop FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_verkoopfactuurkop_key, fin_s_verkoopfactuurkop_key); END; / CREATE_TRIGGER(fin_t_fin_verkoopfactuur_b_iu) BEFORE INSERT OR UPDATE ON fin_verkoopfactuur FOR EACH ROW BEGIN UPDATE_PRIMARY_KEY(fin_verkoopfactuur_key, fin_s_fin_verkoopfactuur_key); END; / REGISTERRUN('$Id$') #endif // FIN