<%@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; %> <% FCLTHeader.Requires({ js: ["./modernizr-3.3.0.custom.min.js"] }); FCLTHeader.Requires({ js: ["jquery.timepicker-table.js"], css: ["timePicker-table.css"] }); var urole = "fe"; var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1); var date_from = getQParamDate("date_from", null); var date_to = getQParamDate("date_to", null); var act_key = getQParamInt("act_key", -1); var bez_cnt = getQParamInt("bez_cnt", null); var loc_key = getQParamInt("loc_key", -1); var res_ruimte_key = getQParamInt("res_ruimte_key",-1); var qrc = getQParamInt("qrc", 0) != 0; autfunction = ("WEB_RESUSE"); var authparams = user.checkAutorisation(autfunction); var transitParam = buildTransitParam(["act_key", "date_from", "date_to", "bez_cnt", "loc_key", "loc_plaats", "res_ruimte_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 (!date_from && res_ruimte_key==-1) { curPage = 1; // geen parameters aanwezig. var srtact = getQParamInt("srtact", 1); // Vooralsnog alleen ruimte reserveringen. var sql = "SELECT res_srtactiviteit_metaantal" + " FROM res_srtactiviteit" + " WHERE res_srtactiviteit_key = " + srtact; var oRs = Oracle.Execute(sql); var toonBez = oRs("res_srtactiviteit_metaantal").value; oRs.Close(); // default begin en eindtijd var res_van = new Date().setFloatHours(S("res_t1") + 24, S("res_h")); // default morgen var res_tot = res_van.addFloatHours(S("res_dur"), S("res_h")); // 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" + " AND sa.res_srtactiviteit_key = " + srtact + " AND sa.res_srtactiviteit_soort = 0" // restype = "R" + " 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 = 3" // 1; Reserveerbaar object; 2; Verbruiksartikel; 3; Ruimte + " )" + " ORDER BY res_activiteit_volgnr" + " , sa.res_srtactiviteit_prefix" + " , UPPER(" + lcl.xsql('a.res_activiteit_omschrijving', 'a.res_activiteit_key') +")"; // Locaties (waar reserveerbare ruimten zijn binnen de scope van de user) 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"; }; if (date_from && res_ruimte_key==-1) { curPage = 2; // verplicht: date_from: begin van reservering // act_key: activiteit // optioneel: bez_cnt: aantal bezoekers // loc_key: locatie key // res_tot: einde van reservering (niet meerdaags) var params = { loc: loc_key, loc_plaats: getQParam("loc_plaats", ""), forSelectRoom: true, res_van: date_from, res_tot: date_to, vis: bez_cnt, activiteit_key: act_key, with_satisfaction: true, authparams: user.checkAutorisation("WEB_RESUSE", null, null, true), // urole == "fe" en pessimistisch. ruimtecat: [] }; }; }; // 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 // ** indien Share&Meet: optie om het verzoek aan externe FACILITORs te vragen. // 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) %> <% FCLTMHeader.Generate({title: subject }); %>
<% if (curPage == 0) { PAGE_START({id: "page-0-"+rsv_ruimte_key}); HEADER({title: L("lcl_mobile_selectdatum"), back:!qrc, datatheme: (urole=='fe' ? jQFrontEndTheme : null) }); CONTENT_START(); ROFIELD("fld", "AjAi", "Verkeerde pagina"); CONTENT_END(); FOOTER(); PAGE_END(); } if (curPage == 1) { PAGE_START({id: "page-1-"+rsv_ruimte_key}); HEADER({title: subject, back:!qrc, datatheme: (urole=='fe' ? jQFrontEndTheme : null) }); CONTENT_START(); %>
<% FCLTselector( "act_key", sql_a, { label: L("lcl_activity"), emptyOption: L("lcl_res_select_activity"), extraParamValue: "res_activiteit_duur,res_activiteit_aantalverplicht", required: true, mobile: true, onChange: "OnChangeActivity()" } ); FCLTcalendar("date_from", { label : L("lcl_from"), datum: res_van, maxPast: 0, maxFuture: (S("res_fe_reservering_limiet") > 0? S("res_fe_reservering_limiet") : S("res_reservering_limiet")), timeField: true, timeStep: S("res_h") * 60, startTime: S("res_t1"), endTime: S("res_t2"), res_dur: S("res_dur"), required: true, volgnr: 1, mobile: true, onChange : "autosetEindtijd()" } ); FCLTcalendar("date_to", { label : L("lcl_to"), datum: res_tot, maxFuture: (S("res_fe_reservering_limiet") > 0? S("res_fe_reservering_limiet") : S("res_reservering_limiet")), timeField: true, timeStep: S("res_h") * 60, startTime: S("res_t1"), endTime: S("res_t2"), hidden: true, // Meerdaags ruimte ondersteunen we nog niet echt required: true, volgnr: 2, mobile: true } ); if (toonBez) RWFIELD("bez_cnt", L("lcl_visitors") , bez_cnt, {datatype: "number", required: false}); var loc_key = user.alg_locatie_key( { withcurrent:true }); var plaats = ""; if (loc_key > 0) plaats = new Locatie(loc_key).alg_locatie_plaats(); var anyremote = res.anyremotes(); FCLTselector( "loc_key", sql_l, { initKey: loc_key, emptyOption: anyremote?L("lcl_shared_other"):null, label: L("lcl_location"), initEmpty: true, mobile:true, extraParamValue: "alg_locatie_plaats", onChange: "changeLoc(this)" } ); if (anyremote) RWFIELD("loc_plaats", "" , plaats, { html: 'disabled=1' }); CONTROLGROUP_START(); BUTTON(L("lcl_next"), {click: "fn_res_next1()", dataicon: "arrow-r", dataajax: "false"}); CONTROLGROUP_END(); %>
<% CONTENT_END(); FOOTER(); PAGE_END(); } if (curPage == 2) // Lijst met geschikte ruimtes { PAGE_START({id: "page-2-"+rsv_ruimte_key}); HEADER({title: subject, back:!qrc, datatheme: (urole=='fe' ? jQFrontEndTheme : null) }); CONTENT_START(); function fnDataFilter(oRs) { return oRs.Fields("will_fit").Value; } function fncolIcon(oRs) { var icon = "../Pictures/house_p.png"; 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, processParams) { if (processParams && processParams.disc_key) { var deepurl = oRs.Fields("deepurl").Value; deepurl += "&res_ruimte_key=" + oRs.Fields("res_ruimte_key").Value + "&bez_omschr=" + "Vanuit+extern+systeem" // TODO //+ "&flex_defaults=" + escape(extern_flex); var orghome = HTTP.urlzelf() + "/appl/pda/facilitor.asp"; var nurl = "../res/res_goto_extern.asp?res_disc_key=" + processParams.disc_key + "&deepurl=" + escape(deepurl + transitParamExtern + "&orghome=" + orghome); // extern kan niets met onze act_key } else { 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 += "
" + 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:"") + " pers."; if (oRs.Fields("prijs").Value) capc_txt += ", " + S("currency_pref") + safe.curr(oRs.Fields("prijs").Value) var txt = "
" + safe.html(capc_txt) + "
"; txt += "
" + safe.html(oRs.Fields("omschrijving").Value) + "
"; 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) + "
"; 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; } } 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(); // En nu de externen var autfunction = "WEB_RESUSE"; // TODO // Overzicht externe ruimtes var sql = res.getremotes_sql(autfunction); var oRs = Oracle.Execute(sql); while( !oRs.eof ) { var disc_key = oRs.Fields("ins_discipline_key").Value; %>
<%= L("lcl_res_extern_prefix") + Server.HTMLencode(oRs.Fields("ins_discipline_omschrijving").Value)%>
<% var url = oRs.Fields("res_disc_params_remoteurl").Value + "&API=RESINFO"; var resparams = { res_van: params.res_van, res_tot: params.res_tot, reg: -1, dist: -1, loc: -1, bld: -1, ver: -1, rui: -1, ruimtecat: [] }; resparams.alg_locatie_plaats = params.loc_plaats;// Aan de andere kant kennen we onze key niet, daarom via plaats. resparams.request = "plan_rooms_info"; resparams.mobile = true; /*global*/ plan_rooms_info = HTTP.getJSON(url, { data: resparams }).plan_rooms_info; if (plan_rooms_info.length) { resparams.request = "plan_bezet_info"; /*global*/ plan_bezet_info = HTTP.getJSON(url, { data: resparams }).plan_bezet_info; } else plan_bezet_info = {}; set_will_fit(plan_rooms_info, plan_bezet_info, resparams) __Log("plan_rooms_info:") __Log(plan_rooms_info) rst.dataset = plan_rooms_info; rst.sql = null; rst.ID = "prodtable2"; var histogram = rst.processResultset({ disc_key: disc_key }); var allEmpty = allEmpty && (histogram == -1); oRs.MoveNext(); } oRs.close(); CONTENT_END(); FOOTER(); PAGE_END(); } %>