Files
Facilitor/APPL/BEZ/bez.js
Erik Groener 4df55d1576 MNNL#73376 Kennisbank-items (gebouwafhankelijk) bij bezoekersafspraak tonen
svn path=/Website/trunk/; revision=65055
2024-06-10 12:59:03 +00:00

320 lines
13 KiB
JavaScript

/*
$Revision$
$Id$
File: bez.js
*/
var toon_telefoon, toon_email, toon_kenteken, toon, terrein_prk = {};
// show/hide and required/not required for telefoon/email/kenteken
function getToonInfo() {
toon_telefoon = parseInt($("#prktype").attr("toon_telefoon"));
toon_email = parseInt($("#prktype").attr("toon_email"));
toon_kenteken = parseInt($("#prktype").attr("toon_kenteken"));
}
// Check whether parking place is used in the selected table row
function parkingPlace($this)
{
var $prkCheck = $("td div input[type=checkbox]", $this.closest("tr"));
var $prkSelect = $("td div input[id^=gebouw].fld", $this.closest("tr"));
return ($prkCheck.is(":visible") && $prkCheck.prop("checked") || $prkSelect.is(":visible") && $prkSelect.val() != "");
}
// Determine show and require properties of telefoon/email/kenteken fields in a table row selected by an .each()
function showRequire()
{
var save_toon = toon;
var $this = $(this);
var $this_div = $this.closest("div");
var $this_tr = $this.closest("tr");
var $this_bez = $("td input[name^=bez]:first", $this_tr);
var $prk_check = $("td div input[type=checkbox]", $this_tr);
var $prk_select = $("td div input[id^=gebouw].fld", $this_tr);
function _doUpdateToon(key)
{
if ($this_div.attr("name").indexOf("telefoon") != -1)
{
if (terrein_prk[key])
toon = Math.max(terrein_prk[key].toon_telefoon, toon);
}
else if ($this_div.attr("name").indexOf("email") != -1)
{
if (terrein_prk[key])
toon = Math.max(terrein_prk[key].toon_email, toon);
}
else if ($this_div.attr("name").indexOf("kenteken") != -1)
{
if (terrein_prk[key])
toon = Math.max(terrein_prk[key].toon_kenteken, toon);
}
}
var current_bld_key = $prk_select.attr("sgkey"); // Het (parkeer)terrein (kan in theorie ook een gebouw zijn)
if ($prk_check.is(":visible") && $prk_check.prop("checked")) // Checkbox
{
current_bld_key = $("#prktype").data("parkeer_terrein");
if (current_bld_key > 0)
_doUpdateToon(current_bld_key);
}
else if ($prk_select.is(":visible") && current_bld_key > 0) // Suggest
{
_doUpdateToon(current_bld_key);
}
$this_div.toggle(toon > 0);
if (toon == 0)
{
$this.val("");
}
// Set group (check) dependency for bezoeker, kenteken, email and telefoon
// by adding required10Sx class if applicable. The x is the row number taken from the bez column.
// Telefoon/email/kenteken is only required if visitor is filled for the particular row
$this.toggleClass($this_bez.attr("name").replace("bez", "required10S"), toon == 3 || (toon == 2 && parkingPlace($this)));
$this.toggleClass("required", !!$this_bez.val() && (toon == 3 || (toon == 2 && parkingPlace($this))));
// Make [parking place select] or [parking checkbox] group-required when "kenteken" has a value
if ($this_div.attr("name").indexOf("kenteken") != -1)
{
var $prkCheck = $("td div input[type=checkbox]", $this_tr);
if ($prkCheck.is(":visible"))
{
$prkCheck.toggleClass($this_bez.attr("name").replace("bez", "required10S"), $this.val() != "");
if ($this.val() == "") // Dan mag ook de required er af, als die er al op zit
$prkCheck.removeClass("required");
}
var $prkSelect = $("td div input[id^=gebouw].fld", $this_tr);
if ($prkSelect.is(":visible"))
{
$prkSelect.toggleClass($this_bez.attr("name").replace("bez", "required10S"), $this.val() != "");
if ($this.val() == "") // Dan mag ook de required er af, als die er al op zit
$prkSelect.removeClass("required");
}
}
toon = save_toon;
}
// Determine show and require properties of telefoon/email/kenteken fields for one selected table row
function showRequireOne($this)
{
var $this_tr = $this.closest("tr");
var $this_bez = $("td input[name^=bez]:first", $this_tr);
var $prk_check = $("td div input[type=checkbox]", $this_tr);
// LPNL#68932; 'Een kenteken zonder vinkje heeft geen waarde.' -> leegmaken
if ($this.is($prk_check) && $prk_check.is(":visible") && !$prk_check.prop("checked"))
$("td div[name=bezoeker_kenteken] input", $this_tr).val("");
getToonInfo();
toon = toon_telefoon;
$("td div[name=bezoeker_telefoon] input", $this_tr).each(showRequire);
toon = toon_email;
$("td div[name=bezoeker_email] input", $this_tr).each(showRequire);
toon = toon_kenteken;
$("td div[name=bezoeker_kenteken] input", $this_tr).each(showRequire);
$("th div[name=bezoeker_telefoon_th]").toggle($("td div[name=bezoeker_telefoon]:visible").length > 0);
$("th div[name=bezoeker_email_th]").toggle($("td div[name=bezoeker_email]:visible").length > 0);
$("th div[name=bezoeker_kenteken_th").toggle($("td div[name=bezoeker_kenteken]:visible").length > 0);
if ($this_bez.length)
{
$this_bez.addClass($this_bez.attr("name").replace("bez", "required10S"));
checkRequiredGroup($this_bez.attr("name").replace("bez", "10S"));
}
}
function showRequireChange()
{
showRequireOne($(this));
}
function showRequireEventhandler()
{
$('td div input[type=checkbox], td div input[id^=gebouw].fld, td input[name^=bez]').off().on("change", showRequireChange);
}
// initial setting of show and require properties for all visitor table rows
function showRequireAll()
{
getToonInfo();
toon = toon_telefoon;
$("div[name=bezoeker_telefoon]").toggle(toon_telefoon > 0);
$("td div[name=bezoeker_telefoon] input").each(showRequire);
toon = toon_email;
$("div[name=bezoeker_email]").toggle(toon_email > 0);
$("td div[name=bezoeker_email] input").each(showRequire);
toon = toon_kenteken;
$("div[name=bezoeker_kenteken]").toggle(toon_kenteken > 0);
$("td div[name=bezoeker_kenteken] input").each(showRequire);
$("th div[name=bezoeker_telefoon_th]").toggle($("td div[name=bezoeker_telefoon]:visible").length > 0);
$("th div[name=bezoeker_email_th]").toggle($("td div[name=bezoeker_email]:visible").length > 0);
$("th div[name=bezoeker_kenteken_th]").toggle($("td div[name=bezoeker_kenteken]:visible").length > 0);
showRequireEventhandler();
}
function printBadge(pbez_key)
{ // Printen van de bezoekers badge
FcltMgr.windowopen("bez_xml.asp?badge=1&bez_key=" + pbez_key, "", "resizable=0,scrollbars=0,menubar=0,width=500,height=400");
}
function bezPoolCallback(data, text)
{
FcltMgr.openDetail("appl/bez/bez_afspraak.asp?urole=bo&res_key=" + data.res_key, L("lcl_add"));
}
function process_freeprk_info(data, textStatus)
{
if (textStatus == "success")
{
if (data)
{
// Zet de <th> tekst goed;
if (data.prk_vrij > 0)
{
$("#bezPrkFree").text("[" + data.prk_vrij + L("lcl_bez_vrije_plaatsen") + "]");
}
else
{
if (data.prk_array && data.prk_array.length == 0)
// Geen parkeerterrein aanwezig
$("#bezPrkFree").text("[" + L("lcl_bez_geen_aanwezig") + "]");
else
// Alle aanwezige parkeerterrein zijn bezet
$("#bezPrkFree").text("[" + L("lcl_bez_vol") + "]");
}
// Zet de parkeerplaats-keuze velden goed (Checkbox / Suggest / Geen keuze);
if (data.prk_array?.length == 1 && $("#gebouwkey").val() == data.prk_array[0].key) // We hebben 1 gebouw met parkeerplaatsen en die is ingevuld
{ // Checkboxen lopen synchroon met suggestboxen en zijn altijd goed gezet
// Checkboxen tonen voor parkeerterrein
$('div[name^="selectgebterdiv"]').css("display", "none");
$('div[name^="selectprkdiv"]').css("display", "block");
$('input[name^="prkselect"]').val("C");
$("#prktype").val("C"); // Checkbox voor parkeerterrein
}
else if (data.prk_array?.length >= 1)
{ // Gebruik data om de suggest velden bij parkeerterrein te updaten.
var next_vis = $("#next_vis").val();
for (var i = 1; i < next_vis; i++)
{
// Was mijn [oude] checkbox aangevinkt? Dan wil ik vast een parkeerplaats -> Kies er automatisch vast 1;
if ($("#prk" + i) && $("#prk" + i).prop("checked"))
{
// Vindt parkeerterrein voor nieuwe locatie (loc_key) of vernieuw de text van de geselecteerde parkeerterrein
var usegebter = 0; // Selecteer standaard de eerste ook al is die vol
for (var j = 0; j < data.prk_array.length; j++)
{
if (data.prk_array[j].key == $("#gebouwkey" + i).val())
{
usegebter = j; // Selecteer dezelfde parkeerterrein
break;
}
}
// Selecteer de eerste ook al is die vol
psObject[i].sgBld.setValue(data.prk_array[usegebter].key, data.prk_array[usegebter].naam, false, false, null, true);
}
}
// Suggestboxen tonen voor parkeerterrein
$('div[name^="selectprkdiv"]').css("display", "none");
$('div[name^="selectgebterdiv"]').css("display", "block");
$('input[name^="prkselect"]').val("S");
$("#prktype").val("S"); // Suggestbox voor parkeerterrein
}
else
{
// Geen vinkboxen en suggestboxen tonen voor parkeerterrein
$('div[name^="selectprkdiv"]').css("display", "none");
$('div[name^="selectgebterdiv"]').css("display", "none");
$('input[name^="prkselect"]').val("");
$("#prktype").val("N"); // Geen parkeerplaatsen/parkeerterrein reserveren
}
// Het terrein_prk object vullen.
terrein_prk = {};
update_terrein_prk(data.prk_array);
showRequireAll();
}
}
else
FcltMgr.alert("process_freeprk_info: " + textStatus);
if (data.init) {
if (typeof onChangeGebouw === "function")
onChangeGebouw();
else if (typeof onChangeLocation === "function")
onChangeLocation();
}
}
// Dit object wordt gevuld zodat we naar deze instellingen kunnen kijken zodra deze parkeerplaats gekozen wordt
function update_terrein_prk(parkeer_terreinen)
{ // Dit kunnen in theorie overigens ook gebouwen zijn
for (var i = 0; i < parkeer_terreinen.length; i++)
{
terrein_prk[parkeer_terreinen[i].key] = {
toon_telefoon: parkeer_terreinen[i].toon_telefoon,
toon_email: parkeer_terreinen[i].toon_email,
toon_kenteken: parkeer_terreinen[i].toon_kenteken
};
}
// Voor de checkbox onToggle, de parkeerterrein-key hier opslaan
if (parkeer_terreinen.length === 1 && $("#gebouwkey").val() == parkeer_terreinen[0].key) // We hebben 1 gebouw met parkeerplaatsen en die is ingevuld
$("#prktype").data("parkeer_terrein", parkeer_terreinen[0].key);
}
function update_show_fields(bld_arr)
{
var bez_fields = { toon_telefoon: 0, toon_email: 0, toon_kenteken: 0 };
for (var i = 0; i < bld_arr.length; i++)
{
bez_fields.toon_telefoon = Math.max(bez_fields.toon_telefoon, bld_arr[i].toon_telefoon);
bez_fields.toon_email = Math.max(bez_fields.toon_email, bld_arr[i].toon_email);
bez_fields.toon_kenteken = Math.max(bez_fields.toon_kenteken, bld_arr[i].toon_kenteken);
}
$("#prktype").attr(bez_fields);
showRequireAll();
}
function get_freeprk_info(init)
{
if (vis_parking_key != -1 && canWritePrk) // Parkeerterrein kolom is zichtbaar
{
var date_from = parseInt($("#date_from").val(), 10) || window.var_date_from?.getTime();
var date_to = parseInt($("#date_to").val(), 10) || window.var_date_to?.getTime();
if (date_from && date_to)
{
if (typeof bez_multiday !== "undefined" && bez_multiday != 1 && (new Date(date_from)).midnight() != (new Date(date_to)).midnight())
{ // De datum is verborgen en de tijd is zichtbaar. Datum date_to hetzelfde als datum date_from.
date_to = new Date(date_to);
date_to.setYear(new Date(date_from).getFullYear());
date_to.setMonth(new Date(date_from).getMonth());
date_to.setDate(new Date(date_from).getDate());
// Maak einddatum gelijk aan begindatum.
$("#show_date_to").datepicker('setDate', date_to);
$("#show_date_to").val($("#show_date_from").val());
date_to = date_to.getTime();
$("#date_to").val(date_to);
}
// Bepaal aantal vrije parkeerterrein.
$.getJSON("get_bez_info_ajax.asp",
{ req_info: "bez_freeprk",
loc_key: $("#locatiekey").val(),
date_from: date_from,
date_to: date_to,
init: init || 0
},
process_freeprk_info);
}
else
{
if (init) {
if (typeof onChangeGebouw === "function")
onChangeGebouw();
else if (typeof onChangeLocation === "function")
onChangeLocation();
}
$("#bezPrkFree").text("");
}
} // Als process_freeprk_info niet word uitgevoerd, moet alsnog onChangeGebouw worden uitgevoerd tijdens initialisatie (init)
else if (init) {
if (typeof onChangeGebouw === "function")
onChangeGebouw();
else if (typeof onChangeLocation === "function")
onChangeLocation();
}
}