diff --git a/APPL/Localscripts/iface.js b/APPL/Localscripts/iface.js
index 5a0746b76e..ebca2c8a46 100644
--- a/APPL/Localscripts/iface.js
+++ b/APPL/Localscripts/iface.js
@@ -772,8 +772,11 @@ function isGoodNumber(str, intOnly, posOnly, numLen, numDec)
function validateField(thisObj, valid, errorMsg)
{
- var hasIconFollower = $(thisObj).next('i.fa').length;
- var $afterThisObj = hasIconFollower ? $(thisObj).next('i.fa') : $(thisObj);
+ var nextIsTimeHolder = $(thisObj).next("div.time-holder").length;
+ var $afterThisObj = nextIsTimeHolder ? $(thisObj).next("div.time-holder") : $(thisObj);
+
+ var hasIconFollower = $afterThisObj.next('i.fa').length;
+ $afterThisObj = hasIconFollower ? $afterThisObj.next('i.fa') : $afterThisObj;
$(thisObj).removeClass('bad');
$afterThisObj.next('span.bad').remove();
diff --git a/APPL/Localscripts/jquery.timepicker-table.js b/APPL/Localscripts/jquery.timepicker-table.js
index cf51eec094..12cd517780 100644
--- a/APPL/Localscripts/jquery.timepicker-table.js
+++ b/APPL/Localscripts/jquery.timepicker-table.js
@@ -97,15 +97,15 @@ $.fn.timePicker = function(options)
if(!appended) timesTable.append(timesRow);
timeHolder.append(timesTable);
$(el).after(timeHolder);
- timeHolder.css('top', $(el).position().top + "px");
+ timeHolder.css('top', $(el).offset().top + "px");
// JGL added
- var newLeft = $(el).position().left + $(el).outerWidth();
+ var newLeft = $(el).offset().left + $(el).outerWidth();
var w = settings.columns * 50; // timeHolder.outerWidth() is altijd 1?
if (newLeft + w > $("body").width())
{ // Wel in beeld houden
newLeft = Math.max(0, $("body").width() - w);
- timeHolder.css('top', $(el).position().top + $(el).outerHeight() + "px");
+ timeHolder.css('top', $(el).offset().top + $(el).outerHeight() + "px");
}
timeHolder.css('left', newLeft + "px");
if(jQuery.fn.below) timeHolder.below(el).hide();
@@ -125,7 +125,6 @@ $.fn.timePicker = function(options)
el.value = $(this).text();
$(this).parents("div.time-holder").hide();
options.onChange.apply(this, [el.value]);
-
}
).removeClass("selected");
}
diff --git a/APPL/Shared/default.csx b/APPL/Shared/default.csx
index be76c84089..d4fa29ac77 100644
--- a/APPL/Shared/default.csx
+++ b/APPL/Shared/default.csx
@@ -2922,6 +2922,10 @@ i.timeklikker {
cursor: pointer;
width: 0;
}
+i.flex.timeklikker {
+ left: -16px;
+ pointer-events: none;
+}
.flddatetime, .fldresstatus, #existingDates, #newDates, .fldmsgprio, .fldafspnum, .flddeel, .fldcnttarief {
width: 140px;
diff --git a/APPL/Shared/kenmerk_common.inc b/APPL/Shared/kenmerk_common.inc
index deee36dbca..7caab459ec 100644
--- a/APPL/Shared/kenmerk_common.inc
+++ b/APPL/Shared/kenmerk_common.inc
@@ -316,9 +316,11 @@ function listKenmerk(sql, module, key, props)
var idCounter = 1; // We maken alleen name/id-s voor de velden die ook echt bewerkt kunnen worden
var clabelCounter = 0; // Het aantal collapsable labels
var anyDate = false;
+ var anyTime = false;
var anyTextarea = false;
var kenmerkidref = new Array(); // Bijhouden welk kenmerk welke id referentie mee heeft gekregen
var dpYearRanges = []; // te gebruiker jaren voor datepicker vastleggen.
+ var minMax = []; // te gebruiker uren voor timepicker vastleggen.
var allCollapsable = false; // true bij eerste 'l'-label
var inMobileBlock = false; // true van begin mobile-collapse-content tot eind mobile-collapse-content
@@ -532,14 +534,14 @@ function listKenmerk(sql, module, key, props)
// En: voor type M is het altijd nu nog leeg, en die komen dus readonly nooit!
// Voorlopig laat ik die dan altijd maar zien (TODO: evt niet als er 0 bestanden zijn)
if (readonlyfield && !isParent && ktype != 'L' && ktype != 'l' && ktype != 'M' && (!flexkenmerkwaarde || flexkenmerkwaarde=="") &&
- (!kenmerk_search && (ktype == 'C' || ktype == 'N' || ktype == 'B' || ktype == 'D' || ktype == 'R' || ktype == 'S')) ) // Als geavanceerd dan maakt het niet uit of het readonly is. Dan moet je het kenmerk gewoon tonen.
+ (!kenmerk_search && (ktype == 'C' || ktype == 'N' || ktype == 'B' || ktype == 'D' || ktype == 'T' || ktype == 'R' || ktype == 'S')) ) // Als geavanceerd dan maakt het niet uit of het readonly is. Dan moet je het kenmerk gewoon tonen.
{
oRs.MoveNext();
continue;
}
// Als geavanceerd dan maakt het niet uit of het readonly is. Dan moet je het kenmerk gewoon tonen.
- if (kenmerk_search && readonlyfield && (ktype == 'C' || ktype == 'N' || ktype == 'B' || ktype == 'D' || ktype == 'R' || ktype == 'S'))
+ if (kenmerk_search && readonlyfield && (ktype == 'C' || ktype == 'N' || ktype == 'B' || ktype == 'D' || ktype == 'T' || ktype == 'R' || ktype == 'S'))
readonlyfield = false;
colCount++; // Nu pas ophogen.
@@ -1184,6 +1186,69 @@ function listKenmerk(sql, module, key, props)
val_seperator = '';
}
+ // ==========================================================================================
+ // =====================================================================
+ // KENMERKTYPE T (Time) =====================================================================
+ // =====================================================================
+ // ==========================================================================================
+ if (ktype == 'T')
+ {
+ if (kmin === null)
+ {
+ switch(module)
+ {
+ case "BEZ": kmin = S("vis_t1"); break;
+ case "PRS": kmin = S("prs_t1"); break;
+ case "RES": kmin = S("res_t1"); break;
+ default: kmin = S("fac_t_startofworkday"); break;
+ }
+ }
+ if (kmax === null)
+ {
+ switch(module)
+ {
+ case "BEZ": kmax = S("vis_t2"); break;
+ case "PRS": kmax = S("prs_t2"); break;
+ case "RES": kmax = S("res_t2"); break;
+ default: kmax = S("fac_t_endofworkday"); break;
+ }
+ }
+ kmin = String(kmin);
+ kmax = String(kmax);
+ if (kmin.indexOf(":") == -1) kmin += ":00";
+ if (kmax.indexOf(":") == -1) kmax += ":00";
+ if (kmin.split(":")[0].length == 1) kmin = "0" + kmin; // pad
+ if (kmax.split(":")[0].length == 1) kmax = "0" + kmax; // pad
+
+ minMax.push({id: idCounter, kmin: kmin, kmax: kmax});
+
+ kv = "";
+
+ if (!readonlyfield && !isExpression && !maskeren)
+ kv += "";
+
+ anyTime |= !readonlyfield;
+ }
+
// ===========================================================================
// De uitzonderingen hebben we nu gehad, alle overige types beginnen hetzelfde
// ===========================================================================
@@ -1294,6 +1359,7 @@ function listKenmerk(sql, module, key, props)
if (!readonlyfield && !isExpression && !maskeren)
kv += "";
+
// Als er voor een datumveld geen kmin en kmax is ingevuld dan is de yearRange default -10 tot +10 jaar vanaf geselecteerd jaar.
// Is een van beiden ingevuld dan wordt de andere op 10 jaar vanaf geselecteerde jaar gezet (deze verschuift met selectie).
// Een opgegeven waarde is het aantal jaren voor of na het huidige jaar (waarde < 1000), of een jaartal (waarde > 1000).
@@ -1715,7 +1781,6 @@ function listKenmerk(sql, module, key, props)
{
if ($.datepicker)
{
-
// jQuery datepicker
$(".fldflexD").not("[readonly]").datepicker({
// buttonImage: "../pictures/calendar2.png",
@@ -1759,7 +1824,7 @@ function listKenmerk(sql, module, key, props)
$(this).val($(this).attr("value").split("-").reverse().join("-"));
// Change hidden type field from 'D' to 'DN'
- var nativeId = $(this).attr("id").slice(0,-3);
+ var nativeId = $(this).attr("id").slice(0, -3);
$("input:hidden#"+nativeId+"t").val("DN");
});
}
@@ -1767,6 +1832,50 @@ function listKenmerk(sql, module, key, props)
<%
}
+ if (anyTime && !kenmerk_search)
+ {
+ // FCLTHeader.Requires is hier te laat
+ %><%
+ }
+
if (hasfilter)
{
%>
diff --git a/APPL/Shared/kenmerk_js.asp b/APPL/Shared/kenmerk_js.asp
index 3bb5daa34e..4804d6e480 100644
--- a/APPL/Shared/kenmerk_js.asp
+++ b/APPL/Shared/kenmerk_js.asp
@@ -110,6 +110,47 @@ function checkKenmerk(field, show, ktype, klen, kdec, kmin, kmax)
}
else valid = false;
}
+ else if (ktype == 'T')
+ {
+ // sta toe 14 -> 14:00h
+ // sta toe 930 -> 9:30h
+ // sta ook allerlei separators toe.
+ var TIME_RE = /^(\d*)[\/\.\-\: ]?(\d\d?)?$/;
+ posstime = value.match(TIME_RE);
+ if (posstime && posstime.length && !isNaN(parseInt(posstime, 10))) // er moet minstens iets goed zijn
+ {
+ var hh = parseInt(posstime, 10);
+ mm = 0;
+ if (posstime.length > 1 && posstime[2])
+ {
+ var mm = parseInt(posstime[2],10);
+ }
+ else // 930 voor 9:30h
+ if (hh > 100)
+ {
+ mm = hh % 100;
+ hh = Math.floor(hh / 100);
+ }
+ hh = hh % 24;
+ mm = mm % 60;
+ // Opgeschoonde waarde opslaan
+ $(field).val(String((hh<10?"0":"")+hh) + ":" + String((mm<10?"0":"")+mm), true);
+
+ if (kmin || kmax)
+ {
+ var kval = parseFloat(hh + "." + mm);
+ kmin = kmin ? parseFloat(kmin.split(":").join(".")) : 0;
+ kmax = kmax ? parseFloat(kmax.split(":").join(".")) : 24;
+ if (kmin > kval || kval > kmax)
+ {
+ valid = false;
+ error = "<%=L("lcl_mld_kenmerk_out_range")%>";
+ }
+ }
+ }
+ else
+ valid = false;
+ }
else if (ktype == 'C' || ktype == 'L' || ktype == 'Q')
{ // newlines verdubbelen naar %0D%0A dus aantal regels bijtellen
if (value.length + (value.split("\n").length-1) > klen) valid = false;
@@ -156,7 +197,7 @@ function checkKenmerk(field, show, ktype, klen, kdec, kmin, kmax)
}
}
}
- if (valid)
+ if (valid && ktype != 'T') // Time wordt hierboven al gecontroleerd
{
if ((kmin !== null) && (t < kmin)) { valid = false; error = "<%=L("lcl_mld_kenmerk_out_range")%>"; }
if ((kmax !== null) && (t > kmax)) { valid = false; error = "<%=L("lcl_mld_kenmerk_out_range")%>"; }