diff --git a/QUAW/QUAW.SQL b/QUAW/QUAW.SQL index e51bbdc76..0ac1a03e3 100644 --- a/QUAW/QUAW.SQL +++ b/QUAW/QUAW.SQL @@ -185,6 +185,183 @@ AS AND l.alg_district_key = di.alg_district_key AND s.ins_srtdeel_key = i.ins_srtdeel_key; +-- QUAW#39822 overzicht bezetting objecten + +CREATE OR REPLACE VIEW QUAW_V_BEZETTING_OBJ +( + MND, + CATALOGUS, + OBJECT, + AANTAL_RES, + BESCH_UREN, + BEZ_UREN, + PERC +) +AS + SELECT resbes.mnd, + resbes.ins_discipline_omschrijving, + resbes.res_deel_omschrijving, + SUM (resbez.aant) aantal_reserveringen, + SUM (ROUND (resbes.uren, 2)) bes_uren, + SUM (ROUND (resbez.tot_uren, 2)) bez_uren, + ROUND ( + ( (SUM (ROUND (resbez.tot_uren, 2)) + / SUM (ROUND (resbes.uren, 2))) + * 100), + 2) + AS perc + FROM ( --- aantal uren dat een object beschikbaar is per maand uitgaande van res_t1 (7) en res_t2 (23) en werkdagen + SELECT TO_CHAR (p.mnd, 'yyyy-mm') mnd, + rd.res_discipline_key, + ds.ins_discipline_omschrijving, + rd.res_deel_key, + rd.res_deel_omschrijving, + fac.count_work_days (p.mnd - 1, ADD_MONTHS (p.mnd, 1) - 1) + * 16 -- bij quaw: 23-7 = 16 + uren + FROM res_deel rd, + ins_deel d, + res_discipline ds, + ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'mm'), LEVEL - 26) mnd + FROM DUAL + CONNECT BY LEVEL <= 25) p + WHERE rd.res_ins_deel_key = d.ins_deel_key + AND COALESCE (d.ins_alg_ruimte_type_org, + d.ins_alg_ruimte_type) = 'R' -- Noodzakelijk? + AND rd.res_deel_aanmaak < ADD_MONTHS (p.mnd, 1) + AND (rd.res_deel_verwijder IS NULL + OR rd.res_deel_verwijder >= p.mnd) + AND rd.res_discipline_key = ds.ins_discipline_key) resbes, + --- aantal reserveringen en totaal aantal uren dat een object 'bezet' is per maand uitgaande van res_t1 (7) en res_t2 (23) en werkdagen + ( SELECT TO_CHAR (rrd.res_rsv_deel_tot, 'yyyy-mm') mnd, + rd.res_discipline_key, + ds.ins_discipline_omschrijving, + rd.res_deel_omschrijving, + rd.res_deel_key, + COUNT ( * ) aant, + SUM(LEAST ( + (rrd.res_rsv_deel_tot - TRUNC (rrd.res_rsv_deel_tot)) + * 24, + 23) + - GREATEST ( + (rrd.res_rsv_deel_van + - TRUNC (rrd.res_rsv_deel_van)) + * 24, + 7)) + tot_uren + FROM res_rsv_deel rrd, + res_rsv_ruimte rrr, + res_deel rd, + ins_deel d, + res_discipline ds + WHERE rrd.res_rsv_deel_verwijder IS NULL + AND rd.res_discipline_key = ds.ins_discipline_key + AND rrd.res_rsv_deel_dirtlevel = 0 + AND TRUNC (rrd.res_rsv_deel_van) = + TRUNC (rrd.res_rsv_deel_tot) -- Eendaags! + AND rrd.res_rsv_deel_tot BETWEEN ADD_MONTHS ( + TRUNC (SYSDATE, 'mm'), + -25) + AND TRUNC (SYSDATE, 'mm') + -- AND TO_CHAR (rrd.res_rsv_deel_tot, 'd') BETWEEN '2' AND '6' dit laat reserveringen weg die er wel in horen?! + AND NOT EXISTS + (SELECT 1 + FROM mld_vrije_dagen + WHERE TRUNC (mld_vrije_dagen_datum) = + TRUNC (rrd.res_rsv_deel_tot)) + --AND TO_CHAR (rrd.res_rsv_deel_van, 'hh24') < '17' + --AND TO_CHAR (rrd.res_rsv_deel_tot, 'hh24') > '08' + --AND rrd.bez_bezoekers_key IS NULL -- Geen parkeerplaatsen! + AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+) + AND rrr.res_status_fo_key(+) IN (1, 2) -- Optie/Definitief + AND rrd.res_deel_key = rd.res_deel_key + AND rd.res_ins_deel_key = d.ins_deel_key + -- AND COALESCE (d.ins_alg_ruimte_type_org, d.ins_alg_ruimte_type) = 'R' -- Noodzakelijk? + GROUP BY TO_CHAR (rrd.res_rsv_deel_tot, 'yyyy-mm'), + rd.res_discipline_key, + ds.ins_discipline_omschrijving, + rd.res_deel_omschrijving, + rd.res_deel_key + UNION ALL -- Meerdaagse voorzieningen! + SELECT TO_CHAR (p.dag, 'yyyy-mm') mnd, + rd.res_discipline_key, + ds.ins_discipline_omschrijving, + rd.res_deel_omschrijving, + rd.res_deel_key resource_key, + COUNT ( * ) aant, + SUM(DECODE ( + p.dag, + TRUNC (rrd.res_rsv_deel_van), + 23 + - GREATEST ( + (rrd.res_rsv_deel_van + - TRUNC (rrd.res_rsv_deel_van)) + * 24, + 7), + TRUNC (rrd.res_rsv_deel_tot), + LEAST ( + (rrd.res_rsv_deel_tot + - TRUNC (rrd.res_rsv_deel_tot)) + * 24, + 23) + - 7, + 16)) -- = 23-7 + uren + FROM res_rsv_deel rrd, + res_rsv_ruimte rrr, + res_deel rd, + ins_deel d, + res_discipline ds, + ( SELECT TRUNC (SYSDATE, 'mm') - LEVEL dag + FROM DUAL + CONNECT BY LEVEL <= + TRUNC (SYSDATE, 'mm') + - ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -25)) p + WHERE rrd.res_rsv_deel_verwijder IS NULL + AND rd.res_discipline_key = ds.ins_discipline_key + AND rrd.res_rsv_deel_dirtlevel = 0 + AND TRUNC (rrd.res_rsv_deel_van) != + TRUNC (rrd.res_rsv_deel_tot) -- Meerdaags! + AND rrd.res_rsv_deel_tot BETWEEN ADD_MONTHS ( + TRUNC (SYSDATE, 'mm'), + -25) + AND TRUNC (SYSDATE, 'mm') + --AND TO_CHAR (rrd.res_rsv_deel_van, 'hh24') < '17' + --AND TO_CHAR (rrd.res_rsv_deel_tot, 'hh24') > '08' + --AND rrd.bez_bezoekers_key IS NULL -- Geen parkeerplaatsen! + AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+) + AND rrr.res_status_fo_key(+) IN (1, 2) -- Optie/Definitief + AND rrd.res_deel_key = rd.res_deel_key + AND rd.res_ins_deel_key = d.ins_deel_key + -- AND COALESCE (d.ins_alg_ruimte_type_org, d.ins_alg_ruimte_type) = 'R' -- Noodzakelijk? + AND p.dag BETWEEN TRUNC (rrd.res_rsv_deel_van) + AND TRUNC (rrd.res_rsv_deel_tot) + AND TO_CHAR (p.dag, 'd') BETWEEN '2' AND '6' + AND NOT EXISTS + (SELECT 1 + FROM mld_vrije_dagen + WHERE TRUNC (mld_vrije_dagen_datum) = TRUNC (p.dag)) + GROUP BY TO_CHAR (p.dag, 'yyyy-mm'), + rd.res_discipline_key, + ds.ins_discipline_omschrijving, + rd.res_deel_omschrijving, + rd.res_deel_key) resbez, + res_discipline rd + WHERE resbes.mnd = resbez.mnd(+) + AND resbes.res_discipline_key = resbez.res_discipline_key(+) + AND resbes.res_deel_key = resbez.res_deel_key(+) + AND resbes.res_discipline_key = rd.ins_discipline_key(+) + AND resbes.uren > 0 -- Soms 0 of zelfs negatief bij vreemde/gelijke begin- en eindtijden (van reserveerbare ruimte = res_ruimte)! + AND COALESCE (resbez.tot_uren, 1) > 0 -- Soms 0 of zelfs negatief bij vreemde/gelijke begin- en eindtijden (van res_rsv_ruimte/deel)! + GROUP BY resbes.mnd, + resbes.ins_discipline_omschrijving, + resbes.res_deel_omschrijving + ORDER BY resbes.mnd, + resbes.ins_discipline_omschrijving, + resbes.res_deel_omschrijving; + +COMMIT; + BEGIN DBMS_UTILITY.COMPILE_SCHEMA (USER, FALSE); END; @@ -195,9 +372,7 @@ END; SET DEFINE OFF BEGIN - adm.systrackscriptId ( - '$Id$', - 0); + adm.systrackscriptId ('$Id$', 0); END; /