1277 lines
47 KiB
Plaintext
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
|