MNNL#40541 Flexkenmerktype tijd/time toegevoegd [2/2]

svn path=/Website/trunk/; revision=37385
This commit is contained in:
2018-03-16 17:14:21 +00:00
parent 9441a1ace7
commit ade458e962
5 changed files with 167 additions and 11 deletions

View File

@@ -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();

View File

@@ -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");
}

View File

@@ -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;

View File

@@ -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)
{
%>

View File

@@ -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")%>"; }