Files
Database/PRS/PRS_TRI.SRC
Peter Feij 23890b5191 #2376
svn path=/Database/trunk/; revision=6735
1999-04-28 16:04:56 +00:00

674 lines
27 KiB
Plaintext

#ifdef PRS // 13-03-96 AH
/* CREA_TRI.SRC maakt de triggers aan voor PRS */
/*
* Revisie:
*
* 28-04-1999 PF #2376 CHECK_CADMUTATIE2 bij prs_werkplek toegevoegd; BCO/BCP restanten verwijderd.
* --- 01.44 ---
* 20-04-1999 BIV Trigger prs_t_prs_werkplek aangepast. Verwijderdatum van de delen worden nu niet meer gelijk aan SYSDATE,
* maar aan :new.prs_werkplek_verwijder i.v.m. mogelijke Undo vanuit AutoCAD.
* --- 01.43 ---
* --- 01.42 ---
* --- 01.41 ---
* --- 01.40 ---
* --- 01.39 ---
* --- 01.38 ---
* --- 01.37 ---
* --- 01.36 ---
* --- 01.35 ---
* --- 01.34 ---
* 19/02/1998 AH Nieuwe #define AKZ gebruikt
* 10/02/1998 AH Trigger voor AKZ_PRSIMPORT toegevoegd
* 13/11/1997 AH #1473, CREATE TRIGGER vervangen door CREATE_TRIGGER()
* --- 01.33 ---
* --- 01.32 ---
* --- 01.31 ---
* --- 01.30 ---
* 10-7-97 AH #1365, PRS_PERSLIDWERKPLEK_VERWIJDER-velden weggehaald.
* 6/20/97 AH #1312: PRS_T_PRS_AFDELING_B_IU aangepast. De CASCADE-verwijderen van PRS_PERSLIDWERKPLEK
* verplaatst naar PRS011/Verwijderen. In de trigger een RESTRICTED toegevoegd om
* evt. fouten te kunnen voorkomen.
* 5/26/97 AH #1255: Het VERWIJDER-veld in PRS_PERSLIDWERKPLEK is overbodig en mag niet meer
* meer gebruikt worden. Hiervoor is een controle toegevoegd in
* PRS_T_PRS_PERSLIDWERKPLEK_B_IU.
* PRS_T_PRS_PERSLID_B_IU aangepast. De CASCADE-verwijderen van PRS_PERSLIDWERKPLEK
* verplaatst naar PRS013/Verwijderen. In de trigger een RESTRICTED toegevoegd om
* evt. fouten te kunnen voorkomen.
* --- 01.29 ---
* --- 01.28 ---
* --- 01.27 ---
* --- 01.26 ---
* --- 01.25 ---
* 10-12-96 AH PRS_BEDRIJF en PRS_LOCBESTEK-triggers gebruiken ten onrechte
* BCO_DEFAULTUITV_KEYS zonder BCO
* --- 01.24 ---
* 04-12-96 AH PRS_BEDRIJF: Checkbox 'Leverancier' mag niet uitgezet worden
* als er nog bestelopdrachten bij horen.
* Checkbox 'Uitvoerende' mag niet worden uitgezet als het bedrijf
* of een functie bij bedrijf nog als default uitvoerende bij een
* INS_SRTDEEL of als het bedrijf of functie bij bedrijf als
* Uitvoerende/Default uitvoerende bij een niet verwerkte opdracht
* voorkomt.
* --- 01.23 ---
* 15-11-96 AH De DELETE-code van locatiebestek is nu een FUNCTION geworden
* en wordt aangeroepen en in PRS021 en PRS023 bij Verwijderen
* De trigger PRS_T_PRS_LOCATIEBESTEK_B_D is verwijderd.
* 14-11-96 AH LOG#1035: PRS_T_PRS_LOCATIEBESTEK_B_IU en _B_D aangepast.
* 13-11-96 AH LOG#1035: PRS_T_PRS_DISCBESTEK_B_D aangepast, Als discipline-
* bestek als default uitvoerende is aangegeven bij mld_opdr
* of bij prevopdr dan mag deze ook niet verwijderd worden.
* Zelfde extra conditie geldt bij verwijderen LocatieBestek
* --- 01.22 ---
* --- 01.21 ---
* 28-10-96 AH LOG#914: PRS_T_PRS_LOCATIEBESTEK_B_D toegevoegd. Controle op
* uitgegeven opdrachten voor de locatie bij bestek.
* 28-10-96 AH LOG#910: In PRS_T_PRS_PERSLID_B_IU werd BCO_NIETBESCHIK verwijderd
* Deze codeis verplaatst naar Verwijderen in PRS013.FMB
* 25-10-96 AH LOG#906: PRS_T_PRS_SRTPERSLID_B_IU aangepast.
* 01-10-96 KTH prs_v_aanwezigperslidwerkplek wordt prs_perslidwerkplek ivm.
* mutating table prs_werkplek bij verwijderen van werkplekken
* --- 01.20 ---
* 16-09-96 AH PRS_T_PRS_BEDRIJF_B_IU aangepast: de bijbehorende functies
* worden mee verwijderd. Lopende bestekken Resticted,
* Uitgegeven opdrachten Restricten.
* PRS_T_PRS_SRTPERSLID_B_IU aangepast: Verwijderen met Uitgegeven
* opdrachten Restricted.
* PRS_T_PRS_PERSLID_B_IU aangepast: Verwijderen met Uitgegeven
* opdrachten Restricted. Verwijderen BCO_NIETBESCHIK cascade.
* PRS_T_PRS_DISCBESTEK_B_D aangepast: Verwijderen met opdrachten
* Restricted.
* --- 01.19 ---
* 20-08-96 AH In trigger voor SRTPERSLID #ifdef BCO toegevoegd
* 12-08-96 AH PRS_T_PRS_BESTEK_B_IU aangepast: Bestek_key komt uit
* PRS_S_PRS_BESTEK_KEY. Bestek is zelf geen uitvoerende.
* 01-08-96 RW Disciplinebestek is nu uitvoerende, sequence aangepast.
* 01-08-96 AH Logmelding 687 ifdef HUI in PRS_T_PRS_WERKPLEK_B_IU toegevoegd.
* 31-07-96 AH PRS_T_PRS_DISCBESTEK_B_IU toegevoegd. De koppeling tussen
* DISCIPLINE en BESTEK mag niet verwijderd worden als het
* bestek als default uitvoerende is aangegeven bij INS_SRTDEEL.
* 31-07-96 AH PRS_T_PRS_BESTEK_B_IU aangepast, PRS_BESTEK_UPPER_NR-update
* 30-07-96 KTH - THEN en END IF miste in prs_t_prs_srtperslid_B_IU
* - prs_t_prs_disciplinebestek_B_IU verkort naar
* prs_t_prs_discbestek_B_IU
* 29-07-96 KTH _B_IU-triggers voor PRS_BESTEK, PRS_DISCIPLINEBESTEK en
* PRS_LOCATIEBESTEK toegevoegd (vooralsnog #ifdef INS)
* 25-07-96 AH PRS_T_PRS_WERKPLEK_B_IU aangepast: ORA-4091 ...mutating....
* opgelost.
* 25-07-96 AH PRS_T_PRS_PERSLID_B_IU en PRS_T_PRS_AFDELING_B_IU aangepast:
* Als een persoon/afdeling verwijderd
* wordt EN de persoon/afdeling heeft nog inventaris, dan wordt de inventaris
* ontkoppeld en evt. gemerged met inventaris die nog in die
* ruimte of werkplek of slaapplaats staat.
* 27-06-96 AH PRS_T_PRS_WERKPLEK_B_IU aangepast voor verwijderen
* werkplek/slaapplaats. Als er INS_DELEN geplaatst
* zijn, dan mag de werkplek/slaapplaats niet verwijderd worden.
* De PRS_DWGUPTODATE van de verdieping-tekening wordt NIET
* bijgewerkt, want er verdieping moet dan opgezocht worden
* en dat mag niet bij CASCADE-delete via ruimte of hoger in de
* OR-boom (ter voorkoming van ORA_4091 'Mutating-table').
* --- 01.18 ---
* --- 01.17 ---
* --- 01.16 ---
* --- 01.15 ---
* 22-05-96 AH PRS_BEDRIJF toegevoegd.
* --- 01.14 ---
* --- 01.13 ---
* --- 01.12 ---
* 03-04-96 AH PRS_PERSLID verwijderen -> INV_DELEN ontkoppelen.
* 03-04-96 AH PRS_AFDELING verwijderen -> INV_DELEN ontkoppelen.
* 03-04-96 AH PRS_WERKPLEK verwijderen -> INV_DELEN ontkoppelen.
* 19-03-96 AH Trigger PRS_T_PRS_WERKPLEK_B_IU aangepast voor PRS_DWGUPTODATE
* in ALG_VERDIEPING.
* 13-03-96 AH NIEUWE OPZET SRC-files.
*
* 05-03-96 AH PRS_T_PRS_PERSLID_B_IU aangepast voor "verwijderen"
* PRS_PERSLIDWERKPLEK.
* 20-02-96 PF Extra update-upper in prs_t_prs_afdeling_B_IU toegevoegd
* 16-02-96 PF UNIQUE-triggers verwijderd, nu via constraint:
* prs_t_prs_srtperslid_A_IU
* prs_t_prs_afdeling_A_IU
* 05-02-96 AH Trigger PRS_T_PRS_SRTPERSLID_B_IU aangepast, check verwijzing
* naar prs_perslid bij verwijderen.
* 02-02-96 AH Trigger PRS_T_PRS_AFDELING_A_IU aangepast, upper moet gechecked
* worden op aanwezig
* 31-01-96 AH De trigger van prs_t_srtperslid foutief gedefinieerd,
* CHECK_UNIQUE moet over de aanwezig-view.
* 20-12-95 KTH verwijzigen naar 'prs_m...' geintroduceerd
*/
#include "comsql.h"
#include "ALG\algsql.h"
#ifdef HOORTNIETBIJFACILITOR
CREATE OR REPLACE FUNCTION prs_t_prs_locatiebestek_B_D( bestek_key IN NUMBER, locatie_key IN NUMBER,
key_soort IN CHAR )
RETURN VARCHAR2 AS
error_msg fac_message.fac_message_code%TYPE;
BEGIN
error_msg := NULL;
#ifdef MLD
/* Een LocatieBestek mag NIET verwijderd worden als:
* - Het (discipline)bestek als (default) uitvoerende is aangegeven bij
* een of meer opdrachten die betrekking hebben op de te verwijderen
* LocatieBestek.
*/
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM prs_disciplinebestek PRS_DB, mld_opdr MLD_O,
mld_melding MLD_M, mld_v_onroerendgoed_locatie MLD_OL,
prs_locatiebestek PRS_LB
WHERE MLD_M.mld_alg_onroerendgoed_keys = MLD_OL.alg_onroerendgoed_keys
AND ((MLD_OL.alg_locatie_key = PRS_LB.alg_locatie_key
AND key_soort = 'B')
OR (MLD_OL.alg_locatie_key = locatie_key
AND key_soort = 'L'))
AND MLD_O.mld_melding_key = MLD_M.mld_melding_key
AND (PRS_DB.prs_disciplinebestek_key = MLD_O.mld_uitvoerende_keys
)
AND PRS_DB.prs_bestek_key = PRS_LB.prs_bestek_key
AND PRS_DB.prs_bestek_key = bestek_key;
error_msg := 'prs_m092';
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN error_msg := 'prs_m092';
END;
#endif
RETURN error_msg;
END;
/
#endif //HOORTNIETBIJFACILITOR
CREATE_TRIGGER(prs_t_prs_srtperslid_B_IU)
BEFORE INSERT OR UPDATE ON prs_srtperslid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_srtperslid_key, prs_s_prs_alluitvoerende_keys);
UPDATE_UPPER(prs_srtperslid_omschrijving, prs_srtperslid_upper);
CHECK_NOG_REFERENCES(prs_perslid, prs_srtperslid_verwijder,
prs_v_aanwezigperslid, prs_srtperslid_key, 'prs_m014');
#ifdef MLD
// Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
// uitvoerende deze SRTPERSLID.
IF :new.prs_srtperslid_verwijder IS NOT NULLDATUM
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_opdr MLD_O, mld_statusopdr MLD_S
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND MLD_S.mld_statusopdr_omschrijving = 'Uitgegeven'
AND MLD_O.mld_uitvoerende_keys = :new.prs_srtperslid_key;
APPLICATION_ERROR(-20000, 'prs_m084');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m084');
END;
END IF;
#endif // MLD
END;
/
CREATE_TRIGGER(prs_t_prs_afdeling_B_IU)
BEFORE INSERT OR UPDATE ON prs_afdeling
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_afdeling_key, prs_s_prs_afdeling_key);
UPDATE_UPPER(prs_afdeling_naam, prs_afdeling_upper);
CHECK_NOG_REFERENCES(prs_perslid, prs_afdeling_verwijder,
prs_v_aanwezigperslid, prs_afdeling_key, 'prs_m015');
/* 6/20/97/AH #1312, De CASCADE-verwijderen van
* PRS_PERSLIDWERKPLEK verplaatst naar PRS011/Verwijderen. In de trigger een
* RESTRICTED toegevoegd om evt. fouten te kunnen voorkomen.
*/
CHECK_NOG_REFERENCES(prs_perslid, prs_afdeling_verwijder,
prs_v_aanwezigperslidwerkplek, prs_afdeling_key, 'SYSTEM ERROR: In Afdeling, er zijn nog PRS_PERSLIDWERKPLEK-records');
#ifdef INV
/* Ontkoppel de artikelen van de te verwijderen afdeling.
* De artikelen kunnen gekoppeld zijn aan een ruimte, werkplek of
* slaapplaats:
* - Als dit zo is, dan kan er een ander artikel al op die
* plek staan. Het artikel moet dan gemerged worden.
* - Als er geen ander artikel is dan kan gewoon PRS_BEZIT_KEY leeg gemaakt
* worden.
*/
IF :new.prs_afdeling_verwijder IS NOT NULL
THEN
DECLARE
CURSOR Cur1(afdeling_key IN NUMBER) IS (SELECT ins_deel_key,
ins_srtdeel_key,
ins_deel_omschrijving,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_prs_bezit_key,
ins_deel_aantal
FROM inv_v_aanwezigdeel
WHERE ins_prs_bezit_key = afdeling_key
AND ins_prs_bezit_type = 'A');
Cur_rec Cur1%ROWTYPE;
deel_key NUMBER(10);
deel_omschrijving VARCHAR2(50);
ruimte_key NUMBER(10);
ruimte_type VARCHAR2(1);
BEGIN
/* Doorloop alle inventaris van de verwijderde afdeling */
FOR Cur_rec IN Cur1(:old.prs_afdeling_key)
LOOP
BEGIN
/* Als er een koppeling met ruimte, werkplek of slaapplaats is
* dan mergen (aantal van INS_DEEL ophogen).
*/
SELECT ins_deel_key,
ins_alg_ruimte_key,
ins_alg_ruimte_type
INTO deel_key,
ruimte_key,
ruimte_type
FROM inv_v_aanwezigdeel
WHERE ins_srtdeel_key = Cur_rec.ins_srtdeel_key
AND NVL(ins_deel_omschrijving, ' ') = NVL(Cur_rec.ins_deel_omschrijving, ' ')
AND NVL(ins_alg_ruimte_key, -1) = NVL(Cur_rec.ins_alg_ruimte_key, -1)
AND NVL(ins_alg_ruimte_type, ' ') = NVL(Cur_rec.ins_alg_ruimte_type, ' ')
AND ins_prs_bezit_key IS NULL
AND ins_prs_bezit_type IS NULL;
UPDATE ins_deel
SET ins_deel_aantal = ins_deel_aantal + Cur_rec.ins_deel_aantal
WHERE ins_deel_key = deel_key;
UPDATE ins_deel
SET ins_deel_verwijder = SYSDATE
WHERE ins_deel_key = Cur_rec.ins_deel_key;
EXCEPTION
/* Ander kan gewoon PRS_BEZIT_KEY leeg gemaakt worden. */
WHEN NO_DATA_FOUND
THEN UPDATE ins_deel
SET ins_prs_bezit_key = NULL,
ins_prs_bezit_type = NULL
WHERE ins_deel_key = Cur_rec.ins_deel_key;
END;
END LOOP;
END;
END IF;
#endif
END;
/
CREATE_TRIGGER(prs_t_prs_perslid_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslid_key, prs_s_prs_alluitvoerende_keys);
UPDATE_UPPER(prs_perslid_naam, prs_perslid_upper);
/*
* 10-7-97 AH #1365, PRS_PERSLIDWERKPLEK_VERWIJDER-velden weggehaald.
*
* 5/26/97/AH #1255, PRS_T_PRS_PERSLID_B_IU aangepast. De CASCADE-verwijderen van
* PRS_PERSLIDWERKPLEK verplaatst naar PRS013/Verwijderen. In de trigger een
* RESTRICTED toegevoegd om evt. fouten te kunnen voorkomen.
*/
CHECK_NOG_REFERENCES(prs_perslid, prs_perslid_verwijder,
prs_v_aanwezigperslidwerkplek, prs_perslid_key, 'SYSTEM ERROR: In Perslid, er zijn nog PRS_PERSLIDWERKPLEK-records');
#ifdef INV
/* Ontkoppel de artikelen van de te verwijderen persoon.
* De artikelen kunnen gekoppeld zijn aan een ruimte, werkplek of
* slaapplaats:
* - Als dit zo is, dan kan er een ander artikel al op die
* plek staan. Het artikel moet dan gemerged worden.
* - Als er geen ander artikel is dan kan gewoon PRS_BEZIT_KEY leeg gemaakt
* worden.
*/
IF :new.prs_perslid_verwijder IS NOT NULL
THEN
DECLARE
CURSOR Cur1(perslid_key IN NUMBER) IS (SELECT ins_deel_key,
ins_srtdeel_key,
ins_deel_omschrijving,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_prs_bezit_key,
ins_deel_aantal
FROM inv_v_aanwezigdeel
WHERE ins_prs_bezit_key = perslid_key
AND ins_prs_bezit_type = 'P');
Cur_rec Cur1%ROWTYPE;
deel_key NUMBER(10);
deel_omschrijving VARCHAR2(50);
ruimte_key NUMBER(10);
ruimte_type VARCHAR2(1);
BEGIN
/* Doorloop alle inventaris van de verwijderde persoon */
FOR Cur_rec IN Cur1(:old.prs_perslid_key)
LOOP
BEGIN
/* Als er een koppeling met ruimte, werkplek of slaapplaats is
* dan mergen (aantal van INS_DEEL ophogen).
*/
SELECT ins_deel_key,
ins_alg_ruimte_key,
ins_alg_ruimte_type
INTO deel_key,
ruimte_key,
ruimte_type
FROM inv_v_aanwezigdeel
WHERE ins_srtdeel_key = Cur_rec.ins_srtdeel_key
AND NVL(ins_deel_omschrijving, ' ') = NVL(Cur_rec.ins_deel_omschrijving, ' ')
AND NVL(ins_alg_ruimte_key, -1) = NVL(Cur_rec.ins_alg_ruimte_key, -1)
AND NVL(ins_alg_ruimte_type, ' ') = NVL(Cur_rec.ins_alg_ruimte_type, ' ')
AND ins_prs_bezit_key IS NULL
AND ins_prs_bezit_type IS NULL;
UPDATE ins_deel
SET ins_deel_aantal = ins_deel_aantal + Cur_rec.ins_deel_aantal
WHERE ins_deel_key = deel_key;
UPDATE ins_deel
SET ins_deel_verwijder = SYSDATE
WHERE ins_deel_key = Cur_rec.ins_deel_key;
EXCEPTION
/* Ander kan gewoon PRS_BEZIT_KEY leeg gemaakt worden. */
WHEN NO_DATA_FOUND
THEN UPDATE ins_deel
SET ins_prs_bezit_key = NULL,
ins_prs_bezit_type = NULL
WHERE ins_deel_key = Cur_rec.ins_deel_key;
END;
END LOOP;
END;
END IF;
#endif // INV
#ifdef MLD
// Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
// uitvoerende deze PERSLID.
IF :new.prs_perslid_verwijder IS NOT NULLDATUM
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_opdr MLD_O, mld_statusopdr MLD_S
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND MLD_S.mld_statusopdr_omschrijving = 'Uitgegeven'
AND MLD_O.mld_uitvoerende_keys = :new.prs_perslid_key;
APPLICATION_ERROR(-20000, 'prs_m085');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m085');
END;
END IF;
#endif // MLD
END;
/
CREATE_TRIGGER(prs_t_prs_werkplek_B_IU)
BEFORE INSERT OR UPDATE ON prs_werkplek
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_werkplek_key, prs_s_prs_werkplek_key);
/* Een werkplek mag niet verwijderd worden als er nog personen
* aan gekoppeld zijn.
*/
CHECK_CADMUTATIE2(prs_werkplek_verwijder, prs_werkplek_getekend, prs_alg_ruimte_key, 'prs_m160')
IF :new.prs_werkplek_module = 'PRR'
THEN
/* 01-10-96/KTH
* prs_v_aanwezigperslidwerkplek wordt prs_perslidwerkplek ivm.
* mutating table prs_werkplek bij verwijderen werkplekken (RHY)
*/
CHECK_NOG_REFERENCES(prs_werkplek, prs_werkplek_verwijder,
prs_perslidwerkplek, prs_werkplek_key, 'prs_m016');
END IF;
#ifdef INS
IF :new.prs_werkplek_verwijder <> :old.prs_werkplek_verwijder
THEN
UPDATE ins_deel
SET ins_deel_verwijder = :new.prs_werkplek_verwijder
WHERE ins_alg_ruimte_key = :old.prs_werkplek_key
AND ins_alg_ruimte_type = 'W';
END IF;
#endif //INS
#ifdef INV
IF :new.prs_werkplek_verwijder IS NOT NULL
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'x'
INTO dummy
FROM inv_v_aanwezigdeel
WHERE ins_alg_ruimte_key = :new.prs_werkplek_key
AND ins_alg_ruimte_type = 'W';
APPLICATION_ERROR(-20000, 'prs_m055');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m055');
END;
END IF;
#endif
END;
/
CREATE_TRIGGER(prs_t_prs_perslidwerkplek_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslidwerkplek
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslidwerkplek_key, prs_s_prs_perslidwerkplek_key);
/*
* 10-7-97 AH #1365, PRS_PERSLIDWERKPLEK_VERWIJDER-velden weggehaald.
*
* 5/26/97 AH #1255, VERWIJDER-veld mag niet meer gebruikt worden ivm. MUTATING TABLE
* bij CASCADE van PRS_PERSLID, enz. Dus hier een controle toegevoegd
*/
END;
/
CREATE_TRIGGER(prs_t_prs_bedrijf_B_IU)
BEFORE INSERT OR UPDATE ON prs_bedrijf
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_bedrijf_key,prs_s_prs_alluitvoerende_keys);
UPDATE_UPPER(prs_bedrijf_naam,prs_bedrijf_naam_upper);
SET_VERWIJDER_CHILDREN(prs_srtperslid, prs_bedrijf_key,
prs_bedrijf_verwijder, prs_srtperslid_verwijder);
#ifdef HOORTNIETBIJFACILITOR
// Bedrijf mag niet verwijderd worden als er nog
// bestekken zijn van dit bedrijf.
IF :new.prs_bedrijf_verwijder IS NOT NULLDATUM
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM prs_bestek
WHERE prs_bedrijf_key = :new.prs_bedrijf_key;
APPLICATION_ERROR(-20000, 'prs_m083');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m083');
END;
END IF;
#endif //HOORTNIETBIJFACILITOR
#ifdef MLD
// Niet verwijderen als nog MLD_OPDR's zijn met status 'Uitgegeven' en
// uitvoerende dit bedrijf
IF :new.prs_bedrijf_verwijder IS NOT NULLDATUM
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_opdr MLD_O, mld_statusopdr MLD_S
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND MLD_S.mld_statusopdr_omschrijving = 'Uitgegeven'
AND MLD_O.mld_uitvoerende_keys = :new.prs_bedrijf_key;
APPLICATION_ERROR(-20000, 'prs_m086');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m086');
END;
END IF;
#endif // MLD
#ifdef MLD
IF :old.prs_bedrijf_leverancier IS NOT NULL
AND :new.prs_bedrijf_leverancier IS NULL
THEN
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_bestelopdr
WHERE mld_prs_bedrijf_key = :new.prs_bedrijf_key;
APPLICATION_ERROR(-20000, 'PRS_M101');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'PRS_M101');
END;
END IF;
#endif // MLD
END;
/
#ifdef HOORTNIETBIJFACILITOR
/* 29-07-96/KTH Vooralsnog zijn de bestektriggers alleen #ifdef INS */
#ifdef INS
CREATE_TRIGGER(prs_t_prs_bestek_B_IU)
BEFORE INSERT OR UPDATE ON prs_bestek
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_bestek_key,prs_s_prs_bestek_key);
UPDATE_UPPER(prs_bestek_nr, prs_bestek_upper_nr);
END;
/
CREATE_TRIGGER(prs_t_prs_discbestek_B_IU)
BEFORE INSERT OR UPDATE ON prs_disciplinebestek
FOR EACH ROW
BEGIN
/* AH Disciplinebestek is een uitvoerende, bestek niet meer. */
UPDATE_PRIMARY_KEY(prs_disciplinebestek_key,prs_s_prs_alluitvoerende_keys);
END;
/
CREATE_TRIGGER(prs_t_prs_locatiebestek_B_IU)
BEFORE INSERT OR UPDATE ON prs_locatiebestek
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_locatiebestek_key,prs_s_prs_locatiebestek_key);
#if defined(MLD)
/* Een LocatieBestek mag NIET toegevoegd worden als:
* - Het (discipline)bestek als (default) uitvoerende is aangegeven bij
* een of meer opdrachten en als er nog geen LocatieBestek-records zijn
* voor het bestek.
* Uitzondering: Als er opdrachten zijn EN deze allemaal betrekking hebben
* op de toe te voegen locatie.
* Een LocatieBestek mag NIET worden gewijzigd als:
* - Het (discipline)bestek als (default) uitvoerende is aangegeven bij
* een of meer opdrachten die betrekking hebben op de te wijzigen
* LocatieBestek.
*/
// Toevoegen
IF :old.alg_locatie_key IS NULL
AND :new.alg_locatie_key IS NOT NULL
THEN
#ifdef MLD
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM mld_opdr MLD_O,
prs_disciplinebestek PRS_DB,
mld_melding MLD_M,
mld_v_onroerendgoed_locatie MLD_OL
WHERE MLD_M.mld_alg_onroerendgoed_keys = MLD_OL.alg_onroerendgoed_keys
AND MLD_OL.alg_locatie_key <> :new.alg_locatie_key
AND MLD_O.mld_melding_key = MLD_M.mld_melding_key
AND (PRS_DB.prs_disciplinebestek_key = MLD_O.mld_uitvoerende_keys
)
AND PRS_DB.prs_bestek_key = :new.prs_bestek_key
AND NOT EXISTS (SELECT 'X'
FROM prs_locatiebestek PRS_LB
WHERE PRS_LB.prs_bestek_key = :new.prs_bestek_key
AND MLD_OL.alg_locatie_key = PRS_LB.alg_locatie_key
AND PRS_LB.alg_locatie_key <> :new.alg_locatie_key);
APPLICATION_ERROR(-20000, 'prs_m098');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m098');
END;
#endif // MLD
// Wijzigen
ELSIF :old.alg_locatie_key IS NOT NULL
AND :new.alg_locatie_key IS NOT NULL
THEN
#ifdef MLD
DECLARE
dummy CHAR;
BEGIN
SELECT 'X'
INTO dummy
FROM prs_disciplinebestek PRS_DB, mld_opdr MLD_O,
mld_melding MLD_M, mld_v_onroerendgoed_locatie MLD_OL
WHERE MLD_M.mld_alg_onroerendgoed_keys = MLD_OL.alg_onroerendgoed_keys
AND MLD_OL.alg_locatie_key = :old.alg_locatie_key
AND MLD_O.mld_melding_key = MLD_M.mld_melding_key
AND (PRS_DB.prs_disciplinebestek_key = MLD_O.mld_uitvoerende_keys
)
AND PRS_DB.prs_bestek_key = :old.prs_bestek_key;
APPLICATION_ERROR(-20000, 'prs_m097');
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
WHEN TOO_MANY_ROWS
THEN APPLICATION_ERROR(-20000, 'prs_m097');
END;
#endif // MLD
END IF;
#endif // MLD
END;
/
#endif // INS
#endif //HOORTNIETBIJFACILITOR
/* De trigger ALG_T_ALG_RUIMTE_B_IU moet aangepast worden. PRS_WERKPLEK moet
* ook verwijderd worden.
*/
#ifdef AKZ
CREATE_TRIGGER(akz_t_akz_prsimport_b_iu)
BEFORE INSERT OR UPDATE ON akz_prsimport
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(akz_prsimport_key, akz_s_akz_prsimport_key);
END;
/
#endif // AKZ
#endif // PRS