Merge 2025.4 RC1 patches (ongoing)
svn path=/Website/trunk/; revision=70907
This commit is contained in:
@@ -132,7 +132,7 @@ BLOCK_END();
|
||||
|
||||
BLOCK_START("facFM", L("lcl_operations_block"), {icon: "fa-users-cog"});
|
||||
manRWFIELD("loc_volgnr", "fld", L("lcl_alg_locatie_volgnr"), loc_volgnr, {maxlength: 3});
|
||||
// FCLTtimezoneselector("alg_tz", { initVal: alg_tz }); -> 2025.4
|
||||
FCLTtimezoneselector("alg_tz", { initVal: alg_tz });
|
||||
FCLTcalendar("vervaldatum",
|
||||
{ datum: vervaldatum,
|
||||
initEmpty: vervaldatum==null,
|
||||
|
||||
@@ -109,6 +109,20 @@ if (geb_key == -1 && floor_key != -1) {
|
||||
geb_key = oRs("alg_gebouw_key").value;
|
||||
oRs.Close();
|
||||
}
|
||||
|
||||
var multi_tz = Session("time_zone") != S("fac_server_timezone"); // Hebben we te maken met een gebouw, gebruiker of server in een afwijkende tijdszone?
|
||||
if (!multi_tz) {
|
||||
var sql = "SELECT l.alg_locatie_timezone"
|
||||
+ " FROM alg_locatie l, alg_gebouw g"
|
||||
+ " WHERE g.alg_gebouw_key = " + geb_key
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var alg_tz = !oRs.EOF && oRs("alg_locatie_timezone").Value
|
||||
|| S("fac_server_timezone");
|
||||
oRs.Close();
|
||||
multi_tz = alg_tz != Session("time_zone");
|
||||
}
|
||||
|
||||
var hidenav = getQParamInt("hidenav", 0); // optie: toon geen floornavigator
|
||||
|
||||
var fac_usrrap_key = getQParamInt("fac_usrrap_key", S("fg_infobordreport_key")); // In de core is een default usrrap (res_v_rap_infobordframe) met key <12> gedefinieerd
|
||||
@@ -404,7 +418,7 @@ var /*global*/ resizeTimerID=null;
|
||||
Response.Write("<h2 class='floorscreen'>" + safe.html(oRs("alg_gebouw_naam").value) + "</h2>");
|
||||
if (datumfilter)
|
||||
{
|
||||
Response.Write("<h2 class='infodatumfilter'>" + toDateString(datumfilter, false, true) + "</h2>");
|
||||
Response.Write("<h2 class='infodatumfilter'>" + toDateString(datumfilter, { pretty: !multi_tz }) + "</h2>");
|
||||
if (showmode == 0)
|
||||
{
|
||||
Response.Write("<button onclick='to2D()'>2D</button'><button onclick='to3D()'>3D</button>");
|
||||
|
||||
@@ -595,8 +595,8 @@ function myIMGProcessor(IMGHandle)
|
||||
// Vertaal dat zo mogelijk naar alg_ruimte_key dan wel ins_deel_key
|
||||
function myFindKeys(SlnkEvent)
|
||||
{
|
||||
if (SlnkEvent.TextLabel != "" && SlnkEvent.TextLayer == "SLNK Labels")
|
||||
{ // Precies op ruimte label geklikt negeren we
|
||||
if (SlnkEvent.TextLabel != "" && (SlnkEvent.TextLayer == "SLNK Labels" || SlnkEvent.TextLayer == "SLNK Symbols"))
|
||||
{ // Precies op ruimte of object label geklikt negeren we
|
||||
SlnkEvent.TextLabel = "";
|
||||
SlnkEvent.TextLayer = "";
|
||||
}
|
||||
|
||||
@@ -325,6 +325,17 @@ function generateHeader()
|
||||
<% if (Application("otap_environment") == "O") { %>
|
||||
<a href='./fac_StreamFile.asp?logger=0' target='_blank'><button id='loggingshow'>Open logging</button></a>
|
||||
<% } %>
|
||||
<div id="tzwarning" style="background-color:#f88;padding:2px"></div>
|
||||
<script>
|
||||
var usertimezone = "<%=safe.jsstring(user.timezone())%>";
|
||||
var browsertimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
if (usertimezone && usertimezone != browsertimezone)
|
||||
{
|
||||
$(function () {
|
||||
$("#tzwarning").text("Let op: Windows tijdzone (" + browsertimezone + ") is anders dan Facilitor tijdzone (" + usertimezone + ")");
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
<%
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ function fnrowClass(oRs)
|
||||
var bostatuskey = oRs.Fields("bo_status_key").Value;
|
||||
|
||||
// visuele hint voor de actualiteit
|
||||
if (lthisdate.toDateString() == lnow.toDateString())
|
||||
if (lthisdate.toDateString() == lnow.toDateString()) // Dit is een rare, voor reserveringen is dit een datum in de TZ van de locatie, voor de rest de TZ van de user ..
|
||||
lclass += " today";
|
||||
else if (xmlnode != "melding" && xmlnode != "bestelling") // die lopen gewoon, reserveringen en afspraken zijn voorbij of toekomstig, en delen, ach.
|
||||
{
|
||||
@@ -295,6 +295,24 @@ function fnrowClass(oRs)
|
||||
return lclass;
|
||||
}
|
||||
|
||||
function fnDatum (oRs) {
|
||||
var val = oRs("datum").Value;
|
||||
if (oRs("xmlnode").Value == "reservering") { // Deze zijn al in de lokale tijdszone
|
||||
return toDateTimeString(val, { isLocal: true });
|
||||
} else {
|
||||
return toDateTimeString(val, { pretty: true });
|
||||
}
|
||||
}
|
||||
|
||||
function fnDatumEind(oRs) {
|
||||
var val = oRs("datum_eind").Value;
|
||||
if (oRs("xmlnode").Value == "reservering") { // Deze zijn al in de lokale tijdszone
|
||||
return toDateTimeString(val, { isLocal: true });
|
||||
} else {
|
||||
return toDateTimeString(val, { pretty: true, noMidnight: true });
|
||||
}
|
||||
}
|
||||
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
@@ -424,7 +442,7 @@ function fnrowClass(oRs)
|
||||
if ((faclist_columns & 2) == 2)
|
||||
rst.addColumn(new Column({caption: (outputmode == 0 ? I("fa-bell", { fastyle: "far" }) : L("lcl_mld_actiecode")), content: fnMark, align: "center", colName: "fnMark"}));
|
||||
if ((faclist_mode & 1) == 1)
|
||||
rst.addColumn(new Column({caption: L("lcl_myfacilities_date"), content: "datum", datatype: "datetime", prettydate: true }));
|
||||
rst.addColumn(new Column({caption: L("lcl_myfacilities_date"), content: fnDatum, datatype: "datetime" }));
|
||||
rst.addColumn(new Column({caption: L("lcl_faciliteit"), content: fncolType, colName: "fncolType"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_descr"), content: "detail"}));
|
||||
if ((faclist_columns & 4) == 4)
|
||||
@@ -437,7 +455,7 @@ function fnrowClass(oRs)
|
||||
if (urole == "fo" || (urole == "fe" && S("fac_flags_visible_for_fe") == 1))
|
||||
rst.addColumn(new Column({caption: L("lcl_fac_extra1"), content: fnExtra1, colName: "fnExtra1"}));
|
||||
if ((faclist_columns & 16) == 16)
|
||||
rst.addColumn(new Column({caption: L("lcl_myfacilities_enddate"), content: "datum_eind", datatype: "datetime", prettydate: true, nomidnight: true}));
|
||||
rst.addColumn(new Column({caption: L("lcl_myfacilities_enddate"), content: fnDatumEind, datatype: "datetime" }));
|
||||
if ((faclist_columns & 32) == 32)
|
||||
rst.addColumn(new Column({caption: L("lcl_place"), content: "plaats"}));
|
||||
if (S("facilities_flike_past") >= 0)
|
||||
|
||||
@@ -218,6 +218,14 @@ function fac_list_query (params)
|
||||
|
||||
if (params.showreservering)
|
||||
{
|
||||
var S_fac_server_timezone = S("fac_server_timezone");
|
||||
function toLocalDate(expr) {
|
||||
return "CAST ("
|
||||
+ "FROM_TZ (CAST ( " + expr + " AS TIMESTAMP), " + safe.quoted_sql(S_fac_server_timezone) + ")"
|
||||
+ " AT TIME ZONE COALESCE (l.alg_locatie_timezone, " + safe.quoted_sql(S_fac_server_timezone) + ") AS DATE)";
|
||||
}
|
||||
// Todo; Today Session("time_zone") <> SYSDATE?
|
||||
|
||||
clausesArr.push(
|
||||
"SELECT rr.res_rsv_ruimte_host_key prs_perslid_key" // 1 Host ruimtereservering
|
||||
+ " , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr item"
|
||||
@@ -228,8 +236,8 @@ function fac_list_query (params)
|
||||
+ " , 'reservering' xmlnode"
|
||||
+ " , " + lcl.xsql("ra.res_activiteit_omschrijving", "ra.res_activiteit_key") + " subtype"
|
||||
+ " , '5' soort"
|
||||
+ " , rr.res_rsv_ruimte_van datum"
|
||||
+ " , rr.res_rsv_ruimte_tot datum_eind"
|
||||
+ " , " + toLocalDate("rr.res_rsv_ruimte_van") + " datum"
|
||||
+ " , " + toLocalDate("rr.res_rsv_ruimte_tot") + " datum_eind"
|
||||
+ " , rr.res_rsv_ruimte_omschrijving detail"
|
||||
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT "+ lcl.xsql('ra.res_activiteit_omschrijving', 'ra.res_activiteit_key')
|
||||
+ " FROM res_activiteit ra "
|
||||
@@ -245,8 +253,20 @@ function fac_list_query (params)
|
||||
+ " , ra.res_activiteit_image image"
|
||||
+ sqlRecentdatum('rr.res_rsv_ruimte_key','reservering')
|
||||
+ " FROM res_v_aanwezigrsv_ruimte rr"
|
||||
+ " , res_activiteit ra "
|
||||
+ " , res_activiteit ra "
|
||||
+ " , res_ruimte_opstelling rro"
|
||||
+ " , res_alg_ruimte rar"
|
||||
+ " , alg_ruimte r"
|
||||
+ " , alg_verdieping v"
|
||||
+ " , alg_gebouw g"
|
||||
+ " , alg_locatie l"
|
||||
+ " WHERE ra.res_activiteit_key = rr.res_activiteit_key"
|
||||
+ " AND rro.res_ruimte_key = rar.res_ruimte_key"
|
||||
+ " AND rar.alg_ruimte_key = r.alg_ruimte_key"
|
||||
+ " AND r.alg_verdieping_key = v.alg_verdieping_key"
|
||||
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key"
|
||||
+ " AND rr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key"
|
||||
+ " AND rr.res_ruimte_opstel_key IS NOT NULL" // alleen reserveerbare ruimte
|
||||
+ " AND (rr.res_rsv_ruimte_tot > SYSDATE - " + S("facilitiespast_res") + " AND rr.res_rsv_ruimte_van < SYSDATE + " + S("facilitiesfuture") + ")"
|
||||
+ (params.specific_day
|
||||
@@ -265,8 +285,8 @@ function fac_list_query (params)
|
||||
+ " , 'reservering' xmlnode"
|
||||
+ " , " + lcl.xsql("ra.res_activiteit_omschrijving", "ra.res_activiteit_key") + " subtype"
|
||||
+ " , '7' soort"
|
||||
+ " , rr.res_rsv_ruimte_van datum"
|
||||
+ " , rr.res_rsv_ruimte_tot datum_eind"
|
||||
+ " , " + toLocalDate("rr.res_rsv_ruimte_van") + " datum"
|
||||
+ " , " + toLocalDate("rr.res_rsv_ruimte_tot") + " datum_eind"
|
||||
+ " , rr.res_rsv_ruimte_omschrijving oms"
|
||||
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT "+ lcl.xsql('ra.res_activiteit_omschrijving', 'ra.res_activiteit_key')
|
||||
+ " FROM res_activiteit ra "
|
||||
@@ -282,10 +302,18 @@ function fac_list_query (params)
|
||||
+ " , ra.res_activiteit_image image"
|
||||
+ sqlRecentdatum('rr.res_rsv_ruimte_key','reservering')
|
||||
+ " FROM res_v_aanwezigrsv_ruimte rr"
|
||||
+ " , res_v_aanwezigrsv_deel dd"
|
||||
+ " , res_deel rd "
|
||||
+ " , res_activiteit ra "
|
||||
+ " , res_v_aanwezigrsv_deel dd"
|
||||
+ " , res_deel rd "
|
||||
+ " , res_activiteit ra "
|
||||
+ " , alg_ruimte r"
|
||||
+ " , alg_verdieping v"
|
||||
+ " , alg_gebouw g"
|
||||
+ " , alg_locatie l"
|
||||
+ " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
|
||||
+ " AND r.alg_verdieping_key = v.alg_verdieping_key"
|
||||
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key"
|
||||
+ " AND r.alg_ruimte_key = rr.alg_ruimte_key"
|
||||
+ " AND rr.alg_ruimte_key IS NOT NULL" // niet in reserveerbare ruimte
|
||||
+ " AND ra.res_activiteit_key = rr.res_activiteit_key"
|
||||
+ " AND rd.res_deel_key = dd.res_deel_key"
|
||||
@@ -303,8 +331,8 @@ function fac_list_query (params)
|
||||
+ " , 'reservering' xmlnode"
|
||||
+ " , " + lcl.xsql("ra.res_activiteit_omschrijving", "ra.res_activiteit_key") + " subtype"
|
||||
+ " , '9' soort"
|
||||
+ " , rr.res_rsv_ruimte_van datum"
|
||||
+ " , rr.res_rsv_ruimte_tot datum_eind"
|
||||
+ " , " + toLocalDate("rr.res_rsv_ruimte_van") + " datum"
|
||||
+ " , " + toLocalDate("rr.res_rsv_ruimte_tot") + " datum_eind"
|
||||
+ " , rr.res_rsv_ruimte_omschrijving oms"
|
||||
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT "+ lcl.xsql('ra.res_activiteit_omschrijving', 'ra.res_activiteit_key')
|
||||
+ " FROM res_activiteit ra "
|
||||
@@ -319,10 +347,18 @@ function fac_list_query (params)
|
||||
+ " , (CASE WHEN res_rsv_artikel_approved = 1 THEN NULL ELSE res_rsv_artikel_approved END) mark" // 1 = alles akkoord: geen aanduiding
|
||||
+ " , ra.res_activiteit_image image"
|
||||
+ sqlRecentdatum('rr.res_rsv_ruimte_key','reservering')
|
||||
+ " FROM res_v_aanwezigrsv_ruimte rr"
|
||||
+ " FROM res_v_aanwezigrsv_ruimte rr"
|
||||
+ " , res_v_aanwezigrsv_artikel dd"
|
||||
+ " , res_activiteit ra "
|
||||
+ " , res_activiteit ra "
|
||||
+ " , alg_ruimte r"
|
||||
+ " , alg_verdieping v"
|
||||
+ " , alg_gebouw g"
|
||||
+ " , alg_locatie l"
|
||||
+ " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key "
|
||||
+ " AND r.alg_verdieping_key = v.alg_verdieping_key"
|
||||
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key"
|
||||
+ " AND r.alg_ruimte_key = rr.alg_ruimte_key"
|
||||
+ " AND rr.alg_ruimte_key IS NOT NULL" // niet in reserveerbare ruimte
|
||||
+ " AND ra.res_activiteit_key = rr.res_activiteit_key"
|
||||
+ " AND (rr.res_rsv_ruimte_tot > SYSDATE - " + S("facilitiespast_res") + " AND rr.res_rsv_ruimte_van < SYSDATE + " + S("facilitiesfuture") + ")"
|
||||
|
||||
@@ -163,8 +163,8 @@ var eindLevel;
|
||||
</td>
|
||||
</tr>
|
||||
<% }
|
||||
ROFIELDTR("datefrom", L("lcl_period_from"), toDateString(vandate, false, false, true), { suppressEmpty: true});
|
||||
ROFIELDTR("dateto", L("lcl_period_to"), toDateString(totdate, false, false, true), { suppressEmpty: true});
|
||||
ROFIELDTR("datefrom", L("lcl_period_from"), toDateString(vandate), { suppressEmpty: true});
|
||||
ROFIELDTR("dateto", L("lcl_period_to"), toDateString(totdate), { suppressEmpty: true});
|
||||
ROFIELDTR("fld", L("lcl_mes_send_date_time"), toDateTimeString(action_datum));
|
||||
BLOCK_END();
|
||||
BLOCK_START("msgPrs", L("lcl_msg_groep"), {icon: "fa-users"});
|
||||
|
||||
@@ -138,9 +138,9 @@ function fac_list(days_in_the_future)
|
||||
return "<div class='listbodykop'>"
|
||||
+ "<div>" + I("fa-clock") + " "
|
||||
+ (specific_day
|
||||
? toTimeString(oRs.Fields("datum").Value)
|
||||
: toDateTimeString(oRs.Fields("datum").Value, false, false, true))
|
||||
+ "-" + toTimeString(oRs.Fields("datum_eind").Value) + "</div>"
|
||||
? toTimeString(oRs.Fields("datum").Value, { isLocal: true })
|
||||
: toDateTimeString(oRs.Fields("datum").Value, { isLocal: true }))
|
||||
+ "-" + toTimeString(oRs.Fields("datum_eind").Value, { isLocal: true }) + "</div>"
|
||||
+ (oRs.Fields("plaats").Value ? "<div>" + I("fa-map-marker") + " " + oRs.Fields("plaats").Value + "</div>" : "")
|
||||
+ "</div>";
|
||||
},
|
||||
|
||||
@@ -287,9 +287,9 @@ function FOOTER(params)
|
||||
} %>
|
||||
|
||||
<footer class="fixed-bottom page-footer">
|
||||
<a href="Facilitor.asp" class="tappable"><%=I("fa-home fa-xl")%></a>
|
||||
<a href="fac_list.asp" class="tappable"><%=I("fa-ballot-check fa-xl")%></a>
|
||||
<a href="message_list.asp" class="tappable"<%=berichten ? ' data-badge="' + berichten + '"' : ''%>>
|
||||
<a href="<%=rooturl%>/appl/pda/Facilitor.asp" class="tappable"><%=I("fa-home fa-xl")%></a>
|
||||
<a href="<%=rooturl%>/appl/pda/fac_list.asp" class="tappable"><%=I("fa-ballot-check fa-xl")%></a>
|
||||
<a href="<%=rooturl%>/appl/pda/message_list.asp" class="tappable"<%=berichten ? ' data-badge="' + berichten + '"' : ''%>>
|
||||
<%=I("fa-bell fa-xl")%>
|
||||
<span class="fclt-noti-badge badge rounded-pill bg-danger"><%=berichten%></span>
|
||||
</a>
|
||||
@@ -313,7 +313,7 @@ function FOOTER(params)
|
||||
last_msg_oRs.Close();
|
||||
}
|
||||
oRs.Close();
|
||||
%> <a href="berichten.asp" class="tappable"<%=new_msg ? ' data-badge="!"' : ''%>><%=I("fa-circle-y fa-xl")%></a>
|
||||
%> <a href="<%=rooturl%>/appl/pda/berichten.asp" class="tappable"<%=new_msg ? ' data-badge="!"' : ''%>><%=I("fa-circle-y fa-xl")%></a>
|
||||
<% } %>
|
||||
<%=DROPDOWN(hamburger_actions)%>
|
||||
</footer>
|
||||
|
||||
@@ -55,9 +55,31 @@ if (rsv_ruimte_key > -1)
|
||||
// BESTAANDE DEELRESERVERING
|
||||
res.res_set_dialect(rsv_ruimte_key);
|
||||
var this_res = res.func_enabled(rsv_ruimte_key); // Wat heb ik zoal aan rechten op deze specifieke reservering
|
||||
var local_tz = res.getRsvTimezone(rsv_ruimte_key);
|
||||
if (this_res.canChange) {
|
||||
this_res.canChange = local_tz == S("fac_server_timezone");
|
||||
}
|
||||
user.auth_required_or_abort(this_res.canReadAny);
|
||||
|
||||
sql = "SELECT * FROM res_rsv_ruimte WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
|
||||
sql = "SELECT res_ruimte_opstel_key"
|
||||
+ " , prs_kostenplaats_key"
|
||||
+ " , res_rsv_ruimte_bezoekers"
|
||||
+ " , res_status_fo_key"
|
||||
+ " , res_rsv_ruimte_flag"
|
||||
+ " , res_activiteit_key"
|
||||
+ " , res_reservering_key"
|
||||
+ " , res_rsv_ruimte_volgnr"
|
||||
+ " , res_rsv_ruimte_van"
|
||||
+ " , res_rsv_ruimte_tot"
|
||||
+ " , " + convertToLocalTimeSQL("res_rsv_ruimte_van", local_tz) + " local_van"
|
||||
+ " , " + convertToLocalTimeSQL("res_rsv_ruimte_tot", local_tz) + " local_tot"
|
||||
+ " , res_rsv_ruimte_omschrijving"
|
||||
+ " , res_rsv_ruimte_opmerking"
|
||||
+ " , res_rsv_ruimte_externnr"
|
||||
+ " , res_rsv_ruimte_contact_key"
|
||||
+ " , res_rsv_ruimte_host_key"
|
||||
+ " , mld_opdr_key"
|
||||
+ " FROM res_rsv_ruimte"
|
||||
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
|
||||
var oRsR = Oracle.Execute(sql);
|
||||
var rsv = { opstel_key: oRsR("res_ruimte_opstel_key").Value
|
||||
, account: oRsR("prs_kostenplaats_key").Value || -1
|
||||
@@ -70,6 +92,8 @@ if (rsv_ruimte_key > -1)
|
||||
, ruimte_volgnr: oRsR("res_rsv_ruimte_volgnr").Value
|
||||
, ruimte_van: new Date(oRsR("res_rsv_ruimte_van").Value)
|
||||
, ruimte_tot: new Date(oRsR("res_rsv_ruimte_tot").Value)
|
||||
, local_van: new Date(oRsR("local_van").Value)
|
||||
, local_tot: new Date(oRsR("local_tot").Value)
|
||||
, omschrijving: oRsR("res_rsv_ruimte_omschrijving").Value
|
||||
, opmerking: oRsR("res_rsv_ruimte_opmerking").Value
|
||||
, extern_nr: oRsR("res_rsv_ruimte_externnr").Value
|
||||
@@ -982,8 +1006,8 @@ else
|
||||
|
||||
if (fe_lastminute || !this_res.canChange)
|
||||
{
|
||||
ROFIELD("fld", L("lcl_from") , toDateTimeString(rsv.ruimte_van), { });
|
||||
ROFIELD("fld", L("lcl_to") , toDateTimeString(rsv.ruimte_tot), {combine: true});
|
||||
ROFIELD("fld", L("lcl_from") , toDateTimeString(rsv.local_van, { isLocal: true }), { });
|
||||
ROFIELD("fld", L("lcl_to") , toDateTimeString(rsv.local_tot, { isLocal: true }), {combine: true});
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -171,8 +171,11 @@ var qrc = getQParamInt("qrc", 0) != 0;
|
||||
}
|
||||
function fnFavWP_colSubHeader(oRs)
|
||||
{
|
||||
var result = oRs("alg_gebouw_naam").Value;
|
||||
result += (result ? ", " : "") + oRs("alg_locatie_plaats").Value;
|
||||
var result = oRs("alg_gebouw_naam").Value || "";
|
||||
var alg_locatie_plaats = oRs("alg_locatie_plaats").Value || "";
|
||||
if (alg_locatie_plaats) {
|
||||
result += (result ? ", " : "") + alg_locatie_plaats;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -202,7 +205,7 @@ var qrc = getQParamInt("qrc", 0) != 0;
|
||||
}
|
||||
function fnDisciplinecapaciteit(oRs)
|
||||
{
|
||||
return oRs("aantal").Value+" "+oRs("ins_discipline_omschrijving").Value;
|
||||
return oRs("aantal").Value + " " + oRs("ins_discipline_omschrijving").Value;
|
||||
}
|
||||
function fnGebouwIcon(oRs)
|
||||
{
|
||||
@@ -256,6 +259,7 @@ var qrc = getQParamInt("qrc", 0) != 0;
|
||||
var gebouwcapaciteit = aantalitems * dagcapaciteit; // in uren
|
||||
|
||||
sql = rdpt.dagbezetting_resdelen_in_gebouw_sql(res_disc_key_arr, geb_key, -1, dateoffset, datelimit, null); // JGL: act_key
|
||||
|
||||
if (werkpl_key > -1 && resdate == null)
|
||||
{ // Is een eerder gekozen werkplek nog beschikbaar?
|
||||
var sql = "SELECT datum"
|
||||
@@ -307,7 +311,7 @@ var qrc = getQParamInt("qrc", 0) != 0;
|
||||
{ // Een eerder gekozen werkplek.
|
||||
var dt = new Date(oRs("datum").Value);
|
||||
var v_bloktijden = res.getBloktijdenDisc(res_disc_key_arr[0], dt, geb_key);
|
||||
var res_blok = rdpt.getIntervalString(werkpl_key, dt, v_bloktijden);
|
||||
var res_blok = rdpt.getIntervalString(werkpl_key, dt, v_bloktijden, geb_key);
|
||||
if (res_blok == "")
|
||||
txt = L("lcl_niet_beschikbaar");
|
||||
else
|
||||
@@ -417,7 +421,7 @@ var qrc = getQParamInt("qrc", 0) != 0;
|
||||
{
|
||||
var bcls= "";
|
||||
var sql2 = rdpt.dagbezetting_resdelen_in_gebouw_sql(res_disc_key_arr, geb_key, oRs("alg_verdieping_key").value, dateoffset, datelimit, resdate);
|
||||
oRs2 = Oracle.Execute(sql2)
|
||||
oRs2 = Oracle.Execute(sql2);
|
||||
bcls += rdpt.bezettings_class(oRs2("gevuld").value, calc_dagcapaciteit*oRs("aantal").value, minimumbeschikbaarheid*oRs("aantal").value);
|
||||
oRs2.close();
|
||||
return bcls; // te duur
|
||||
@@ -546,7 +550,7 @@ var qrc = getQParamInt("qrc", 0) != 0;
|
||||
|
||||
function fncolSubHeader(oRs)
|
||||
{
|
||||
var res_blok = rdpt.getIntervalString(oRs("res_deel_key").value, resdate, bloktijden);
|
||||
var res_blok = rdpt.getIntervalString(oRs("res_deel_key").value, resdate, bloktijden, geb_key);
|
||||
if (res_blok =="")
|
||||
res_blok = "";//L("lcl_niet_beschikbaar");
|
||||
else
|
||||
|
||||
@@ -57,11 +57,6 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
var isMobile = getQParamInt("ismobile", 0); // Wordt vanuit reservering_new_by_placetime.asp (mobile weergave) op 1 gezet. Vanuit desktop weergave word thet niet gezet.
|
||||
var res_noshowgrace = 5*60*1000 ; // hoeveel milliseconden na aanvang mag je een (lege) bezette ruimte afpakken?
|
||||
var adhoc_threshold = S("res_adhoc_threshold"); // Hoeveel minuten voor het aflopen van de huidige reservering mag je zelf alvast reserveren?
|
||||
// Gebruik de Oracle tijd als startpunt. Van een noshow is de eindtijd op de Oracle TRUNC(SYSDATE, 'MI')
|
||||
// gezet en je komt anders in de de problemen als Oracle een minuut voorloopt
|
||||
var oRs = Oracle.Execute("SELECT TRUNC(SYSDATE, 'MI') FROM DUAL");
|
||||
var now = new Date(oRs(0).Value);
|
||||
oRs.Close();
|
||||
|
||||
var ins_key = getQParamInt("ins_key", -1);
|
||||
var res_ruimte_key = -1;
|
||||
@@ -80,6 +75,9 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
res_van = new Date();
|
||||
}
|
||||
|
||||
var server_tz = S("fac_server_timezone");
|
||||
var local_tz = server_tz;
|
||||
|
||||
var link2res = getQParamInt("link2res", 1);
|
||||
|
||||
if (ins_key != -1 || res_deel_key != -1)
|
||||
@@ -111,9 +109,11 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
oRs = Oracle.Execute(sql);
|
||||
var alg_ruimte_key = oRs("ins_alg_ruimte_key").value;
|
||||
oRs.Close();
|
||||
local_tz = res.getTimezoneByRuimte(alg_ruimte_key, "ALG");
|
||||
}
|
||||
else if (ins_key != -1 /* <- Dit is nooit waar want dan zit je hierboven al in DeelMode */ || res_artikel_key != -1)
|
||||
else if (res_artikel_key != -1)
|
||||
{
|
||||
// UNSUPPORTED; local_tz = ?
|
||||
// ArtikelMode
|
||||
ArtikelMode = true;
|
||||
}
|
||||
@@ -125,9 +125,11 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
if (alg_ruimte_key == -1)
|
||||
{
|
||||
res_ruimte_key = getQParamInt("res_ruimte_key");
|
||||
local_tz = res.getTimezoneByRuimte(res_ruimte_key, "RES");
|
||||
}
|
||||
else
|
||||
{
|
||||
local_tz = res.getTimezoneByRuimte(alg_ruimte_key, "ALG");
|
||||
// Dit moet nog uitgebreid worden zodat het meerdere "enkele_ruimten" in verschillende catalogi kan handelen
|
||||
// voor nu MAX() om AiAi uit te voorkomen
|
||||
var enkele_ruimte = "(SELECT MAX(ra.res_ruimte_key)"
|
||||
@@ -159,6 +161,13 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
var submitting = getQParamInt("submit", 0) == 1;
|
||||
var qrc = getQParamInt("qrc", 0) != 0;
|
||||
|
||||
function toLocalDate(expr) {
|
||||
return convertToLocalTimeSQL(expr, local_tz);
|
||||
}
|
||||
function toServerDate(expr) {
|
||||
return convertToServerTimeSQL(expr, local_tz);
|
||||
}
|
||||
|
||||
var transitParam = buildTransitParam(["res_ruimte_key", "res_deel_key"]);
|
||||
|
||||
if (res_ruimte_key < 0 && res_deel_key < 0 && res_artikel_key < 0)
|
||||
@@ -520,12 +529,16 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
if (RuimteMode) // TODO: DIT HOUDT NOG GEEN REKENING MET KOPPELZALEN!
|
||||
{
|
||||
// Zoek alle bestaande reserveringen op deze ruimte die nog bezig zijn of komen
|
||||
var localResVanExpr = toLocalDate("rm.res_rsv_ruimte_van");
|
||||
var localResTotExpr = toLocalDate("rm.res_rsv_ruimte_tot");
|
||||
sql = "SELECT rm.res_reservering_key,"
|
||||
+ " rm.res_rsv_ruimte_volgnr,"
|
||||
+ " rm.res_rsv_ruimte_key,"
|
||||
+ " rm.res_rsv_ruimte_omschrijving,"
|
||||
+ " res_rsv_ruimte_van,"
|
||||
+ " res_rsv_ruimte_tot,"
|
||||
+ " rm.res_rsv_ruimte_van,"
|
||||
+ " rm.res_rsv_ruimte_tot,"
|
||||
+ " " + localResVanExpr + " AS local_van,"
|
||||
+ " " + localResTotExpr + " AS local_tot,"
|
||||
+ " res_disc_params_preposttime,"
|
||||
+ " (SELECT prs_perslid_naam_friendly FROM prs_v_perslid_fullnames pf WHERE pf.prs_perslid_key = rm.res_rsv_ruimte_host_key) host,"
|
||||
+ " rm.res_rsv_ruimte_host_key host_key,"
|
||||
@@ -535,16 +548,20 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
+ " res_rsv_ruimte rm,"
|
||||
+ " res_ruimte_opstelling ro,"
|
||||
+ " res_ruimte r";
|
||||
if (PlanMode) // wil ik alles van res_van weten
|
||||
{
|
||||
sql +=" WHERE res_rsv_ruimte_van < {0}".format(res_van.endToSQL())
|
||||
+ " AND res_rsv_ruimte_tot > {0}".format(res_van.beginToSQL());
|
||||
}
|
||||
else
|
||||
{
|
||||
sql +=" WHERE res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE) + 1" // Alleen vandaag
|
||||
+ " AND res_rsv_ruimte_tot BETWEEN SYSDATE AND TRUNC (SYSDATE) + 1"; // Alleen lopende en toekomstige reserveringen
|
||||
}
|
||||
if (PlanMode) // wil ik alles van res_van weten
|
||||
{
|
||||
// res_van is de lokale dag (geTRUNC'd dus)
|
||||
var serverResdateRangeStart = toServerDate(res_van.toSQL());
|
||||
var serverResdateRangeEnd = serverResdateRangeStart + " + 1 - (1 / 24 / 60 / 60)";
|
||||
sql += " WHERE rm.res_rsv_ruimte_van < " + serverResdateRangeEnd
|
||||
+ " AND rm.res_rsv_ruimte_tot > " + serverResdateRangeStart;
|
||||
}
|
||||
else // Ad-hoc
|
||||
{
|
||||
var serverResdateRangeEnd = toServerDate("TRUNC(" + toLocalDate("SYSDATE") + ") + 1 - (1 / 24 / 60 / 60)");
|
||||
sql += " WHERE rm.res_rsv_ruimte_van < " + serverResdateRangeEnd
|
||||
+ " AND rm.res_rsv_ruimte_tot > SYSDATE"; // Alleen vandaag en alleen lopende en toekomstige reserveringen
|
||||
}
|
||||
sql += " AND rm.res_ruimte_opstel_key = ro.res_ruimte_opstel_key"
|
||||
+ " AND ro.res_ruimte_key = r.res_ruimte_key"
|
||||
+ " AND r.res_ruimte_key = " + res_ruimte_key
|
||||
@@ -552,30 +569,38 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
+ " AND rm.res_rsv_ruimte_verwijder IS NULL"
|
||||
+ " AND (res_rsv_ruimte_bezoekers_shown IS NULL OR res_rsv_ruimte_bezoekers_shown > 0)" // NoShow?
|
||||
+ " AND rm.res_rsv_ruimte_dirtlevel = 0"
|
||||
+ " ORDER BY rm.res_rsv_ruimte_van"; // Eerste vooraan.
|
||||
+ " ORDER BY res_rsv_ruimte_van"; // Eerste vooraan.
|
||||
} else {
|
||||
var localResVanExpr = toLocalDate("rm.res_rsv_ruimte_van");
|
||||
var localResTotExpr = toLocalDate("rm.res_rsv_ruimte_tot");
|
||||
sql = "SELECT rm.res_reservering_key,"
|
||||
+ " rm.res_rsv_ruimte_volgnr,"
|
||||
+ " rm.res_rsv_ruimte_key,"
|
||||
+ " rm.res_rsv_ruimte_omschrijving,"
|
||||
+ " res_rsv_ruimte_van,"
|
||||
+ " res_rsv_ruimte_tot,"
|
||||
+ " rm.res_rsv_ruimte_van,"
|
||||
+ " rm.res_rsv_ruimte_tot,"
|
||||
+ " " + localResVanExpr + " AS local_van ,"
|
||||
+ " " + localResTotExpr + " AS local_tot ,"
|
||||
+ " 0 res_disc_params_preposttime,"
|
||||
+ " (SELECT prs_perslid_naam_friendly FROM prs_v_perslid_fullnames pf WHERE pf.prs_perslid_key = rm.res_rsv_ruimte_host_key) host,"
|
||||
+ " rm.res_rsv_ruimte_host_key host_key,"
|
||||
+ " rd.res_deel_key"
|
||||
+ " FROM res_rsv_ruimte rm,"
|
||||
+ " res_rsv_deel rd,"
|
||||
+ " res_deel d"
|
||||
+ " res_deel d";
|
||||
if (PlanMode) // wil ik alles van res_van weten
|
||||
{
|
||||
sql +=" WHERE res_rsv_ruimte_van < {0}".format(res_van.endToSQL())
|
||||
+ " AND res_rsv_ruimte_tot > {0}".format(res_van.beginToSQL())
|
||||
// res_van is de lokale dag (geTRUNC'd dus)
|
||||
var serverResdateRangeStart = toServerDate(res_van.toSQL());
|
||||
var serverResdateRangeEnd = serverResdateRangeStart + " + 1 - (1 / 24 / 60 / 60)";
|
||||
sql += " WHERE rm.res_rsv_ruimte_van < " + serverResdateRangeEnd
|
||||
+ " AND rm.res_rsv_ruimte_tot > " + serverResdateRangeStart;
|
||||
}
|
||||
else
|
||||
{
|
||||
sql +=" WHERE res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE) + 1" // Alleen vandaag
|
||||
+ " AND res_rsv_ruimte_tot BETWEEN SYSDATE AND TRUNC (SYSDATE) + 1" // Alleen lopende en toekomstige reserveringen
|
||||
var serverResdateRangeEnd = "SYSDATE + 1 - (1 / 24 / 60 / 60)";
|
||||
sql += " WHERE rm.res_rsv_ruimte_van < " + serverResdateRangeEnd
|
||||
+ " AND rm.res_rsv_ruimte_tot > SYSDATE"; // Alleen vandaag en alleen lopende en toekomstige reserveringen
|
||||
}
|
||||
// sql for check on existing workplace reservations
|
||||
var sql_pers = sql
|
||||
@@ -608,6 +633,11 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
for (var i in periods) // Het zijn altijd strings
|
||||
periods[i] = parseInt(periods[i]);
|
||||
|
||||
// Van een noshow is de eindtijd op de Oracle TRUNC(SYSDATE, 'MI') gezet en je komt anders in de de problemen als Oracle een minuut voorloopt
|
||||
var oRs = Oracle.Execute("SELECT " + toLocalDate("TRUNC(SYSDATE, 'MI')") + " FROM DUAL");
|
||||
var now = new Date(oRs(0).Value);
|
||||
oRs.Close();
|
||||
|
||||
var maxTime = now.setFloatHours(reindtijd);
|
||||
var minuten = now.getHours() * 60 + now.getMinutes();
|
||||
var blokstart = Math.ceil(minuten / (S("res_h")*60)) * S("res_h")*60; // omhoog afgerond op period[0]
|
||||
@@ -645,8 +675,10 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
var oRs = Oracle.Execute( sql );
|
||||
while (!oRs.Eof)
|
||||
{
|
||||
var van = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var tot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var server_van = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var server_tot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var local_van = new Date(oRs("local_van").Value);
|
||||
var local_tot = new Date(oRs("local_tot").Value);
|
||||
|
||||
// Let op: hier wordt voor elk gedefinieerd interval bekeken of deze reservering die bezet, om aan het einde te weten
|
||||
// welke intervallen er dus nog helemaal vrij zijn. Afhankelijk van de gedefinieerde intervallen kan een reservering
|
||||
@@ -654,17 +686,16 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
// dus niet per se iets over hoe lang je reservering duurt.
|
||||
// Ik denk dat ik daarom ook de echte onderliggende van en tot nodig heb, om dat later te kunnen vertellen
|
||||
// zonder weer opnieuw die reserveringen te moeten zoeken
|
||||
|
||||
for (var i = 0; i < bloktijden.length; i++)
|
||||
{
|
||||
if (van < bloktijden[i].einddatum && tot > bloktijden[i].startdatum)
|
||||
if (local_van < bloktijden[i].einddatum && local_tot > bloktijden[i].startdatum)
|
||||
{
|
||||
bloktijden[i].bezet = oRs("host").Value;
|
||||
bloktijden[i].bezet_key = oRs("host_key").Value;
|
||||
bloktijden[i].res_rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
|
||||
bloktijden[i].res_reservering_nr = oRs("res_reservering_key").Value+"/"+oRs("res_rsv_ruimte_volgnr").Value;
|
||||
bloktijden[i].resvan = van;
|
||||
bloktijden[i].restot = tot;
|
||||
bloktijden[i].resvan = local_van;
|
||||
bloktijden[i].restot = local_tot;
|
||||
}
|
||||
}
|
||||
oRs.MoveNext();
|
||||
@@ -679,23 +710,25 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
var rsv_omschrijving = oRs("res_rsv_ruimte_omschrijving").Value;
|
||||
var rsv_host = oRs("host").Value;
|
||||
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
|
||||
var van = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var tot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var server_van = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var server_tot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var local_van = new Date(oRs("local_van").Value);
|
||||
var local_tot = new Date(oRs("local_tot").Value);
|
||||
if (RuimteMode) {
|
||||
var bezoekers_expected = oRs("res_rsv_ruimte_bezoekers").Value;
|
||||
var bezoekers_shown = oRs("res_rsv_ruimte_bezoekers_shown").Value;
|
||||
}
|
||||
var prepost = oRs("res_disc_params_preposttime").Value || 0; // in uren
|
||||
var totMinusThreshold = new Date(tot).setMinutes(tot.getMinutes() - adhoc_threshold);
|
||||
var totMinusThreshold = new Date(local_tot).setMinutes(local_tot.getMinutes() - adhoc_threshold);
|
||||
if (totMinusThreshold <= now) { // Deze afspraak loopt nog, maar ik mag al wel vast boeken
|
||||
now = new Date(tot); // Nieuwe startdatum (niet 'now', maar straks dus)
|
||||
now = new Date(local_tot); // Nieuwe startdatum (niet 'now', maar straks dus)
|
||||
lopendeRes = true;
|
||||
oRs.moveNext(); // Kijk of de volgende afspraak niet blokkeert
|
||||
continue;
|
||||
}
|
||||
var schoonvan = new Date(van);
|
||||
var schoonvan = new Date(local_van);
|
||||
schoonvan.setMinutes(schoonvan.getMinutes() - prepost * 60);
|
||||
if (schoonvan < times[0] && tot > now) { // Bezig of begint binnen schoonmaaktijd
|
||||
if (schoonvan < times[0] && local_tot > now) { // Bezig of begint binnen schoonmaaktijd
|
||||
var nubezet = true;
|
||||
}
|
||||
oRs.moveNext();
|
||||
@@ -833,7 +866,7 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
id: "tot_" + tm,
|
||||
value: "",
|
||||
checked: !timeslotAvailable,
|
||||
label: L("lcl_pda_res_ruimtereserveer").format(toTimeString(times[tm])),
|
||||
label: L("lcl_pda_res_ruimtereserveer").format(toTimeString(times[tm], { isLocal: true })),
|
||||
data: {
|
||||
van: now.getTime(),
|
||||
tot: times[tm].getTime()
|
||||
@@ -850,8 +883,8 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
|
||||
var myres_rsv_ruimte_key = getQParamInt("res_rsv_ruimte_key", -1);
|
||||
if (myres_rsv_ruimte_key > 0) { // Altijd?
|
||||
sql_vt = "SELECT res_rsv_ruimte_van"
|
||||
+ " , res_rsv_ruimte_tot"
|
||||
sql_vt = "SELECT " + toLocalDate("res_rsv_ruimte_van") + " res_rsv_ruimte_van"
|
||||
+ " , " + toLocalDate("res_rsv_ruimte_tot") + " res_rsv_ruimte_tot"
|
||||
+ " , res_reservering_key"
|
||||
+ " , res_rsv_ruimte_volgnr"
|
||||
+ " FROM res_rsv_ruimte"
|
||||
@@ -867,9 +900,9 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
|
||||
if (myres) { // Als we niet zojuist hebben gereserveerd (!submitting), laat dan al je eigen reserveringen zien (if any)
|
||||
Response.write("<div class='modconfirm'>"+L("lcl_res_deel_planmode_confirm").format((RuimteMode ? safe.html(res_ruimte_nr) : safe.html(res_deel_omschrijving)),
|
||||
toDateString(res_van, true, false),
|
||||
toTimeString(mystart),
|
||||
toTimeString(myend),
|
||||
toDateString(res_van, { noDay: true, isLocal: true }),
|
||||
toTimeString(mystart, { isLocal: true }),
|
||||
toTimeString(myend, { isLocal: true }),
|
||||
myres_reservering_nrs.join(", "),
|
||||
rooturl + "/?u=reservering&k=" + myres_rsv_ruimte_key) + "</div>");
|
||||
}
|
||||
@@ -888,8 +921,10 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
var oRs_pers = Oracle.Execute( RuimteMode ? sql : sql_pers );
|
||||
while (!oRs_pers.Eof)
|
||||
{
|
||||
var van = new Date(oRs_pers("res_rsv_ruimte_van").Value);
|
||||
var tot = new Date(oRs_pers("res_rsv_ruimte_tot").Value);
|
||||
var server_van = new Date(oRs_pers("res_rsv_ruimte_van").Value);
|
||||
var server_tot = new Date(oRs_pers("res_rsv_ruimte_tot").Value);
|
||||
var local_van = new Date(oRs_pers("local_van").Value);
|
||||
var local_tot = new Date(oRs_pers("local_tot").Value);
|
||||
%>
|
||||
res_pers["<%=user_key%>"].push({
|
||||
bezet: "<%=safe.jsstring(oRs_pers("host").Value)%>",
|
||||
@@ -897,8 +932,8 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
res_deel_key: <%=(RuimteMode ? "null" : oRs_pers("res_deel_key").Value)%>,
|
||||
res_rsv_ruimte_key: <%=oRs_pers("res_rsv_ruimte_key").Value%>,
|
||||
res_reservering_nr: "<%=oRs_pers("res_reservering_key").Value + "/" + oRs_pers("res_rsv_ruimte_volgnr").Value%>",
|
||||
resvan: new Date(<%=van.getTime()%>),
|
||||
restot: new Date(<%=tot.getTime()%>)
|
||||
resvan_ms: <%=local_van.getTime()%>,
|
||||
restot_ms: <%=local_tot.getTime()%>
|
||||
});
|
||||
<%
|
||||
oRs_pers.MoveNext();
|
||||
@@ -918,20 +953,16 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
data,
|
||||
FcltCallbackAndThen((json) => {
|
||||
res_pers[prs_key] = json.rsv;
|
||||
res_pers[prs_key].resvan = new Date(res_pers[prs_key].resvan);
|
||||
res_pers[prs_key].restot = new Date(res_pers[prs_key].restot);
|
||||
}), "json");
|
||||
}
|
||||
|
||||
var _from = new Date(from);
|
||||
var _to = new Date(to);
|
||||
var return_doubles = [];
|
||||
var index = 0;
|
||||
if (!(prs_key in res_pers)) {
|
||||
return false;
|
||||
}
|
||||
for (index = 0; index < res_pers[prs_key].length; index++) {
|
||||
if ((_from >= res_pers[prs_key][index].restot || _to <= res_pers[prs_key][index].resvan) == false) {
|
||||
if (from < res_pers[prs_key][index].restot_ms && to > res_pers[prs_key][index].resvan_ms) {
|
||||
return_doubles.push(res_pers[prs_key][index]);
|
||||
}
|
||||
}
|
||||
@@ -953,11 +984,11 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
// Dit is eigenlijk niet relevant voor een normale gebruiker
|
||||
// maar voor een eventuele noshow wel!
|
||||
// KFNS#35010: ook tonen als het toch geen geheim is
|
||||
if (user.checkAutorisation( "WEB_RESNOS", true) || (planbordTooltipShowing(rsv_ruimte_key) == 0)) {
|
||||
if (user.checkAutorisation("WEB_RESNOS", true) || (planbordTooltipShowing(rsv_ruimte_key) == 0)) {
|
||||
if (!times.length) {
|
||||
Response.write("<span class='bezetinfo'>" + I("fa-ban fa-xl") + " " + L("lcl_mobile_none_beschik") + "</span>");
|
||||
} else if (van) {
|
||||
Response.write("<span class='bezetinfo'>"+toTimeString(van)+" - "+toTimeString(tot)+": "+ safe.html(rsv_omschrijving)+"/"+safe.html(rsv_host)+"</span>");
|
||||
} else if (local_van) {
|
||||
Response.write("<span class='bezetinfo'>"+toTimeString(local_van, { isLocal: true })+" - "+toTimeString(local_tot, { isLocal: true })+": "+ safe.html(rsv_omschrijving)+"/"+safe.html(rsv_host)+"</span>");
|
||||
}
|
||||
}
|
||||
%></div><%
|
||||
@@ -968,7 +999,7 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
%><div class="cvrij"><%
|
||||
Response.write("<div class='vrij'>"+safe.html(RuimteMode ? res_ruimte_nr : res_deel_omschrijving)+"</div>")
|
||||
%></div><%
|
||||
van = null; // er is geen eerstvolgende in de weg
|
||||
local_van = null; // er is geen eerstvolgende in de weg
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1001,7 +1032,7 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
if (!submitting && timeslot_radios.length)
|
||||
{
|
||||
if (timeslotAvailable) {
|
||||
Response.write("<div class='modhint text-center'>"+L("lcl_res_deel_planmode_hint" + (submitting ? "2" : "1")).format(toDateString(res_van, false, false).toLowerCase(), res_deel_opmerking||"")+"</div>");
|
||||
Response.write("<div class='modhint text-center'>"+L("lcl_res_deel_planmode_hint" + (submitting ? "2" : "1")).format(toDateString(res_van, { isLocal: true }).toLowerCase(), res_deel_opmerking||"")+"</div>");
|
||||
}
|
||||
CONTROLGROUP_START({ id: "bloktijden" });
|
||||
RADIO_GROUP("timeslots", timeslot_radios, { big: true });
|
||||
@@ -1017,7 +1048,7 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
CONTROLGROUP_END();
|
||||
}
|
||||
|
||||
if (nubezet && now - van > res_noshowgrace
|
||||
if (nubezet && now - local_van > res_noshowgrace
|
||||
&& res_noshowgrace > -1 /* EN minstens res_noshowgrace na aanvang */
|
||||
&& !DeelMode // ondersteunen we (nog) niet
|
||||
&& user.checkAutorisation( "WEB_RESNOS", true))
|
||||
@@ -1119,18 +1150,18 @@ FCLTHeader.Requires({ plugins: ["kenmerk"], css: [rooturl+"/appl/res/res.css"] }
|
||||
<div class="next-res-title"><%=L("lcl_mobile_rsv_next")%></div>
|
||||
<div class="next-res-descr"><%=L("lcl_none")%></div>
|
||||
<% } else {
|
||||
var van = schoonvan || van;
|
||||
var isToday = !PlanMode || new Date().midnight().getTime() === new Date(van).midnight().getTime();
|
||||
var van = isToday ? toTimeString(van, false, true) : toDateTimeString(van, false, true, false, true);
|
||||
var tot = isToday ? toTimeString(tot, false, true) : toDateTimeString(tot, false, true, false, true);
|
||||
var local_van = schoonvan || local_van;
|
||||
var isToday = !PlanMode || new Date().midnight().getTime() === new Date(local_van).midnight().getTime();
|
||||
var local_van = isToday ? toTimeString(local_van, { isLocal: true }) : toDateTimeString(local_van, { noDay: true, noMidnight: true, isLocal: true });
|
||||
var local_tot = isToday ? toTimeString(local_tot, { isLocal: true }) : toDateTimeString(local_tot, { noDay: true, noMidnight: true, isLocal: true });
|
||||
if (nubezet || lopendeRes) {
|
||||
if (lopendeRes) { %>
|
||||
<div class="next-res-title"><%=I("fa-exclamation-triangle")%></div>
|
||||
<% } %>
|
||||
<div class="next-res-descr"><%=L("lcl_mobile_ruimtebezet").format(tot)%></div>
|
||||
<div class="next-res-descr"><%=L("lcl_mobile_ruimtebezet").format(local_tot)%></div>
|
||||
<% } else if (!myres) { %>
|
||||
<div class="next-res-title"><%=L("lcl_mobile_rsv_next")%></div>
|
||||
<div class="next-res-descr"><%=van%> tot <%=tot%></div>
|
||||
<div class="next-res-descr"><%=local_van%> tot <%=local_tot%></div>
|
||||
<% }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -376,7 +376,6 @@ if (!submitting)
|
||||
FCLTselector( "wplx"
|
||||
, similarWP_sql
|
||||
, { label: L("lcl_workplace")
|
||||
, emptyOption: L("lcl_select_werkplek")
|
||||
, required: true
|
||||
, mobile: true
|
||||
}
|
||||
|
||||
@@ -329,6 +329,45 @@ res = {
|
||||
return alg_tz;
|
||||
},
|
||||
|
||||
getTimezoneBy: function _getTimezoneBy(alg_key, level) {
|
||||
// level ? ["R", "V", "G", "L"]
|
||||
var sql;
|
||||
switch (level) {
|
||||
case "L":
|
||||
sql = "SELECT l.alg_locatie_timezone"
|
||||
+ " FROM alg_locatie l"
|
||||
+ " WHERE l.alg_locatie_key = " + alg_key;
|
||||
break;
|
||||
|
||||
case "G":
|
||||
sql = "SELECT l.alg_locatie_timezone"
|
||||
+ " FROM alg_locatie l, alg_gebouw g"
|
||||
+ " WHERE g.alg_gebouw_key = " + alg_key
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key";
|
||||
break;
|
||||
|
||||
case "V":
|
||||
sql = "SELECT l.alg_locatie_timezone"
|
||||
+ " FROM alg_locatie l, alg_gebouw g, alg_verdieping v"
|
||||
+ " WHERE v.alg_verdieping_key = " + alg_key
|
||||
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key";
|
||||
break;
|
||||
|
||||
case "R":
|
||||
return res.getTimezoneByRuimte(alg_key, "ALG");
|
||||
|
||||
default:
|
||||
throw new Error("Invalid level: " + level);
|
||||
}
|
||||
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var alg_tz = !oRs.EOF && oRs("alg_locatie_timezone").Value
|
||||
|| S("fac_server_timezone");
|
||||
oRs.Close();
|
||||
return alg_tz;
|
||||
},
|
||||
|
||||
res_ruimte_info: function _res_ruimte(res_ruimte_key)
|
||||
{
|
||||
var result = { res_ruimte_key: res_ruimte_key,
|
||||
@@ -1192,6 +1231,7 @@ res = {
|
||||
}
|
||||
);
|
||||
roRs.Close();
|
||||
|
||||
// earliest_expire_change en earliest_expire_cancel hebben zeker een goede waarde van de ruimte discipline (startdatum 1/1/1000 is vervangen).
|
||||
rresult.earliest_expire_change = earliest_expire_change;
|
||||
rresult.earliest_expire_cancel = earliest_expire_cancel;
|
||||
@@ -2542,8 +2582,7 @@ res = {
|
||||
getBloktijden: function(p_act_key, p_res_disc_key, p_resdate, p_geb_key)
|
||||
{
|
||||
var bloktijden = ((p_act_key && p_act_key > -1) ? res.getBloktijdenAct(p_act_key, p_resdate, p_geb_key) : []);
|
||||
if (bloktijden.length == 0)
|
||||
{
|
||||
if (bloktijden.length == 0) {
|
||||
bloktijden = res.getBloktijdenDisc(p_res_disc_key, p_resdate, p_geb_key);
|
||||
}
|
||||
return bloktijden;
|
||||
@@ -2564,7 +2603,7 @@ res = {
|
||||
bloktijden = JSON.parse(oRs("res_disc_params_intervals").Value);
|
||||
oRs.close();
|
||||
|
||||
bloktijden = res.set_bloktijdenopdatum(bloktijden, p_resdate, p_geb_key)
|
||||
bloktijden = res.set_bloktijdenopdatum(bloktijden, p_resdate, p_geb_key);
|
||||
|
||||
return bloktijden;
|
||||
},
|
||||
|
||||
@@ -194,6 +194,14 @@ function res_list (pautfunction, params)
|
||||
}
|
||||
}
|
||||
|
||||
var sql_tz = "SELECT ''"
|
||||
+ " FROM alg_locatie"
|
||||
+ " WHERE alg_locatie_timezone IS NOT NULL"
|
||||
+ " AND alg_locatie_timezone <> " + safe.quoted_sql(S("fac_server_timezone"));
|
||||
var oRs_tz = Oracle.Execute(sql_tz);
|
||||
var any_tz = !oRs_tz.EOF;
|
||||
oRs_tz.Close();
|
||||
|
||||
// Berekenen is duur en niet altijd nodig
|
||||
var withprices = (groupres == 4
|
||||
|| groupres == 5
|
||||
@@ -771,6 +779,12 @@ function res_list (pautfunction, params)
|
||||
+ ", NULL ins_discipline_key"
|
||||
: " , res_geg.ins_srtdeel_uitleenbaar"
|
||||
+ ", res_geg.ins_discipline_key");
|
||||
if (any_tz) {
|
||||
sql_select += ", DECODE(l.alg_locatie_timezone"
|
||||
+ " , " + safe.quoted_sql(S("fac_server_timezone")) + ", NULL"
|
||||
+ " , NULL, NULL"
|
||||
+ " , l.alg_locatie_timezone) alg_locatie_timezone";
|
||||
}
|
||||
|
||||
var sql_select_obj_restype_O = sql_select
|
||||
+ ", NULL alg_district_key"
|
||||
|
||||
@@ -757,7 +757,14 @@ if (options.length > 1) {
|
||||
}
|
||||
|
||||
var buttons = [];
|
||||
if (this_res.couldCreate)
|
||||
|
||||
var multi_tz = Session("time_zone") != S("fac_server_timezone"); // Hebben we te maken met een ruimte, gebruiker of server in een afwijkende tijdszone?
|
||||
if (!multi_tz) {
|
||||
var rsv_timezone = res.getRsvTimezone(rsv_ruimte_key);
|
||||
multi_tz = rsv_timezone != Session("time_zone");
|
||||
}
|
||||
|
||||
if (!multi_tz && this_res.couldCreate)
|
||||
{
|
||||
buttons.push( {id: "repeatbutton", title: L("lcl_res_add_deelres"), icon: "fa-clone", action: "makeMulti()" } );
|
||||
if (restype == "R")
|
||||
@@ -765,7 +772,7 @@ if (options.length > 1) {
|
||||
if (restype == "CV") // en O??
|
||||
buttons.push( {id: "addpartresbutton", title: L("lcl_res_add_deelresreservering"), icon: "fa-layer-plus", action: "ruimteErbij('" + restype + "')" } );
|
||||
}
|
||||
if (multiDeel && this_res.couldCreate)
|
||||
if (!multi_tz && multiDeel && this_res.couldCreate)
|
||||
{
|
||||
buttons.push({ title: L("lcl_res_multiple_save"), icon: "fa-copy", action: "MultiSave()" });
|
||||
buttons.push({ icon: "fa-print", title: L("lcl_print"), action: "res_print()" });
|
||||
|
||||
@@ -127,7 +127,7 @@ var fac_usrrap_key = getQParamInt("usrrap_key", -1); // wordt
|
||||
|
||||
var daylimit = getQParamInt("daylimit", 12); // na daylimit kun je voor de eerste dag niet meer reserveren, default 12:00, werkt niet icm offset
|
||||
var afternoon = new Date().getHours() >= daylimit;
|
||||
var dateoffset = getQParamInt("offset", afternoon?1:0); //
|
||||
var dateoffset = getQParamInt("offset", afternoon?1:0); // TODO localized afternoon gebruiken om offset te berekenen ..
|
||||
var datelimit = getQParamInt("limit", 7); // aantal te kiezen dagen tov offset
|
||||
var selectmode = getQParamInt("selectmode", 0); // kiezen van het item: 0=automatisch bepalen (tekening anders lijst), 1=lijst, 2=2dtekening indien aanwezig, 3=3dtekening indien aanwezig
|
||||
var fotos = getQParamInt("fotos", 1); // for selectmode 1: show photo or not
|
||||
@@ -377,7 +377,7 @@ transitParam2 += "&startpage=" + startpage;
|
||||
break;
|
||||
case "day": titel = L("lcl_beschikbaarheid_by_day").format(safe.html(params.bld),safe.html(params.disc));
|
||||
break;
|
||||
case "flr": titel = L("lcl_beschikbaarheid_by_flr").format(safe.html(params.disc),safe.html(params.bld),toDateString(params.resdate).toLowerCase());
|
||||
case "flr": titel = L("lcl_beschikbaarheid_by_flr").format(safe.html(params.disc),safe.html(params.bld),toDateString(params.resdate, { isLocal: true }).toLowerCase());
|
||||
break;
|
||||
}
|
||||
Response.write("<h3><a>" + titel + "</a></h3/>");
|
||||
@@ -516,15 +516,23 @@ transitParam2 += "&startpage=" + startpage;
|
||||
%>
|
||||
<div id='accordion'>
|
||||
<%
|
||||
sql = "SELECT g.alg_gebouw_werkdagen, alg_gebouw_naam "
|
||||
+ " FROM alg_gebouw g"
|
||||
+ " WHERE g.alg_gebouw_key = " + geb_key;
|
||||
sql = "SELECT g.alg_gebouw_werkdagen, "
|
||||
+ " g.alg_gebouw_naam, "
|
||||
+ " l.alg_locatie_timezone "
|
||||
+ " FROM alg_gebouw g "
|
||||
+ " JOIN alg_locatie l ON l.alg_locatie_key = g.alg_locatie_key "
|
||||
+ " WHERE g.alg_gebouw_key = " + geb_key;
|
||||
oRs = Oracle.Execute(sql)
|
||||
var werkdagen = oRs("alg_gebouw_werkdagen").Value;
|
||||
var gebouw_naam = oRs("alg_gebouw_naam").Value; // theoretisch kunnen dit er meerdere zijn, dan nog aanpassen
|
||||
var local_tz = oRs("alg_locatie_timezone").Value || S("fac_server_timezone");
|
||||
oRs.close();
|
||||
|
||||
sql = rdpt.dagbezetting_resdelen_in_aanweziggebouw_sql(res_disc_key_arr, res_deel_key, geb_key, -1, dateoffset, datelimit, null, act_key);
|
||||
var local_now = convertToLocalTime(new Date(), local_tz);
|
||||
afternoon = local_now.getHours() >= daylimit;
|
||||
dateoffset = getQParamInt("offset", afternoon ? 1 : 0);
|
||||
|
||||
sql = rdpt.dagbezetting_resdelen_in_aanweziggebouw_sql(res_disc_key_arr, res_deel_key, geb_key, dateoffset, datelimit, act_key);
|
||||
|
||||
var oRs = Oracle.Execute(sql)
|
||||
var pos = 0;
|
||||
@@ -553,7 +561,7 @@ transitParam2 += "&startpage=" + startpage;
|
||||
var calc_dagcapaciteit = rdpt.dagcapaciteitCalc(new Date(oRs("datum").Value), dagcapaciteit, act_key, res_disc_key_arr, geb_key);
|
||||
if (!calc_dagcapaciteit)
|
||||
{
|
||||
__Log("No capacity on " + toDateString(oRs("datum").Value));
|
||||
__Log("No capacity on " + toDateString(oRs("datum").Value, { isLocal: true }));
|
||||
oRs.MoveNext();
|
||||
continue;
|
||||
}
|
||||
@@ -588,12 +596,12 @@ transitParam2 += "&startpage=" + startpage;
|
||||
}
|
||||
}
|
||||
var clickaction = (reserveerbaredag && (!(res_deel_key > 0) || beschikbaarheid > 0) ? "onclick='continue_with_date_bld(new Date("+ new Date(oRs("datum").Value).getTime()+"), "+oRs("ins_discipline_key").Value+");'" : "");
|
||||
|
||||
var noTimezoneDifferences = Session("time_zone") == S("fac_server_timezone") && local_tz == S("fac_server_timezone");
|
||||
%>
|
||||
<div class='iconmenu<%=clickaction ? "" : " no-action"%>'
|
||||
style='width:14%; height: 12vw;' <%=clickaction%>>
|
||||
<div class="iconitem">
|
||||
<div class="icondate iconimg <%=bcls%>"><%=toDateString(oRs("datum").Value, false, true) %></div>
|
||||
<div class="icondate iconimg <%=bcls%>"><%=toDateString(oRs("datum").Value, { pretty: noTimezoneDifferences, isLocal: true }) %></div>
|
||||
<div class="res-iconlabel"><%=licon%><%=aantalitems+" "+safe.html(oRs("ins_discipline_omschrijving").Value).toLowerCase()%>
|
||||
<br><%=L("lcl_mobile_resbeschikbaar")+" " +(ischild?(beschikbaarheid+ "/" + blok_per_dag):beschikbaarheid +"%") %>
|
||||
</div>
|
||||
@@ -613,9 +621,20 @@ transitParam2 += "&startpage=" + startpage;
|
||||
// 3. KIES VERDIEPING INDIEN GEWENST EN NOG NIET BEKEND
|
||||
if (resdate && floorselect == 1 && geb_key > -1 && floor_key == -1)
|
||||
{
|
||||
%>
|
||||
sql = "SELECT l.alg_locatie_timezone "
|
||||
+ " FROM alg_gebouw g "
|
||||
+ " JOIN alg_locatie l ON l.alg_locatie_key = g.alg_locatie_key "
|
||||
+ " WHERE g.alg_gebouw_key = " + geb_key;
|
||||
oRs = Oracle.Execute(sql);
|
||||
var local_tz = oRs("alg_locatie_timezone").Value || S("fac_server_timezone");
|
||||
oRs.close();
|
||||
|
||||
var local_now = convertToLocalTime(new Date(), local_tz);
|
||||
afternoon = local_now.getHours() >= daylimit;
|
||||
dateoffset = getQParamInt("offset", afternoon ? 1 : 0);
|
||||
%>
|
||||
<div id='accordion'>
|
||||
<%
|
||||
<%
|
||||
var sql = rdpt.mijn_verdiepingen_met_resdelen_sql(res_disc_key_arr, geb_key, ALGwritelevel, dateoffset, resdate);
|
||||
var oRs = Oracle.Execute(sql)
|
||||
var pos = 0;
|
||||
@@ -641,7 +660,8 @@ transitParam2 += "&startpage=" + startpage;
|
||||
var flr_icon = '<div class="flooravatar">'+safe.html(oRs("alg_verdieping_code").Value)+'</div>';
|
||||
|
||||
var sql2 = rdpt.dagbezetting_resdelen_in_gebouw_sql(res_disc_key_arr, gebkey, flrkey, dateoffset, datelimit, resdate);
|
||||
var oRs2 = Oracle.Execute(sql2)
|
||||
var oRs2 = Oracle.Execute(sql2);
|
||||
|
||||
var beschikbaarheid = ((1 - (oRs2("gevuld").Value/(dagcapaciteit*aantalitems)))*100); // 0..100
|
||||
var fcls = rdpt.bezettings_class(oRs2("gevuld").Value, dagcapaciteit*aantalitems, minimumbeschikbaarheid*aantalitems);
|
||||
|
||||
@@ -802,7 +822,7 @@ transitParam2 += "&startpage=" + startpage;
|
||||
|
||||
function fnIntervallen(oRs)
|
||||
{
|
||||
var res = rdpt.getIntervalString(oRs("res_deel_key").Value, resdate, bloktijden);
|
||||
var res = rdpt.getIntervalString(oRs("res_deel_key").Value, resdate, bloktijden, geb_key);
|
||||
if (res =="") res = L("lcl_res_intervalbezet");
|
||||
return res;
|
||||
}
|
||||
@@ -840,7 +860,7 @@ transitParam2 += "&startpage=" + startpage;
|
||||
var rst = new ResultsetTable({ keyColumn: "res_deel_key",
|
||||
ID: "resdltable",
|
||||
sql: sql,
|
||||
title: L("lcl_resdeel_beschikbaar_op").format(gebouw_naam, toDateString(resdate)),
|
||||
title: L("lcl_resdeel_beschikbaar_op").format(gebouw_naam, toDateString(resdate, { isLocal: true })),
|
||||
buttons: buttons,
|
||||
emptySetString: L("lcl_res_niets_beschikbaar"),
|
||||
showAll: showAll,
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
rdpt = {
|
||||
|
||||
// Levert de 3 meest recent geboekte werkplekken op voor de gegeven catalogi
|
||||
mijn_verdiepingen_met_resdelen_hist_sql: function(p_res_disc_key_arr, p_alglevel)
|
||||
{
|
||||
var hsql = " SELECT l.alg_locatie_plaats"
|
||||
@@ -46,8 +47,8 @@ rdpt = {
|
||||
+ " AND rdis.ins_discipline_verwijder IS NULL"
|
||||
+ " AND w.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")";
|
||||
|
||||
if (p_alglevel > -1 )
|
||||
{ // Er is een scope-beperking van kracht
|
||||
if (p_alglevel > -1)
|
||||
{ // Er is een scope-beperking van kracht
|
||||
hsql += " AND v.alg_verdieping_key IN"
|
||||
+ " (SELECT alg_verdieping_key"
|
||||
+ " FROM fac_v_my_floors"
|
||||
@@ -70,14 +71,13 @@ rdpt = {
|
||||
+ " , rdis.ins_discipline_omschrijving"
|
||||
+ " ORDER BY res_rsv_ruimte_van DESC";
|
||||
|
||||
return "SELECT * FROM (" + hsql + ") WHERE ROWNUM < 4";
|
||||
return "SELECT * FROM (" + hsql + ") WHERE ROWNUM <= 3";
|
||||
},
|
||||
|
||||
// Selecteer gebouwen of verdiepingen waarop res_delen van deze disciplines voorkomen, met wat gegevens
|
||||
// Als gebouw_key -1 is worden gebouwen geselecteerd, als er een gebouw_key gegeven is, dan de verdiepingen
|
||||
mijn_verdiepingen_met_resdelen_sql: function(p_res_disc_key_arr, p_gebouw_key, p_alglevel, p_dateoffset, p_resdate)
|
||||
{
|
||||
|
||||
var lsql = " SELECT l.alg_locatie_plaats"
|
||||
+ " , l.alg_locatie_code"
|
||||
+ " , g.alg_gebouw_naam"
|
||||
@@ -96,7 +96,7 @@ rdpt = {
|
||||
+ " , alg_v_aanweziggebouw g"
|
||||
+ " , alg_v_aanwezigverdieping v"
|
||||
+ " , alg_locatie l"
|
||||
+ " , alg_district di"
|
||||
+ " , alg_district di"
|
||||
+ " WHERE di.alg_district_key = l.alg_district_key "
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key "
|
||||
+ " AND plts.alg_verdieping_key = v.alg_verdieping_key"
|
||||
@@ -105,8 +105,8 @@ rdpt = {
|
||||
+ " AND id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys "
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type "
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key "
|
||||
+ " AND (rd.res_deel_vervaldatum IS NULL OR rd.res_deel_vervaldatum > "
|
||||
+ (p_resdate ? p_resdate.toSQL() : "SYSDATE+"+(p_dateoffset||0) ) + ")"
|
||||
+ " AND ( rd.res_deel_vervaldatum IS NULL"
|
||||
+ " OR rd.res_deel_vervaldatum > " + (p_resdate ? p_resdate.toSQL() : "SYSDATE + " + (p_dateoffset || 0)) + ")"
|
||||
+ " AND rd.res_discipline_key = rdis.ins_discipline_key"
|
||||
+ " AND rdis.ins_discipline_verwijder IS NULL"
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")";
|
||||
@@ -114,8 +114,8 @@ rdpt = {
|
||||
if (p_alglevel > -1 )
|
||||
{ // Er is een scope-beperking van kracht
|
||||
lsql += " AND v.alg_verdieping_key IN (SELECT alg_verdieping_key FROM fac_v_my_floors "
|
||||
+ " WHERE prs_perslid_key = " + user_key
|
||||
+ " AND niveau = " + p_alglevel + ")";
|
||||
+ " WHERE prs_perslid_key = " + user_key
|
||||
+ " AND niveau = " + p_alglevel + ")";
|
||||
}
|
||||
lsql += " GROUP BY l.alg_locatie_plaats"
|
||||
+ " , l.alg_locatie_code"
|
||||
@@ -128,7 +128,7 @@ rdpt = {
|
||||
+ " , v.alg_verdieping_code"
|
||||
+ " , rdis.ins_discipline_key"
|
||||
+ " , rdis.ins_discipline_omschrijving"
|
||||
+ " ORDER BY alg_locatie_plaats, alg_gebouw_naam, ins_discipline_omschrijving, alg_verdieping_volgnr, alg_verdieping_code" ;
|
||||
+ " ORDER BY alg_locatie_plaats, alg_gebouw_naam, ins_discipline_omschrijving, alg_verdieping_volgnr, alg_verdieping_code";
|
||||
|
||||
if (p_gebouw_key == -1)
|
||||
{
|
||||
@@ -155,20 +155,17 @@ rdpt = {
|
||||
},
|
||||
|
||||
// telt het aantal reserveerbare delen van de discipline in het gebouw of de verdieping
|
||||
aantal_resdelen_in_gebouw_sql: function(p_res_disc_key_arr, p_geb_key, p_flr_key, p_resdate)
|
||||
aantal_resdelen_in_gebouw_sql: function(p_res_disc_key_arr, p_geb_key)
|
||||
{
|
||||
// Bepaal het aantal items in dit gebouw
|
||||
var lsql = "SELECT COUNT (*) aantal "
|
||||
+ " FROM res_v_aanwezigdeel rd, ins_v_aanwezigdeel id, alg_v_allonroerendgoed plts "
|
||||
+ " WHERE id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys "
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type "
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key "
|
||||
+ (p_flr_key > -1 ? " AND plts.alg_verdieping_key = " + p_flr_key
|
||||
: " AND plts.alg_gebouw_key = " + p_geb_key
|
||||
)
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")"
|
||||
+ " AND (rd.res_deel_vervaldatum IS NULL OR rd.res_deel_vervaldatum > "
|
||||
+ (p_resdate ? p_resdate.toSQL() : "SYSDATE") + ")";
|
||||
+ " FROM res_v_aanwezigdeel rd, ins_v_aanwezigdeel id, alg_v_allonroerendgoed plts "
|
||||
+ " WHERE id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys "
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type "
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key "
|
||||
+ " AND plts.alg_gebouw_key = " + p_geb_key
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")"
|
||||
+ " AND (rd.res_deel_vervaldatum IS NULL OR rd.res_deel_vervaldatum > SYSDATE)";
|
||||
return lsql;
|
||||
},
|
||||
|
||||
@@ -176,56 +173,83 @@ rdpt = {
|
||||
// Als p_resdate is gegeven, dan wordt uiteindelijk alleen het record voor die dag daaruit geselecteerd.
|
||||
// Als p_act_key is meegegeven en het is een child-activiteit dan worden alleen dagen meegenomen waar
|
||||
// de master een reservering heeft
|
||||
dagbezetting_resdelen_in_gebouw_sql: function (p_res_disc_key_arr, p_geb_key, p_flr_key, p_dateoffset, p_datelimit, p_resdate, p_act_key)
|
||||
dagbezetting_resdelen_in_gebouw_sql: function (p_res_disc_key_arr, p_geb_key, p_flr_key, p_dateoffset, p_datelimit, p_local_resdate, p_act_key)
|
||||
{
|
||||
var lsql = "SELECT datum, SUM (gevuld) gevuld, MAX (aantal) aantal, MAX (vrijedag) vrijedag, MAX (weekdag) weekdag "
|
||||
+ "FROM ("
|
||||
+ " SELECT TRUNC (rrd.res_rsv_deel_van) datum,"
|
||||
+ " SUM(rrd.res_rsv_deel_tot-rrd.res_rsv_deel_van)*24 gevuld,"
|
||||
+ " vrij.mld_vrije_dagen_key vrijedag, " // >0 is vrijedag
|
||||
+ " fac.getweekdaynum (res_rsv_deel_van) weekdag, " // 7 en 1 zijn weekend
|
||||
+ " COUNT (*) aantal "
|
||||
+ " FROM res_v_aanwezigrsv_deel rrd, "
|
||||
+ " res_v_aanwezigdeel rd, "
|
||||
+ " ins_v_aanwezigdeel id, "
|
||||
+ " alg_v_allonroerendgoed plts, "
|
||||
+ " alg_gebouw g,"
|
||||
+ " mld_vrije_dagen vrij "
|
||||
+ " WHERE rrd.res_deel_key = rd.res_deel_key "
|
||||
+ " AND id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys "
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type "
|
||||
+ " AND vrij.mld_vrije_dagen_datum(+) = TRUNC (rrd.res_rsv_deel_van) "
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key "
|
||||
+ " AND rrd.res_rsv_deel_dirtlevel = 0" // nodig?
|
||||
+ (p_flr_key > -1 ? " AND plts.alg_verdieping_key = " + p_flr_key
|
||||
: " AND plts.alg_gebouw_key = " + p_geb_key)
|
||||
+ " AND g.alg_gebouw_key = plts.alg_gebouw_key"
|
||||
+ " AND vrij.mld_vrije_dagen_id(+) = COALESCE(g.mld_vrije_dagen_id, 'Default')"
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")"
|
||||
+ (p_resdate ? " AND TRUNC (rrd.res_rsv_deel_van) = " + p_resdate.toSQL()
|
||||
: " AND TRUNC (rrd.res_rsv_deel_van) BETWEEN TRUNC (SYSDATE +"+(p_dateoffset||0)+") AND TRUNC (SYSDATE-1+"+(p_dateoffset||0)+"+"+p_datelimit+") "
|
||||
)
|
||||
+ " GROUP BY vrij.mld_vrije_dagen_key, TRUNC (rrd.res_rsv_deel_van), res_rsv_deel_van "
|
||||
+ " UNION ALL" // de dagen zonder reserveringen
|
||||
+ " SELECT TRUNC (SYSDATE + "+p_dateoffset+"+ (LEVEL - 1)) dag, 0, 0, fac.getweekdaynum (SYSDATE + "+p_dateoffset+"+(LEVEL - 1)), 0 "
|
||||
+ " FROM DUAL"
|
||||
+ " CONNECT BY LEVEL <= "+p_datelimit
|
||||
+ " UNION ALL" // de vrije dagen daarvan
|
||||
+ " SELECT mld_vrije_dagen_datum, 0, 1, 0, 0 "
|
||||
+ " FROM mld_vrije_dagen vrij"
|
||||
+ " , alg_gebouw g"
|
||||
+ (p_flr_key > -1 ? " , alg_verdieping v" : "")
|
||||
+ " WHERE vrij.mld_vrije_dagen_datum BETWEEN TRUNC (SYSDATE +"+(p_dateoffset||0)+") AND TRUNC (SYSDATE-1+"+(p_dateoffset||0)+"+"+p_datelimit+") "
|
||||
+ (p_flr_key > -1 ? " AND v.alg_verdieping_key = " + p_flr_key
|
||||
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
|
||||
: " AND g.alg_gebouw_key = " + p_geb_key)
|
||||
+ " AND vrij.mld_vrije_dagen_id = COALESCE(g.mld_vrije_dagen_id, 'Default')"
|
||||
+ ")"
|
||||
+ "GROUP BY datum ";
|
||||
var local_tz;
|
||||
if (p_flr_key > -1) {
|
||||
local_tz = res.getTimezoneBy(p_flr_key, "V");
|
||||
} else {
|
||||
local_tz = res.getTimezoneBy(p_geb_key, "G");
|
||||
}
|
||||
|
||||
if (p_resdate)
|
||||
{
|
||||
lsql = "SELECT * FROM (" + lsql + ") WHERE datum = " + p_resdate.toSQL();
|
||||
function toLocalDate(expr) {
|
||||
return convertToLocalTimeSQL(expr, local_tz);
|
||||
}
|
||||
|
||||
var offsetExpr = (p_dateoffset || 0);
|
||||
|
||||
var localRsvDate = toLocalDate("rrd.res_rsv_deel_van");
|
||||
var localResWeekday = "fac.getweekdaynum(" + localRsvDate + ")";
|
||||
|
||||
var localToday = "TRUNC(" + toLocalDate("SYSDATE") + ")";
|
||||
var localRangeStart = localToday + " + " + offsetExpr;
|
||||
var localRangeEnd = localToday + " + " + (offsetExpr + p_datelimit - 1);
|
||||
|
||||
var localResdateFilter, localVrijeDagFilter;
|
||||
if (p_local_resdate) {
|
||||
localResdateFilter = " AND TRUNC(" + localRsvDate + ") = " + p_local_resdate.toSQL();
|
||||
localVrijeDagFilter = " vrij.mld_vrije_dagen_datum = " + p_local_resdate.toSQL();
|
||||
} else {
|
||||
localResdateFilter = " AND TRUNC(" + localRsvDate + ") BETWEEN " + localRangeStart + " AND " + localRangeEnd;
|
||||
localVrijeDagFilter = " vrij.mld_vrije_dagen_datum BETWEEN " + localRangeStart + " AND " + localRangeEnd;
|
||||
}
|
||||
var localDayByLevel = localRangeStart + " + (LEVEL - 1)";
|
||||
|
||||
var lsql = "SELECT datum, SUM (gevuld) gevuld, MAX (aantal) aantal, MAX (vrijedag) vrijedag, MAX (weekdag) weekdag "
|
||||
+ " FROM ("
|
||||
+ " SELECT TRUNC(" + localRsvDate + ") datum,"
|
||||
+ " SUM(rrd.res_rsv_deel_tot-rrd.res_rsv_deel_van)*24 gevuld,"
|
||||
+ " vrij.mld_vrije_dagen_key vrijedag, "
|
||||
+ " " + localResWeekday + " weekdag, "
|
||||
+ " COUNT (*) aantal "
|
||||
+ " FROM res_v_aanwezigrsv_deel rrd, "
|
||||
+ " res_v_aanwezigdeel rd, "
|
||||
+ " ins_v_aanwezigdeel id, "
|
||||
+ " alg_v_allonroerendgoed plts, "
|
||||
+ " alg_gebouw g,"
|
||||
+ " mld_vrije_dagen vrij "
|
||||
+ " WHERE rrd.res_deel_key = rd.res_deel_key "
|
||||
+ " AND id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys "
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type "
|
||||
+ " AND vrij.mld_vrije_dagen_datum(+) = TRUNC(" + localRsvDate + ")"
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key "
|
||||
+ " AND rrd.res_rsv_deel_dirtlevel = 0"
|
||||
+ (p_flr_key > -1 ? " AND plts.alg_verdieping_key = " + p_flr_key
|
||||
: " AND plts.alg_gebouw_key = " + p_geb_key)
|
||||
+ " AND g.alg_gebouw_key = plts.alg_gebouw_key"
|
||||
+ " AND vrij.mld_vrije_dagen_id(+) = COALESCE(g.mld_vrije_dagen_id, 'Default')"
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")"
|
||||
+ localResdateFilter
|
||||
+ " GROUP BY vrij.mld_vrije_dagen_key, TRUNC(" + localRsvDate + "), res_rsv_deel_van "
|
||||
+ " UNION ALL"
|
||||
+ " SELECT TRUNC(" + localDayByLevel + ") dag, 0, 0, fac.getweekdaynum(" + localDayByLevel + "), 0 "
|
||||
+ " FROM DUAL"
|
||||
+ " CONNECT BY LEVEL <= " + p_datelimit
|
||||
+ " UNION ALL"
|
||||
+ " SELECT vrij.mld_vrije_dagen_datum, 0, 1, 0, 0 "
|
||||
+ " FROM mld_vrije_dagen vrij"
|
||||
+ " , alg_gebouw g"
|
||||
+ (p_flr_key > -1 ? " , alg_verdieping v" : "")
|
||||
+ " WHERE " + localVrijeDagFilter
|
||||
+ (p_flr_key > -1 ? " AND v.alg_verdieping_key = " + p_flr_key
|
||||
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
|
||||
: " AND g.alg_gebouw_key = " + p_geb_key)
|
||||
+ " AND vrij.mld_vrije_dagen_id = COALESCE(g.mld_vrije_dagen_id, 'Default')"
|
||||
+ ")"
|
||||
+ " GROUP BY datum ";
|
||||
|
||||
if (p_local_resdate) {
|
||||
lsql = "SELECT * FROM (" + lsql + ") WHERE datum = " + p_local_resdate.toSQL(); // Deze is al TRUNC'ed
|
||||
}
|
||||
|
||||
if (p_act_key > 0)
|
||||
@@ -248,13 +272,39 @@ rdpt = {
|
||||
+ " )";
|
||||
}
|
||||
}
|
||||
lsql = lsql + "ORDER BY 1";
|
||||
lsql = lsql + " ORDER BY 1";
|
||||
|
||||
return lsql;
|
||||
},
|
||||
|
||||
dagbezetting_resdelen_in_aanweziggebouw_sql: function (p_res_disc_key_arr, p_res_deel_key, p_geb_key, p_flr_key, p_dateoffset, p_datelimit, p_resdate, p_act_key)
|
||||
dagbezetting_resdelen_in_aanweziggebouw_sql: function (p_res_disc_key_arr, p_res_deel_key, p_geb_key, p_dateoffset, p_datelimit, p_act_key)
|
||||
{
|
||||
var server_tz = S("fac_server_timezone");
|
||||
var local_tz = res.getTimezoneBy(p_geb_key, "G") || server_tz;
|
||||
|
||||
function toServerDate(expr) {
|
||||
return convertToServerTimeSQL(expr, local_tz);
|
||||
}
|
||||
function toLocalDate(expr) {
|
||||
return convertToLocalTimeSQL(expr, local_tz);
|
||||
}
|
||||
// Deze functie converteert de gegeven expressie naar locale tijd, trunct die dan op locale dag, en converteert die naar server-tijd
|
||||
function localizedTrunc(expr) {
|
||||
return toServerDate("TRUNC(" + toLocalDate(expr) + ")");
|
||||
}
|
||||
var offsetExpr = (p_dateoffset || 0);
|
||||
|
||||
var localRsvDate = toLocalDate("rrd.res_rsv_deel_van");
|
||||
var localRsvDateTrunced = "TRUNC(" + localRsvDate + ")";
|
||||
|
||||
var localResWeekday = "fac.getweekdaynum(" + toLocalDate("rrd.res_rsv_deel_van") + ")";
|
||||
var localVervalDate = "TRUNC(" + toLocalDate("rd.res_deel_vervaldatum") + ")";
|
||||
|
||||
var serverFromLocalRangeStart = localizedTrunc("SYSDATE") + " + " + offsetExpr;
|
||||
var serverFromLocalRangeEnd = localizedTrunc("SYSDATE") + " - 1 + " + offsetExpr + " + " + p_datelimit;
|
||||
|
||||
var serverDateFilter = " AND rrd.res_rsv_deel_van BETWEEN " + serverFromLocalRangeStart + " AND " + serverFromLocalRangeEnd;
|
||||
|
||||
var lsql = "SELECT datum"
|
||||
+ " , ins_discipline_key"
|
||||
+ " , ins_discipline_omschrijving"
|
||||
@@ -265,13 +315,13 @@ rdpt = {
|
||||
+ " , MAX(weekdag) weekdag"
|
||||
+ " , MAX(aantal_delen) delen"
|
||||
+ " FROM ("
|
||||
+ " SELECT TRUNC(rrd.res_rsv_deel_van) datum"
|
||||
+ " SELECT " + localRsvDateTrunced + " datum"
|
||||
+ " , rdis.ins_discipline_key"
|
||||
+ " , " + lcl.xsqla("rdis.ins_discipline_omschrijving", "rdis.ins_discipline_key")
|
||||
+ " , rdis.ins_discipline_image"
|
||||
+ " , SUM(rrd.res_rsv_deel_tot-rrd.res_rsv_deel_van)*24 gevuld"
|
||||
+ " , vrij.mld_vrije_dagen_key vrijedag" // >0 is vrijedag
|
||||
+ " , fac.getweekdaynum(res_rsv_deel_van) weekdag" // 7 en 1 zijn weekend
|
||||
+ " , vrij.mld_vrije_dagen_key vrijedag"
|
||||
+ " , " + localResWeekday + " weekdag"
|
||||
+ " , COUNT(*) aantal"
|
||||
+ " , 0 aantal_delen"
|
||||
+ " FROM res_v_aanwezigrsv_deel rrd"
|
||||
@@ -285,46 +335,44 @@ rdpt = {
|
||||
+ (p_res_deel_key > -1 ? " AND rd.res_deel_key = " + p_res_deel_key : "")
|
||||
+ " AND id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys"
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type"
|
||||
+ " AND vrij.mld_vrije_dagen_datum(+) = TRUNC (rrd.res_rsv_deel_van)"
|
||||
+ " AND vrij.mld_vrije_dagen_datum(+) = " + localRsvDateTrunced
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key"
|
||||
+ " AND rrd.res_rsv_deel_dirtlevel = 0" // nodig?
|
||||
+ " AND rrd.res_rsv_deel_dirtlevel = 0"
|
||||
+ " AND rd.res_discipline_key = rdis.ins_discipline_key"
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")"
|
||||
+ (p_flr_key > -1 ? " AND plts.alg_verdieping_key = " + p_flr_key
|
||||
: " AND plts.alg_gebouw_key = " + p_geb_key)
|
||||
+ " AND plts.alg_gebouw_key = " + p_geb_key
|
||||
+ " AND g.alg_gebouw_key = plts.alg_gebouw_key"
|
||||
+ " AND vrij.mld_vrije_dagen_id(+) = COALESCE(g.mld_vrije_dagen_id, 'Default')"
|
||||
+ (p_resdate ? " AND TRUNC(rrd.res_rsv_deel_van) = " + p_resdate.toSQL()
|
||||
: " AND TRUNC(rrd.res_rsv_deel_van) BETWEEN TRUNC(SYSDATE +"+(p_dateoffset||0)+") AND TRUNC(SYSDATE-1+"+(p_dateoffset||0)+"+"+p_datelimit+")"
|
||||
)
|
||||
+ serverDateFilter
|
||||
+ " AND ( rd.res_deel_vervaldatum IS NULL"
|
||||
+ " OR rd.res_deel_vervaldatum > TRUNC(rrd.res_rsv_deel_van)"
|
||||
+ " OR rd.res_deel_vervaldatum > rrd.res_rsv_deel_van"
|
||||
+ " )"
|
||||
+ " GROUP BY vrij.mld_vrije_dagen_key"
|
||||
+ " , TRUNC(rrd.res_rsv_deel_van)"
|
||||
+ " , " + localRsvDateTrunced
|
||||
+ " , res_rsv_deel_van"
|
||||
+ " , rdis.ins_discipline_key"
|
||||
+ " , ins_discipline_omschrijving"
|
||||
+ " , ins_discipline_image"
|
||||
+ " UNION ALL" // de dagen zonder reserveringen + aantal reserveerbare eenheden
|
||||
+ " UNION ALL"
|
||||
+ " SELECT d.dag"
|
||||
+ " , rdis.ins_discipline_key"
|
||||
+ " , " + lcl.xsqla("rdis.ins_discipline_omschrijving", "rdis.ins_discipline_key")
|
||||
+ " , rdis.ins_discipline_image"
|
||||
+ " , 0"
|
||||
+ " , 0"
|
||||
+ " , d.dagnr"
|
||||
+ " , fac.getweekdaynum(d.dag) dagnr"
|
||||
+ " , 0"
|
||||
+ " , COUNT(*)"
|
||||
+ " FROM res_v_aanwezigdeel rd"
|
||||
+ " , res_discipline rdis"
|
||||
+ " , ins_v_aanwezigdeel id"
|
||||
+ " , alg_v_allonroerendgoed plts"
|
||||
+ ", (SELECT TRUNC(SYSDATE + " + p_dateoffset + "+ (LEVEL - 1)) dag"
|
||||
+ " , fac.getweekdaynum(SYSDATE + "+p_dateoffset+"+(LEVEL - 1)) dagnr"
|
||||
+ " FROM DUAL"
|
||||
+ " CONNECT BY LEVEL <= " + p_datelimit
|
||||
+ " ) d"
|
||||
+ " , alg_gebouw g"
|
||||
+ " , (SELECT TRUNC(" + toLocalDate("SYSDATE + " + p_dateoffset + " + (LEVEL - 1)") + ") dag"
|
||||
+ " , fac.getweekdaynum(" + toLocalDate("SYSDATE + " + p_dateoffset + " + (LEVEL - 1)") + ") dagnr"
|
||||
+ " FROM DUAL"
|
||||
+ " CONNECT BY LEVEL <= " + p_datelimit
|
||||
+ " ) d"
|
||||
+ " WHERE id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys "
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type"
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key"
|
||||
@@ -333,19 +381,17 @@ rdpt = {
|
||||
)
|
||||
+ " AND rd.res_discipline_key = rdis.ins_discipline_key"
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") +")"
|
||||
+ (p_flr_key > -1 ? " AND plts.alg_verdieping_key = " + p_flr_key
|
||||
: " AND plts.alg_gebouw_key = " + p_geb_key
|
||||
)
|
||||
+ " AND plts.alg_gebouw_key = " + p_geb_key
|
||||
+ " AND g.alg_gebouw_key = plts.alg_gebouw_key"
|
||||
+ " AND ( rd.res_deel_vervaldatum IS NULL"
|
||||
+ " OR rd.res_deel_vervaldatum > d.dag"
|
||||
+ " OR " + localVervalDate + " > d.dag"
|
||||
+ " )"
|
||||
+ " GROUP BY d.dag"
|
||||
+ " , d.dagnr"
|
||||
+ " , rdis.ins_discipline_key"
|
||||
+ " , ins_discipline_omschrijving"
|
||||
+ " , ins_discipline_image"
|
||||
+ " UNION ALL" // de vrije dagen daarvan
|
||||
+ " SELECT mld_vrije_dagen_datum"
|
||||
+ " UNION ALL"
|
||||
+ " SELECT vrij.mld_vrije_dagen_datum"
|
||||
+ " , rdis.ins_discipline_key"
|
||||
+ " , " + lcl.xsqla("rdis.ins_discipline_omschrijving", "rdis.ins_discipline_key")
|
||||
+ " , rdis.ins_discipline_image"
|
||||
@@ -357,17 +403,13 @@ rdpt = {
|
||||
+ " FROM mld_vrije_dagen vrij"
|
||||
+ " , res_discipline rdis"
|
||||
+ " , alg_gebouw g"
|
||||
+ (p_flr_key > -1 ? " , alg_verdieping v" : "")
|
||||
+ " WHERE vrij.mld_vrije_dagen_datum BETWEEN TRUNC(SYSDATE +"+(p_dateoffset||0)+") AND TRUNC(SYSDATE-1+"+(p_dateoffset||0)+"+"+p_datelimit+")"
|
||||
+ " AND rdis.ins_discipline_key IN (" + p_res_disc_key_arr.join(",") +")" // voor elke discipline die meedoet
|
||||
+ (p_flr_key > -1 ? " AND v.alg_verdieping_key = " + p_flr_key
|
||||
+ " AND v.alg_gebouw_key = g.alg_gebouw_key"
|
||||
: " AND g.alg_gebouw_key = " + p_geb_key)
|
||||
+ " WHERE vrij.mld_vrije_dagen_datum BETWEEN " + serverFromLocalRangeStart + " AND " + serverFromLocalRangeEnd
|
||||
+ " AND rdis.ins_discipline_key IN (" + p_res_disc_key_arr.join(",") +")"
|
||||
+ " AND g.alg_gebouw_key = " + p_geb_key
|
||||
+ " AND vrij.mld_vrije_dagen_id = COALESCE(g.mld_vrije_dagen_id, 'Default')"
|
||||
+ ")"
|
||||
+ " GROUP BY ins_discipline_key, ins_discipline_omschrijving, ins_discipline_image, datum";
|
||||
|
||||
|
||||
if (p_act_key > 0)
|
||||
{
|
||||
var sql = "SELECT res_activiteit_master_key"
|
||||
@@ -381,23 +423,18 @@ rdpt = {
|
||||
res_activiteit_duur = oRs("res_activiteit_duur").Value;
|
||||
}
|
||||
oRs.close();
|
||||
if (master_act_key > 0)
|
||||
{
|
||||
if (master_act_key > 0) {
|
||||
lsql = "SELECT * FROM (" + lsql + ")"
|
||||
+ " WHERE EXISTS (SELECT 1 FROM res_rsv_ruimte"
|
||||
+ " WHERE res_rsv_ruimte_verwijder IS NULL"
|
||||
+ " AND res_activiteit_key = " + master_act_key
|
||||
+ " AND TRUNC(res_rsv_ruimte_van) = datum"
|
||||
+ " AND TRUNC(" + toLocalDate("res_rsv_ruimte_van") + ") = datum"
|
||||
+ " )";
|
||||
}
|
||||
}
|
||||
|
||||
if (p_resdate)
|
||||
{
|
||||
lsql = "SELECT * FROM (" + lsql + ") WHERE datum = " + p_resdate.toSQL();
|
||||
}
|
||||
|
||||
lsql += " ORDER BY ins_discipline_omschrijving, datum";
|
||||
|
||||
return lsql;
|
||||
},
|
||||
|
||||
@@ -406,7 +443,26 @@ rdpt = {
|
||||
// Zo kun je dus bezette plekken uitsluiten
|
||||
res_deel_bezetting_op_dag_sql: function (p_res_disc_key_arr, p_geb_key, p_flr_key, p_resdate, p_maxbezet)
|
||||
{
|
||||
var lsql = "SELECT plaan.alg_plaatsaanduiding plaats, "
|
||||
var server_tz = S("fac_server_timezone");
|
||||
var local_tz = server_tz;
|
||||
if (p_flr_key > -1) {
|
||||
local_tz = res.getTimezoneBy(p_flr_key, "V");
|
||||
} else {
|
||||
local_tz = res.getTimezoneBy(p_geb_key, "G");
|
||||
}
|
||||
|
||||
function toLocalDate(expr) {
|
||||
return convertToLocalTimeSQL(expr, local_tz);
|
||||
}
|
||||
|
||||
var localRsvDate = toLocalDate("rrd.res_rsv_deel_van");
|
||||
var localRsvDateTrunced = "TRUNC(" + localRsvDate + ")";
|
||||
|
||||
// p_resdate is hier al de juiste (lokale) dag, TRUNC'ed
|
||||
|
||||
var localVervalDate = toLocalDate("rd.res_deel_vervaldatum");
|
||||
|
||||
var lsql = "SELECT plaan.alg_plaatsaanduiding plaats, "
|
||||
+ lcl.xsql("rd.res_deel_omschrijving", "rd.res_deel_key") + " res_deel_omschrijving, "
|
||||
+ " COALESCE(SUM (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24, 0) bezet, "
|
||||
+ " rd.res_deel_key, "
|
||||
@@ -428,13 +484,13 @@ rdpt = {
|
||||
+ " AND plts.alg_onroerendgoed_keys = plaan.alg_onroerendgoed_keys "
|
||||
+ " AND plts.alg_type = plaan.alg_type "
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key "
|
||||
+ " AND (rd.res_deel_vervaldatum IS NULL OR rd.res_deel_vervaldatum > "+p_resdate.toSQL()+")"
|
||||
+ " AND (rd.res_deel_vervaldatum IS NULL OR " + localVervalDate + " > " + p_resdate.toSQL() + ")"
|
||||
+ (p_flr_key>-1 ? " AND plts.alg_verdieping_key = " + p_flr_key
|
||||
: " AND plts.alg_gebouw_key = " + p_geb_key
|
||||
)
|
||||
)
|
||||
+ " AND rd.res_discipline_key = rdis.ins_discipline_key"
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")"
|
||||
+ " AND TRUNC (rrd.res_rsv_deel_van) = " + p_resdate.toSQL()
|
||||
+ " AND " + localRsvDateTrunced + " = " + p_resdate.toSQL()
|
||||
+ " GROUP BY plaan.alg_plaatsaanduiding, "
|
||||
+ " rd.res_deel_omschrijving, "
|
||||
+ " rd.res_deel_key, "
|
||||
@@ -468,16 +524,16 @@ rdpt = {
|
||||
+ " AND plts.alg_type = plaan.alg_type "
|
||||
+ " AND rd.res_ins_deel_key = id.ins_deel_key "
|
||||
+ " AND rd.res_discipline_key = rdis.ins_discipline_key"
|
||||
+ " AND (rd.res_deel_vervaldatum IS NULL OR rd.res_deel_vervaldatum > "+p_resdate.toSQL()+")"
|
||||
+ " AND (rd.res_deel_vervaldatum IS NULL OR " + localVervalDate + " > " + p_resdate.toSQL() + ")"
|
||||
+ (p_flr_key>-1 ? " AND plts.alg_verdieping_key = " + p_flr_key
|
||||
: " AND plts.alg_gebouw_key = " + p_geb_key
|
||||
)
|
||||
)
|
||||
+ " AND rd.res_discipline_key IN (" + p_res_disc_key_arr.join(",") + ")"
|
||||
+ " AND NOT EXISTS "
|
||||
+ " (SELECT '' "
|
||||
+ " FROM res_v_aanwezigrsv_deel rrd "
|
||||
+ " WHERE rrd.res_deel_key = rd.res_deel_key "
|
||||
+ " AND TRUNC (rrd.res_rsv_deel_van) = " + p_resdate.toSQL() +") "
|
||||
+ " AND " + localRsvDateTrunced + " = " + p_resdate.toSQL() + ") "
|
||||
+ " GROUP BY plaan.alg_plaatsaanduiding, "
|
||||
+ " rd.res_deel_omschrijving, "
|
||||
+ " rd.res_deel_key, "
|
||||
@@ -488,7 +544,7 @@ rdpt = {
|
||||
+ " ins_discipline_image, "
|
||||
+ " rdis.ins_discipline_key, "
|
||||
+ " ins_discipline_omschrijving "
|
||||
+ " ORDER BY alg_verdieping_code,1,2 " ;
|
||||
+ " ORDER BY alg_verdieping_code,1,2 ";
|
||||
return lsql;
|
||||
},
|
||||
|
||||
@@ -509,59 +565,92 @@ rdpt = {
|
||||
// Geef de beschikbare intervallen uit p_bloktijden op p_resdate van p_res_deel_key, "" indien onbeschikbaar
|
||||
getIntervalString: function (p_res_deel_key, p_resdate, p_bloktijden)
|
||||
{
|
||||
var lres="";
|
||||
var server_tz = S("fac_server_timezone") || "";
|
||||
var local_tz = server_tz;
|
||||
|
||||
if (p_res_deel_key > 0) {
|
||||
var tzSql = "SELECT MIN(l.alg_locatie_timezone) alg_tz"
|
||||
+ " FROM res_v_aanwezigdeel rd"
|
||||
+ " , ins_v_aanwezigdeel id"
|
||||
+ " , alg_v_allonroerendgoed plts"
|
||||
+ " , alg_gebouw g"
|
||||
+ " , alg_locatie l"
|
||||
+ " WHERE rd.res_ins_deel_key = id.ins_deel_key"
|
||||
+ " AND id.ins_alg_ruimte_key = plts.alg_onroerendgoed_keys"
|
||||
+ " AND id.ins_alg_ruimte_type = plts.alg_type"
|
||||
+ " AND plts.alg_gebouw_key = g.alg_gebouw_key"
|
||||
+ " AND g.alg_locatie_key = l.alg_locatie_key"
|
||||
+ " AND rd.res_deel_key = " + p_res_deel_key;
|
||||
var tzRs = Oracle.Execute(tzSql);
|
||||
var alg_tz = tzRs("alg_tz").Value;
|
||||
tzRs.Close();
|
||||
if (alg_tz) {
|
||||
local_tz = alg_tz;
|
||||
}
|
||||
}
|
||||
|
||||
function toLocalDate(expr) {
|
||||
return convertToLocalTimeSQL(expr, local_tz);
|
||||
}
|
||||
function toServerDate(expr) {
|
||||
return convertToServerTimeSQL(expr, local_tz);
|
||||
}
|
||||
|
||||
var lres = "";
|
||||
var l_bloktijden = p_bloktijden.slice(0);
|
||||
// bloktijden eerst resetten (snap niet waarom, ik heb toch een kopie?) JGL?
|
||||
for (var i = 0; i < l_bloktijden.length; i++)
|
||||
{
|
||||
for (var i = 0; i < l_bloktijden.length; i++) {
|
||||
l_bloktijden[i].bezet = false;
|
||||
}
|
||||
|
||||
var localResVanExpr = toLocalDate("rm.res_rsv_ruimte_van");
|
||||
var localResTotExpr = toLocalDate("rm.res_rsv_ruimte_tot");
|
||||
|
||||
// p_resdate is de lokale _dag_ (ge-TRUNCed dus)
|
||||
var serverResdateRangeStart = toServerDate(p_resdate.toSQL());
|
||||
var serverResdateRangeEnd = serverResdateRangeStart + " + 1";
|
||||
|
||||
var lsql = "SELECT rm.res_reservering_key,"
|
||||
+ " rm.res_rsv_ruimte_volgnr,"
|
||||
+ " rm.res_rsv_ruimte_key,"
|
||||
+ " rm.res_rsv_ruimte_omschrijving,"
|
||||
+ " res_rsv_ruimte_van,"
|
||||
+ " res_rsv_ruimte_tot,"
|
||||
+ " " + localResVanExpr + " AS res_rsv_ruimte_van,"
|
||||
+ " " + localResTotExpr + " AS res_rsv_ruimte_tot,"
|
||||
+ " 0 res_disc_params_preposttime"
|
||||
+ " FROM res_rsv_ruimte rm,"
|
||||
+ " res_rsv_deel rd"
|
||||
+ " WHERE res_rsv_ruimte_van < {0}".format(p_resdate.endToSQL())
|
||||
+ " AND res_rsv_ruimte_tot > {0}".format(p_resdate.beginToSQL())
|
||||
+ " WHERE res_rsv_ruimte_van < " + serverResdateRangeEnd
|
||||
+ " AND res_rsv_ruimte_tot > " + serverResdateRangeStart
|
||||
+ " AND rd.res_rsv_ruimte_key = rm.res_rsv_ruimte_key"
|
||||
+ " AND rd.res_deel_key = " + p_res_deel_key
|
||||
+ " AND rm.res_rsv_ruimte_verwijder IS NULL"
|
||||
+ " AND rd.res_rsv_deel_verwijder IS NULL"
|
||||
+ " AND rd.res_rsv_deel_dirtlevel = 0"
|
||||
+ " ORDER BY rm.res_rsv_ruimte_van"; // Eerste vooraan.
|
||||
+ " ORDER BY res_rsv_ruimte_van";
|
||||
|
||||
// Bekijk voor dit object voor deze dag welke van de intervallen al bezet zijn
|
||||
// en welke dus nog niet
|
||||
|
||||
var loRs = Oracle.Execute( lsql );
|
||||
while (!loRs.Eof)
|
||||
{
|
||||
var loRs = Oracle.Execute(lsql);
|
||||
while (!loRs.Eof) {
|
||||
var van = new Date(loRs("res_rsv_ruimte_van").Value);
|
||||
var tot = new Date(loRs("res_rsv_ruimte_tot").Value);
|
||||
for (var i = 0; i < l_bloktijden.length; i++)
|
||||
{
|
||||
if (van < l_bloktijden[i].einddatum && tot > l_bloktijden[i].startdatum)
|
||||
{
|
||||
l_bloktijden[i].bezet = true;
|
||||
for (var j = 0; j < l_bloktijden.length; j++) {
|
||||
if (van < l_bloktijden[j].einddatum && tot > l_bloktijden[j].startdatum) {
|
||||
l_bloktijden[j].bezet = true;
|
||||
}
|
||||
}
|
||||
loRs.MoveNext();
|
||||
}
|
||||
loRs.Close();
|
||||
|
||||
for (var i = 0; i < l_bloktijden.length; i++)
|
||||
{
|
||||
if (!l_bloktijden[i].bezet)
|
||||
lres += l_bloktijden[i].name +" | ";
|
||||
for (var k = 0; k < l_bloktijden.length; k++) {
|
||||
if (!l_bloktijden[k].bezet) {
|
||||
lres += l_bloktijden[k].name + " | ";
|
||||
}
|
||||
}
|
||||
if (lres.substr(lres.length-3, 3) == " | ")
|
||||
lres = lres.substr(0, lres.length-3);
|
||||
else
|
||||
|
||||
if (lres.substr(lres.length - 3, 3) === " | ") {
|
||||
lres = lres.substr(0, lres.length - 3);
|
||||
} else {
|
||||
lres = "";
|
||||
}
|
||||
|
||||
return lres;
|
||||
},
|
||||
@@ -574,6 +663,10 @@ rdpt = {
|
||||
{
|
||||
var begintijd = new Date(0, 0, 0, 23, 59, 0);
|
||||
var eindtijd = new Date(0, 0, 0, 0, 0, 0);
|
||||
// var begintijd = new Date();
|
||||
// begintijd.setHours(23, 59);
|
||||
// var eindtijd = new Date();
|
||||
// eindtijd.setHours(0, 0);
|
||||
var btBegintijd;
|
||||
var btEindtijd;
|
||||
var btArr;
|
||||
@@ -586,13 +679,15 @@ rdpt = {
|
||||
for (index = 0; index < bt.length; index++)
|
||||
{
|
||||
btArr = bt[index].begin.split(":");
|
||||
btBegintijd = new Date(0, 0, 0, btArr[0], btArr[1], 0);
|
||||
btBegintijd = new Date();
|
||||
btBegintijd.setHours(btArr[0], btArr[1]);
|
||||
if (btBegintijd.getTime() < begintijd.getTime())
|
||||
{
|
||||
begintijd = btBegintijd;
|
||||
}
|
||||
btArr = bt[index].end.split(":");
|
||||
btEindtijd = new Date(0, 0, 0, btArr[0], btArr[1], 0);
|
||||
btEindtijd = new Date();
|
||||
btEindtijd.setHours(btArr[0], btArr[1]);
|
||||
if (btEindtijd.getTime() > eindtijd.getTime())
|
||||
{
|
||||
eindtijd = btEindtijd;
|
||||
|
||||
@@ -110,14 +110,19 @@ var sql = "SELECT sa.res_srtactiviteit_prefix"
|
||||
+ " AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key (+)"
|
||||
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key;
|
||||
var 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 server_res_van = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var server_res_tot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var res_ruimte_key = oRs("res_ruimte_key").Value;
|
||||
var resnrtxt = oRs("resnrtxt").Value;
|
||||
var hasFiat = oRs("res_rsv_ruimte_cat_appr").Value == 1;
|
||||
var isCV = oRs("res_srtactiviteit_soort").Value == 1;
|
||||
oRs.Close();
|
||||
|
||||
var local_tz = res.getRsvTimezone(rsv_ruimte_key);
|
||||
function toLocalDate(expr) {
|
||||
return convertToLocalTimeSQL(expr, local_tz);
|
||||
}
|
||||
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
@@ -198,7 +203,8 @@ oRs.Close();
|
||||
|
||||
<body class="listmode">
|
||||
<% var buttons = [];
|
||||
if (this_res.canChangeCV)
|
||||
var multi_tz = local_tz != S("fac_server_timezone") || local_tz != Session("time_zone"); // Hebben we te maken met een ruimte, gebruiker of server in een afwijkende tijdszone?
|
||||
if (!multi_tz && this_res.canChangeCV)
|
||||
buttons.push( { title: (this_res.hasCV ? L("lcl_change") : L("lcl_add")), icon: (this_res.hasCV ? "fa-fclt-edit" : "fa-plus"), action: "res_change()"});
|
||||
if (this_res.canFiatteren)
|
||||
buttons.push( {title: L("lcl_approve"), icon: "fa-check", action: "res_fiatteren()"});
|
||||
@@ -273,20 +279,32 @@ oRs.Close();
|
||||
|
||||
function fnVantijd(oRs)
|
||||
{
|
||||
// Als Van en Tot verschillen tonen we de datum erbij, anders alleen de tijd
|
||||
var vanDateString = (new Date(oRs("res_rsv_deel_tot").value).midnight().getTime() != new Date(oRs("res_rsv_deel_van").value).midnight().getTime() ? toDateTimeString(new Date(oRs("res_rsv_deel_van").value)) : toTimeString(new Date(oRs("res_rsv_deel_van").value)))
|
||||
if (oRs("vanbinnentijd").value == 0)
|
||||
var res_rsv_deel_van = oRs("local_res_rsv_deel_van").Value;
|
||||
var res_rsv_deel_tot = oRs("local_res_rsv_deel_tot").Value;
|
||||
|
||||
// Als Van en Tot verschillen tonen we de datum erbij, anders alleen de tijd
|
||||
var vanDateString = (new Date(res_rsv_deel_tot).midnight().getTime() != new Date(res_rsv_deel_van).midnight().getTime()
|
||||
? toDateTimeString(res_rsv_deel_van, undefined, undefined, undefined, undefined, true)
|
||||
: toTimeString(res_rsv_deel_van, undefined, true));
|
||||
if (oRs("vanbinnentijd").value == 0) {
|
||||
vanDateString = "<span class='outofbounds'>" + vanDateString + "</span>";
|
||||
return vanDateString;
|
||||
}
|
||||
return vanDateString;
|
||||
}
|
||||
|
||||
function fnTottijd(oRs)
|
||||
{
|
||||
// Als Van en Tot verschillen tonen we de datum erbij, anders alleen de tijd
|
||||
var totDateString = (new Date(oRs("res_rsv_deel_tot").value).midnight().getTime() != new Date(oRs("res_rsv_deel_van").value).midnight().getTime() ? toDateTimeString(new Date(oRs("res_rsv_deel_tot").value)) : toTimeString(new Date(oRs("res_rsv_deel_tot").value)))
|
||||
if (oRs("totbinnentijd").value == 0)
|
||||
var res_rsv_deel_van = oRs("local_res_rsv_deel_van").Value;
|
||||
var res_rsv_deel_tot = oRs("local_res_rsv_deel_tot").Value;
|
||||
|
||||
// Als Van en Tot verschillen tonen we de datum erbij, anders alleen de tijd
|
||||
var totDateString = (new Date(res_rsv_deel_tot).midnight().getTime() != new Date(res_rsv_deel_van).midnight().getTime()
|
||||
? toDateTimeString(res_rsv_deel_tot, undefined, undefined, undefined, undefined, true)
|
||||
: toTimeString(res_rsv_deel_tot, undefined, true));
|
||||
if (oRs("totbinnentijd").value == 0) {
|
||||
totDateString = "<span class='outofbounds'>" + totDateString + "</span>";
|
||||
return totDateString;
|
||||
}
|
||||
return totDateString;
|
||||
}
|
||||
|
||||
function fnTijd(oRs)
|
||||
@@ -375,6 +393,8 @@ var nonBulkFields = lcl.xsqla('rd.res_deel_omschrijving', 'rd.res_deel_key')
|
||||
+ " , res.getdeelprijs(rrd.res_rsv_deel_key) res_rsv_deel_prijs" // zou je achterwege kunnen laten als !anydeelprijs
|
||||
+ " , rrd.res_rsv_deel_van"
|
||||
+ " , rrd.res_rsv_deel_tot"
|
||||
+ " , " + toLocalDate("rrd.res_rsv_deel_van") + " local_res_rsv_deel_van"
|
||||
+ " , " + toLocalDate("rrd.res_rsv_deel_tot") + " local_res_rsv_deel_tot"
|
||||
+ " , rrd.res_rsv_deel_dirtlevel"
|
||||
+ " , CASE WHEN k.km900 > 0 THEN 1 ELSE 0 END bewerkbaar"
|
||||
+ " , rrd.res_rsv_deel_verwijder ddVerwijder"
|
||||
@@ -426,6 +446,8 @@ var bulkFields = " distinct "
|
||||
+ " , sel.selected * res.getdeelprijs(rrd.res_rsv_deel_key) res_rsv_deel_prijs" // zou je achterwege kunnen laten als !anydeelprijs
|
||||
+ " , rrd.res_rsv_deel_van"
|
||||
+ " , rrd.res_rsv_deel_tot"
|
||||
+ " , " + toLocalDate("rrd.res_rsv_deel_van") + " local_res_rsv_deel_van"
|
||||
+ " , " + toLocalDate("rrd.res_rsv_deel_tot") + " local_res_rsv_deel_tot"
|
||||
+ " , rrd.res_rsv_deel_dirtlevel"
|
||||
+ " , CASE WHEN k.km900 > 0 THEN 1 ELSE 0 END bewerkbaar"
|
||||
+ " , rrd.res_rsv_deel_verwijder ddVerwijder"
|
||||
@@ -527,10 +549,10 @@ var bulkFields = " distinct "
|
||||
+ " AND r1.res_deel_key NOT IN ("
|
||||
+ " SELECT distinct rrd.res_deel_key"
|
||||
+ " FROM res_rsv_ruimte rrr, res_rsv_deel rrd, res_deel rd"
|
||||
+ " WHERE ( rrr.RES_RSV_RUIMTE_VAN BETWEEN TO_DATE (" + res_van.toSQL(true) + ")"
|
||||
+ " AND TO_DATE (" + res_tot.toSQL(true) + ")"
|
||||
+ " OR rrr.RES_RSV_RUIMTE_TOT BETWEEN TO_DATE (" + res_van.toSQL(true) + ")"
|
||||
+ " AND TO_DATE (" + res_tot.toSQL(true) + "))"
|
||||
+ " WHERE ( rrr.res_rsv_ruimte_van BETWEEN TO_DATE (" + server_res_van.toSQL(true) + ")"
|
||||
+ " AND TO_DATE (" + server_res_tot.toSQL(true) + ")"
|
||||
+ " OR rrr.res_rsv_ruimte_tot BETWEEN TO_DATE (" + server_res_van.toSQL(true) + ")"
|
||||
+ " AND TO_DATE (" + server_res_tot.toSQL(true) + "))"
|
||||
+ " AND rrr.res_rsv_ruimte_key <> " + rsv_ruimte_key
|
||||
+ " AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
||||
+ " AND rrd.res_deel_key = rd.res_deel_key"
|
||||
@@ -731,6 +753,7 @@ var bulkFields = " distinct "
|
||||
+ " , ra.res_rsv_artikel_levering"
|
||||
+ " , ra.res_rsv_artikel_afhalen"
|
||||
+ " , rr.res_rsv_ruimte_tot"
|
||||
+ " , " + toLocalDate("rr.res_rsv_ruimte_tot") + " local_res_rsv_ruimte_tot"
|
||||
+ " , ra.res_rsv_artikel_verwijder ddVerwijder"
|
||||
+ " , CASE "
|
||||
+ " WHEN (ra.res_rsv_artikel_levering BETWEEN rr.res_rsv_ruimte_van "
|
||||
@@ -799,7 +822,7 @@ var bulkFields = " distinct "
|
||||
rst2.addColumn(new Column({caption: L("lcl_time"), content: fnTijd, datatype: "time", align:"center"}));
|
||||
rst2.addColumn(new Column({caption: L("lcl_res_ophalen"), content: fnAfhaaltijd, datatype: "time", align:"center"}));
|
||||
if (this_res.res_has_visitors)
|
||||
rst2.addColumn(new Column({caption: L("lcl_to"), content: "res_rsv_ruimte_tot", datatype: "time", align:"center"}));
|
||||
rst2.addColumn(new Column({caption: L("lcl_to"), content: "local_res_rsv_ruimte_tot", datatype: "time", align:"center"}));
|
||||
if (anyartikelprijs)
|
||||
rst2.addColumn(new Column({caption: L("lcl_r_price7"), content: "res_rsv_artikel_prijs", datatype: "currency"}));
|
||||
if (resdeleted)
|
||||
|
||||
@@ -209,6 +209,7 @@ FCLTHeader.Requires({plugins: ["jQuery"]})
|
||||
}
|
||||
else if (restype == "O") // zal rrr.mld_opdr_key gevuld zijn
|
||||
{
|
||||
// UNSUPPORTED; local_tz = ?
|
||||
}
|
||||
else
|
||||
{ // CV
|
||||
@@ -243,10 +244,9 @@ FCLTHeader.Requires({plugins: ["jQuery"]})
|
||||
oRs.Close();
|
||||
}
|
||||
|
||||
if (local_tz != S("fac_server_timezone")) {
|
||||
rrr.rsv_ruimte_van = convertToLocalTime(rrr.rsv_ruimte_van, local_tz);
|
||||
rrr.rsv_ruimte_tot = convertToLocalTime(rrr.rsv_ruimte_tot, local_tz);
|
||||
}
|
||||
// Local, zonder prefix, want we hebben de server-tijd niet nodig in dit bestand
|
||||
rrr.rsv_ruimte_van = convertToLocalTime(rrr.rsv_ruimte_van, local_tz);
|
||||
rrr.rsv_ruimte_tot = convertToLocalTime(rrr.rsv_ruimte_tot, local_tz);
|
||||
}
|
||||
%>
|
||||
<script type="text/javascript">
|
||||
@@ -426,8 +426,8 @@ FCLTHeader.Requires({plugins: ["jQuery"]})
|
||||
var buttons = [];
|
||||
if (rrr.rsv_ruimte_verwijder == null) // Anders mag je niets meer
|
||||
{
|
||||
|
||||
if (this_res.canChange || this_res.canChangeFEExtended)
|
||||
var multi_tz = local_tz != S("fac_server_timezone") || local_tz != Session("time_zone"); // Hebben we te maken met een ruimte, gebruiker of server in een afwijkende tijdszone?
|
||||
if (!multi_tz && (this_res.canChange || this_res.canChangeFEExtended))
|
||||
buttons.push( {title: L("lcl_change"), icon: "fa-fclt-edit", action: "res_change()"});
|
||||
else if (this_res.canWriteNoShow)
|
||||
buttons.push({action: "resNoShow()", title: L("lcl_res_no_show"), icon: "fa-frown"});
|
||||
@@ -507,14 +507,14 @@ FCLTHeader.Requires({plugins: ["jQuery"]})
|
||||
}
|
||||
if (rrr.rsv_ruimte_tot.midnight().getTime() == rrr.rsv_ruimte_van.midnight().getTime())
|
||||
{
|
||||
ROFIELDTR("fldDateTime", L("lcl_date"), toDateString(rrr.rsv_ruimte_van, undefined, undefined, true), params);
|
||||
var v_tot = (rrr.met_eindtijd ? " "+ L("lcl_tot") + " " + toTimeString(rrr.rsv_ruimte_tot, undefined, true) : "");
|
||||
ROFIELDTR("fldDateTime", L("lcl_time"), toTimeString(rrr.rsv_ruimte_van, undefined, true) + v_tot, params);
|
||||
ROFIELDTR("fldDateTime", L("lcl_date"), toDateString(rrr.rsv_ruimte_van, { isLocal: true }), params);
|
||||
var v_tot = (rrr.met_eindtijd ? " "+ L("lcl_tot") + " " + toTimeString(rrr.rsv_ruimte_tot, { isLocal: true }) : "");
|
||||
ROFIELDTR("fldDateTime", L("lcl_time"), toTimeString(rrr.rsv_ruimte_van, { isLocal: true }) + v_tot, params);
|
||||
}
|
||||
else // meerdaags
|
||||
{
|
||||
ROFIELDTR("fldDateTime", L("lcl_date"), toDateTimeString(rrr.rsv_ruimte_van, undefined, undefined, undefined, true), params);
|
||||
ROFIELDTR("fldDateTime", L("lcl_res_endtime"), toDateTimeString(rrr.rsv_ruimte_tot, undefined, undefined, undefined, true), params);
|
||||
ROFIELDTR("fldDateTime", L("lcl_date"), toDateTimeString(rrr.rsv_ruimte_van, { noMidnight: true, isLocal: true }), params);
|
||||
ROFIELDTR("fldDateTime", L("lcl_res_endtime"), toDateTimeString(rrr.rsv_ruimte_tot, { noMidnight: true, isLocal: true }), params);
|
||||
}
|
||||
|
||||
// if this_res.canReadNoShow??
|
||||
|
||||
@@ -1033,8 +1033,9 @@ function _get_ParamDate(pColl, pName, defVal)
|
||||
return val;
|
||||
}
|
||||
var val = _get_ParamInt(pColl, pName, -1);
|
||||
if (val>0 && val<=8640000000000000)
|
||||
if (val>0 && val<=8640000000000000) {
|
||||
return new Date(val);
|
||||
}
|
||||
|
||||
if (defVal instanceof Date)
|
||||
return defVal;
|
||||
@@ -1434,47 +1435,74 @@ function getUserHour(h)
|
||||
// User time-zone = Session("time_zone")
|
||||
// Server time-zone = S("fac_server_timezone")
|
||||
|
||||
// Lever de SQL op die de Datetime omzet naar de server tijdszone
|
||||
function convertToServerTimeSQL(userDateTimeExpr, localTimezone) {
|
||||
return convertToServerTime(userDateTimeExpr, localTimezone, true);
|
||||
}
|
||||
|
||||
// Lever de SQL op die de Datetime omzet naar de localized tijdszone
|
||||
function convertToLocalTimeSQL(serverDateTimeExpr, localTimezone) {
|
||||
return convertToLocalTime(serverDateTimeExpr, localTimezone, true);
|
||||
}
|
||||
|
||||
// Datetime van alg_locatie of user-tijdszone omzetten naar de server tijdszone
|
||||
function convertToServerTime(userDateTime, localTimezone) {
|
||||
function convertToServerTime(userDateTime, localTimezone, sqlOnly) {
|
||||
if (!localTimezone) {
|
||||
localTimezone = Session("time_zone"); // 'Local' = user timezone by default (= indien leeg)
|
||||
}
|
||||
return convertTimeZone(userDateTime, localTimezone, S("fac_server_timezone"));
|
||||
return convertTimeZone(userDateTime, localTimezone, S("fac_server_timezone"), sqlOnly);
|
||||
}
|
||||
|
||||
// Datetime van server tijdszone omzetten naar de alg_locatie of user-tijdszone
|
||||
function convertToLocalTime(serverDateTime, localTimezone) {
|
||||
function convertToLocalTime(serverDateTime, localTimezone, sqlOnly) {
|
||||
if (!localTimezone) {
|
||||
localTimezone = Session("time_zone"); // 'Local' = user timezone by default (= indien leeg)
|
||||
}
|
||||
return convertTimeZone(serverDateTime, S("fac_server_timezone"), localTimezone);
|
||||
return convertTimeZone(serverDateTime, S("fac_server_timezone"), localTimezone, sqlOnly);
|
||||
}
|
||||
|
||||
function convertTimeZone(thisDate, fromTZ, toTZ)
|
||||
function convertTimeZone(thisDate, fromTZ, toTZ, sqlOnly)
|
||||
{
|
||||
|
||||
if (!fromTZ || !toTZ || fromTZ.toUpperCase() == toTZ.toUpperCase())
|
||||
return thisDate;
|
||||
|
||||
var sql = "SELECT CAST ("
|
||||
+ "FROM_TZ (CAST ( "+thisDate.toSQL(true)+" AS TIMESTAMP), "+safe.quoted_sql(fromTZ)+")"
|
||||
+ " AT TIME ZONE "+safe.quoted_sql(toTZ)+" AS DATE)"
|
||||
var dateSQL = sqlOnly ? thisDate : thisDate.toSQL(true); // Bij sqlOnly wordt hier een veilige expressie verwacht
|
||||
var sql = "CAST ("
|
||||
+ "FROM_TZ (CAST ( " + dateSQL + " AS TIMESTAMP), " + safe.quoted_sql(fromTZ) + ")"
|
||||
+ " AT TIME ZONE " + safe.quoted_sql(toTZ) + " AS DATE)";
|
||||
|
||||
if (sqlOnly) {
|
||||
return sql;
|
||||
} else {
|
||||
sql = "SELECT " + sql
|
||||
+ " AS newDate"
|
||||
+ " FROM DUAL";
|
||||
}
|
||||
|
||||
var oRs = Oracle.Execute(sql);
|
||||
thisDate = new Date(oRs("newDate").value);
|
||||
oRs.close();
|
||||
|
||||
return thisDate;
|
||||
|
||||
}
|
||||
|
||||
// This function should only be used to format display,
|
||||
// <20> never as part of a computation.
|
||||
// Als de jsDate van de user(client) afkomstig is, hoeft er geen conversie naar de user-time-zone plaats te vinden
|
||||
function toTimeString(jsDate, bWithSeconds, isLocalTime)
|
||||
function toTimeString(jsDate, arg2 /* bWithSeconds */, arg3 /* isLocal */)
|
||||
{
|
||||
var params = {};
|
||||
if (arg2 && typeof arg2 === "object") {
|
||||
// New style: toTimeString(jsDate, params)
|
||||
params = arg2;
|
||||
} else {
|
||||
// Old style: toTimeString(jsDate, bWithSeconds, isLocal)
|
||||
params = {
|
||||
withSeconds: arg2,
|
||||
isLocal: arg3
|
||||
};
|
||||
}
|
||||
|
||||
if (jsDate == null)
|
||||
return "";
|
||||
|
||||
@@ -1495,16 +1523,29 @@ function toTimeString(jsDate, bWithSeconds, isLocalTime)
|
||||
if (!jsDate)
|
||||
return "";
|
||||
|
||||
if (!isLocalTime)
|
||||
if (!params.isLocal)
|
||||
jsDate = convertToLocalTime(jsDate);
|
||||
|
||||
ret = padout(jsDate.getHours()) + ":" + padout(jsDate.getMinutes());
|
||||
if (bWithSeconds) ret += ":" + padout(jsDate.getSeconds());
|
||||
if (params.withSeconds) ret += ":" + padout(jsDate.getSeconds());
|
||||
return ret;
|
||||
}
|
||||
// Als de jsDate van de user(client) afkomstig is, hoeft er geen conversie naar de user-time-zone plaats te vinden
|
||||
function toDateString(jsDate, noDay, pretty, isLocalDate)
|
||||
function toDateString(jsDate, arg2 /* noDay */, arg3 /* pretty */, arg4 /* isLocal */)
|
||||
{
|
||||
var params = {};
|
||||
if (arg2 && typeof arg2 === "object") {
|
||||
// New style: toDateString(jsDate, params)
|
||||
params = arg2;
|
||||
} else {
|
||||
// Old style: toDateString(jsDate, noDay, pretty, isLocal)
|
||||
params = {
|
||||
noDay: arg2,
|
||||
pretty: arg3,
|
||||
isLocal: arg4
|
||||
};
|
||||
}
|
||||
|
||||
var resstr = "";
|
||||
var today = new Date().midnight();
|
||||
var yesterday = (new Date(today))
|
||||
@@ -1524,27 +1565,42 @@ function toDateString(jsDate, noDay, pretty, isLocalDate)
|
||||
if (!jsDate)
|
||||
return "";
|
||||
|
||||
if (!isLocalDate)
|
||||
if (!params.isLocal)
|
||||
jsDate = convertToLocalTime(jsDate);
|
||||
|
||||
// Ik wil graag, alleen als parameter friendly?, voor de datums gisteren, vandaag en morgen de tekst Gisteren, Vandaag en Morgen opleveren
|
||||
// Voor lijsten/sortering is dat vaak niet handig, maar soms is het veel begrijpelijker. Als de mogelijkheid er is, kunnen we
|
||||
// geleidelijk de toepassing uitbreiden. In Lopende zaken op de portal om mee te beginnen.
|
||||
|
||||
if (pretty && jsDate.midnight().getTime() == today.getTime())
|
||||
if (params.pretty && jsDate.midnight().getTime() == today.getTime())
|
||||
resstr = L("lcl_date_today");
|
||||
else if (pretty && jsDate.midnight().getTime() == yesterday.getTime())
|
||||
else if (params.pretty && jsDate.midnight().getTime() == yesterday.getTime())
|
||||
resstr = L("lcl_date_yesterday");
|
||||
else if (pretty && jsDate.midnight().getTime() == tomorrow.getTime())
|
||||
else if (params.pretty && jsDate.midnight().getTime() == tomorrow.getTime())
|
||||
resstr = L("lcl_date_tomorrow");
|
||||
else
|
||||
resstr = (noDay?"":calendar_names.daysMin[jsDate.getDay()] + " ") +
|
||||
resstr = (params.noDay?"":calendar_names.daysMin[jsDate.getDay()] + " ") +
|
||||
padout(jsDate.getDate()) + "-" + padout(jsDate.getMonth() + 1) + "-" + padout(jsDate.getFullYear());
|
||||
|
||||
return resstr;
|
||||
}
|
||||
function toDateTimeString(jsDate, bWithSeconds, noDay, prettyday, noMidnight, isLocalDate)
|
||||
function toDateTimeString(jsDate, arg2 /* bWithSeconds */, arg3 /* noDay */, arg4 /* prettyday */, arg5 /* noMidnight */, arg6 /* isLocalDate */)
|
||||
{
|
||||
var params = {};
|
||||
if (arg2 && typeof arg2 === "object") {
|
||||
// New style: toDateTimeString(jsDate, params)
|
||||
params = arg2;
|
||||
} else {
|
||||
// Old style: toDateTimeString(jsDate, bWithSeconds, noDay, prettyday, noMidnight, isLocalDate)
|
||||
params = {
|
||||
withSeconds: arg2,
|
||||
noDay: arg3,
|
||||
prettyday: arg4,
|
||||
noMidnight: arg5,
|
||||
isLocal: arg6
|
||||
};
|
||||
}
|
||||
|
||||
if (jsDate == null)
|
||||
return "";
|
||||
|
||||
@@ -1554,14 +1610,15 @@ function toDateTimeString(jsDate, bWithSeconds, noDay, prettyday, noMidnight, is
|
||||
if (typeof jsDate == "date") // een oRs("datum").value
|
||||
jsDate = new Date(jsDate);
|
||||
|
||||
if (!isLocalDate) {
|
||||
if (!params.isLocal) {
|
||||
jsDate = convertToLocalTime(jsDate);
|
||||
params.isLocal = true; // Nu wel
|
||||
}
|
||||
|
||||
if (noMidnight && jsDate.getTime() == jsDate.midnight().getTime())
|
||||
return toDateString(jsDate, noDay, prettyday, true)
|
||||
if (params.noMidnight && jsDate.getTime() == jsDate.midnight().getTime())
|
||||
return toDateString(jsDate, params)
|
||||
else
|
||||
return toDateString(jsDate, noDay, prettyday, true) + " " + toTimeString(jsDate, bWithSeconds, true)
|
||||
return toDateString(jsDate, params) + " " + toTimeString(jsDate, params)
|
||||
}
|
||||
|
||||
function defaultDate(code)
|
||||
|
||||
@@ -155,18 +155,18 @@ function _FCLTcalendar (fieldID, params)
|
||||
if (params.initTimeEmpty == 1)
|
||||
var iniTime = "";
|
||||
else
|
||||
var iniTime = toTimeString(initDate, false, params.noConvert);
|
||||
var iniTime = toTimeString(initDate, { isLocal: params.noConvert });
|
||||
}
|
||||
else
|
||||
{
|
||||
var iniTextDate = toDateString(initDate, false, false, params.noConvert);
|
||||
var iniTextDate = toDateString(initDate, { isLocal: params.noConvert });
|
||||
// Input type=date verwacht het formaat [YYYY-MM-DD]
|
||||
var iniDateDate = new Date(initDate.getTime()-(initDate.getTimezoneOffset()*60000)).toISOString().substr(0,10);
|
||||
var iniDateVal = initDate.valueOf();
|
||||
if (params.initTimeEmpty == 1)
|
||||
var iniTime = "";
|
||||
else
|
||||
var iniTime = toTimeString(initDate, false, params.noConvert);
|
||||
var iniTime = toTimeString(initDate, { isLocal: params.noConvert });
|
||||
}
|
||||
var hiddentag = params.hidden? " style='display:none'" : ""; // Alleen op de calender, niet de tijd
|
||||
if (params.readonly)
|
||||
|
||||
@@ -19,25 +19,24 @@ function FCLTtimezoneselector(fieldName, params)
|
||||
if (typeof params == "undefined") params = {};
|
||||
|
||||
// Wat we opslaan is een IANA string. Door readonly hier te ondersteunen regelen we de presentatie centraal
|
||||
var sql = "SELECT DISTINCT tzname,"
|
||||
var sql = "SELECT tzname,"
|
||||
+ " '(UTC ' || RTRIM(TZ_OFFSET(tzname), CHR(0)) || ') ' || tzname AS label"
|
||||
+ " FROM V$TIMEZONE_NAMES"
|
||||
+ ((params.readonly && params.initVal != "") // als die NULL is, levert dit -terecht- ook niks op, gewenst sideeffect
|
||||
? " WHERE tzname = " + safe.quoted_sql(params.initVal) // alleen de initVal tonen, dit is geen key
|
||||
: " WHERE tzname LIKE '%/%'" // alleen continent/stad-format
|
||||
+ " AND NOT tzname LIKE '%GMT%'" // filter aliassen
|
||||
+ "AND ("
|
||||
+ " tzname LIKE 'Europe/%' OR"
|
||||
+ " tzname LIKE 'America/%' OR"
|
||||
+ " tzname LIKE 'Asia/%' OR"
|
||||
+ " tzname LIKE 'Australia/%' OR"
|
||||
+ " tzname LIKE 'Africa/%' OR"
|
||||
+ " tzname LIKE 'Pacific/%'"
|
||||
+ ")"
|
||||
+ "GROUP BY tzname, TZ_OFFSET(tzname)"
|
||||
+ "ORDER BY TO_NUMBER(SUBSTR(TZ_OFFSET(tzname), 1, 3)"
|
||||
+ " || SUBSTR(TZ_OFFSET(tzname), 5, 2)) ASC,"
|
||||
+ " tzname"
|
||||
: " WHERE NOT tzname LIKE '%GMT%'" // filter aliassen
|
||||
+ " AND ("
|
||||
+ " tzname LIKE 'Europe/%' OR"
|
||||
+ " tzname LIKE 'America/%' OR"
|
||||
+ " tzname LIKE 'Asia/%' OR"
|
||||
+ " tzname LIKE 'Australia/%' OR"
|
||||
+ " tzname LIKE 'Africa/%' OR"
|
||||
+ " tzname LIKE 'Pacific/%'"
|
||||
+ " )"
|
||||
+ " GROUP BY tzname, TZ_OFFSET(tzname)"
|
||||
+ " ORDER BY TO_NUMBER(SUBSTR(TZ_OFFSET(tzname), 1, 3)"
|
||||
+ " || SUBSTR(TZ_OFFSET(tzname), 5, 2)) ASC,"
|
||||
+ " tzname"
|
||||
);
|
||||
|
||||
// de FCLTselector doet het niet lekker met initVal, readonly en suppressEmpty
|
||||
|
||||
@@ -597,6 +597,7 @@ function SLNKDWF (myProps)
|
||||
Session("lastTempW2D") = TempW2D;
|
||||
}
|
||||
myProps.tmRender = ((oSLNKDWF.usTimer - myProps.timerStart)/1000 - myProps.tmBuild).toFixed(0);
|
||||
__Log("SlnkDWF Build="+myProps.tmBuild+"ms"+ (myProps.cached?" (was cached)":"") + "; Render="+myProps.tmRender + "ms" + (mustEnd?" (mustEnd)":""));
|
||||
Response.AddHeader("SlnkDWF","B="+myProps.tmBuild+";R="+myProps.tmRender + (myProps.cached?";C=1":"") + (mustEnd?";E=1":""));
|
||||
if (mustEnd)
|
||||
Response.End; // We doen alles via 304
|
||||
|
||||
Reference in New Issue
Block a user