From: G. Richardson Date: Tue, 21 Oct 2014 00:07:07 +0000 (+0200) Subject: Schnelle Datumseingabe ohne Trenner X-Git-Tag: release-3.2.0beta~216 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=8ee89b95149768690e3b09ba19b59b93986fbc1e;p=kivitendo-erp.git Schnelle Datumseingabe ohne Trenner Buchhalter sind es gewohnt, das Datum im Nummernblock ohne Punkte eingeben zu können, z.B. wird aus 01122014 -> 01.12.2014 Mit diesem Patch wird im Datumsfeld noch vor der Prüfung auf ein gültiges Datumsformat per Javascript geprüft, ob * die Eingabe nur aus Zahlen besteht * das Datumsformat dd.mm.yy, dd-mm-yy oder mm-dd-yy ist Trifft dies zu, werden am Beispiel für den Fall dd.mm.yy folgende Umwandlungen durchgeführt: 8 Zahlen: 31122014 -> 31.12.2014 6 Zahlen: 311214 -> 31.12.2014 4 Zahlen: 3112 -> 31.12.2014 aktuelles Jahr wird angenommen 1-2 Zahlen: 12 -> 31.10.2014 aktueller Monat wird angenommen 7 -> 07.10.2014 aktueller Monat wird angenommen Nach der Umwandlung findet wie bisher eine (simple) Plausibilitätsprüfung des Datums per Javascript statt. Sollte das Datumsfeld andere Datumsfelder beeinflussen, wie z.B. das Rechnungsdatum das Fälligkeitsdatum im Ein- und Verkauf durch ein onChange, muß hier eventuell mit einem setTimeOut gearbeitet werden, da ansonsten der Wert vor der Umwandlung genommen wird. --- diff --git a/js/common.js b/js/common.js index 916011503..3a855299f 100644 --- a/js/common.js +++ b/js/common.js @@ -64,6 +64,46 @@ function check_right_date_format(input_name) { if(input_name.value == "") { return true; } + + if ( ( input_name.value.match(/^\d+$/ ) ) && !(dateFormat.lastIndexOf("y") == 3) ) { + // date shortcuts for entering date without separator for three date styles, e.g. + // 31122014 -> 12.04.2014 + // 12312014 -> 12/31/2014 + // 31122014 -> 31/12/2014 + + if (input_name.value.match(/^\d{8}$/)) { + input_name.value = input_name.value.replace(/^(\d\d)(\d\d)(\d\d\d\d)$/, "$1" + seperator + "$2" + seperator + "$3") + } else if (input_name.value.match(/^\d{6}$/)) { + // 120414 -> 12.04.2014 + input_name.value = input_name.value.replace(/^(\d\d)(\d\d)(\d\d)$/, "$1" + seperator + "$2" + seperator + "$3") + } else if (input_name.value.match(/^\d{4}$/)) { + // 1204 -> 12.04.2014 + var today = new Date(); + var year = today.getYear(); + if (year < 999) year += 1900; + input_name.value = input_name.value.replace(/^(\d\d)(\d\d)$/, "$1" + seperator + "$2"); + input_name.value = input_name.value + seperator + year; + } else if ( input_name.value.match(/^\d{1,2}$/ ) ) { + // assume the entry is the day of the current month and current year + var today = new Date(); + var day = input_name.value; + var month = today.getMonth() + 1; + var year = today.getYear(); + if( day.length == 1 && day < 10) { + day='0'+day; + }; + if(month<10) { + month='0'+month; + }; + if (year < 999) year += 1900; + if ( dateFormat.lastIndexOf("d") == 1) { + input_name.value = day + seperator + month + seperator + year; + } else { + input_name.value = month + seperator + day + seperator + year; + } + }; + } + var matching = new RegExp(dateFormat.replace(/\w/g, '\\d') + "\$","ig"); if(!(dateFormat.lastIndexOf("y") == 3) && !matching.test(input_name.value)) { matching = new RegExp(dateFormat.replace(/\w/g, '\\d') + '\\d\\d\$', "ig");