diff --git a/RES/RES_PAC.SRC b/RES/RES_PAC.SRC index c45cb3bd..95426073 100644 --- a/RES/RES_PAC.SRC +++ b/RES/RES_PAC.SRC @@ -26,7 +26,7 @@ CREATE OR REPLACE PACKAGE res AS PROCEDURE follow_deel (prsv_ruimte_key IN NUMBER, oldvan IN DATE, oldtot IN DATE); PROCEDURE follow_afspraak (prsv_ruimte_key IN NUMBER, pres_copy_to_bez IN NUMBER); FUNCTION res_deel_in_scope (pres_deel_key IN NUMBER, pres_rsv_ruimte_key IN NUMBER) RETURN BOOLEAN; - FUNCTION res_artikel_in_scope (pres_artikel_key IN NUMBER, pres_rsv_ruimte_key IN NUMBER) RETURN BOOLEAN; + FUNCTION res_artikel_in_scope (pres_artikel_key IN NUMBER, pres_rsv_ruimte_key IN NUMBER, pres_rsv_artikel_key IN NUMBER) RETURN BOOLEAN; FUNCTION getruimteprijs (pres_rsv_ruimte_key IN NUMBER, ignoretotaal IN NUMBER DEFAULT NULL) RETURN NUMBER; FUNCTION getdeelprijs (pres_rsv_deel_key IN NUMBER) RETURN NUMBER; FUNCTION getartikelprijs (pres_rsv_artikel_key IN NUMBER) RETURN NUMBER; @@ -764,60 +764,41 @@ AS end loop; END; -- Mag dit res_dartikel in de (koppel)ruimte van de reservering gereserveerd worden - FUNCTION res_artikel_in_scope (pres_artikel_key IN NUMBER, pres_rsv_ruimte_key IN NUMBER) + FUNCTION res_artikel_in_scope (pres_artikel_key IN NUMBER, pres_rsv_ruimte_key IN NUMBER, pres_rsv_artikel_key IN NUMBER) RETURN BOOLEAN IS result BOOLEAN; n_inscope INTEGER; BEGIN - DBMS_OUTPUT.put_line ('res_artikel_in_scope(' || pres_artikel_key || ',' || pres_rsv_ruimte_key || ')'); - SELECT COUNT ( * ) - INTO n_inscope - FROM res_v_alg_ruimte_gegevens rg, res_v_aanwezigartikel a - WHERE rg.alg_ruimte_key IS NOT NULL - AND res_artikel_key = pres_artikel_key - AND rg.alg_ruimte_key IN (SELECT COALESCE(rr.alg_ruimte_key, ra.alg_ruimte_key) alg_ruimte_key - FROM res_rsv_ruimte rr, - res_ruimte_opstelling ro, - res_alg_ruimte ra - WHERE rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+) - AND ro.res_ruimte_key = ra.res_ruimte_key(+) - AND rr.res_rsv_ruimte_key = pres_rsv_ruimte_key - AND ra.res_alg_ruimte_verwijder IS NULL) -- Het kan ook een koppelruimte zijn die uit meerdere ruimten bestaat - AND (rg.alg_locatie_key IN - (SELECT DISTINCT sao.alg_onrgoed_key - FROM res_srtartikel_onrgoed sao - WHERE a.res_discipline_key = sao.res_discipline_key - AND sao.res_srtartikel_og_verwijder IS NULL - AND alg_onrgoed_niveau = 'L') - OR rg.alg_gebouw_key IN - (SELECT DISTINCT sao.alg_onrgoed_key - FROM res_srtartikel_onrgoed sao - WHERE a.res_discipline_key = sao.res_discipline_key - AND sao.res_srtartikel_og_verwijder IS NULL - AND alg_onrgoed_niveau = 'G') - OR rg.alg_verdieping_key IN - (SELECT DISTINCT sao.alg_onrgoed_key - FROM res_srtartikel_onrgoed sao - WHERE a.res_discipline_key = sao.res_discipline_key - AND sao.res_srtartikel_og_verwijder IS NULL - AND alg_onrgoed_niveau = 'V') - OR rg.alg_ruimte_key IN - (SELECT DISTINCT sao.alg_onrgoed_key - FROM res_srtartikel_onrgoed sao - WHERE a.res_discipline_key = sao.res_discipline_key - AND sao.res_srtartikel_og_verwijder IS NULL - AND alg_onrgoed_niveau = 'R')) - -- Levering tussen begintijd artikel en eindtijd artikel. - AND (SELECT ra.res_rsv_artikel_levering - FROM res_rsv_ruimte rr, - res_rsv_artikel ra - WHERE rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key - AND rr.res_rsv_ruimte_key = pres_rsv_ruimte_key - AND ra.res_artikel_key = pres_artikel_key) - BETWEEN (SELECT TRUNC(res_rsv_ruimte_van) FROM res_rsv_ruimte rr WHERE rr.res_rsv_ruimte_key = pres_rsv_ruimte_key) - + COALESCE (a.res_artikel_begintijd, fac.safe_to_number (fac.getsetting ('res_t1'))) / 24 AND - (SELECT TRUNC(res_rsv_ruimte_van) FROM res_rsv_ruimte rr WHERE rr.res_rsv_ruimte_key = pres_rsv_ruimte_key) - + COALESCE (a.res_artikel_eindtijd, fac.safe_to_number (fac.getsetting ('res_t2'))) / 24; + DBMS_OUTPUT.put_line ('res_artikel_in_scope(' || pres_artikel_key || ',' || pres_rsv_ruimte_key || ',' || pres_rsv_artikel_key || ')'); + SELECT COUNT(DISTINCT ra.res_rsv_artikel_key) + INTO n_inscope + FROM res_rsv_ruimte rr, + res_ruimte_opstelling ro, + res_alg_ruimte rar, + res_v_alg_ruimte_gegevens rg, + res_srtartikel_onrgoed sao, + res_v_aanwezigartikel a, + res_rsv_artikel ra + WHERE rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+) + AND ro.res_ruimte_key = rar.res_ruimte_key(+) + AND a.res_discipline_key = sao.res_discipline_key + AND (rg.alg_locatie_key = sao.alg_onrgoed_key AND alg_onrgoed_niveau = 'L' + OR rg.alg_gebouw_key = sao.alg_onrgoed_key AND alg_onrgoed_niveau = 'G' + OR rg.alg_verdieping_key = sao.alg_onrgoed_key AND alg_onrgoed_niveau = 'V' + OR rg.alg_ruimte_key = sao.alg_onrgoed_key AND alg_onrgoed_niveau = 'R') + AND rg.alg_ruimte_key = COALESCE (rr.alg_ruimte_key, rar.alg_ruimte_key) + AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key + AND sao.res_srtartikel_og_verwijder IS NULL + AND rg.alg_ruimte_key IS NOT NULL + AND rar.res_alg_ruimte_verwijder IS NULL -- Het kan ook een koppelruimte zijn die uit meerdere ruimten bestaat + AND a.res_artikel_key = pres_artikel_key + AND rr.res_rsv_ruimte_key = pres_rsv_ruimte_key + AND ra.res_rsv_artikel_key = pres_rsv_artikel_key + -- Levering tussen begintijd artikel en eindtijd artikel. + AND ra.res_rsv_artikel_levering BETWEEN (SELECT TRUNC (rr.res_rsv_ruimte_van) FROM res_rsv_ruimte rr WHERE rr.res_rsv_ruimte_key = pres_rsv_ruimte_key) + + COALESCE (a.res_artikel_begintijd, fac.safe_to_number (fac.getsetting ('res_t1'))) / 24 + AND (SELECT TRUNC (rr.res_rsv_ruimte_van) FROM res_rsv_ruimte rr WHERE rr.res_rsv_ruimte_key = pres_rsv_ruimte_key) + + COALESCE (a.res_artikel_eindtijd, fac.safe_to_number (fac.getsetting ('res_t2'))) / 24; RETURN n_inscope > 0; END; -- Moeten wijzelf misschien dirty worden @@ -826,7 +807,10 @@ AS AS CURSOR prsv_artikelcur IS - SELECT res_artikel_key, res_rsv_ruimte_key, res_rsv_artikel_verwijder + SELECT res_artikel_key, + res_rsv_ruimte_key, + res_rsv_artikel_key, + res_rsv_artikel_verwijder FROM res_rsv_artikel WHERE res_rsv_artikel_key = prsv_artikel_key FOR UPDATE OF res_rsv_artikel_dirtlevel; @@ -837,7 +821,7 @@ AS FETCH prsv_artikelcur INTO prsv_artikel; newdirtlevel := 0; -- Begin 'Clean' IF prsv_artikel.res_rsv_artikel_verwijder IS NULL - AND NOT res_artikel_in_scope (prsv_artikel.res_artikel_key, prsv_artikel.res_rsv_ruimte_key) + AND NOT res_artikel_in_scope (prsv_artikel.res_artikel_key, prsv_artikel.res_rsv_ruimte_key, prsv_artikel.res_rsv_artikel_key) THEN newdirtlevel := newdirtlevel + 256; -- OutOfScope END IF;