Schnelle Datumseingabe ohne Trenner
authorG. Richardson <information@kivitendo-premium.de>
Tue, 21 Oct 2014 00:07:07 +0000 (02:07 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Thu, 4 Dec 2014 12:41:22 +0000 (13:41 +0100)
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.

js/common.js

index 9160115..3a85529 100644 (file)
@@ -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");