309 lines
10 KiB
JavaScript
309 lines
10 KiB
JavaScript
/*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: res_plan.js
|
|
Remark: Functies voor res planborden
|
|
Parameters:
|
|
Context:
|
|
*/
|
|
function loadtitle(target,dest)
|
|
{
|
|
target.title = "..."; // Voorkom te snelle recall's
|
|
$.get(dest, function (data) { target.title = 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 });
|
|
}
|
|
else if (elm.getAttribute("deepurl"))
|
|
{
|
|
var deepurl = elm.getAttribute("deepurl");
|
|
var theTR = $(elm).closest("tr");
|
|
var disc_key = theTR.attr("disc_key");
|
|
var url = "appl/res/res_goto_extern.asp?res_disc_key=" + disc_key + "&deepurl=" + escape(deepurl);
|
|
FcltMgr.openDetail(url, { is_extern: true, titel: L("lcl_reservation_extern") });
|
|
}
|
|
}
|
|
|
|
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);
|
|
var deepurl = theTR.attr("deepurl");
|
|
var disc_key = theTR.attr("disc_key");
|
|
if (deepurl)
|
|
{
|
|
deepurl += "&res_ruimte_key=" + res_ruimte_key
|
|
+ "&res_van=" + res_van.getTime()
|
|
+ "&bez_omschr=" + "Vanuit+extern+systeem" // TODO
|
|
+ "&flex_defaults=" + escape(extern_flex);
|
|
var url = "appl/res/res_goto_extern.asp?res_disc_key=" + disc_key + "&deepurl=" + escape(deepurl);
|
|
FcltMgr.openDetail(url, { is_extern: true, titel: L("lcl_res_new_reservation_extern") });
|
|
}
|
|
else // 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.
|
|
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 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)
|
|
{
|
|
alert(L("lcl_res_bestel_minimum").format(minimum));
|
|
$("[id^='inpb_c_']",this).select().focus();
|
|
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 ))
|
|
)
|
|
{
|
|
objCnt.focus();
|
|
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 (jsDate < res_van || jsDate > res_tot)
|
|
{
|
|
alert(L("lcl_res_facility_bound"));
|
|
}
|
|
|
|
if (jsDate < thisCatExpire && !backo && !fronto)
|
|
{
|
|
alert(L("lcl_res_lastmin"));
|
|
allGood = false;
|
|
}
|
|
});
|
|
});
|
|
return allGood;
|
|
}
|
|
|
|
function ItemChoosed_obj(elm, fromID, disc_key, hour_px)
|
|
{
|
|
$(elm).toggleClass("closed");
|
|
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) { FcltMgr.resized(window); }).show();
|
|
}
|
|
|
|
function ItemChoosed_cat(elm, jq_div, disc_key, existing)
|
|
{
|
|
$(elm).toggleClass("closed");
|
|
|
|
var tabel = $("#table_dis" + disc_key);
|
|
if (tabel.length)
|
|
{
|
|
FcltMgr.resized(window);
|
|
return;
|
|
}
|
|
|
|
params = "?discipline_key=" + disc_key
|
|
+ "&rsv_ruimte_key="+rsv_ruimte_key;
|
|
|
|
jq_div.load("./res_load_cat.asp" + params,
|
|
function() { FcltMgr.resized(window); }).show();
|
|
}
|
|
|
|
// onclick van een reserveerbaar deel regel (dan is de categorie al opengeklapt)
|
|
//
|
|
function res_deel_click(rdeel)
|
|
{
|
|
$("#" + rdeel).toggleClass("selected").toggleClass("unselected");
|
|
}
|
|
|
|
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));
|
|
}
|
|
|
|
// Toon een voorheen verborgen opmerking-tooltip
|
|
// Bij een eventuele img met een theSrc attribuut wordt deze overgenomen naar src.
|
|
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;
|
|
}
|
|
$rem.show();
|
|
|
|
var base = $rem.closest("td").position().top;
|
|
if (base < ($rem.height())) // Een negatieve waarde mag er niet uitkomen, anders verdwijnt het bovenste gedeelte uit zicht.
|
|
$rem.css("top", "0px");
|
|
else
|
|
$rem.css("top", base - ($rem.height()) + "px");
|
|
return;
|
|
}
|