Files
Facilitor/APPL/PDA/reservering.asp
Jos Groot Lipman b30badcae2 Merge 2025.2 Gold A patches
svn path=/Website/trunk/; revision=69758
2025-07-14 08:13:36 +00:00

1221 lines
56 KiB
Plaintext
Raw Blame History

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: pda/reservering.asp
Description: Add/wijzig reservering (Mobile version)
Parameters: rsv_ruimte_key voor bestaande deelreservering
rsv_ruimte_key=-1 voor nieuwe (deel)reservering
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="../PRS/prs.inc" -->
<!-- #include file="../RES/res.inc" -->
<!-- #include file="../Shared/getkenmerksql.inc" -->
<!-- #include file="../Shared/discx3d.inc" -->
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="../mld/mld.inc" -->
<!-- #include file="../RES/res_plan_room_v2.inc" -->
<!-- #include file="../RES/res_flexkenmerk.inc" -->
<%
FCLTHeader.Requires({ js: ["jquery.timepicker-table.js"],
css: ["timePicker-table.css"] });
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1); // -1 betekent nieuwe
var qrc = getQParamInt("qrc", 0) != 0;
// MGE: Toevoegen kan tot op heden nog niet
// Mogelijke parameters voor toevoegen only
// Deze zijn niet waarschijnlijk meegegeven, maar de defaultwaarde is ook al handig
//var locatie_key = getQParamInt("locatie_key", user.alg_locatie_key({withcurrent: true})); // Locatie
//var gebouw_key = getQParamInt("gebouw_key", user.alg_gebouw_key({withcurrent: true})); // Gebouw, kan -1 zijn, dan niet gebruiken
//var verdieping_key = getQParamInt("verdieping_key", user.alg_verdieping_key({withcurrent: true}));
//var ruimte_key = getQParamInt("ruimte_key", user.alg_ruimte_key({withcurrent: true}));
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 IN ('WEB_RESUSE')"
+ " 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 afs_key = -1;
if (rsv_ruimte_key > -1)
{
// BESTAANDE DEELRESERVERING
res.res_set_dialect(rsv_ruimte_key);
var this_res = res.func_enabled(rsv_ruimte_key); // Wat heb ik zoal aan rechten op deze specifieke reservering
user.auth_required_or_abort(this_res.canReadAny);
sql = "SELECT * FROM res_rsv_ruimte WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRsR = Oracle.Execute(sql);
var rsv = { opstel_key: oRsR("res_ruimte_opstel_key").Value
, account: oRsR("prs_kostenplaats_key").Value || -1
, bezoekers: oRsR("res_rsv_ruimte_bezoekers").Value || 0
, status_fo: oRsR("res_status_fo_key").Value
, status_flag: oRsR("res_rsv_ruimte_flag").value || 0
, act_key: oRsR("res_activiteit_key").Value
, reservering_key: oRsR("res_reservering_key").Value
, ruimte_key: rsv_ruimte_key
, ruimte_volgnr: oRsR("res_rsv_ruimte_volgnr").Value
, ruimte_van: new Date(oRsR("res_rsv_ruimte_van").Value)
, ruimte_tot: new Date(oRsR("res_rsv_ruimte_tot").Value)
, omschrijving: oRsR("res_rsv_ruimte_omschrijving").Value
, opmerking: oRsR("res_rsv_ruimte_opmerking").Value
, extern_nr: oRsR("res_rsv_ruimte_externnr").Value
, contact_key: oRsR("res_rsv_ruimte_contact_key").Value
, host_key: oRsR("res_rsv_ruimte_host_key").Value
, verwijderd: true
, artikel_key: -1
, mld_opdr_key: oRsR("mld_opdr_key").Value
};
rsv.actueel = getActual(rsv.ruimte_van, rsv.ruimte_tot);
oRsR.Close();
function withinTimeRange(_date) {
var auth = user.checkAutorisation("WEB_BEZBOF", true);
if (S("bez_change_range") > 0 && auth && auth.ALGwritelevel < 9)
{
var dateFrom = new Date(_date);
dateFrom.setMinutes(dateFrom.getMinutes() - S("bez_change_range"));
var dateTo = new Date(_date);
dateTo.setMinutes(dateTo.getMinutes() + S("bez_change_range"));
return (dateFrom <= new Date() && dateTo > new Date());
}
else
{
return false;
}
}
if (rsv.extern_nr && !withinTimeRange(rsv.ruimte_van)) {
this_res.canChange = false;
}
// Toch eens een functie res.ruimte_info() bouwen voor dit soort zaken (deze lijkt op een deel van res.res_rsv_ruime_info)
var sql2 = "SELECT COALESCE (opstelalg.res_ruimte_nr, ruimte_geg.alg_ruimte_aanduiding, alg_opdr.alg_ruimte_aanduiding) res_ruimte_nr"
+ " , opstelalg.res_ruimte_key"
+ " , ruimte_geg.alg_ruimte_key"
+ " , ruimte_geg.alg_verdieping_key"
+ " , ruimte_geg.alg_gebouw_key"
+ " , ruimte_geg.alg_locatie_key"
+ " , rsa.res_srtactiviteit_metomschr"
+ " , rsa.res_srtactiviteit_metopmerk"
+ " , rsa.res_srtactiviteit_metaantal"
+ " , ra.res_activiteit_omsverplicht"
+ " , ra.res_activiteit_aantalverplicht"
+ " , ra.res_activiteit_meteindtijd"
+ " , ra.res_activiteit_intervals"
+ " , " + lcl.xsqla("ra.res_activiteit_omschrijving", "ra.res_activiteit_key")
+ " , COALESCE( LEAST( COALESCE(opstelalg.res_ruimte_limiet, ra.res_activiteit_limiet)"
+ " , COALESCE(ra.res_activiteit_limiet, opstelalg.res_ruimte_limiet)"
+ " )"
+ " , " + S("res_reservering_limiet")
+ " ) act_limiet"
+ " , COALESCE( LEAST( COALESCE(opstelalg.res_ruimte_limiet, ra.res_activiteit_limiet_fe)"
+ " , COALESCE(ra.res_activiteit_limiet_fe, opstelalg.res_ruimte_limiet)"
+ " )"
+ " , " + S("res_fe_reservering_limiet")
+ " ) act_limiet_fe"
+ " , DECODE(rrr.res_rsv_ruimte_verwijder, NULL, 0, 1) verwijderd"
+ " 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"
+ " , rr.res_ruimte_limiet"
+ " , 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"
+ " , rr.res_ruimte_limiet"
+ " ) opstelalg"
+ " , (SELECT o.mld_opdr_key"
+ " , g.alg_ruimte_aanduiding"
+ " FROM mld_opdr o"
+ " , mld_melding m"
+ " , alg_v_ruimte_gegevens g"
+ " WHERE o.mld_melding_key = m.mld_melding_key"
+ " AND m.mld_alg_onroerendgoed_keys = g.alg_ruimte_key"
+ " ) alg_opdr"
+ " WHERE 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 COALESCE(rrr.alg_ruimte_key, opstelalg.alg_ruimte_key) = ruimte_geg.alg_ruimte_key(+)"
+ " AND rrr.mld_opdr_key = alg_opdr.mld_opdr_key(+)"
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs2 = Oracle.Execute(sql2);
if (!oRs2.eof)
{
rsv.ruimtenr = oRs2("res_ruimte_nr").Value;
rsv.ruimtekey = oRs2("res_ruimte_key").Value;
rsv.alg_ruimtekey = oRs2("alg_ruimte_key").Value;
rsv.flr_key = oRs2("alg_verdieping_key").Value;
rsv.bld_key = oRs2("alg_gebouw_key").Value;
rsv.loc_key = oRs2("alg_locatie_key").Value;
rsv.toonOms = oRs2("res_srtactiviteit_metomschr").value || 0;
rsv.toonOpm = oRs2("res_srtactiviteit_metopmerk").value || 0;
rsv.toonBez = oRs2("res_srtactiviteit_metaantal").value || 0;
rsv.reqOms = oRs2("res_activiteit_omsverplicht").value || 0;
rsv.reqBez = oRs2("res_activiteit_aantalverplicht").value || 0;
rsv.activity = oRs2("res_activiteit_omschrijving").value;
rsv.meteind = oRs2("res_activiteit_meteindtijd").Value;
rsv.act_intervals = oRs2("res_activiteit_intervals").Value;
rsv.eff_act_limiet = oRs2("act_limiet").value;
rsv.eff_act_limiet_fe = oRs2("act_limiet_fe").value;
rsv.verwijderd = (oRs2("verwijderd").value==1 ? true : false);
}
oRs2.Close();
this_res.canDelete = this_res.canDelete && !rsv.verwijderd; // Geen delete knop als de reservering al verwijderd is.
if (restype == "R")
{
// Vullen client-side sel_room variabele en invullen configurations
var rri = res.res_ruimte_info(rsv.res_ruimte_key);
rri.init = true;
var rvi = res.res_voorzieningen_info(rsv_ruimte_key);
rri.kpnverplicht = (rri.kpnverplicht || rvi.kpnverplicht)? 1 : 0; // Voorzieningen verplichtheid meenemen met ruimte verplichtheid.
if ((rsv.kpnverplicht == 2) && rri.kpnverplicht)
{ // Kostenplaats is niet verplicht (Niet tonen(2)) via srt activiteit maar wel via de discipline. Dan moet kostenplaats veld toch getoond worden.
rsv.kpnverplicht = 0;
}
}
else
{
var rvi = res.res_voorzieningen_info(rsv_ruimte_key);
}
// Bestaat er al een afspraak bij deze reservering.
var sql3 = "SELECT bez_afspraak_key"
+ " FROM bez_afspraak"
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs3 = Oracle.Execute(sql3);
if (!oRs3.eof)
afs_key = oRs3("bez_afspraak_key").Value;
oRs3.Close();
// Heeft het gebouw een afwijkende kalender?
rsv.vrije_dagen = {id: ""};
var vrije_dagen_alt = [];
var sql4 = "SELECT v.mld_vrije_dagen_id"
+ " , v.mld_vrije_dagen_datum"
+ " FROM mld_vrije_dagen v"
+ " , alg_gebouw g"
+ " WHERE v.mld_vrije_dagen_id = COALESCE(g.mld_vrije_dagen_id, 'Default')"
+ " AND g.alg_gebouw_key = " + rsv.bld_key;
var oRs4 = Oracle.Execute(sql4);
while (!oRs4.eof)
{
rsv.vrije_dagen.id = oRs4("mld_vrije_dagen_id").Value;
vrije_dagen_alt.push((new Date(oRs4("mld_vrije_dagen_datum").Value)).getTime());
oRs4.MoveNext();
}
oRs4.Close();
if (vrije_dagen_alt.length && rsv.vrije_dagen.id != "Default")
rsv.vrije_dagen.alt = vrije_dagen_alt;
var bld_vrije_dagen = (rsv && rsv.vrije_dagen ? rsv.vrije_dagen : {id: ""});
}
else
{
this_res = {};
// NIEUWE RESERVERING
var restype = getQParamSafe("restype", "");
// Verplicht:
var res_van = getQParamDate("date_from", null);
var res_tot = getQParamDate("date_to", null);
// 1 van beide
var ruimtekey = getQParamInt("res_ruimte_key", null);
var alg_ruimtekey = getQParamInt("roo_key", null);
var res_ruimte_limiet = "NULL";
if (!res_van || (!ruimtekey && !alg_ruimtekey && restype != "C"))
{
Server.Transfer("reservering_new.asp"); // Ga maar eerst datum kiezen
}
else if (alg_ruimtekey) // Voorziening reservering
{
var rsv = { loc_key: getQParamInt("loc_key", -1)
, bld_key: getQParamInt("bld_key", -1)
, flr_key: getQParamInt("flr_key", -1)
, act_key: getQParamInt("act_key", -1)
, ab_mode: getQParamInt("cvab", -1)
, res_deel_key: getQParamInt("res_deel", -1)
, artikel_key: -1
, kostenklant: S("kosten_klant_default") == 1
, account: -1
, status_fo: S("res_default_fo_status_key")
, alg_ruimtekey : alg_ruimtekey
, ruimte_van: res_van
, ruimte_tot: res_tot
, bezoekers: getQParamInt("bez_cnt", 0)
, verwijderd: false
};
}
else if (res_van && restype == "C") // Catering reservering
{
var rsv = { loc_key: getQParamInt("loc_key", -1)
, act_key: getQParamInt("act_key", -1)
, ab_mode: getQParamInt("cvab", -1)
, artikel_key: getQParamInt("res_artikel", -1)
, kostenklant: S("kosten_klant_default") == 1
, account: -1
, status_fo: S("res_default_fo_status_key")
, ruimte_van: res_van
, ruimte_tot: res_tot
, bezoekers: getQParamInt("bez_cnt", 0)
, verwijderd: false
};
if (rsv.kostenklant)
{
if (S("prs_dep_default_kpn") > 0) // dat is strikt genomen S("prs_dep_default_kpn") & 5) > 0
{
rsv.account = user.prs_kostenplaats_key();
}
}
var sql = "SELECT DISTINCT so.alg_onrgoed_key"
+ " FROM res_activiteitdiscipline ad"
+ " , res_srtartikel_onrgoed so"
+ " , alg_v_allonroerendgoed ao"
+ " WHERE ad.res_discipline_key = so.res_discipline_key"
+ " AND ao.alg_ruimte_key = so.alg_onrgoed_key"
+ " AND ao.alg_type = so.alg_onrgoed_niveau"
+ " AND ad.res_activiteit_key = " + rsv.act_key
+ " AND ao.alg_locatie_key = " + rsv.loc_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
rsv.alg_ruimtekey = oRs("alg_onrgoed_key").Value;
alg_ruimtekey = rsv.alg_ruimtekey;
oRs.Close();
}
else // Ruimte reservering
{
var sql = "SELECT alg_ruimte_key FROM res_alg_ruimte WHERE res_ruimte_key = " + ruimtekey;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
alg_ruimtekey = oRs("alg_ruimte_key").Value;
oRs.Close();
var rri = res.res_ruimte_info(ruimtekey);
var rsv = { loc_key: getQParamInt("loc_key", -1)
, act_key: getQParamInt("act_key", -1)
, kostenklant: S("kosten_klant_default") == 1
, account: -1
, status_fo: rri.status_fo_key > 0? rri.status_fo_key : S("res_default_fo_status_key")
, ruimtekey: ruimtekey
, alg_ruimtekey : alg_ruimtekey
, ruimte_van: res_van
, ruimte_tot: res_tot
, bezoekers: getQParamInt("bez_cnt", 0)
, verwijderd: false
, artikel_key: -1
};
res_ruimte_limiet = rri.limiet;
if (rsv.kostenklant)
{
if (S("prs_dep_default_kpn") > 0) // dat is strikt genomen S("prs_dep_default_kpn") & 5) > 0
rsv.account = user.prs_kostenplaats_key();
if (rsv.account == -1)
{
var host_info = prs.prs_perslid(user_key, {withWP: true});
rsv.account = host_info.kostenplaats_key;
}
}
if (rsv.act_key < 0) // Toevallig maar <20><>n activiteit mogelijk voor onze ruimte? Pak gewoon de eerste
{
sql = "select res_activiteit_key"
+ " from res_activiteitdiscipline rad,"
+ " res_ruimte rr"
+ " where rr.res_ruimte_key = " + rsv.ruimtekey
+ " and rad.res_discipline_key = rr.res_discipline_key";
var oRs = Oracle.Execute(sql);
rsv.act_key = oRs("res_activiteit_key").Value;
oRs.Close()
}
// Als het aantal bezoekers is ingevuld moeten deze in de opstelling passen,
// maar neem bijvoorkeur de default opstelling.
// Neem de default opstelling altijd als het aantal bezoekers niet bekend is.
var sql = "SELECT rr.res_ruimte_nr"
+ " , rr.res_ruimte_key"
+ " , rro.res_opstelling_key"
+ " , rro.res_ruimte_opstel_key"
+ " , rro.res_ruimte_opstel_default"
+ " , rro.res_ruimte_opstel_bezoekers"
+ " FROM res_ruimte_opstelling rro"
+ " , res_ruimte rr"
+ " WHERE rro.res_ruimte_key = rr.res_ruimte_key"
+ " AND rro.res_ruimte_key = " + rsv.ruimtekey
+ (rsv.bezoekers > 0 ? " AND res_ruimte_opstel_bezoekers >= " + rsv.bezoekers : "")
+ " ORDER BY res_ruimte_opstel_default DESC NULLS LAST"
+ " , res_ruimte_opstel_bezoekers";
var oRs = Oracle.Execute(sql);
rsv.ruimtenr = oRs("res_ruimte_nr").value;
rsv.opstel_key = oRs("res_ruimte_opstel_key").value;
oRs.Close();
//
}
var sql = "SELECT rsa.res_srtactiviteit_metomschr"
+ " , rsa.res_srtactiviteit_metopmerk"
+ " , rsa.res_srtactiviteit_metaantal"
+ " , rsa.res_srtactiviteit_kpnverplicht"
+ " , ra.res_activiteit_omsverplicht"
+ " , 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"
+ " , " + lcl.xsqla("ra.res_activiteit_omschrijving", "ra.res_activiteit_key")
+ " FROM res_srtactiviteit rsa"
+ " , res_activiteit ra"
+ " WHERE ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key"
+ " AND ra.res_activiteit_key = " + rsv.act_key;
var oRs = Oracle.Execute(sql);
rsv.toonOms = oRs("res_srtactiviteit_metomschr").value || 0;
rsv.toonOpm = oRs("res_srtactiviteit_metopmerk").value || 0;
rsv.toonBez = oRs("res_srtactiviteit_metaantal").value || 0;
rsv.reqOms = oRs("res_activiteit_omsverplicht").value || 0;
rsv.kpnverplicht = oRs("res_srtactiviteit_kpnverplicht").Value;
rsv.meteind = oRs("res_activiteit_meteindtijd").Value;
rsv.activity = oRs("res_activiteit_omschrijving").value;
rsv.eff_act_limiet = oRs("act_limiet").value;
rsv.eff_act_limiet_fe = oRs("act_limiet_fe").value;
rsv.cvab_mode = oRs("res_activiteit_cvab_mode").Value;
oRs.Close();
rsv.flex_defaults = {};
var flex_defaults = getQParam("flex_defaults", "").split("&"); //bsn=12345678&plaats=Enschede&postcode=1234AB
for (var i in flex_defaults)
{
var nm = flex_defaults[i].split("=")[0].toLowerCase();
var val = flex_defaults[i].split("=")[1];
rsv.flex_defaults[nm] = val;
}
// Heeft het gebouw een afwijkende kalender?
var bld_vrije_dagen = (rri && rri.vrije_dagen ? rri.vrije_dagen : {id: ""});}
var subject = rsv_ruimte_key > -1 ? rsv.reservering_key + "/" + rsv.ruimte_volgnr + " " + rsv.activity
: L("lcl_mobile_newreservering");
// last_minute mag frontend niet meer de zaal of tijdstippen wijzigen
// (noch de catering zelf maar dat regelt res_show_objcat.asp)
var fe_lastminute = false;
if (rsv.opstel_key)
rsv.restype = "R";
else
rsv.restype = "CV";
if (rsv.restype == "CV")
{
if (rsv_ruimte_key > 0) // Existing reservation
{
if (rsv.ruimte_van < this_res.earliest_expire_change)
last_minute = true;
else
last_minute = false;
fe_lastminute = (last_minute); // urole == "fe" geldt voor mobile al.
}
else // Non-existing CV-reservation
{
var newCVRes = true;
}
} // restype = "CV"
// mag de gebruiker bezoekers toevoegen?
var xfunc = user.func_enabled2("BEZ", {prs_key: user_key, isOptional: true});
var canHaveBez = xfunc.canWrite("WEB_BEZUSE") || xfunc.canWrite("WEB_BEZFOF");
var intervals = { begin: [], end: [] };
if (rsv.act_intervals)
{
var bloktijden = JSON.parse(rsv.act_intervals);
for (var i = 0; i < bloktijden.length; i++ )
{
intervals.begin.push(bloktijden[i].begin);
intervals.end.push(bloktijden[i].end);
}
}
function getActual(ruimte_van, ruimte_tot)
{
var actueel;
var res_van = (new Date(ruimte_van)).setHours(0,0,0,0);
var res_tot = (new Date(ruimte_tot)).setHours(0,0,0,0);
var res_nu = (new Date()).setHours(0,0,0,0);
if (res_nu >= res_van && res_nu <= res_tot) // Tijdens dag van reservering
actueel = 1;
else if (res_nu < res_van) // Voor dag van reservering
actueel = 2;
else //(if (res_nu > res_tot)) // Na dag van reservering
actueel = 0;
return actueel;
}
function getImageUrl(verdieping_key, ruimte_key, ins_deel_key, zoom)
{
var sqlv = "SELECT 1"
+ " FROM cad_tekening ct"
+ " WHERE ct.cad_tekening_verwijder IS NULL"
+ " AND ct.alg_verdieping_key = " + verdieping_key;
var oRs = Oracle.Execute(sqlv);
if (oRs.Eof)
{
oRs.Close();
return "";
}
oRs.Close();
var imgurl = "../cad/mySlnk2IMG.asp?mode=0"
+ "&scenario_key=0"
+ "&imageonly=1" // er komt geen &asMap dus temp hoeft niet bewaard te worden
+ "&vkey=" + verdieping_key
+ "&paperColor=" + S("fg_paperColor")
+ "&labelpos=" + S("fg_labelposition")
+ (S("fg_mobile_label") > 0
? "&label=" + S("fg_mobile_label")
: "");
if (ins_deel_key > 0)
{
var discArray = [];
var oRs = Oracle.Execute("SELECT ins_discipline_key" +
" FROM ins_deel" +
" WHERE ins_deel_key = " + ins_deel_key);
discArray.push(oRs("ins_discipline_key").Value); // zou dubbel kunnen zijn
oRs.Close();
// mobiel ook?
//if (S("fg_publiclayers").length)
// discArray = discArray.concat(S("fg_publiclayers"));
imgurl += "&ins_key=" + ins_deel_key + "&discs=" + discArray.join(",");
}
else if (ruimte_key > 0)
{
imgurl += "&highlight=" + ruimte_key;
}
// iphone7 resolution as reference
var sizeX = 1334;
var sizeY = 750;
// set image size to zoom factor
sizeX = 1920 / 2 * zoom;
sizeY = 1080 / 2 * zoom;
imgurl += "&sizeX=" + (1*sizeX);
imgurl += "&sizeY=" + (1*sizeY);
return imgurl;
}
function showPlan(actueel, rsv, ins_deel_key)
{
if (actueel)
{
var zoom = 2;
var ruimte_key = (rsv.alg_ruimtekey ? rsv.alg_ruimtekey : rsv.ruimtekey);
var imgurl = getImageUrl(rsv.flr_key, ruimte_key, ins_deel_key, zoom);
if (!imgurl)
return;
if (rsv.actueel == 2)
{
Response.Write("</br>");
}
Response.Write("<div class='mobplan'>");
Response.Write(" <img alt='" + L("lcl_room_cad") + "' src='" + safe.htmlattr(imgurl) + "'>");
Response.Write("</div>");
}
}
%>
<html>
<head>
<% FCLTMHeader.Generate({title: subject });
if (!rsv.verwijderd) // geen script nodig als reservering verwijderd is.
{
%>
<script type="text/javascript">
var bld_calendar = <%=JSON.stringify(bld_vrije_dagen)%>;
if (bld_calendar && bld_calendar.id != "Default" && bld_calendar.alt.length > 0)
{
mld_vrije_dagen_alt = bld_calendar.alt;
}
function windowLocation(url)
{ // iOS fix to force refresh after back(), otherwise the date-from is messed up
<%
var agent = "" + Request.ServerVariables("HTTP_USER_AGENT");
// Try to find out with some certainty that it is an Ios device
var acknowledgeIos = ((agent.indexOf("Opera Mini") != -1 || agent.indexOf("iPhone") != -1) ? "iOS" : "");
%>
if ("<%=acknowledgeIos%>" == "iOS")
{
setTimeout(function() { location.reload(); }, 250);
}
window.location.href = url;
}
async function res_submit()
{
if (!await validateForm("res"))
return false;
if (<%=S("res_247organisation")%> == 0)
{
var startDate = new Date(parseInt($("#date_from").val()));
var isHoliday = cal_isVrijeDag(startDate) || cal_isWeekend(startDate);
FcltMgr.confirm( "<%=L("lcl_holiday")%>"
, { autoconfirm: !isHoliday
, fncancel: function() { return false; }
}
, function() { res_submit_post(); }
);
}
else
{
res_submit_post();
}
}
function res_submit_post()
{
$.post( $("form[name=res]")[0].action
, $("form[name=res]").serialize()
, McltCallbackAndThenAlways(res_submit_callback)
, "json");
return true;
}
function res_submit_callback(json)
{ // Alleen nog de mogelijk om tijdstippen en zaal aan te passen.
// Nog geen nieuwe reservering aanmaken en qr code.
if (json.rsv_ruimte_key > 0)
{
if ("<%=restype%>" == "C")
{ // Verder button geklikt (=opslaan nieuwe reservering voor catering).
// Ga gelijk door naar het scherm Catering.
var url = "<%=rooturl%>/appl/pda/catering.asp?urole=fe&isnew=1"
+ "&rsv_ruimte_key="+json.rsv_ruimte_key
+ (<%=rsv.artikel_key%> > -1 ? "&artikel_key=<%=rsv.artikel_key%>" : "");
window.location.href = url;
}
else
{
if (json.isnew)
{ // Registreer button geklikt. Er hoeft niet gerefreshed te worden.
// Er kan direct weer gewijzigd worden of toevoegen cateing/bezoekers.
jqToast(L("lcl_res_is_resnew_nr").format(json.reservering_key+"/"+json.reservering_volgnr));
window.location.href = "<%=rooturl%>/appl/pda/reservering.asp"+ "?rsv_ruimte_key="+json.rsv_ruimte_key;
}
else
{ // Opslaan en terug naar Home.
jqToast(L("lcl_mobile_saved"));
McltCallbackHome(json);
}
}
}
};
function res_delete()
{
if (confirm(L("lcl_res_confirm_delete_afspraak")))
{
var data = {};
<% protectRequest.dataToken("data"); %>
$.post("<%=rooturl%>/appl/res/res_delete_save.asp?rsv_ruimte_key=<%=rsv_ruimte_key%>",
data,
McltCallbackHome, // Op deze manier in ieder geval een refresh
"json");
}
}
async function res_vis()
{
if (!await validateForm("res"))
return false;
$.post( $("form[name=res]")[0].action
, $("form[name=res]").serialize()
, McltCallbackAndThenAlways(res_vis_callback)
, "json");
return false;
}
function res_vis_callback(json)
{
<% // Direct door naar bezoekers toevoegen als er al een afspraak bij deze reservering bestaat.
var purl = "rsv_ruimte_key="+rsv_ruimte_key;
if (afs_key != -1)
{
purl = rooturl+"/appl/pda/afspraak.asp?" + purl;
}
else
{
purl += "&afs_key=" + afs_key;
purl = rooturl+"/appl/pda/bezoeker.asp?urole=fe&" + purl;
}
%>
windowLocation("<%=purl%>"); // iOS fix to force refresh after back()
}
async function res_cat()
{
// Eerst wijzigingen in de reservering opslaan
if (!await validateForm("res"))
return false;
$.post( $("form[name=res]")[0].action
, $("form[name=res]").serialize()
, McltCallbackAndThenAlways(res_cat_callback)
, "json");
return false;
}
function res_cat_callback(json)
{
purl = "<%=rooturl%>/appl/pda/catering.asp?urole=fe&rsv_ruimte_key=<%=rsv_ruimte_key%>";
windowLocation(purl); // iOS fix to force refresh after back()
}
function process_res_ruimte_info(data)
{ // Process de ruimte-data die van de Ajax terugkomt.
if (data.default_opstel_key > 0)
$("#ruimte_opstel").val(data.default_opstel_key);
else
$("#ruimte_opstel").val(data.RoomConfigs[0].ruimte_opstel_key);
}
function OnChangeRoom()
{
var pruimtekey = $("#rui_key").val();
$.getJSON("<%=rooturl%>/appl/res/get_res_info_ajax.asp?req_info=res_ruimte&res_ruimte_key=" + pruimtekey,
process_res_ruimte_info);
}
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);
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();
}
}
<% } %>
}
function onChangeStarttijd(event)
{
<% if (rsv_ruimte_key < 0) { /* alleen bij nieuwe */ %>
autosetEindtijd();
onChangeTijd();
<% } %>
if (event)
{
if (res_activiteit_intervals) {
setTimeout(function () {
// change the [time from date to] to sync with the changed [time from date from] (if out of sync)
var clicked = $("td.time.clicked", "#time_from_date_from + div.time-holder table");
var to_clicked = $("td.time.clicked", "#time_from_date_to + div.time-holder table");
if (clicked.length && (clicked.attr("name") != to_clicked.attr("name") || to_clicked.text() != $("#time_from_date_to").val()))
{
to_clicked = $("td.time[name=" + clicked.attr("name") + "]", "#time_from_date_to + div.time-holder table");
$("#time_from_date_to").val(to_clicked.text())
to_clicked.trigger("mousedown");
}
else
{
var index = intervals.begin.indexOf($("#time_from_date_from").val());
if (index != intervals.end.indexOf($("#time_from_date_to").val()))
{
$("#time_from_date_to").val(intervals.end[index]).change();
}
}
});
}
}
}
function onChangeTijd(event)
{
if (event)
{
if (res_activiteit_intervals) {
setTimeout(function () {
// change the [time from date from] to sync with the changed [time from date to] (if out of sync)
var clicked = $("td.time.clicked", "#time_from_date_to + div.time-holder table");
var from_clicked = $("td.time.clicked", "#time_from_date_from + div.time-holder table");
if (clicked.length && (clicked.attr("name") != from_clicked.attr("name") || from_clicked.text() != $("#time_from_date_from").val()))
{
from_clicked = $("td.time[name=" + clicked.attr("name") + "]", "#time_from_date_from + div.time-holder table");
$("#time_from_date_from").val(from_clicked.text())
from_clicked.trigger("mousedown");
}
else
{
var index = intervals.end.indexOf($("#time_from_date_to").val());
if (index != intervals.begin.indexOf($("#time_from_date_from").val()))
{
$("#time_from_date_from").val(intervals.begin[index]).change();
}
}
});
}
}
}
function autosetEindtijd()
{
var res_duur = parseFloat($("#sel_activity")[0].getAttribute("res_activiteit_duur"))
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");
}
}
}
var res_activiteit_intervals = <%=rsv.act_intervals ? 1 : 0 %>;
</script>
<%
} // geen script nodig als reservering verwijderd is.
%>
</head>
<body>
<%
PAGE_START({id: "page-1-" + rsv_ruimte_key});
HEADER({title: subject, back:!qrc, home: !qrc });
CONTENT_START();
if (rsv.verwijderd)
{
BUTTON(L("lcl_res_is_resdel"), { icon: "fa-exclamation-triangle" });
}
else
{
%>
<form name="res" id="res" action="<%=rooturl%>/appl/res/res_edit_rsv_ruimte_save.asp?rsv_ruimte_key=<%=rsv_ruimte_key + (rsv.res_deel_key > 0 ? "&res_deel_key=" + rsv.res_deel_key : "")%>&urole=fe" method="post">
<input type="hidden" name="rsv_ruimte_key" value="<%=rsv_ruimte_key%>">
<input type="hidden" name="restype" id="restype" value="<%=rsv.restype%>">
<input type="hidden" name="sel_activity" id="sel_activity" value="<%=rsv.act_key%>">
<input type="hidden" name="status_fo" id="status_fo" value="<%=rsv.status_fo%>">
<% if (rsv.restype == "R")
{
%>
<input type="hidden" name="locatiekey" id="locatiekey" value="<%=rsv.loc_key%>">
<input type="hidden" name="ruimte_opstel" id="ruimte_opstel" value="<%=rsv.opstel_key%>">
<input type="hidden" name="ruimtekey" id="ruimtekey" value="<%=rsv.alg_ruimtekey%>">
<input type="hidden" name="has_kostenklant" id="has_kostenklant" value="<%=(rsv.kostenklant?"1":"0")%>">
<input type="hidden" name="kostenklant" id="kostenklant" value="<%=(rsv.kostenklant?"on":"")%>">
<input type="hidden" name="account" id="account" value="<%=rsv.account%>">
<% }
if (rsv_ruimte_key == -1)
{ // Nieuw. Datum en tijd heb je al in vorige schermen gekozen
BLOCK_START({collapsed: !newCVRes, title: rsv.activity });
if (newCVRes)
{
%>
<input type="hidden" name="locatiekey" id="locatiekey" value="<%=rsv.loc_key%>">
<input type="hidden" name="ruimtekey" id="ruimtekey" value="<%=rsv.alg_ruimtekey%>">
<input type="hidden" name="ab_mode" id="ab_mode" value="<%=rsv.ab_mode%>">
<input type="hidden" name="ab_mode_filtcode" id="ab_mode_filtcode" value="<%=(rsv.ab_mode & 1 ? "RESB" : "RESA")%>">
<%
if (restype == "C")
{
%>
<input type="hidden" name="has_kostenklant" id="has_kostenklant" value="<%=(rsv.kostenklant?"1":"0")%>">
<input type="hidden" name="kostenklant" id="kostenklant" value="<%=(rsv.kostenklant?"on":"")%>">
<input type="hidden" name="account" id="account" value="<%=rsv.account%>">
<%
}
// Voorzieningsreservering (ook catering)
sql_roo = "SELECT alg_plaatsaanduiding || ' (' || alg_onroerendgoed_omschrijving || ')' plaats"
+ " FROM alg_v_allonrgoed_gegevens"
+ " WHERE alg_type = 'R'"
+ " AND alg_onroerendgoed_keys = " + alg_ruimtekey;
var oRs_roo = Oracle.Execute(sql_roo);
ROFIELD("fld", (rsv.ab_mode & 1 ? L("lcl_res_bezorgen_fixed") : L("lcl_res_afhalen_fixed")), oRs_roo("plaats").Value);
oRs_roo.Close();
}
else
{
ROFIELD("fld", L("lcl_place") , rsv.ruimtenr.replace(/\n/,"<br>"));
}
var sameDay = toDateString(rsv.ruimte_van, true) == toDateString(rsv.ruimte_tot, true);
ROFIELD("fld", L("lcl_date"), toDateTimeString(rsv.ruimte_van)
+ ( restype == "C"
? ""
: " - " + (sameDay ? toTimeString(rsv.ruimte_tot) : toDateTimeString(rsv.ruimte_tot))
));
%>
<input type="hidden" name="person" id="person" value="<%=user_key%>">
<input type="hidden" name="personH" id="personH" value="<%=user_key%>">
<input type='hidden' name='date_from' id="date_from" value='<%=rsv.ruimte_van.getTime()%>'>
<input type='hidden' name='date_to' id="date_to" value='<%=rsv.ruimte_tot.getTime()%>'>
<%
if (restype == "C")
{
%>
<input type="hidden" name="has_kostenklant" id="has_kostenklant" value="<%=(rsv.kostenklant?"1":"0")%>">
<input type="hidden" name="kostenklant" id="kostenklant" value="<%=(rsv.kostenklant?"on":"")%>">
<%
FCLTkostenplaatsselector("account",
"sgAccount",
user_key,
{ label: L("lcl_res_inf_kostenklant"),
kostenplaatsKey: rsv.account,
filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initi<74>le waarde kan bij kostenplaatsen altijd.
urlAdd: [{ urlParam: "prs_key", field: "person" }],
required: (rsv.kpnverplicht == 1 || (rsv_ruimte_key > 0 && rvi.kpnverplicht))
});
}
if (rsv.toonBez)
{
if (rsv.bezoekers > 0)
{
%>
<input type="hidden" name="bezoekers" id="bezoekers" value="<%=rsv.bezoekers%>">
<%
}
ROFIELD("fld", L("lcl_visitors"), (rsv.bezoekers > 0? rsv.bezoekers : ""), {suppressEmpty: true});
}
BLOCK_END();
if (rsv.toonOms)
RWFIELD("descript", L("lcl_txt") , rsv.omschrijving, {pclass: (rsv.reqOms?"required":"") });
if (rsv.toonOpm)
RWFIELD("opmerk", L("lcl_remark") , rsv.opmerking, {multi:true});
}
else // Bestaand
{
showPlan(rsv.actueel==1, rsv);
%>
<input type="hidden" name="person" id="person" value="<%=user_key%>">
<input type="hidden" name="personH" id="personH" value="<%=user_key%>">
<%
if (rsv.restype == "CV" || fe_lastminute || !this_res.canChange)
{ // Voor "CV" reservering is de plaats niet aanpasbaar.
ROFIELD("fld", L("lcl_place") , rsv.ruimtenr.replace(/\n/,"<br>"));
// gastheer en/of contact weergeven als dat mogelijk relevant is
// d.i. als ik het niet zelf ben
if (rsv.contact_key != user_key)
ROFIELD("fld", L("lcl_contact") , new Perslid(rsv.contact_key).naam());
if (rsv.host_key != user_key)
ROFIELD("fld", L("lcl_host") , new Perslid(rsv.host_key).naam());
}
else
{
var params = { loc_key_arr: rsv.loc_key > 0 ? [rsv.loc_key] : [],
init_res_ruimte_key: rsv.ruimtekey,
forSelectRoom: true,
vis: rsv.bezoekers > 0? rsv.bezoekers : null,
activiteit_key: rsv.act_key,
authparams: user.checkAutorisation("WEB_RESUSE", null, null, true), // urole == "fe" en pessimistisch.
ruimtecat: [],
res_van: rsv.ruimte_van,
res_tot: rsv.ruimte_tot
};
var sql = res.get_rooms_for_planbord(params);
sql = "SELECT * FROM (" + sql + ")"; // sql begint met "WITH...." en dan levert Oracle geen recordset op. Dan maar "SELECT *...." eromheen.
FCLTselector("rui_key",
sql,
{ initKey: rsv.ruimtekey,
label: L("lcl_place"),
onChange: "OnChangeRoom()",
mobile: true
});
}
if (fe_lastminute || !this_res.canChange)
{
ROFIELD("fld", L("lcl_from") , toDateTimeString(rsv.ruimte_van), { });
ROFIELD("fld", L("lcl_to") , toDateTimeString(rsv.ruimte_tot), {combine: true});
}
else
{
FCLTcalendar("date_from",
{ label : L("lcl_from"),
datum: rsv.ruimte_van,
maxPast: 0,
maxFuture: (rsv.eff_act_limiet_fe > 0 ? rsv.eff_act_limiet_fe : rsv.eff_act_limiet),
timeField: true,
timeStep: Math.round(S("res_h") * 60),
startTime: S("res_t1"),
endTime: S("res_t2"),
intervals: (rsv.act_intervals ? intervals.begin : []),
required: true,
volgnr: 1,
mobile: true,
onChange : "onChangeStarttijd();",
onChangeTime : "onChangeStarttijd(event);",
onChangeDate: "onChangeStartDate()"
}
);
FCLTcalendar("date_to",
{ label : L("lcl_to"),
datum: rsv.ruimte_tot,
maxFuture: (rsv.eff_act_limiet_fe > 0 ? rsv.eff_act_limiet_fe : rsv.eff_act_limiet),
timeField: true,
timeStep: Math.round(S("res_h") * 60),
startTime: S("res_t1"),
endTime: S("res_t2"),
intervals: (rsv.act_intervals ? intervals.end : []),
hidden : (rsv.meteind && restype == "R"), // Meerdaags ruimte ondersteunen we nog niet echt
trhidden : !rsv.meteind,
hidden : (rsv.restype == "R"), // Meerdaags ruimte ondersteunen we nog niet echt
required: true,
volgnr: 2,
mobile: true,
onChangeTime : '$("#time_from_date_to").css("color", "inherit"); onChangeTijd(event);'
}
);
}
if (restype != "O" && rsv.kpnverplicht < 2) // restype of rsv.restype ??
{
FCLTkostenplaatsselector("account",
"sgAccount",
user_key,
{ label: L("lcl_res_inf_kostenklant"),
kostenplaatsKey: rsv.account,
filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initi<74>le waarde kan bij kostenplaatsen altijd.
urlAdd: [{ urlParam: "prs_key", field: "person" }],
required: (rsv.kpnverplicht == 1 || (rsv_ruimte_key > 0 && rvi.kpnverplicht))
});
}
if (rsv.toonBez)
RWFIELD("bezoekers", L("lcl_visitors"), (rsv.bezoekers > 0? rsv.bezoekers : ""), {datatype:"number", pclass: (rsv.reqBez&&this_res.canChange?"required":"" ), readonly: !this_res.canChange });
if (rsv.toonOms)
RWFIELD("descript", L("lcl_txt") , rsv.omschrijving, {pclass: (rsv.reqOms&&this_res.canChange?"required":"") , readonly: !this_res.canChange });
if (rsv.toonOpm)
RWFIELD("opmerk", L("lcl_remark") , rsv.opmerking, {multi:true, readonly: !this_res.canChange});
// plus gastheer, activiteit, fostatus en wellicht nog meer
// beetje leuk in een block of 2
if (true || rsv.opstel_key == null)
{
// Voorzieningsreservering - indien leesrechten? TODO
sqld = "SELECT rd.res_deel_omschrijving, res_ins_deel_key"
+ " FROM res_rsv_deel rrd, res_deel rd"
+ " WHERE rrd.res_deel_key = rd.res_deel_key"
+ " AND rrd.bez_bezoekers_key IS NULL"
+ " AND rrd.res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRsd = Oracle.Execute(sqld);
var oRsdi = 0;
var ins_deel_key = -1;
while (!oRsd.eof)
{
if (oRsdi < 1)
BLOCK_START({collapsed: false, title: L("lcl_res_reserved_objects")});
ROFIELD("fld", "" , oRsd("res_deel_omschrijving").Value, {suppressEmpty: true});
ins_deel_key = oRsd("res_ins_deel_key").Value;
oRsdi += 1;
oRsd.moveNext();
}
oRsd.Close();
if (oRsdi != 1 || rsv.opstel_key) // als er een opstelling is tonen we uiteindelijk de res_ruimte
ins_deel_key = -1; // meerdere kunnen we niet grafisch tonen
// - indien leesrechten? TODO
sqla = "SELECT ra.res_artikel_omschrijving"
+ " , rra.res_rsv_artikel_aantal"
+ " , CASE WHEN (rra.res_rsv_artikel_prijs IS NULL AND ra.res_artikel_prijs_vast = 1)"
+ " THEN ra.res_artikel_prijs * rra.res_rsv_artikel_aantal"
+ " ELSE rra.res_rsv_artikel_prijs"
+ " END artikel_prijs"
+ " FROM res_rsv_artikel rra"
+ " , res_artikel ra"
+ " WHERE rra.res_artikel_key = ra.res_artikel_key"
+ " AND rra.res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRsa = Oracle.Execute(sqla);
while (!oRsa.eof)
{
if (oRsdi < 1)
BLOCK_START({collapsed: false, title: L("lcl_catering")});
var extra_txt = ( oRsa("artikel_prijs").Value && !isNaN(oRsa("artikel_prijs").Value)
? "<div style='float: right;'>&euro; " + safe.curr(oRsa("artikel_prijs").Value) + " " + L("lcl_shared_inclBTW") + "</div></br/>"
: ""
);
ROFIELD("fld", "", oRsa("res_rsv_artikel_aantal").Value + " x " + oRsa("res_artikel_omschrijving").Value, {suppressEmpty: true, html: extra_txt});
oRsdi += 1;
oRsa.moveNext();
}
oRsa.Close();
if (oRsdi > 0)
BLOCK_END();
// Bezoekers - indien leesrechten? TODO
}
}
generateFlexKenmerkBlock ({ urole: "fe" // altijd voor mobile ?
, res_key : rsv.reservering_key
, act_key_arr : (rsv.act_key > -1) ? [rsv.act_key] : []
, reqId : user_key
, defaults : rsv.flex_defaults
, rsv_ruimte_key : rsv_ruimte_key
, reado: rsv_ruimte_key > -1 && !this_res.canChange
, mobile: true
}
);
showPlan(rsv.actueel==2, rsv, ins_deel_key);
CONTROLGROUP_START();
if (this_res.canChange || rsv_ruimte_key == -1)
BUTTON((rsv_ruimte_key > -1 ? L("lcl_mobile_save_home") : (restype == "C" ? L("lcl_next") : L("lcl_newsubmit")))
, { click: "res_submit()"
, icon: "fa-fclt-save"
, singlepress: (rsv_ruimte_key == -1)
}
);
if (this_res.canChange && rsv_ruimte_key > -1)
{
var sql_fo_catering_scope = "";
if (!(S("res_fo_catering_scopeless")))
{
// RES_V_SRTARTIKEL_ONRGOED i.p.v. res_v_srtartikel_ruimte:
// niet alleen kijken naar max(prio) 'R' (ruimte) maar ook naar onderliggende prio's 'L' (locatie) en 'G' (gebouw)
// In de view res_v_srtartikel_ruimte wordt alleen naar de maximale prio gekeken van een bepaalde alg_ruimte_key
sql_fo_catering_scope = " AND g.ins_discipline_key IN"
+ "(SELECT res_discipline_key"
+ " FROM res_v_srtartikel_onrgoed"
+ " WHERE " + ( alg_ruimtekey > 0
? "alg_ruimte_key = " + alg_ruimtekey
: "alg_ruimte_key IN"
+ "(SELECT COALESCE(r2a.alg_ruimte_key, rrr.alg_ruimte_key)"
+ " FROM res_rsv_ruimte rrr"
+ " , res_v_rsv_ruimte_2_alg_ruimte r2a"
+ " WHERE r2a.res_alg_ruimte_verwijder IS NULL"
+ " AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)"
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key
+ ")"
)
+ ")";
}
sql = "SELECT d.ins_discipline_key"
+ " FROM RES_v_aanwezigDISCIPLINE d, res_disc_params rd"
+ " WHERE ins_discipline_min_level = 2"
+ " AND rd.res_ins_discipline_key = d.ins_discipline_key"
+ " AND d.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 IN ('WEB_RESUSE','WEB_RESFOF')"
+ " AND g.prs_perslid_key = " + user_key
+ " AND fac_gebruiker_prs_level_write < 9"
+ " AND fac_gebruiker_alg_level_write < 9"
+ sql_fo_catering_scope
+ ")"
+ " AND EXISTS"
+ "(SELECT res_activiteit_key"
+ " FROM res_activiteitdiscipline rad"
+ " WHERE rad.res_discipline_key = d.ins_discipline_key"
+ " AND rad.res_activiteit_key = " + rsv.act_key
+ ")";
oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
BUTTON(L("lcl_mobile_save_catering"), {click: "res_cat()", icon: "fa-shopping-bag"});
}
oRs.close();
}
if ((this_res.canChange || rsv.extern_nr) && canHaveBez && rsv_ruimte_key > -1 && rsv.restype == "R")
{
BUTTON(L("lcl_mobile_save_visitors"), {click: "res_vis()", icon: "fa-th"});
}
// Toon meldingenknop als er bijbehorende lopende meldingen zijn en ik die mag zien (kan vast nog scherper)
if (user.checkAutorisation( "WEB_MLDBOF", true)) {
// De prijs is wel dat ik mld.inc moet includen..
var perform=false; // ???? JGL: MLD.INC gebruikt deze illegaal globaal
var frontend=false;
var sqln_arr = mld.getfromwherelist_sql("WEB_MLDBOF", {"rsv_ruimte_key": rsv_ruimte_key});
var tsql = "SELECT COUNT(m.mld_melding_key), MAX(m.mld_melding_key)" + sqln_arr[0]
+ " AND m.mld_melding_status IN (0,2,4,7)"
+ " UNION "
+ "SELECT COUNT(m.mld_melding_key), MAX(m.mld_melding_key)" + sqln_arr[1]
+ " AND m.mld_melding_status IN (0,2,4,7)";
toRs = Oracle.Execute(tsql);
if (toRs(0).value == 1) { // eentje slechts, dan naar de details; max is vanzelfsprekend die ene
BUTTON(L("lcl_mobile_meldingen")+ " (1)", {linkid: rooturl+"/appl/pda/melding.asp?mld_key="+toRs(1).value , icon: "fa-exclamation-circle" });
} else if (toRs(0).value > 0) { // meerdere, dan naar lijst
// Lijst tonen van alle meldingen met dezelfde rsv_ruimte_key (reservering).
BUTTON(L("lcl_mobile_meldingen") + " (" + toRs(0).value+")", {linkid: rooturl + "/appl/pda/mld_list.asp?rsv_ruimte_key=" + rsv_ruimte_key, icon: "fa-exclamation-circle" });
}
toRs.Close();
}
if (this_res.canDelete)
{
BUTTON(L("lcl_delete"), {click: "res_delete()", icon: "fa-trash-alt", singlepress: (rsv_ruimte_key == -1)});
}
CONTROLGROUP_END();
IFACE.FORM_END();
%>
</form>
<%
}
CONTENT_END();
FOOTER();
PAGE_END();
PDA_PAGE_END(); %>
</body>
</html>
<% ASPPAGE_END(); %>