Files
Facilitor/APPL/PDA/reservering_new_by_placetime.asp
Erik Groener 0778aadafe MENZ#88074 Problemen bij toevoegen 2e werkplek in reserveringssysteem
svn path=/Website/trunk/; revision=69360
2025-06-10 13:56:39 +00:00

614 lines
28 KiB
Plaintext
Raw Blame History

<%@ language="javascript"%>
<% /*
$Revision$
$Id$
File: res_rsv_deel_by_placetime.asp MOBILE version (DELEN MOETEN NOG GESHARED WORDEN)
Description: Alternatieve interface om (eenvoudig) een resereerbaar deel en tijd te kunnen kiezen
zoals een werkplekobject (als flexplek)
Parameters: res_disc: required de res_discipline van de objecten
geb_key: optioneel voorgeselecteerd gebouw
resdate: optioneel voorgeselecteerde datum
x ins_key: optioneel voorgeselecteerd object
x res_key: optioneel voorgeselecteerd reseerveerbaar object
en verder wat sturings- en overrule-parameters zoals hieronder genoemd
Context: -
Note: -
*/%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../res/res.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="../Shared/FlexFiles.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="../res/res_rsv_deel_by_placetime.inc" -->
<%
var act_key = getQParamInt("act_key", -1);
var res_disc_key_arr = getQParamIntArray("res_disc", []);
// Dit werkt alleen voor res_deel/werkplek-catalogi, dat checken en bepalen we maar gelijk even
var sql = "SELECT " + lcl.xsqla("rdis.ins_discipline_omschrijving", "rdis.ins_discipline_key")
+ " , " + lcl.xsqla("a.res_activiteit_omschrijving", "a.res_activiteit_key")
+ " , rdis.ins_discipline_key"
+ " , ins_discipline_min_level"
+ " , res_activiteit_master_key"
+ " , res_activiteit_duur"
+ " , DECODE (auth.ins_discipline_key, NULL, 0, 1) authorized_for_disc"
+ " FROM res_discipline rdis, res_activiteitdiscipline rad, res_activiteit a"
+ " , (SELECT ins_discipline_key"
+ " FROM fac_v_webgebruiker w, fac_functie f"
+ " WHERE w.fac_functie_key = f.fac_functie_key"
+ " AND fac_gebruiker_alg_level_write < 9"
+ " AND fac_functie_code IN ('WEB_RESUSE', 'WEB_RESFOF')"
+ " AND w.prs_perslid_key = " + user_key + ") auth"
+ " WHERE rdis.ins_discipline_min_level IN (1, 5) "
+ " AND rdis.ins_discipline_key = rad.res_discipline_key"
+ " AND a.res_activiteit_key = rad.res_activiteit_key"
+ " AND rdis.ins_discipline_verwijder IS NULL"
+ (act_key > 0 ? " AND rad.res_activiteit_key = " + act_key : "")
+ (res_disc_key_arr.length > 0 ? " AND rdis.ins_discipline_key IN (" + res_disc_key_arr.join(",") + ")" : "")
+ " AND rdis.ins_discipline_key = auth.ins_discipline_key(+)";
var oRs = Oracle.Execute(sql)
if (oRs.eof)
{
Response.Write("You need to provide an appropriate value for parameters act_key or res_disc")
Response.End;
}
// Zonder disciplines, maar ook met heeft deze query de disciplines gecheckt, we nemen de onze
res_disc_key_arr = [];
var activiteitnaam = oRs("res_activiteit_omschrijving").Value; // die gegevens is of een willekeurige bij de catalogus
var ischild = oRs("res_activiteit_master_key").Value;
var res_activiteit_duur = oRs("res_activiteit_duur").Value;
var ins_discipline_min_level;
var catalogusnaam = "??";
while (!oRs.eof)
{
if (oRs("authorized_for_disc").Value == 1) { // Alleen als je er rechten op hebt
res_disc_key_arr.push(oRs("ins_discipline_key").value);
ins_discipline_min_level = oRs("ins_discipline_min_level").Value;
catalogusnaam = oRs("ins_discipline_omschrijving").Value;
}
oRs.MoveNext();
}
oRs.close();
user.auth_required_or_abort(res_disc_key_arr.length);
// Als je hier komt heb je dus in ieder geval ergens WEB_RESUSE en/of WEB_RESFOF rechten op
var xfunc = user.func_enabled2("RES", { "ins_discipline_key": res_disc_key_arr, "checkOptimistic": true });
var ALGwritelevel = 9;
for (var func in xfunc._funcodes) {
if (func == "WEB_RESUSE" || func == "WEB_RESFOF") {
ALGwritelevel = Math.min(ALGwritelevel, xfunc._funcodes[func].ALGwritelevel);
}
}
var zoom = getQParamFloat("zoom", 2);
var geb_key = getQParamInt("geb_key", -1);
var floor_key = getQParamInt("floor_key", -1);
var werkpl_key = getQParamInt("wsp_key", -1);
var res_deel_key = getQParamInt("res_deel_key", -1); // unused. Zou ooit direct naar dag+intervalselectie kunnen
var thema_key = getQParamInt("thema_key", 12);
var themaI_key = getQParamInt("themaI_key", 13);
var bordlabel_key= getQParamInt("bordlabel_key", 13);
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); // 12:00 default morgen ipv vandaag
var datelimit = getQParamInt("limit", 7); // aantal te kiezen dagen tov offset
var floorselect = getQParamInt("floorselect", 0); // na gebouw ook de verdiepingen laten kiezen
var mapselect = getQParamInt("mapselect", 1) == 1; // werkplek via plattegrond kiezen
var resdate = getQParamDate("date", null); // hoe geef je zelf een date mee?
var dagcapaciteit = getQParamFloat("capaciteit", 9); // aantal uren beschikbaar per dag tbv berekening van globale vulling
var minimumbeschikbaarheid = getQParamFloat("minbes", 1.1); // minder dan zoveel uur beschikbaar beschouwen we onbeschikbaar
var onlyfree = getQParamInt("onlyfree", 1); // moeten bezette werkplekken wel (0) of niet (1) (onklikbaar) getoond worden in de lijst
if (ischild)
{
dagcapaciteit = 0; // als geen master gevonden
minimumbeschikbaarheid = res_activiteit_duur;
}
if (resdate)
{
dagcapaciteit = rdpt.dagcapaciteitCalc(resdate, dagcapaciteit, act_key, res_disc_key_arr, geb_key);
}
var transitParam = buildTransitParam(["zoom", "daylimit", "offset", "act_key", "res_disc", "geb_key", "floor_key", "wsp_key", "date", "onlyfree", "floorselect", "mapselect", "thema_key", "themaI_key", "bordlabel_key", "limit", "capaciteit", "minbes"],
{ "res_disc": res_disc_key_arr }); // res_disc_key_arr is specifieker dan res_disc
var qrc = getQParamInt("qrc", 0) != 0;
%>
<html>
<head>
<% FCLTMHeader.Generate(); %>
<script>
// shows the floorplan
function plan(verdieping_key, res_disc_key_arr, thema_key, themaI_key, res_van, bordlabel_key)
{
window.location.href = "<%=rooturl%>/appl/pda/res_plattegrond.asp?zoom=<%=zoom%>&verdieping_key=" + verdieping_key + "&res_disc=" + res_disc_key_arr + "&thema_key=" + thema_key + "&themaI_key=" + themaI_key + "&bordlabel_key=" + bordlabel_key + "&res_van=" + res_van;
}
</script>
</head>
<body>
<%
var buttons = [];
/* global */ var calc_dagcapaciteit;
function fnDataFilter(oRs)
{
var dt = resdate;
if (!dt) // dan moet hij in de query zitten
{
dt = new Date(oRs("datum").Value);
}
/* global */ calc_dagcapaciteit = rdpt.dagcapaciteitCalc(dt, dagcapaciteit, act_key, res_disc_key_arr, geb_key);
if (!calc_dagcapaciteit)
{
return false;
}
return true;
}
// KIES GEBOUW INDIEN NOG NIET BEKEND
if (geb_key == -1)
{
PAGE_START({id: "page-1", pclass: "reservering-new"});
HEADER({title: L("lcl_beschikbaarheid_by_bld").format(catalogusnaam), back:!qrc, home:!qrc});
CONTENT_START();
// Toon eerst maximaal 3 favorieten (eerder gereserveerde werkplekken).
function fnFavWP_Submit(oRs)
{
return "?geb_key=" + oRs("alg_gebouw_key").Value
+ "&floor_key=" + oRs("alg_verdieping_key").Value
+ "&wsp_key=" + oRs("res_deel_key").Value + transitParam;
}
function fnFavWP_colSubHeader(oRs)
{
var result = oRs("alg_gebouw_naam").Value;
result += (result ? ", " : "") + oRs("alg_locatie_plaats").Value;
return result;
}
var sql = rdpt.mijn_verdiepingen_met_resdelen_hist_sql(res_disc_key_arr, ALGwritelevel)
var rst = new ResultsetTable({ sql: sql
, tableTitle: L("lcl_res_recent")
, keyColumn: "alg_gebouw_key"
, linkColumn: fnFavWP_Submit
, headerColumn: "res_deel_omschrijving"
, detailColumn: "alg_verdieping_omschrijving"
, subheaderColumn: fnFavWP_colSubHeader
, iconColumn: fnRecentIcon
, ID: "resgebtable"
, showAll: true
, emptyWhenNoResult: true
});
var fav = rst.processResultset();
// Toon de gebouwen waar werkplekken gereserveerd kunnen worden.
function fnSubmit(oRs)
{
return "?geb_key="+ oRs("alg_gebouw_key").Value + transitParam + "&res_disc="+oRs("ins_discipline_key").Value; // je kiest een gebouw-discipline combinatie
}
function fnRecentIcon(oRs)
{
return (oRs("ins_discipline_image").value ? oRs("ins_discipline_image").value : "fa-circle");
}
function fnDisciplinecapaciteit(oRs)
{
return oRs("aantal").Value+" "+oRs("ins_discipline_omschrijving").Value;
}
function fnGebouwIcon(oRs)
{
return SYMBOL(oRs("alg_gebouw_image").Value, { "module": "ALGPHG", "key": oRs("alg_gebouw_key").Value })
|| ('<div class="buildingavatar">' + safe.html((oRs("alg_locatie_code").Value).substr(0,2).toUpperCase()) + '</div>');
}
var sql = rdpt.mijn_verdiepingen_met_resdelen_sql(res_disc_key_arr, -1, ALGwritelevel, dateoffset);
var rst = new ResultsetTable({ sql: sql
, tableTitle: fav > 0 ? L("lcl_mobile_gebouwen") : ""
, keyColumn: "alg_gebouw_key"
, linkColumn: fnSubmit
, singleLink: true
, headerColumn: "alg_gebouw_naam"
, subheaderColumn: fnDisciplinecapaciteit
, detailColumn: "alg_locatie_plaats"
, iconColumn: fnGebouwIcon
, ID: "resgebtable"
, showAll: true
, emptySetString: L("lcl_empty")
});
var cnt = rst.processResultset();
CONTENT_END();
FOOTER();
PAGE_END();
} // geb_key
// KIES DATUM VOOR GEGEVEN GEBOUW INDIEN NOG NIET BEKEND
// dat kan natuurlijk ook met een calendar, maar we willen extra info en kleuren tonen
if (geb_key>0 && resdate == null)
{
sql = "SELECT g.alg_gebouw_werkdagen, alg_gebouw_naam "
+ " FROM alg_gebouw g"
+ " WHERE g.alg_gebouw_key = " + geb_key;
oRs = Oracle.Execute(sql)
var alleenwerkdagen = oRs("alg_gebouw_werkdagen").Value;
var gebouw_naam = oRs("alg_gebouw_naam").Value;
oRs.close();
PAGE_START({id: "page-2", pclass: "reservering00"});
HEADER({title: L("lcl_beschikbaarheid_by_day").format(gebouw_naam, catalogusnaam), back:true, home:!qrc });
CONTENT_START();
// Bepaal het aantal items in dit gebouw
var sql = rdpt.aantal_resdelen_in_gebouw_sql(res_disc_key_arr, geb_key, -1);
var oRs = Oracle.Execute(sql)
var aantalitems = oRs("aantal").Value;
oRs.close();
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"
+ " , CASE WHEN gevuld = 0 THEN 2" // geheel beschikbaar
+ " WHEN " + dagcapaciteit + " - gevuld < " + minimumbeschikbaarheid + " THEN 0" // niet meer beschikbaar
+ " ELSE 1" // gedeeltelijk beschikbaar
+ " END beschikbaarheid"
+ " , gevuld"
+ " , aantal"
+ " , vrijedag"
+ " , weekdag"
+ " FROM (" + sql + ")";
}
function fnrowClassD(oRs)
{
var bcls = "";
if (oRs("vrijedag").value > 0)
bcls += "vrijedag";
else if (alleenwerkdagen && (oRs("weekdag").value == 1 || oRs("weekdag").value == 7))
{
bcls += " vrijweekend";
}
else
{
var capaciteit = (werkpl_key > -1 ? dagcapaciteit : calc_dagcapaciteit);
var item_count = (werkpl_key > -1 ? 1 : aantalitems);
bcls += rdpt.bezettings_class(oRs("gevuld").value, capaciteit*item_count, minimumbeschikbaarheid*item_count);
}
return bcls;
}
function fnBeschikbaarheid(oRs)
{
if (ischild)
{
// We veronderstellen (mogelijk onterecht) dat elk van de aantalitems even lang beschikbaar is op een dag
// Als er maar <20><>n master is per dag is dat zeker logisch
var blok_per_dag = Math.floor(calc_dagcapaciteit / res_activiteit_duur)*aantalitems;
beschikbaarheid = blok_per_dag - oRs("gevuld").Value/res_activiteit_duur;
var txt = beschikbaarheid+ "/" + blok_per_dag
}
else
{
var txt = "";
if (oRs("vrijedag").value == 0 && (!alleenwerkdagen ||(alleenwerkdagen && (oRs("weekdag").value != 1 && oRs("weekdag").value != 7))))
{
if (werkpl_key > -1)
{ // 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);
if (res_blok == "")
txt = L("lcl_niet_beschikbaar");
else
txt = "<div class='listbodytext'>" + I("fa-calendar") + "&nbsp;"+res_blok+"</div>";
}
else
{
var beschikbaarheid = ((1 - (oRs("gevuld").Value/gebouwcapaciteit))*100).toFixed(0); // 0..100
txt = L("lcl_res_dagbeschikbaarpct")+" "+beschikbaarheid+"%";
}
}
else
{
if (oRs("vrijedag").value > 0) txt += L("mld_vrije_dagen")+" ";
if (oRs("weekdag").value == 1 || oRs("weekdag").value == 7)
{
if (alleenwerkdagen)
txt += L("lcl_res_weekend");
}
}
}
return txt
}
function fnDetail (oRs)
{
return "";
}
function fnDagIcon(oRs)
{
return '<div class="dayavatar">' + safe.html(new Date(oRs("datum").Value).getDate()) + "</div>";
}
function fncolDatum(oRs)
{
return toDateString(oRs.Fields("datum").Value);
}
function fnSubmitD(oRs)
{
if (oRs("vrijedag").value == 0 && (!alleenwerkdagen ||(alleenwerkdagen && (oRs("weekdag").value != 1 && oRs("weekdag").value != 7))))
{
if (werkpl_key > -1)
{
if (oRs("beschikbaarheid").Value == 0)
return "";
}
return "?date="+ (new Date(oRs("datum").Value).getTime()) + transitParam;
}
else
return "";
}
var rst = new ResultsetTable({ sql: sql
, fnDataFilter: fnDataFilter
, keyColumn: "datum"
, linkColumn: fnSubmitD
, singleLink: true
, headerColumn: fncolDatum
, subheaderColumn: fnBeschikbaarheid
, detailColumn: fnDetail
, iconColumn: fnDagIcon
, rowClass: fnrowClassD
, ID: "datetable"
, showAll: true
, emptySetString: L("lcl_empty")
});
var cnt = rst.processResultset();
CONTENT_END();
FOOTER();
PAGE_END();
} // resdate
// 3. KIES VERDIEPING INDIEN GEWENST EN NOG NIET BEKEND
if (resdate && floorselect == 1 && geb_key > -1 && floor_key == -1)
{
sql = "SELECT alg_gebouw_naam "
+ " FROM alg_gebouw g"
+ " WHERE g.alg_gebouw_key = " + geb_key;
oRs = Oracle.Execute(sql)
var gebouw_naam = oRs("alg_gebouw_naam").Value;
oRs.close();
PAGE_START({id: "page-2b", pclass: "reservering00"});
HEADER({title: L("lcl_beschikbaarheid_by_flr").format(catalogusnaam,gebouw_naam,toDateString(resdate).toLowerCase()), back:true, home:!qrc });
CONTENT_START();
var sql = rdpt.mijn_verdiepingen_met_resdelen_sql(res_disc_key_arr, geb_key, ALGwritelevel, dateoffset);
function fnSubmitF(oRs)
{
return "?floor_key="+ oRs("alg_verdieping_key").Value + transitParam;
}
function fnAantal(oRs)
{
return oRs("aantal").value + " " + safe.html(catalogusnaam);
}
function fnFloorIcon(oRs)
{
return '<div class="flooravatar">'+safe.html(oRs("alg_verdieping_code").Value)+'</div>';
}
// Onderstaande 2 functies hebben dezelfde berekening nodig, die vrij duur is, dat wil je optimaliseren
// Omdat het aantal regels beperkt is (<25, vaker minder) doe ik het toch maar zo
function fnrowClassF(oRs)
{
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)
bcls += rdpt.bezettings_class(oRs2("gevuld").value, calc_dagcapaciteit*oRs("aantal").value, minimumbeschikbaarheid*oRs("aantal").value);
oRs2.close();
return bcls; // te duur
}
function fnBeschikbaarheidF(oRs)
{
var txt = "";
var vloercapaciteit = oRs("aantal").value * calc_dagcapaciteit; // in uren
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);
// Stop when invalid date is detected
if (oRs2.eof)
{
__DoLog("Data verwacht in fnBeschikbaarheidF, maar geen data aanwezig!");
__DoLogForm();
// Strip de datum er vanaf, dan komen we weer terug bij de datum-selectie
var transitParam = buildTransitParam(["zoom", "daylimit", "offset", "act_key", "res_disc", "geb_key", "wsp_key", "onlyfree", "floorselect", "mapselect", "thema_key", "themaI_key", "bordlabel_key", "limit"]);
Response.Redirect("?1=1" + transitParam);
}
else
{
var beschikbaarheid = ((1 - (oRs2("gevuld").Value/vloercapaciteit))*100).toFixed(0); // 0..100
txt = L("lcl_res_dagbeschikbaarpct")+" "+beschikbaarheid+"%";
}
oRs2.close();
return txt
}
var rst = new ResultsetTable({ sql: sql
, fnDataFilter: fnDataFilter
, keyColumn: "alg_verdieping_key"
, linkColumn: fnSubmitF
, singleLink: true
, headerColumn: "alg_verdieping_omschrijving"
, detailColumn: fnAantal
, subheaderColumn: fnBeschikbaarheidF
, rowClass: fnrowClassF
, iconColumn: fnFloorIcon
, ID: "resflrtable"
, showAll: true
, emptySetString: L("lcl_empty")
});
var cnt = rst.processResultset();
CONTENT_END();
FOOTER();
PAGE_END();
} // floor_key
// ALS JE HIER BENT, WEET JE EEN GEBOUW(A) EN EEN DATUM(B)
// DAN WILLEN WE VERDER TOT EEN RES_DEEL_KEY en concrete van/tot-tijden
if (resdate && geb_key > 0)
{
if (werkpl_key > -1)
{ // Is er al een werkplek bekend? Kijk dan of deze voor vandaag vrij is.
var is_beschikbaar = 2;
var sql = "SELECT totaal"
+ " , CASE WHEN totaal = 0 THEN 2" // geheel beschikbaar
+ " WHEN " + dagcapaciteit + " - totaal < " + minimumbeschikbaarheid + " THEN 0" // niet meer beschikbaar
+ " ELSE 1" // gedeeltelijk beschikbaar
+ " END beschikbaarheid"
+ " FROM ("
+ "SELECT SUM(r.res_rsv_deel_tot - r.res_rsv_deel_van)*24 totaal"
+ " FROM res_rsv_deel r"
+ " , res_deel d"
+ " WHERE d.res_deel_key = r.res_deel_key"
+ " AND d.res_deel_verwijder IS NULL"
+ " AND ( d.res_deel_vervaldatum IS NULL"
+ " OR d.res_deel_vervaldatum < " + resdate.toSQL()
+ " )"
+ " AND r.res_rsv_deel_verwijder IS NULL"
+ " AND TRUNC(r.res_rsv_deel_van) = " + resdate.toSQL()
+ " AND r.res_deel_key = " + werkpl_key
+ " )"
var oRs = Oracle.Execute(sql);
is_beschikbaar = oRs("beschikbaarheid").Value;
oRs.Close();
if (is_beschikbaar > 0)
{ // Werkplek is voor deze datum nog niet gereserveerd.
// Gelijk de popup om te reserveren.
//if (oRs("bezet").value <= dagcapaciteit - minimumbeschikbaarheid)
var url = "../pda/reserveringen.asp?qrc="+(qrc?1:0)+"&res_deel_key="+werkpl_key+"&res_van="+(new Date(resdate).getTime()) + "&ismobile=1";
Response.Redirect(url);
}
}
else
{
sql = "SELECT alg_gebouw_naam"
+ " FROM alg_v_aanweziggebouw"
+ " WHERE alg_gebouw_key = " + geb_key;
oRs = Oracle.Execute(sql)
var gebouw_naam = oRs("alg_gebouw_naam").Value;
oRs.Close();
PAGE_START({id: "page-3", pclass: "reservering00"});
HEADER({title: catalogusnaam+" "+gebouw_naam+" "+toDateString(resdate).toLowerCase(), back:true, home:!qrc });
CONTENT_START();
if (floor_key > -1 && themaI_key > -1 && thema_key > -1)
{
var sql = "SELECT COUNT (*) tekeningen"
+ " FROM cad_tekening t, alg_v_aanwezigverdieping v "
+ " WHERE t.alg_verdieping_key = v.alg_verdieping_key "
+ " AND cad_tekening_verwijder IS NULL "
+ " AND v.alg_verdieping_key = " + floor_key;
var oRs = Oracle.Execute(sql);
var aantaltekeningen = oRs("tekeningen").Value;
oRs.Close();
if (aantaltekeningen > 0 && mapselect)
{
CONTROLGROUP_START();
BUTTON(L("lcl_prs_wp_fgraph"), {click: 'plan(' + floor_key + ', [' + res_disc_key_arr.join(",") + '], ' + thema_key + ', ' + themaI_key + ', ' + (new Date(resdate).getTime()) + ', ' + bordlabel_key + ');', icon: "fa-map-marker-alt"});
CONTROLGROUP_END();
}
}
// bepaal de dicipline-afhankelijke reserveringsintervallen
// Neem bij meerdere disciplines alleen de eerste: De bloktijden zouden hetzelfde moeten zijn. Mergen van twee disciplines is niet mogelijk.
bloktijden = res.getBloktijdenDisc(res_disc_key_arr[0], resdate, geb_key);
function fncolSubHeader(oRs)
{
var res_blok = rdpt.getIntervalString(oRs("res_deel_key").value, resdate, bloktijden);
if (res_blok =="")
res_blok = "";//L("lcl_niet_beschikbaar");
else
res_blok = "<div class='listbodytext'>" + I("fa-calendar") + "&nbsp;"+res_blok+"</div>";
return (floorselect == 0 ? "<div class='listbodykop'>"+safe.html(oRs("alg_verdieping_omschrijving").Value)+ "</div>" : "") + res_blok;
}
function fnrowClassRD(oRs)
{
return rdpt.bezettings_class(oRs("bezet").value, calc_dagcapaciteit, minimumbeschikbaarheid);
}
function fnResDeelIcon(oRs)
{
var icon = "fa-tv-retro";
if (oRs.Fields("res_deel_image").Value != null)
{
icon = oRs.Fields("res_deel_image").Value;
if (!icon.match(/^http/))
icon = safe.htmlattr(S("res_image_path") + "deel/thumb/" + icon);
}
else if (oRs.Fields("ins_discipline_image").Value != null)
icon = oRs.Fields("ins_discipline_image").Value;
return icon;
}
function fnPlaats(oRs)
{
return safe.html(oRs("plaats").value+" "+(oRs("alg_ruimte_omschrijving").value||""));
}
function fnSubmitRD(oRs)
{
if (oRs("bezet").value <= calc_dagcapaciteit - minimumbeschikbaarheid)
return "../pda/reserveringen.asp?qrc="+(qrc?1:0)+"&res_deel_key=" + oRs("res_deel_key").Value + "&res_van="+(new Date(resdate).getTime()) + "&ismobile=1";
else
return "";
}
// Per item (werkplek) in dit gebouw hoeveel er die dag bezet is
sql = rdpt.res_deel_bezetting_op_dag_sql(res_disc_key_arr, geb_key, floor_key, resdate, (onlyfree ? dagcapaciteit - minimumbeschikbaarheid : null));
var rst = new ResultsetTable({ sql: sql
, fnDataFilter: fnDataFilter // zet globale calc_dagcapaciteit
, keyColumn: "res_deel_key"
, linkColumn: fnSubmitRD
, singleLink: true
, headerColumn: "res_deel_omschrijving"
, detailColumn: fnPlaats
, subheaderColumn: fncolSubHeader
, iconColumn: fnResDeelIcon
, ID: "datetable"
, rowClass: fnrowClassRD
, showAll: true
});
var cnt = rst.processResultset();
CONTENT_END();
FOOTER();
PAGE_END();
}
}
PDA_PAGE_END(); %>
</body>
</html>
<% ASPPAGE_END(); %>