349 lines
16 KiB
HTML
349 lines
16 KiB
HTML
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: res_cat.inc
|
|
Description functie make_cat maakt de tabel voor een enkele catering catalogus
|
|
|
|
Parameters:
|
|
Context: vanuit resres_edit_objcat voor bestaande
|
|
Vanuit res_edit_objcat/res_plan.js ad hoc
|
|
|
|
*/
|
|
|
|
function make_cat(discipline_key, rsv_ruimte_key, existing_only, res_artikel_key) // existing begint compressed
|
|
{
|
|
var any_noshow = false;
|
|
|
|
// Zo snel mogelijk relevante basisinformatie opzoeken
|
|
var sql = "SELECT COALESCE(ks.prs_kostensoort_btw, 0) inclBTW"
|
|
+ " FROM prs_kostensoort ks"
|
|
+ " , res_discipline rd"
|
|
+ " WHERE ks.prs_kostensoort_key = rd.prs_kostensoort_key"
|
|
+ " AND rd.ins_discipline_key = " + discipline_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var inclBTW = (!oRs.eof? oRs("inclBTW").Value : 0);
|
|
|
|
sql = "SELECT res_rsv_ruimte_van, res_rsv_ruimte_tot,"
|
|
+ " res_rsv_ruimte_bezoekers, "
|
|
+ " prs_kostenplaats_key"
|
|
+ " FROM res_rsv_ruimte"
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
oRs = Oracle.Execute(sql);
|
|
var res_van = new Date(oRs("res_rsv_ruimte_van").Value);
|
|
var res_tot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
|
var res_vis = oRs("res_rsv_ruimte_bezoekers").Value;
|
|
if (!kpl_ksrt_validate(oRs("prs_kostenplaats_key"), null, discipline_key))
|
|
{
|
|
%><script type="text/javascript">
|
|
alert(L("lcl_res_kpks_validatie"));
|
|
</script>
|
|
<%
|
|
Response.End()
|
|
}
|
|
|
|
var this_res = res.func_enabled(rsv_ruimte_key, discipline_key); // wat mag ik zoal op deze catalogus
|
|
//user.auth_required_or_abort(this_res.canChange);
|
|
var backo = this_res.canWrite("WEB_RESBOF");
|
|
var fronto = this_res.canWrite("WEB_RESFOF");
|
|
|
|
if (!backo && !fronto && res_van < res.discipline_expire(discipline_key))
|
|
{ %>
|
|
<script type="text/javascript">
|
|
alert("<%=safe.jsstring(L("lcl_res_lastmin") + L("lcl_res_only_chance_after") + toDateTimeString(res.discipline_expire(discipline_key)))%>");
|
|
</script>
|
|
<%
|
|
Response.End()
|
|
}
|
|
oRs.Close()
|
|
|
|
hour1 = res_van.getHours();
|
|
min1 = res_van.getMinutes();
|
|
|
|
// Haal bestaande gereserveerde artikelen op inclusief eventueel meegegeven artikel via res_artikel_key parameter
|
|
var existing_res = new Array();
|
|
sql_a = "SELECT res_artikel_key"
|
|
+ " , res_rsv_artikel_key"
|
|
+ " , res_rsv_artikel_aantal"
|
|
+ " , res_rsv_artikel_levering"
|
|
+ " , res_rsv_artikel_prijs"
|
|
+ " , res_rsv_artikel_dirtlevel"
|
|
+ " , res_status_BO_key"
|
|
+ " , ROW_NUMBER() OVER (PARTITION BY res_artikel_key ORDER BY res_rsv_artikel_key) volgnr"
|
|
+ " FROM (SELECT r_r_art.res_artikel_key"
|
|
+ " , r_r_art.res_rsv_artikel_key"
|
|
+ " , r_r_art.res_rsv_artikel_aantal"
|
|
+ " , r_r_art.res_rsv_artikel_levering"
|
|
+ " , r_r_art.res_rsv_artikel_prijs"
|
|
+ " , r_r_art.res_rsv_artikel_dirtlevel"
|
|
+ " , r_r_art.res_status_BO_key"
|
|
+ " FROM res_v_aanwezigartikel r_art"
|
|
+ " , res_v_aanwezigrsv_artikel r_r_art"
|
|
+ " WHERE r_r_art.res_rsv_ruimte_key = " + rsv_ruimte_key
|
|
+ " AND r_art.res_discipline_key = " + discipline_key
|
|
+ " AND r_r_art.res_artikel_key = r_art.res_artikel_key"
|
|
+ (res_artikel_key > 0
|
|
? " UNION" // Meegegeven artikel via res_artikel_key parameter
|
|
+" SELECT r_art.res_artikel_key"
|
|
+ " , NULL"
|
|
+ " , 0"
|
|
+ " , NULL"
|
|
+ " , NULL"
|
|
+ " , 0"
|
|
+ " , NULL"
|
|
+ " FROM res_v_aanwezigartikel r_art"
|
|
+ " WHERE r_art.res_artikel_key = " + res_artikel_key
|
|
+ " AND r_art.res_discipline_key = " + discipline_key // Artikel moet wel tot de juiste discipline behoren
|
|
: "")
|
|
+ " ORDER BY res_artikel_key, res_rsv_artikel_levering"
|
|
+ ")";
|
|
|
|
oRs_a = Oracle.Execute(sql_a);
|
|
var first = true;
|
|
var res_artikel_key_str = "";
|
|
while (!oRs_a.eof)
|
|
{
|
|
existing_res.push({ artikel_key : oRs_a("res_artikel_key").Value,
|
|
rsv_artikel_key : oRs_a("res_rsv_artikel_key").Value,
|
|
rsv_artikel_aantal : oRs_a("res_rsv_artikel_aantal").Value,
|
|
rsv_artikel_levering: new Date(oRs_a("res_rsv_artikel_levering").Value),
|
|
rsv_artikel_prijs : oRs_a("res_rsv_artikel_prijs").Value,
|
|
status_BO_key : oRs_a("res_status_BO_key").Value
|
|
});
|
|
res_artikel_key_str += (first? "" : ", ") + oRs_a("res_artikel_key").Value;
|
|
first = false;
|
|
oRs_a.MoveNext();
|
|
}
|
|
oRs_a.close();
|
|
|
|
var ora_date1 = res_van.beginToSQL();
|
|
var res_start_date = res_van.toSQL(true);
|
|
var res_end_date = res_tot.toSQL(true);
|
|
// Alle mogelijke artikelen
|
|
sql = "SELECT ra.res_artikel_key"
|
|
+ " , " + lcl.xsql('ra.res_artikel_omschrijving', 'ra.res_artikel_key') + " ||"
|
|
+ " CASE"
|
|
+ " WHEN (ra.res_artikel_ingangsdatum IS NULL OR ra.res_artikel_ingangsdatum <= SYSDATE) AND"
|
|
+ " (ra.res_artikel_vervaldatum IS NULL OR ra.res_artikel_vervaldatum > SYSDATE)"
|
|
+ " THEN ''"
|
|
+ " ELSE " + safe.quoted_sql(L("lcl_inactive_data_suffix"))
|
|
+ " END res_artikel_omschrijving"
|
|
+ " , " + lcl.xsqla('ra.res_artikel_opmerking', 'ra.res_artikel_key')
|
|
+ " , COALESCE(ra.res_artikel_default, 0) res_artikel_default"
|
|
+ " , CASE" // Toon de flexibele prijs of vaste prijs.
|
|
+ " WHEN (ra.res_artikel_prijs_vast = 0)"
|
|
+ " THEN COALESCE(aa.res_rsv_artikel_prijs / aa.res_rsv_artikel_aantal, ra.res_artikel_prijs)"
|
|
+ " ELSE ra.res_artikel_prijs"
|
|
+ " END prijs"
|
|
+ " , " + lcl.xsqla('ra.res_artikel_eenheid', 'ra.res_artikel_key')
|
|
+ " , ra.res_artikel_prijs_vast"
|
|
+ " , CASE"
|
|
+ " WHEN (ra.res_artikel_ingangsdatum IS NULL OR ra.res_artikel_ingangsdatum <= " + ora_date1 + ")"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END ingang"
|
|
+ " , CASE"
|
|
+ " WHEN (ra.res_artikel_vervaldatum IS NULL OR ra.res_artikel_vervaldatum > " + ora_date1 + ")"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END verval"
|
|
+ " , aa.res_rsv_artikel_dirtlevel"
|
|
+ " , COALESCE(ra.res_artikel_minimum, 0) res_artikel_minimum"
|
|
+ " , ra.res_artikel_flags"
|
|
+ " , COALESCE(ra.res_artikel_begintijd, " + S("res_t1") + ") res_artikel_begintijd"
|
|
+ " , COALESCE(ra.res_artikel_eindtijd, " + S("res_t2") + ") res_artikel_eindtijd"
|
|
+ " , aa.res_rsv_artikel_key"
|
|
+ " , aa.res_rsv_artikel_aantal"
|
|
+ " , aa.res_rsv_artikel_levering"
|
|
+ " , aa.res_rsv_artikel_prijs"
|
|
+ " , aa.res_status_BO_key"
|
|
+ " , COALESCE(aa.volgnr, ra.res_artikel_flags) volgnr"
|
|
+ " FROM res_v_aanwezigartikel ra"
|
|
+ " , (" + sql_a + ") aa"
|
|
+ " WHERE (ra.res_discipline_key = " + discipline_key
|
|
+ " AND aa.res_artikel_key(+) = ra.res_artikel_key"
|
|
+ " AND (ra.res_artikel_ingangsdatum IS NULL OR ra.res_artikel_ingangsdatum <= " + ora_date1 + ")"
|
|
+ " AND (ra.res_artikel_vervaldatum IS NULL OR ra.res_artikel_vervaldatum > " + ora_date1 + "))"
|
|
// Kijken of een artikel in de reserveringstijd gekozen kan worden. Anders niet tonen.
|
|
// 1) Begintijd artikel <= einde reservering.
|
|
// 2) Eindtijd artikel >= begin reservering.
|
|
+ " AND " + ora_date1 + " + COALESCE(ra.res_artikel_begintijd, " + S("res_t1") + ") / 24 <= " + res_end_date
|
|
+ " AND " + ora_date1 + " + COALESCE(ra.res_artikel_eindtijd, " + S("res_t2") + ") / 24 >= " + res_start_date
|
|
+ " ORDER BY ra.res_artikel_volgnummer"
|
|
+ " , " + lcl.xsql('ra.res_artikel_omschrijving', 'ra.res_artikel_key')
|
|
+ " , aa.volgnr";
|
|
|
|
oRs = Oracle.Execute(sql);
|
|
|
|
if (!backo && res_van < res.discipline_expire(discipline_key))
|
|
Response.Write(L("lcl_res_warnBO"));
|
|
%>
|
|
|
|
<table cellspacing='0' id='table_dis<%=discipline_key%>' class='tab_cat_sched <%=existing_only?" compressed":""%>'
|
|
catExpire="<%=res.discipline_expire(discipline_key).getTime()%>">
|
|
<thead><tr>
|
|
<th><%=L("lcl_object")%></th>
|
|
<th><%=L("lcl_count")%></th>
|
|
<th><%=L("lcl_r_price5") + " " + (inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW"))%></th>
|
|
<th><%=L("lcl_r_price7")%></th>
|
|
<th colspan="2"><%=L("lcl_time")%></th>
|
|
</tr></thead>
|
|
<tbody>
|
|
<%
|
|
while (!oRs.eof)
|
|
{
|
|
var art_text= oRs("res_artikel_omschrijving").Value + (oRs("res_artikel_eenheid").Value? " (" + oRs("res_artikel_eenheid").Value + ")" : "");
|
|
var ch = res_van.getHours();
|
|
var cm = res_van.getMinutes();
|
|
var aantal = oRs("res_artikel_default")*res_vis;
|
|
var cprice = oRs("prijs").Value; // catalogusprijs
|
|
var cpricefix = (backo ? oRs("res_artikel_prijs_vast").Value : 1);
|
|
var cstatus_reado = false;
|
|
var ingang = oRs("ingang").Value;
|
|
var verval = oRs("verval").Value;
|
|
var dirty = oRs("res_rsv_artikel_dirtlevel").Value & (res.dirtlevel.artikel.notavailable | res.dirtlevel.artikel.notallowed);
|
|
var minimum = oRs("res_artikel_minimum").Value;
|
|
var resflag = oRs("res_artikel_flags").Value == 1;
|
|
var begintijd = oRs("res_artikel_begintijd").Value;
|
|
var eindtijd = oRs("res_artikel_eindtijd").Value;
|
|
var art_key = oRs("res_artikel_key").Value;
|
|
var rsv_art_key = oRs("res_rsv_artikel_key").Value || 0;
|
|
var volgnr = oRs("volgnr").Value;
|
|
var art_str = art_key + "_" + rsv_art_key;
|
|
|
|
// Zoek of ons artikel al gereserveerd was: dan nemen we het oude tijdstip en aantal over
|
|
var existing = false; // zodadelijk highlighten
|
|
for (j = 0; j < existing_res.length; j++)
|
|
{
|
|
if (existing_res[j].artikel_key == oRs("res_artikel_key").Value && existing_res[j].rsv_artikel_key == oRs("res_rsv_artikel_key").Value)
|
|
{
|
|
existing = true;
|
|
|
|
aantal = existing_res[j].rsv_artikel_aantal;
|
|
if (aantal > 0)
|
|
{ // Gereserveerd artikel. Gebruik opgeslagen gegevens.
|
|
ch = existing_res[j].rsv_artikel_levering.getHours();
|
|
cm = existing_res[j].rsv_artikel_levering.getMinutes();
|
|
// De opgeslagen prijs nemen uit res_rsv_artikel als:
|
|
// 1) de prijs vrij invulbaar is.
|
|
// 2) de deelreservering afgemeld is en de opgeslagen prijs bevroren is.
|
|
if ((cpricefix == 0 || existing_res[j].status_BO_key >= 5) && existing_res[j].rsv_artikel_prijs != null)
|
|
cprice = existing_res[j].rsv_artikel_prijs / aantal;
|
|
if (existing_res[j].status_BO_key==6) cstatus_reado = true;
|
|
}
|
|
}
|
|
}
|
|
any_noshow = any_noshow || (existing_only && !existing); // die hidden we initieel namelijk
|
|
ch = (ch<10?'0'+ch:ch);
|
|
cm = (cm<10?'0'+cm:cm);
|
|
|
|
%> <tr id='row<%=art_key%>'
|
|
class="catline <%=(ingang == 0 || verval == 0 || dirty? " res_fatal " : "")%> <%=(existing? " existing" : " notexisting")%>"
|
|
>
|
|
<%
|
|
// artikel_opmerking in popupje tonen
|
|
// Over de omschrijving doen we geen safe.html zodat HTML code gebruikt kan worden
|
|
// Voor het gemak wel \n --> <br>
|
|
var str = "";
|
|
if (oRs("res_artikel_opmerking").Value)
|
|
{
|
|
str = "<b>" + safe.html(oRs("res_artikel_omschrijving").Value) + ":</b><br>"
|
|
+ String(oRs("res_artikel_opmerking").Value).replace(/\n/g, "<br>");
|
|
|
|
%> <td class="label"
|
|
OnMouseOver="showOpmerking('#remark_cat<%=art_key%>', event);"
|
|
OnMouseOut="$('#remark_cat<%=art_key%>').hide();">
|
|
<label <%=(ingang == 0 || verval == 0?'style="margin-left:20px;"':'')%>><%=safe.html(art_text)%></label>
|
|
<div class="res_remark" id="remark_cat<%=art_key%>">
|
|
<%=str%>
|
|
</div>
|
|
</td>
|
|
<% }
|
|
else
|
|
{ /* heel simpel */ %>
|
|
<td class="label"><label><%=safe.html(art_text)%></label></td>
|
|
<% } %>
|
|
<td>
|
|
<input type='number' id="inpb_c_<%=art_str%>"
|
|
class='fld_catamount'
|
|
name="inpb_c_<%=art_str%>"
|
|
value="<%=aantal%>"
|
|
minimum="<%=minimum%>"
|
|
size="4"
|
|
<%=(cstatus_reado? "readonly style='background-color: #dddddd;' " : "")%>
|
|
onblur='showTotPriceArt_ex(this);checkResTime(this, "<%=art_str%>");'>
|
|
<% if (existing && aantal == 0)
|
|
{ /* Cursor in het aantal veld van meegegeven artikel (res_artikel_key) */
|
|
%> <script type="text/javascript">
|
|
jQuery(document).ready(function()
|
|
{
|
|
$("#inpb_c_<%=art_str%>").select();
|
|
});
|
|
</script>
|
|
<% } %>
|
|
</td>
|
|
<td>
|
|
<% // Voeg prijs en totaalprijs toe
|
|
if (cpricefix == 1 || cstatus_reado || !backo)
|
|
RWFIELD("inpbp_c_" + art_str, "rescat_p_c", null, !isNaN(cprice)? safe.curr(cprice) : "0", { readonly: true })
|
|
else
|
|
RWFIELD("inpbp_c_" + art_str, "rescat_p_c", null, !isNaN(cprice)? safe.curreditable(cprice) : "0",
|
|
{datatype: "number", html: "size=9 onfocus='this.select()' onblur='showTotPriceArt_ex(this);'" });
|
|
%>
|
|
</td>
|
|
<td>
|
|
<% RWFIELD("inpbtp_c_" + art_str, "rescat_tp_c", null, !isNaN(cprice * aantal)? safe.curr(cprice * aantal) : "0", { readonly: true }); %>
|
|
</td>
|
|
|
|
<td>
|
|
<input type='number' id='inpbh1_c_<%=art_str%>'
|
|
class='fld_cattime'
|
|
name='inpbh1_c_<%=art_str%>'
|
|
value='<%=ch%>'
|
|
maxlength='2' size='2'
|
|
onblur='checkResTime(this, "<%=art_str%>");'
|
|
<%=(cstatus_reado? "readonly style='background-color: #dddddd;' " : "")%>>
|
|
<input type="hidden" id="inpbb1_c_<%=art_str%>" value="<%=safe.jsfloat(begintijd)%>">
|
|
<input type="hidden" id="inpbe1_c_<%=art_str%>" value="<%=safe.jsfloat(eindtijd)%>">
|
|
</td>
|
|
<td>
|
|
<input type='number' id='inpbm1_c_<%=art_str%>'
|
|
class='fld_cattime'
|
|
name='inpbm1_c_<%=art_str%>'
|
|
value='<%=cm%>'
|
|
maxlength='2' size='2'
|
|
onblur='checkResTime(this, "<%=art_str%>");'
|
|
<%=(cstatus_reado?"readonly style='background-color: #dddddd;' ":"")%>>
|
|
</td>
|
|
<%
|
|
if (resflag && volgnr==1)
|
|
{
|
|
%>
|
|
<td>
|
|
<input type='button' id='btnmore_<%=art_key%>' name='btnmore_<%=art_key%>' value='<%=L("lcl_res_add_catering")%>'
|
|
class="addcatering"
|
|
onclick="res_addcat(this)"
|
|
title="<%=safe.html(L("lcl_res_add_catering_remark"))%>"
|
|
>
|
|
</td>
|
|
<%
|
|
}
|
|
%>
|
|
</tr>
|
|
<%
|
|
oRs.MoveNext();
|
|
}
|
|
%>
|
|
</tbody>
|
|
</table><%
|
|
if (any_noshow)
|
|
{ %>
|
|
<div class="resplanbordlimited" onclick="$('#table_dis<%=discipline_key%>').removeClass('compressed');$(this).toggle();FcltMgr.resized(window)">
|
|
<a><%=L("lcl_res_show_full_cat_catalogus")%></a>
|
|
</div>
|
|
<%
|
|
}
|
|
}
|
|
%>
|
|
|