Files
Database/MLD/MLD_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

916 lines
32 KiB
Plaintext

#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