Files
Database/_UP/330TO400.SRC
Peter Feij 4158699ddd Wijzigingen die niet in 400 thuishoren naar 400to410 verplaatst
svn path=/Database/trunk/; revision=7643
2001-01-24 14:45:48 +00:00

1277 lines
47 KiB
Plaintext

SET TERMOUT ON
SET FEEDBACK OFF
SET ECHO OFF
--
-- Update script van Facilitor versie 3.30 naar 4.00
--
/*
* Dit script wordt geprecompileerd dus is het mogelijk (verplicht)
* om #ifdef's te gebruiken voor de diverse modules.
*
* Gebruik daar waar in de *.SQL-variant geen commentaar-tekst moet komen de
* C-style van uitcommentarieren. Daar waar WEL tekst in de uitvoer moet komen
* moet -- gebruikt worden.
*
*
*/
#include "modules.h"
#include "comsql.h"
#include "INS\inssql.h"
/*
* Test eerst of de vorige versie van module FAC zoals genoemd in tabel
* fac_module wel het te verwachten versienummer heeft
* als dat niet zo is dient de gebruiker het script ZELF af te breken middels
* control-c.
* Als dat wel zo is vervolgt het script en zal aan het einde van het script
* het interne versienummer en de datum worden bijgewerkt.
*/
#ifdef MASTER
SPOOL OFF
set heading off
clear screen
PROMPT ***********************************************************************
PROMPT
PROMPT UPGRADE SCRIPT van Facilitor versie 03.30 naar 04.00
PROMPT
SELECT 'De huidige versie van Facilitor zou moeten zijn 03.30 en is: '
|| fac_module_version
FROM fac_module
WHERE fac_module_name='FAC';
PROMPT
PROMPT Indien de huidige versie NIET de verwachte versie is mag dit script
PROMPT niet worden gerund! In dit geval dient het script nu middels
PROMPT CONTROL-C te worden afgebroken.
PROMPT
PROMPT Indien de versies overeenkomen dient nu ENTER te worden gedrukt...
PROMPT
PROMPT ***********************************************************************
ACCEPT nix PROMPT ''
PROMPT
PROMPT De upgrade wordt vervolgd. Even geduld a.u.b...
PROMPT
SET TERMOUT OFF
SET HEADING OFF
SET FEEDBACK OFF
SET ECHO OFF
SET VERIFY OFF
SET LINESIZE 1000
SET SERVEROUTPUT ON;
SPOOL $330TO400.SQL
PROMPT SPOOL $330TO400.LST;
UPDMOD(FAC,330TO400)
UPDMOD(ALG,330TO400)
UPDMOD(PRS,330TO400)
UPDMOD(INS,330TO400)
UPDMOD(MLD,330TO400)
UPDMOD(CAD,330TO400)
UPDMOD(AKZ,330TO400)
UPDMOD(PRJ,330TO400)
UPDMOD(RES,330TO400)
UPDMOD(SCH,330TO400)
UPDMOD(SLE,330TO400)
UPDATE_VERSION('04.00');
COMMIT;
PROMPT SPOOL OFF;
SPOOL OFF
START $330TO400.SQL
#endif // MASTER
/* denk aan #ifdef constructies! */
/* PLAATS HIERONDER DE UPDATES */
#ifdef ALG
CREATE_TRIGGER(alg_t_alg_kostenpost_B_IU)
BEFORE INSERT OR UPDATE ON alg_kostenpost
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(alg_kostenpost_key,alg_s_alg_kostenpost_key);
UPDATE_UPPER(alg_kostenpost_omschrijving,alg_kostenpost_upper);
UPDATE_AANMAAKDATUM(alg_kostenpost, alg_kostenpost_aanmaak);
#ifdef MLD
IF :new.alg_kostenpost_verwijder IS NOT NULL
THEN
DECLARE
dummy NUMBER;
BEGIN
SELECT COUNT(*)
INTO dummy
FROM mld_opdr MLD_O, mld_statusopdr MLD_S
WHERE MLD_O.mld_alg_kostenpost_key = :old.alg_kostenpost_key
AND MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND MLD_S.mld_statusopdr_upper = 'MLD_UITGEGEVEN';
IF dummy > 0
THEN
APPLICATION_ERROR(-20000, 'mld_m152');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
END;
END IF;
#endif
END;
/
#endif // ALG
#ifdef INS
ALTER TABLE ins_tab_discipline
ADD
(
ins_discipline_kostensoort
VARCHAR2(7)
);
--
-- all_discipline moet opnieuw aangemaakt worden omdat er een veld aan ins_tab_discipline is toegevoegd.
--
CREATE OR REPLACE VIEW all_discipline
AS
SELECT INS_TD.* FROM fac_gebruiker FAC_G, ins_tab_discipline INS_TD
WHERE INS_TD.ins_discipline_key = FAC_G.fac_gebruiker_kolomkey
AND FAC_G.fac_gebruiker_tabel = 'INS_DISCIPLINE'
AND FAC_G.fac_gebruiker_kolom = 'INS_DISCIPLINE_KEY'
AND FAC_G.fac_gebruiker_module = INS_TD.ins_discipline_module
AND FAC_G.fac_gebruiker_username = USER;
CREATE_TRIGGER(ins_t_ins_deel_B_IU)
BEFORE INSERT OR UPDATE ON ins_deel
FOR EACH ROW
BEGIN
-- LET OP : Deze trigger is ook gedefinieerd in RES !!
UPDATE_PRIMARY_KEY(ins_deel_key,ins_s_ins_inst_keys);
UPDATE_UPPER(ins_deel_omschrijving,ins_deel_upper);
-- Indien verplaatsing of verwijdering of reincarnatie dan alleen vanuit de
-- CAD-omgeving, d.i. als tegelijk ins_deel_getekend een nieuwe waarde krijgt.
-- Dus een foutmelding als dit niet zo is.
CHECK_CADMUTATIE2(ins_deel_verwijder, ins_deel_getekend, ins_alg_ruimte_key, 'ins_m187');
IF :new.ins_deel_parent_key IS NULL
THEN
DECLARE
Dummy BOOLEAN;
BEGIN
--Dummy := fac_p_fac_save_restore.SavePrimaryKey('INS_DEEL_VERWIJDER', :new.ins_deel_key);
Dummy := fac_p_fac_save_restore.SavePrimaryKeyAndDate('INS_DEEL_VERWIJDER', :new.ins_deel_key, :old.ins_deel_verwijder);
END;
END IF;
IF :new.ins_deel_verwijder IS NOT NULL
THEN
DECLARE
Dummy BOOLEAN;
BEGIN
Dummy := fac_p_fac_save_restore.SavePrimaryKey('INS_DEEL_ONTKOPPEL', :new.ins_deel_key);
END;
END IF;
-- Vul het veld INS_DISCIPLINE van het huidige deel.
IF :old.ins_srtdeel_key IS NULL
OR :old.ins_srtdeel_key <> :new.ins_srtdeel_key
OR :old.ins_discipline_key IS NULL
THEN
BEGIN
SELECT INS_D.ins_discipline_key
INTO :new.ins_discipline_key
FROM ins_srtdeel INS_SD
, ins_srtgroep INS_SG
, ins_tab_discipline INS_D
WHERE INS_SD.ins_srtdeel_key = :new.ins_srtdeel_key
AND INS_SD.ins_srtgroep_key = INS_SG.ins_srtgroep_key
AND INS_SG.ins_discipline_key = INS_D.ins_discipline_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN :new.ins_discipline_key := NULL;
END;
END IF;
-- Zoek de (redundante) alg_locatie_key erbij indien verplaatst.
IF :old.ins_alg_ruimte_key IS NULL
OR :old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
OR :new.ins_alg_locatie_key IS NULL
THEN
IF :new.ins_alg_ruimte_type IN ('A','P')
THEN
NULL;
ELSE
BEGIN
SELECT alg_locatie_key
INTO :new.ins_alg_locatie_key
FROM ins_v_alg_overzicht
WHERE alg_onroerendgoed_keys = :new.ins_alg_ruimte_key
AND alg_onroerendgoed_type = :new.ins_alg_ruimte_type;
EXCEPTION
WHEN NO_DATA_FOUND
THEN :new.ins_alg_locatie_key := NULL;
END;
END IF;
END IF;
/* Bij INS_DEEL in INS-mode moet INS_ALG_RUIMTE_KEY ingevuld zijn
* en wel met ruimte, verdieping, gebouw of terreinsector.
* Daarvoor moet ook het INS_ALG_RUIMTE_TYPE veld goed ingevuld zijn
* (met 'R' of 'V' of 'G' of 'T' of 'A' of 'P').
* Dit geldt als INS_ALG_RUIMTE_KEY veranderd is of als er een
* nieuw record geinsert wordt.
*
*
* In INV-mode hoeft INS_ALG_RUIMTE_KEY niet ingevuld te zijn, maar
* als deze ingevuld is moet INS_ALG_RUIMTE_KEY met ruimte of werkplek
* gevuld zijn, daarvoor moet het veld INS_ALG_RUITMTE_KEY goed
* ingevuld zijn (met 'R' of 'W').
*
* In INV-mode kan het veld INS_PRS_BEZIT_KEY ook ingevuld zijn, maar
* INS_ALG_RUIMTE_KEY en INS_PRS_BEZIT_KEY kunnen niet beide ingevuld worden.
* INS_PRS_BEZIT_KEY kan de waarde perslid of Afdeling bevatten en het
* veld INS_PRS_BEZIT_TYPE moet dan goed ingevuld zijn (met 'P' of 'A').
* AH 05-06-96 Nu kunnen beide velden ingevuld zijn.
*/
IF :new.ins_deel_module = 'INS'
AND (:old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
OR :old.ins_alg_ruimte_key IS NULL)
THEN
IF :old.ins_alg_ruimte_type IN ('W','R','T')
AND :old.ins_deel_getekend IS NOT NULL
AND :new.ins_alg_ruimte_type IN ('A','P')
THEN
APPLICATION_ERROR(-20000, 'ins_m196');
END IF;
IF :new.ins_alg_ruimte_type = 'W' /* 990218/BIV - #2251 - Deel kan ook op werkplek worden geplaatst */
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigwerkplek , prs_werkplek_key , :new.ins_alg_ruimte_key, 'ins_m174');
ELSIF :new.ins_alg_ruimte_type = 'R'
THEN
CHECK_KEY_REFERENCE(alg_v_aanwezigruimte , alg_ruimte_key , :new.ins_alg_ruimte_key, 'ins_m092');
ELSIF :new.ins_alg_ruimte_type = 'T'
THEN
CHECK_KEY_REFERENCE(alg_v_aanwezigterreinsector, alg_terreinsector_key, :new.ins_alg_ruimte_key, 'ins_m095');
ELSIF :new.ins_alg_ruimte_type = 'A'
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigafdeling , prs_afdeling_key , :new.ins_alg_ruimte_key, 'ins_m194');
ELSIF :new.ins_alg_ruimte_type = 'P'
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigperslid , prs_perslid_key , :new.ins_alg_ruimte_key, 'ins_m195');
ELSE
APPLICATION_ERROR(-20000, 'ins_m84');
END IF;
DECLARE
Dummy BOOLEAN;
BEGIN
-- Alleen bestaande delen hebben mogelijk te verplaatsen onderdelen.
IF :old.ins_deel_aanmaak IS NOT NULL
AND :new.ins_deel_parent_key IS NULL
THEN
Dummy := fac_p_fac_save_restore.SavePrimaryKey('INS_DEEL_CASCADE', :new.ins_deel_key);
END IF;
END;
END IF;
UPDATE_AANMAAKDATUM(ins_deel, ins_deel_aanmaak);
END;
/
CREATE OR REPLACE FUNCTION CheckSamePlaceDeel(Key1 IN NUMBER, Key2 IN NUMBER) RETURN BOOLEAN IS
PlaatsKey1 ins_deel.ins_alg_ruimte_key%TYPE;
PlaatsKey2 ins_deel.ins_alg_ruimte_key%TYPE;
PlaatsType1 ins_deel.ins_alg_ruimte_type%TYPE;
PlaatsType2 ins_deel.ins_alg_ruimte_type%TYPE;
AllesOK BOOLEAN := TRUE;
Resultaat BOOLEAN;
FUNCTION RuimteAfdelingDeel(p_plaatskey IN OUT NUMBER
,p_plaatstype IN OUT VARCHAR2) RETURN BOOLEAN IS
TerreinsectorKey alg_terreinsector.alg_terreinsector_key%TYPE;
VerdiepingKey alg_verdieping.alg_verdieping_key%TYPE;
AfdelingKey prs_afdeling.prs_afdeling_key%TYPE;
AllesOK BOOLEAN := TRUE;
BEGIN
IF p_plaatstype = 'T'
THEN
BEGIN
SELECT alg_terreinsector_key
INTO TerreinsectorKey
FROM alg_terreinsector
WHERE alg_terreinsector_key = p_plaatskey;
p_plaatskey := TerreinsectorKey;
p_plaatstype := 'T';
EXCEPTION
WHEN NO_DATA_FOUND THEN
AllesOK := FALSE;
END;
ELSIF p_plaatstype = 'W' -- Werkplek -> bepaal eerst ruimte
THEN
BEGIN
SELECT alg_verdieping_key
INTO VerdiepingKey
FROM prs_werkplek
, alg_ruimte
WHERE prs_alg_ruimte_key = alg_ruimte_key
AND prs_werkplek_key = p_plaatskey;
p_plaatskey := VerdiepingKey;
p_plaatstype := 'R';
EXCEPTION
WHEN NO_DATA_FOUND THEN
AllesOK := FALSE;
END;
ELSIF p_plaatstype = 'R'
THEN
BEGIN
SELECT alg_verdieping_key
INTO VerdiepingKey
FROM alg_ruimte
WHERE alg_ruimte_key = p_plaatskey;
p_plaatskey := VerdiepingKey;
p_plaatstype := 'R';
EXCEPTION
WHEN NO_DATA_FOUND THEN
AllesOK := FALSE;
END;
ELSIF p_plaatstype = 'P'
THEN
BEGIN
SELECT prs_afdeling_key
INTO AfdelingKey
FROM prs_perslid
WHERE prs_perslid_key = p_plaatskey;
p_plaatskey := AfdelingKey;
p_plaatstype := 'A';
EXCEPTION
WHEN NO_DATA_FOUND THEN
AllesOK := FALSE;
END;
ELSIF p_plaatstype = 'A'
THEN
BEGIN
SELECT prs_afdeling_key
INTO AfdelingKey
FROM prs_afdeling
WHERE prs_afdeling_key = p_plaatskey;
p_plaatskey := AfdelingKey;
p_plaatstype := 'A';
EXCEPTION
WHEN NO_DATA_FOUND THEN
AllesOK := FALSE;
END;
END IF;
RETURN AllesOK;
END;
BEGIN
BEGIN
SELECT ins_alg_ruimte_key
, ins_alg_ruimte_type
INTO PlaatsKey1
, PlaatsType1
FROM ins_deel
WHERE ins_deel_key = Key1;
AllesOK := RuimteAfdelingDeel(PlaatsKey1,PlaatsType1);
EXCEPTION
WHEN NO_DATA_FOUND THEN
AllesOK := FALSE;
END;
BEGIN
SELECT ins_alg_ruimte_key
, ins_alg_ruimte_type
INTO PlaatsKey2
, PlaatsType2
FROM ins_deel
WHERE ins_deel_key = Key2;
AllesOK := RuimteAfdelingDeel(PlaatsKey2,PlaatsType2);
EXCEPTION
WHEN NO_DATA_FOUND THEN
AllesOK := FALSE;
END;
IF AllesOK
THEN
IF ((PlaatsType1 = PlaatsType2) AND (PlaatsKey1 = PlaatsKey2))
THEN
Resultaat := TRUE;
ELSE
Resultaat := FALSE;
END IF;
ELSE
Resultaat := FALSE;
END IF;
RETURN Resultaat;
END;
/
#endif // INS
#ifdef FAC
UPDATE FAC_MESSAGE
SET FAC_MESSAGE_TEXT = 'Facilitor 4.0'
WHERE FAC_MESSAGE_CODE = 'FAC_M002';
UPDATE FAC_MESSAGE
SET FAC_MESSAGE_TEXT = 'Welkom bij Facilitor 4.0'
WHERE FAC_MESSAGE_CODE = 'FAC_M035';
UPDATE FAC_MESSAGE
SET FAC_MESSAGE_TEXT = 'Copyright (c) 1996-2001, Facilitor Software Nederland bv'
WHERE FAC_MESSAGE_CODE = 'FAC_M005';
CREATE OR REPLACE PACKAGE fac_p_fac_save_restore AS
-- Maak de vorige selectie van de tabel en de huidige sessie leeg.
FUNCTION ResetSelectie( TableName IN VARCHAR2 ) RETURN BOOLEAN;
-- Onthou de primary key van de tabel en de huidige sessie.
FUNCTION SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN BOOLEAN;
-- Geef de nth primary key van de tabel en de huidige sessie. IndexNr begint met 1.
FUNCTION GetPrimaryKey( TableName IN VARCHAR2, IndexNr IN NUMBER ) RETURN NUMBER;
-- Onthou naast Primary key ook de datum i.v.m. een eventuele UNDO vanuit AutoCAD.
FUNCTION SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) RETURN BOOLEAN;
-- Geef verwijderdatum of NULL terug van primary key i.v.m. eventuele UNDO vanuit AutoCAD.
FUNCTION GetDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN DATE;
PRAGMA RESTRICT_REFERENCES (GetPrimaryKey,WNDS, WNPS);
END fac_p_fac_save_restore;
/
CREATE OR REPLACE PACKAGE BODY fac_p_fac_save_restore AS
FUNCTION GetSessionId RETURN VARCHAR2 IS
SessionId VARCHAR2(20);
BEGIN
SELECT USERENV('SESSIONID')
INTO SessionId
FROM DUAL;
RETURN SessionId;
END;
FUNCTION ResetSelectie( TableName IN VARCHAR2 ) RETURN BOOLEAN IS
SessionId VARCHAR2(20);
BEGIN
SessionId := GetSessionId;
DELETE FROM fac_selectie
WHERE fac_selectie_node = SessionId
AND fac_selectie_tabel = TableName;
RETURN TRUE;
EXCEPTION
WHEN OTHERS
THEN RETURN FALSE;
END;
FUNCTION SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN BOOLEAN IS
SessionId VARCHAR2(20);
BEGIN
SessionId := GetSessionId;
INSERT INTO fac_selectie (fac_selectie_node,
fac_selectie_tabel,
fac_selectie_key)
VALUES (SessionId, TableName, PrimaryKey);
RETURN TRUE;
EXCEPTION
WHEN OTHERS
THEN RETURN FALSE;
END;
-- Geef de nth Fac_Selectie_Key van de geselecteerde records
-- terug. IndexNr begint met 1.
FUNCTION GetPrimaryKey( TableName IN VARCHAR2, IndexNr IN NUMBER ) RETURN NUMBER IS
SessionId VARCHAR2(20);
CURSOR Selectie IS SELECT DISTINCT fac_selectie_key
FROM fac_selectie
WHERE fac_selectie_node = SessionId
AND fac_selectie_tabel = TableName
ORDER BY fac_selectie_key;
SelectieRec Selectie%ROWTYPE;
TmpIndex NUMBER;
ReturnKey NUMBER(10);
BEGIN
SessionId := GetSessionId;
ReturnKey := NULL;
TmpIndex := 1;
FOR SelectieRec IN Selectie
LOOP
IF IndexNr = TmpIndex
THEN
ReturnKey := SelectieRec.fac_selectie_key;
EXIT;
END IF;
TmpIndex := TmpIndex + 1;
END LOOP;
RETURN ReturnKey;
END;
FUNCTION SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) RETURN BOOLEAN IS
SessionId VARCHAR2(20);
BEGIN
SessionId := GetSessionId;
INSERT INTO fac_selectie (fac_selectie_node,
fac_selectie_tabel,
fac_selectie_key,
fac_selectie_datum)
VALUES (SessionId, TableName, PrimaryKey, Datum);
RETURN TRUE;
EXCEPTION
WHEN OTHERS
THEN RETURN FALSE;
END;
FUNCTION GetDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN DATE IS
SessionId VARCHAR2(20);
ReturnDate Date;
CURSOR Selectie IS SELECT DISTINCT fac_selectie_datum
FROM fac_selectie
WHERE fac_selectie_node = SessionId
AND fac_selectie_key = PrimaryKey
AND fac_selectie_tabel = TableName;
SelectieRec Selectie%ROWTYPE;
TmpIndex NUMBER;
ReturnKey NUMBER(10);
BEGIN
SessionId := GetSessionId;
ReturnDate := NULL;
FOR SelectieRec IN Selectie
LOOP
ReturnDate := SelectieRec.fac_selectie_datum;
EXIT;
END LOOP;
RETURN ReturnDate;
END;
END fac_p_fac_save_restore;
/
CREATE OR REPLACE PROCEDURE FAC_P_FAC_GEBRUIKER_OPSCHONEN IS
BEGIN
DELETE FROM fac_gebruiker
WHERE fac_gebruiker_username NOT IN (SELECT username
FROM all_users
UNION
SELECT upper(prs_perslid_initialen)
FROM prs_v_aanwezigperslid);
COMMIT;
END;
/
DEF_FAC_MESSAGE ('INS_M194', 'Afdeling bestaat niet.','Department does not exist.');
DEF_FAC_MESSAGE ('INS_M195', 'Persoon bestaat niet.','Person does noet exist.');
DEF_FAC_MESSAGE ('INS_M196', 'Een getekend object kan niet persoongebonden worden gemaakt.','A drawn object cannot be made personal');
DEF_FAC_MESSAGE ('INS_M197', 'De geselecteerde onderdelen verwijderen','Deleting selected parts of object');
DEF_FAC_MESSAGE ('INS_M198', 'De geselecteerde onderdelen moeten tot dezelfde objectsoort behoren.','The selected parts of object has to be a connection with the same object type');
DEF_FAC_MESSAGE ('INS_M199', 'Er zijn geen onderdelen geselecteerd.','No parts of object selected');
DEF_FAC_MESSAGE ('INS_M200', 'Toevoegen/wijzigen unieke kenmerk %1% niet mogelijk bij meerdere onderdelen.','Adding/modifying unique value %1% not possible for more then one part of object');
DEF_FAC_MESSAGE ('INS_M201', 'Het kenmerk %1% is verplicht in te vullen','Property %1% must be entered');
DEF_FAC_MESSAGE ('PRS_M172', 'SYSTEM ERROR: In Afdeling, er zijn nog PRS_PERSLIDWERKPLEK-records.','SYSTEM ERROR in PRS_AFDELING: There are still related PRS_PERSLIDWERKPLEK-records');
DEF_FAC_MESSAGE ('PRS_M173', 'Afdeling heeft nog objecten in bezit.','Department is owner of objects.');
DEF_FAC_MESSAGE ('PRS_M174', 'SYSTEM ERROR: In Perslid, er zijn nog PRS_PERSLIDWERKPLEK-records.','SYSTEM ERROR in PRS_PERSLID: There are still related PRS_PERSLIDWERKPLEK-records');
DEF_FAC_MESSAGE ('PRS_M175', 'Persoon heeft nog objecten in bezit.','Person is owner of objects.');
DEF_FAC_MESSAGE ('PRS_M176', 'Verhuis objecten naar een ander persoon\afdeling\plaats.','Move objects to another person\department\location.');
DEF_FAC_ENTITY ('INS_PLAATSGEBONDEN','Plaatsgebonden', NULL, NULL, 'Position bound');
DEF_FAC_ENTITY ('INS_PERSOONGEBONDEN','Persoongebonden', NULL, NULL, 'Personal bound');
DEF_FAC_ENTITY ('INS_OBJECTBINDING','Objectbinding', NULL, NULL, 'Objectbinding');
DEF_FAC_ENTITY ('MENU_FAC_GEBRUIKERS','LAN-Gebruikers', NULL, NULL, 'LAN users');
DEF_FAC_ENTITY ('MENU_FAC_WEBUSERS' ,'WEB-Gebruikers', NULL, NULL, 'WEB users');
#endif // FAC
#ifdef PRS
INSERT INTO prs_kenmerk
(prs_kenmerk_key,
prs_kenmerk_niveau,
prs_kenmerk_volgnr,
prs_kenmerk_omschrijving,
prs_kenmerk_kenmerktype,
prs_kenmerk_systeem,
prs_kenmerk_lengte)
VALUES (5, 'P', 30,'EMail', 'C',1,50);
COMMIT;
CREATE_TRIGGER(prs_t_prs_afdeling_B_IU)
BEFORE INSERT OR UPDATE ON prs_afdeling
FOR EACH ROW
BEGIN
-- LET OP : Deze trigger is ook gedefinieerd in RES !!
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');
UPDATE_AANMAAKDATUM(prs_afdeling, prs_afdeling_aanmaak);
--
-- 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, 'prs_m172');
--
-- Afdeling mag alleen verwijderd worden als deze geen objecten meer in het bezit heeft.
--
DECLARE
dummy VARCHAR2(1);
BEGIN
IF :new.prs_afdeling_verwijder IS NOT NULL
THEN
SELECT 'x'
INTO dummy
FROM ins_deel
WHERE ins_deel_verwijder IS NULL
AND ins_alg_ruimte_type = 'A'
AND ins_alg_ruimte_key = :old.prs_afdeling_key;
APPLICATION_ERROR(-20000,'prs_m173');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR(-20000,'prs_m173');
END;
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);
UPDATE_UPPER(prs_perslid_initialen, prs_perslid_init_upper);
UPDATE_AANMAAKDATUM(prs_perslid, prs_perslid_aanmaak);
--
-- 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, 'prs_m174');
#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 VARCHAR2(1);
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_upper = 'MLD_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
--
-- Persoon mag alleen verwijderd worden als deze geen objecten meer in het bezit heeft.
--
DECLARE
dummy VARCHAR2(1);
BEGIN
IF :new.prs_perslid_verwijder IS NOT NULL
THEN
SELECT 'x'
INTO dummy
FROM ins_deel
WHERE ins_deel_verwijder IS NULL
AND ins_alg_ruimte_type = 'P'
AND ins_alg_ruimte_key = :old.prs_perslid_key;
APPLICATION_ERROR(-20000,'prs_m175');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN APPLICATION_ERROR(-20000,'prs_m175');
END;
END;
/
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');
UPDATE_AANMAAKDATUM(prs_srtperslid, prs_srtperslid_aanmaak);
#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_upper = 'MLD_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_bedrijf_B_IU)
BEFORE INSERT OR UPDATE ON prs_bedrijf
FOR EACH ROW
BEGIN
-- LET OP : Deze trigger is ook gedefinieerd in RES !!
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);
UPDATE_AANMAAKDATUM(prs_bedrijf, prs_bedrijf_aanmaak);
#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_upper = 'MLD_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;
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;
/
CREATE_VIEW (prs_v_afdeling_perslid,PRS_NORMAAL_PRIVILEGE)
( prs_roerendgoed_key
, prs_roerendgoed_type
, prs_afdeling_key
, prs_afdeling_omschrijving
, prs_afdeling_upper
, prs_perslid_key
, prs_perslid_volnaam
, prs_perslid_upper
)
AS SELECT PRS_A.prs_afdeling_key , 'A'
, PRS_A.prs_afdeling_key
, PRS_A.prs_afdeling_omschrijving
, PRS_A.prs_afdeling_upper
, to_number(null), null, null
FROM prs_afdeling PRS_A
UNION
SELECT PRS_P.prs_perslid_key, 'P'
, PRS_A.prs_afdeling_key
, PRS_A.prs_afdeling_omschrijving
, PRS_A.prs_afdeling_upper
, PRS_P.prs_perslid_key
, PRS_P.prs_perslid_naam || decode(PRS_P.prs_perslid_titel || PRS_P.prs_perslid_voorletters,null,null,',')
|| decode(PRS_P.prs_perslid_titel ,null,null,' '|| PRS_P.prs_perslid_titel)
|| decode(PRS_P.prs_perslid_voorletters,null,null,' '|| PRS_P.prs_perslid_voorletters)
, PRS_P.prs_perslid_upper
FROM prs_perslid PRS_P
, prs_afdeling PRS_A
WHERE PRS_P.prs_afdeling_key = PRS_A.prs_afdeling_key;
--
-- De view ins_v_deel_gegevens wordt hier opnieuw (bij PRS) gedefinieerd
-- omdat deze gebruik maakt van een nieuwe PRS-view, die nog niet bekend
-- is op het moment van uitvoeren van de INS-script.
--
CREATE_VIEW(ins_v_deel_gegevens,INS_NORMAAL_PRIVILEGE)
( ins_discipline_key
, ins_discipline_omschrijving
, ins_srtgroep_key
, ins_srtgroep_omschrijving
, ins_srtgroep_upper
, ins_srtdeel_key
, ins_srtdeel_omschrijving
, ins_srtdeel_upper
, alg_locatie_key
, alg_gebouw_key
, alg_gebouw_omschrijving
, alg_gebouw_upper
, alg_verdieping_key
, alg_verdieping_omschrijving
, alg_verdieping_upper
, alg_verdieping_volgnr
, alg_ruimte_key
, alg_ruimte_nr
, alg_ruimte_upper_nr
, prs_werkplek_key
, prs_werkplek_module
, prs_werkplek_volgnr
, alg_terreinsector_key
, alg_terreinsector_omschrijving
, alg_terreinsector_upper
, alg_plaatsaanduiding
, prs_afdeling_key
, prs_afdeling_omschrijving
, prs_afdeling_upper
, prs_perslid_key
, prs_perslid_volnaam
, prs_perslid_upper
, ins_deel_key
, ins_deel_omschrijving
, ins_deel_upper
, ins_deel_aantal
, ins_deel_oppervlak
, ins_deel_omtrek
, ins_deel_aanmaak
, ins_deel_opmerking
, ins_deel_getekend
)
AS SELECT INS_D.ins_discipline_key
, INS_D.ins_discipline_omschrijving
, INS_SG.ins_srtgroep_key
, INS_SG.ins_srtgroep_omschrijving
, INS_SG.ins_srtgroep_upper
, INS_SD.ins_srtdeel_key
, INS_SD.ins_srtdeel_code||' - '||INS_SD.ins_srtdeel_omschrijving
, INS_SD.ins_srtdeel_upper
, INS_DE.ins_alg_locatie_key
, INS_AO.alg_gebouw_key , INS_AO.alg_gebouw_omschrijving , INS_AO.alg_gebouw_upper
, INS_AO.alg_verdieping_key , INS_AO.alg_verdieping_omschrijving , INS_AO.alg_verdieping_upper, INS_AO.alg_verdieping_volgnr
, INS_AO.alg_ruimte_key , INS_AO.alg_ruimte_nr , INS_AO.alg_ruimte_upper_nr
, INS_AO.prs_werkplek_key , INS_AO.prs_werkplek_module , INS_AO.prs_werkplek_volgnr
, INS_AO.alg_terreinsector_key, INS_AO.alg_terreinsector_omschrijving, INS_AO.alg_terreinsector_upper
, INS_AO.alg_plaatsaanduiding
, to_number(NULL), NULL, NULL
, to_number(NULL), NULL, NULL
, INS_DE.ins_deel_key
, INS_DE.ins_deel_omschrijving
, INS_DE.ins_deel_upper
, INS_DE.ins_deel_aantal
, INS_DE.ins_deel_oppervlak
, INS_DE.ins_deel_omtrek
, INS_DE.ins_deel_aanmaak
, INS_DE.ins_deel_opmerking
, INS_DE.ins_deel_getekend
FROM ins_deel INS_DE
, ins_tab_discipline INS_D
, ins_v_alg_overzicht INS_AO
, ins_srtdeel INS_SD
, ins_srtgroep INS_SG
WHERE INS_DE.ins_deel_verwijder IS NULL
AND INS_DE.ins_deel_module = 'INS'
AND INS_DE.ins_deel_parent_key IS NULL
AND INS_AO.alg_onroerendgoed_keys = INS_DE.ins_alg_ruimte_key
AND INS_AO.alg_onroerendgoed_type = INS_DE.ins_alg_ruimte_type
AND INS_DE.ins_alg_ruimte_type IN ('T','G','V','R','W')
AND INS_AO.alg_locatie_key = INS_DE.ins_alg_locatie_key
AND INS_SD.ins_srtdeel_key = INS_DE.ins_srtdeel_key
AND INS_SG.ins_srtgroep_key = INS_SD.ins_srtgroep_key
AND INS_D.ins_discipline_key = INS_DE.ins_discipline_key
AND INS_DE.ins_discipline_key IN (SELECT ins_discipline_key FROM ins_discipline)
UNION
SELECT INS_D.ins_discipline_key
, INS_D.ins_discipline_omschrijving
, INS_SG.ins_srtgroep_key
, INS_SG.ins_srtgroep_omschrijving
, INS_SG.ins_srtgroep_upper
, INS_SD.ins_srtdeel_key
, INS_SD.ins_srtdeel_code||' - '||INS_SD.ins_srtdeel_omschrijving
, INS_SD.ins_srtdeel_upper
, INS_DE.ins_alg_locatie_key
, to_number(NULL), NULL, NULL
, to_number(NULL), NULL, NULL, to_number(NULL)
, to_number(NULL), NULL, NULL
, to_number(NULL), NULL, to_number(NULL)
, to_number(NULL), NULL, NULL
, decode(PRS_AP.prs_roerendgoed_type,'A',prs_afdeling_upper,'P',prs_perslid_volnaam)
, PRS_AP.prs_afdeling_key, PRS_AP.prs_afdeling_omschrijving, PRS_AP.prs_afdeling_upper
, PRS_AP.prs_perslid_key , PRS_AP.prs_perslid_volnaam , PRS_AP.prs_perslid_upper
, INS_DE.ins_deel_key
, INS_DE.ins_deel_omschrijving
, INS_DE.ins_deel_upper
, INS_DE.ins_deel_aantal
, INS_DE.ins_deel_oppervlak
, INS_DE.ins_deel_omtrek
, INS_DE.ins_deel_aanmaak
, INS_DE.ins_deel_opmerking
, INS_DE.ins_deel_getekend
FROM ins_deel INS_DE
, ins_tab_discipline INS_D
, prs_v_afdeling_perslid PRS_AP
, ins_srtdeel INS_SD
, ins_srtgroep INS_SG
WHERE INS_DE.ins_deel_verwijder IS NULL
AND INS_DE.ins_deel_module = 'INS'
AND INS_DE.ins_deel_parent_key IS NULL
AND PRS_AP.prs_roerendgoed_key = INS_DE.ins_alg_ruimte_key
AND PRS_AP.prs_roerendgoed_type = INS_DE.ins_alg_ruimte_type
AND INS_DE.ins_alg_ruimte_type IN ('A','P')
AND INS_SD.ins_srtdeel_key = INS_DE.ins_srtdeel_key
AND INS_SG.ins_srtgroep_key = INS_SD.ins_srtgroep_key
AND INS_D.ins_discipline_key = INS_DE.ins_discipline_key
AND INS_DE.ins_discipline_key IN (SELECT ins_discipline_key FROM ins_discipline);
/* 05/02/1998 AH Voor performance is de vorige regel toegevoegd.
* Deze regel staat hier omdat anders een lege regel in de view-tekst
* komt te staan.
*/
--
-- De view ins_v_deel_gegevens_keys wordt hier opnieuw (bij PRS) gedefinieerd
-- omdat deze gebruik maakt van een nieuwe PRS-view, die nog niet bekend
-- is op het moment van uitvoeren van de INS-script.
--
CREATE_VIEW(ins_v_deel_gegevens_keys,INS_NORMAAL_PRIVILEGE)
(
ins_discipline_key,ins_srtgroep_key,ins_srtdeel_key,alg_locatie_key
,alg_gebouw_key,alg_verdieping_key,alg_ruimte_key,prs_werkplek_key,alg_terreinsector_key
,prs_afdeling_key,prs_perslid_key,ins_deel_key
)
AS
select de.ins_discipline_key,gr.ins_srtgroep_key,de.ins_srtdeel_key
,de.ins_alg_locatie_key,ve.alg_gebouw_key,ru.alg_verdieping_key
,de.ins_alg_ruimte_key,to_number(null),to_number(null),to_number(null),to_number(null),de.ins_deel_key
from ins_v_aanwezigdeel de,ins_srtgroep gr, ins_srtdeel sd, alg_ruimte ru,alg_verdieping ve
where de.ins_discipline_key = gr.ins_discipline_key
and de.ins_srtdeel_key = sd.ins_srtdeel_key
and sd.ins_srtgroep_key = gr.ins_srtgroep_key
and ((de.ins_alg_ruimte_key = ru.alg_ruimte_key) and de.ins_alg_ruimte_type = 'R')
and ((ru.alg_verdieping_key = ve.alg_verdieping_key) and de.ins_alg_ruimte_type = 'R')
and de.ins_deel_module = 'INS'
union
select de.ins_discipline_key,gr.ins_srtgroep_key,de.ins_srtdeel_key
,de.ins_alg_locatie_key,ve.alg_gebouw_key,ru.alg_verdieping_key
,ru.alg_ruimte_key,de.ins_alg_ruimte_key,to_number(null),to_number(null),to_number(null),de.ins_deel_key
from ins_v_aanwezigdeel de,ins_srtgroep gr, ins_srtdeel sd, prs_werkplek wp, alg_ruimte ru, alg_verdieping ve
where de.ins_discipline_key = gr.ins_discipline_key
and de.ins_srtdeel_key = sd.ins_srtdeel_key
and sd.ins_srtgroep_key = gr.ins_srtgroep_key
and ((de.ins_alg_ruimte_key = wp.prs_werkplek_key) and de.ins_alg_ruimte_type = 'W')
and ((wp.prs_alg_ruimte_key = ru.alg_ruimte_key) and de.ins_alg_ruimte_type = 'W')
and ru.alg_verdieping_key = ve.alg_verdieping_key
and de.ins_deel_module = 'INS'
union
select de.ins_discipline_key,gr.ins_srtgroep_key,de.ins_srtdeel_key
,de.ins_alg_locatie_key,to_number(null),to_number(null),to_number(null),to_number(null)
,de.ins_alg_ruimte_key,to_number(null),to_number(null),de.ins_deel_key
from ins_v_aanwezigdeel de,ins_srtgroep gr, ins_srtdeel sd
where de.ins_discipline_key = gr.ins_discipline_key
and de.ins_srtdeel_key = sd.ins_srtdeel_key
and sd.ins_srtgroep_key = gr.ins_srtgroep_key and de.ins_alg_ruimte_type = 'T'
and de.ins_deel_module = 'INS'
union
select de.ins_discipline_key,gr.ins_srtgroep_key,de.ins_srtdeel_key
,de.ins_alg_locatie_key,to_number(null),to_number(null)
,to_number(null),to_number(null), to_number(null),de.ins_alg_ruimte_key,to_number(null),de.ins_deel_key
from ins_v_aanwezigdeel de,ins_srtgroep gr,ins_srtdeel sd
where de.ins_discipline_key = gr.ins_discipline_key
and de.ins_srtdeel_key = sd.ins_srtdeel_key
and sd.ins_srtgroep_key = gr.ins_srtgroep_key and de.ins_alg_ruimte_type = 'A'
and de.ins_deel_module = 'INS'
union
select de.ins_discipline_key,gr.ins_srtgroep_key,de.ins_srtdeel_key
,de.ins_alg_locatie_key,to_number(null),to_number(null)
,to_number(null),to_number(null),to_number(null),af.prs_afdeling_key,de.ins_alg_ruimte_key,de.ins_deel_key
from ins_v_aanwezigdeel de,ins_srtgroep gr,ins_srtdeel sd,prs_perslid pl,prs_afdeling af
where de.ins_discipline_key = gr.ins_discipline_key
and de.ins_srtdeel_key = sd.ins_srtdeel_key
and sd.ins_srtgroep_key = gr.ins_srtgroep_key
and ((de.ins_alg_ruimte_key = pl.prs_perslid_key) and de.ins_alg_ruimte_type = 'P')
and ((pl.prs_afdeling_key = af.prs_afdeling_key) and de.ins_alg_ruimte_type = 'P')
and de.ins_deel_module = 'INS';
#endif // PRS
#ifdef MLD
ALTER TABLE mld_melding
ADD
(
mld_kosten_klant
NUMBER(1)
CONSTRAINT mld_c_mld_kosten_klant CHECK(mld_kosten_klant IS NULL
OR mld_kosten_klant = 1)
);
ALTER TABLE mld_melding
ADD
(
mld_melding_ordernr
VARCHAR2(12)
);
ALTER TABLE mld_melding
ADD
(
mld_melding_document
VARCHAR2(512)
);
ALTER TABLE mld_standaardopdr
ADD
(
mld_standaardopdr_uren
NUMBER(6,2),
mld_standaardopdr_materiaal
NUMBER(9,2)
);
--
-- De volgende views opnieuw aanmaken omdat deze gebruik maken van de zojuist gewijzigde tabel mld_melding.
--
ALTER VIEW mld_v_ovz COMPILE;
ALTER VIEW mld_v_mld_melding_gegevens COMPILE;
ALTER VIEW mld_v_mld_meldingprint COMPILE;
ALTER VIEW mld_v_mld_opdrachtgeprint COMPILE;
ALTER VIEW mld_v_mld_openmelding COMPILE;
ALTER VIEW mld_v_mld_openopdr_gegevens COMPILE;
CREATE_VIEW(alg_v_mld_kostenpost_perslid, ALG_NORMAAL_PRIVILEGE)
(alg_kostenpost_key,
alg_kostenpost_geraamd) AS
SELECT MLD_O.mld_alg_kostenpost_key,
SUM(NVL(MLD_O.mld_opdr_uren,0)*NVL(PRS_P.prs_perslid_uurloon,0)) +
SUM(NVL(MLD_O.mld_opdr_materiaal,0))
FROM MLD_OPDR MLD_O, MLD_STATUSOPDR MLD_S, PRS_PERSLID PRS_P
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND (MLD_S.mld_statusopdr_upper = 'MLD_UITGEGEVEN'
OR MLD_S.mld_statusopdr_upper = 'MLD_AFGEMELD')
AND MLD_O.mld_uitvoerende_keys = PRS_P.prs_perslid_key
GROUP BY MLD_O.mld_alg_kostenpost_key;
CREATE_VIEW(alg_v_mld_kostenpost_bedrijf, ALG_NORMAAL_PRIVILEGE)
(alg_kostenpost_key,
alg_kostenpost_geraamd) AS
SELECT MLD_O.mld_alg_kostenpost_key,
SUM(NVL(MLD_O.mld_opdr_uren,0)*NVL(PRS_B.prs_bedrijf_uurloon,0)) +
SUM(NVL(MLD_O.mld_opdr_materiaal,0))
FROM MLD_OPDR MLD_O, MLD_STATUSOPDR MLD_S, PRS_BEDRIJF PRS_B
WHERE MLD_O.mld_statusopdr_key = MLD_S.mld_statusopdr_key
AND (MLD_S.mld_statusopdr_upper = 'MLD_UITGEGEVEN'
OR MLD_S.mld_statusopdr_upper = 'MLD_AFGEMELD')
AND MLD_O.mld_uitvoerende_keys = PRS_B.prs_bedrijf_key
GROUP BY MLD_O.mld_alg_kostenpost_key;
CREATE_VIEW(alg_v_mld_kostenpost_geraamd, ALG_NORMAAL_PRIVILEGE)
(alg_kostenpost_key,
alg_kostenpost_geraamd) AS
SELECT MLD_O.mld_alg_kostenpost_key,
SUM(NVL(MLD_O.mld_opdr_kosten,0))
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_upper = 'MLD_UITGEGEVEN'
OR MLD_S.mld_statusopdr_upper = 'MLD_AFGEMELD')
AND MLD_O.mld_alg_kostenpost_key IS NOT NULL
GROUP BY MLD_O.mld_alg_kostenpost_key;
CREATE_VIEW(alg_v_mld_kostenpost_besteed1, ALG_NORMAAL_PRIVILEGE)
(alg_kostenpost_key, alg_kostenpost_besteed) AS
SELECT MLD_O.mld_alg_kostenpost_key,
SUM(NVL(MLD_O.mld_opdr_kosten,0))
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_upper = 'MLD_VERWERKT'
GROUP BY MLD_O.mld_alg_kostenpost_key;
#endif // MLD
#ifdef CAD
#ifndef PRJ
CREATE_VIEW(cad_v_cad_aanwezigtekening, FAC_NORMAAL_PRIVILEGE) AS
SELECT * FROM cad_tekening C_T
WHERE cad_tekening_verwijder IS NULL
AND (C_T.ins_discipline_key IN (SELECT ins_discipline_key
FROM ins_discipline)
OR C_T.ins_discipline_key IS NULL);
#endif // NO PRJ
#endif // CAD
#ifdef RES
CREATE_TRIGGER(ins_t_ins_deel_B_IU)
BEFORE INSERT OR UPDATE ON ins_deel
FOR EACH ROW
BEGIN
-- LET OP : Deze trigger is ook gedefinieerd in INS !!
UPDATE_PRIMARY_KEY(ins_deel_key,ins_s_ins_inst_keys);
UPDATE_UPPER(ins_deel_omschrijving,ins_deel_upper);
-- Indien verplaatsing of verwijdering of reincarnatie dan alleen vanuit de
-- CAD-omgeving, d.i. als tegelijk ins_deel_getekend een nieuwe waarde krijgt.
-- Dus een foutmelding als dit niet zo is.
CHECK_CADMUTATIE2(ins_deel_verwijder, ins_deel_getekend, ins_alg_ruimte_key, 'ins_m187');
CHECK_NOG_REFERENCES(ins_deel, ins_deel_verwijder, res_v_aanwezigins_deel,
ins_deel_key, 'res_m037');
IF :new.ins_deel_parent_key IS NULL
THEN
DECLARE
Dummy BOOLEAN;
BEGIN
--Dummy := fac_p_fac_save_restore.SavePrimaryKey('INS_DEEL_VERWIJDER', :new.ins_deel_key);
Dummy := fac_p_fac_save_restore.SavePrimaryKeyAndDate('INS_DEEL_VERWIJDER', :new.ins_deel_key, :old.ins_deel_verwijder);
END;
END IF;
IF :new.ins_deel_verwijder IS NOT NULL
THEN
DECLARE
Dummy BOOLEAN;
BEGIN
Dummy := fac_p_fac_save_restore.SavePrimaryKey('INS_DEEL_ONTKOPPEL', :new.ins_deel_key);
END;
END IF;
-- Vul het veld INS_DISCIPLINE van het huidige deel.
IF :old.ins_srtdeel_key IS NULL
OR :old.ins_srtdeel_key <> :new.ins_srtdeel_key
OR :old.ins_discipline_key IS NULL
THEN
BEGIN
SELECT INS_D.ins_discipline_key
INTO :new.ins_discipline_key
FROM ins_srtdeel INS_SD
, ins_srtgroep INS_SG
, ins_tab_discipline INS_D
WHERE INS_SD.ins_srtdeel_key = :new.ins_srtdeel_key
AND INS_SD.ins_srtgroep_key = INS_SG.ins_srtgroep_key
AND INS_SG.ins_discipline_key = INS_D.ins_discipline_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN :new.ins_discipline_key := NULL;
END;
END IF;
-- Zoek de (redundante) alg_locatie_key erbij indien verplaatst.
IF :old.ins_alg_ruimte_key IS NULL
OR :old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
OR :new.ins_alg_locatie_key IS NULL
THEN
IF :new.ins_alg_ruimte_type IN ('A','P')
THEN
NULL;
ELSE
BEGIN
SELECT alg_locatie_key
INTO :new.ins_alg_locatie_key
FROM ins_v_alg_overzicht
WHERE alg_onroerendgoed_keys = :new.ins_alg_ruimte_key
AND alg_onroerendgoed_type = :new.ins_alg_ruimte_type;
EXCEPTION
WHEN NO_DATA_FOUND
THEN :new.ins_alg_locatie_key := NULL;
END;
END IF;
END IF;
/* Bij INS_DEEL in INS-mode moet INS_ALG_RUIMTE_KEY ingevuld zijn
* en wel met ruimte, verdieping, gebouw of terreinsector.
* Daarvoor moet ook het INS_ALG_RUIMTE_TYPE veld goed ingevuld zijn
* (met 'R' of 'V' of 'G' of 'T' of 'A' of 'P').
* Dit geldt als INS_ALG_RUIMTE_KEY veranderd is of als er een
* nieuw record geinsert wordt.
*
*
* IN INV-mode hoeft INS_ALG_RUIMTE_KEY niet ingevuld te zijn, maar
* als deze ingevuld is moet INS_ALG_RUIMTE_KEY met ruimte of werkplek
* gevuld zijn, daarvoor moet het veld INS_ALG_RUITMTE_KEY goed
* ingevuld zijn (met 'R' of 'W').
*
* IN INV-mode kan het veld INS_PRS_BEZIT_KEY ook ingevuld zijn, maar
* INS_ALG_RUIMTE_KEY en INS_PRS_BEZIT_KEY kunnen niet beide ingevuld worden.
* INS_PRS_BEZIT_KEY kan de waarde perslid of afdeling bevatten en het
* veld INS_PRS_BEZIT_TYPE moet dan goed ingevuld zijn (met 'P' of 'A').
* AH 05-06-96 Nu kunnen biede velden ingevuld zijn.
*/
IF :new.ins_deel_module = 'INS'
AND (:old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
OR :old.ins_alg_ruimte_key IS NULL)
THEN
IF :old.ins_alg_ruimte_type IN ('W','R','T')
AND :old.ins_deel_getekend IS NOT NULL
AND :new.ins_alg_ruimte_type IN ('A','P')
THEN
APPLICATION_ERROR(-20000, 'ins_m196');
END IF;
IF :new.ins_alg_ruimte_type = 'W' /* 990218/BIV - #2251 - Deel kan ook op werkplek worden geplaatst */
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigwerkplek , prs_werkplek_key , :new.ins_alg_ruimte_key, 'ins_m174');
ELSIF :new.ins_alg_ruimte_type = 'R'
THEN
CHECK_KEY_REFERENCE(alg_v_aanwezigruimte , alg_ruimte_key , :new.ins_alg_ruimte_key, 'ins_m092');
ELSIF :new.ins_alg_ruimte_type = 'T'
THEN
CHECK_KEY_REFERENCE(alg_v_aanwezigterreinsector, alg_terreinsector_key, :new.ins_alg_ruimte_key, 'ins_m095');
ELSIF :new.ins_alg_ruimte_type = 'A'
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigafdeling , prs_afdeling_key , :new.ins_alg_ruimte_key, 'ins_m194');
ELSIF :new.ins_alg_ruimte_type = 'P'
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigperslid , prs_perslid_key , :new.ins_alg_ruimte_key, 'ins_m195');
ELSE
APPLICATION_ERROR(-20000, 'ins_m84');
END IF;
DECLARE
Dummy BOOLEAN;
BEGIN
-- Alleen bestaande delen hebben mogelijk te verplaatsen onderdelen.
IF :old.ins_deel_aanmaak IS NOT NULL
AND :new.ins_deel_parent_key IS NULL
THEN
Dummy := fac_p_fac_save_restore.SavePrimaryKey('INS_DEEL_CASCADE', :new.ins_deel_key);
END IF;
END;
END IF;
UPDATE_AANMAAKDATUM(ins_deel, ins_deel_aanmaak);
END;
/
#endif // RES