FSN#26873 Meer Mobile FE-functionaliteit (RES en meer)

svn path=/Website/branches/v5.3.4/; revision=20181
This commit is contained in:
Erik Groener
2013-12-13 13:34:21 +00:00
parent c3ea327e3d
commit e1f2dacd5b
4 changed files with 221 additions and 94 deletions

View File

@@ -25,6 +25,7 @@ var JSON_Result = true;
<%
var urole = getQParamSafe("urole");
var afspr_key = getQParamInt("afspr_key");
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1);
var fronto = urole=="fo"; // DEPRECATED
var backo = urole=="bo"; // DEPRECATED
@@ -121,6 +122,21 @@ else
var floor = getFParamInt("verdiepingkey", -1);
var rooms = getFParamInt("ruimtekey", -1);
if (rsv_ruimte_key != -1)
{
// Afspraak wordt gevuld vanuit een reservering.
var sql = "SELECT alg_ruimte_key"
+ " FROM res_v_rsv_ruimte_2_alg_ruimte"
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
rooms = oRs("alg_ruimte_key").value;
fields.push({ dbs: "res_rsv_ruimte_key", typ: "key", val: rsv_ruimte_key});
}
oRs.Close();
}
if (rooms!=-1)
alg_onrg_key = rooms;
else if (floor!=-1)

View File

