diff --git a/PRJ/PRJ_PAC.SRC b/PRJ/PRJ_PAC.SRC index f46699b4..77a11690 100644 --- a/PRJ/PRJ_PAC.SRC +++ b/PRJ/PRJ_PAC.SRC @@ -1,8 +1,8 @@ #ifdef PRJ /* PRJ_PAC.SRC * - * $Revision: 51 $ - * $Modtime: 13-02-08 9:48 $ + * $Revision: 52 $ + * $Modtime: 14-02-08 13:58 $ */ /* CODE COMMENTS, CONSIDERATIONS @@ -38,8 +38,10 @@ AS PROCEDURE prj_move_perslidwerkplek (pperslidwerkplekkey IN NUMBER, pruimtekey IN NUMBER, pwerkplekkey IN NUMBER); PROCEDURE prj_move_perslid (pperslidkey IN NUMBER, pruimtekey IN NUMBER, pwerkplekkey IN NUMBER); PROCEDURE prj_move_perslid2 (pperslidkey IN NUMBER, pruimtekey IN NUMBER); - FUNCTION forceuniqueness (element_type IN VARCHAR2 , parent_key IN NUMBER, element_omschrijving IN VARCHAR2 ) + FUNCTION forceuniqueness (element_type IN VARCHAR2 , parent_key IN NUMBER, element_omschrijving IN VARCHAR2, srtdeelkey IN NUMBER ) RETURN VARCHAR2 ; + FUNCTION find_or_create_free_werkplek (pruimtekey IN NUMBER,bezetting IN NUMBER ) + RETURN NUMBER ; END prj; / @@ -65,11 +67,11 @@ AS ); RETURN; END checkscenario; - FUNCTION forceuniqueness ( element_type IN VARCHAR2, parent_key IN NUMBER, - element_omschrijving IN VARCHAR2 + element_omschrijving IN VARCHAR2, + srtdeelkey IN NUMBER ) RETURN VARCHAR2 IS @@ -91,12 +93,12 @@ 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), + NULL ); EXCEPTION WHEN NO_DATA_FOUND @@ -104,7 +106,28 @@ AS omschrijving := element_omschrijving; END; END IF; - + -- objecten + IF element_type = 'INS_DEEL' + THEN + -- Zoek op de locatie of het huidige objectnummer al voor komt. + BEGIN + SELECT ins_deel_omschrijving + INTO prefix + FROM ins_deel + WHERE ins_alg_locatie_key = parent_key + AND ins_deel_upper = upper(element_omschrijving) + AND ins_srtdeel_key = srtdeelkey + AND ins_deel_verwijder IS NULL; + -- Gevonden, dus niet uniek. Probeer het met een sterretje ervoor, passen ze dat later maar zelf aan + SELECT FAC_F_FAC_GET_DESCRIPTION('LPN_INS_DEEL',parent_key , ins_srtdeel_code_upper, srtdeelkey) + INTO omschrijving + FROM ins_srtdeel WHERE ins_srtdeel_key=srtdeelkey; + EXCEPTION + WHEN NO_DATA_FOUND + THEN + 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,20 +150,20 @@ 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 -- Ik kan met 3 cijfers niet hoger, begin opnieuw onderaan (to prevent infinite recursion) omschrijving := - forceuniqueness (element_type, parent_key, '000'); + forceuniqueness (element_type, parent_key, '000', NULL); ELSE omschrijving := forceuniqueness (element_type, parent_key, TO_CHAR ( TO_NUMBER (element_omschrijving) + 1 - ) + ), + NULL ); END IF; EXCEPTION @@ -149,7 +172,6 @@ AS omschrijving := element_omschrijving; END; END IF; - IF element_type = 'PRJ_WERKPLEK' THEN -- Zoek in de geselecteerde ruimte of het huidige werkpleknummer al voor komt. @@ -160,20 +182,20 @@ 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 -- Ik kan met 3 cijfers niet hoger, begin opnieuw onderaan (to prevent infinite recursion) omschrijving := - forceuniqueness (element_type, parent_key, '000'); + forceuniqueness (element_type, parent_key, '000', NULL); ELSE omschrijving := forceuniqueness (element_type, parent_key, TO_CHAR ( TO_NUMBER (element_omschrijving) + 1 - ) + ), + NULL ); END IF; EXCEPTION @@ -182,10 +204,8 @@ AS omschrijving := element_omschrijving; END; END IF; - RETURN omschrijving; END; - FUNCTION defaultwpomschrijving (pruimtekey IN NUMBER, pwerkpleknr IN NUMBER) RETURN VARCHAR2 IS @@ -200,10 +220,8 @@ AS INTO omschrijving FROM prj_ruimte WHERE prj_ruimte_key = pruimtekey; - RETURN omschrijving; END; - ---------------------------------------------- -- SCENARIO MANAGEMENT PROCEDURES ---------------------------------------------- @@ -215,7 +233,6 @@ AS dummy VARCHAR2 (1); BEGIN checkscenario (pscenariokey); - BEGIN SELECT 'x' INTO dummy @@ -231,7 +248,6 @@ AS ); RETURN; END; - BEGIN SELECT 'x' INTO dummy @@ -248,7 +264,6 @@ AS NULL; RETURN; END; - -- ** Parameters are proven valid -- ?? Check of er al een kopie bestaat nodig ?? -- Kopieer de ruimtes @@ -264,22 +279,24 @@ 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_opp, prj_ruimte_key) + prj_werkplek_opp, prj_ruimte_key, + prj_werkplek_dwgx, prj_werkplek_dwgy, + prj_werkplek_dwgrotatie, prj_werkplek_dwgschaal) SELECT NULL, prs_werkplek_key, prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_werkplek_vastopp, - prs_werkplek_opp, prj_ruimte_key + prs_werkplek_opp, prj_ruimte_key, + prs_werkplek_dwgx, prs_werkplek_dwgy, + prs_werkplek_dwgrotatie, prs_werkplek_dwgschaal 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 w.prs_werkplek_virtueel = 0 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, @@ -304,13 +321,16 @@ 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, - prj_deel_omschrijving, ins_srtdeel_key) + prj_deel_omschrijving, ins_srtdeel_key, + prj_deel_dwgx, prj_deel_dwgy, + prj_deel_dwgrotatie, prj_deel_dwgschaal) SELECT NULL, ins_deel_key, rx.prj_ruimte_key, ins_deel_omschrijving, - d.ins_srtdeel_key + d.ins_srtdeel_key, + ins_deel_dwgx, ins_deel_dwgy, + ins_deel_dwgrotatie, ins_deel_dwgschaal FROM ins_deel d, alg_v_aanwezigruimte r, prj_ruimte rx WHERE d.ins_alg_ruimte_type = 'R' AND d.ins_alg_ruimte_key = r.alg_ruimte_key @@ -319,10 +339,13 @@ 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) - SELECT NULL, ins_deel_key, rx.prj_ruimte_key, wx.prj_werkplek_key, ins_deel_omschrijving, d.ins_srtdeel_key + (prj_deel_key, ins_deel_key, prj_ruimte_key, prj_werkplek_key, prj_deel_omschrijving, ins_srtdeel_key, + prj_deel_dwgx, prj_deel_dwgy, + prj_deel_dwgrotatie, prj_deel_dwgschaal) + SELECT NULL, ins_deel_key, rx.prj_ruimte_key, wx.prj_werkplek_key, ins_deel_omschrijving, d.ins_srtdeel_key, + ins_deel_dwgx, ins_deel_dwgy, + ins_deel_dwgrotatie, ins_deel_dwgschaal FROM ins_deel d, alg_v_aanwezigruimte r, prs_v_aanwezigwerkplek w, prj_ruimte rx, prj_werkplek wx WHERE d.ins_alg_ruimte_type = 'W' AND d.ins_alg_ruimte_key = w.prs_werkplek_key @@ -332,11 +355,10 @@ AS AND rx.prj_scenario_key = pscenariokey AND rx.alg_ruimte_key = r.alg_ruimte_key AND wx.prj_ruimte_key = rx.prj_ruimte_key - AND r.alg_verdieping_key = pverdiepingkey; - + AND r.alg_verdieping_key = pverdiepingkey + AND wx.prs_werkplek_key = w.prs_werkplek_key; COMMIT; END prj_initiate_scenario; - PROCEDURE prj_copy_scenario ( pscenariokey_from IN NUMBER, pscenariokey_to IN NUMBER @@ -346,7 +368,6 @@ AS BEGIN checkscenario (pscenariokey_from); checkscenario (pscenariokey_to); - BEGIN SELECT 'x' INTO dummy @@ -362,10 +383,8 @@ AS NULL; RETURN; END; - raise_application_error (-20002, 'prj package: copy not yet supported'); RETURN; - -- ** Parameters are proven valid -- Kopieer de ruimtes INSERT INTO prj_ruimte @@ -379,7 +398,6 @@ 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 @@ -394,7 +412,6 @@ AS 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, @@ -407,20 +424,21 @@ AS 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, - prj_deel_omschrijving, ins_srtdeel_key) - SELECT NULL, dx.ins_deel_key, dx.prj_ruimte_key, - dx.prj_deel_omschrijving, dx.ins_srtdeel_key + (prj_deel_key, ins_deel_key, prj_ruimte_key, prj_werkplek_key, + prj_deel_omschrijving, ins_srtdeel_key, + prj_deel_dwgx, prj_deel_dwgy, + prj_deel_dwgrotatie, prj_deel_dwgschaal) + SELECT NULL, dx.ins_deel_key, dx.prj_ruimte_key, prj_werkplek_key, + dx.prj_deel_omschrijving, dx.ins_srtdeel_key, + prj_deel_dwgx, prj_deel_dwgy, + prj_deel_dwgrotatie, prj_deel_dwgschaal 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 @@ -431,7 +449,6 @@ AS -- 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. PROCEDURE prj_cancel_scenario ( @@ -442,12 +459,10 @@ AS dummy VARCHAR2 (1); BEGIN checkscenario (pscenariokey); - 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; @@ -467,7 +482,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 @@ -479,7 +493,6 @@ AS AND rx.alg_verdieping_key = pverdiepingkey; END IF; END prj_cancel_scenario; - ---------------------------------------------- -- SCENARIO TRANSACTION PROCEDURES ---------------------------------------------- @@ -497,28 +510,25 @@ AS INTO currentnr FROM prj_werkplek WHERE prj_werkplek_key = pwerkplekkey; - werkpleknr := TO_NUMBER (forceuniqueness ('PRJ_WERKPLEK', pruimtekey, - TO_CHAR (currentnr) + TO_CHAR (currentnr), + NULL ) ); 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 sufficiently free werkplek in ruimte pruimtekey -- If necessary create a new one @@ -559,12 +569,12 @@ AS werkpleknr := TO_NUMBER (forceuniqueness ('PRJ_WERKPLEK', pruimtekey, - '001' + TO_CHAR (1), + NULL ) ); werkplekomschrijving := defaultwpomschrijving (pruimtekey, werkpleknr); - INSERT INTO prj_werkplek (prj_werkplek_key, prs_werkplek_key, prj_werkplek_volgnr, prj_werkplek_omschrijving, @@ -574,7 +584,6 @@ AS werkpleknr, werkplekomschrijving, NULL, pruimtekey ); - SELECT prj_werkplek_key INTO werkplekkey FROM prj_werkplek @@ -583,10 +592,8 @@ AS AND prj_werkplek_verwijder IS NULL; --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 @@ -613,14 +620,12 @@ AS 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)); IF pwerkplekkey IS NOT NULL AND pwerkplekkey = oldwerkplekkey THEN RETURN; END IF; - IF pwerkplekkey IS NOT NULL THEN werkplekkey := pwerkplekkey; @@ -630,21 +635,17 @@ AS THEN RETURN; END IF; - 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 -- Gebruikt als prs_werkplek_implicit==1 @@ -659,7 +660,6 @@ AS oudepwpkey prj_perslidwerkplek.prj_perslidwerkplek_key%TYPE; BEGIN werkplekkey := find_or_create_free_werkplek (pruimtekey, 101); -- Door 101 krijgen we altijd een nieuwe - -- 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 @@ -678,7 +678,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_werkplek_key = werkplekkey @@ -692,10 +691,8 @@ AS (prj_werkplek_key, prs_perslid_key) VALUES (werkplekkey, pperslidkey); END; - COMMIT; END; - ------------------------------------- -- 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 @@ -726,7 +723,6 @@ 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; @@ -734,7 +730,6 @@ AS 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 @@ -753,7 +748,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, @@ -772,10 +766,8 @@ AS doelbezetting ); END; - COMMIT; END; - ---------------------------------------------- -- SCENARIO COMMIT PROCEDURES ---------------------------------------------- @@ -791,18 +783,17 @@ 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, prj_werkplek_vastopp, prj_werkplek_opp, rx.alg_ruimte_key, - prj_werkplek_key + prj_werkplek_key, prj_werkplek_dwgx,prj_werkplek_dwgy, + prj_werkplek_dwgrotatie,prj_werkplek_dwgschaal FROM prj_werkplek wx, prj_ruimte rx WHERE wx.prj_werkplek_verwijder IS NULL 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, @@ -813,26 +804,40 @@ 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 - FROM prj_deel dx, prj_werkplek wx, prj_ruimte rx + SELECT dx.prj_deel_key, alg_locatie_key, prj_deel_omschrijving, + ins_discipline_key, dx.ins_srtdeel_key, + 'R' ins_alg_ruimte_type, alg_ruimte_key ins_alg_ruimte_key, + prj_deel_dwgx, prj_deel_dwgy, prj_deel_dwgschaal, prj_deel_dwgrotatie + FROM prj_deel dx, prj_ruimte rx, alg_verdieping v, alg_gebouw g, + ins_srtdeel isd, ins_srtgroep isg + WHERE dx.prj_deel_verwijder IS NULL + AND dx.ins_deel_key IS NULL + AND dx.prj_werkplek_key IS NULL + AND dx.prj_ruimte_key = rx.prj_ruimte_key + AND rx.alg_verdieping_key = v.alg_verdieping_key + AND v.alg_gebouw_key = g.alg_gebouw_key + AND dx.ins_srtdeel_key = isd.ins_srtdeel_key + AND isd.ins_srtgroep_key = isg.ins_srtgroep_key + AND rx.prj_scenario_key = sk + UNION ALL + SELECT dx.prj_deel_key, alg_locatie_key, prj_deel_omschrijving, + ins_discipline_key, dx.ins_srtdeel_key, + 'W' ins_alg_ruimte_type, prs_werkplek_key ins_alg_ruimte_key, + prj_deel_dwgx, prj_deel_dwgy, prj_deel_dwgschaal, prj_deel_dwgrotatie + FROM prj_deel dx, prj_werkplek wx, prj_ruimte rx, alg_verdieping v, alg_gebouw g, + ins_srtdeel isd, ins_srtgroep isg WHERE dx.prj_deel_verwijder IS NULL AND dx.ins_deel_key IS NULL AND wx.prj_werkplek_key = dx.prj_werkplek_key AND dx.prj_werkplek_key IS NOT NULL AND rx.prj_ruimte_key = wx.prj_ruimte_key - AND rx.prj_scenario_key = sk - UNION ALL - SELECT dx.prj_deel_key - FROM prj_deel dx, prj_werkplek wx, prj_ruimte rx - WHERE dx.prj_deel_verwijder IS NULL - AND dx.ins_deel_key IS NULL - AND dx.prj_werkplek_key IS NULL - AND rx.prj_ruimte_key = wx.prj_ruimte_key + AND rx.alg_verdieping_key = v.alg_verdieping_key + AND v.alg_gebouw_key = g.alg_gebouw_key + AND dx.ins_srtdeel_key = isd.ins_srtdeel_key + AND isd.ins_srtgroep_key = isg.ins_srtgroep_key AND rx.prj_scenario_key = sk; - aantal_r_toegevoegd NUMBER; aantal_w_toegevoegd NUMBER; aantal_pw_toegevoegd NUMBER; @@ -843,7 +848,6 @@ AS BEGIN -- Nieuwe ruimtes toevoegen aantal_r_toegevoegd := 0; - -- -- RUIMTES -- @@ -852,9 +856,9 @@ AS ruimte_nr := forceuniqueness ('ALG_RUIMTE', v_ruimte.alg_verdieping_key, - v_ruimte.prj_ruimte_nr + v_ruimte.prj_ruimte_nr, + NULL ); - INSERT INTO alg_ruimte r (alg_verdieping_key, alg_ruimte_nr, alg_ruimte_omschrijving, @@ -870,9 +874,7 @@ AS v_ruimte.prj_ruimte_inhoud, v_ruimte.prj_ruimte_opmerking ); - 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 = @@ -882,34 +884,34 @@ AS AND r.alg_ruimte_nr = ruimte_nr) WHERE prj_ruimte_key = v_ruimte.prj_ruimte_key; END LOOP; - -- -- WERKPLEKKEN -- aantal_w_toegevoegd := 0; - FOR v_werkplek IN new_werkplek (pscenariokey) LOOP werkplek_nr := forceuniqueness ('PRS_WERKPLEK', v_werkplek.alg_ruimte_key, - TO_CHAR (v_werkplek.prj_werkplek_volgnr) + TO_CHAR (v_werkplek.prj_werkplek_volgnr), + NULL ); - -- 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)); INSERT INTO prs_werkplek w (prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_werkplek_vastopp, - prs_werkplek_opp, prs_alg_ruimte_key + prs_werkplek_opp, prs_alg_ruimte_key, + prs_werkplek_dwgx, prs_werkplek_dwgy, + prs_werkplek_dwgrotatie, prs_werkplek_dwgschaal ) VALUES (werkplek_nr, v_werkplek.prj_werkplek_omschrijving, v_werkplek.prj_werkplek_vastopp, - v_werkplek.prj_werkplek_opp, v_werkplek.alg_ruimte_key + v_werkplek.prj_werkplek_opp, v_werkplek.alg_ruimte_key, + v_werkplek.prj_werkplek_dwgx, v_werkplek.prj_werkplek_dwgy, + v_werkplek.prj_werkplek_dwgrotatie, v_werkplek.prj_werkplek_dwgschaal ); - 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 = @@ -919,12 +921,10 @@ AS AND w.prs_alg_ruimte_key = v_werkplek.alg_ruimte_key) WHERE prj_werkplek_key = v_werkplek.prj_werkplek_key; END LOOP; - -- -- WERKPLEKBEZETTINGEN (anoniem) -- aantal_pw_toegevoegd := 0; - FOR v_perslidwerkplek IN new_perslidwerkplek (pscenariokey) LOOP INSERT INTO prs_perslidwerkplek pw @@ -938,33 +938,30 @@ 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; - -- -- OBJECTEN -- 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); --- --- INSERT INTO ins_deel --- (ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type, --- ins_alg_locatie_key, ins_discipline_key, ins_deel_omschrijving, ins_deel_parent_key, --- ins_deel_oppervlak, ins_deel_omtrek, ins_deel_getekend, ins_deel_verwijder --- ) --- VALUES (v_deel.ins_srtdeel_key, v_deel.prj_ruimte_key, v_deel.ins_alg_ruimte_type, --- 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; - END prj_commit_additions; + FOR v_deel IN new_deel (pscenariokey) + LOOP + deel_nr := forceuniqueness ('INS_DEEL', v_deel.alg_locatie_key, v_deel.prj_deel_omschrijving, v_deel.ins_srtdeel_key); + INSERT INTO ins_deel + (ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type, + ins_alg_locatie_key, ins_discipline_key, ins_deel_omschrijving, + ins_deel_dwgx, ins_deel_dwgy, ins_deel_dwgschaal, ins_deel_dwgrotatie + ) + VALUES (v_deel.ins_srtdeel_key, v_deel.ins_alg_ruimte_key, v_deel.ins_alg_ruimte_type, + v_deel.alg_locatie_key, v_deel.ins_discipline_key, deel_nr, + v_deel.prj_deel_dwgx, v_deel.prj_deel_dwgy, v_deel.prj_deel_dwgschaal, v_deel.prj_deel_dwgrotatie + ); + -- Bijwerken van de nieuwe keys is niet nodig.. + aantal_d_toegevoegd := aantal_d_toegevoegd + 1; + end loop; + END prj_commit_additions; PROCEDURE prj_commit_changes (pscenariokey IN NUMBER) AS CURSOR ruimte_updates (sk IN NUMBER) @@ -977,18 +974,43 @@ 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, prj_werkplek_vastopp, prj_werkplek_opp, prs_werkplek_key, - alg_ruimte_key + alg_ruimte_key,prj_werkplek_dwgx, prj_werkplek_dwgy, + prj_werkplek_dwgrotatie, prj_werkplek_dwgschaal FROM prj_werkplek wp, prj_ruimte rx WHERE wp.prj_ruimte_key = rx.prj_ruimte_key AND wp.prj_werkplek_verwijder IS NULL AND wp.prs_werkplek_key IS NOT NULL AND rx.prj_scenario_key = sk; - + -- Ruimte gebonden prj_deel + CURSOR RMdeel_updates (sk IN NUMBER) + IS + SELECT ins_deel_key, + alg_ruimte_key,prj_deel_dwgx, prj_deel_dwgy, + prj_deel_dwgrotatie, prj_deel_dwgschaal, + prj_deel_verwijder + FROM prj_deel wp, prj_ruimte rx + WHERE wp.prj_ruimte_key = rx.prj_ruimte_key + AND wp.prj_werkplek_key is null + --AND wp.prj_deel_verwijder IS NULL + AND wp.ins_deel_key IS NOT NULL + AND rx.prj_scenario_key = sk; + -- Werkplek gebonden prj_deel + CURSOR WPdeel_updates (sk IN NUMBER) + IS + SELECT ins_deel_key, + prs_werkplek_key,prj_deel_dwgx, prj_deel_dwgy, + prj_deel_dwgrotatie, prj_deel_dwgschaal, + prj_deel_verwijder + FROM prj_deel pd, prj_werkplek pw, prj_ruimte pr + WHERE pd.prj_werkplek_key = pw.prj_werkplek_key + AND pw.prj_ruimte_key = pr.prj_ruimte_key + --AND pd.prj_deel_verwijder IS NOT NULL + AND pd.ins_deel_key IS NOT NULL + AND pr.prj_scenario_key = sk; CURSOR perslidwerkplek_updates (sk IN NUMBER) IS SELECT prs_perslid_key, prs_afdeling_key, @@ -1016,7 +1038,32 @@ AS WHERE r.alg_ruimte_verwijder IS NULL AND r.alg_ruimte_key = cr.alg_ruimte_key; END LOOP; - + -- Bestaande ruimte delen aanpassen + FOR cr IN RMdeel_updates (pscenariokey) + LOOP + UPDATE ins_deel r + SET ins_alg_ruimte_key = cr.alg_ruimte_key, + ins_deel_dwgx = cr.prj_deel_dwgx, + ins_deel_dwgy = cr.prj_deel_dwgy, + ins_deel_dwgrotatie = cr.prj_deel_dwgrotatie, + ins_deel_dwgschaal = cr.prj_deel_dwgschaal, + ins_deel_verwijder = cr.prj_deel_verwijder + WHERE r.ins_deel_verwijder IS NULL + AND r.ins_deel_key = cr.ins_deel_key; + END LOOP; + -- Bestaande werkplek delen aanpassen + FOR cr IN WPdeel_updates (pscenariokey) + LOOP + UPDATE ins_deel r + SET ins_alg_ruimte_key = cr.prs_werkplek_key, + ins_deel_dwgx = cr.prj_deel_dwgx, + ins_deel_dwgy = cr.prj_deel_dwgy, + ins_deel_dwgrotatie = cr.prj_deel_dwgrotatie, + ins_deel_dwgschaal = cr.prj_deel_dwgschaal, + ins_deel_verwijder = cr.prj_deel_verwijder + WHERE r.ins_deel_verwijder IS NULL + AND r.ins_deel_key = cr.ins_deel_key; + END LOOP; -- Bestaande werkplekken aanpassen FOR cr IN werkplek_updates (pscenariokey) LOOP @@ -1025,11 +1072,14 @@ AS prs_werkplek_volgnr = cr.prj_werkplek_volgnr, prs_werkplek_omschrijving = cr.prj_werkplek_omschrijving, prs_werkplek_vastopp = cr.prj_werkplek_vastopp, - prs_werkplek_opp = cr.prj_werkplek_opp + prs_werkplek_opp = cr.prj_werkplek_opp, + prs_werkplek_dwgx = cr.prj_werkplek_dwgx, + prs_werkplek_dwgy = cr.prj_werkplek_dwgy, + prs_werkplek_dwgrotatie = cr.prj_werkplek_dwgrotatie, + prs_werkplek_dwgschaal = cr.prj_werkplek_dwgschaal WHERE r.prs_werkplek_verwijder IS NULL AND r.prs_werkplek_key = cr.prs_werkplek_key; END LOOP; - -- Bestaande perslidwerkplekken aanpassen FOR cr IN perslidwerkplek_updates (pscenariokey) LOOP @@ -1044,7 +1094,6 @@ AS END LOOP; END; END prj_commit_changes; - PROCEDURE prj_commit_deletions (pscenariokey IN NUMBER) AS BEGIN @@ -1058,7 +1107,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 = @@ -1070,7 +1118,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 = @@ -1087,7 +1134,6 @@ 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) AS requestkey prj_scenario.mld_melding_key%TYPE; @@ -1097,7 +1143,6 @@ AS INTO requestkey FROM prj_scenario WHERE prj_scenario_key = pscenariokey; - IF requestkey IS NOT NULL THEN DELETE FROM prj_scenario @@ -1107,7 +1152,6 @@ AS WHERE prj_scenario_key = pscenariokey; END IF; END prj_commit_cleanup; - PROCEDURE prj_commit_scenario (pscenariokey IN NUMBER) AS dummy VARCHAR2 (1);