MNNL#40541 Flexkenmerktype tijd/time toegevoegd [2/2]
svn path=/Website/trunk/; revision=37385
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 = "<input type='text'"
|
||||
+ (!readonlyfield && kregexp ? " regexp='" + kregexp + "' " : "")
|
||||
+ (!readonlyfield
|
||||
? " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + ",\"" + kmin + "\",\"" + kmax + "\")"
|
||||
+ onchangeExp
|
||||
+ "' "
|
||||
: "")
|
||||
+ (!readonlyfield ? " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + ",\"" + kmin + "\",\"" + kmax + "\")' " : "")
|
||||
+ (readonlyfield || maskeren
|
||||
? " readonly tabindex=-1 "
|
||||
: " id='" + nameprefix + idCounter + "val' name='" + nameprefix + idCounter + "val' ")
|
||||
+ " class='"
|
||||
+ (kenmerk_search ? "fldSflexT " : "fldflexT ")
|
||||
+ (required ? required_class : "")
|
||||
+ (isExpression? " expression " : "")
|
||||
+ "'"
|
||||
+ (required ? " required='required' " : "")
|
||||
+ (isExpression? " readonly " : "")
|
||||
+ " value='" + safe.htmlattr(flexkenmerkwaarde) + "'"
|
||||
+ ">";
|
||||
|
||||
if (!readonlyfield && !isExpression && !maskeren)
|
||||
kv += "<i class=\"fa fa-clock-o fa-fw flex timeklikker\"></i>";
|
||||
|
||||
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 += "<i class=\"fa fa-calendar fa-fw dateklikker\" onclick=\"$('#" + nameprefix + idCounter + "val').datepicker('show')\"></i>";
|
||||
|
||||
// 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)
|
||||
</script><%
|
||||
}
|
||||
|
||||
if (anyTime && !kenmerk_search)
|
||||
{
|
||||
// FCLTHeader.Requires is hier te laat
|
||||
%><script type="text/javascript">
|
||||
|
||||
$(function()
|
||||
{
|
||||
if (typeof Modernizr == "undefined" || !Modernizr.inputtypes.time)
|
||||
{
|
||||
|
||||
// Kan niet achteraf
|
||||
var minMax = [];
|
||||
<% for (i=0; i < minMax.length; i++)
|
||||
{ %>
|
||||
minMax[<%=minMax[i].id%>] = {"kmin": "<%=minMax[i].kmin%>", "kmax": "<%=minMax[i].kmax%>"}; <%
|
||||
} %>
|
||||
|
||||
$(".fldflexT").not("[readonly]").each(function() {
|
||||
$(this).timePicker({
|
||||
step: 15,
|
||||
startTime : minMax[$(this).attr("id").slice(1, -3)].kmin,
|
||||
endTime : minMax[$(this).attr("id").slice(1, -3)].kmax,
|
||||
columns : <%=S("timepickercolumns")%>,
|
||||
onChange : function () {
|
||||
$timeInput = $(this).parents("div.time-holder").prev("input.fldflexT")
|
||||
$timeInput.removeClass("bad");
|
||||
$timeInput.trigger("change");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// Native timepicker
|
||||
$(".fldflexT").not("[readonly]").each(function() {
|
||||
|
||||
// Make this a native timepicker
|
||||
$(this).attr("type", "time");
|
||||
});
|
||||
}
|
||||
});
|
||||
</script><%
|
||||
}
|
||||
|
||||
if (hasfilter)
|
||||
{
|
||||
%>
|
||||
|
||||
@@ -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")%>"; }
|
||||
|
||||
Reference in New Issue
Block a user