1221 lines
56 KiB
Plaintext
1221 lines
56 KiB
Plaintext
<%@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;'>€ " + 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(); %>
|