diff --git a/APPL/API2/model_res_disc_params.inc b/APPL/API2/model_res_disc_params.inc index e615fa31d9..b30ccf585b 100644 --- a/APPL/API2/model_res_disc_params.inc +++ b/APPL/API2/model_res_disc_params.inc @@ -102,6 +102,20 @@ model_res_disc_params = "required": true, "multiedit": true }, + "mintime": { + "dbs": "res_disc_params_min_duur", + "label": L("res_catalogus_min_duur"), + "typ": "number", + "defaultvalue": 0, + "multiedit": true + }, + "minparticipants": { + "dbs": "res_disc_params_min_deelnmrs", + "label": L("res_catalogus_min_participants"), + "typ": "float", + "defaultvalue": 0, + "multiedit": true + }, "company": { "dbs": "prs_bedrijf_key", "label": L("res_catalogus_bedrijf"), diff --git a/APPL/RES/res_edit_objcat.asp b/APPL/RES/res_edit_objcat.asp index 131a1dfe52..f1865e4799 100644 --- a/APPL/RES/res_edit_objcat.asp +++ b/APPL/RES/res_edit_objcat.asp @@ -50,6 +50,7 @@ sql = "SELECT res_reservering_key" + " , res_rsv_ruimte_verwijder" + " , alg_ruimte_key, res_ruimte_opstel_key" + " , res_rsv_ruimte_van, res_rsv_ruimte_tot" + + " , res_rsv_ruimte_bezoekers" + " , trunc(res_rsv_ruimte_tot) - trunc(res_rsv_ruimte_van) meerdaags" + " , prs_kostenplaats_key" + " , res_activiteit_key" @@ -59,6 +60,8 @@ oRs = Oracle.Execute(sql); var resdeleted = (oRs("res_rsv_ruimte_verwijder").value != null); var res_van = new Date(oRs("res_rsv_ruimte_van").value); var res_tot = new Date(oRs("res_rsv_ruimte_tot").value); +var res_duur = (res_tot - res_van) / 1000 / 60 / 60; // duration from milliseconds to hours +var res_bezoekers = oRs("res_rsv_ruimte_bezoekers").value; var res_meerdaags = oRs("meerdaags").value!=0; var activiteit_key = oRs("res_activiteit_key").value; @@ -457,8 +460,11 @@ var new_item_key = 0; // Globaal + (arrangementDiscs && arrangementDiscs.length ? " , CASE WHEN d.ins_discipline_key IN (" + arrangementDiscs.join(",") + ") THEN 1 ELSE 0 END inArrangement" : " , 0 inArrangement") - + " FROM RES_v_aanwezigDISCIPLINE d" + + " FROM RES_v_aanwezigDISCIPLINE d, res_disc_params rd" + " WHERE ins_discipline_min_level = 2" + + " AND rd.res_ins_discipline_key = d.ins_discipline_key" + + " AND rd.res_disc_params_min_deelnmrs <= " + res_bezoekers + + " AND rd.res_disc_params_min_duur <= " + res_duur + " AND d.ins_discipline_key IN" + "(SELECT g.ins_discipline_key" + " FROM fac_v_webgebruiker g" diff --git a/APPL/RES/res_edit_rsv_ruimte_save.asp b/APPL/RES/res_edit_rsv_ruimte_save.asp index 3d598fbb28..07a4e1f842 100644 --- a/APPL/RES/res_edit_rsv_ruimte_save.asp +++ b/APPL/RES/res_edit_rsv_ruimte_save.asp @@ -40,18 +40,30 @@ var met_eindtijd = oRs("res_activiteit_meteindtijd").Value == 1; oRs.Close(); var warning = ""; +var res_bezoekers = getFParamInt("bezoekers", null); var date_from = getFParamDate("date_from", null); // die hebben we vaak nodig if (!date_from) { // fe_lastminute kon kalender niet bewerken - var sql = "SELECT res_rsv_ruimte_van, res_rsv_ruimte_tot" + var sql = "SELECT res_rsv_ruimte_van, res_rsv_ruimte_tot, res_rsv_ruimte_bezoekers" + " FROM res_rsv_ruimte" + " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key; var oRs = Oracle.Execute(sql); date_from = new Date(oRs("res_rsv_ruimte_van").Value); date_to = new Date(oRs("res_rsv_ruimte_tot").Value); + if (res_bezoekers == null) { res_bezoekers = oRs("res_rsv_ruimte_bezoekers").value; } + oRs.Close(); } else { + if (rsv_ruimte_key > -1 && res_bezoekers == null) + { + var sql = "SELECT res_rsv_ruimte_bezoekers" + + " FROM res_rsv_ruimte" + + " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key; + var oRs = Oracle.Execute(sql); + res_bezoekers = oRs("res_rsv_ruimte_bezoekers").value; + oRs.Close(); + } if (date_from.getSeconds() > 0 || date_from.getMilliseconds() > 0) date_from.setSeconds(59, 1000); // Omhoog afronden op minuten, minimaliseert conflicten var date_to = getFParamDate("date_to"); // die hebben we vaak nodig @@ -106,6 +118,28 @@ if (rsv_ruimte_key > -1) { abort_with_warning(L("lcl_res_allow_multi_cat")); // Meerdaagse reservering met catering niet toegestaan } + // detect items who are not allowed within the parameters of their catalogue + sql = "SELECT DISTINCT d.ins_discipline_key, " + lcl.xsqla('d.ins_discipline_omschrijving','d.ins_discipline_key') + + " FROM res_v_aanwezigrsv_artikel ara, res_v_aanwezigartikel ra, RES_v_aanwezigDISCIPLINE d, res_disc_params rd" + + " WHERE ara.RES_RSV_RUIMTE_KEY = " + rsv_ruimte_key + + " AND ra.res_artikel_key = ara.res_artikel_key" + + " AND d.ins_discipline_key = ra.res_discipline_key" + + " AND rd.res_ins_discipline_key = d.ins_discipline_key" + + " AND (rd.res_disc_params_min_deelnmrs > " + res_bezoekers + + " OR rd.res_disc_params_min_duur > " + durationHours + ")"; + oRs = Oracle.Execute(sql); + if (!oRs.Eof) + { + var discArr = []; + while (!oRs.eof) + { + discArr.push(oRs("ins_discipline_omschrijving").Value); + oRs.MoveNext(); + } + abort_with_warning(L("lcl_res_invalid_with_cat").format(discArr.join(", "))); // Some items are not allowed with this reservation + } + oRs.Close(); + var this_res = res.func_enabled(rsv_ruimte_key); // Wat heb ik zoal aan rechten op deze specifieke reservering }