Bugfixjes

svn path=/Database/trunk/; revision=9273
This commit is contained in:
Jos Groot Lipman
2006-06-22 09:19:02 +00:00
parent e3f84273db
commit 8d96bd3dc5

View File

@@ -1,8 +1,28 @@
#ifdef PRJ
/* PRJ_PAC.SRC
*
* $Revision: 46 $
* $Modtime: 31-05-06 17:35 $
* $Revision: 47 $
* $Modtime: 22-06-06 8:43 $
*/
/*
CODE COMMENTS, CONSIDERATIONS
Voor een verdiepinging kan in 1 klap een scenario-omgeving worden aangemaakt: prj_initiate_scenario.
Dit scenario kan worden geannuleerd met prj_cancel_scenario.
In een scenario bevat elk item een link naar zijn bron in the real world. Omdat dingen ook toegevoegd kunnen
zijn, kan deze link ook leek zijn, In dat geval moet de relatie met de buitenwereld bekend zijn, om het nieuwe
item later op de juiste plek in te kunnen vullen. Dat is:
prj_ruimte: alg_ruimte_key of alg_verdieping_key (alg_srtruimte_key verplicht)
prj_werkplek: prs_werkplek_key of prj_ruimte_key
prj_perslidwerkplek: prs_perslidwerkplek_key of prj_werkplek x prs_perslid/prs_afdeling.
prj_deel: ins_deel_key of prj_alg_ruimte_key/prj_alg_ruimte_type
Een scenarioruimte kan afwijkende soort en oppervlakte hebben.
Voor bron wordt zoveel mogelijk (altijd?) de originele keys gebruikt(alg_ruimte etc)
en voor bestemming de prj keys (prj_ruimte etc)
*/
#ifndef MS_SQL
@@ -35,18 +55,17 @@ AS
-- UTILITY PROCEDURES AND FUNCTIONS
----------------------------------------------
PROCEDURE prj_log_clear (pscenariokey IN NUMBER)
IS
AS
BEGIN
DELETE FROM prj_log
WHERE prj_scenario_key = pscenariokey;
END prj_log_clear;
PROCEDURE prj_log_add (
logmelding IN VARCHAR2,
code IN VARCHAR2,
pscenariokey IN NUMBER
logmelding IN VARCHAR2 ,
code IN VARCHAR2 ,
pscenariokey IN NUMBER
)
IS
AS
BEGIN
BEGIN
INSERT INTO prj_log
@@ -59,13 +78,11 @@ AS
THEN
NULL;
END;
COMMIT;
-- COMMIT;
END prj_log_add;
PROCEDURE checkscenario (pscenariokey IN NUMBER)
IS
dummy VARCHAR2 (1);
AS
dummy VARCHAR2 (1);
BEGIN
SELECT 'x'
INTO dummy
@@ -74,31 +91,26 @@ AS
EXCEPTION
WHEN NO_DATA_FOUND
THEN
raise_application_error
(-20001,
'prj package: invalid parameter pscenariokey'
);
raise_application_error(-20001, 'prj package: invalid parameter _VAR(pscenariokey)');
RETURN;
END checkscenario;
FUNCTION forceuniqueness (
element_type IN VARCHAR2,
parent_key IN NUMBER,
element_omschrijving IN VARCHAR2
element_type IN VARCHAR2 ,
parent_key IN NUMBER,
element_omschrijving IN VARCHAR2
)
RETURN VARCHAR2
IS
omschrijving VARCHAR2 (30);
prefix VARCHAR2 (30);
RETURN VARCHAR2 IS
omschrijving VARCHAR2 (30);
prefix VARCHAR2 (30);
BEGIN
IF element_type = 'ALG_RUIMTE'
THEN
-- Zoek op de geselecteerde verdieping of het huidige ruimtenummer al voor komt.
BEGIN
SELECT g.alg_gebouw_code
|| '-'
|| TO_CHAR (v.alg_verdieping_code)
|| '-'
|| '-'
|| TO_CHAR (v.alg_verdieping_code)
|| '-'
INTO prefix
FROM alg_gebouw g, alg_verdieping v, alg_ruimte r
WHERE g.alg_gebouw_key = v.alg_gebouw_key
@@ -106,20 +118,18 @@ AS
AND r.alg_verdieping_key = parent_key
AND r.alg_ruimte_nr = element_omschrijving
AND r.alg_ruimte_verwijder IS NULL;
-- Gevonden, dus niet uniek. Probeer het met een sterretje ervoor, passen ze dat later maar zelf aan
omschrijving :=
forceuniqueness (element_type,
parent_key,
SUBSTR ('*' || element_omschrijving, 1, 10)
SUBSTR ('*' || element_omschrijving, 1, 10)
);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
omschrijving := element_omschrijving;
omschrijving := element_omschrijving;
END;
END IF;
-- Voor werkplekken, die een unieke numerieke ID hebben wordt gecheckt of de huidige waarde ok is,
-- en zoniet, dan wordt er doorgeteld tot de eersthogere wel unieke
IF element_type = 'PRS_WERKPLEK'
@@ -127,10 +137,10 @@ AS
-- Zoek in de geselecteerde ruimte of het huidige werkpleknummer al voor komt.
BEGIN
SELECT g.alg_gebouw_code
|| '-'
|| TO_CHAR (v.alg_verdieping_code)
|| '-'
|| TO_CHAR (r.alg_ruimte_nr)
|| '-'
|| TO_CHAR (v.alg_verdieping_code)
|| '-'
|| TO_CHAR (r.alg_ruimte_nr)
INTO prefix
FROM alg_gebouw g,
alg_verdieping v,
@@ -142,7 +152,6 @@ AS
AND w.prs_alg_ruimte_key = parent_key
AND w.prs_werkplek_volgnr = TO_NUMBER (element_omschrijving)
AND w.prs_werkplek_verwijder IS NULL;
-- Gevonden, dus niet uniek. Probeer het met een sterretje ervoor, passen ze dat later maar zelf aan
IF TO_NUMBER (element_omschrijving) = 999
THEN
@@ -161,10 +170,9 @@ AS
EXCEPTION
WHEN NO_DATA_FOUND
THEN
omschrijving := element_omschrijving;
omschrijving := element_omschrijving;
END;
END IF;
IF element_type = 'PRJ_WERKPLEK'
THEN
-- Zoek in de geselecteerde ruimte of het huidige werkpleknummer al voor komt.
@@ -175,7 +183,6 @@ AS
WHERE w.prj_ruimte_key = parent_key
AND w.prj_werkplek_volgnr = element_omschrijving
AND w.prj_werkplek_verwijder IS NULL;
-- Gevonden, dus niet uniek. Probeer het met een sterretje ervoor, passen ze dat later maar zelf aan
IF TO_NUMBER (element_omschrijving) = 999
THEN
@@ -194,43 +201,37 @@ AS
EXCEPTION
WHEN NO_DATA_FOUND
THEN
omschrijving := element_omschrijving;
omschrijving := element_omschrijving;
END;
END IF;
RETURN omschrijving;
END;
FUNCTION defaultwpomschrijving (pruimtekey IN NUMBER, pwerkpleknr IN NUMBER)
RETURN VARCHAR2
IS
omschrijving VARCHAR2 (30);
RETURN VARCHAR2 IS
omschrijving VARCHAR2 (30);
BEGIN
SELECT SUBSTR ( prj_ruimte_nr
|| '-'
|| LPAD (TO_CHAR (pwerkpleknr), 3, '0'),
|| '-'
|| LPAD (TO_CHAR (pwerkpleknr), 3, '0'),
1,
30
)
INTO omschrijving
FROM prj_ruimte
WHERE prj_ruimte_key = pruimtekey;
RETURN omschrijving;
END;
----------------------------------------------
-- SCENARIO MANAGEMENT PROCEDURES
----------------------------------------------
PROCEDURE prj_initiate_scenario (
pscenariokey IN NUMBER,
pverdiepingkey IN NUMBER
pscenariokey IN NUMBER,
pverdiepingkey IN NUMBER
)
IS
dummy VARCHAR2 (1);
AS
dummy VARCHAR2 (1);
BEGIN
checkscenario (pscenariokey);
BEGIN
SELECT 'x'
INTO dummy
@@ -240,13 +241,9 @@ AS
EXCEPTION
WHEN NO_DATA_FOUND
THEN
raise_application_error
(-20001,
'prj_initiate_scenario: invalid parameter pverdiepingkey'
);
raise_application_error(-20001, 'prj_initiate_scenario: invalid parameter _VAR(pverdiepingkey)');
RETURN;
END;
BEGIN
SELECT 'x'
INTO dummy
@@ -263,7 +260,6 @@ AS
NULL;
RETURN;
END;
-- ** Parameters are proven valid
-- ?? Check of er al een kopie bestaat nodig ??
-- Kopieer de ruimtes
@@ -279,21 +275,19 @@ AS
FROM alg_ruimte r
WHERE r.alg_ruimte_verwijder IS NULL
AND alg_verdieping_key = pverdiepingkey;
-- Kopieer de werkplekken
INSERT INTO prj_werkplek
(prj_werkplek_key, prs_werkplek_key, prj_werkplek_volgnr,
prj_werkplek_omschrijving, prj_werkplek_vastopp,
prj_werkplek_omschrijving, prj_werkplek_vastopp, prj_werkplek_opp,
prj_ruimte_key)
SELECT NULL, prs_werkplek_key, prs_werkplek_volgnr,
prs_werkplek_omschrijving, prs_werkplek_vastopp,
prs_werkplek_omschrijving, prs_werkplek_vastopp, prs_werkplek_opp,
prj_ruimte_key
FROM prs_werkplek w, prj_ruimte rx
WHERE w.prs_alg_ruimte_key = rx.alg_ruimte_key
AND w.prs_werkplek_verwijder IS NULL
AND rx.prj_scenario_key = pscenariokey
AND rx.alg_verdieping_key = pverdiepingkey;
-- Kopieer de werkplekbezettingen
INSERT INTO prj_perslidwerkplek
(prj_perslidwerkplek_key, prs_perslidwerkplek_key,
@@ -321,7 +315,6 @@ AS
AND pw.prs_perslid_key IS NULL
AND wx.prj_ruimte_key = rx.prj_ruimte_key
AND rx.alg_verdieping_key = pverdiepingkey;
-- Kopieer de objecten
INSERT INTO prj_deel
(prj_deel_key, ins_deel_key, prj_ruimte_key,
@@ -336,7 +329,6 @@ AS
AND rx.prj_scenario_key = pscenariokey
AND rx.alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = pverdiepingkey;
INSERT INTO prj_deel
(prj_deel_key, ins_deel_key, prj_ruimte_key,
prj_werkplek_key, prj_deel_omschrijving, ins_srtdeel_key)
@@ -354,20 +346,17 @@ AS
AND rx.prj_scenario_key = pscenariokey
AND rx.alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = pverdiepingkey;
COMMIT;
END prj_initiate_scenario;
PROCEDURE prj_copy_scenario (
pscenariokey_from IN NUMBER,
pscenariokey_to IN NUMBER
pscenariokey_from IN NUMBER,
pscenariokey_to IN NUMBER
)
IS
dummy VARCHAR2 (1);
AS
dummy VARCHAR2 (1);
BEGIN
checkscenario (pscenariokey_from);
checkscenario (pscenariokey_to);
BEGIN
SELECT 'x'
INTO dummy
@@ -383,13 +372,8 @@ AS
NULL;
RETURN;
END;
raise_application_error
(-20002,
'prj package: copy not yet supported'
);
raise_application_error(-20002, 'prj package: copy not yet supported');
RETURN;
-- ** Parameters are proven valid
-- Kopieer de ruimtes
INSERT INTO prj_ruimte
@@ -403,38 +387,34 @@ AS
prj_ruimte_inhoud
FROM prj_ruimte rx
WHERE prj_scenario_key = pscenariokey_from;
-- TODO: vergt nog wat uitwerking: de parent key van de zojuist aangemaakte ruimte etc gebruiken
--
-- -- Kopieer de werkplekken
-- INSERT INTO prj_werkplek
-- (prj_werkplek_key, prs_werkplek_key, prj_werkplek_volgnr,
-- prj_werkplek_omschrijving, prj_werkplek_vastopp,
-- prj_ruimte_key)
-- SELECT NULL, wx.prs_werkplek_key, wx.prj_werkplek_volgnr,
-- wx.prj_werkplek_omschrijving, wx.prj_werkplek_vastopp,
-- wx.prj_ruimte_key
-- FROM prj_werkplek wx, prj_ruimte rx, prj_ruimte rxx
-- WHERE wx.prj_ruimte_key = rx.prj_ruimte_key
-- AND rx.prj_ruimte_nr=rxx.prj_ruimte_nr
-- AND rx.alg_verdieping_key=rxx.alg_verdieping_key
-- AND rx.prj_scenario_key = pscenariokey_from;
--
-- -- Kopieer de werkplekbezettingen
-- INSERT INTO prj_perslidwerkplek
-- (prj_perslidwerkplek_key, prs_perslidwerkplek_key,
-- prs_perslid_key, prs_afdeling_key, prj_werkplek_key,
-- prj_perslidwerkplek_bezetting)
-- SELECT NULL, pwx.prs_perslidwerkplek_key, pwx.prs_perslid_key,
-- pwx.prs_afdeling_key, pwx.prj_werkplek_key,
-- pwx.prj_perslidwerkplek_bezetting
-- FROM prj_perslidwerkplek pwx,
-- prj_werkplek wx,
-- prj_ruimte rx
-- WHERE pwx.prj_werkplek_key = wx.prj_werkplek_key
-- AND rx.prj_scenario_key = pscenariokey_from
-- AND wx.prj_ruimte_key = rx.prj_ruimte_key;
--
-- Kopieer de werkplekken
INSERT INTO prj_werkplek
(prj_werkplek_key, prs_werkplek_key, prj_werkplek_volgnr,
prj_werkplek_omschrijving, prj_werkplek_vastopp,
prj_ruimte_key)
SELECT NULL, wx.prs_werkplek_key, wx.prj_werkplek_volgnr,
wx.prj_werkplek_omschrijving, wx.prj_werkplek_vastopp,
wx.prj_ruimte_key
FROM prj_werkplek wx, prj_ruimte rx, prj_ruimte rxx
WHERE wx.prj_ruimte_key = rx.prj_ruimte_key
AND rx.prj_ruimte_nr=rxx.prj_ruimte_nr
AND rx.alg_verdieping_key=rxx.alg_verdieping_key
AND rx.prj_scenario_key = pscenariokey_from;
-- Kopieer de werkplekbezettingen
INSERT INTO prj_perslidwerkplek
(prj_perslidwerkplek_key, prs_perslidwerkplek_key,
prs_perslid_key, prs_afdeling_key, prj_werkplek_key,
prj_perslidwerkplek_bezetting)
SELECT NULL, pwx.prs_perslidwerkplek_key, pwx.prs_perslid_key,
pwx.prs_afdeling_key, pwx.prj_werkplek_key,
pwx.prj_perslidwerkplek_bezetting
FROM prj_perslidwerkplek pwx,
prj_werkplek wx,
prj_ruimte rx
WHERE pwx.prj_werkplek_key = wx.prj_werkplek_key
AND rx.prj_scenario_key = pscenariokey_from
AND wx.prj_ruimte_key = rx.prj_ruimte_key;
-- Kopieer de objecten
INSERT INTO prj_deel
(prj_deel_key, ins_deel_key, prj_ruimte_key,
@@ -444,38 +424,32 @@ AS
FROM prj_deel dx, prj_ruimte rx
WHERE dx.prj_ruimte_key = rx.prj_ruimte_key
AND rx.prj_scenario_key = pscenariokey_from;
COMMIT;
END prj_copy_scenario;
PROCEDURE prj_reinitiate_scenario (
pscenariokey IN NUMBER,
pverdiepingkey IN NUMBER
pscenariokey IN NUMBER,
pverdiepingkey IN NUMBER
)
IS
AS
BEGIN
checkscenario (pscenariokey);
-- Oogmerk van deze routine kan het opfrissen van het snapshot van dit scenario zijn met behoud van reeds gedane wijzigingen
-- FUTURE EXTENSION
END prj_reinitiate_scenario;
-- Annuleer een scenario of een verdieping van een scenario
-- Als pverdiepingkey NULL is, wordt ook het scenario verwijderd.
-- Vooralsnog is pverdiepingkey dummy
PROCEDURE prj_cancel_scenario (
pscenariokey IN NUMBER,
pverdiepingkey IN NUMBER
pscenariokey IN NUMBER,
pverdiepingkey IN NUMBER
)
IS
dummy VARCHAR2 (1);
AS
dummy VARCHAR2 (1);
BEGIN
checkscenario (pscenariokey);
IF true OR pverdiepingkey IS NULL
IF true or pverdiepingkey IS NULL
THEN
DELETE FROM prj_ruimte rx
WHERE rx.prj_scenario_key = pscenariokey;
-- Deze cascadeert door naar de onderliggende items
DELETE FROM prj_scenario
WHERE prj_scenario_key = pscenariokey;
@@ -495,7 +469,6 @@ AS
FROM prj_ruimte
WHERE alg_verdieping_key = pverdiepingkey
AND prj_scenario_key = pscenariokey);
-- De personen die van een andere verdieping op een werkplke zijn gezet die nu
-- gaat vervallen, komen tussen de thuislozen terecht. Terugzetten op hun oude plek
-- is nl. ook niet altijd triviaal. Het zou mooi zijn als ze nu vanuit dat reservoir
@@ -507,7 +480,6 @@ AS
AND rx.alg_verdieping_key = pverdiepingkey;
END IF;
END prj_cancel_scenario;
----------------------------------------------
-- SCENARIO TRANSACTION PROCEDURES
----------------------------------------------
@@ -515,53 +487,48 @@ AS
-- Moves a werkplek to another ruimte
---------------------------------------
PROCEDURE prj_move_werkplek (pwerkplekkey IN NUMBER, pruimtekey IN NUMBER)
IS
currentnr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkpleknr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkplekomschrijving prj_werkplek.prj_werkplek_omschrijving%TYPE;
scenariokey prj_ruimte.prj_scenario_key%TYPE;
AS
currentnr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkpleknr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkplekomschrijving prj_werkplek.prj_werkplek_omschrijving%TYPE;
scenariokey prj_ruimte.prj_scenario_key%TYPE;
BEGIN
SELECT prj_werkplek_volgnr
INTO currentnr
FROM prj_werkplek
WHERE prj_werkplek_key = pwerkplekkey;
werkpleknr :=
TO_NUMBER (forceuniqueness ('PRJ_WERKPLEK',
pruimtekey,
TO_CHAR (currentnr)
)
);
werkplekomschrijving := defaultwpomschrijving (pruimtekey, werkpleknr);
werkplekomschrijving := defaultwpomschrijving (pruimtekey, werkpleknr);
UPDATE prj_werkplek
SET prj_ruimte_key = pruimtekey,
prj_werkplek_volgnr = werkpleknr,
prj_werkplek_omschrijving = werkplekomschrijving
WHERE prj_werkplek_key = pwerkplekkey AND prj_ruimte_key <> pruimtekey;
-- niet onnodig moven
SELECT prj_scenario_key
INTO scenariokey
FROM prj_ruimte
WHERE prj_ruimte_key = pruimtekey;
END;
-------------------------------------
-- Find a sufficently free werkplek in ruimte pruimtekey
-- Find a sufficiently free werkplek in ruimte pruimtekey
-- If necessary create a new one
-------------------------------------
FUNCTION find_or_create_free_werkplek (
pruimtekey IN NUMBER,
bezetting IN NUMBER
pruimtekey IN NUMBER,
bezetting IN NUMBER
)
RETURN NUMBER
IS
omschrijving VARCHAR2 (30);
prefix VARCHAR2 (30);
werkplekkey prj_werkplek.prj_werkplek_key%TYPE;
werkpleknr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkplekomschrijving prj_werkplek.prj_werkplek_omschrijving%TYPE;
RETURN NUMBER IS
omschrijving VARCHAR2 (30);
prefix VARCHAR2 (30);
werkplekkey prj_werkplek.prj_werkplek_key%TYPE;
werkpleknr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkplekomschrijving prj_werkplek.prj_werkplek_omschrijving%TYPE;
BEGIN
BEGIN
-- Wat is de eerste werkplek in de nieuwe ruimte waarin deze bezetting zou passen?
@@ -575,7 +542,7 @@ AS
FROM prj_perslidwerkplek
WHERE prj_perslidwerkplek_verwijder IS NULL) pwx
WHERE wx.prj_ruimte_key = pruimtekey
AND wx.prj_werkplek_key = pwx.prj_werkplek_key(+)
AND wx.prj_werkplek_key = pwx.prj_werkplek_key (+)
GROUP BY wx.prj_werkplek_key
HAVING NVL (SUM (pwx.prj_perslidwerkplek_bezetting), 0)
+ bezetting <= 100)
@@ -592,7 +559,6 @@ AS
);
werkplekomschrijving :=
defaultwpomschrijving (pruimtekey, werkpleknr);
INSERT INTO prj_werkplek
(prj_werkplek_key, prs_werkplek_key,
prj_werkplek_volgnr, prj_werkplek_omschrijving,
@@ -602,19 +568,16 @@ AS
werkpleknr, werkplekomschrijving,
NULL, pruimtekey
);
SELECT prj_werkplek_key
INTO werkplekkey
FROM prj_werkplek
WHERE prj_ruimte_key = pruimtekey
AND prj_werkplek_volgnr = werkpleknr
AND prj_werkplek_verwijder IS NULL;
--DBMS_OUTPUT.put_line ('inserted werkplekkey:' || TO_CHAR (werkplekkey));
--DBMS_OUTPUT.put_line ('inserted _VAR(werkplekkey):' || TO_CHAR (werkplekkey));
END;
RETURN werkplekkey;
END; -- Function find_or_create_free_werkplek
-------------------------------------
-- Moves a perslidwerkplek (bezetting) to another ruimte/werkplek. The old werkplek remains
-- pwerkplekkey is optional and acts like a preferred werkplek and will be used
@@ -622,69 +585,63 @@ AS
-------------------------------------
PROCEDURE prj_move_perslidwerkplek (pperslidwerkplekkey IN NUMBER, pruimtekey IN NUMBER, pwerkplekkey IN NUMBER)
AS
oldruimtekey prj_werkplek.prj_ruimte_key%TYPE;
oldwerkplekkey prj_werkplek.prj_werkplek_key%TYPE;
currentbezetting prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
reedsbezet prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
scenariokey prj_ruimte.prj_scenario_key%TYPE;
werkplekkey prj_werkplek.prj_werkplek_key%TYPE;
oldruimtekey prj_werkplek.prj_ruimte_key%TYPE;
oldwerkplekkey prj_werkplek.prj_werkplek_key%TYPE;
currentbezetting prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
reedsbezet prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
scenariokey prj_ruimte.prj_scenario_key%TYPE;
werkplekkey prj_werkplek.prj_werkplek_key%TYPE;
BEGIN
-- Wat is eigenlijk de ruimte/werkplek van herkomst en de actuele bezetting van de te verplaatsen werkplek?
SELECT wx.prj_ruimte_key, pwx.prj_perslidwerkplek_bezetting, wx.prj_werkplek_key
INTO oldruimtekey, currentbezetting, oldwerkplekkey
INTO oldruimtekey,currentbezetting,oldwerkplekkey
FROM prj_werkplek wx, prj_perslidwerkplek pwx
WHERE wx.prj_werkplek_key = pwx.prj_werkplek_key AND pwx.prj_perslidwerkplek_key = pperslidwerkplekkey;
--DBMS_OUTPUT.put_line ('_VAR(oldruimtekey):' || TO_CHAR (oldruimtekey));
--DBMS_OUTPUT.put_line ('_VAR(currentbezetting):' || TO_CHAR (currentbezetting));
--DBMS_OUTPUT.put_line ('_VAR(oldruimtekey):' || TO_CHAR (oldruimtekey));
--DBMS_OUTPUT.put_line ('_VAR(currentbezetting):' || TO_CHAR (currentbezetting));
IF pwerkplekkey IS NOT NULL AND pwerkplekkey = oldwerkplekkey
THEN
prj_log_add ('Werkplekbezetting niet verplaatst (zelfde _VAR(werkplekkey)=' || TO_CHAR (oldwerkplekkey) || ')',
prj_log_add ('Werkplekbezetting niet verplaatst (zelfde _VAR(werkplekkey)=' || TO_CHAR (oldwerkplekkey) || ')',
'MOVE',
scenariokey
);
RETURN;
END IF;
IF pwerkplekkey IS NOT NULL
THEN
werkplekkey := pwerkplekkey;
werkplekkey := pwerkplekkey;
ELSE
-- Is de bestemmingsruimte een andere dan de huidige?
IF pruimtekey = oldruimtekey
THEN
prj_log_add ('Werkplekbezetting niet verplaatst (zelfde ruimtekey=' || TO_CHAR (oldruimtekey) || ')',
prj_log_add ('Werkplekbezetting niet verplaatst (zelfde ruimtekey=' || TO_CHAR (oldruimtekey) || ')',
'MOVE',
scenariokey
);
RETURN;
END IF;
werkplekkey := find_or_create_free_werkplek (pruimtekey, currentbezetting);
werkplekkey := find_or_create_free_werkplek (pruimtekey, currentbezetting);
END IF;
-- Er is nu een werkplekkey bepaald.
UPDATE prj_perslidwerkplek
SET prj_werkplek_key = werkplekkey
WHERE prj_perslidwerkplek_key = pperslidwerkplekkey AND prj_werkplek_key <> werkplekkey;
-- niet onnodig moven (dubbelcheck)
COMMIT;
END;
-------------------------------------
-- Moves a perslid to a ruimte/werkplek. There was no previous
-- pwerkplekkey is optional and acts like a preferred werkplek and will be used if it fits.
-------------------------------------
PROCEDURE prj_move_perslid (pperslidkey IN NUMBER, pruimtekey IN NUMBER, pwerkplekkey IN NUMBER)
AS
reedsbezet prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
doelbezetting prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
werkplekkey prj_werkplek.prj_werkplek_key%TYPE;
werkpleknr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkplekomschrijving prj_werkplek.prj_werkplek_omschrijving%TYPE;
scenariokey prj_ruimte.prj_scenario_key%TYPE;
oudepwpkey prj_perslidwerkplek.prj_perslidwerkplek_key%TYPE;
reedsbezet prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
doelbezetting prj_perslidwerkplek.prj_perslidwerkplek_bezetting%TYPE;
werkplekkey prj_werkplek.prj_werkplek_key%TYPE;
werkpleknr prj_werkplek.prj_werkplek_volgnr%TYPE;
werkplekomschrijving prj_werkplek.prj_werkplek_omschrijving%TYPE;
scenariokey prj_ruimte.prj_scenario_key%TYPE;
oudepwpkey prj_perslidwerkplek.prj_perslidwerkplek_key%TYPE;
BEGIN
-- Wat is de te gebruiken bezetting van deze persoon (100 minus reeds op andere plekken aanwezig)?
-- TODO: dienstverband verwerken
@@ -696,14 +653,12 @@ AS
--AND pw.prj_ruimte_key = pruimtekey
AND pwx.prj_werkplek_key = pw.prj_werkplek_key
AND prj_perslidwerkplek_verwijder IS NULL;
IF pwerkplekkey IS NOT NULL
THEN
werkplekkey := pwerkplekkey;
werkplekkey := pwerkplekkey;
ELSE
werkplekkey := find_or_create_free_werkplek (pruimtekey, doelbezetting);
werkplekkey := find_or_create_free_werkplek (pruimtekey, doelbezetting);
END IF;
-- Is er nog een tijdens *dit* scenario vervallen werkplekbezettingsrecord?
-- Zo ja, dan willen we deze gebruiken om de binding tussen Van en Naar
-- zo goed mogelijk te behouden. Alleen relevant als het om een oorspronkelijk
@@ -719,7 +674,6 @@ AS
AND pwx.prs_perslid_key = pperslidkey
AND pwx.prs_perslidwerkplek_key IS NOT NULL
AND pwx.prj_perslidwerkplek_verwijder IS NOT NULL;
UPDATE prj_perslidwerkplek
SET prj_perslidwerkplek_verwijder = NULL,
prj_perslidwerkplek_bezetting = doelbezetting,
@@ -728,7 +682,7 @@ AS
EXCEPTION
WHEN NO_DATA_FOUND
THEN
--DBMS_OUTPUT.put_line ('_VAR(werkplekkey):' || TO_CHAR (werkplekkey));
--DBMS_OUTPUT.put_line ('_VAR(werkplekkey):' || TO_CHAR (werkplekkey));
-- Er is nu een werkplekkey bepaald.
INSERT INTO prj_perslidwerkplek
(prj_werkplek_key, prs_perslid_key, prj_perslidwerkplek_bezetting
@@ -736,16 +690,13 @@ AS
VALUES (werkplekkey, pperslidkey, doelbezetting
);
END;
COMMIT;
END;
----------------------------------------------
-- SCENARIO COMMIT PROCEDURES
----------------------------------------------
PROCEDURE prj_commit_additions (pscenariokey IN NUMBER)
IS
AS
CURSOR new_ruimte (sk IN NUMBER)
IS
SELECT alg_verdieping_key, prj_ruimte_nr, prj_ruimte_omschrijving,
@@ -756,7 +707,6 @@ AS
WHERE rx.prj_ruimte_verwijder IS NULL
AND rx.alg_ruimte_key IS NULL
AND rx.prj_scenario_key = sk;
CURSOR new_werkplek (sk IN NUMBER)
IS
SELECT prj_werkplek_volgnr, prj_werkplek_omschrijving,
@@ -767,7 +717,6 @@ AS
AND wx.prs_werkplek_key IS NULL
AND rx.prj_ruimte_key = wx.prj_ruimte_key
AND rx.prj_scenario_key = sk;
CURSOR new_perslidwerkplek (sk IN NUMBER)
IS
SELECT prs_perslid_key, prs_afdeling_key, prs_werkplek_key,
@@ -778,7 +727,6 @@ AS
AND wx.prj_werkplek_key = pwx.prj_werkplek_key
AND rx.prj_ruimte_key = wx.prj_ruimte_key
AND rx.prj_scenario_key = sk;
CURSOR new_deel (sk IN NUMBER)
IS
SELECT dx.prj_deel_key
@@ -797,29 +745,26 @@ AS
AND dx.prj_werkplek_key IS NULL
AND rx.prj_ruimte_key = wx.prj_ruimte_key
AND rx.prj_scenario_key = sk;
aantal_r_toegevoegd NUMBER;
aantal_w_toegevoegd NUMBER;
aantal_pw_toegevoegd NUMBER;
aantal_d_toegevoegd NUMBER;
ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE;
werkplek_nr prs_werkplek.prs_werkplek_volgnr%TYPE;
deel_nr ins_deel.ins_deel_omschrijving%TYPE;
aantal_r_toegevoegd NUMBER;
aantal_w_toegevoegd NUMBER;
aantal_pw_toegevoegd NUMBER;
aantal_d_toegevoegd NUMBER;
ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE;
werkplek_nr prs_werkplek.prs_werkplek_volgnr%TYPE;
deel_nr ins_deel.ins_deel_omschrijving%TYPE;
BEGIN
-- Nieuwe ruimtes toevoegen
aantal_r_toegevoegd := 0;
aantal_r_toegevoegd := 0;
--
-- RUIMTES
--
FOR v_ruimte IN new_ruimte (pscenariokey)
LOOP
loop
ruimte_nr :=
forceuniqueness ('ALG_RUIMTE',
v_ruimte.alg_verdieping_key,
v_ruimte.prj_ruimte_nr
);
INSERT INTO alg_ruimte r
(alg_verdieping_key, alg_ruimte_nr,
alg_ruimte_omschrijving,
@@ -835,9 +780,7 @@ AS
v_ruimte.prj_ruimte_inhoud,
v_ruimte.prj_ruimte_opmerking
);
aantal_r_toegevoegd := aantal_r_toegevoegd + 1;
aantal_r_toegevoegd := aantal_r_toegevoegd + 1;
-- Registreer de zojuist verworven key; deze is nodig voor de volgende stappen
UPDATE prj_ruimte rx
SET alg_ruimte_key =
@@ -846,23 +789,20 @@ AS
WHERE r.alg_verdieping_key = v_ruimte.alg_verdieping_key
AND r.alg_ruimte_nr = ruimte_nr)
WHERE prj_ruimte_key = v_ruimte.prj_ruimte_key;
END LOOP;
end loop;
--
-- WERKPLEKKEN
--
aantal_w_toegevoegd := 0;
aantal_w_toegevoegd := 0;
FOR v_werkplek IN new_werkplek (pscenariokey)
LOOP
loop
werkplek_nr :=
forceuniqueness ('PRS_WERKPLEK',
v_werkplek.alg_ruimte_key,
TO_CHAR (v_werkplek.prj_werkplek_volgnr)
);
-- Note: de omschrijving is meestal ruimtenr+volgnr. Bij nieuwe of verplaatsing is het wenselijk deza aan te passen?
--werkpleknr := to_number(substr(Omschrijving,instr(Omschrijving,'-',1)+1));
--werkpleknr := TO_NUMBER(SUBSTR(Omschrijving,instr(Omschrijving,'-',1)+1));
INSERT INTO prs_werkplek w
(prs_werkplek_volgnr, prs_werkplek_omschrijving,
prs_werkplek_vastopp,
@@ -872,9 +812,7 @@ AS
v_werkplek.prj_werkplek_vastopp,
v_werkplek.prj_werkplek_opp, v_werkplek.alg_ruimte_key
);
aantal_w_toegevoegd := aantal_w_toegevoegd + 1;
aantal_w_toegevoegd := aantal_w_toegevoegd + 1;
-- Registreer de zojuist verworven keys; deze zijn nodig voor de volgende stappen
UPDATE prj_werkplek wx
SET prs_werkplek_key =
@@ -883,15 +821,13 @@ AS
WHERE w.prs_werkplek_volgnr = werkplek_nr
AND w.prs_alg_ruimte_key = v_werkplek.alg_ruimte_key)
WHERE prj_werkplek_key = v_werkplek.prj_werkplek_key;
END LOOP;
end loop;
--
-- WERKPLEKBEZETTINGEN (anoniem)
--
aantal_pw_toegevoegd := 0;
aantal_pw_toegevoegd := 0;
FOR v_perslidwerkplek IN new_perslidwerkplek (pscenariokey)
LOOP
loop
INSERT INTO prs_perslidwerkplek pw
(prs_perslid_key,
prs_afdeling_key,
@@ -903,18 +839,16 @@ AS
v_perslidwerkplek.prs_werkplek_key,
v_perslidwerkplek.prj_perslidwerkplek_bezetting
);
-- Bijwerken van de nieuwe keys is niet nodig..
aantal_pw_toegevoegd := aantal_pw_toegevoegd + 1;
END LOOP;
aantal_pw_toegevoegd := aantal_pw_toegevoegd + 1;
end loop;
--
-- OBJECTEN
--
aantal_d_toegevoegd := 0;
aantal_d_toegevoegd := 0;
-- FOR v_deel IN new_deel (pscenariokey)
-- LOOP
-- deel_nr := forceuniqueness ('INS_DEEL', v_deel.ins_alg_locatie_key, v_deel.ins_deel_omschrijving);
-- deel_nr := forceuniqueness ('INS_DEEL', v_deel.ins_alg_locatie_key, v_deel.ins_deel_omschrijving);
--
-- INSERT INTO ins_deel
-- (ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type,
@@ -925,30 +859,28 @@ AS
-- v_deel.ins_alg_locatie_key, v_deel.ins_discipline_key, omschrijving, v_deel.ins_deel_parent_key,
-- v_deel.ins_deel_oppervlak, v_deel.ins_deel_omtrek
-- );
-- -- Bijwerken van de nieuwe keys is niet nodig..
-- aantal_d_toegevoegd := aantal_d_toegevoegd + 1;
-- END LOOP;
prj_log_add ('Nieuwe ruimtes : ' || TO_CHAR (aantal_r_toegevoegd),
-- aantal_d_toegevoegd := aantal_d_toegevoegd + 1;
-- end loop;
prj_log_add ('Nieuwe ruimtes : ' || TO_CHAR (aantal_r_toegevoegd),
'123',
pscenariokey
);
prj_log_add ('Nieuwe werkplekken: ' || TO_CHAR (aantal_w_toegevoegd),
prj_log_add ('Nieuwe werkplekken: ' || TO_CHAR (aantal_w_toegevoegd),
'123',
pscenariokey
);
prj_log_add ('Nieuwe objecten: ' || TO_CHAR (aantal_d_toegevoegd),
prj_log_add ('Nieuwe objecten: ' || TO_CHAR (aantal_d_toegevoegd),
'123',
pscenariokey
);
prj_log_add ('Nieuwe bezettingen: ' || TO_CHAR (aantal_pw_toegevoegd),
prj_log_add ('Nieuwe bezettingen: ' || TO_CHAR (aantal_pw_toegevoegd),
'123',
pscenariokey
);
END prj_commit_additions;
PROCEDURE prj_commit_changes (pscenariokey IN NUMBER)
IS
AS
CURSOR ruimte_updates (sk IN NUMBER)
IS
SELECT prj_ruimte_nr, prj_ruimte_omschrijving,
@@ -959,7 +891,6 @@ AS
WHERE rx.prj_ruimte_verwijder IS NULL
AND rx.alg_ruimte_key IS NOT NULL
AND rx.prj_scenario_key = sk;
CURSOR werkplek_updates (sk IN NUMBER)
IS
SELECT prj_werkplek_volgnr, prj_werkplek_omschrijving,
@@ -970,7 +901,6 @@ AS
AND wp.prj_werkplek_verwijder IS NULL
AND wp.prs_werkplek_key IS NOT NULL
AND rx.prj_scenario_key = sk;
CURSOR perslidwerkplek_updates (sk IN NUMBER)
IS
SELECT prs_perslid_key, prs_afdeling_key,
@@ -986,7 +916,7 @@ AS
BEGIN
-- Bestaande ruimtes aanpassen
FOR cr IN ruimte_updates (pscenariokey)
LOOP
loop
UPDATE alg_ruimte r
SET alg_ruimte_nr = cr.prj_ruimte_nr,
alg_ruimte_omschrijving = cr.prj_ruimte_omschrijving,
@@ -997,11 +927,10 @@ AS
alg_ruimte_opmerking = cr.prj_ruimte_opmerking
WHERE r.alg_ruimte_verwijder IS NULL
AND r.alg_ruimte_key = cr.alg_ruimte_key;
END LOOP;
end loop;
-- Bestaande werkplekken aanpassen
FOR cr IN werkplek_updates (pscenariokey)
LOOP
loop
UPDATE prs_werkplek r
SET prs_alg_ruimte_key = cr.alg_ruimte_key,
prs_werkplek_volgnr = cr.prj_werkplek_volgnr,
@@ -1010,24 +939,22 @@ AS
prs_werkplek_opp = cr.prj_werkplek_opp
WHERE r.prs_werkplek_verwijder IS NULL
AND r.prs_werkplek_key = cr.prs_werkplek_key;
END LOOP;
end loop;
-- Bestaande perslidwerkplekken aanpassen
FOR cr IN perslidwerkplek_updates (pscenariokey)
LOOP
loop
UPDATE prs_perslidwerkplek r
SET prs_werkplek_key = cr.prs_werkplek_key,
prs_perslid_key = cr.prs_perslid_key,
-- prs_afdeling_key = cr.prs_afdeling_key,
prs_afdeling_key = cr.prs_afdeling_key,
prs_perslidwerkplek_bezetting = cr.prj_perslidwerkplek_bezetting
WHERE r.prs_perslidwerkplek_verwijder IS NULL
AND r.prs_perslidwerkplek_key = cr.prs_perslidwerkplek_key;
END LOOP;
end loop;
END;
END prj_commit_changes;
PROCEDURE prj_commit_deletions (pscenariokey IN NUMBER)
IS
AS
BEGIN
-- Vervallen ruimtes laten vervallen
UPDATE alg_ruimte r
@@ -1039,7 +966,6 @@ AS
AND rx.alg_ruimte_key IS NOT NULL
AND rx.prj_scenario_key = pscenariokey)
WHERE r.alg_ruimte_verwijder IS NULL;
-- Vervallen werkplekken laten vervallen
UPDATE prs_werkplek p
SET prs_werkplek_verwijder =
@@ -1051,7 +977,6 @@ AS
AND pw.prs_werkplek_key IS NOT NULL
AND rx.prj_scenario_key = pscenariokey)
WHERE p.prs_werkplek_verwijder IS NULL;
-- Vervallen perslidwerkplekken laten vervallen
UPDATE prs_perslidwerkplek p
SET prs_perslidwerkplek_verwijder =
@@ -1065,17 +990,15 @@ AS
AND rx.prj_scenario_key = pscenariokey)
WHERE p.prs_perslidwerkplek_verwijder IS NULL;
END prj_commit_deletions;
PROCEDURE prj_commit_cleanup (pscenariokey IN NUMBER)
IS
requestkey prj_scenario.mld_melding_key%TYPE;
AS
requestkey prj_scenario.mld_melding_key%TYPE;
BEGIN
-- Voor welke aanvraag was dit scenario een oplossing?
SELECT mld_melding_key
INTO requestkey
FROM prj_scenario
WHERE prj_scenario_key = pscenariokey;
-- IF requestkey IS NOT NULL
-- THEN
-- DELETE FROM prj_scenario
@@ -1085,10 +1008,9 @@ AS
--
-- END IF;
END prj_commit_cleanup;
PROCEDURE prj_commit_scenario (pscenariokey IN NUMBER)
IS
dummy VARCHAR2 (1);
AS
dummy VARCHAR2 (1);
BEGIN
checkscenario (pscenariokey);
prj_commit_additions (pscenariokey);