931 lines
38 KiB
Plaintext
931 lines
38 KiB
Plaintext
<%@language = "javascript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: pda/afspraak.asp
|
|
Description: Add/wijzig melding (Mobile version)
|
|
Parameters: afs_key voor bestaande melding
|
|
afs_key=-1 voor nieuwe melding
|
|
|
|
Note:
|
|
|
|
*/ %>
|
|
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="../Shared/calendar.inc" -->
|
|
<!-- #include file="../Shared/selector.inc" -->
|
|
<!-- #include file="../Shared/suggest/suggest.inc" -->
|
|
<!-- #include file="../bez/bez.inc" -->
|
|
<!-- #include file="../bez/bez_flexkenmerk.inc" -->
|
|
<!-- #include file="../mld/mld.inc" -->
|
|
<!-- #include file="../res/res.inc" -->
|
|
<!-- #include file="./resultset_table.inc" -->
|
|
<!-- #include file="./mobile.inc" -->
|
|
<!-- #include file="./iface.inc" -->
|
|
|
|
<%
|
|
FCLTHeader.Requires({ plugins: ["suggest"] });
|
|
FCLTHeader.Requires({ js: ["jquery.timepicker-table.js"],
|
|
css: ["timePicker-table.css"] });
|
|
|
|
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);
|
|
var mld_opdr_key = getQParamInt("mld_opdr_key", -1);
|
|
var toaster = getQParamInt("toaster", -1);
|
|
|
|
// Mogelijke parameters voor toevoegen only
|
|
// Deze zijn niet waarschijnlijk meegegeven, maar de defaultwaarde is ook al handig
|
|
var locatie_key = (afs_key > -1 ? -1 : getQParamInt("locatie_key", user.alg_locatie_key({withcurrent:true})) ); // Locatie
|
|
var gebouw_key = (afs_key > -1 ? -1 : getQParamInt("gebouw_key", user.alg_gebouw_key({withcurrent:true})) ); // Gebouw, kan -1 zijn, dan niet gebruiken
|
|
var verdieping_key = (afs_key > -1 ? -1 : getQParamInt("verdieping_key", user.alg_verdieping_key({withcurrent:true})) );
|
|
var ruimte_key = (afs_key > -1 ? -1 : getQParamInt("ruimte_key", user.alg_ruimte_key({withcurrent:true})) );
|
|
var urole = "fe";
|
|
// Nog meer default waarden voor een nieuwe afspraak.
|
|
var timeBeginInitEmpty = false;
|
|
var timeEindInitEmpty = false;
|
|
var bez_afspraak_datum = new Date();
|
|
var bez_afspraak_eind = new Date();
|
|
var bez_afspraak_host = "";
|
|
var bez_afspraak_tel = "";
|
|
var bez_afspraak_ruimte = "";
|
|
var bez_afspraak_host_key = user_key;
|
|
var bez_afspraak_contact_key = user_key;
|
|
var bez_afspraak_opmerking;
|
|
var bez_bezoekers = [];
|
|
var isReservering = false;
|
|
var extern_nr = false;
|
|
var isMldOpdracht = false;
|
|
|
|
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.
|
|
var rsv = res.res_rsv_ruimte_info(rsv_ruimte_key);
|
|
extern_nr = rsv.extern_nr;
|
|
isReservering = true;
|
|
}
|
|
else if (mld_opdr_key != -1)
|
|
{ // Voor afspraken bij een melding opdracht geldt:
|
|
// Als afs_key == -1 dan moet er een afspraak aangemaakt worden, anders moet er een geldige waarde meegegeven zijn.
|
|
var sql = "SELECT mld_melding_key"
|
|
+ " FROM mld_opdr"
|
|
+ " WHERE mld_opdr_key = " + mld_opdr_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var mld_key = oRs("mld_melding_key").Value;
|
|
oRs.Close();
|
|
var mld_info = mld.mld_melding_info(mld_key);
|
|
var this_opdr = mld.func_enabled_mld(mld_info.disc_key, "D"); // wat mag ik zoal op de melding en opdracht.
|
|
|
|
// Afspraken toevoegen aan de opdracht. Dan heb ik ORDBOF write rechten nodig.
|
|
user.auth_required_or_abort(this_opdr.canORDBOFwrite);
|
|
|
|
var mld_opdr = mld.mld_opdr_info(mld_opdr_key);
|
|
isMldOpdracht = true;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
var this_bez = bez.func_enabled_afspraak(afs_key);
|
|
if (isReservering && rsv.extern_nr)
|
|
{
|
|
this_bez.canChange = withinTimeRange(rsv.ruimte_van);
|
|
this_bez.canDelete = withinTimeRange(rsv.ruimte_van);
|
|
}
|
|
user.auth_required_or_abort(this_bez.canReadAny);
|
|
var authparams = user.checkAutorisation("WEB_BEZUSE");
|
|
|
|
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_BEZUSE')"
|
|
+ " 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 actie_key = -1;
|
|
var linitkey = -1;
|
|
var fnonchange = "";
|
|
var lextraparamvalue = null;
|
|
if (afs_key > -1)
|
|
{
|
|
// BESTAANDE AFSPRAAK
|
|
//user.auth_required_or_abort(this_afs.canReadAny);
|
|
var bez_info = bez.bez_afspraak_info(afs_key);
|
|
locatie_key = bez_info.locatie_key;
|
|
bez_afspraak_datum = bez_info.bez_afspraak_datum;
|
|
bez_afspraak_eind = bez_info.bez_afspraak_eind;
|
|
bez_afspraak_ruimte = bez_info.ruimte_code;
|
|
bez_afspraak_opmerking = bez_info.opm;
|
|
bez_afspraak_host_key = bez_info.gastheer_key ;
|
|
bez_afspraak_contact_key = bez_info.contact_key;
|
|
bez_afspraak_tel = bez_info.telf_nr;
|
|
alg_onrgoed_keys = (bez_info.alg_onrg_key ? bez_info.alg_onrg_key : bez_info.locatie_key);
|
|
rsv_ruimte_key = (bez_info.res_rsv_ruimte_key ? bez_info.res_rsv_ruimte_key : -1);
|
|
mld_opdr_key = (bez_info.mld_opdr_key ? bez_info.mld_opdr_key : -1);
|
|
alg_type = bez_info.onrg_type;
|
|
actie_key = bez_info.actie_key;
|
|
|
|
switch (alg_type)
|
|
{
|
|
case "L" : locatie_key = alg_onrgoed_keys; var llabel = L("lcl_location"); break;
|
|
case "G" : gebouw_key = alg_onrgoed_keys; var llabel = L("lcl_building"); break;
|
|
case "V" : verdieping_key = alg_onrgoed_keys; var llabel = L("lcl_floor");break; // Kan dit eigenlijk?
|
|
case "R" : ruimte_key = alg_onrgoed_keys; var llabel = L("lcl_room"); break;
|
|
}
|
|
|
|
var sql = "SELECT b.bez_bezoekers_key"
|
|
+ ", b.bez_afspraak_naam"
|
|
+ ", b.bez_afspraak_bedrijf"
|
|
+ ", b.bez_bezoekers_telefoon"
|
|
+ ", b.bez_bezoekers_email"
|
|
+ ", b.bez_bezoekers_kenteken"
|
|
+ ", b.bez_bezoekers_done"
|
|
+ ", b.bez_bezoekers_out "
|
|
+ ", b.bez_afspraak_key bez_afspraak_key"
|
|
+ ", rrd.res_rsv_deel_key rsv_deel_key"
|
|
+ ", org.alg_onroerendgoed_keys" // parkeerplaats
|
|
+ ", org.alg_type"
|
|
+ ", COALESCE(org.alg_gebouw_key, org.alg_terreinsector_key) gebouw_key"
|
|
+ ", COALESCE(org.alg_gebouw_code, org.alg_terreinsector_code) || ' ' || COALESCE(org.alg_gebouw_naam, org.alg_terreinsector_naam) code"
|
|
+ " FROM bez_bezoekers b"
|
|
+ ", res_rsv_deel rrd"
|
|
+ ", res_deel rd"
|
|
+ ", ins_deel id"
|
|
+ ", alg_v_allonrgoed_gegevens org"
|
|
+ " WHERE b.bez_bezoekers_key = rrd.bez_bezoekers_key (+)"
|
|
+ " AND rrd.res_deel_key = rd.res_deel_key(+)"
|
|
+ " AND rd.res_ins_deel_key = id.ins_deel_key(+)"
|
|
+ " AND id.ins_alg_ruimte_key = org.alg_onroerendgoed_keys(+)"
|
|
+ " AND bez_afspraak_key = " + afs_key
|
|
+ " ORDER BY UPPER(bez_afspraak_naam)";
|
|
var oRs = Oracle.Execute(sql);
|
|
var rij = 0;
|
|
while (!oRs.eof)
|
|
{
|
|
rij += 1;
|
|
vbedrijf = (oRs("bez_afspraak_bedrijf").Value != null ? oRs("bez_afspraak_bedrijf").Value : " ");
|
|
vonrgoed = { prk_key: oRs("alg_onroerendgoed_keys").Value || -1
|
|
, geb_key: oRs("gebouw_key").Value
|
|
}
|
|
var bezoeker = { rownr: rij
|
|
, bez_key: oRs("bez_bezoekers_key").Value
|
|
, naam: oRs("bez_afspraak_naam").Value
|
|
, bedrijf: vbedrijf
|
|
, telefoon: oRs("bez_bezoekers_telefoon").Value
|
|
, email: oRs("bez_bezoekers_email").Value
|
|
, kenteken: oRs("bez_bezoekers_kenteken").Value
|
|
, parkeer: oRs("code").Value
|
|
, onrgoed: vonrgoed
|
|
};
|
|
bez_bezoekers.push(bezoeker);
|
|
oRs.movenext();
|
|
}
|
|
oRs.Close();
|
|
}
|
|
else
|
|
{
|
|
if (isReservering)
|
|
{
|
|
// Er zijn nog geen bezoekers bij een reservering aangemeld.
|
|
// De benodigde informatie komt uit de reservering.
|
|
|
|
bez_afspraak_datum = rsv.ruimte_van;
|
|
bez_afspraak_eind = rsv.ruimte_tot;
|
|
locatie_key = rsv.loc_key;
|
|
ruimte_key = rsv.room_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
|
|
{
|
|
// NIEUWE AFSPRAAK
|
|
// AFSPRAAK DATUM/TIJD
|
|
// defaults zetten
|
|
bez_afspraak_datum = new Date();
|
|
if (S("vis_t1_std") > 0)
|
|
{
|
|
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);
|
|
}
|
|
else
|
|
{
|
|
timeEindInitEmpty = true;
|
|
}
|
|
|
|
// 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.
|
|
if (isMldOpdracht)
|
|
{
|
|
locatie_key = mld_info.loc_key;
|
|
gebouw_key = mld_info.bld_key;
|
|
verdieping_key = mld_info.flr_key;
|
|
ruimte_key = mld_info.room_key;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
if (requiredlevel > 3) requiredlevel = 3; // Voor level 4 en 5 bestaat nog geen code, dus terugvallen op 3.
|
|
|
|
// We weten nu welk niveau we moeten kiezen, maak de UI
|
|
switch (requiredlevel)
|
|
{
|
|
case 2:
|
|
llabel = L("lcl_location");
|
|
linitkey = locatie_key;
|
|
fnkey = "locatiekey";
|
|
fnonchange = "placeChanged('L')";
|
|
lextraparamvalue = null;
|
|
sql = "SELECT alg_locatie_key key"
|
|
+ " , l.alg_locatie_omschrijving || '(' || l.alg_locatie_code || ')' naam"
|
|
+ " FROM alg_locatie l"
|
|
+ " WHERE EXISTS"
|
|
+ " (SELECT ag.alg_locatie_key"
|
|
+ " FROM alg_v_aanweziggebouw ag"
|
|
+ " WHERE ag.alg_gebouw_bez = 1"
|
|
+ " AND ag.alg_locatie_key = l.alg_locatie_key)";
|
|
if (autlevel >= 0)
|
|
sql += " AND l.alg_locatie_key IN"
|
|
+ " (SELECT alg_locatie_key"
|
|
+ " FROM fac_v_my_locations"
|
|
+ " WHERE prs_perslid_key = " + user_key
|
|
+ " AND niveau = " + autlevel + ")";
|
|
sql += " ORDER BY 2";
|
|
break;
|
|
case 3:
|
|
llabel = L("lcl_building");
|
|
linitkey = gebouw_key;
|
|
fnkey = "gebouwkey";
|
|
fnonchange = "placeChanged('G')";
|
|
lextraparamvalue = "alg_locatie_key";
|
|
sql = "SELECT g.alg_gebouw_key"
|
|
+ " , COALESCE(l.alg_locatie_omschrijving, l.alg_locatie_code) || '-' || alg_gebouw_naam"
|
|
+ " , l.alg_locatie_key"
|
|
+ " FROM alg_gebouw g"
|
|
+ " , alg_srtgebouw sg"
|
|
+ " , alg_v_aanweziglocatie l"
|
|
+ " WHERE sg.alg_srtgebouw_key(+) = g.alg_srtgebouw_key"
|
|
+ " AND g.alg_locatie_key = l.alg_locatie_key"
|
|
+ " AND sg.alg_srtgebouw_passief IS NULL" // Alleen de facilitair actieve gebouwen
|
|
+ " AND g.alg_gebouw_bez = 1" // en bezoekbaar
|
|
+ " AND g.alg_gebouw_verwijder IS NULL";
|
|
if (autlevel >= 0)
|
|
sql += " AND g.alg_gebouw_key IN"
|
|
+ " (SELECT alg_gebouw_key FROM fac_v_my_buildings"
|
|
+ " WHERE prs_perslid_key = " + user_key
|
|
+ " AND niveau = " + autlevel + ")";
|
|
sql += " ORDER BY 2";
|
|
break;
|
|
case 4: // Lager komt later als nodig.
|
|
case 5: // Lager komt later als nodig.
|
|
break;
|
|
}
|
|
|
|
if (isMldOpdracht)
|
|
bez_afspraak_host_key = mld_info.melder_key;
|
|
|
|
// Maak van host_key een naam.
|
|
if ((S("vis_afspraak_host_uses_keys") & 1) == 0)
|
|
{
|
|
if (isMldOpdracht)
|
|
{
|
|
var sql = "SELECT " + S("prs_pers_string") + " gastheer"
|
|
+ " FROM prs_perslid p"
|
|
+ " WHERE p.prs_perslid_key = " + mld_info.melder_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
bez_afspraak_host = oRs("gastheer").Value;
|
|
oRs.Close();
|
|
}
|
|
else
|
|
bez_afspraak_host = user.naam();
|
|
|
|
bez_afspraak_tel = user.prs_perslid_telefoonnr();
|
|
}
|
|
}
|
|
|
|
var sqla = "SELECT bez_actie_key"
|
|
+ " , bez_actie_omschrijving"
|
|
+ " FROM bez_actie"
|
|
+ " WHERE bez_actie_default = 1"
|
|
+ " AND bez_actie_groep_key = " + bez.bez_getactiegroep(gebouw_key)
|
|
+ " ORDER BY 2";
|
|
var oRs = Oracle.Execute(sqla);
|
|
if (!oRs.Eof)
|
|
actie_key = oRs("bez_actie_key").Value; // Selecteer de default waarde
|
|
oRs.Close();
|
|
}
|
|
|
|
// Zijn er locaties met parkeerplaatsen? (locatie_key = -1 meegeven)
|
|
var prk_data = bez.bez_prkinfo(locatie_key, bez_afspraak_datum, bez_afspraak_eind);
|
|
|
|
var subject = (isReservering
|
|
? L("lcl_mobile_bezoek")
|
|
: (afs_key > -1
|
|
? L("lcl_vis_appointment") + " " + afs_key
|
|
: L("lcl_mobile_newafspraak")
|
|
)
|
|
);
|
|
// Waarden zijn bepaald
|
|
|
|
%>
|
|
<html>
|
|
<head>
|
|
<% FCLTMHeader.Generate({title: subject }); %>
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
if(<%=toaster%> == 1){
|
|
jqToast(L("lcl_mobile_data_saved"));
|
|
}
|
|
});
|
|
|
|
function prkOnChange(select, bez_num) {
|
|
if ($(select).val() > 0) {
|
|
$("#prk" + bez_num).val("on");
|
|
} else {
|
|
$("#prk" + bez_num).val("off");
|
|
}
|
|
var toon_kenteken = parseInt($(select).find(":selected").attr("toon_kenteken"));
|
|
$("#bezoeker_kenteken" + bez_num).removeClass("required10S" + bez_num + " required");
|
|
switch (toon_kenteken)
|
|
{
|
|
case 0: // niet registreren
|
|
$("#bezoeker_kenteken" + bez_num).val("").closest(".ui-block-a").css("display","none");
|
|
break;
|
|
case 1: // optioneel, dus alleen tonen
|
|
$("#bezoeker_kenteken" + bez_num).closest(".ui-block-a").css("display","block");
|
|
break;
|
|
case 2: // verplicht indien parkeerplaats
|
|
$("#bezoeker_kenteken" + bez_num).addClass("required10S" + bez_num).closest(".ui-block-a").css("display","block");
|
|
break;
|
|
case 3: // altijd verplicht
|
|
$("#bezoeker_kenteken" + bez_num).addClass("required").closest(".ui-block-a").css("display","block");
|
|
break;
|
|
}
|
|
|
|
checkRequiredGroup("10S" + bez_num);
|
|
}
|
|
|
|
function afs_submit_callback(json)
|
|
{
|
|
if (<%=afs_key%> == -1)
|
|
{ // Aan een nieuwe afspraak moeten direct bezoekers worden toegevoegd.
|
|
window.location.href = "bezoeker.asp?urole=fe&rsv_ruimte_key=<%=rsv_ruimte_key%>&afs_key=" + json.afspr_key + "&toaster=1";
|
|
}
|
|
else
|
|
{
|
|
if (json.afspr_deleted)
|
|
alert(L("lcl_bez_appdel"));
|
|
else
|
|
alert(L("lcl_mobile_saved"));
|
|
McltCallbackHome(json); // Home omdat niet alle browsers anders een refresh doen
|
|
}
|
|
}
|
|
|
|
async function afs_submit(gotoVis)
|
|
{
|
|
if (!await validateForm("afspraak"))
|
|
return false;
|
|
<%
|
|
if (!isReservering)
|
|
{
|
|
%>
|
|
if ($("#date_from").val() == $("#date_to").val() &&
|
|
$("#time_from_date_from").val() == $("#time_from_date_to").val())
|
|
{
|
|
FcltMgr.alert(L("lcl_vis_same_time"));
|
|
return false;
|
|
}
|
|
<%
|
|
}
|
|
%>
|
|
var submit_url = $("form[name=afspraak]")[0].action
|
|
+ (<%=rsv_ruimte_key%> != -1? "&rsv_ruimte_key=<%=rsv_ruimte_key%>" : "");
|
|
var data = $("form[name=afspraak]").serialize();
|
|
if (<%=afs_key%> == -1)
|
|
{
|
|
$.post( submit_url, data
|
|
, McltCallbackAndThen(gotoVis?bez_add_vis:afs_submit_callback)
|
|
, "json");
|
|
}
|
|
else
|
|
{
|
|
$.post( submit_url, data
|
|
, McltCallbackAndThen(gotoVis?bez_submit_add:bez_submit)
|
|
, "json");
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function bez_submit()
|
|
{
|
|
// Gegevens van bezoekers aanpassen en afsluiten
|
|
var submit_url = "../bez/bez_edit_bezoekers_save.asp?urole=fe&mobile=1&afspr_key=<%=afs_key%>"
|
|
+ "&rsv_ruimte_key=<%=rsv_ruimte_key%>";
|
|
$.post( submit_url
|
|
, $("form[name=afspraak]").serialize()
|
|
, McltCallbackAndThenAlways(bez_submit_callback) //McltCallbackRefresh
|
|
, "json");
|
|
}
|
|
|
|
function bez_submit_callback(json)
|
|
{
|
|
var rsv_key = <%=rsv_ruimte_key%>;
|
|
if (rsv_key != -1)
|
|
{ // is reservering
|
|
purl = "../pda/reservering.asp?rsv_ruimte_key=" + rsv_key;
|
|
window.location.href = purl;
|
|
}
|
|
else
|
|
{ // is afspraak
|
|
McltCallbackHome(json);
|
|
}
|
|
}
|
|
|
|
function bez_submit_add()
|
|
{
|
|
// Gegevens van bezoekers aanpassen en nieuwe bezoeker toevoegen
|
|
var submit_url = "../bez/bez_edit_bezoekers_save.asp?urole=fe&mobile=1&afspr_key=<%=afs_key%>"
|
|
+ "&rsv_ruimte_key=<%=rsv_ruimte_key%>";
|
|
$.post( submit_url
|
|
, $("form[name=afspraak]").serialize()
|
|
, McltCallbackAndThen(bez_add_vis)
|
|
, "json");
|
|
return false;
|
|
}
|
|
|
|
async function bez_add_vis()
|
|
{
|
|
if (!await validateForm("afspraak"))
|
|
return false;
|
|
|
|
// Een delay om te voorkomen dat de toaster gelijk weer verwijderd wordt door het laden van een nieuwe pagina.
|
|
window.location.href = "bezoeker.asp?urole=fe&rsv_ruimte_key=<%=rsv_ruimte_key%>&afs_key=<%=afs_key%>&toaster=1";
|
|
}
|
|
|
|
function bez_del(rij)
|
|
{
|
|
var laatseBez = $('a[id*="btn_del').length == 1;
|
|
var label = laatseBez ? L("lcl_pda_bez_delete") + " " + L("lcl_pda_bez_afs_delete") : L("lcl_pda_bez_delete");
|
|
FcltMgr.confirm(label,
|
|
function()
|
|
{
|
|
var bez_key = -1 * $("#bez_key" + rij).val();
|
|
$("#bez_key" + rij).val(bez_key);
|
|
bez_submit();
|
|
}
|
|
);
|
|
}
|
|
|
|
function bez_delete()
|
|
{
|
|
if (confirm(L("lcl_bez_confirm_delete_afspraak")))
|
|
{
|
|
var data = { level: "A",
|
|
afspr_key: <%=afs_key%>
|
|
};
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("<%=rooturl%>/appl/bez/bez_delete.asp",
|
|
data,
|
|
McltCallbackHome, // Op deze manier in ieder geval een refresh
|
|
"json");
|
|
}
|
|
}
|
|
|
|
function placeChanged(type)
|
|
{
|
|
var roomtxt = "";
|
|
switch (type)
|
|
{
|
|
case "L": //
|
|
roomtxt = $("#locatiekey").find("option:selected").text();
|
|
reload_actie($("#locatiekey option:selected").val(), "");
|
|
break;
|
|
case "G": // Zet de juiste locatie
|
|
var lgebkeyOptions = document.getElementById("gebouwkey").options;
|
|
llockey = lgebkeyOptions[lgebkeyOptions.selectedIndex].getAttribute("alg_locatie_key");
|
|
$("#locatiekey").val(llockey);
|
|
roomtxt = $("#gebouwkey").find("option:selected").text();
|
|
reload_gebouw($("#gebouwkey option:selected").val());
|
|
reload_actie("", $("#gebouwkey option:selected").val());
|
|
break;
|
|
case "V": // Zet de juiste locatie en gebouw
|
|
// Lager komt later als nodig.
|
|
break;
|
|
case "R": // Zet de juiste locatie, gebouw en verdieping
|
|
// Lager komt later als nodig.
|
|
break;
|
|
}
|
|
$("#room").val(roomtxt.substring(0,30));
|
|
}
|
|
|
|
function reload_gebouw(bld_key)
|
|
{
|
|
// Een ander gebouw is geselecteerd.
|
|
$.getJSON("../alg/get_alg_info_ajax.asp"
|
|
, { req_info: "alg_gebouw"
|
|
, alg_gebouw_key: bld_key
|
|
}
|
|
, function(data)
|
|
{
|
|
mld_vrije_dagen_alt = data.vrije_dagen.alt || [];
|
|
$("#vrije_dagen_id").val( (data.vrije_dagen.id || "Default"));
|
|
}
|
|
);
|
|
}
|
|
|
|
function reload_actie(loc_key, bld_key)
|
|
{
|
|
$.getJSON("../bez/get_bez_info_ajax.asp"
|
|
, { req_info: "actiegroep"
|
|
, locatie_key: [loc_key]
|
|
, gebouw_key: [bld_key]
|
|
}
|
|
, function (data) {
|
|
if (data.length > 0)
|
|
{
|
|
$("#actie").empty().append($("<option>").val(-1));
|
|
for (var i=0; i< data.length; i++)
|
|
{
|
|
$("#actie").append($("<option>")
|
|
.val(data[i].key)
|
|
.html(data[i].omschr));
|
|
}
|
|
$("#actie").change();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
$(function()
|
|
{
|
|
var rij = 1;
|
|
while ($(".required10S" + rij).length) {
|
|
var select = $("#gebouwkey" + rij);
|
|
prkOnChange(select, rij);
|
|
checkRequiredGroup("10S" + rij);
|
|
rij++;
|
|
}
|
|
<%=fnonchange%>;
|
|
});
|
|
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<%
|
|
PAGE_START({id: "page-1-"+afs_key});
|
|
HEADER({title: subject, back:!qrc, home: !qrc });
|
|
CONTENT_START();
|
|
%>
|
|
<form name="afspraak" id="afspraak" action="../bez/bez_edit_afspraak_save.asp?urole=fe&mobile=1&afspr_key=<%=afs_key%>" method="post" onsubmit="return false;">
|
|
<input type="hidden" name="person" value="<%=bez_afspraak_contact_key%>">
|
|
<input type="hidden" name="personH" value="<%=(bez_afspraak_host? safe.htmlattr(bez_afspraak_host) : bez_afspraak_host_key)%>">
|
|
<input type="hidden" name="regiokey" value="-1">
|
|
<input type="hidden" name="districtkey" value="-1">
|
|
<input type="hidden" name="next_vis" value="<%=1 + bez_bezoekers.length%>">
|
|
<input type="hidden" name="vrije_dagen_id" id="vrije_dagen_id" value="Default">
|
|
<% if (isMldOpdracht)
|
|
{ %>
|
|
<input type="hidden" name="mld_opdr_key" id="mld_opdr_key" value="<%=mld_opdr_key%>">
|
|
<% }
|
|
|
|
// not needed BLOCK_START({collapsed: (rsv_ruimte_key != -1 ? true : false), title: (rsv_ruimte_key != -1 ? rsv.activiteit + " " + rsv.reservering_key + "/" + rsv.ruimte_volgnr : L("lcl_res_plaats"))});
|
|
|
|
// Wanneer en tot hoelaat is de afspraak.
|
|
if (isReservering)
|
|
{
|
|
%>
|
|
<input type="hidden" name="date_from" id="date_from" value="<%=bez_afspraak_datum.getTime()%>">
|
|
<input type="hidden" name="date_to" id="date_to" value="<%=bez_afspraak_eind.getTime()%>">
|
|
<%
|
|
ROFIELD("fld", L("lcl_date"), toDateTimeString(rsv.ruimte_van) + "-" + toTimeString(rsv.ruimte_tot));
|
|
}
|
|
else
|
|
{
|
|
FCLTcalendar( "date_from"
|
|
, { label : L("lcl_vis_start_date")
|
|
, datum: bez_afspraak_datum
|
|
, 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 && rsv_ruimte_key == -1)
|
|
, initTimeEmpty: timeBeginInitEmpty
|
|
, initEmpty: (afs_key < 0 && urole != "bo" && rsv_ruimte_key == -1)
|
|
, timeField: true
|
|
, timeStep: S("vis_h") * 60
|
|
, startTime: S("vis_t1")
|
|
, endTime: S("vis_t2")
|
|
, required: true
|
|
, volgnr: 1
|
|
, mobile: true
|
|
}
|
|
);
|
|
FCLTcalendar( "date_to"
|
|
, { label : L("lcl_vis_end_date")
|
|
, datum: bez_afspraak_eind
|
|
, maxPast : 0
|
|
, maxFuture: ((urole == "fe" && S("vis_fe_afspraak_limiet") > 0)? S("vis_fe_afspraak_limiet") : S("vis_afspraak_limiet"))
|
|
, initTimeEmpty: timeEindInitEmpty
|
|
, timeField: true
|
|
, timeStep: S("vis_h") * 60
|
|
, startTime: S("vis_t1")
|
|
, endTime: S("vis_t2")
|
|
, required: true
|
|
, volgnr: 2
|
|
, hidden: S("bez_multiday") != 1 // de *datum* is dan verborgen, tijd blijft zichtbaar
|
|
, mobile: true
|
|
}
|
|
);
|
|
}
|
|
//
|
|
// Waar is de afspraak.
|
|
if (afs_key == -1 && !isReservering)
|
|
{ // Nieuw, maar deze velden kunnen we zelf verzinnen
|
|
switch (requiredlevel)
|
|
{
|
|
case 2:
|
|
%> <input type="hidden" name="gebouwkey" value="-1">
|
|
<input type="hidden" name="verdiepingkey" value="-1">
|
|
<input type="hidden" name="ruimtekey" value="-1">
|
|
<% break;
|
|
case 3:
|
|
%> <input type="hidden" name="locatiekey" id="locatiekey" value="<%=locatie_key%>">
|
|
<input type="hidden" name="verdiepingkey" id="verdiepingkey" value="-1">
|
|
<input type="hidden" name="ruimtekey" id="ruimtekey" value="-1">
|
|
<% break;
|
|
case 4: // Lager komt later als nodig.
|
|
case 5: // Lager komt later als nodig.
|
|
break;
|
|
}
|
|
|
|
FCLTselector(fnkey,
|
|
sql,
|
|
{ initKey: linitkey,
|
|
label: llabel,
|
|
onChange: fnonchange,
|
|
extraParamValue: lextraparamvalue,
|
|
mobile: true
|
|
});
|
|
// room wordt gevuld op de onChange van de FCLTselector, maar wordt hieronder gecreeerd.
|
|
%>
|
|
<input type="hidden" name="room" id="room" value="">
|
|
<!-- Scripts... -->
|
|
<script type="text/javascript">
|
|
$(function()
|
|
{ // Als de initiele plaats waarde niet aanwezig is kloppen de andere plaats keys niet meer. Daarom updaten.
|
|
<%=fnonchange%>;
|
|
});
|
|
</script>
|
|
<%
|
|
}
|
|
else
|
|
{
|
|
%>
|
|
<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%>">
|
|
<input type="hidden" name="room" id="room" value="<%=safe.htmlattr(bez_afspraak_ruimte)%>">
|
|
<%
|
|
ROFIELD("fld", llabel, (isReservering ? rsv.ruimtenr : bez_afspraak_ruimte), {suppressEmpty: true});
|
|
}
|
|
|
|
var verplicht = (S("vis_afspraak_tel_required") & 1) == 1;
|
|
var vullen = (S("vis_afspraak_tel_required") & 2) == 0;
|
|
RWFIELD("phone", L("lcl_phone"), ((vullen || afs_key > 0) ? bez_afspraak_tel : ""), {type: "tel", html: "maxlength=20", pclass: (verplicht?" required":"") });
|
|
|
|
if (!isReservering)
|
|
{
|
|
sql = bez.bez_getacties([locatie_key], (gebouw_key > 0 ? [gebouw_key] : []), true).sql;
|
|
FCLTselector("actie",
|
|
sql,
|
|
{ label: L("lcl_action"),
|
|
initKey: actie_key,
|
|
emptyOption: afs_key < 0 && actie_key < 0 ? "" : null,
|
|
required: true,
|
|
mobile: true
|
|
});
|
|
}
|
|
if (this_bez.canChange)
|
|
{
|
|
RWFIELD("remark", L("lcl_remark"), bez_afspraak_opmerking, {suppressEmpty: true});
|
|
}
|
|
else
|
|
{
|
|
ROFIELD("remark", L("lcl_remark"), bez_afspraak_opmerking, {suppressEmpty: true});
|
|
}
|
|
|
|
// Wie komen er.
|
|
var nrCols = 2;
|
|
var rij = 0;
|
|
while (rij < bez_bezoekers.length)
|
|
{
|
|
vprkkey = bez_bezoekers[rij].onrgoed.prk_key; // alg_onroerendgoed_keys van de parkeerplaats
|
|
vbezkey = bez_bezoekers[rij].bez_key;
|
|
vnaam = bez_bezoekers[rij].naam;
|
|
vbedrijf = bez_bezoekers[rij].bedrijf;
|
|
vtelefoon = bez_bezoekers[rij].telefoon;
|
|
vemail = bez_bezoekers[rij].email;
|
|
vkenteken = bez_bezoekers[rij].kenteken;
|
|
vparking = (vprkkey > -1);
|
|
rij += 1;
|
|
|
|
%> <input type="hidden" name="bez_key<%=rij%>" id="bez_key<%=rij%>" value="<%=vbezkey%>"> <%
|
|
if (this_bez.canDelete)
|
|
BUTTON(L("lcl_vis_name") + " " + rij, {id: "btn_del" + rij, icon: "fa-trash-alt", click: "bez_del(" + rij + ")"});
|
|
|
|
function next_col(pmax_col, pthis_col)
|
|
{
|
|
var r = (pthis_col == pmax_col ? 1 : pthis_col+1);
|
|
return r;
|
|
}
|
|
|
|
function toon_class(p, b)
|
|
{
|
|
var r = "";
|
|
if (p == 2) r = "required10S"+b;
|
|
if (p == 3) r = "required";
|
|
return r;
|
|
}
|
|
|
|
|
|
var grid_col = 0;
|
|
grid_col = next_col(nrCols, grid_col);
|
|
GRID_START(nrCols);
|
|
COL_START(grid_col);
|
|
RWFIELD("bez" + rij, L("lcl_vis_name"), vnaam , { pclass: " required", html: 'onChange="checkRequiredGroup(\'10S' + rij + '\')"' });
|
|
grid_col = next_col(nrCols, grid_col);
|
|
COL_END();
|
|
COL_START(grid_col);
|
|
RWFIELD("bed" + rij, L("lcl_vis_company"), vbedrijf);
|
|
grid_col = next_col(nrCols, grid_col);
|
|
COL_END();
|
|
// Als er locaties zijn met parkeerplaatsen dan de parkeerplaats checkbox plaatsen.
|
|
// Ook al kun je geen parkeerplaats boeken op de aangegeven locatie.
|
|
// Mocht je dan toch het vinkje hebben gezet, dan krijg je tijdens het boeken wel de melding dat de parkeerplaats niet geboekt kon worden.
|
|
// We doen namelijk geen client site veranderingen/aanpassingen in een mobile scherm.
|
|
|
|
var hasParking = (S("vis_parking_key") != -1 && this_bez.canWritePrk && prk_data.prk_array.length);
|
|
if (hasParking) {
|
|
// Heeft de locatie parkeerplaatsen?
|
|
COL_START(1, { width: 100 });
|
|
if (prk_data.prk_vrij == 0) {
|
|
%> <div>
|
|
<label><%=L("lcl_vis_park")%></label>
|
|
<div><%=L("lcl_bez_vol")%></div>
|
|
</div><%
|
|
} else {
|
|
var sqls = [];
|
|
for (var i = 0; i < prk_data.prk_array.length; i++) {
|
|
sqls.push("SELECT " + prk_data.prk_array[i].key
|
|
+ ", " + safe.quoted_sql(prk_data.prk_array[i].naam)
|
|
+ ", " + prk_data.prk_array[i].toon_kenteken + " toon_kenteken"
|
|
+ " FROM DUAL"); // Ook de volle, die zijn mogelijk al geselecteerd
|
|
}
|
|
%> <input type="hidden" id="prkselect<%=rij%>" name="prkselect<%=rij%>" value="S"><% // [S]uggest
|
|
%> <input type="hidden" id="prk<%=rij%>" name="prk<%=rij%>" value="<%=vparking ? "on" : "off"%>"><% // Fake checkbox, nodig in bez-bez_edit_bezoekers.inc
|
|
FCLTselector(
|
|
"gebouwkey" + rij,
|
|
sqls.join(" UNION ALL "),
|
|
{
|
|
label: L("lcl_vis_park"),
|
|
onChange: "prkOnChange(this, " + rij + ")",
|
|
initKey: vprkkey,
|
|
extraParamValue: "toon_kenteken",
|
|
emptyOption: "",
|
|
extraclass: "required10S" + rij,
|
|
mobile: true
|
|
});
|
|
}
|
|
COL_END();
|
|
}
|
|
|
|
grid_col = 1;
|
|
if (bez_info.toon_telefoon)
|
|
{
|
|
COL_START(grid_col);
|
|
RWFIELD("bezoeker_telefoon" + rij, L("lcl_bez_telefoon"), vtelefoon, {pclass: toon_class(bez_info.toon_telefoon, rij), html: 'maxlength="20"' });
|
|
grid_col = next_col(nrCols, grid_col);
|
|
COL_END();
|
|
}
|
|
if (bez_info.toon_email)
|
|
{
|
|
COL_START(grid_col);
|
|
RWFIELD("bezoeker_email" + rij, L("lcl_bez_email"), vemail, {pclass: toon_class(bez_info.toon_email, rij) });
|
|
grid_col = next_col(nrCols, grid_col);
|
|
COL_END();
|
|
}
|
|
if (hasParking) // er zijn in ieder geval parkeerplaatsen. Nu nog: niet tonen als er geen parkeerplaats geselecteerd is of tonen==0
|
|
// voor 1,2,3 moer er een class gezet worden bij het wijzigen van parkeerplaats.
|
|
{
|
|
var kenteken_cls = bez_info.toon_kenteken;
|
|
COL_START(grid_col);
|
|
RWFIELD("bezoeker_kenteken" + rij, L("lcl_bez_kenteken"), vkenteken, { pclass: toon_class(kenteken_cls, rij), html: 'maxlength="10"' });
|
|
grid_col = next_col(nrCols, grid_col);
|
|
COL_END();
|
|
}
|
|
|
|
|
|
COL_START(1, {width: 100});
|
|
CONTENT_START({});
|
|
generateFlexKenmerkCode ({ urole: urole
|
|
, bez_key : vbezkey
|
|
, afspraak_key: afs_key
|
|
, reado: (isReservering && rsv.extern_nr)
|
|
, beznum: rij
|
|
, mobile: true
|
|
});
|
|
CONTENT_END();
|
|
COL_END();
|
|
GRID_END();
|
|
}
|
|
CONTROLGROUP_START();
|
|
if (this_bez.canChange || afs_key < 0)
|
|
{
|
|
if (afs_key > 0)
|
|
{
|
|
BUTTON(L("lcl_mobile_addvisitors"), {click: "afs_submit(true)", icon: "fa-user-plus"});
|
|
if (this_bez.canDelete)
|
|
BUTTON(L("lcl_delete"), {click: "bez_delete()", icon: "fa-trash-alt", singlepress: (afs_key == -1)});
|
|
}
|
|
if (isReservering)
|
|
{
|
|
BUTTON(L("lcl_mobile_save_reservation"), {click: "afs_submit(false)", icon: "fa-fclt-save"});
|
|
}
|
|
else
|
|
{
|
|
BUTTON((afs_key>-1 ? L("lcl_mobile_save_home") : L("lcl_mobile_bezoek")), {click: "afs_submit(false)", icon: (afs_key>-1 ? "fa-fclt-save" : "fa-users"), singlepress: (afs_key == -1)});
|
|
}
|
|
}
|
|
CONTROLGROUP_END();
|
|
IFACE.FORM_END();
|
|
%>
|
|
</form>
|
|
<%
|
|
CONTENT_END();
|
|
FOOTER();
|
|
PAGE_END();
|
|
PDA_PAGE_END(); %>
|
|
</body>
|
|
</html>
|
|
<% ASPPAGE_END(); %>
|