614 lines
28 KiB
Plaintext
614 lines
28 KiB
Plaintext
<%@ 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") + " "+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") + " "+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(); %> |