HSLE#36221 Invulscherm bij cateringbestelling alleen bepaalde ruimtetypen tonen.

svn path=/Website/trunk/; revision=33897
This commit is contained in:
Erik Groener
2017-05-17 10:56:51 +00:00
parent d13b353933
commit e0ae82b14a

View File

@@ -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"
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 : "");
+ (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();
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 = "";
// if (res_deel_alg_level > -1)
// {
bezorgfilter = (filter_deel ? " AND " + filter_deel : "")
+ ")"
+ "AND (EXISTS"
+ " (SELECT ''"
+ " FROM res_srtartikel_onrgoed rao"
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"
+ " WHERE ( rao.res_discipline_key = rad.res_discipline_key"
+ " AND rad.res_activiteit_key = " + params.act_key
+ " , 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;
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 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;
}