Files
Facilitor/APPL/RES/res_cat.inc
Jos Groot Lipman 5dd2ffe7bb PNBR#36941 Foto bij res_deel en res_artikel ook prodsearch en eigen folder
svn path=/Website/trunk/; revision=30552
2016-09-05 12:28:12 +00:00

355 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')
+ " , res_artikel_image"
+ " , 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
var safe_tooltip = "<b>" + safe.html(oRs("res_artikel_omschrijving").Value) + ":</b><br>";
if (oRs("res_artikel_image").Value)
{
var image_url = S("res_image_path") + oRs("res_artikel_image").Value;
safe_tooltip += "<img class='resartikelfoto' style='height:100px' theSrc='"+safe.htmlattr(image_url)+"'><br>"
}
// Over de opmerking doen we geen safe.html zodat HTML code gebruikt kan worden
// Voor het gemak wel \n --> <br>
if (oRs("res_artikel_image").Value || oRs("res_artikel_opmerking").Value)
{
safe_tooltip += 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%>">
<%=safe_tooltip%>
</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>
<%
}
}
%>