Files
Database/_UP/423TO424.SRC
Erik Groener 4ad9818b4e package Ins aangepast om de historymode goed werkend te krijgen.
svn path=/Database/trunk/; revision=8099
2002-12-19 10:24:22 +00:00

1400 lines
52 KiB
Plaintext

SET TERMOUT ON
SET FEEDBACK OFF
SET ECHO OFF
--
-- Update script van Facilitor versie 4.23 naar 4.24.6
--
/*
* 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.
*/
/* !!BELANGRIJK!!
* Als er bij de upgrade een NIEUWE tabel of view wordt gecreeerd, moeten ook
* de daarvoor benodigde GRANTS en SYNONYMS worden geregeld!!!
* Dit doen we in de $..after.sql, die ook hier wordt gegenereerd.
*/
#ifdef MASTER
SPOOL OFF
SET HEADING OFF
CLEAR SCREEN
PROMPT ***********************************************************************
PROMPT
PROMPT UPGRADE SCRIPT van Facilitor versie 04.23 naar 4.24.6
PROMPT
SELECT 'De huidige versie van Facilitor zou moeten zijn 04.23/04.24 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 $423to424.SQL
PROMPT SET ECHO ON
PROMPT SPOOL $423to424.LST;
UPDMOD(FAC,423to424)
UPDMOD(ALG,423to424)
UPDMOD(PRS,423to424)
UPDMOD(INS,423to424)
UPDMOD(MLD,423to424)
UPDMOD(CAD,423to424)
UPDMOD(AKZ,423to424)
UPDMOD(PRJ,423to424)
UPDMOD(RES,423to424)
UPDMOD(BES,423to424)
UPDMOD(BEZ,423to424)
UPDMOD(SCH,423to424)
UPDMOD(SLE,423to424)
UPDMOD(CNT,423to424)
UPDMOD(WEB,423to424)
UPDMOD(PRA,423to424)
UPDATE_VERSION('04.24');
COMMIT;
PROMPT SPOOL OFF;
PROMPT START $423to424after.SQL
SPOOL OFF
SPOOL $423to424after.sql
PROMPT SET ECHO ON
PROMPT SPOOL $423to424after.lst
-- Geef execute rechten aan de laagste role voor alle stored packages, procedures etc.
-- Bedoeld voor de nieuwe, maar is niet erg voor de oude.
SELECT DISTINCT 'GRANT execute ON ' || US.name ||' TO '||USER||'_ALG_SMALL_ROLE;'
FROM user_source US;
-- Geef alle rechten aan de laagste role voor alle sequences
-- Bedoeld voor de nieuwe, maar is niet erg voor de oude.
SELECT 'GRANT all ON ' || USEQ.sequence_name ||' TO '||USER||'_ALG_SMALL_ROLE;'
FROM user_sequences USEQ;
/* ADD SYNONYMS ROUTINE HERE FOR ALL SECONDARY USERS */
PROMPT SPOOL OFF
SPOOL OFF
START $423to424.SQL
SET ECHO OFF
PROMPT De upgrade is gereed.. Controleer de LST-files.
#endif // MASTER
/****************************** PLAATS HIERONDER DE UPDATES ******************************/
#ifdef ALG
#endif //ALG
#ifdef INS
CREATE OR REPLACE PACKAGE Ins AS
PROCEDURE Ins_Update_Kenmerkdeel(deel_key IN NUMBER
,kenmerk_key IN NUMBER
,waarde IN VARCHAR2
,historymode IN VARCHAR2
,mselect IN VARCHAR2);
PROCEDURE Kmd_Insert(deel_key IN NUMBER
,kenmerk_key IN NUMBER
,waarde IN VARCHAR2
,historymode IN VARCHAR2);
PROCEDURE Kmd_Delete(kenmerkdeel_key IN NUMBER
,historymode IN VARCHAR2);
PROCEDURE Kmd_Update(kenmerkdeel_key IN NUMBER
,deel_key IN NUMBER
,kenmerk_key IN NUMBER
,waarde IN VARCHAR2
,historymode IN VARCHAR2
,mselect IN VARCHAR2);
END Ins;
/
CREATE OR REPLACE PACKAGE BODY Ins AS
PROCEDURE Ins_Update_Kenmerkdeel(deel_key IN NUMBER
,kenmerk_key IN NUMBER
,waarde IN VARCHAR2
,historymode IN VARCHAR2
,mselect IN VARCHAR2) IS
v_kenmerkdeel_key NUMBER := 0;
BEGIN
-- Het is eigenlijk voldoende om hier alleen Kmd_Update()
-- aan te roepen omdat daar alle situaties worden
-- gecontroleerd en de bijbehorende actie wordt uitgevoerd.
-- De onderstaande Select zorgt er dus alleen voor dat
-- indien er geen actueel record bestaat, of een die
-- vandaag is gesloten er een nieuw record wordt gemaakt,
-- hetgeen in Kmd_Update() ook wordt gedaan zodat de tweede
-- insert een foutmelding geeft.
-- Daarom alleen Kmd_Update() aanroepen met een dummy waarde
-- voor ins_kenmerkdeel_key.
--
--SELECT MAX(ins_kenmerkdeel_key)
--INTO v_kenmerkdeel_key
--FROM ins_kenmerkdeel
--WHERE ins_deel_key = deel_key
--AND ins_kenmerk_key = kenmerk_key
--AND ( ins_kenmerkdeel_verwijder IS NULL
-- OR ins_kenmerkdeel_verwijder BETWEEN trunc(sysdate) AND trunc(sysdate + 1)
-- );
Ins.Kmd_Update(v_kenmerkdeel_key
,deel_key
,kenmerk_key
,waarde
,historymode
,mselect);
--IF (v_kenmerkdeel_key IS NULL)
--THEN
-- Ins.Kmd_Insert(deel_key
-- ,kenmerk_key
-- ,waarde
-- ,historymode);
--END IF;
END Ins_Update_Kenmerkdeel;
PROCEDURE Kmd_Insert(deel_key IN NUMBER
,kenmerk_key IN NUMBER
,waarde IN VARCHAR2
,historymode IN VARCHAR2) IS
BEGIN
IF waarde IS NOT NULL
THEN
INSERT INTO ins_kenmerkdeel
( ins_kenmerk_key
, ins_deel_Key
, ins_kenmerkdeel_waarde)
VALUES(kenmerk_key
, deel_key
, waarde);
END IF;
END Kmd_Insert;
PROCEDURE Kmd_Delete(kenmerkdeel_key IN NUMBER
,historymode IN VARCHAR2) IS
BEGIN
IF Historymode = '0'
THEN
--NON HISTORY MODE
DELETE
FROM ins_kenmerkdeel
WHERE ins_kenmerkdeel_key = kenmerkdeel_key;
ELSE
--HISTORY MODE
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_verwijder = SYSDATE
WHERE ins_kenmerkdeel_key = kenmerkdeel_key;
END IF;
END Kmd_Delete;
PROCEDURE Kmd_Update(kenmerkdeel_key IN NUMBER
,deel_key IN NUMBER
,kenmerk_key IN NUMBER
,waarde IN VARCHAR2
,historymode IN VARCHAR2
,mselect IN VARCHAR2) IS
v_kenmerkdeel NUMBER;
BEGIN
IF Historymode = '0'
THEN
IF waarde IS NOT NULL
THEN
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = waarde
WHERE ins_kenmerkdeel_key = kenmerkdeel_key;
END IF;
ELSIF Historymode = '1'
THEN
DECLARE
-- Zoek alle records voor een gegeven object en kenmerk
-- en zet de meest recente bovenaan.
--
CURSOR c_kenmerkdeel(p_kenmerk_key IN NUMBER
,p_deel_key IN NUMBER) IS
SELECT ins_kenmerkdeel_key
, trunc(ins_kenmerkdeel_aanmaak) ins_kenmerkdeel_aanmaak
, trunc(ins_kenmerkdeel_verwijder) ins_kenmerkdeel_verwijder
FROM ins_kenmerkdeel
WHERE ins_kenmerk_key = p_kenmerk_key
AND ins_deel_key = p_deel_key
ORDER BY ins_kenmerkdeel_key DESC
;
r_kenmerkdeel c_kenmerkdeel%ROWTYPE;
BEGIN
OPEN c_kenmerkdeel(kenmerk_key,deel_key);
FETCH c_kenmerkdeel INTO r_kenmerkdeel;
IF c_kenmerkdeel%NOTFOUND
THEN
-- Voor dit object en kenmerk bestaat nog geen record
-- dus toevoegen. Behalve als de toe te voegen waarde
-- null is, dan wil je niets toevoegen dus dan ook
-- geen actie.
IF waarde IS NOT NULL
THEN
Ins.Kmd_Insert(deel_key
,kenmerk_key
,waarde
,Historymode);
END IF;
ELSE
-- Er bestaat een record voor het object en kenmerk.
--
IF waarde IS NOT NULL
THEN
-- Er is een nieuwe waarde voor een bepaald object en kenmerk.
--
IF r_kenmerkdeel.ins_kenmerkdeel_aanmaak <= trunc(sysdate)
AND r_kenmerkdeel.ins_kenmerkdeel_verwijder IS NULL
THEN
-- Het record is nog actueel, dus moet eerst gesloten worden
-- door het als verwijderd te markeren.
--
Ins.Kmd_Delete(r_kenmerkdeel.ins_kenmerkdeel_key
,Historymode);
END IF;
--
-- Er bestaat nu tijdelijk geen actueel record meer voor
-- het object en kenmerk !!
--
IF r_kenmerkdeel.ins_kenmerkdeel_aanmaak < trunc(sysdate)
AND ( r_kenmerkdeel.ins_kenmerkdeel_verwijder <= trunc(sysdate)
OR r_kenmerkdeel.ins_kenmerkdeel_verwijder IS NULL)
THEN
-- Het laatste record voor kenmerk bij een object heeft langer
-- dan een dag bestaan. Voeg daarom een nieuwe toe.
--
Ins.Kmd_Insert(deel_key
,kenmerk_key
,waarde
,Historymode);
ELSIF r_kenmerkdeel.ins_kenmerkdeel_aanmaak = trunc(sysdate)
THEN
-- Het record voor kenmerk bij een object is vandaag
-- aangemaakt dus wordt er geen nieuwe toegevoegd maar
-- de huidige aangepast.
--
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = waarde
, ins_kenmerkdeel_verwijder = null
WHERE ins_kenmerkdeel_key = r_kenmerkdeel.ins_kenmerkdeel_key;
END IF;
ELSE
-- De nieuwe waarde voor het object en kenmerk is leeg, dus
-- moet het als verwijderd gemarkeerd worden.
-- Behalve als er in MSelect-mode gewijzigd wordt.
--
IF mselect = '0'
THEN
Ins.Kmd_Delete(r_kenmerkdeel.ins_kenmerkdeel_key
,Historymode);
END IF;
END IF;
END IF;
CLOSE c_kenmerkdeel;
END;
END IF;
END Kmd_Update;
END Ins;
/
CREATE OR REPLACE FUNCTION ALG_F_GetRefWaarde (sk_key IN NUMBER, waarde IN VARCHAR2) RETURN VARCHAR2 IS
sResult VARCHAR2(255);
kolomnaam VARCHAR2(50);
kolomtxt VARCHAR2(50);
objectnaam VARCHAR2(50);
tab_key NUMBER(10);
ttype VARCHAR2(1);
BEGIN
-- Doel is het resultaat van:
-- select [kolomtxt] from [objectnaam] where [kolomnaam]= waarde
-- of
-- select [kolomtxt] from [objectnaam] where [kolomnaam]= waarde and fac_usrtab_key=tab_key
SELECT RSK.alg_refkenmerk_kolomnaam,
RSK.alg_refkenmerk_kolomtxt,
RSK.alg_refkenmerk_objectnaam,
RSK.fac_usrtab_key,
UT.fac_usrtab_view
INTO kolomnaam, kolomtxt,objectnaam, tab_key, ttype
FROM alg_REFKENMERK RSK, alg_KENMERK SK, fac_usrtab UT
WHERE SK.alg_kenmerk_key=sk_key
AND RSK.fac_usrtab_key=UT.fac_usrtab_key(+)
AND SK.alg_refkenmerk_key=RSK.alg_refkenmerk_key;
IF tab_key IS NULL OR ttype = 'V' THEN
-- select [kolomtxt] into sResult from [objectnaam] where [kolomnaam]=waarde
-- maak een cursor/recordgroup oid voor deze query. Precies 1 rowresultaat
sResult:='Select '||kolomtxt||' from '||objectnaam||' where '||kolomnaam||'='||waarde;
ELSE
-- select [kolomtxt] from [objectnaam] where [kolomnaam]= waarde and fac_usrtab_key=tab_key
sResult:='Select '||kolomtxt||' from '||objectnaam||' where '||kolomnaam||'='||waarde||' and fac_usrtab_key = '||TO_CHAR(tab_key);
END IF;
RETURN sResult;
END;
/
CREATE OR REPLACE FUNCTION INS_F_GetRefWaarde (sk_key IN NUMBER, waarde IN VARCHAR2) RETURN VARCHAR2 IS
sResult VARCHAR2(255);
kolomnaam VARCHAR2(50);
kolomtxt VARCHAR2(50);
objectnaam VARCHAR2(50);
tab_key NUMBER(10);
ttype VARCHAR2(1); --Pseudo(T)able or (V)iew
BEGIN
-- Doel is het resultaat van:
-- select [kolomtxt] from [objectnaam] where [kolomnaam]= waarde
-- of
-- select [kolomtxt] from [objectnaam] where [kolomnaam]= waarde and fac_usrtab_key=tab_key
SELECT RSK.ins_refsrtkenmerk_kolomnaam,
RSK.ins_refsrtkenmerk_kolomtxt,
RSK.ins_refsrtkenmerk_objectnaam,
RSK.fac_usrtab_key,
UT.fac_usrtab_view
INTO kolomnaam, kolomtxt,objectnaam, tab_key, ttype
FROM INS_REFSRTKENMERK RSK , INS_SRTKENMERK SK, FAC_USRTAB UT
WHERE SK.ins_srtkenmerk_key=sk_key
AND UT.fac_usrtab_key=RSK.fac_usrtab_key(+)
AND SK.ins_refsrtkenmerk_key=RSK.ins_refsrtkenmerk_key;
IF tab_key IS NULL OR ttype = 'V' THEN
-- select [kolomtxt] into sResult from [objectnaam] where [kolomnaam]= waarde
-- maak een cursor/recordgroup oid voor deze query. Precies 1 row resultaat
sResult:='Select '||kolomtxt||' from '||objectnaam||' where '||kolomnaam||'='||waarde;
ELSE
-- select [kolomtxt] from [objectnaam] where [kolomnaam]= waarde and fac_usrtab_key=tab_key
sResult:='Select '||kolomtxt||' from '||objectnaam||' where '||kolomnaam||'='||waarde||' AND fac_usrtab_key = '||TO_CHAR(tab_key);
END IF;
RETURN sResult;
END;
/
#endif // INS
#ifdef PRS
ALTER TABLE prs_perslidwerkplek
ADD CONSTRAINT prs_c_prs_perslidwp_key CHECK (prs_werkplek_key IS NOT NULL);
DEFINIEER_VIEW_AANWEZIG(prs_eenheid, prs_eenheid_verwijder,
prs_v_aanwezigeenheid,PRS_BIBLIOTHEEK_PRIVILEGE);
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');
UPDATE_AANMAAKDATUM(prs_afdeling, prs_afdeling_aanmaak);
CHECK_NOG_REFERENCES(prs_perslid, prs_afdeling_verwijder,
prs_v_aanwezigperslidwerkplek, prs_afdeling_key, 'SYSTEM ERROR: In Afdeling, er zijn nog PRS_PERSLIDWERKPLEK-records');
DECLARE
dummy CHAR;
BEGIN
IF :new.prs_afdeling_verwijder IS NOT NULL
THEN
SELECT 'x'
INTO dummy
FROM cnt_v_aanwezigcontract
WHERE cnt_v_aanwezigcontract.cnt_prs_afdeling_key = :old.prs_afdeling_key;
raise_application_error(-20000,'cnt_m022');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'cnt_m022');
END;
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;
--
BEGIN
IF :new.prs_afdeling_verwijder IS NOT NULL
OR (:new.prs_afdeling_verwijder IS NULL AND :old.prs_afdeling_verwijder IS NOT NULL)
THEN
UPDATE res_artikel
SET res_artikel_verwijder = :new.prs_afdeling_verwijder
WHERE res_artikel.prs_afdeling_key = :new.prs_afdeling_key
AND res_artikel_verwijder IS NULL;
END IF;
END;
IF:new.prs_afdeling_verwijder IS NULL
THEN
IF :new.prs_eenheid_key IS NOT NULL
AND :old.prs_eenheid_key <> :new.prs_eenheid_key
THEN
DECLARE
Eenheid prs_afdeling.prs_afdeling_eenheid%TYPE;
BEGIN
SELECT prs_eenheid_code INTO Eenheid
FROM prs_eenheid
WHERE prs_eenheid_key = :new.prs_eenheid_key;
--
:new.prs_afdeling_eenheid := Eenheid;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN NULL;
END;
ELSE
IF :new.prs_eenheid_key IS NULL THEN
:new.prs_afdeling_eenheid := NULL;
END IF;
END IF;
END IF;
END;
/
DEF_FAC_ENTITY ('PRS_PERSLID_WACHTWOORD', 'Wachtwoord', NULL, 'het','Password');
ALTER TABLE prs_afdeling DROP CONSTRAINT prs_u_prs_afdeling_upper;
ALTER TABLE prs_afdeling ADD CONSTRAINT prs_u_prs_afdeling_upper UNIQUE(prs_afdeling_upper, prs_eenheid_key, prs_afdeling_verwijder);
CREATE_TABLE(prs_perslideenheid, PRS_BIBLIOTHEEK_PRIVILEGE)
(
prs_perslideenheid_key
NUMBER(10)
PRIMARY KEY,
prs_perslid_key
NUMBER(10)
NOT_NULL(prs_perslid_key, prs_c_prs_perslid_key1)
CONSTRAINT prs_r_prs_perslid_key7 REFERENCES prs_perslid(prs_perslid_key),
prs_eenheid_key
NUMBER(10)
NOT_NULL(prs_eenheid_key, prs_c_prs_eenheid_key1)
CONSTRAINT prs_r_prs_eenheid_key2 REFERENCES prs_eenheid(prs_eenheid_key),
CONSTRAINT prs_u_prs_perslideenheid_key UNIQUE (prs_perslid_key, prs_eenheid_key)
);
CREATE_TABLE(prs_perslidafdeling, PRS_BIBLIOTHEEK_PRIVILEGE)
(
prs_perslidafdeling_key
NUMBER(10)
PRIMARY KEY,
prs_perslid_key
NUMBER(10)
NOT_NULL(prs_perslid_key, prs_c_prs_perslid_key2)
CONSTRAINT prs_r_prs_perslid_key6 REFERENCES prs_perslid(prs_perslid_key),
prs_afdeling_key
NUMBER(10)
NOT_NULL(prs_afdeling_key, prs_c_prs_afdeling_key)
CONSTRAINT prs_r_prs_afdeling_key2 REFERENCES prs_afdeling(prs_afdeling_key),
CONSTRAINT prs_u_prs_perslidafdeling_key UNIQUE (prs_perslid_key, prs_afdeling_key)
);
CREATE SEQUENCE prs_s_prs_perslideenheid_key MINVALUE 1;
CREATE SEQUENCE prs_s_prs_perslidafdeling_key MINVALUE 1;
CREATE_TRIGGER(prs_t_prs_perslideenheid_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslideenheid
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslideenheid_key,prs_s_prs_perslideenheid_key);
END;
/
CREATE_TRIGGER(prs_t_prs_perslidafdeling_B_IU)
BEFORE INSERT OR UPDATE ON prs_perslidafdeling
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(prs_perslidafdeling_key,prs_s_prs_perslidafdeling_key);
END;
/
CREATE_VIEW(prs_v_aanwezigperslideenheid,PRS_BIBLIOTHEEK_PRIVILEGE) AS
SELECT pe.PRS_PERSLIDEENHEID_KEY,
p.PRS_PERSLID_KEY,
p.PRS_PERSLID_NAAM,
p.PRS_PERSLID_AANMAAK,
p.PRS_PERSLID_INIT_UPPER,
p.PRS_PERSLID_INITIALEN,
p.PRS_PERSLID_MODULE,
p.PRS_PERSLID_NR,
p.PRS_PERSLID_OPP,
p.PRS_PERSLID_OSLOGIN,
p.PRS_PERSLID_TELEFOONNR,
p.PRS_PERSLID_TITEL,
p.PRS_PERSLID_UPPER,
p.PRS_PERSLID_UURLOON,
p.PRS_PERSLID_VOORLETTERS,
p.PRS_PERSLID_VOORNAAM,
p.PRS_PERSLID_VERWIJDER,
p.PRS_PERSLID_WACHTWOORD,
p.PRS_SRTPERSLID_KEY,
e.PRS_EENHEID_KEY,
e.PRS_EENHEID_OMSCHRIJVING
FROM prs_perslid p, prs_perslideenheid pe, prs_eenheid e
WHERE p.Prs_perslid_key = pe.Prs_perslid_key
AND pe.Prs_eenheid_key = e.Prs_eenheid_key
AND e.prs_eenheid_verwijder IS NULL
AND p.prs_perslid_verwijder IS NULL;
CREATE_VIEW(prs_v_aanwezigperslidafdeling, PRS_BIBLIOTHEEK_PRIVILEGE) AS
SELECT pa.PRS_PERSLIDAFDELING_KEY,
p.PRS_PERSLID_KEY,
p.PRS_PERSLID_NAAM,
p.PRS_PERSLID_AANMAAK,
p.PRS_PERSLID_INIT_UPPER,
p.PRS_PERSLID_INITIALEN,
p.PRS_PERSLID_MODULE,
p.PRS_PERSLID_NR,
p.PRS_PERSLID_OPP,
p.PRS_PERSLID_OSLOGIN,
p.PRS_PERSLID_TELEFOONNR,
p.PRS_PERSLID_TITEL,
p.PRS_PERSLID_UPPER,
p.PRS_PERSLID_UURLOON,
p.PRS_PERSLID_VOORLETTERS,
p.PRS_PERSLID_VOORNAAM,
p.PRS_PERSLID_VERWIJDER,
p.PRS_PERSLID_WACHTWOORD,
p.PRS_SRTPERSLID_KEY,
a.PRS_AFDELING_KEY,
a.PRS_AFDELING_NAAM,
a.PRS_AFDELING_KOSTENPLAATS,
a.PRS_AFDELING_OMSCHRIJVING,
a.PRS_AFDELING_PARENTKEY,
a.PRS_EENHEID_KEY,
a.PRS_AFDELING_UPPER,
a.PRS_AFDELING_VERWIJDER,
a.PRS_BEDRIJF_KEY
FROM prs_perslid p, prs_perslidafdeling pa, prs_afdeling a
WHERE p.Prs_perslid_key = pa.Prs_perslid_key
AND pa.Prs_afdeling_key = a.Prs_afdeling_key
AND prs_perslid_verwijder IS NULL
AND prs_afdeling_verwijder IS NULL;
#endif // PRS
#ifdef MLD
-- Deze status mist nog...
INSERT INTO mld_statuses VALUES ( 7, 'Uitgegeven' );
CREATE_VIEW(mld_v_melding_status_gegevens,MLD_NORMAAL_PRIVILEGE) AS
SELECT M.mld_melding_key,
M.mld_melding_status,
S.mld_statuses_omschrijving,
DECODE(mld_melding_status,
1,mld_melding_afgewezen,
2,mld_melding_datum,
3,mld_melding_ingezien,
4,mld_melding_geaccepteerd,
5,mld_melding_afgemeld,
6,mld_melding_verwerkt,
7,mld_melding_geaccepteerd,
NULL) mld_melding_lastdate,
M.mld_melding_datum,
'['||MD.ins_discipline_omschrijving||'/'||SM.mld_stdmelding_omschrijving||'] '||m.mld_melding_omschrijving mld_melding_omschrijving,
AF.prs_afdeling_key,AF.prs_afdeling_omschrijving,
P.prs_perslid_key,P.prs_perslid_naam,
M.mld_alg_onroerendgoed_keys,
L.alg_locatie_code||
DECODE(G.alg_gebouw_code,NULL,'','-'||G.alg_gebouw_code)||
DECODE(G.alg_verdieping_volgnr,NULL,'','-'||G.alg_verdieping_volgnr)||
DECODE(G.alg_ruimte_nr,NULL,'','-'||G.alg_ruimte_nr)||
DECODE(G.alg_terreinsector_code,NULL,'','-'||G.alg_terreinsector_code) alg_plaats_omschrijving,
M.mld_stdmelding_key,
AF.prs_afdeling_eenheid,
AF.prs_eenheid_key,
M.mld_alg_locatie_key,
M.mld_melding_melder_naam,
AF.prs_afdeling_kostenplaats,
M.mld_ins_discipline_key,
P.prs_perslid_upper,
AF.prs_afdeling_upper,
M.mld_melding_username,
G.alg_gebouw_key,
G.alg_verdieping_key,
G.alg_ruimte_key,
P.prs_perslid_voorletters,
P.prs_perslid_voornaam
FROM mld_melding M,
mld_statuses S,
mld_discipline MD,
mld_stdmelding SM,
prs_afdeling AF,
prs_perslid P,
alg_v_allonrgoed_gegevens G,
alg_locatie L
WHERE M.mld_melding_status=S.mld_statuses_key
AND M.mld_ins_discipline_key=MD.ins_discipline_key
AND M.mld_stdmelding_key=SM.mld_stdmelding_key
AND M.prs_afdeling_key=AF.prs_afdeling_key (+)
AND M.prs_perslid_key=P.prs_perslid_key (+)
AND M.mld_alg_locatie_key=L.alg_locatie_key (+)
AND M.mld_alg_onroerendgoed_keys=G.alg_onroerendgoed_keys (+)
/
CREATE OR REPLACE FUNCTION MLD_F_BepaalOpdrContractVolgnr(cntKey IN NUMBER) RETURN NUMBER IS
ReturnVal NUMBER;
BEGIN
SELECT nvl(max(mld_opdr_bedrijfopdr_volgnr),0) + 1
INTO ReturnVal
FROM mld_opdr
WHERE cnt_contract_key = cntKey;
RETURN ReturnVal;
END;
/
CREATE_TRIGGER(mld_t_mld_opdr_B_IU)
BEFORE INSERT OR UPDATE ON mld_opdr
FOR EACH ROW
BEGIN
UPDATE_PRIMARY_KEY(mld_opdr_key, mld_s_mld_opdr_key);
IF :new.mld_melding_key IS NOT NULL THEN
DECLARE
Dummy CHAR;
BEGIN
SELECT 'X'
INTO Dummy
FROM mld_melding
WHERE mld_melding_key = :new.mld_melding_key
AND mld_melding_geaccepteerd IS NOT NULL
AND mld_melding_verwerkt IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN IF :new.cnt_contract_key IS NULL THEN raise_application_error(-20000, 'mld_m201'); END IF;
END;
END IF;
CHECK_REFERENCE_UITVOERENDE(mld_uitvoerende_keys, 'mld_m37');
DECLARE
Dummy BOOLEAN;
BEGIN
Dummy := fac_p_fac_save_restore.SavePrimaryKey('MLD_MELDING', :new.mld_melding_key);
END;
END;
/
ALTER TABLE mld_opdr DROP CONSTRAINT MLD_R_MLD_MELDING_KEY1;
ALTER TABLE mld_opdr ADD CONSTRAINT MLD_R_MLD_MELDING_KEY3 CHECK(mld_melding_key IS NOT NULL OR cnt_contract_key IS NOT NULL);
#endif // MLD
#ifdef RES
// AKZH#24
ALTER TABLE res_reservering ADD
res_reservering_plaats VARCHAR2(320);
DEFINIEER_VIEW_AANWEZIG(res_reservering, res_reservering_verwijder,
res_v_aanwezigreservering,RES_NORMAAL_PRIVILEGE);
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 en CNT !!
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');
DECLARE
dummy CHAR;
BEGIN
IF :new.ins_deel_verwijder IS NOT NULL
THEN
SELECT 'x'
INTO dummy
FROM cnt_v_aanwezigcontract_object
WHERE cnt_v_aanwezigcontract_object.cnt_ins_deel_key = :old.ins_deel_key;
raise_application_error(-20000,'cnt_m030');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'cnt_m030');
END;
IF :new.ins_deel_parent_key IS NULL
THEN
DECLARE
Dummy BOOLEAN;
BEGIN
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;
Dummy2 CHAR;
BEGIN
BEGIN
-- Een deel mag niet verwijderd worden als er nog openstaande meldingen zijn...
SELECT 'x'
INTO dummy2
FROM mld_v_aanwezigmelding_object O, mld_melding M
WHERE O.ins_deel_key = :old.ins_deel_key
AND O.mld_melding_key = M.mld_melding_key
AND EXISTS
(SELECT '' FROM mld_melding
WHERE mld_melding_afgemeld IS NULL
AND mld_melding_verwerkt IS NULL
AND mld_melding_key = M.mld_melding_key
MINUS
SELECT '' FROM mld_melding
WHERE mld_melding_afgewezen IS NOT NULL
AND mld_melding_key = M.mld_melding_key);
--
raise_application_error(-20000,'ins_m202');
EXCEPTION
WHEN NO_DATA_FOUND THEN
Dummy := fac_p_fac_save_restore.SavePrimaryKey('INS_DEEL_ONTKOPPEL', :new.ins_deel_key);
WHEN TOO_MANY_ROWS THEN raise_application_error(-20000,'ins_m202');
END;
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.
-- Echter NIET voor persoonsgebonden objecten !!!
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;
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
#ifdef BES
DEF_FAC_ENTITY ('BES_DISCIPLINE' , 'Categorie', NULL, NULL, 'Category');
DEF_FAC_ENTITY ('BES_SRTGROEP' , 'Productgroepen', NULL, NULL,'Productgroups');
DEF_FAC_ENTITY ('BES_SRTDEEL' , 'Product', NULL, NULL,'Products');
DEF_FAC_ENTITY ('BES_PRODUCTNR' , 'Productnr.', NULL, NULL, 'Product');
DEF_FAC_ENTITY ('BES_VERVALDATUM' , 'Vervaldatum', NULL, NULL, 'Due date');
DEF_FAC_ENTITY ('BES_AFBEELDING' , 'Afbeelding' , NULL, NULL, 'Picture');
DEF_FAC_ENTITY ('BES_DISCIPLINE_OMSCHRIJVING', 'Omschrijving', NULL, NULL, 'Description');
DEF_FAC_ENTITY ('BES_SRTGROEP_OMSCHRIJVING', 'Omschrijving', NULL, NULL, 'Description');
#endif // BES
#ifdef BEZ
#endif // BEZ
#ifdef CNT
ALTER TABLE CNT_CONTRACT MODIFY(CNT_CONTRACT_NUMMER VARCHAR2(30));
ALTER TABLE CNT_CONTRACT MODIFY(CNT_CONTRACT_NUMMER_INTERN VARCHAR2(30));
ALTER TABLE CNT_CONTRACT
ADD (cnt_contract_nummer_intern VARCHAR2(15));
ALTER TABLE CNT_CONTRACT
ADD (cnt_contract_rappeldatum DATE);
ALTER TABLE CNT_CONTRACT
ADD (cnt_contract_opzegdatum DATE);
ALTER TABLE CNT_CONTRACT
ADD (cnt_contract_korting NUMBER(4,2)
CONSTRAINT cnt_c_cnt_contract_korting
CHECK(0 <= cnt_contract_korting AND cnt_contract_korting <= 100));
ALTER TABLE CNT_CONTRACT
ADD (cnt_contract_contact_persoon VARCHAR2(30));
ALTER TABLE CNT_CONTRACT
ADD (ins_discipline_key NUMBER(10)
CONSTRAINT cnt_r_ins_discipline_key
REFERENCES ins_tab_discipline (ins_discipline_key));
ALTER TABLE CNT_CONTRACT
ADD (cnt_contract_document VARCHAR2(512));
ALTER TABLE CNT_CONTRACT
ADD (prs_perslid_key_eig NUMBER(10)
CONSTRAINT cnt_r_cnt_perslid_key_eig
REFERENCES prs_perslid (prs_perslid_key));
ALTER TABLE CNT_CONTRACT
ADD (prs_perslid_key_beh NUMBER(10)
CONSTRAINT cnt_r_cnt_perslid_key_beh
REFERENCES prs_perslid (prs_perslid_key));
ALTER TABLE CNT_CONTRACT
ADD (cnt_contract_status NUMBER(1));
ALTER TABLE CNT_CONTRACT
ADD CONSTRAINT cnt_c_cnt_contract_rappel
CHECK(cnt_contract_looptijd_van <= cnt_contract_rappeldatum
AND cnt_contract_rappeldatum <= cnt_contract_opzegdatum);
ALTER TABLE CNT_CONTRACT
ADD CONSTRAINT cnt_c_cnt_contract_opzeg
CHECK(cnt_contract_rappeldatum <= cnt_contract_opzegdatum
AND cnt_contract_opzegdatum <= cnt_contract_looptijd_tot);
DEFINIEER_VIEW_AANWEZIG(cnt_contract, cnt_contract_verwijder, cnt_v_aanwezigcontract,CNT_NORMAAL_PRIVILEGE);
CREATE_TABLE (CNT_CONTRACT_DIENST,CNT_NORMAAL_PRIVILEGE)
( cnt_contract_dienst_key
NUMBER(10)
PRIMARY KEY,
cnt_contract_key
NUMBER(10)
CONSTRAINT cnt_r_cnt_contract_dienst REFERENCES cnt_contract(cnt_contract_key),
mld_stdmelding_key
NUMBER(10)
CONSTRAINT cnt_r_cnt_contract_stdmld REFERENCES mld_stdmelding(mld_stdmelding_key),
prs_bedrijf_key
NUMBER(10)
CONSTRAINT cnt_r_cnt_contract_bedrijf REFERENCES prs_bedrijf(prs_bedrijf_key),
cnt_contract_dienst_contactint
NUMBER(10)
CONSTRAINT cnt_r_cnt_contractint REFERENCES prs_perslid(prs_perslid_key),
cnt_contract_dienst_contactext VARCHAR2(30),
cnt_contract_dienst_uitvoertd NUMBER(3),
cnt_contract_dienst_uren NUMBER(6,2),
cnt_contract_dienst_materiaal NUMBER(6,2),
cnt_contract_dienst_uurloon NUMBER(6,2)
);
CREATE SEQUENCE cnt_s_cnt_contr_dienst_key MINVALUE 1;
CREATE OR REPLACE PACKAGE Cnt AS
FUNCTION cnt_contract_status (van IN DATE, rappel IN DATE, opzeg IN DATE, tot IN DATE) RETURN NUMBER;
FUNCTION cnt_contract_items (cntKey IN NUMBER) RETURN VARCHAR2;
PRAGMA RESTRICT_REFERENCES (cnt_contract_items, WNDS, WNPS);
PRAGMA RESTRICT_REFERENCES (cnt_contract_status, WNDS, WNPS);
END Cnt;
/
CREATE OR REPLACE PACKAGE BODY Cnt AS
FUNCTION cnt_contract_status (van IN DATE, rappel IN DATE, opzeg IN DATE, tot IN DATE) RETURN NUMBER AS
BEGIN
IF SYSDATE < van THEN
RETURN 0;
ELSIF SYSDATE <= rappel THEN
RETURN 1;
ELSIF SYSDATE <= opzeg THEN
RETURN 2;
ELSIF SYSDATE <= tot THEN
RETURN 3;
ELSE
RETURN 4;
END IF;
END;
FUNCTION cnt_contract_items (cntKey IN NUMBER) RETURN VARCHAR2 AS
ret VARCHAR2(512);
ckey number;
CURSOR query(cntKey NUMBER) IS
SELECT 1 ckey, S.INS_SRTDEEL_CODE || ' ' ||S.INS_SRTDEEL_OMSCHRIJVING cntText
from CNT_CONTRACT_OBJECT O, INS_V_AANWEZIGSRTDEEL S
WHERE O.CNT_CONTRACT_KEY = cntKey
AND S.ins_srtdeel_key = O.cnt_ins_srtdeel_key
UNION ALL
SELECT 2 ckey, D.INS_DEEL_OMSCHRIJVING cntText
from CNT_CONTRACT_OBJECT O, INS_V_AANWEZIGDEEL D
WHERE O.CNT_CONTRACT_KEY = cntKey
AND D.ins_DEEL_key = O.cnt_ins_DEEL_key
UNION ALL
SELECT 3 ckey, g.alg_locatie_omschrijving cntText
FROM alg_v_aanweziglocatie g, CNT_v_aanwezigCONTRACT_PLAATS P
WHERE p.CNT_CONTRACT_KEY = cntKey
AND p.cnt_alg_plaats_key = g.alg_locatie_key
AND p.CNT_ALG_PLAATS_CODE = 'L'
UNION ALL
SELECT 4 ckey, g.alg_gebouw_omschrijving cntText
FROM alg_v_aanweziggebouw g, CNT_v_aanwezigCONTRACT_PLAATS P
WHERE p.CNT_CONTRACT_KEY = cntKey
AND p.cnt_alg_plaats_key = g.alg_gebouw_key
AND p.CNT_ALG_PLAATS_CODE = 'G'
UNION ALL
SELECT 5 ckey, alg_terreinsector_naam cntText
FROM alg_v_aanwezigterreinsector T, CNT_v_aanwezigCONTRACT_PLAATS P
WHERE p.CNT_CONTRACT_KEY = cntKey
AND p.cnt_alg_plaats_key = T.alg_terreinsector_key
AND p.CNT_ALG_PLAATS_CODE = 'T'
ORDER BY 1,2;
BEGIN
ret := null;
ckey := -1;
FOR cntitem_rec IN query(cntKey) LOOP
IF ckey = -1 THEN
ret := cntitem_rec.cntText;
ELSE
IF ckey <> cntitem_rec.ckey THEN
ret := ret || CHR(10) || '------------------------------';
END IF;
IF LENGTH(ret)+LENGTH(cntitem_rec.cntText)<(512-3) THEN
ret := ret || CHR(10) || cntitem_rec.cntText;
ELSE
ret := ret || CHR(10) || '...';
RETURN ret;
END IF;
END IF;
ckey := cntitem_rec.ckey;
END LOOP;
RETURN ret;
END;
END Cnt;
/
CREATE OR REPLACE TRIGGER cnt_t_cnt_contract_dienst_B_IU
BEFORE INSERT OR UPDATE ON cnt_contract_dienst
FOR EACH ROW
BEGIN
IF :new.cnt_contract_dienst_key IS NULL THEN SELECT cnt_s_cnt_contr_dienst_key.nextval INTO :new.cnt_contract_dienst_key FROM DUAL; END IF;
IF :new.PRS_BEDRIJF_KEY IS NULL THEN
SELECT cnt_prs_bedrijf_key, cnt_contract_contact_persoon
INTO :new.prs_bedrijf_key, :new.CNT_CONTRACT_DIENST_CONTACTEXT
FROM cnt_contract C
WHERE C.cnt_contract_key=:new.cnt_contract_key;
--:new.CNT_CONTRACT_DIENST_CONTACTEXT := NULL;
END IF;
IF :new.CNT_CONTRACT_DIENST_CONTACTINT IS NULL THEN
SELECT PRS_PERSLID_KEY_EIG
INTO :new.CNT_CONTRACT_DIENST_CONTACTINT
FROM cnt_contract C
WHERE C.cnt_contract_key=:new.cnt_contract_key;
END IF;
DECLARE
dummy VARCHAR2(1);
BEGIN
SELECT 'x'
INTO dummy
from mld_stdmelding S, cnt_contract C
where mld_stdmelding_key=:new.mld_stdmelding_key
and c.ins_discipline_key=s.mld_ins_discipline_key
and c.CNT_CONTRACT_KEY=:new.cnt_contract_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN raise_application_error(-20000, 'cnt_m031');
END;
END;
/
DEF_FAC_MESSAGE ('CNT_M031','De aangegeven dienst valt niet binnen de categorie van het contract','The service must belong to the discipline of the contract.');
DEF_FAC_MESSAGE ('cnt_c_cnt_contract_korting' ,'Het kortingspercentage moet tussen 0 en 100 liggen.' ,'Percentage must be between 0 and 100.');
DEF_FAC_MESSAGE ('cnt_r_ins_discipline_key' ,'De aangegeven vakgroep bestaat niet.' ,'Discipline does not exist.');
DEF_FAC_MESSAGE ('cnt_r_cnt_perslid_key_eig' ,'De aangegeven eigenaar bestaat niet.' ,'Owner does not exist.');
DEF_FAC_MESSAGE ('cnt_r_cnt_perslid_key_beh' ,'De aangegeven beheerder bestaat niet.' ,'Contratmanager does not exist.');
DEF_FAC_MESSAGE ('cnt_c_cnt_contract_rappel' ,'De rappeldatum moet tussen de begindatum en de opzegdatum liggen.' ,'Rappel date must be between start and stop date.');
DEF_FAC_MESSAGE ('cnt_c_cnt_contract_opzeg' ,'De opzegdatum moet tussen de rappeldatum en de einddatum liggen.' ,'Stop date must be between rappel and end date.');
DEF_FAC_MESSAGE ('cnt_r_cnt_contract_dienst' ,'Het aangegeven contract bestaat niet.' ,'That contract does not exist.');
DEF_FAC_MESSAGE ('cnt_r_cnt_contract_stdmld' ,'De aangegeven dienst bestaat niet.' ,'That service does not exist.');
DEF_FAC_MESSAGE ('cnt_r_cnt_contract_bedrijf' ,'Het aangegeven bedrijf bestaat niet.' ,'That company does not exist.');
DEF_FAC_MESSAGE ('cnt_r_cnt_contractint' ,'De aangegeven interne contactpersoon bestaat niet.' ,'That internal contact person does not exist');
#endif // CNT
#ifdef WEB
DEF_FAC_FUNCTIE('WEB_CNTBUS', 'Business:Contracten', 'WEB', 2);
UPDATE web_user_mess_actions SET web_user_mess_action_dsc='complains/complains.asp?reado=1'||chr(38)||'mld_key=' WHERE web_user_mess_actions_key=1;
#endif // WEB
#ifdef SCH
#endif // SCH
#ifdef FAC
UPDATE FAC_MESSAGE
SET FAC_MESSAGE_TEXT = 'Facilitor 4.24.6'
WHERE FAC_MESSAGE_CODE = 'FAC_M002';
UPDATE FAC_MESSAGE
SET FAC_MESSAGE_TEXT = 'Welkom bij Facilitor 4.24.6'
WHERE FAC_MESSAGE_CODE = 'FAC_M035';
#endif // FAC
#ifdef PRA
CREATE_TRIGGER(PRS_T_PRS_AANMELD_B_IU)
BEFORE INSERT OR UPDATE ON prs_aanmeld
FOR EACH ROW
BEGIN
DECLARE mes VARCHAR2(255);
actkey NUMBER;
code VARCHAR2(6);
keepmes NUMBER;
pkey NUMBER;
titel_key NUMBER;
email_key NUMBER;
mphone_key NUMBER;
badgen_key NUMBER;
badges_key NUMBER;
naam VARCHAR2(30);
aanmeldActKey NUMBER;
BEGIN
-- constants
titel_key := 62; -- person titel
email_key := 5; -- email kenmerk key
mphone_key := 1020; -- mobile phone kenmerk key
badgen_key := 1000; -- badge number kenmerk key
badges_key := 1001; -- badge sort kenmerk key
aanmeldactkey:= 21; -- Action : announcement of new personnel
IF :new.prs_aanmeld_key IS NULL THEN SELECT prs_s_prs_aanmeld_key.nextval INTO :new.prs_aanmeld_key FROM DUAL; END IF;
IF :old.Prs_aanmeld_aanmaak IS NULL THEN
BEGIN
-- initial new employee data input
:new.Prs_aanmeld_aanmaak := SYSDATE;
naam := :new.prs_aanmeld_naam;
code := 'COMPPZ';
BEGIN
SELECT WEB_USER_MESS_TEXT_DSC, WEB_USER_MESS_ACTIONS_KEY into mes, actkey
FROM WEB_USER_MESS_TEXT where WEB_USER_MESS_TEXT_CODE = code;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
-- inform security department
IF actkey is not null THEN
INSERT INTO WEB_USER_MESSAGES
SELECT NULL, NULL, PRS_PERSLID_KEY, actkey, REPLACE(mes,'##NAAM##', naam), NULL, 1, :new.prs_aanmeld_key, SYSDATE
FROM PRS_V_AANWEZIGSECURITY;
END IF;
END;
ELSE
naam := :old.prs_aanmeld_naam;
END IF;
IF :old.PRS_AANMELD_SECU_OK is null and :new.PRS_AANMELD_SECU_OK is not null and
:new.PRS_AANMELD_SECU_end is null THEN
BEGIN
:new.PRS_AANMELD_SECU_end := SYSDATE;
END;
END IF;
IF :old.PRS_AANMELD_SECU_end is null and :new.PRS_AANMELD_SECU_end is not null THEN
-- initial security input is completed
BEGIN
code := 'COMPSC';
BEGIN
select WEB_USER_MESS_TEXT_DSC, WEB_USER_MESS_ACTIONS_KEY into mes, actkey
from WEB_USER_MESS_TEXT where WEB_USER_MESS_TEXT_CODE = code;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
IF actkey is not null THEN
-- inform security department staff manager and contact person if it's not one person
IF :new.prs_aanmeld_pz_key is not null THEN
insert into WEB_USER_MESSAGES
select NULL, NULL, :new.prs_aanmeld_pz_key, actkey, REPLACE(mes, '##NAAM##', naam), NULL, 1, :new.prs_aanmeld_key, SYSDATE
FROM dual;
IF :new.prs_aanmeld_pz_key <> :new.prs_aanmeld_contact_key THEN
insert into WEB_USER_MESSAGES
select NULL, NULL, :new.prs_aanmeld_contact_key, actkey, REPLACE(mes,'##NAAM##', naam), NULL, 1, :new.prs_aanmeld_key, SYSDATE
FROM dual;
END IF;
ELSE
insert into WEB_USER_MESSAGES
select NULL, NULL, :new.prs_aanmeld_contact_key, actkey, REPLACE(mes,'##NAAM##', naam), NULL, 1, :new.prs_aanmeld_key, SYSDATE
FROM dual;
END IF;
END IF;
END;
END IF;
IF (:old.PRS_AANMELD_SECU_OK is null and :new.PRS_AANMELD_SECU_OK is not null and :new.PRS_AANMELD_WERKPLEK_OPLOC = 1)
or (:old.PRS_AANMELD_WERKPLEK_OPLOC = 0 and :new.PRS_AANMELD_WERKPLEK_OPLOC = 1
and :new.PRS_AANMELD_SECU_OK is not null )
THEN
-- all security input is complete, copy new person data into prs_perslid ans add reference to it
BEGIN
SELECT prs_s_prs_alluitvoerende_keys.nextval, nvl(FAC_USRDATA_OMSCHR,'')
INTO :new.PRS_PERSLID_KEY, mes FROM fac_usrdata where fac_usrtab_key (+)= titel_key
and :new.Prs_aanmeld_titel_key = FAC_USRDATA_KEY(+);
INSERT INTO PRS_PERSLID
(PRS_PERSLID_KEY, PRS_PERSLID_MODULE, PRS_SRTPERSLID_KEY, PRS_AFDELING_KEY,
PRS_PERSLID_NAAM, PRS_PERSLID_TITEL, PRS_PERSLID_NR, PRS_PERSLID_INGANGSDATUM,
PRS_PERSLID_EINDDATUM, PRS_PERSLID_TELEFOONNR, PRS_PERSLID_AANMAAK) values
(:new.PRS_PERSLID_KEY, 'PRS', 1, :new.Prs_afdeling_key, :new.Prs_aanmeld_naam, mes,
:new.Prs_aanmeld_persnr, :new.prs_aanmeld_datumbadgestart, :new.prs_aanmeld_datumbadgeend,
:new.prs_aanmeld_telintern, :new.Prs_aanmeld_aanmaak);
END;
END IF;
IF :old.PRS_AANMELD_CP_OK is null and :new.PRS_AANMELD_CP_OK is not null THEN
-- contact person's input is completed
BEGIN
code := 'COMPCP';
BEGIN
select WEB_USER_MESS_TEXT_DSC, WEB_USER_MESS_ACTIONS_KEY into mes, actkey
from WEB_USER_MESS_TEXT where WEB_USER_MESS_TEXT_CODE = code;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
-- inform facility manager
IF actkey is not null THEN
insert into WEB_USER_MESSAGES
select NULL, NULL, PRS_PERSLID_KEY, actkey, REPLACE(mes, '##NAAM##', naam), NULL, 1, :new.prs_aanmeld_key, SYSDATE
FROM PRS_V_AANWEZIGFACILITY;
END IF;
END;
END IF;
IF :old.PRS_AANMELD_FACI_OK is null and :new.PRS_AANMELD_FACI_OK is not null THEN
-- facilities input is completed
BEGIN
code := 'COMPFC';
BEGIN
select WEB_USER_MESS_TEXT_DSC, WEB_USER_MESS_ACTIONS_KEY into mes, actkey
from WEB_USER_MESS_TEXT where WEB_USER_MESS_TEXT_CODE = code;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
IF actkey is not null THEN
insert into WEB_USER_MESSAGES
select NULL, NULL, u.PRS_PERSLID_KEY, actkey, REPLACE(mes,'##NAAM##',naam), NULL, 1, :new.prs_aanmeld_key, SYSDATE
FROM FAC_V_WEBGEBRUIKER w,FAC_V_WEBUSER u,FAC_V_WEBFUNCTIE f
WHERE u.PRS_PERSLID_INITIALEN=w.FAC_GEBRUIKER_USERNAME AND
f.FAC_FUNCTIE_KEY=w.FAC_FUNCTIE_KEY AND
f.FAC_FUNCTIE_CODE = 'WEB_PRSSYS';
END IF;
END;
END IF;
IF :old.PRS_AANMELD_SYS_OK is null and :new.PRS_AANMELD_SYS_OK is not null THEN
-- new employee processing is completed
BEGIN
-- refresh prs_perslid table
IF :new.Prs_aanmeld_titel_key IS NOT NULL THEN
SELECT nvl(FAC_USRDATA_OMSCHR,'')INTO mes FROM fac_usrdata
where fac_usrtab_key (+)= titel_key
and :new.Prs_aanmeld_titel_key = FAC_USRDATA_KEY(+);
ELSE
mes := '';
END IF;
update prs_perslid
set PRS_AFDELING_KEY =:new.Prs_afdeling_key,
PRS_PERSLID_NAAM = :new.Prs_aanmeld_naam,
PRS_PERSLID_TITEL = mes,
PRS_PERSLID_NR = :new.Prs_aanmeld_persnr,
PRS_PERSLID_INGANGSDATUM = :new.prs_aanmeld_datumbadgestart,
PRS_PERSLID_EINDDATUM = :new.prs_aanmeld_datumbadgeend,
PRS_PERSLID_TELEFOONNR = :new.prs_aanmeld_telintern,
PRS_PERSLID_AANMAAK = :new.Prs_aanmeld_aanmaak
where prs_perslid_key = :new.prs_perslid_key;
-- copy the rest of data into prs_kenmerk
-- copy email address
mes := null;
IF :new.PRS_AANMELD_EMAIL is not null THEN
BEGIN
select PRS_KENMERKLINK_WAARDE into mes from PRS_KENMERKLINK
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = email_key;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
IF mes is null THEN
insert into PRS_KENMERKLINK (PRS_KENMERKLINK_KEY,
PRS_LINK_KEY, PRS_KENMERK_KEY, PRS_KENMERKLINK_WAARDE, PRS_KENMERKLINK_NIVEAU )
values( prs_s_prs_kenmerkLink_key.NextVal, :new.prs_perslid_key,
email_key, :new.PRS_AANMELD_EMAIL ,'P');
ELSE
update PRS_KENMERKLINK set PRS_KENMERKLINK_WAARDE = :new.PRS_AANMELD_EMAIL
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = email_key;
END IF;
END IF;
-- copy mobile phone
mes := null;
IF :new.PRS_AANMELD_MOBIEL is not null THEN
BEGIN
select PRS_KENMERKLINK_WAARDE into mes from PRS_KENMERKLINK
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = mphone_key;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
IF mes is null THEN
insert into PRS_KENMERKLINK (PRS_KENMERKLINK_KEY,
PRS_LINK_KEY, PRS_KENMERK_KEY, PRS_KENMERKLINK_WAARDE, PRS_KENMERKLINK_NIVEAU )
values( prs_s_prs_kenmerkLink_key.NextVal, :new.prs_perslid_key,
mphone_key, :new.PRS_AANMELD_MOBIEL ,'P');
ELSE
update PRS_KENMERKLINK set PRS_KENMERKLINK_WAARDE = :new.PRS_AANMELD_MOBIEL
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = mphone_key;
END IF;
END IF;
-- copy badge number
mes := null;
IF :new.PRS_AANMELD_DEFBADGENR is not null THEN
BEGIN
select PRS_KENMERKLINK_WAARDE into mes from PRS_KENMERKLINK
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = badgen_key;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
IF mes is null THEN
insert into PRS_KENMERKLINK (PRS_KENMERKLINK_KEY,
PRS_LINK_KEY, PRS_KENMERK_KEY, PRS_KENMERKLINK_WAARDE, PRS_KENMERKLINK_NIVEAU )
values( prs_s_prs_kenmerkLink_key.NextVal, :new.prs_perslid_key,
badgen_key, :new.PRS_AANMELD_DEFBADGENR ,'P');
ELSE
update PRS_KENMERKLINK set PRS_KENMERKLINK_WAARDE = :new.PRS_AANMELD_DEFBADGENR
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = badgen_key;
END IF;
END IF;
-- copy badge sort
mes := null;
IF :new.PRS_AANMELD_BADGESOORT is not null THEN
BEGIN
select PRS_KENMERKLINK_WAARDE into mes from PRS_KENMERKLINK
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = badges_key;
EXCEPTION WHEN NO_DATA_FOUND THEN null;
END;
IF mes is null THEN
insert into PRS_KENMERKLINK (PRS_KENMERKLINK_KEY,
PRS_LINK_KEY, PRS_KENMERK_KEY, PRS_KENMERKLINK_WAARDE, PRS_KENMERKLINK_NIVEAU )
values( prs_s_prs_kenmerkLink_key.NextVal, :new.prs_perslid_key,
badges_key, :new.PRS_AANMELD_BADGESOORT ,'P');
ELSE
update PRS_KENMERKLINK set PRS_KENMERKLINK_WAARDE = :new.PRS_AANMELD_BADGESOORT
where PRS_LINK_KEY = :new.prs_perslid_key and PRS_KENMERK_KEY = badges_key;
END IF;
END IF;
END;
DELETE FROM WEB_USER_MESSAGES
WHERE web_user_mess_actions_key = AanmeldActKey
AND web_user_mess_action_params = :new.prs_aanmeld_key;
END IF;
IF :old.PRS_AANMELD_WERKPLEK_OPLOC = 1 and :new.PRS_AANMELD_WERKPLEK_OPLOC = 0 THEN
-- delete new employee information from the database
delete from prs_kenmerklink where PRS_LINK_KEY = :new.PRS_PERSLID_KEY;
delete from prs_perslidwerkplek where prs_perslid_key = :new.PRS_PERSLID_KEY;
delete from prs_perslid where prs_perslid_key = :new.PRS_PERSLID_KEY;
:new.PRS_PERSLID_KEY := null;
END IF;
keepmes := 7;
delete from WEB_USER_MESSAGES where WEB_USER_MESS_ACTION_DATUM < (SYSDATE - keepmes);
END;
END;
/
#endif // PRA