Files
Database/FIN/FIN_TRI.SRC
Erik Groener 59786f0839 AAGB#75630 Graag kolom ins_srtkenmerk_code toevoegen aan tabel
svn path=/Database/trunk/; revision=59476
2023-03-07 11:41:14 +00:00

413 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 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 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', '.');
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', 'B') 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 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);
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