380 lines
13 KiB
Plaintext
380 lines
13 KiB
Plaintext
#ifdef CNT
|
|
/* $Revision$
|
|
* $Id$
|
|
*/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_disc_params_b_iu)
|
|
BEFORE INSERT OR UPDATE ON cnt_disc_params
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_disc_params_key, cnt_s_cnt_disc_params_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_contract_object_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cnt_contract_object
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_contract_object_key,cnt_s_cnt_contract_object_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_contract_plaats_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cnt_contract_plaats
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_contract_plaats_key,cnt_s_cnt_contract_plaats_key);
|
|
|
|
IF ((:old.cnt_alg_plaats_key <> :new.cnt_alg_plaats_key)
|
|
OR (:old.cnt_alg_plaats_key IS NULL))
|
|
THEN
|
|
IF :new.cnt_alg_plaats_code = 'R'
|
|
THEN
|
|
CHECK_KEY_REFERENCE(alg_v_aanwezigruimte , alg_ruimte_key , :new.cnt_alg_plaats_key, 'cnt_m007');
|
|
ELSIF :new.cnt_alg_plaats_code = 'V'
|
|
THEN
|
|
CHECK_KEY_REFERENCE(alg_v_aanwezigverdieping , alg_verdieping_key , :new.cnt_alg_plaats_key, 'cnt_m006');
|
|
ELSIF :new.cnt_alg_plaats_code = 'G'
|
|
THEN
|
|
CHECK_KEY_REFERENCE(alg_v_aanweziggebouw , alg_gebouw_key , :new.cnt_alg_plaats_key, 'cnt_m005');
|
|
ELSIF :new.cnt_alg_plaats_code = 'T'
|
|
THEN
|
|
CHECK_KEY_REFERENCE(alg_v_aanwezigterreinsector, alg_terreinsector_key, :new.cnt_alg_plaats_key, 'cnt_m004');
|
|
ELSIF :new.cnt_alg_plaats_code = 'L'
|
|
THEN
|
|
CHECK_KEY_REFERENCE(alg_v_aanweziglocatie , alg_locatie_key , :new.cnt_alg_plaats_key, 'cnt_m003');
|
|
ELSE
|
|
APPLICATION_ERROR(-20000, 'cnt_m008');
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_contract_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cnt_contract
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF ( :new.cnt_prs_bedrijf_key IS NULL
|
|
AND :new.cnt_prs_afdeling_key IS NULL
|
|
AND :new.cnt_prs_perslid_key IS NULL)
|
|
OR ( :new.cnt_prs_bedrijf_key IS NOT NULL
|
|
AND :new.cnt_prs_afdeling_key IS NOT NULL)
|
|
OR ( :new.cnt_prs_bedrijf_key IS NOT NULL
|
|
AND :new.cnt_prs_perslid_key IS NOT NULL)
|
|
OR ( :new.cnt_prs_perslid_key IS NOT NULL
|
|
AND :new.cnt_prs_afdeling_key IS NOT NULL)
|
|
THEN
|
|
APPLICATION_ERROR_GOTO(-20000,'cnt_m002');
|
|
ELSE
|
|
UPDATE_PRIMARY_KEY(cnt_contract_key,cnt_s_cnt_contract_key);
|
|
IF :new.cnt_contract_nummer_intern IS NULL
|
|
THEN
|
|
:new.cnt_contract_nummer_intern := TO_CHAR(:new.cnt_contract_key);
|
|
END IF;
|
|
END IF;
|
|
|
|
SET_VERWIJDER_CHILDREN(cnt_contract_object,cnt_contract_key,cnt_contract_verwijder,cnt_contract_object_verwijder,cnt_contract);
|
|
SET_VERWIJDER_CHILDREN(cnt_contract_plaats,cnt_contract_key,cnt_contract_verwijder,cnt_contract_plaats_verwijder,cnt_contract);
|
|
BEGIN IF :new.cnt_contract_verwijder IS NOT NULL
|
|
OR ( :new.cnt_contract_verwijder IS NULL
|
|
AND :old.cnt_contract_verwijder IS NOT NULL)
|
|
THEN
|
|
DELETE cnt_contract_onrgoed
|
|
WHERE cnt_contract_onrgoed.cnt_contract_key = :new.cnt_contract_key;
|
|
END IF;
|
|
END;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_contract_dienst_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cnt_contract_dienst
|
|
FOR EACH ROW
|
|
BEGIN
|
|
IF :new.cnt_contract_dienst_key IS NULL THEN
|
|
SELECT cnt_s_cnt_contr_dienst_key.nextval
|
|
INTO :new.cnt_contract_dienst_key FROM DUAL;
|
|
END IF;
|
|
IF :new.PRS_BEDRIJF_KEY IS NULL THEN
|
|
SELECT C.cnt_prs_bedrijf_key, P.prs_perslid_naam_full
|
|
INTO :new.prs_bedrijf_key, :new.CNT_CONTRACT_DIENST_CONTACTEXT
|
|
FROM cnt_contract C, PRS_V_PERSLID_FULLNAMES_ALL P
|
|
WHERE C.cnt_contract_key=:new.cnt_contract_key
|
|
AND P.prs_perslid_key = C.prs_contactpersoon_key;
|
|
--:new.CNT_CONTRACT_DIENST_CONTACTEXT := NULL;
|
|
END IF;
|
|
IF :new.CNT_CONTRACT_DIENST_CONTACTINT IS NULL THEN
|
|
SELECT P.prs_perslid_naam_full
|
|
INTO :new.CNT_CONTRACT_DIENST_CONTACTINT
|
|
FROM cnt_contract C, PRS_V_PERSLID_FULLNAMES_ALL P
|
|
WHERE C.cnt_contract_key=:new.cnt_contract_key
|
|
AND P.prs_perslid_key = C.prs_contactpersoon_key;
|
|
END IF;
|
|
DECLARE
|
|
dummy VARCHAR2(1);
|
|
BEGIN
|
|
SELECT 'x'
|
|
INTO dummy
|
|
from mld_stdmelding S, cnt_contract C
|
|
where mld_stdmelding_key=:new.mld_stdmelding_key
|
|
and c.ins_discipline_key=s.mld_ins_discipline_key
|
|
and c.CNT_CONTRACT_KEY=:new.cnt_contract_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN raise_application_error(-20000, 'cnt_m031');
|
|
END;
|
|
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_srtkenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE ON cnt_srtkenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_srtkenmerk_key, cnt_s_cnt_srtkenmerk_key);
|
|
UPDATE_UPPER(cnt_srtkenmerk_omschrijving, cnt_srtkenmerk_upper,cnt_srtkenmerk);
|
|
UPDATE_AANMAAKDATUM(cnt_srtkenmerk, cnt_srtkenmerk_aanmaak);
|
|
IF (:new.cnt_srtkenmerk_verwijder IS NOT NULL AND :old.cnt_srtkenmerk_verwijder IS NULL AND
|
|
:new.cnt_srtkenmerk_systeem = 1)
|
|
THEN
|
|
raise_application_error(-20003, 'CNT_C_CNT_SRTKENMERK_SYSTEEM');
|
|
END IF;
|
|
--
|
|
IF (:new.cnt_srtkenmerk_kenmerktype = 'C'
|
|
OR :new.cnt_srtkenmerk_kenmerktype = 'N')
|
|
AND :new.cnt_srtkenmerk_lengte IS NULL
|
|
THEN
|
|
raise_application_error(-20000, 'CNT_C_CNT_SRTKENMERK_LENGTE');
|
|
END IF;
|
|
-- Numeriek mag niet te lang zijn (numeric overflow)
|
|
IF :new.cnt_srtkenmerk_kenmerktype = 'N'
|
|
AND :new.cnt_srtkenmerk_lengte > 20
|
|
THEN
|
|
:new.cnt_srtkenmerk_lengte := 20;
|
|
END IF;
|
|
--
|
|
IF :new.cnt_srtkenmerk_kenmerktype = 'N'
|
|
AND :old.cnt_srtkenmerk_key IS NOT NULL
|
|
THEN
|
|
IF :old.cnt_srtkenmerk_nmin <> :new.cnt_srtkenmerk_nmin
|
|
OR (:old.cnt_srtkenmerk_nmin IS NULL AND :new.cnt_srtkenmerk_nmin IS NOT NULL)
|
|
THEN
|
|
DECLARE
|
|
Dummy CHAR;
|
|
BEGIN
|
|
SELECT 'X'
|
|
INTO Dummy
|
|
FROM cnt_kenmerkcontract
|
|
WHERE FAC.SAFE_TO_NUMBER(cnt_kenmerkcontract_waarde) < :new.cnt_srtkenmerk_nmin
|
|
AND cnt_kenmerk_key IN
|
|
(SELECT cnt_kenmerk_key
|
|
FROM cnt_kenmerk
|
|
WHERE cnt_srtkenmerk_key = :old.cnt_srtkenmerk_key
|
|
);
|
|
raise_application_error(-20000, 'CNT_C_CNT_SRTKENMERK_MIN');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN raise_application_error(-20000, 'CNT_C_CNT_SRTKENMERK_MIN');
|
|
END;
|
|
END IF;
|
|
--
|
|
IF :old.cnt_srtkenmerk_nmax <> :new.cnt_srtkenmerk_nmax
|
|
OR (:old.cnt_srtkenmerk_nmax IS NULL AND :new.cnt_srtkenmerk_nmax IS NOT NULL)
|
|
THEN
|
|
DECLARE
|
|
Dummy CHAR;
|
|
BEGIN
|
|
SELECT 'X'
|
|
INTO Dummy
|
|
FROM cnt_kenmerkcontract
|
|
WHERE FAC.SAFE_TO_NUMBER(cnt_kenmerkcontract_waarde) > :new.cnt_srtkenmerk_nmax
|
|
AND cnt_kenmerk_key IN
|
|
(SELECT cnt_kenmerk_key
|
|
FROM cnt_kenmerk
|
|
WHERE cnt_srtkenmerk_key = :old.cnt_srtkenmerk_key
|
|
);
|
|
raise_application_error(-20000, 'CNT_C_CNT_SRTKENMERK_MAX');
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NULL;
|
|
WHEN TOO_MANY_ROWS
|
|
THEN raise_application_error(-20000, 'CNT_C_CNT_SRTKENMERK_MAX');
|
|
END;
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_kenmerk_b_iu)
|
|
BEFORE INSERT OR UPDATE ON cnt_kenmerk
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- FSN#13902: we tolereren het achteraf verplicht maken
|
|
UPDATE_PRIMARY_KEY(cnt_kenmerk_key, cnt_s_cnt_kenmerk_key);
|
|
UPDATE_AANMAAKDATUM(cnt_kenmerk, cnt_kenmerk_aanmaak);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_kenmerkcontract_b_iu)
|
|
BEFORE INSERT OR UPDATE ON cnt_kenmerkcontract
|
|
FOR EACH ROW
|
|
BEGIN
|
|
-- Controleer eerst of de ingevulde waarde goed is.
|
|
--
|
|
IF :new.cnt_kenmerkcontract_waarde <> :old.cnt_kenmerkcontract_waarde
|
|
OR :old.cnt_kenmerkcontract_waarde IS NULL
|
|
OR :new.cnt_kenmerkcontract_waarde IS NULL
|
|
THEN
|
|
DECLARE
|
|
SrtKenmerkOmschr cnt_srtkenmerk.cnt_srtkenmerk_omschrijving%TYPE;
|
|
SrtKenmerkType cnt_srtkenmerk.cnt_srtkenmerk_kenmerktype%TYPE;
|
|
SrtKenmerkLengte cnt_srtkenmerk.cnt_srtkenmerk_lengte%TYPE;
|
|
SrtKenmerkDec cnt_srtkenmerk.cnt_srtkenmerk_dec%TYPE;
|
|
SrtKenmerkNMin cnt_srtkenmerk.cnt_srtkenmerk_nmin%TYPE;
|
|
SrtKenmerkNMax cnt_srtkenmerk.cnt_srtkenmerk_nmax%TYPE;
|
|
KenmerkVerplicht cnt_kenmerk.cnt_kenmerk_verplicht%TYPE;
|
|
NumberWaarde NUMBER(25,5);
|
|
FormatMask VARCHAR2(60);
|
|
KenmerkContractWaarde cnt_kenmerkcontract.cnt_kenmerkcontract_waarde%TYPE;
|
|
BEGIN
|
|
:new.cnt_kenmerkcontract_wijzig := SYSDATE;
|
|
KenmerkContractWaarde := :new.cnt_kenmerkcontract_waarde;
|
|
--
|
|
SELECT CNT_SK.cnt_srtkenmerk_omschrijving
|
|
, CNT_SK.cnt_srtkenmerk_kenmerktype
|
|
, CNT_SK.cnt_srtkenmerk_lengte
|
|
, CNT_SK.cnt_srtkenmerk_dec
|
|
, CNT_SK.cnt_srtkenmerk_nmin
|
|
, CNT_SK.cnt_srtkenmerk_nmax
|
|
, CNT_K.cnt_kenmerk_verplicht
|
|
INTO SrtKenmerkOmschr
|
|
, SrtKenmerkType
|
|
, SrtKenmerkLengte
|
|
, SrtKenmerkDec
|
|
, SrtKenmerkNMin
|
|
, SrtKenmerkNMax
|
|
, KenmerkVerplicht
|
|
FROM cnt_srtkenmerk CNT_SK
|
|
, cnt_kenmerk CNT_K
|
|
WHERE CNT_SK.cnt_srtkenmerk_key = CNT_K.cnt_srtkenmerk_key
|
|
AND CNT_K.cnt_kenmerk_key = :new.cnt_kenmerk_key;
|
|
--
|
|
-- Controleer eerst of het verplichte veld ingevuld is.
|
|
--
|
|
IF KenmerkVerplicht IS NOT NULL AND KenmerkContractWaarde IS NULL
|
|
THEN
|
|
APPLICATION_ERROR_GOTO(-20004, 'cnt_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(KenmerkContractWaarde) > SrtKenmerkLengte
|
|
THEN
|
|
APPLICATION_ERROR_GOTO(-20004, 'cnt_m241,'||SrtKenmerkOmschr||','||TO_CHAR(SrtKenmerkLengte));
|
|
END IF;
|
|
ELSIF SrtKenmerkType = 'N'
|
|
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(KenmerkContractWaarde);
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN FormatMask := REPLACE(FormatMask, '9', '#');
|
|
FormatMask := REPLACE(FormatMask, '0', '#');
|
|
FormatMask := REPLACE(FormatMask, 'D', '.');
|
|
raise_application_error(-20004,'cnt_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, 'cnt_m243,'||SrtKenmerkOmschr||','||
|
|
TO_CHAR(SrtKenmerkNMin)||','||
|
|
TO_CHAR(SrtKenmerkNMax));
|
|
ELSE
|
|
-- Controleer of de waarde aan het formaat voldoet.
|
|
KenmerkContractWaarde := LTRIM(NUMBER_TO_CHAR(NumberWaarde, FormatMask));
|
|
IF INSTR2(KenmerkContractWaarde, '#') <> 0
|
|
THEN
|
|
FormatMask := REPLACE(FormatMask, '9', '#');
|
|
FormatMask := REPLACE(FormatMask, '0', '#');
|
|
FormatMask := REPLACE(FormatMask, 'D', '.');
|
|
APPLICATION_ERROR_GOTO(-20004,'cnt_m242,'||SrtKenmerkOmschr||','||FormatMask);
|
|
END IF;
|
|
END IF;
|
|
-- Zet de geconverteerde waarde terug.
|
|
:new.cnt_kenmerkcontract_waarde := KenmerkContractWaarde;
|
|
ELSIF SrtKenmerkType = 'D'
|
|
THEN
|
|
-- DATUM
|
|
KenmerkContractWaarde := DATE_TO_CHAR(_TO_DATE2(KenmerkContractWaarde,'DD-MM-YY'),'DD-MM-YYYY');
|
|
-- Zet de geconverteerde waarde terug.
|
|
:new.cnt_kenmerkcontract_waarde := KenmerkContractWaarde;
|
|
END IF;
|
|
END;
|
|
UPDATE_PRIMARY_KEY(cnt_kenmerkcontract_key, cnt_s_cnt_kenmerkcontract_key);
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_contract_onrg_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cnt_contract_onrgoed
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_contract_onrgoed_key,cnt_s_cnt_onrgoed_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_mutatie_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cnt_mutatie
|
|
FOR EACH ROW
|
|
BEGIN
|
|
:new.cnt_mutatie_datum := SYSDATE;
|
|
UPDATE_PRIMARY_KEY(cnt_mutatie_key,cnt_s_cnt_mutatie_key);
|
|
IF :new.cnt_mutatie_key IS NOT NULL AND :old.cnt_mutatie_key IS NULL THEN
|
|
:new.cnt_mutatie_datum_ingang := SYSDATE;
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(cnt_t_cnt_termijn_B_IU)
|
|
BEFORE INSERT OR UPDATE ON cnt_termijn
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_termijn_key, cnt_s_cnt_termijn_key);
|
|
END;
|
|
/
|
|
|
|
CREATE_TRIGGER(mld_t_cnt_contract_note_b_iu)
|
|
BEFORE INSERT OR UPDATE ON cnt_contract_note
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_contract_note_key, cnt_s_cnt_contract_note_key);
|
|
END;
|
|
/
|
|
CREATE OR REPLACE TRIGGER cnt_t_cnt_factuurschema_B_IU
|
|
BEFORE INSERT OR UPDATE ON cnt_factuurschema
|
|
FOR EACH ROW
|
|
BEGIN
|
|
UPDATE_PRIMARY_KEY(cnt_factuurschema_key, cnt_s_cnt_factuurschema_key);
|
|
END;
|
|
/
|
|
|
|
REGISTERRUN('$Id$')
|
|
|
|
#endif // CNT
|