629 lines
24 KiB
Plaintext
629 lines
24 KiB
Plaintext
#ifdef BES // 03-11-2000 PF
|
|
/* BES_TRI.SRC
|
|
* $Revision$
|
|
* $Id$
|
|
*/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_srtgroep_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_srtgroep
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_srtgroep_key,bes_s_bes_srtgroep_key);
|
|
SET_VERWIJDER_CHILDREN(bes_srtdeel, bes_srtgroep_key, bes_srtgroep_verwijder,
|
|
bes_srtdeel_verwijder,bes_srtgroep);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_srtdeel_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_srtdeel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_srtdeel_key,bes_s_bes_srtdeel_key);
|
|
END;
|
|
/
|
|
|
|
/*
|
|
* Wat info:
|
|
* Oorspronkelijk was er een complex mechanisme met redundante info met betrekking
|
|
* tot de status van bestelling en bestelopdracht
|
|
* - per regel wordt bijgehouden hoeveel stuks gevraagd en hoeveel geleverd
|
|
* - per bestelling/opdracht werd bijgehouden hoeveel regel gevraagd en geleverd
|
|
* - mutaties daarvan werden met triggers conistent gehouden
|
|
*
|
|
* Dit is vervallen. Elke trigger bemoeit zich alleen met zichzelf, en er zijn
|
|
* een tweetal functies bes.updatebestellingstatus en bes.updatebestelopdrstatus
|
|
* die desgevraagd tellen wat de stand is en daarop zonodig de parent aanpassen
|
|
* Daarvan wordt dan ook tracjking bijgehouden.
|
|
*/
|
|
CREATE_TRIGGER(bes_t_bes_bestelling_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_bestelling
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bestelling_key,bes_s_bes_bestelling_key);
|
|
IF :old.bes_bestelling_status IS NULL
|
|
THEN
|
|
-- weet niet of dit (nog)nodig is, om de status op 2 te zetten
|
|
:NEW.bes_bestelling_status := 2;
|
|
--fac.trackaction ('BESAP2', :new.bes_bestelling_key, NULL , NULL, NULL);
|
|
END IF;
|
|
-- gooi fiatverzoeknotificaties weg als gefiatteerd of afgewezen-> opnemen in bovenste deel
|
|
IF (:new.bes_bestelling_status = 3 AND :old.bes_bestelling_status <> 3)
|
|
OR (:new.bes_bestelling_status = 1 AND :old.bes_bestelling_status <> 1)
|
|
THEN
|
|
fac.clrnotifications ('BESAP1', :new.bes_bestelling_key);
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestelling_a_d)
|
|
AFTER DELETE
|
|
ON bes_bestelling
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- Alle BES% weggooien. XML generatie zou er toch op falen
|
|
fac.clrnotifications ('BES%', :old.bes_bestelling_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestelling_item_B_IU)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_bestelling_item
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bestelling_item_key,bes_s_bes_bestelling_item_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestelopdr_B_IU)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_bestelopdr
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bestelopdr_key,bes_s_bes_bestelopdr_key);
|
|
IF :OLD.bes_bestelopdr_datum IS NULL
|
|
THEN
|
|
:NEW.bes_bestelopdr_datum := SYSDATE;
|
|
END IF;
|
|
|
|
IF :OLD.bes_bestelopdr_status IS NULL
|
|
THEN
|
|
:NEW.bes_bestelopdr_status := 2;
|
|
END IF;
|
|
|
|
END;
|
|
/
|
|
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestelopdr_item_B_IU)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_bestelopdr_item
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bestelopdr_item_key,bes_s_bes_bestelopdr_item_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestellevr_B_IU)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_bestellevr
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bestellevr_key,bes_s_bes_bestellevr_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestellevr_item_B_IU)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_bestellevr_item
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bestellevr_item_key,bes_s_bes_bestellevr_item_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestelopdr_item_b_u)
|
|
BEFORE UPDATE
|
|
ON bes_bestelopdr_item
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- Bewaak het aantal geleverde regels
|
|
IF NVL(:new.bes_bestelopdr_item_aantalontv,0) = NVL(:new.bes_bestelopdr_item_aantal,0)
|
|
AND NVL(:old.bes_bestelopdr_item_aantalontv,0) <> NVL(:old.bes_bestelopdr_item_aantal,0)
|
|
THEN
|
|
-- Deze opdrachtregel is geleverd
|
|
:NEW.bes_bestelopdr_item_status := 6;
|
|
-- Maar daarmee ook de corresponderende aanvraagregel(s)
|
|
-- Merk op: het overbodige bes_bestelling_item_aantalontv wordt in de ASP bijgehouden
|
|
UPDATE bes_bestelling_item
|
|
SET bes_bestelling_item_status = 6
|
|
WHERE bes_bestelopdr_item_key = :new.bes_bestelopdr_item_key;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bestelling_item_b_u)
|
|
BEFORE UPDATE
|
|
ON bes_bestelling_item
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF :NEW.bes_bestelopdr_item_key IS NOT NULL AND :OLD.bes_bestelopdr_item_key IS NULL
|
|
THEN
|
|
-- deze aanvraag is nu in een opdracht opgenomen
|
|
:NEW.bes_bestelling_item_status := 5;
|
|
-- Daarmee krijgt de gehele aanvraag de status 5 (als dat al niet zo was)
|
|
bes.setbestellingstatus(:new.bes_bestelling_key, 5, NULL);
|
|
END IF;
|
|
-- Merk op: bijna altijd zal de status al wel op 6 gezet zijn door bes_t_bes_bestelopdr_item_b_u
|
|
-- zie FSN#19735
|
|
IF NVL (:NEW.bes_bestelling_item_aantalontv, 0) = NVL (:NEW.bes_bestelling_item_aantal, 0)
|
|
AND NVL (:OLD.bes_bestelling_item_aantalontv, 0) <> NVL (:OLD.bes_bestelling_item_aantal, 0)
|
|
THEN
|
|
-- deze hele regel is nu geleverd
|
|
:NEW.bes_bestelling_item_status := 6;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
|
|
AUDIT_BEGIN(bes_disc_params)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet2)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet3)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet4)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_bestellimiet5)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_min_bedrag)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_auto_order)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_autoacceptrfo)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_herfiat)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_herfiatpct)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_herfiatmarge)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurpct)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurmarge)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_factmatchmode)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurappr)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_factuurgrens)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_pgb)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_leverdagen)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_remoteconfirm)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_freeartikel)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_punchouturl)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_punch_bedr_key)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_logo_url)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_noti_dagen)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_noti_opdr)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_bonotify)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_retour)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_retour_url)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_levopm_url)
|
|
AUDIT_VALUE(bes_disc_params, bes_ins_discipline_key_inkoop)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_singlegroep)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_kpautorisatie)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_maxartikel)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_contract)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_cnt_disckey)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_cnt_termijn)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_cnt_opzegterm)
|
|
AUDIT_VALUE(bes_disc_params, bes_disc_params_for_others)
|
|
AUDIT_END()
|
|
|
|
CREATE_TRIGGER(BES_T_BES_DISC_PARAMS_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_disc_params
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_disc_params_key, bes_s_bes_disc_params_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_srtkenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_srtkenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_srtkenmerk_key, bes_s_bes_srtkenmerk_key);
|
|
UPDATE_UPPER(bes_srtkenmerk_omschrijving, bes_srtkenmerk_upper,bes_srtkenmerk);
|
|
UPDATE_AANMAAKDATUM(bes_srtkenmerk,bes_srtkenmerk_aanmaak);
|
|
IF (:new.bes_srtkenmerk_verwijder IS NOT NULL AND :old.bes_srtkenmerk_verwijder IS NULL AND
|
|
:new.bes_srtkenmerk_systeem = 1)
|
|
THEN
|
|
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_SYSTEEM');
|
|
END IF;
|
|
|
|
IF :NEW.bes_srtkenmerk_kenmerktype IN ('C', 'N', 'B') AND :NEW.bes_srtkenmerk_lengte IS NULL
|
|
THEN
|
|
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_LENGTE');
|
|
END IF;
|
|
-- Numeriek mag niet te lang zijn (numeric overflow)
|
|
IF :new.bes_srtkenmerk_kenmerktype IN ('N', 'B') AND :new.bes_srtkenmerk_lengte > 20
|
|
THEN
|
|
:new.bes_srtkenmerk_lengte := 20;
|
|
END IF;
|
|
|
|
IF :NEW.bes_srtkenmerk_kenmerktype IN ('N', 'B') AND :OLD.bes_srtkenmerk_key IS NOT NULL
|
|
THEN
|
|
IF :OLD.bes_srtkenmerk_nmin <> :NEW.bes_srtkenmerk_nmin
|
|
OR (:OLD.bes_srtkenmerk_nmin IS NULL AND :NEW.bes_srtkenmerk_nmin IS NOT NULL)
|
|
THEN
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'X'
|
|
INTO dummy
|
|
FROM (SELECT 'X'
|
|
FROM bes_kenmerkbestell
|
|
WHERE fac.safe_to_number (bes_kenmerkbestell_waarde) < :NEW.bes_srtkenmerk_nmin
|
|
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
|
|
FROM bes_kenmerk
|
|
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key)
|
|
UNION ALL
|
|
SELECT 'X'
|
|
FROM bes_kenmerkbesteli
|
|
WHERE fac.safe_to_number (bes_kenmerkbesteli_waarde) < :NEW.bes_srtkenmerk_nmin
|
|
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
|
|
FROM bes_kenmerk
|
|
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key));
|
|
|
|
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MIN');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN
|
|
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MIN');
|
|
END;
|
|
END IF;
|
|
|
|
IF :OLD.bes_srtkenmerk_nmax <> :NEW.bes_srtkenmerk_nmax
|
|
OR (:OLD.bes_srtkenmerk_nmax IS NULL AND :NEW.bes_srtkenmerk_nmax IS NOT NULL)
|
|
THEN
|
|
DECLARE
|
|
dummy CHAR;
|
|
BEGIN
|
|
SELECT 'X'
|
|
INTO dummy
|
|
FROM (SELECT 'X'
|
|
FROM bes_kenmerkbestell
|
|
WHERE fac.safe_to_number (bes_kenmerkbestell_waarde) > :NEW.bes_srtkenmerk_nmax
|
|
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
|
|
FROM bes_kenmerk
|
|
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key)
|
|
UNION ALL
|
|
SELECT 'X'
|
|
FROM bes_kenmerkbesteli
|
|
WHERE fac.safe_to_number (bes_kenmerkbesteli_waarde) > :NEW.bes_srtkenmerk_nmax
|
|
AND bes_kenmerk_key IN (SELECT bes_kenmerk_key
|
|
FROM bes_kenmerk
|
|
WHERE bes_srtkenmerk_key = :OLD.bes_srtkenmerk_key));
|
|
|
|
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MAX');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN
|
|
raise_application_error(-20000, 'bes_C_bes_SRTKENMERK_MAX');
|
|
END;
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
|
|
CREATE_TRIGGER(bes_t_bes_kenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_kenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- FSN#13902: we tolereren het achteraf verplicht maken
|
|
UPDATE_PRIMARY_KEY(bes_kenmerk_key, bes_s_bes_kenmerk_key);
|
|
UPDATE_AANMAAKDATUM(bes_kenmerk, bes_kenmerk_aanmaak);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_kenmerkbestell_b_iu)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_kenmerkbestell
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_kenmerkbestell_key, bes_s_bes_kenmerkbestell_key);
|
|
-- Controleer eerst of de ingevulde waarde goed is.
|
|
--
|
|
IF :NEW.bes_kenmerkbestell_waarde <> :OLD.bes_kenmerkbestell_waarde
|
|
OR :OLD.bes_kenmerkbestell_waarde IS NULL
|
|
OR :NEW.bes_kenmerkbestell_waarde IS NULL
|
|
THEN
|
|
DECLARE
|
|
srtkenmerkomschr bes_srtkenmerk.bes_srtkenmerk_omschrijving%TYPE;
|
|
srtkenmerktype bes_srtkenmerk.bes_srtkenmerk_kenmerktype%TYPE;
|
|
srtkenmerklengte bes_srtkenmerk.bes_srtkenmerk_lengte%TYPE;
|
|
srtkenmerkdec bes_srtkenmerk.bes_srtkenmerk_dec%TYPE;
|
|
srtkenmerknmin bes_srtkenmerk.bes_srtkenmerk_nmin%TYPE;
|
|
srtkenmerknmax bes_srtkenmerk.bes_srtkenmerk_nmax%TYPE;
|
|
kenmerkverplicht bes_kenmerk.bes_kenmerk_verplicht%TYPE;
|
|
numberwaarde NUMBER (25,5);
|
|
formatmask VARCHAR2 (60);
|
|
kenmerkbestellingwaarde bes_kenmerkbestell.bes_kenmerkbestell_waarde%TYPE;
|
|
BEGIN
|
|
kenmerkbestellingwaarde := :NEW.bes_kenmerkbestell_waarde;
|
|
|
|
--
|
|
SELECT bes_sk.bes_srtkenmerk_omschrijving, bes_sk.bes_srtkenmerk_kenmerktype, bes_sk.bes_srtkenmerk_lengte,
|
|
bes_sk.bes_srtkenmerk_dec, bes_sk.bes_srtkenmerk_nmin, bes_sk.bes_srtkenmerk_nmax,
|
|
bes_k.bes_kenmerk_verplicht
|
|
INTO srtkenmerkomschr, srtkenmerktype, srtkenmerklengte,
|
|
srtkenmerkdec, srtkenmerknmin, srtkenmerknmax,
|
|
kenmerkverplicht
|
|
FROM bes_srtkenmerk bes_sk, bes_kenmerk bes_k
|
|
WHERE bes_sk.bes_srtkenmerk_key = bes_k.bes_srtkenmerk_key AND bes_k.bes_kenmerk_key = :NEW.bes_kenmerk_key;
|
|
|
|
--
|
|
-- Controleer eerst of het verplichte veld ingevuld is.
|
|
--
|
|
IF kenmerkverplicht IS NOT NULL AND kenmerkbestellingwaarde IS NULL
|
|
THEN
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_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 (kenmerkbestellingwaarde) > srtkenmerklengte
|
|
THEN
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_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 (kenmerkbestellingwaarde);
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
formatmask := REPLACE (formatmask, '9', '#');
|
|
formatmask := REPLACE (formatmask, '0', '#');
|
|
formatmask := REPLACE (formatmask, 'D', '.');
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_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,
|
|
'bes_m243,'
|
|
|| srtkenmerkomschr
|
|
|| ','
|
|
|| TO_CHAR (srtkenmerknmin)
|
|
|| ','
|
|
|| TO_CHAR (srtkenmerknmax)
|
|
);
|
|
ELSE
|
|
-- Controleer of de waarde aan het formaat voldoet.
|
|
kenmerkbestellingwaarde := LTRIM (NUMBER_TO_CHAR (numberwaarde, formatmask));
|
|
|
|
IF INSTR2 (kenmerkbestellingwaarde, '#') <> 0
|
|
THEN
|
|
formatmask := REPLACE (formatmask, '9', '#');
|
|
formatmask := REPLACE (formatmask, '0', '#');
|
|
formatmask := REPLACE (formatmask, 'D', '.');
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_m242,' || srtkenmerkomschr || ',' || formatmask);
|
|
END IF;
|
|
END IF;
|
|
|
|
-- Zet de geconverteerde waarde terug.
|
|
:NEW.bes_kenmerkbestell_waarde := kenmerkbestellingwaarde;
|
|
ELSIF srtkenmerktype = 'D'
|
|
THEN
|
|
-- DATUM
|
|
kenmerkbestellingwaarde := DATE_TO_CHAR(_TO_DATE2(kenmerkbestellingwaarde, 'DD-MM-YY'), 'DD-MM-YYYY');
|
|
-- Zet de geconverteerde waarde terug.
|
|
:NEW.bes_kenmerkbestell_waarde := kenmerkbestellingwaarde;
|
|
END IF;
|
|
END;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_kenmerkbesteli_b_iu)
|
|
BEFORE INSERT OR UPDATE
|
|
ON bes_kenmerkbesteli
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_kenmerkbesteli_key, bes_s_bes_kenmerkbesteli_key);
|
|
-- Controleer eerst of de ingevulde waarde goed is.
|
|
--
|
|
IF :NEW.bes_kenmerkbesteli_waarde <> :OLD.bes_kenmerkbesteli_waarde
|
|
OR :OLD.bes_kenmerkbesteli_waarde IS NULL
|
|
OR :NEW.bes_kenmerkbesteli_waarde IS NULL
|
|
THEN
|
|
DECLARE
|
|
srtkenmerkomschr bes_srtkenmerk.bes_srtkenmerk_omschrijving%TYPE;
|
|
srtkenmerktype bes_srtkenmerk.bes_srtkenmerk_kenmerktype%TYPE;
|
|
srtkenmerklengte bes_srtkenmerk.bes_srtkenmerk_lengte%TYPE;
|
|
srtkenmerkdec bes_srtkenmerk.bes_srtkenmerk_dec%TYPE;
|
|
srtkenmerknmin bes_srtkenmerk.bes_srtkenmerk_nmin%TYPE;
|
|
srtkenmerknmax bes_srtkenmerk.bes_srtkenmerk_nmax%TYPE;
|
|
kenmerkverplicht bes_kenmerk.bes_kenmerk_verplicht%TYPE;
|
|
numberwaarde NUMBER (25,5);
|
|
formatmask VARCHAR2 (60);
|
|
kenmerkbestelitemwaarde bes_kenmerkbesteli.bes_kenmerkbesteli_waarde%TYPE;
|
|
BEGIN
|
|
kenmerkbestelitemwaarde := :NEW.bes_kenmerkbesteli_waarde;
|
|
|
|
--
|
|
SELECT bes_sk.bes_srtkenmerk_omschrijving, bes_sk.bes_srtkenmerk_kenmerktype, bes_sk.bes_srtkenmerk_lengte,
|
|
bes_sk.bes_srtkenmerk_dec, bes_sk.bes_srtkenmerk_nmin, bes_sk.bes_srtkenmerk_nmax,
|
|
bes_k.bes_kenmerk_verplicht
|
|
INTO srtkenmerkomschr, srtkenmerktype, srtkenmerklengte,
|
|
srtkenmerkdec, srtkenmerknmin, srtkenmerknmax,
|
|
kenmerkverplicht
|
|
FROM bes_srtkenmerk bes_sk, bes_kenmerk bes_k
|
|
WHERE bes_sk.bes_srtkenmerk_key = bes_k.bes_srtkenmerk_key AND bes_k.bes_kenmerk_key = :NEW.bes_kenmerk_key;
|
|
|
|
--
|
|
-- Controleer eerst of het verplichte veld ingevuld is.
|
|
--
|
|
IF kenmerkverplicht IS NOT NULL AND kenmerkbestelitemwaarde IS NULL
|
|
THEN
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_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 (kenmerkbestelitemwaarde) > srtkenmerklengte
|
|
THEN
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_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 (kenmerkbestelitemwaarde);
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
formatmask := REPLACE (formatmask, '9', '#');
|
|
formatmask := REPLACE (formatmask, '0', '#');
|
|
formatmask := REPLACE (formatmask, 'D', '.');
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_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,
|
|
'bes_m243,'
|
|
|| srtkenmerkomschr
|
|
|| ','
|
|
|| TO_CHAR (srtkenmerknmin)
|
|
|| ','
|
|
|| TO_CHAR (srtkenmerknmax)
|
|
);
|
|
ELSE
|
|
-- Controleer of de waarde aan het formaat voldoet.
|
|
kenmerkbestelitemwaarde := LTRIM (NUMBER_TO_CHAR (numberwaarde, formatmask));
|
|
|
|
IF INSTR2 (kenmerkbestelitemwaarde, '#') <> 0
|
|
THEN
|
|
formatmask := REPLACE (formatmask, '9', '#');
|
|
formatmask := REPLACE (formatmask, '0', '#');
|
|
formatmask := REPLACE (formatmask, 'D', '.');
|
|
APPLICATION_ERROR_GOTO(-20004, 'bes_m242,' || srtkenmerkomschr || ',' || formatmask);
|
|
END IF;
|
|
END IF;
|
|
|
|
-- Zet de geconverteerde waarde terug.
|
|
:NEW.bes_kenmerkbesteli_waarde := kenmerkbestelitemwaarde;
|
|
ELSIF srtkenmerktype = 'D'
|
|
THEN
|
|
-- DATUM
|
|
kenmerkbestelitemwaarde := DATE_TO_CHAR(_TO_DATE2(kenmerkbestelitemwaarde, 'DD-MM-YY'), 'DD-MM-YYYY');
|
|
-- Zet de geconverteerde waarde terug.
|
|
:NEW.bes_kenmerkbesteli_waarde := kenmerkbestelitemwaarde;
|
|
END IF;
|
|
END;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_favoriet_b_iu)
|
|
BEFORE INSERT OR UPDATE ON bes_favoriet
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_favoriet_key, bes_s_bes_favoriet_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_staffeltabel_b_iu)
|
|
BEFORE INSERT OR UPDATE ON bes_staffeltabel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_staffeltabel_key, bes_s_bes_staffeltabel_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_staffel_b_iu)
|
|
BEFORE INSERT OR UPDATE ON bes_staffel
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_staffel_key, bes_s_bes_staffel_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_srtprod_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_srtprod
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_srtprod_key, bes_s_bes_srtprod_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_grootheid_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_grootheid
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_grootheid_key, bes_s_bes_grootheid_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_srtdeel_prijs_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_srtdeel_prijs
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_srtdeel_prijs_key, bes_s_bes_srtdeel_prijs_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_srtprod_prijs_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_srtprod_prijs
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_srtprod_prijs_key, bes_s_bes_srtprod_prijs_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bedrijf_srtprod_BIU)
|
|
BEFORE INSERT OR UPDATE ON bes_bedrijf_srtprod
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bedrijf_srtprod_key, bes_s_bes_bedrijf_srtprod_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(bes_t_bes_bedrijf_bedrijf_B_IU)
|
|
BEFORE INSERT OR UPDATE ON bes_bedrijf_bedrijf
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(bes_bedrijf_bedrijf_key, bes_s_bes_bedrijf_bedrijf_key);
|
|
END;
|
|
/
|
|
|
|
REGISTERRUN('$Id$')
|
|
|
|
#endif // BES
|