Files
Facilitor/APPL/RES/res_edit_objcat.asp
Peter Feij 4e1dec1eba FSN#40747 iOS doet het schijnbaar niet met relatieve paden, die dus absoluut maken
svn path=/Website/branches/v2017.2/; revision=35629
2017-10-10 12:13:46 +00:00

486 lines
20 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: res_edit_objcat.asp
Remark: allow adding of res_deel and res_artikel
Parameters:
rsv_ruimte_key required, existing rsv_ruimte_key. Al het andere zoeken we er zelf bij
urole required
Context: iframe van res_reservering.asp
*/
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="res.inc" -->
<!-- #include file="../shared/iface.inc" -->
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="../shared/kpl_ksrt_validate.inc" -->
<!-- #include file="res_plan_obj.inc" -->
<!-- #include file="res_cat.inc" -->
<%
FCLTHeader.Requires({ plugins: ["jQuery"],
js: ["date.js", "jquery-ui.js", rooturl+"/appl/res/res_plan.js"],
css: [rooturl+"/appl/res/res.css"]});
var urole = getQParamSafe("urole");
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key");
var res_artikel_key = getQParamInt("res_artikel_key", -1);
var verynew = getQParamInt("verynew", 0);
res.res_set_dialect(rsv_ruimte_key);
var res_deel_key = getQParamInt("res_deel_key", -1); // Default
var disc_key = getQParamInt("disc_key", -1); // Auto openklappen
if (res_deel_key > 0)
{
sql = "SELECT res_discipline_key"
+ " FROM res_deel"
+ " WHERE res_deel_key = " + res_deel_key;
oRs = Oracle.Execute(sql);
disc_key = oRs("res_discipline_key").value;
}
// Zo snel mogelijk relevante basisinformatie opzoeken
sql = "SELECT res_reservering_key"
+ " , res_rsv_ruimte_verwijder"
+ " , alg_ruimte_key, res_ruimte_opstel_key"
+ " , res_rsv_ruimte_van, res_rsv_ruimte_tot"
+ " , trunc(res_rsv_ruimte_tot) - trunc(res_rsv_ruimte_van) meerdaags"
+ " , prs_kostenplaats_key"
+ " , res_activiteit_key"
+ " FROM res_rsv_ruimte"
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
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_meerdaags = oRs("meerdaags").value!=0;
var activiteit_key = oRs("res_activiteit_key").value;
if (oRs("alg_ruimte_key").value != null)
restype = "CV"
else if (oRs("res_ruimte_opstel_key").value != null)
restype = "R"
alg_ruimte_key = oRs("alg_ruimte_key").value || -1;
var has_kostenplaats_key = oRs("prs_kostenplaats_key").value != null;
oRs.Close()
var fronto = (urole == "fo");
var backo = (urole == "bo");
var frontend = (urole == "fe");
var portal_alg_ruimte_key = getQParamInt("portal_alg_ruimte_key", -1);
if (urole == "fo")
var autfunction = "WEB_RESFOF";
else if (urole == "bo")
var autfunction = "WEB_RESBOF";
else // fe
var autfunction = "WEB_RESUSE";
var authparams = user.checkAutorisation(autfunction)
%>
<html>
<head>
<% FCLTHeader.Generate() %>
<%
// Bereken dynamisch breedte blokjes
var width_px = getQParamInt("width_px", 1024);
var nr_days = Math.round(1 + (res_tot.midnight() - res_van.midnight()) / 24 / 60 / 60 / 1000);
var hour_px = res.hour_px(width_px - 250, nr_days);
%>
<script type="text/javascript">
var hour_px = <%=hour_px%>;
var res_cat_t1 = <%=safe.jsfloat(S("res_cat_t1"))%>;
var res_cat_t2 = <%=safe.jsfloat(S("res_cat_t2"))%>;
// Worden in res_plan.js gebruikt:
var res_van = new Date(<%=res_van.getTime()%>);
var res_tot = new Date(<%=res_tot.getTime()%>);
</script>
<%
var starttime_room = S("res_t1");
var endtime_room = S("res_t2");
sql = "SELECT COALESCE(ru.res_ruimte_begintijd, " + S("res_t1") + ") begintijd"
+ ", COALESCE(ru.res_ruimte_eindtijd, " + S("res_t2") + ") eindtijd"
+ ", ro.res_ruimte_key"
+ " FROM res_ruimte ru"
+ ", res_rsv_ruimte rr"
+ ", res_ruimte_opstelling ro"
+ " WHERE ru.res_ruimte_key = ro.res_ruimte_key"
+ " AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key"
+ " AND rr.res_rsv_ruimte_key = " + rsv_ruimte_key;
oRs = Oracle.Execute(sql);
if (!oRs.eof)
{ // Found, blijkbaar type=='R'
var starttime_room = oRs("begintijd").value;
var endtime_room = oRs("eindtijd").value;
if (starttime_room < S("res_t1")) starttime_room = S("res_t1");
if (endtime_room > S("res_t2")) endtime_room = S("res_t2");
if (starttime_room > endtime_room) starttime_room = endtime_room;
res_ruimte_key = oRs("res_ruimte_key").value;
}
else
{
res_ruimte_key = -1;
}
%>
<script type="text/javascript">
var rsv_ruimte_key = <%=rsv_ruimte_key%>;
var urole = "<%=urole%>";
var backo = <%=backo? 1 : 0%>;
var fronto = <%=fronto? 1 : 0%>;
var frontend = (1 == <%=frontend? 1 : 0%>);
function res_submit_callback(json)
{
if (json.success)
FcltMgr.closeDetail(window, json);
else
iface.button.enable("btn_objcat_submit");
}
function res_submit()
{
if (checkArtikelen(<%=safe.jsfloat(starttime_room)%>, <%=safe.jsfloat(endtime_room)%>))
{
$.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), FcltCallbackAndThenAlways(res_submit_callback), "json");
return true;
}
else
return false;
}
function res_cancel()
{
FcltMgr.closeDetail(window, { cancel: true } );
}
var new_item_key = 0; // Globaal
function res_addcat(elm)
{
new_item_key = new_item_key -1;
var $tr = $(elm).closest("tr");
var $clone = $tr.clone();
var artkey = $tr.attr("id").substring(3);
var res_rsv = artkey +"_"+ new_item_key;
// De clone bijwerken..
$clone.find(':button').parent().remove(); // De toevoeg knop eraf halen.
$("[id^='inpbh1_c_']",$clone).val(""); // Urenveld leeg maken.
// Nieuwe unieke id's aan de velden toekennen.
$("[id^='inpb_c_']", $clone).attr({id: "inpb_c_" +res_rsv, name: "inpb_c_" +res_rsv});
$("[id^='inpbp_c_']", $clone).attr({id: "inpbp_c_" +res_rsv, name: "inpbp_c_" +res_rsv});
$("[id^='inpbtp_c_']",$clone).attr({id: "inpbtp_c_"+res_rsv, name: "inpbtp_c_"+res_rsv});
$("[id^='inpbh1_c_']",$clone).attr({id: "inpbh1_c_"+res_rsv, name: "inpbh1_c_"+res_rsv});
$("[id^='inpbm1_c_']",$clone).attr({id: "inpbm1_c_"+res_rsv, name: "inpbm1_c_"+res_rsv});
// Voeg clone onder de huidige regel toe.
$tr.after($clone);
$("[id^='inpbh1_c_']",$clone).focus(); // Zet cursor in urenveld.
FcltMgr.resized();
}
function showTotPriceArt_ex(elm)
{
var $tr = $(elm).closest("tr");
var inpb_c = $("[id^='inpb_c_']", $tr).attr("id");
var res_rsv = inpb_c.substr(7);
showTotPriceArt(res_rsv);
}
</script>
</head>
<body id="editbody">
<% var buttons = [ {title: L("lcl_submit"), icon: "opslaan.png", action:"res_submit()", singlepress: true, id:"btn_objcat_submit" },
{title: L("lcl_cancel"), icon: "undo.png", action:"res_cancel()" } ];
IFRAMER_HEADER(L("lcl_res_frame_voorziening"), buttons);
%>
<div id="edit">
<form name="u2" method="post" action="res_edit_objcat_save.asp?urole=<%=urole%>&rsv_ruimte_key=<%=rsv_ruimte_key%>&verynew=<%=verynew%>">
<%
// ==========================================================================
// Description: Bouwen van het voorzieningen edit blok voor een reservering
// Tel in elke catalogus hoeveel objecten in de gekozen ruimte echt gereservererd kunnen worden.
// Als dat er nul zijn dan tonen we de discipline namelijk niet.
var params = { alg_ruimte_key : alg_ruimte_key,
res_ruimte_key : res_ruimte_key,
select_fields : " count(*) ",
sdisc : "dis.ins_discipline_key",
autfunction : autfunction,
res_tot : res_tot
};
var sql_aantal = " ( " + get_res_deel_sql(params) + ") aantal ";
sql= "SELECT dis.ins_discipline_key,"
+ " "+ lcl.xsqla('dis.ins_discipline_omschrijving','dis.ins_discipline_key') +","
+ " DIS.ins_discipline_kpnverplicht,"
+ sql_aantal
+ " FROM res_v_aanwezigdiscipline dis"
+ " WHERE ins_discipline_min_level = 1"
+ " AND dis.ins_discipline_key IN("
+ " SELECT g.ins_discipline_key FROM fac_v_webgebruiker g, fac_functie f "
+ " WHERE g.fac_functie_key = f.fac_functie_key "
+ " AND f.fac_functie_code = " + safe.quoted_sql(autfunction)
+ " AND g.fac_gebruiker_alg_level_write < 9"
+ " AND g.fac_gebruiker_prs_level_write < 9"
+ " AND g.prs_perslid_key = " + user_key
+ " )"
+ " AND dis.ins_discipline_key IN"
+ " (SELECT res_discipline_key" /* DISTINCT */
+ " FROM res_deel R, ins_deel D"
+ " WHERE r.res_deel_verwijder IS NULL"
+ " AND r.res_ins_deel_key = d.ins_deel_key)"
+ " AND EXISTS (SELECT res_activiteit_key FROM res_activiteitdiscipline rad"
+ " WHERE rad.res_discipline_key = dis.ins_discipline_key"
+ " AND rad.res_activiteit_key = " + activiteit_key
+ " )";
if (disc_key > 0 && res_deel_key < 0) sql = sql + " AND dis.ins_discipline_key = " + disc_key;
if (S("vis_parking_key") != -1) sql = sql + " AND dis.ins_discipline_key != " + S("vis_parking_key");
if (S("res_fe_discs_only_in_res") != -1 && !fronto && !backo && restype == 'CV')
sql = sql + " AND dis.ins_discipline_key NOT IN (" + S("res_fe_discs_only_in_res") + ") ";
sql = sql + " ORDER BY ins_discipline_volgnr, 2";
oRs1 = Oracle.Execute(sql);
first = true;
while(!oRs1.eof)
{
var curr_disc_key = oRs1("ins_discipline_key").value;
var existing = false; // zodadelijk highlighten
sql = "SELECT COUNT(res_rsv_deel_key) aantal"
+ " FROM res_rsv_deel rrd"
+ " , res_deel rd"
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key
+ " AND res_rsv_deel_verwijder IS NULL"
+ " AND rrd.res_deel_key = rd.res_deel_key"
+ " AND res_discipline_key = " + curr_disc_key
var oRs2 = Oracle.Execute(sql);
existing = (oRs2("aantal").value > 0);
if (oRs1("aantal").value != 0)
{
if (first)
{
BLOCK_START("resObj",L("lcl_res_objects") + " <a href='javascript:openLegenda()'><span class='fa fa-list-ul details' title='"+L("lcl_res_legenda")+"'></span></a>", { ishtmlsafe: true });
%>
<tr>
<td>
<% if (res_van.midnight().getTime() != res_tot.midnight().getTime())
{
Response.Write(toDateString(res_van.midnight()));
Response.Write(" " + L("lcl_res_totenmet") + " " + toDateString(res_tot.midnight()));
}
%> </td>
</tr>
<% first = false;
}
%>
<tr>
<td>
<% if (!has_kostenplaats_key && oRs1("ins_discipline_kpnverplicht").value == 1)
{
var loading_txt = L("lcl_select_account_disc");
%>
<div class="objcatline fa notavailable">
<%=safe.html(oRs1("ins_discipline_omschrijving").value)%>
<%=(existing? " (" + oRs2("aantal").value + ")" : "")%>
<% }
else
{
var loading_txt = L("lcl_shared_loading");
%>
<div class="objcatline <%=(existing? " existing" : "")%>
<%=disc_key != curr_disc_key? " closed" : ""%>"
onClick="ItemChoosed_obj(this, 'div_dis<%=curr_disc_key%>',<%=curr_disc_key%>, <%=hour_px%>)">
<a>
<i class='fa fa-lg fa-<%=disc_key != curr_disc_key?'plus':'minus'%>-square-o' style='position:relative;left:-15px;width:0px;'></i>
<%=safe.html(oRs1("ins_discipline_omschrijving").value)%>
<%=(existing? " (" + oRs2("aantal").value + ")" : "")%>
</a>
<% } %>
<div class="objcatdiv" id="div_dis<%=curr_disc_key%>" onClick="FcltMgr.stopPropagation(event)">
<% // Hier wordt met Ajax obj_schedule.asp code tussen geplakt bij openklappen
if (disc_key == curr_disc_key)
make_plan_obj(curr_disc_key, res_van, res_tot,
{ hour_px: hour_px,
rsv_ruimte_key: rsv_ruimte_key,
res_deel_key: res_deel_key,
autfunction: autfunction
});
else
Response.Write(loading_txt);
%>
</div>
</div>
</td>
</tr>
<% }
oRs1.MoveNext();
}
oRs1.close();
if (!first)
BLOCK_END();
%>
<script>
function openLegenda()
{
params = { width: 125,
resizable: false,
position: {my: "right top", at: "right top+30"},
title: '<%=L("lcl_res_legenda")%>'
}
$('div#legenda').dialog(params).dialog('open');
}
</script>
<div id="legenda" style="display:none; line-height: 30px;">
<table id='planbordlegenda'>
<tr><td class="res_optie"><%= L("lcl_optie") %></td></tr>
<tr><td class="res_definitief"><%= L("lcl_def") %></td></tr>
<tr><td class="res_blok"><%= L("lcl_blokkade") %></td></tr>
<tr><td class="res_vervallen"><%= L("lcl_vervallen") %></td></tr>
</table>
</div>
<% // ==========================================================================
// Description: Bouwen van het catering edit blok voor een reservering
BLOCK_START("resCat",L("lcl_consumable_objects"));
if (res_meerdaags && !S("res_allow_multi_cat"))
{
%> <div class="warning"><%=L("lcl_res_allow_multi_cat")%></div><%
}
else
{ // begin: Toon catering
// Bepaal de catalogie waar wij rechten op hebben en die mogelijk zijn in 'onze' ruimte
fixed_room = (portal_alg_ruimte_key > 0);
sql = "SELECT d.ins_discipline_key"
+ " , "+ lcl.xsqla('d.ins_discipline_omschrijving','d.ins_discipline_key')
+ " , d.ins_discipline_kpnverplicht"
+ " FROM RES_v_aanwezigDISCIPLINE d"
+ " WHERE ins_discipline_min_level = 2"
+ " AND d.ins_discipline_key IN ("
+ " SELECT ins_discipline_key"
+ " FROM fac_v_webgebruiker g,"
+ " fac_functie f "
+ " WHERE g.fac_functie_key = f.fac_functie_key "
+ " AND f.fac_functie_code = " + safe.quoted_sql(autfunction) + " "
+ " AND g.prs_perslid_key = " + user_key
+ " AND fac_gebruiker_prs_level_write < 9"
+ " AND fac_gebruiker_alg_level_write < 9"
+ " AND d.ins_discipline_key IN"
// RES_V_SRTARTIKEL_ONRGOED i.p.v. res_v_srtartikel_ruimte:
// niet alleen kijken naar max(prio) 'R' (ruimte) maar ook naar onderliggende prio's 'L' (locatie) en 'G' (gebouw)
// In de view res_v_srtartikel_ruimte wordt alleen naar de maximale prio gekeken van een bepaalde alg_ruimte_key
+ " (SELECT res_discipline_key"
+ " FROM res_v_srtartikel_onrgoed "
+ " WHERE 1 = 1 "
if (fixed_room) sql += " AND alg_onrgoed_niveau = 'R'";
if (alg_ruimte_key > 0)
sql += " AND alg_ruimte_key = " + alg_ruimte_key + ")) ";
else
{
if (rsv_ruimte_key > 0)
sql += " AND alg_ruimte_key IN"
+ " (SELECT alg_ruimte_key"
+ " FROM res_v_rsv_ruimte_2_alg_ruimte "
+ " WHERE res_alg_ruimte_verwijder IS NULL "
+ " AND res_rsv_ruimte_key = " + rsv_ruimte_key + ")))"
}
sql += " AND EXISTS (select res_activiteit_key from res_activiteitdiscipline rad"
+ " WHERE rad.res_discipline_key = d.ins_discipline_key"
+ " AND rad.res_activiteit_key = " + activiteit_key
+ " )"
+ " ORDER BY ins_discipline_volgnr, 2";
oRs = Oracle.Execute(sql);
while (!oRs.eof)
{
var curr_disc_key = oRs("ins_discipline_key").value;
var existing = false; // zodadelijk highlighten
// Bepaal aantal artikelen bij een reservering inclusief eventueel meegegeven artikel via res_artikel_key parameter
if (rsv_ruimte_key > 0)
{ // Hoeveel gereserveerde artikelen zijn er voor deze reservering.
sql = "SELECT COUNT(*) aantal"
+ " FROM res_rsv_artikel rra,"
+ " res_artikel ra"
+ " WHERE rra.res_rsv_ruimte_key = " + rsv_ruimte_key
+ " AND res_rsv_artikel_verwijder IS NULL"
+ " AND rra.res_artikel_key = ra.res_artikel_key"
+ " AND res_discipline_key = " + curr_disc_key
var oRs2 = Oracle.Execute(sql);
var aantal = oRs2("aantal").value;
if (res_artikel_key > 0)
{ // Zit het meegegeven artikel in deze discipline, dan 1 bij het aantal optellen.
sql = "SELECT COUNT(*) aantal"
+ " FROM res_artikel ra"
+ " WHERE res_discipline_key = " + curr_disc_key
+ " AND ra.res_artikel_key = " + res_artikel_key;
var oRs2 = Oracle.Execute(sql);
aantal += oRs2("aantal").value;
}
existing = (aantal > 0);
}
%>
<tr>
<td>
<% if (!has_kostenplaats_key && oRs("INS_DISCIPLINE_KPNVERPLICHT").value == 1)
{
var loading_txt = L("lcl_select_account_disc");
%>
<div class="objcatline notavailable">
<%=safe.html(oRs("ins_discipline_omschrijving").Value)%>
<% }
else
{
var loading_txt = L("lcl_shared_loading");
%>
<div class="objcatline <%=(existing?" existing ":" closed")%> "
onClick="ItemChoosed_cat(this, $('#div_dis'+<%=curr_disc_key%>),<%=curr_disc_key%>, <%=(existing?"true":"false")%>)">
<a>
<i class='fa fa-lg fa-<%=existing?'minus':'plus'%>-square-o' style='position:relative;left:-15px;width:0px;'></i>
<%=safe.html(oRs("ins_discipline_omschrijving").Value)%>
</a>
<% }%>
<div class="objcatdiv" id="div_dis<%=curr_disc_key%>" onClick="FcltMgr.stopPropagation(event)">
<% // Hier wordt met Ajax res_load_cat.asp code tussen geplakt bij openklappen
if (existing)
make_cat(curr_disc_key, rsv_ruimte_key, true, res_artikel_key);
else
Response.Write(loading_txt)
%>
</div>
</div>
</td>
</tr>
<% oRs.MoveNext();
}
oRs.Close();
} // einde: Toon catering
BLOCK_END();
IFACE.FORM_END();
%>
</form>
</div>
</body>
</html>