Files
Facilitor/APPL/RES/res_plan.js
2021-06-14 17:29:30 +00:00

378 lines
13 KiB
JavaScript

/*
$Revision$
$Id$
File: res_plan.js
Remark: Functies voor res planborden
Parameters:
Context:
*/
function showLoader() {
$("div.busyloading").show();
}
function hideLoader() {
$("div.busyloading").hide();
}
//
function set_borders_margins(tb, printfactor)
{
var _factor = printfactor || 1;
var hour_px = tb._hour_px() * _factor;
var unit_length = tb._unit_length;
var root = document.documentElement;
root.style.setProperty('--hourpx', hour_px + "px");
root.style.setProperty('--unit025', ((.25 * hour_px) % (unit_length * hour_px)) + "px");
root.style.setProperty('--unit050', ((.5 * hour_px) % (unit_length * hour_px)) + "px");
root.style.setProperty('--unit075', ((.75 * hour_px) % (unit_length * hour_px)) + "px");
root.style.setProperty('--unit100', ((hour_px) % (unit_length * hour_px)) + "px");
root.style.setProperty('--unit125', ((1.25 * hour_px) % (unit_length * hour_px)) + "px");
root.style.setProperty('--displayhour1', (hour_px < 15 ? "none" : "initial"));
root.style.setProperty('--displayhour2', (hour_px < 48 ? "none" : "initial"));
root.style.setProperty('--displayhour3', (hour_px < 24 ? "none" : "initial"));
}
// show/hide location-rooms in css grid
function toggleLoc()
{
var $this = $(this);
var $grid = $this.closest("div.grid");
$this.toggleClass("collapsed");
$("div[data-row]", $grid).not(".locatiegrid, .grid").toggleClass("hidden");
FcltMgr.resized();
}
// show/hide ins_disc-objects in css grid
function toggleDisc()
{
var $this = $(this);
var $grid = $this.closest("div.grid");
$this.toggleClass("collapsed")
$("div[data-row]", $grid).not(".insdiscgrid, .grid").toggleClass("hidden");
FcltMgr.resized();
}
function loadtitle(target,dest)
{
target.title = "..."; // Voorkom te snelle recall's
$.get(dest, function (data) { target.title = data });
}
function showtitle(target,dest)
{
target.title = "..."; // Voorkom te snelle recall's
$.get(dest, function (data) { $("p", target).first().html(data); });
}
var timerID=null;
function delayed(delay, fn)
{
if (timerID) clearTimeout(timerID);
timerID = setTimeout(fn, delay);
}
function setResRsvDeelTitle(elm, rsv_deel_key)
{
if (!elm.title)
delayed(200, function () {
loadtitle(elm, "../res/res_load_title_obj.asp?rsv_deel_key="+rsv_deel_key);
});
}
function rsv_title(elm)
{
if (!elm.title && elm.getAttribute("rsv_key") > 0)
{
delayed(200, function () {
loadtitle(elm, "../res/res_load_title_rsv.asp?rsv_ruimte_key="+elm.getAttribute("rsv_key"));
});
}
}
function setBezBezoekersTitle(elm, bez_bezoekers_key)
{
if (!elm.title)
delayed(200, function () {
loadtitle(elm, "../res/res_load_title_bez.asp?bez_bezoekers_key="+bez_bezoekers_key);
});
}
function rsv_click(elm,urole)
{
if (window.beingdragged)
{
window.beingdragged = false;
return;
}
if (elm.getAttribute("rsv_key") > 0)
{
var cmd = "appl/res/res_reservering.asp?rsv_ruimte_key=" + elm.getAttribute("rsv_key") + "&urole="+urole;
FcltMgr.openDetail(cmd, { reuse: true });
}
}
function room_table_click(evt, res_van, hour_px, res_t1, urole, activiteit)
{
var hours = parseInt('offsetX' in evt?evt.offsetX:evt.layerX, 10)/ hour_px + res_t1;
if (window.beingdragged)
{
window.beingdragged = false;
return;
}
var ob = (window.event ? window.event.srcElement : evt.target);
if ($(ob).hasClass("tddiv"))
ob = ob.parentElement || ob.parentNode;
if ($(ob).hasClass("plantd") && $(ob).hasClass("reserv"))
{
var theTR = $(ob).parent("TR");
// Externe ruimten mogen niet gewijzigd worden.
if (theTR.hasClass("extern"))
return;
var dagnr = $('td.plantd.reserv', theTR).index(ob); // Hoeveelste TD?
var res_ruimte_key = theTR[0].id;
res_van.setHours(Math.floor(hours), Math.floor(60*(hours-Math.floor(hours))), 0, 0);
res_van.setDate(res_van.getDate()+dagnr);
// Gewoon intern
var cmd = "appl/res/res_reservering.asp"
+ "?res_ruimte_key=" + res_ruimte_key
+ "&res_van=" + res_van.getTime()
+ (activiteit != -1 ? "&activiteit_key=" + activiteit : "")
+ "&urole="+urole;
FcltMgr.openDetail(cmd);
}
}
function room_table_mouse(evt, res_van, hour_px, res_t1)
{
var hours = parseInt('offsetX' in evt?evt.offsetX:evt.layerX, 10)/ hour_px + res_t1;
var ob = (window.event ? window.event.srcElement : evt.target);
if ($(ob).hasClass("tddiv"))
ob = ob.parentElement || ob.parentNode;
if ($(ob).hasClass("plantd") && $(ob).hasClass("reserv"))
{
var theTR = $(ob).parent("TR");
var dagnr = $('td.plantd.reserv', theTR).index(ob); // Hoeveelste TD?
res_van.setDate(res_van.getDate()+dagnr);
res_van = res_van.setFloatHours(hours, 0.25);
$("#timetip").html(toDateTimeString(res_van))
.css({ left: parseInt(evt.pageX, 10) + 10 + "px",
top: parseInt(evt.pageY, 10) - 25 + "px"
})
.show();
}
}
function obj_table_click(evt, res_van, hour_px, res_t1, urole)
{
var hours = parseInt('offsetX' in evt?evt.offsetX:evt.layerX, 10)/ hour_px + res_t1;
if (window.beingdragged)
{
window.beingdragged = false;
return;
}
var ob = (window.event ? window.event.srcElement : evt.target);
if ($(ob).hasClass("tddiv"))
ob = ob.parentElement || ob.parentNode;
if ($(ob).hasClass("plantd") && $(ob).hasClass("reserv"))
{
var theTR = $(ob).parent("TR");
var dagnr = $('td.plantd.reserv', theTR).index(ob); // Hoeveelste TD?
var res_deel_key = theTR[0].id;
res_van.setHours(Math.floor(hours), Math.floor(60*(hours-Math.floor(hours))), 0, 0);
res_van.setDate(res_van.getDate()+dagnr);
var cmd = "appl/res/res_reservering.asp?restype=CV"
+ "&res_deel_key=" + res_deel_key
+ "&res_van=" + res_van.getTime()
+ "&urole="+urole;
FcltMgr.openDetail(cmd);
}
}
// Gebruiker heeft een ruimte geselecteerd in een css grid.
function selectRoomGrid(radio)
{
var res_ruimte_key = $(radio).attr("id");
FcltMgr.closeDetail(window, { res_ruimte_key: res_ruimte_key });
}
// Gebruiker heeft een ruimte geselecteerd.
function selectRoom(radio)
{
var this_row = $(radio).closest('tr')[0];
var res_ruimte_key = this_row.id;
FcltMgr.closeDetail(window, { res_ruimte_key: res_ruimte_key });
}
// Controleer of alle catering tijden wel binnen res_cat_t1 en res_cat_t2 vallen
// Als dat niet zo is geef dan een melding en return false
function checkArtikelen(starttime_room, endtime_room)
{
var show_bound = true;
var allGood = true;
$(".tab_cat_sched").each(function() // doorloop alle catering disciplines
{
var tbl=this;
var thisCatExpire = new Date(parseInt(tbl.getAttribute("catExpire"), 10));
if (allGood)
$(".catline", tbl).each(function ()
{
var objCnt = $("[id^='inpb_c_']",this)[0];
var Cnt = parseInt(objCnt.value,10);
var hh = parseInt($("[id^='inpbh1_c_']",this).val(),10);
var mm = parseInt($("[id^='inpbm1_c_']",this).val(),10);
var minimum = parseInt($("[id^='inpb_c_']",this)[0].getAttribute("minimum"),10);
if (!isNaN(Cnt) && Cnt == 0)
return; // Niet over zeuren als het 0 is
if ($("[id^='inpb_c_']",this).val() > 0 && $("[id^='inpb_c_']",this).val() < minimum)
{
$("[id^='inpb_c_']",this).select().focus();
FcltMgr.alert(L("lcl_res_bestel_minimum").format(minimum));
allGood = false;
return;
}
if (isNaN(Cnt) || isNaN(hh) || isNaN(mm) ||
(hh+(mm/60) < (res_cat_t1>=0?res_cat_t1:starttime_room)) ||
(hh+(mm/60) > (res_cat_t2>=0?res_cat_t2:endtime_room ))
)
{
var starttime_art = parseInt($("[id^='inpbb1_c_']",this).val(),10);
var endtime_art = parseInt($("[id^='inpbe1_c_']",this).val(),10);
if (hh+(mm/60) < starttime_art || hh+(mm/60) > endtime_art) // HSLE#38449
{
objCnt.focus();
FcltMgr.alert(L("lcl_res_cons_time")); // Niet beschikbaar op dit tijdstip
allGood = false;
return;
}
}
var jsDate = res_van.midnight();
jsDate.setHours(hh);
jsDate.setMinutes(mm);
if (show_bound && (jsDate < res_van || jsDate > res_tot))
{
FcltMgr.alert(L("lcl_res_facility_bound"));
show_bound = false;
}
if (jsDate < thisCatExpire && !backo && !fronto)
{
FcltMgr.alert(L("lcl_res_lastmin"));
allGood = false;
}
});
});
return allGood;
}
function ItemChoosed_obj(elm, fromID, disc_key, hour_px)
{
$(elm).toggleClass("closed")
.find("i.fa-plus-square, i.fa-minus-square").toggleClass("fa-minus-square fa-plus-square");
var tabel = $("#table_dis" + disc_key);
if (tabel.length)
{
FcltMgr.resized(window);
return;
}
params = "?rsv_ruimte_key="+rsv_ruimte_key+"&urole="+urole;
params += "&disc_key="+disc_key;
params += "&hour_px=" + hour_px;
$("#"+fromID).load("./res_load_plan_obj.asp" + params,
function(txt) {
if (window.checkForChange) { checkForChange(); }
FcltMgr.resized(window);
});
}
function ItemChoosed_cat(elm, jq_div, disc_key, extraparams, callback)
{
$(elm).toggleClass("closed")
.find("i.fa-plus-square, i.fa-minus-square").toggleClass("fa-minus-square fa-plus-square");
var tabel = $("#table_dis" + disc_key);
if (tabel.length)
{
FcltMgr.resized(window);
return;
}
var params = "?discipline_key=" + disc_key
+ "&rsv_ruimte_key="+rsv_ruimte_key;
jq_div.load("./res_load_cat.asp" + params + (extraparams||""),
function() {
if (window.checkForChange) { checkForChange(); }
if (callback) {
callback();
}
FcltMgr.resized(window);
});
}
// onclick van een reserveerbaar deel regel (dan is de categorie al opengeklapt)
//
function res_deel_click(rdeel)
{
$("#" + rdeel).toggleClass("selected").toggleClass("unselected");
}
function res_deel_grid_click(rdeel)
{
var $this = $("input#chk_" + rdeel);
var disc = $this.parent().attr("data-disc");
var row = $this.parent().attr("data-row");
$("div.gepland.res_nieuw[data-disc=" + disc + "][data-row=" + row + "]").toggleClass("selected", $this.prop("checked")).toggleClass("unselected", $this.prop("checked") == false);
}
function showTotPriceArt(number)
{
// show the total price of the selected artikel
var aant = parseInt($("#inpb_c_"+number).val(), 10)||0;
if (urole=='fe' && aant < 0)
aant = 0
var pric = parseFloat($("#inpbp_c_"+number).val().replace(',','.')||0);
$("#inpb_c_"+number).val(aant);
if (!$("#inpbp_c_"+number).attr("readonly"))
$("#inpbp_c_"+number).val(num2currEditable(pric));
$("#inpbtp_c_"+number).val(num2curr(aant*pric));
}
function showOpmerking(remark_selector, evt)
{
var evt = evt || event;
// Onderkant popup ongeveer gelijk met onderderkant aangeklikte omschrijving.
// Mocht bovenkant uit zicht verdwijnen dan bovenkant omschrijving gelijk aan bovenkant iframe.
var $rem = $(remark_selector);
$rem.find('img').attr('src',$rem.find('img').attr('theSrc'))
if (!String($rem.html()).replace(/[ \t\n\r]/g,""))
{
$rem.hide(); // want leeg
return;
}
if (evt && "clientX" in evt)
$rem.css("left", evt.clientX+15);
var Positions = function(element)
{
this.boxShadow = 12;
this.dropDownHeight = element.outerHeight() + this.boxShadow;
this.base = element.closest("td");
this.tdBottom = this.base.offset().top + this.base.outerHeight();
this.pageBottom = $("iframe.fcltmodal", window.parent.document).length ? $("iframe.fcltmodal", window.parent.document).contents().height() : $("div.divrstable").height() || $("body").height();
this.dropDownBottom = this.tdBottom + this.dropDownHeight;
this.dissappearingBottom = this.dropDownBottom > (this.pageBottom || 0);
this.positionFromBottom = (this.pageBottom - this.dropDownHeight) + "px";
};
var p = new Positions($rem);
if (p.dissappearingBottom) // Een negatieve waarde mag er niet uitkomen, anders verdwijnt het onderste gedeelte uit zicht.
$rem.css("top", p.positionFromBottom);
$rem.show();
FcltMgr.resized();
return;
}