AKZA#34210: Beschikbaarheidstijden voor voorzieningen(catering).

svn path=/Database/trunk/; revision=27140
This commit is contained in:
Maykel Geerdink
2015-11-26 14:01:50 +00:00
parent fad419f415
commit 54089a830a

View File

@@ -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;