894 lines
39 KiB
Plaintext
894 lines
39 KiB
Plaintext
<%@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(); %>
|