Files
Facilitor/APPL/PDA/reservering_new.asp
Jos Groot Lipman 300d1f9bf9 Merge 2025.2 RC2 patches
svn path=/Website/trunk/; revision=69610
2025-07-01 10:20:25 +00:00

894 lines
39 KiB
Plaintext
Raw Blame History

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: pda/reservering_new.asp
Description: Add reservering (Mobile version)
Parameters: rsv_ruimte_key voor bestaande deelreservering
rsv_ruimte_key=-1 voor nieuwe (deel)reservering
Note:
*/ %>
<% REGISTERMENU_Disable = true; %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/Suggest/plaatsFilter.inc" -->
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="../RES/res.inc" -->
<!-- #include file="../RES/res_plan_room_v2.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="../shared/data_recordset.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="../shared/rater.inc" -->
<%
FCLTHeader.Requires({ js: ["jquery.timepicker-table.js"],
css: ["timePicker-table.css"] });
var urole = "fe";
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1);
var restype = getQParamSafe("restype", "R").toUpperCase();
restype = (restype == "CV" ? "CV" : (restype == "C" ? "C" :"R")); // Default gaan we een ruimte reserveren
var date_from = getQParamDate("date_from", null);
var date_to = getQParamDate("date_to", null);
var timeFrom = getQParamFloat("timefrom", S("res_t1")); // Start van werkdag, of meegegeven waarde.
var act_key = getQParamInt("act_key", -1);
var disc_key = getQParamInt("disc", -1);
var res_deel_key = getQParamInt("res_deel", -1);
var res_artikel_key= getQParamInt("res_artikel", -1);
var bez_cnt = getQParamInt("bez_cnt", null);
var loc_key = getQParamInt("loc_key", -1);
var bld_key = getQParamInt("bld_key", -1);
var flr_key = getQParamInt("flr_key", -1);
var roo_key = getQParamInt("roo_key", -1);
var res_ruimte_key = getQParamInt("res_ruimte_key", -1);
var qrc = getQParamInt("qrc", 0) != 0;
var cvab = S("res_default_cvab_mode");
var ab_mode = getQParamInt("cvab", -1);
autfunction = "WEB_RESUSE";
var authparams = user.checkAutorisation(autfunction);
var transitParam = buildTransitParam(["restype", "srtact_key", "act_key", "date_from", "date_to", "bez_cnt", "cvab", "timefrom", "bind",
"loc_key", "bld_key", "flr_key", "roo_key", "disc", "res_deel", "res_artikel", "loc_plaats", "res_ruimte_key"]);
var transitParamPlaats = buildTransitParam(["loc_key", "bld_key", "flr_key", "roo_key"]);
var transitParamExtern = buildTransitParam(["date_from", "date_to", "bez_cnt", "loc_plaats"]);
var sql = "SELECT COALESCE(MIN(fac_gebruiker_alg_level_write), 9) writelevel"
+ " FROM fac_v_webgebruiker g, fac_functie f "
+ " WHERE g.fac_functie_key = f.fac_functie_key "
+ " AND f.fac_functie_code = " + safe.quoted_sql(autfunction)
+ " AND g.prs_perslid_key = " + user_key;
var oRs = Oracle.Execute(sql);
var autlevel = oRs("writelevel").Value; // Pas op: kan ook '0' zijn (regio)
oRs.Close();
var subject = L("lcl_mobile_newreservering");
var curPage = 0;
if (rsv_ruimte_key == -1)
{
if (act_key < 0)
{
curPage = 1;
subject = L("lcl_ins_controle_choose_srt");
var srtact_keys = getQParamIntArray("srtact_key", []);
if (srtact_keys.length)
{
// Bepaal restype uit srtactiviteit.
var sql = "SELECT MIN(res_srtactiviteit_soort) res_srtactiviteit_soort"
+ " FROM res_srtactiviteit"
+ " WHERE res_srtactiviteit_key IN (" + srtact_keys.join(",") + ")";
var oRs = Oracle.Execute(sql);
if (!oRs.EoF)
restype = oRs("res_srtactiviteit_soort").value == 0 ? "R" : "CV"; // srtact_key 'sterker' dan restype
oRs.Close();
}
// Omzetten van restypes naar key: 1=Reserveerbaar object (V); 2=Verbruiksartikel (C); 3=Ruimte (R).
// Default heeft restype_key_arr al [0] zodat bij geen of ongeldige restype niets geselecteerd wordt.
var restype_key_arr =[0];
for (var i=0; i<restype.length; i++)
restype_key_arr.push({ "V": 1, "C": 2, "R": 3 }[restype.charAt(i)]);
// Activiteiten
var sql_a = "SELECT a.res_activiteit_key"
+ " , " + "CASE WHEN sa.res_srtactiviteit_prefix IS NULL"
+ " THEN ''"
+ " ELSE sa.res_srtactiviteit_prefix || '-'"
+ " END"
+ " || "+ lcl.xsqla("a.res_activiteit_omschrijving", "a.res_activiteit_key")
+ " , a.res_activiteit_duur"
+ " , a.res_activiteit_omsverplicht"
+ " , a.res_activiteit_aantalverplicht"
+ " FROM res_activiteit a"
+ " , res_srtactiviteit sa"
+ " WHERE res_activiteit_verwijder IS NULL"
+ " AND a.res_srtactiviteit_key = sa.res_srtactiviteit_key"
+ (srtact_keys.length
? " AND sa.res_srtactiviteit_key IN (" + srtact_keys.join(",") + ")"
: " AND sa.res_srtactiviteit_soort = " + (restype == "R" ? "0" : "1"))
+ " AND EXISTS (SELECT res_activiteit_key"
+ " FROM res_activiteitdiscipline rad,"
+ " ins_tab_discipline disc"
+ " , fac_v_my_disciplines md"
+ " WHERE rad.res_discipline_key = md.ins_discipline_key"
+ " AND md.prs_perslid_key = " + user_key
+ " AND md.fac_functie_code = " + safe.quoted_sql(autfunction)
+ " AND fac_gebruiker_alg_level_write < 9"
+ " AND fac_gebruiker_prs_level_write < 9"
+ " AND rad.res_discipline_key = disc.ins_discipline_key"
+ " AND rad.res_activiteit_key = a.res_activiteit_key"
+ " AND ins_discipline_verwijder IS NULL"
+ " AND ins_discipline_min_level IN (" + restype_key_arr.join(",") + ")"
+ " )"
+ " ORDER BY res_activiteit_volgnr"
+ " , sa.res_srtactiviteit_prefix"
+ " , UPPER(" + lcl.xsql('a.res_activiteit_omschrijving', 'a.res_activiteit_key') +")";
}
else if (!date_from)
{
// act_key bekend
curPage = 2;
var res_ruimte_limiet = null;
var sql = "SELECT res_ruimte_limiet"
+ " FROM res_ruimte"
+ " WHERE res_ruimte_key = " + res_ruimte_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
res_ruimte_limiet = oRs("res_ruimte_limiet").Value;
}
oRs.Close();
var sql_b = "SELECT sa.res_srtactiviteit_metaantal"
+ " , ra.res_activiteit_duur"
+ " , ra.res_activiteit_aantalverplicht"
+ " , ra.res_activiteit_cvab_mode"
+ " , ra.res_activiteit_meteindtijd"
+ " , COALESCE( LEAST( COALESCE(" + res_ruimte_limiet + ", ra.res_activiteit_limiet)"
+ " , COALESCE(ra.res_activiteit_limiet, " + res_ruimte_limiet + ")"
+ " )"
+ " , " + S("res_reservering_limiet")
+ " ) act_limiet"
+ " , COALESCE( LEAST( COALESCE(" + res_ruimte_limiet + ", ra.res_activiteit_limiet_fe)"
+ " , COALESCE(ra.res_activiteit_limiet_fe, " + res_ruimte_limiet + ")"
+ " )"
+ " , " + S("res_fe_reservering_limiet")
+ " ) act_limiet_fe"
+ " FROM res_activiteit ra"
+ " , res_srtactiviteit sa"
+ " WHERE ra.res_srtactiviteit_key = sa.res_srtactiviteit_key"
+ " AND ra.res_activiteit_key = " + act_key;
var oRs = Oracle.Execute(sql_b);
var toonBez = oRs("res_srtactiviteit_metaantal").Value;
var res_duur = oRs("res_activiteit_duur").Value;
var res_verp = oRs("res_activiteit_aantalverplicht").Value;
var res_meteind = oRs("res_activiteit_meteindtijd").Value;
var eff_act_limiet = oRs("act_limiet").Value;
var eff_act_limiet_fe = oRs("act_limiet_fe").Value;
cvab = oRs("res_activiteit_cvab_mode").Value;
if (cvab == null) // 0 is ook een correcte waarde.
cvab = S("res_default_cvab_mode");
oRs.Close();
// determine minimum expire days
var sql_exp = "SELECT fac.DatumTijdPlusUitvoerTijd("
+ " SYSDATE,"
+ " GREATEST(0, MIN(rd.res_disc_params_expire_dagen)),"
+ " 'DAGEN'"
+ (S("res_247organisation")==1? " , null, null, 2" : "") + ") res_van"
+ " FROM res_activiteitdiscipline ad"
+ " , res_disc_params rd"
+ " WHERE ad.res_discipline_key = rd.res_ins_discipline_key"
+ " AND ad.res_activiteit_key = " + act_key;
var oRs_exp = Oracle.Execute(sql_exp);
// default begin en eindtijd
var res_van = new Date(oRs_exp("res_van").Value); // default today + min(expiredays)
var today = new Date(Math.floor(new Date().getTime() / 1000) * 1000);
if ( toTimeString(res_van) === toTimeString(today)
&& res_van.getDate() === today.getDate()
&& res_van.getMonth() === today.getMonth()
&& res_van.getFullYear() === today.getFullYear()
)
{ // Reservering vandaag: default niet voor huidig tijdstip.
res_van.setMinutes(res_van.getMinutes() + 5); // beetje marge, anders direct expired
}
else
{ // Reservering in toekomstige dag: default start van werkdag.
res_van = res_van.setFloatHours(timeFrom, S("res_h"));
}
oRs_exp.Close();
var res_tot = res_van.addFloatHours(S("res_dur"), S("res_h"));
// Locaties (waar reserveerbare ruimten zijn binnen de scope van de user)
var params = {};
var filtClause = getFiltClauseLocatie("RES");
var sql_l = "SELECT l.alg_locatie_key"
+ ", " + S("alg_loc_string") + " naam"
+ ", alg_locatie_plaats"
+ " FROM alg_v_aanweziglocatie l"
+ filtClause.from
+ " WHERE 1=1"
+ filtClause.where
+ " ORDER BY 2";
}
else if (ab_mode < 0) // Ruimte Reservering
{
curPage = 3;
// verplicht: date_from: begin van reservering
// loc_key: locatie key
// act_key: activiteit
// optioneel: bez_cnt: aantal bezoekers
// res_tot: einde van reservering (niet meerdaags)
var sql = "SELECT res_srtactiviteit_key, "
+ lcl.xsqla('a.res_activiteit_omschrijving', 'a.res_activiteit_key')
+ " , a.res_activiteit_posttime"
+ " FROM res_activiteit a"
+ " WHERE res_activiteit_key = " + act_key;
var oRs = Oracle.Execute(sql);
var params = { loc_key_arr: loc_key > 0 ? [loc_key] : [],
bld_key_arr: bld_key > 0 ? [bld_key] : [],
ver_key_arr: flr_key > 0 ? [flr_key] : [],
loc_plaats: getQParam("loc_plaats", ""),
forSelectRoom: true,
res_van: date_from,
res_tot: date_to,
vis: bez_cnt,
activiteit_key: act_key,
act_post_time: oRs("res_activiteit_posttime").Value,
srtact: oRs("res_srtactiviteit_key").Value,
with_satisfaction: true,
authparams: user.checkAutorisation("WEB_RESUSE", null, null, true), // urole == "fe" en pessimistisch.
ruimtecat: []
};
oRs.Close();
}
else if (res_deel_key < 0) // Voorziening Reservering
{
if (disc_key < 0)
{ // Kies Discipline
curPage = 4;
subject = L("lcl_res_objects");
var params = { loc_key : loc_key,
geb_key : bld_key,
ver_key : flr_key,
rui_key : roo_key,
select_fields : " count(*) cnt, r.res_discipline_key ",
sql_group_by : "GROUP BY r.res_discipline_key",
autfunction : autfunction,
res_tot : date_to
};
var sql_aantal = getScopedResDeelSql(params);
var sql_d = "SELECT dis.ins_discipline_key, "
+ " " + lcl.xsqla('dis.ins_discipline_omschrijving','dis.ins_discipline_key')
+ " , (SELECT SUM(cnt)"
+ " FROM (" + sql_aantal + ") aant"
+ " WHERE res_discipline_key = dis.ins_discipline_key) aantal"
+ " FROM res_v_aanwezigdiscipline dis"
+ " WHERE ins_discipline_min_level = 1"
+ " AND dis.ins_discipline_key IN("
+ " SELECT g.ins_discipline_key FROM fac_v_webgebruiker g, fac_functie f "
+ " WHERE g.fac_functie_key = f.fac_functie_key "
+ " AND f.fac_functie_code = " + safe.quoted_sql(autfunction)
+ " AND g.fac_gebruiker_alg_level_write < 9"
+ " AND g.fac_gebruiker_prs_level_write < 9"
+ " AND g.prs_perslid_key = " + user_key
+ " )"
+ " AND dis.ins_discipline_key IN"
+ " (SELECT res_discipline_key" /* DISTINCT */
+ " FROM res_deel r, ins_deel d"
+ " WHERE r.res_deel_verwijder IS NULL"
+ " AND r.res_ins_deel_key = d.ins_deel_key)"
+ " AND EXISTS (SELECT res_activiteit_key"
+ " FROM res_activiteitdiscipline rad"
+ " WHERE rad.res_discipline_key = dis.ins_discipline_key"
+ " AND rad.res_activiteit_key = " + act_key
+ " )";
if (S("vis_parking_key") != -1) sql_d += " AND dis.ins_discipline_key != " + S("vis_parking_key");
if (S("res_fe_discs_only_in_res") != -1 && !fronto && !backo && restype == 'CV')
sql_d += " AND dis.ins_discipline_key NOT IN (" + S("res_fe_discs_only_in_res") + ") ";
sql_d += " ORDER BY ins_discipline_volgnr";
}
else
{ // Kies Object
curPage = 5;
var sql_disc = "SELECT ins_discipline_omschrijving "
+ " FROM res_v_aanwezigdiscipline "
+ " WHERE ins_discipline_key = " + disc_key;
var oRs_disc = Oracle.Execute(sql_disc);
subject = oRs_disc("ins_discipline_omschrijving").Value;
oRs_disc.Close();
// Starting res_deel sql
var select_fields = " r.res_deel_key"
+ ", r.res_opmerking"
+ ", r.res_omschrijving"
+ " || CASE"
+ " WHEN (r.res_vervaldatum IS NULL OR r.res_vervaldatum > SYSDATE)"
+ " THEN ''"
+ " ELSE " + safe.quoted_sql(L("lcl_inactive_data_suffix"))
+ " END res_deel_omschrijving"
+ ", r.ins_alg_ruimte_key"
+ (ab_mode & 1 ?
""
: ", aogg.alg_plaatsaanduiding || ' (' || aogg.alg_onroerendgoed_omschrijving || ')' plaats"
)
+ ", r.res_image"
+ ", r.res_disc_params_preposttime"
+ ", r.ins_deel_key";
var sql_r = getScopedResDeelSql({ select_fields : select_fields,
extra_from : (ab_mode & 1 ? "" : "alg_v_allonrgoed_gegevens aogg"),
loc_key : loc_key,
geb_key : bld_key,
ver_key : flr_key,
rui_key : roo_key,
sdisc : disc_key,
autfunction : autfunction,
res_tot : date_to
});
if (!(ab_mode & 1)) // Voorziening afhalen
sql_r += " AND r.ins_alg_locatie_key = " + loc_key
+ " AND aogg.alg_onroerendgoed_keys = r.ins_alg_ruimte_key";
sql_r += " GROUP BY"
+ " r.res_deel_key"
+ ", r.res_opmerking"
+ ", r.res_omschrijving"
+ ", r.res_vervaldatum"
+ ", r.ins_alg_ruimte_key"
+ (ab_mode & 1 ?
""
: ", aogg.alg_plaatsaanduiding || ' (' || aogg.alg_onroerendgoed_omschrijving || ')'"
)
+ ", r.res_image"
+ ", r.res_disc_params_preposttime"
+ ", r.ins_deel_key"
+ " ORDER BY 6, 3 ";
var dparams = { res_van: date_from,
res_tot: date_to,
disc_key: disc_key };
var existing_res = res.plan_deel_bezet_info(dparams);
var date_time_from = date_from.getTime(); // E<>n keer uitrekenen
var date_time_to = date_to.getTime();
}
}
}
// Ik wil een reservering maken. Ik zie het volgende voor me:
//
// 1. Vraag een DATUM. Een datum is de minimale vereiste om te weten
// 2. Optioneel kunnen er nog waarden opgegeven worden die van invloed zijn op de mogelijkheden. Deze zijn:
// - capaciteit (hoeveel mensen moet er passen)
// - locatie/regio (waar precies/ongeveer)
// - begintijdstip (omstreeks)
//
// > Met die datum + filters vragen we kandidaatruimtes op aan de database (of via API)
//
// 3. De kandidaatruimtes worden getoond met voldoende info om een keuze te maken. Bijvoorbeeld
// - gegroepeerd per locaties (indien meer dan 1/niet opgegeven)
// - dan per ruimte een (1) vermelding rond het genoemde tijdstip
// - met vermelding Beschikbaar van X to Y
// 4. Met een keuze uit deze opties is veel bepaald:
// - ruimte
// - datum (was al)
// - aantal mensen (was al capaciteit, anders obv de default opstelling)
// en kan nog aangefpast worden:
// - tijd (de hele beschikbare periode)
// en is nog nodig en in te vullen:
// - een omschrijving en evt opmerking
// - [later?] flexkenmerken
// 5. Deze gegevens worden gesubmit tot een nieuwe reservering (via service)
%>
<html>
<head>
<% FCLTMHeader.Generate({title: subject });
if (curPage == 2)
{ %>
<script type="text/javascript">
async function fn_res_next1()
{
if (!await validateForm("res_new_1"))
return false;
// 24/7 organisation
// 0 = Weekends are holidays (Reservations allowed)
// 1 = Weekends are working days
// 2 = Weekends are strict holidays (No reservations allowed)
var organisation247Type = <%=S("res_247organisation")%>;
var startDate = new Date(parseInt($("#date_from").val()));
var isHoliday = cal_isVrijeDag(startDate) || cal_isWeekend(startDate);
// Display warning: Selected date is not a workday
if (organisation247Type == 2 && isHoliday) {
FcltMgr.alert("<%=L("lcl_holiday_strict")%>");
} else {
FcltMgr.confirm("<%=L("lcl_holiday")%>", {
autoconfirm: !isHoliday || organisation247Type == 1,
fncancel: function() { return false; }
}, fn_res_next1_confirm);
}
}
function fn_res_next1_confirm()
{
var activiteit = <%=act_key%>;
var datum = $("#date_from").val();
var bezoekers = $("#bez_cnt").val();
<% if (!(cvab & 2))
{
%>var cvab = $("#cvab_mode").val() || -1; <%
}
else if (restype == "CV" || restype == "C")
{
%>var cvab = <%= cvab %>; <%
} %>
var purl = "?rsv_ruimte_key=-1"
+ "&date_from=" + datum
+ "&date_to=" + $("#date_to").val()
+ (typeof cvab != "undefined" && (cvab % 1) === 0 ? "&cvab=" + cvab : "")
+ (bezoekers ? "&bez_cnt=" + bezoekers : "")
+ "<%=safe.jsstring(transitParam)%>";
<%
var res_eindlevel = 2;
switch (S("res_show_alg_level"))
{
case "L": res_eindlevel = 2; break;
case "G": res_eindlevel = 3; break;
case "V": res_eindlevel = 4; break;
case "R": res_eindlevel = 5; break;
}
%>
purl = "plaatsselector.asp"
+ "?act_key=" + activiteit
+ "<%=safe.jsstring(transitParamPlaats)%>"
+ "&filtCode=<%=(restype == "R" ? "RES" : (cvab & 1 ? "RESB" : "RESA"))%>"
+ "&autlevel=<%=autlevel%>"
+ "&eindlevel=<%=(restype == "R" ? res_eindlevel : (cvab & 1 ? "5" : res_eindlevel))%>"
+ "&bind=G"
+ ( "<%=restype%>" == "C"
? "&return_to=<%=safe.url("reservering.asp")%>" + encodeURIComponent(purl)
: "&return_to=<%=safe.url("reservering_new.asp")%>" + encodeURIComponent(purl)
)
window.location.href = purl;
}
function autosetEindtijd()
{
var opt = $("#act_key").find("option:selected");
// De extraParamValue is opgeslagen als text. De res_activiteit_duur is een float met mogelijk een komma i.p.v. een punt als decemaal scheidingsteken.
var res_duur = parseFloat((String(<%=res_duur%>)).replace(',','.'));
if (res_duur)
{
var startDate = new Date(parseInt($('#date_from').val()));
var endDate = new Date(parseInt($('#date_to').val()));
var estEndDate = startDate.addFloatHours(res_duur, <%=safe.jsfloat(S("res_h"))%>);
if (!isNaN(startDate) && endDate.getTime() != estEndDate.getTime())
{
$("#show_date_to").datepicker('setDate',new Date(estEndDate));
$("#date_to").val(estEndDate.getTime());
$("#time_from_date_to").val(toTimeString(estEndDate)).css("color", "red");
}
}
}
function checkVeldenVerplicht()
{
// Afhankelijk van de geselecteerde waarde voor activiteit
// moet het veld aantalbezoekers verplicht worden gemaakt.
var bez_verplicht = "<%=res_verp%>";
$("#bez_cnt").toggleClass("required", bez_verplicht == 1);
}
</script>
<% } %>
</head>
<body>
<%
PAGE_START({id: "page-"+curPage, pclass: "reservering-new"});
HEADER({title: subject, back:!qrc, home:!qrc });
CONTENT_START();
if (curPage == 0)
{
ROFIELD("fld", "AiAi", "Verkeerde pagina");
}
if (curPage == 1)
{
function fnSubmit(oRs)
{
return "?act_key=" + oRs("res_activiteit_key").Value + transitParam;
}
var rst = new ResultsetTable({ sql: sql_a
, keyColumn: "res_activiteit_key"
, linkColumn: fnSubmit
, singleLink: true
, headerColumn: "res_activiteit_omschrijving"
, ID: "acttable"
, showAll: true
, emptySetString: L("lcl_empty")
});
var cnt = rst.processResultset();
}
if (curPage == 2)
{
%>
<form name="res_new_1" id="res_new_1">
<script>
var intervals = { begin: [], end: [] };
function onChangeStartDate()
{
<% if (rsv_ruimte_key < 0) { /* alleen bij nieuwe */ %>
// only change time_from_date_from when there are no intervaltimes
if (intervals.begin.length == 0)
{
var start = new Date(parseInt($('#date_from').val()));
var today = new Date(Math.floor(new Date().getTime() / 1000) * 1000);
<% if (urole == "fe") { %>
today.setMinutes(today.getMinutes() + 5); // beetje marge, anders direct expired
<% } %>
if ( $("#time_from_date_from").val() < toTimeString(today)
&& start.getDate() === today.getDate()
&& start.getMonth() === today.getMonth()
&& start.getFullYear() === today.getFullYear()
)
{ // entered date is today -> set time to now
$("#date_from").val(today.getTime());
$("#time_from_date_from").val(toTimeString(today)).change();
}
else
{
var thatday = new Date(parseInt($("#date_from").val()));
var new_day = thatday.setFloatHours(<%=safe.jsfloat(timeFrom)%>, <%=safe.jsfloat(S("res_h"))%>);
$("#date_from").val(new_day.getTime());
$("#time_from_date_from").val(toTimeString(new_day)).change();
}
}
if ("<%=restype%>"=="C")
{ // Catering is alleen een tijdstip.
$("#date_to").val( $("#date_from").val() );
}
<% } %>
}
$(_ => {
$("[name='ab_mode']").on("change", function() {
$("#cvab_mode").val(this.value);
});
})
</script>
<%
FCLTcalendar("date_from",
{ label : L("lcl_from"),
datum: res_van,
maxPast: 0,
maxFuture: (eff_act_limiet_fe > 0 ? eff_act_limiet_fe : eff_act_limiet),
selectableDays: urole == "fe" ? 2 : 0,
initEmpty: (rsv_ruimte_key<0 && restype=="C"),
timeField: true,
timeStep: S("res_h") * 60,
startTime: timeFrom,
endTime: S("res_t2"),
res_dur: S("res_dur"),
required: true,
volgnr: 1,
mobile: true,
onChange : "autosetEindtijd()",
onChangeDate: "onChangeStartDate()"
}
);
FCLTcalendar("date_to",
{ label : L("lcl_to"),
datum: res_tot,
maxFuture: (eff_act_limiet_fe > 0 ? eff_act_limiet_fe : eff_act_limiet),
timeField: true,
timeStep: S("res_h") * 60,
startTime: timeFrom,
endTime: S("res_t2"),
hidden: restype == "R", // Meerdaags ruimte ondersteunen we nog niet echt
hidden : (res_meteind && restype == "R"), // Meerdaags ruimte ondersteunen we nog niet echt
trhidden : !res_meteind,
required: true,
volgnr: 2,
mobile: true
}
);
if (toonBez)
RWFIELD("bez_cnt", L("lcl_visitors") , bez_cnt, {datatype: "number", required: false});
if (restype == "CV")
{
if (!(cvab & 2)) // toggle bezorg/afhaal
{
CONTROLGROUP_START();
var radios = [
{ id: "cvab-a", value: "0", checked: !(cvab & 1), label: L("lcl_res_afhalen") },
{ id: "cvab-b", value: "1", checked: (cvab & 1), label: L("lcl_res_bezorgen") }
];
RADIO_GROUP("ab_mode", radios, { big: true });
CONTROLGROUP_END();
} %>
<input type="hidden" id="cvab_mode" name="cvab_mode" value="<%=cvab%>">
<% }
CONTROLGROUP_START();
BUTTON(L("lcl_next"), {click: "fn_res_next1()", icon: "fa-arrow-right" });
CONTROLGROUP_END();
%>
</form>
<%}
if (curPage == 3) // Lijst met geschikte ruimtes
{
function fnDataFilter(oRs)
{
return oRs.Fields("will_fit").Value;
}
function fncolIcon(oRs)
{
var icon = "fa-home";
if (oRs.Fields("image_url").Value != null)
{
icon = oRs.Fields("image_url").Value;
//if (!icon.match(/^http/))
// icon = S("res_image_path") + icon;
}
return icon;
}
function fncol1Link(oRs)
{
var nurl = "reservering.asp?rsv_ruimte_key=-1"
+ "&res_ruimte_key=" + oRs.Fields("res_ruimte_key").Value
+ transitParam;
return nurl;
};
function fnDetail(oRs)
{
// return toTimeString(dataregel.begintijd);
}
function fnHeader(oRs)
{
var txt = safe.html(oRs.Fields("res_ruimte_nr").Value);
if (oRs.Fields("satisfaction").Value)
{
var likesymbol = rater(oRs.Fields("satisfaction").Value, { readonly: true } );
txt += "<br>" + likesymbol;
}
return txt;
}
function fnSubheader(oRs)
{
// Toon extra gegevens over deze ruimte.
var bMin = oRs.Fields("bMin").Value;
var bMax = oRs.Fields("bMax").Value;
var capc_txt = String(bMin) + ((bMin!=bMax)?"-"+bMax:"") + " " + L("lcl_prs_pers");
if (oRs.Fields("prijs").Value)
capc_txt += ", " + S("currency_pref") + safe.curr(oRs.Fields("prijs").Value)
var txt = "<div class='listbodytext'>" + safe.html(capc_txt) + "</div>";
txt += "<div class='listbodytext'>"
+ (S("fac_html_strictness") == 1
? safe.html(oRs.Fields("omschrijving").Value || "")
: oRs.Fields("omschrijving").Value || "")
+ "</div>";
return txt;
/* // Voorlopig nog niet de beschikbare tijden laten zien.
var vrij = "";
var res_arr = dataregel.existing_res;
if (res_arr != null)
{
res_arr.sort(dynamicSort({col: "res_van", desc: false}));
var t1 = new Date(dataregel.begintijd);
var t2 = t1;
for (var ci=0; res_arr != null && ci < res_arr.length; ci++)
{
t2 = res_arr[ci].res_van;
if (ci==0)
{
t1 = new Date(t2.getTime());
t1.setHours(dataregel.begintijd,0,0,0);
}
if (t1 < t2)
{
vrij += toTimeString(t1) + " - " + toTimeString(t2) + "<br>";
t1 = res_arr[ci].res_tot;
}
}
t2 = new Date(t1.getTime());
t2.setHours(dataregel.eindtijd,0,0,0);
if (t1 < t2)
{
vrij += toTimeString(t1) + " - " + toTimeString(t2);
}
}
else
{
vrij = toTimeString(dataregel.begintijd) + " - " + toTimeString(dataregel.eindtijd);
}
return vrij;
*/
}
function dynamicSort(params)
{
params = params || {};
var sortOrder = (params.desc ? -1 : 1);
return function (a,b)
{
var result = (a[params.col] < b[params.col]) ? -1 : (a[params.col] > b[params.col]) ? 1 : 0;
return result * sortOrder;
}
}
params.sort_on_count = S("res_lookhistory_days") > 0;
var plan_rooms_info = res.plan_rooms_info(params);
var plan_bezet_info = res.plan_bezet_info(params);
set_will_fit(plan_rooms_info, plan_bezet_info, params);
var rst = new ResultsetTable({ dataset: plan_rooms_info
, fnDataFilter: fnDataFilter
, keyColumn: "res_ruimte_key"
, iconColumn: fncolIcon
, linkColumn: fncol1Link
, headerColumn: fnHeader
//, detailColumn: fnDetail
, subheaderColumn: fnSubheader
, dividerColumn: (loc_key == -1 ? "locatie" : "")
, ID: "restable"
, showAll: true
, noSearch: true
, emptySetString: L("lcl_empty")
});
var cnt = rst.processResultset();
}
if (curPage == 4)
{
function fnDiscLink(oRs)
{
var disc_key = oRs("ins_discipline_key").Value;
return "?disc=" + disc_key + transitParam;
}
function fnDiscFilter(oRs)
{
return oRs("aantal").Value > 0;
}
var rst = new ResultsetTable({ sql: sql_d
, keyColumn: "ins_discipline_key"
, fnDataFilter: fnDiscFilter
, linkColumn: fnDiscLink
, singleLink: true
, headerColumn: "ins_discipline_omschrijving"
, ID: "disctable"
, showAll: true
, emptySetString: L("lcl_empty")
});
var cnt = rst.processResultset();
}
if (curPage == 5)
{
function fnResCV(oRs)
{
res_deel_key = oRs("res_deel_key").Value;
var alg_ruimte_key = oRs("ins_alg_ruimte_key").Value;
return "reservering.asp?res_deel=" + res_deel_key
+ (ab_mode & 1 ? "" : "&roo_key=" + alg_ruimte_key)
+ transitParam;
}
function fnObjFilter(oRs)
{
var ins_deel_key = oRs("ins_deel_key").Value;
var prepost_time = oRs("res_disc_params_preposttime").Value||0;
var ar = existing_res[ins_deel_key]; // Bestaande reserveringen op dit deel
for (var ci = 0; ar && ci < ar.length; ci++)
{
if (date_time_from - prepost_time*60*60*1000 < ar[ci].res_tot.getTime()
&& date_time_to + prepost_time*60*60*1000 > ar[ci].res_van.getTime())
return false; // Overlap!
}
return true;
}
function fnResDeelIcon(oRs)
{
var icon = "fa-tv-retro";
if (oRs.Fields("res_image").Value != null)
{
icon = oRs.Fields("res_image").Value;
if (!icon.match(/^http/))
icon = safe.htmlattr(S("res_image_path") + "deel/thumb/" + icon);
}
return icon;
}
function fncolSubHeader(oRs)
{
var txt = "";
if (!(ab_mode & 1)) // afhalen
{
txt = "<div class='listbodytext'>" + L("lcl_res_afhalen_fixed") + ":</div>"
+ "<div class='listbodytext'>" + safe.html(oRs("plaats").Value) + "</div>";
}
return txt;
}
var rst = new ResultsetTable({ sql: sql_r
, keyColumn: "res_deel_key"
, fnDataFilter: fnObjFilter
, linkColumn: fnResCV
, iconColumn: fnResDeelIcon
, headerColumn: "res_deel_omschrijving"
, subheaderColumn: fncolSubHeader
, ID: "restable"
, showAll: true
, emptySetString: L("lcl_ins_no_obj_available").format(subject.toLowerCase()) // indien alle objecten al gereserveerd zijn (TODO: eruit filteren)
});
var cnt = rst.processResultset();
}
CONTENT_END();
FOOTER();
PAGE_END();
PDA_PAGE_END(); %>
</body>
</html>
<% ASPPAGE_END(); %>