411 lines
15 KiB
Plaintext
411 lines
15 KiB
Plaintext
#ifdef FIN
|
|
/* $Revision$
|
|
* $Id$
|
|
*/
|
|
|
|
CREATE_TRIGGER(fin_t_fin_factuur_b_iu)
|
|
BEFORE INSERT OR UPDATE 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_iu)
|
|
BEFORE INSERT OR UPDATE 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 APPLICATION_ERROR_GOTO(-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(-20004, 'fin_M232,'|| KenmerkOmschr ||','
|
|
|| TO_CHAR(KenmerkLengte));
|
|
END IF;
|
|
ELSIF KenmerkType IN ('N', 'B')
|
|
/*
|
|
** 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', '.');
|
|
RAISE_APPLICATION_ERROR(-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 APPLICATION_ERROR_GOTO(-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(-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', '.');
|
|
RAISE_APPLICATION_ERROR(-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);
|
|
IF (:new.fin_kenmerk_verwijder IS NOT NULL AND :old.fin_kenmerk_verwijder IS NULL AND
|
|
:new.fin_kenmerk_systeem = 1)
|
|
THEN
|
|
APPLICATION_ERROR(-20003, 'fin_M238');
|
|
END IF;
|
|
IF :new.fin_kenmerk_kenmerktype IN ('C','N', 'B') AND :new.fin_kenmerk_lengte IS NULL
|
|
THEN
|
|
APPLICATION_ERROR(-20000, 'fin_C_fin_KENMERK_LENGTE');
|
|
END IF;
|
|
-- Numeriek mag niet te lang zijn (numeric overflow)
|
|
IF :new.fin_kenmerk_kenmerktype IN ('N', 'B') 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);
|
|
APPLICATION_ERROR(-20000, 'FIN_C_FIN_KENMERK_MIN');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN
|
|
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);
|
|
APPLICATION_ERROR(-20000, 'FIN_C_FIN_KENMERK_MAX');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS THEN
|
|
BEGIN
|
|
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
|