@@ -23,6 +23,75 @@
<!-- #include file="./iface.inc" -->
<%
function res_rsv_ruimte_info(rsv_ruimte_key)
{
var result = {rsv_ruimte_key: rsv_ruimte_key };
var sql = "SELECT *"
+ " FROM res_rsv_ruimte"
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs = Oracle.Execute(sql);
result.opstel_key = oRs("res_ruimte_opstel_key").value;
result.account = oRs("prs_kostenplaats_key").value;
result.bezoekers = oRs("res_rsv_ruimte_bezoekers").value;
result.status_fo = oRs("res_status_fo_key").value;
result.act_key = oRs("res_activiteit_key").value;
result.reservering_key = oRs("res_reservering_key").value;
result.ruimte_volgnr = oRs("res_rsv_ruimte_volgnr").value;
result.ruimte_van = oRs("res_rsv_ruimte_van").value;
result.ruimte_tot = oRs("res_rsv_ruimte_tot").value;
result.omschrijving = oRs("res_rsv_ruimte_omschrijving").value;
result.opmerking = oRs("res_rsv_ruimte_opmerking").value;
result.contact_key = oRs("res_rsv_ruimte_contact_key").value;
result.host_key = oRs("res_rsv_ruimte_host_key").value;
result.telefoon = oRs("res_rsv_ruimte_telefoon").value;
oRs.Close();
var sql = "SELECT COALESCE (opstelalg.res_ruimte_nr, ruimte_geg.alg_ruimte_aanduiding) res_ruimte_nr"
+ " , opstelalg.res_ruimte_key"
+ " , ruimte_geg.alg_locatie_key"
+ " , ruimte_geg.alg_ruimte_key"
+ " , rsa.res_srtactiviteit_metomschr"
+ " , rsa.res_srtactiviteit_metopmerk"
+ " , rsa.res_srtactiviteit_metaantal"
+ " FROM res_rsv_ruimte rrr"
+ " , alg_v_ruimte_gegevens ruimte_geg"
+ " , res_activiteit ra"
+ " , res_srtactiviteit rsa"
+ " , (SELECT res_ruimte_opstel_key"
+ " , rr.res_ruimte_nr res_ruimte_nr"
+ " , rr.res_ruimte_key"
+ " , MIN (alg_ruimte_key) alg_ruimte_key"
+ " FROM res_ruimte_opstelling rro"
+ " , res_alg_ruimte rar"
+ " , res_ruimte rr"
+ " WHERE rro.res_ruimte_key = rar.res_ruimte_key"
+ " AND rr.res_ruimte_key = rar.res_ruimte_key"
+ " AND rar.res_alg_ruimte_verwijder IS NULL"
+ " GROUP BY res_ruimte_opstel_key"
+ " , rr.res_ruimte_nr"
+ " , rr.res_ruimte_key) opstelalg"
+ " WHERE rrr.res_rsv_ruimte_verwijder IS NULL"
+ " AND rrr.res_ruimte_opstel_key = opstelalg.res_ruimte_opstel_key(+)"
+ " AND rrr.res_activiteit_key = ra.res_activiteit_key"
+ " AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key"
+ " AND ruimte_geg.alg_ruimte_key = COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)"
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs = Oracle.Execute(sql);
result.ruimtenr = oRs("res_ruimte_nr").value;
result.ruimtekey = oRs("res_ruimte_key").value;
result.loc_key = oRs("alg_locatie_key").value;
result.room_key = oRs("alg_ruimte_key").value;
result.toonOms = oRs("res_srtactiviteit_metomschr").value || 0;
result.toonOpm = oRs("res_srtactiviteit_metopmerk").value || 0;
result.toonBez = oRs("res_srtactiviteit_metaantal").value || 0;
oRs.Close();
return result;
}
FCLTHeader.Requires({ plugins:["suggest"],
js: ["./modernizr.custom.06495.js"] });
FCLTHeader.Requires({ js: ["jquery.timepicker-table.js"],
@@ -30,6 +99,7 @@ FCLTHeader.Requires({ js: ["jquery.timepicker-table.js"],
var afs_key = getQParamInt("afs_key",-1); // -1 betekent nieuwe
var qrc = getQParamInt("qrc", 0) != 0;
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1);
// Mogelijke parameters voor toevoegen only
// Deze zijn niet waarschijnlijk meegegeven, maar de defaultwaarde is ook al handig
@@ -49,6 +119,26 @@ var bez_afspraak_host_key = user_key;
var bez_afspraak_contact_key = user_key;
var bez_afspraak_opmerking = L("lcl_bez_createdbymobile");
var bez_bezoekers = [];
var subject = afs_key > -1 ? L("lcl_vis_appointment") + " " + afs_key : L("lcl_mobile_newafspraak"); // header van het scherm.
if (rsv_ruimte_key != -1)
{
var sql = "SELECT bez_afspraak_key"
+ " FROM bez_afspraak"
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
afs_key = oRs("bez_afspraak_key").value;
oRs.Close();
//
// Als afs_key == -1 dan zijn er nog geen bezoekers bij een reservering aangemeld.
// Haal de benodigde informatie uit de reservering.
//res.res_rsv_ruimte_info(rsv_ruimte_key);
var rsv = res_rsv_ruimte_info(rsv_ruimte_key);
subject = L("lcl_mobile_bezoek") + " " + L("lcl_reservation").toLowerCase() + " " + rsv.reservering_key + "/" + rsv.ruimte_volgnr;
}
var this_bez = bez.func_enabled_afspraak(afs_key);
user.auth_required_or_abort(this_bez.canReadAny);
@@ -143,80 +233,95 @@ if ( afs_key > -1)
}
else
{
// NIEUWE AFSPRAAK
// AFSPRAAK DATUM/TIJD
// defaults zetten
bez_afspraak_datum = new Date();
if (S("vis_t1_std") > 0)
if (rsv_ruimte_key != -1)
{
if (urole != 'bo') // alleen backo default 'nu', anderen vis_t1_std
{
bez_afspraak_datum.setHours(Math.floor(S("vis_t1_std")));
bez_afspraak_datum.setMinutes((S("vis_t1_std") - Math.floor(S("vis_t1_std"))) * 60, 0, 0);
}
}
else
{ // S("vis_t1_std") < 0
if (urole != 'bo')
{
timeBeginInitEmpty = true;
bez_afspraak_datum.setHours(0);
bez_afspraak_datum.setMinutes(0, 0, 0);
}
}
bez_afspraak_eind = new Date(bez_afspraak_datum);
if (S("vis_t2_std") > 0)
{
bez_afspraak_eind.setHours(Math.floor(S("vis_t2_std")));
bez_afspraak_eind.setMinutes((S("vis_t2_std") - Math.floor(S("vis_t2_std"))) * 60);
// Er zijn nog geen bezoekers bij een reservering aangemeld.
// De benodigde informatie komt uit de reservering.
bez_afspraak_datum = new Date(rsv.ruimte_van);
bez_afspraak_eind = new Date(rsv.ruimte_tot);
locatie_key = rsv.loc_key;
bez_afspraak_ruimte = rsv.ruimtenr;
bez_afspraak_contact_key = rsv.contact_key;
bez_afspraak_host_key = rsv.host_key;
bez_afspraak_tel = rsv.telefoon;
}
else
{
timeEindInitEmpty = true;
}
// Bepaal de gedetailleerdste plaats die mobiel bekend is of meegegeven.
var plaats_key = ruimte_key;
if (plaats_key == -1) plaats_key = verdieping_key;
if (plaats_key == -1) plaats_key = gebouw_key;
if (plaats_key == -1) plaats_key = locatie_key;
sql = "SELECT l.alg_locatie_code||"
+ "NVL2(g.alg_gebouw_code,'-'||g.alg_gebouw_code,'') ||"
+ "NVL2(g.alg_verdieping_code,'-'||g.alg_verdieping_code,'') ||"
+ "NVL2(g.alg_ruimte_nr,'-'||g.alg_ruimte_nr,'')||"
+ "NVL2(g.alg_terreinsector_code,'-'||g.alg_terreinsector_code,'')||' '||"
+ " alg_onroerendgoed_omschrijving plaats "
+ " FROM alg_v_allonrgoed_gegevens g"
+ ", alg_locatie l"
+ " WHERE g.alg_onroerendgoed_keys = " + plaats_key
+ " AND g.alg_locatie_key = l.alg_locatie_key";
var oRs = Oracle.Execute(sql);
var plaats_string = oRs("plaats").value;
// Nu moet de plaats opgegeven worden. We volgen hier het verplichte niveau van registratie vis_mandatory_alg_level
// Dat is blijkbaar vereist om een bezoeker zinvol aan te melden, lager is leuk maar daar belasten we de mobiele gebruiker
// niet mee. Voor onverhoopt lage verplichte niveaus moeten we wel een getrapte lijst bieden, je kunt niet zomaar alleen
// een lijst van alle ruimtes tonen om te kiezen.
// Het gaat altijd alleen om bezoekbare gebouwen (suggest-filtercode BEZ)
// LET OP: De werklocatie hoeft niet voor te komen in de lijst van bezoekbare gebouwen.
var requiredlevel = 2; // standaard locatie
var llabel = L("lcl_building");
var fnkey = "loc_key"; // fieldname
if (S("vis_afspraak_onrgoed_uses_keys") == 1)
{
switch (S("vis_mandatory_alg_level"))
// NIEUWE AFSPRAAK
// AFSPRAAK DATUM/TIJD
// defaults zetten
bez_afspraak_datum = new Date();
if (S("vis_t1_std") > 0)
{
case "L" : requiredlevel = 2; break;
case "G" : requiredlevel = 3; break;
case "V" : requiredlevel = 4; break;
case "R" : requiredlevel = 5; break;
if (urole != 'bo') // alleen backo default 'nu', anderen vis_t1_std
{
bez_afspraak_datum.setHours(Math.floor(S("vis_t1_std")));
bez_afspraak_datum.setMinutes((S("vis_t1_std") - Math.floor(S("vis_t1_std"))) * 60, 0, 0);
}
}
}
// We weten nu welk niveau we moeten kiezen, maak de UI
switch (requiredlevel)
{
else
{ // S("vis_t1_std") < 0
if (urole != 'bo')
{
timeBeginInitEmpty = true;
bez_afspraak_datum.setHours(0);
bez_afspraak_datum.setMinutes(0, 0, 0);
}
}
bez_afspraak_eind = new Date(bez_afspraak_datum);
if (S("vis_t2_std") > 0)
{
bez_afspraak_eind.setHours(Math.floor(S("vis_t2_std")));
bez_afspraak_eind.setMinutes((S("vis_t2_std") - Math.floor(S("vis_t2_std"))) * 60);
}
else
{
timeEindInitEmpty = true;
}
// Bepaal de gedetailleerdste plaats die mobiel bekend is of meegegeven.
var plaats_key = ruimte_key;
if (plaats_key == -1) plaats_key = verdieping_key;
if (plaats_key == -1) plaats_key = gebouw_key;
if (plaats_key == -1) plaats_key = locatie_key;
sql = "SELECT l.alg_locatie_code||"
+ "NVL2(g.alg_gebouw_code,'-'||g.alg_gebouw_code,'') ||"
+ "NVL2(g.alg_verdieping_code,'-'||g.alg_verdieping_code,'') ||"
+ "NVL2(g.alg_ruimte_nr,'-'||g.alg_ruimte_nr,'')||"
+ "NVL2(g.alg_terreinsector_code,'-'||g.alg_terreinsector_code,'')||' '||"
+ " alg_onroerendgoed_omschrijving plaats "
+ " FROM alg_v_allonrgoed_gegevens g"
+ ", alg_locatie l"
+ " WHERE g.alg_onroerendgoed_keys = " + plaats_key
+ " AND g.alg_locatie_key = l.alg_locatie_key";
var oRs = Oracle.Execute(sql);
var plaats_string = oRs("plaats").value;
// Nu moet de plaats opgegeven worden. We volgen hier het verplichte niveau van registratie vis_mandatory_alg_level
// Dat is blijkbaar vereist om een bezoeker zinvol aan te melden, lager is leuk maar daar belasten we de mobiele gebruiker
// niet mee. Voor onverhoopt lage verplichte niveaus moeten we wel een getrapte lijst bieden, je kunt niet zomaar alleen
// een lijst van alle ruimtes tonen om te kiezen.
// Het gaat altijd alleen om bezoekbare gebouwen (suggest-filtercode BEZ)
// LET OP: De werklocatie hoeft niet voor te komen in de lijst van bezoekbare gebouwen.
var requiredlevel = 2; // standaard locatie
var llabel = L("lcl_building");
var fnkey = "loc_key"; // fieldname
if (S("vis_afspraak_onrgoed_uses_keys") == 1)
{
switch (S("vis_mandatory_alg_level"))
{
case "L" : requiredlevel = 2; break;
case "G" : requiredlevel = 3; break;
case "V" : requiredlevel = 4; break;
case "R" : requiredlevel = 5; break;
}
}
// We weten nu welk niveau we moeten kiezen, maak de UI
switch (requiredlevel)
{
case 2:
llabel = L("lcl_location");
linitkey = locatie_key;
@@ -266,15 +371,17 @@ else
case 4: // Lager komt later als nodig.
case 5: // Lager komt later als nodig.
break;
}
// Maak van host_key een naam.
if ((S("vis_afspraak_host_uses_keys") & 1) == 0)
{
bez_afspraak_host = user.naam();
bez_afspraak_tel = user.prs_perslid_telefoonnr();
}
// Maak van host_key een naam.
if ((S("vis_afspraak_host_uses_keys") & 1) == 0)
{
bez_afspraak_host = user.naam();
bez_afspraak_tel = user.prs_perslid_telefoonnr();
}
}
}
// Voor een bestaande afspraak worden alle bezoekers getoond en moet er 1 nieuwe bezoeker toegevoegd kunnen worden
// Voor een nieuwe afspraak moeten er x bezoekers ingevuld kunnen worden.
var empty_bez = (bez_bezoekers.length > 0 ? 1 : S("vis_default_number"));
@@ -303,8 +410,6 @@ oRs.Close();
// Waarden zijn bepaald
var subject = afs_key > -1 ? L("lcl_vis_appointment") + ' ' + afs_key : L("lcl_mobile_newafspraak");
%>
<html>
<head>
@@ -347,7 +452,10 @@ var subject = afs_key > -1 ? L("lcl_vis_appointment") + ' ' + afs_key : L("lcl_m
return false;
if (!validateForm("afspraak"))
return false;
$.post( $("form[name=afspraak]")[0].action
var submit_url = $("form[name=afspraak]")[0].action
+ (<%=rsv_ruimte_key%> != -1 ? "&rsv_ruimte_key=<%=rsv_ruimte_key%>" : "");
$.post( submit_url
, $("form[name=afspraak]").serialize()
, McltCallbackAndThen(afs_submit_callback)
, "json");
@@ -419,9 +527,9 @@ var subject = afs_key > -1 ? L("lcl_vis_appointment") + ' ' + afs_key : L("lcl_m
, maxPast : ((urole == "fe")? 0 : S("vis_afspraak_limiet"))
, maxFuture: ((urole == "fe" && S("vis_fe_afspraak_limiet") > 0)? S("vis_fe_afspraak_limiet") : S("vis_afspraak_limiet"))
, calendars: 1
, autoopen : (afs_key == -1)
, autoopen : (afs_key == -1 && rsv_ruimte_key == -1)
, initTimeEmpty: timeBeginInitEmpty
, initEmpty: (afs_key < 0 && urole != 'bo')
, initEmpty: (afs_key < 0 && urole != "bo" && rsv_ruimte_key == -1)
, timeField: true
, timeStep: S("vis_h") * 60
, startTime: S("vis_t1")
@@ -437,7 +545,7 @@ var subject = afs_key > -1 ? L("lcl_vis_appointment") + ' ' + afs_key : L("lcl_m
, maxPast : 0
, maxFuture: ((urole == "fe" && S("vis_fe_afspraak_limiet") > 0)? S("vis_fe_afspraak_limiet") : S("vis_afspraak_limiet"))
, initTimeEmpty: timeEindInitEmpty
, initEmpty: (afs_key < 0 && urole != 'bo')
, initEmpty: (afs_key < 0 && urole != "bo" && rsv_ruimte_key == -1)
, timeField: true
, timeStep: S("vis_h") * 60
, startTime: S("vis_t1")
@@ -450,7 +558,7 @@ var subject = afs_key > -1 ? L("lcl_vis_appointment") + ' ' + afs_key : L("lcl_m
);
//
// Waar is de afspraak.
if (afs_key == -1)
if (afs_key == -1 && rsv_ruimte_key == -1)
{ // Nieuw, maar deze velden kunnen we zelf verzinnen
switch (requiredlevel)
{
@@ -489,10 +597,12 @@ var subject = afs_key > -1 ? L("lcl_vis_appointment") + ' ' + afs_key : L("lcl_m
}
else
{
%> <input type="hidden" name="locatiekey" id="locatiekey" value="<%=locatie_key%>">
<input type="hidden" name="gebouwkey" id="gebouwkey" value="<%=gebouw_key%>">
<input type="hidden" name="verdiepingkey" id="verdiepingkey" value="<%=verdieping_key%>">
<input type="hidden" name="ruimtekey" id="ruimtekey" value="<%=ruimte_key%>">
%>
<input type="hidden" name="rsv_ruimte_key" id="rsv_ruimte_key" value="<%=rsv_ruimte_key%>">
<input type="hidden" name="locatiekey" id="locatiekey" value="<%=locatie_key%>">
<input type="hidden" name="gebouwkey" id="gebouwkey" value="<%=gebouw_key%>">
<input type="hidden" name="verdiepingkey" id="verdiepingkey" value="<%=verdieping_key%>">
<input type="hidden" name="ruimtekey" id="ruimtekey" value="<%=ruimte_key%>">
<%
ROFIELD("fld", L("lcl_room"), bez_afspraak_ruimte);
}

View File

@@ -244,6 +244,12 @@ if (rsv.restype == "CV")
}
}
function res_vis()
{
var purl = "?rsv_ruimte_key=<%=rsv_ruimte_key%>";
window.location.href = "afspraak.asp" + purl;
}
// Process de ruimte-data die van de Ajax terugkomt.
function process_res_ruimte_info(data)
{
@@ -447,10 +453,10 @@ if (rsv.restype == "CV")
}
CONTROLGROUP_START()
if (this_res.canChange || rsv_ruimte_key == -1)
{
BUTTON((rsv_ruimte_key > -1 ? L("lcl_submit") : L("lcl_newsubmit")), {click: "res_submit()", dataicon: "refresh"});
}
if (this_res.canChange || rsv_ruimte_key == -1)
BUTTON((rsv_ruimte_key > -1 ? L("lcl_submit") : L("lcl_newsubmit")), {click: "res_submit()", dataicon: "refresh"});
if (this_res.canChange && rsv_ruimte_key > -1)
BUTTON(L("lcl_mobile_bezoek"), {click: "res_vis()", dataicon: "grid"});
CONTROLGROUP_END()
IFACE.FORM_END();
%>

View File

@@ -54,11 +54,6 @@ var oRs = Oracle.Execute(sql);
var autlevel = oRs("writelevel").Value; // Pas op: kan ook '0' zijn (regio)
oRs.Close();
//var reado_rsv_ruimte = false;
//var fe_lastminute = false;
// restype niet van belang?
var subject = L("lcl_mobile_newreservering");
var curPage = 0;
if (rsv_ruimte_key == -1)