diff --git a/APPL/Shared/Suggest/plaatsFilter.inc b/APPL/Shared/Suggest/plaatsFilter.inc index e90fe90e51..90a87d37a6 100644 --- a/APPL/Shared/Suggest/plaatsFilter.inc +++ b/APPL/Shared/Suggest/plaatsFilter.inc @@ -142,29 +142,12 @@ function getFiltClauseLocatie(pfiltcode, params) lfiltClause.from = loc_scope_act_filter.from; lfiltClause.where = " AND l.alg_locatie_key IN" + " (SELECT b.alg_locatie_key" - + " FROM alg_v_onrgoed_boom b" - + " WHERE ( b.alg_locatie_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'L' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_gebouw_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'G' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_verdieping_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'V' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_ruimte_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'R' AND res_srtartikel_og_verwijder IS NULL)" - + " )" + + " FROM (" + get_res_bezorgfilter(params, 2) + ") b" + + " WHERE 1=1" + get_not_reserveerbare_ruimte("b") - + " UNION" - + " SELECT ll.alg_locatie_key" - + " FROM alg_ruimte rr" - + " , alg_verdieping vv" - + " , alg_gebouw gg" - + " , alg_locatie ll " - + " WHERE rr.alg_ruimte_verwijder IS NULL " - + " AND rr.alg_verdieping_key = vv.alg_verdieping_key " - + " AND vv.alg_gebouw_key = gg.alg_gebouw_key " - + " AND gg.alg_locatie_key = ll.alg_locatie_key" - + get_not_reserveerbare_ruimte("rr") - + get_res_bezorgfilter(params, 2); + " )" + loc_scope_act_filter.where; lfiltClause.where += lfiltClauseFAC; // Ook dat nog - break; case "RES": // Locatie met minstens reserveerbare ruimte, en FAC bovendien @@ -267,31 +250,12 @@ function getFiltClauseGebouw(pfiltcode, params) lfiltClause.from = loc_scope_act_filter.from; lfiltClause.where = " AND g.alg_gebouw_key IN" + " (SELECT b.alg_gebouw_key" - + " FROM alg_v_onrgoed_boom b" - + " WHERE ( b.alg_locatie_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'L' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_gebouw_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'G' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_verdieping_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'V' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_ruimte_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'R' AND res_srtartikel_og_verwijder IS NULL)" - + " )" + + " FROM (" + get_res_bezorgfilter(params, 3) + ") b" + + " WHERE 1=1" + get_not_reserveerbare_ruimte("b") - + " UNION" - + " SELECT gg.alg_gebouw_key" - + " FROM alg_ruimte rr" - + " , alg_verdieping vv" - + " , alg_gebouw gg" - + " , alg_locatie ll" - + " WHERE rr.alg_ruimte_verwijder IS NULL" - + " AND rr.alg_verdieping_key = vv.alg_verdieping_key" - + " AND vv.alg_gebouw_key = gg.alg_gebouw_key" - + " AND gg.alg_locatie_key = ll.alg_locatie_key" - + get_not_reserveerbare_ruimte("rr") - + get_res_bezorgfilter(params, 3); + " )" + loc_scope_act_filter.where; lfiltClause.where += lfiltClauseFAC; // Ook dat nog - - - break; case "RESA": // RES Afhaal: 'thuishaven' objecten en catering die een ruimte-scope heeft lfiltClause.where = " AND g.alg_gebouw_key IN" @@ -387,25 +351,9 @@ function getFiltClauseVerdieping(pfiltcode, params) lfiltClause.from = loc_scope_act_filter.from; lfiltClause.where = " AND v.alg_verdieping_key IN" + " (SELECT b.alg_verdieping_key" - + " FROM alg_v_onrgoed_boom b" - + " WHERE ( b.alg_locatie_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'L' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_gebouw_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'G' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_verdieping_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'V' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_ruimte_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'R' AND res_srtartikel_og_verwijder IS NULL)" - + " )" + + " FROM (" + get_res_bezorgfilter(params, 4) + ") b" + + " WHERE 1=1" + get_not_reserveerbare_ruimte("b") - + " UNION" - + " SELECT vv.alg_verdieping_key" - + " FROM alg_ruimte rr" - + " , alg_verdieping vv" - + " , alg_gebouw gg" - + " , alg_locatie ll" - + " WHERE rr.alg_ruimte_verwijder IS NULL" - + " AND rr.alg_verdieping_key = vv.alg_verdieping_key" - + " AND vv.alg_gebouw_key = gg.alg_gebouw_key" - + " AND gg.alg_locatie_key = ll.alg_locatie_key" - + get_not_reserveerbare_ruimte("rr") - + get_res_bezorgfilter(params, 4); + " )" + loc_scope_act_filter.where; lfiltClause.where += lfiltClauseFAC; // Ook dat nog @@ -495,25 +443,9 @@ function getFiltClauseRuimte(pfiltcode, params) lfiltClause.from = loc_scope_act_filter.from; lfiltClause.where = " AND r.alg_ruimte_key IN" + " (SELECT b.alg_ruimte_key" - + " FROM alg_v_onrgoed_boom b" - + " WHERE ( b.alg_locatie_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'L' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_gebouw_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'G' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_verdieping_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'V' AND res_srtartikel_og_verwijder IS NULL)" - + " OR b.alg_ruimte_key IN (SELECT alg_onrgoed_key FROM res_srtartikel_onrgoed WHERE alg_onrgoed_niveau = 'R' AND res_srtartikel_og_verwijder IS NULL)" - + " )" + + " FROM (" + get_res_bezorgfilter(params, 5) + ") b" + + " WHERE 1=1" + get_not_reserveerbare_ruimte("b") - + " UNION" - + " SELECT rr.alg_ruimte_key" - + " FROM alg_ruimte rr" - + " , alg_verdieping vv" - + " , alg_gebouw gg" - + " , alg_locatie ll" - + " WHERE rr.alg_ruimte_verwijder IS NULL" - + " AND rr.alg_verdieping_key = vv.alg_verdieping_key" - + " AND vv.alg_gebouw_key = gg.alg_gebouw_key" - + " AND gg.alg_locatie_key = ll.alg_locatie_key" - + get_not_reserveerbare_ruimte("rr") - + get_res_bezorgfilter(params, 5); + " )" + loc_scope_act_filter.where; lfiltClause.where += lfiltClauseFAC; // Ook dat nog @@ -659,57 +591,110 @@ function get_res_bezorgfilter(params, level) var res_deel_key = getQParamInt("res_deel_key", params.res_deel_key||-1); var res_deel_alg_level = -1; var filter_deel = ""; + var bezorgfilter = ""; -// if (res_deel_key > 0) // reserveerbare objecten bezorgen -// { - sql = "SELECT MIN(res_deel_alg_level) res_deel_alg_level" - + " FROM res_deel rd" - + " , ins_deel id" - + " , alg_v_onrgoed_boom aob" - + " WHERE rd.res_ins_deel_key = id.ins_deel_key" - + " AND COALESCE(id.ins_alg_ruimte_type_org, id.ins_alg_ruimte_type) = 'R'" - + " AND COALESCE(id.ins_alg_ruimte_key_org, id.ins_alg_ruimte_key) = aob.alg_ruimte_key" - + " AND res_deel_alg_level > -1" - + (res_deel_key > 0 ? " AND res_deel_key = " + res_deel_key : ""); - var oRs = Oracle.Execute(sql); + sql = "SELECT MIN(res_deel_alg_level) res_deel_alg_level," + + " alg_district_key," + + " alg_regio_key," + + " alg_locatie_key," + + " alg_gebouw_key," + + " alg_verdieping_key," + + " alg_ruimte_key" + + " FROM res_deel rd, ins_deel id, " + + " alg_v_onrgoed_boom aob" + + " WHERE rd.res_ins_deel_key = id.ins_deel_key" + + " AND COALESCE(id.ins_alg_ruimte_type_org, id.ins_alg_ruimte_type) = 'R'" + + " AND COALESCE(id.ins_alg_ruimte_key_org, id.ins_alg_ruimte_key) = aob.alg_ruimte_key" + + " AND res_deel_alg_level > -1" + + (res_deel_key > 0 + ? " AND res_deel_key = " + res_deel_key + : "" + ) + + " GROUP BY alg_district_key," + + " alg_regio_key," + + " alg_locatie_key," + + " alg_gebouw_key," + + " alg_verdieping_key," + + " alg_ruimte_key"; + + var oRs = Oracle.Execute(sql); + if (!oRs.eof) res_deel_alg_level = oRs("res_deel_alg_level").Value; - if (level >= 5 && res_deel_alg_level == 5) filter_deel = "rr.alg_ruimte_key IN "; - if (level >= 4 && res_deel_alg_level == 4) filter_deel = "vv.alg_verdieping_key IN "; - if (level >= 3 && res_deel_alg_level == 3) filter_deel = "gg.alg_gebouw_key IN "; - if (level >= 2 && res_deel_alg_level == 2) filter_deel = "ll.alg_locatie_key IN "; - if (level >= 1 && res_deel_alg_level == 1) filter_deel = "ll.alg_locatie_key IN "; //"rg.alg_regio_key IN "; - if (level >= 0 && res_deel_alg_level == 0) filter_deel = "ll.alg_locatie_key IN "; //"di.alg_district_key IN "; - oRs.close(); -// } + if (level >= 5 && res_deel_alg_level == 5) deel_filter = " AND aob.alg_ruimte_key = " + oRs("alg_ruimte_key").Value; + if (level >= 4 && res_deel_alg_level == 4) deel_filter = " AND aob.alg_verdieping_key = " + oRs("alg_verdieping_key").Value; + if (level >= 3 && res_deel_alg_level == 3) deel_filter = " AND aob.alg_gebouw_key = " + oRs("alg_gebouw_key").Value; + if (level >= 2 && res_deel_alg_level == 2) deel_filter = " AND aob.alg_locatie_key = " + oRs("alg_locatie_key").Value; + if (level >= 1 && res_deel_alg_level == 1) deel_filter = " AND aob.alg_regio_key = " + oRs("alg_regio_key").Value; + if (level >= 0 && res_deel_alg_level == 0) deel_filter = " AND aob.alg_district_key = " + oRs("alg_district_key").Value; + // Als geen van bovenstaande combinaties geldt, dan blijft deel_filter leeg. + oRs.Close(); + var bezorgfilter_C = "SELECT alg_regio_key" + + " , alg_district_key" + + " , alg_locatie_key" + + " , alg_gebouw_key" + + " , alg_verdieping_key" + + " , alg_ruimte_key" + + " FROM ( SELECT alg_onrgoed_key" + + " , alg_onrgoed_niveau" + + " , res_discipline_key" + + " , res_srtartikel_og_verwijder alg_onrgoed_verwijder" + + " , 'C' object_type" + + " FROM res_srtartikel_onrgoed" + + ") obj" + + " , res_activiteitdiscipline rad" + + " , alg_v_onrgoed_boom aob" + + " WHERE rad.res_discipline_key = obj.res_discipline_key" + + " AND ( (obj.alg_onrgoed_niveau = 'R' and obj.alg_onrgoed_key = aob.alg_ruimte_key)" + + " OR (obj.alg_onrgoed_niveau = 'V' and obj.alg_onrgoed_key = aob.alg_verdieping_key)" + + " OR (obj.alg_onrgoed_niveau = 'G' and obj.alg_onrgoed_key = aob.alg_gebouw_key)" + + " OR (obj.alg_onrgoed_niveau = 'L' and obj.alg_onrgoed_key = aob.alg_locatie_key)" + + " OR (obj.alg_onrgoed_niveau = 'D' and obj.alg_onrgoed_key = aob.alg_district_key)" + + " )" + + " AND obj.alg_onrgoed_verwijder IS NULL" + + " AND rad.res_activiteit_key = " + params.act_key; - filter_deel += "(SELECT aob.alg_locatie_key" - + " FROM res_deel rd" - + " , ins_deel id" - + " , alg_v_onrgoed_boom aob" - + " WHERE rd.res_ins_deel_key = id.ins_deel_key" - + " AND COALESCE(id.ins_alg_ruimte_type_org, id.ins_alg_ruimte_type) = 'R'" - + " AND COALESCE(id.ins_alg_ruimte_key_org, id.ins_alg_ruimte_key) = aob.alg_ruimte_key" - + (res_deel_key > 0 ? " AND res_deel_key = " + res_deel_key : "") - + ")"; + var bezorgfilter_V = "SELECT alg_regio_key" + + " , alg_district_key" + + " , alg_locatie_key" + + " , alg_gebouw_key" + + " , alg_verdieping_key" + + " , alg_ruimte_key" + + " FROM alg_v_onrgoed_boom aob" + + " WHERE 1=1" + + deel_filter; - - var bezorgfilter = ""; -// if (res_deel_alg_level > -1) -// { - bezorgfilter = (filter_deel ? " AND " + filter_deel : "") - + ")" - + "AND (EXISTS" - + " (SELECT ''" - + " FROM res_srtartikel_onrgoed rao" - + " , res_activiteitdiscipline rad" - + " WHERE ( rao.res_discipline_key = rad.res_discipline_key" - + " AND rad.res_activiteit_key = " + params.act_key - + " )" - + " )" - + " )"; -// } + var sql_CV = "SELECT DISTINCT DECODE(ins_discipline_min_level, 1, 'V', 2, 'C', 3, 'R') srtvoorziening" + + " FROM res_activiteitdiscipline ad" + + " , res_discipline rd" + + " WHERE ad.res_discipline_key = rd.ins_discipline_key" + + " AND ad.res_activiteit_key = " + params.act_key; + var sql_CV_nr = "SELECT COUNT(*) aantal" + + " FROM (" + sql_CV + ")"; + var oRs = Oracle.Execute(sql_CV_nr); + var v_aantal = oRs("aantal").Value; + oRs.Close(); + if (v_aantal > 0) + { + // catering en/of voorzieningen + var oRs = Oracle.Execute(sql_CV); + while (!oRs.eof) + { + var v_srtvoorziening = oRs("srtvoorziening").Value; + if (v_srtvoorziening == "C") + bezorgfilter += (bezorgfilter == "" ? "" : " UNION ") + bezorgfilter_C; + if (v_srtvoorziening == "V") + bezorgfilter += (bezorgfilter == "" ? "" : " UNION ") + bezorgfilter_V; + oRs.MoveNext(); + } + } + else + { + // Als er geen activiteit gekozen is, of voor de gekozen activiteit bestaan geen disciplines, + // dan mag de query niet s opleveren. + bezorgfilter = bezorgfilter_V + " AND 1=0"; + } return " /* get_res_bezorgfilter */ " + bezorgfilter; }