VTiger umstellen auf Deutsches/Europäisches Datumsformat – Version VTiger7.1

Anhand der VTiger Version 7.1 stelle ich euch hier den Weg vor, wie man das Datumsformat auf Deutsch, bzw auf Europäisch umstellt. Hier geht es darum auch die Darstellung des Datums im VTiger und auch beim Export nach Excel oder nach PDF zu berücksichtigen.

Hierfür sind einige Grundkenntnisse im SQL und Linux notwendig. Ebenfalls sind noch einige Editierkenntnisse nötig, da ich die Anleitung für ein Linux-Sytem angepasst habe.
Bitte beachtet, dass es auf eure eigene Gefahr hin passiert. Ich bin für Fehler nicht verantwortlich. Ebenso muss der Vorgang wiederholt werden, wenn ihr eine Update oder Upgrade vom VTiger macht. Diese Anleitung ist aktuell für VTiger7.1 und es kann nicht ausgeschlossen werden, dass es in zukünftigen Versionen so nicht mehr funktioniert.

 

Hier die Schritte im Einzelnen

0. Wir gehen in den Ordner vor der Installation vom VTiger

Hier machen wir eine Kopie der aktuellen Installation, damit wir ein mögliches Backup haben, auf das wir zurück greifen können.

cp -ar vtigercrm vtigercrm_backup

1. MYSQL – Neuer Eintrag in die ‹vtiger_date_format› Tabelle mit folgender Query:

INSERT INTO `vtiger_date_format` (`date_formatid`, `date_format`, `sortorderid`, `presence`) VALUES (4, 'dd.mm.yyyy', 0, 1);

Der Wert in der Spalte 3 ’sortorderid› ist die Priorität in der Darstellung der Datumsformate bei der Auswahl.

Zusätzlich würde ich die Reihenfolge der Sortierung noch abändern und den Default weiter nach hinten schieben:

UPDATE vtiger_date_format SET sortorderid=1 WHERE date_format='dd-mm-yyyy';

2. File: vtlib/Vtiger/Functions.php

Function: currentUserJSDateFormat [Zeile 31]

An den ersten IF-Anweisungsblock [Zeile 30++] die folgenden Zeilen Code anhängen:

elseif ($current_user->date_format == 'dd.mm.yyyy') {
   $dt_popup_fmt = "%d.%m.%Y";
}

Function: currentUserDisplayDate [Zeile 52]

Innerhalb der Funktion das Datumsformat mit dem Folgenden ersetzen:

if ($dat_fmt == '') {
$dat_fmt = 'dd.mm.yyyy';
}

3. File: include/fields/DateTimeField.php

Funktion : __convertToDBFormat [Zeile 110]

Hier den folgenden Code in die IF Anweisung zusätzlich einfügen:

elseif ($format == 'dd.mm.yyyy') {
       if(strpos($date, "-") !== false) {
             list($d, $m, $y) = explode('-', $date);
       } else {
             list($d, $m, $y) = explode('.', $date);
       }
}

Funktion: convertToUserFormat [Zeile 152]

Hier stellen wird das Standard-Format im Vtiger auf dd.mm.yyyy

if(empty($format)) {
    $format = 'dd-mm-yyyy';
}

Zeile ersetzen mit:

if(empty($format)) {
    $format = 'dd.mm.yyyy';
}

Funktion: __convertToUserFormat [Zeile 173]

Hier den folgenden Code in die IF Anweisung zusätzlich einfügen:

elseif ($format == 'dd.mm.yyyy') {
                        $date[0] = $d . '.' . $m . '.' . $y;
}

4. File: include/ComboStrings.php [Zeile 305 ]

Bitte den ganzen Block ersetzen oder die eine zweite Zeile akkurat hinzufügen.

'date_format_dom'

mit:

'date_format_dom' => Array('dd-mm-yyyy'=>'dd-mm-yyyy',
                           'dd.mm.yyyy'=>'dd.mm.yyyy',
                            'mm-dd-yyyy'=>'mm-dd-yyyy',
                            'yyyy-mm-dd'=>'yyyy-mm-dd'
                     ),

5. File: modules/Calendar/RepeatEvents.php

Funktion: formattime [Zeile 45]

Hier bitte in die Switch-Anweisung das Folgenden hinzufügen:

case 'dd.mm.yyyy': $format_string = 'd.m.Y H:i'; break;

6. File: resources/app.js

Funktion: convertToDatePickerFormat[Zeile 540]

Hier bitte wieder den folgenden Block zusätzlich in die IF-Anweisung einfügen.

 else if (dateFormat == 'dd.mm.yyyy') {
            return 'd.m.Y';
        }

Funktion: convertTojQueryDatePickerFormat [Zeile 552]

In der Funktion muss etwas mehr geändert werden, daher bitte die folgende Zeile mit dem gesamten Folgeblock ersetzen:

var splitDateFormat = dateFormat.split('-');

Ersetzungsblock:

  var dotMode = false;
  if(dateFormat.indexOf(".") != -1 && dateFormat.indexOf("-") == -1) {
      dotMode = true;
  }
  var splitDateFormat = dateFormat.split(dotMode?'.':'-');

Zusätzlich in der nächsten For-Schleife [Zeile 565] diese Zeile in den Block drunter ersetzen.

  var joinedDateFormat =  splitDateFormat.join('-');

Austauschen mit diesen Codezeilen:

  var joinedDateFormat =  splitDateFormat.join(dotMode?'.':'-');

7. File layouts/vlayout/modules/Vtiger/resources/dashboards/Widget.js

Funktion: convertToDateRangePicketFormat [Zeile 93]

Hier bitte wieder den folgenden Block zusätzlich in die IF-Anweisung einfügen.

else if(userDateFormat == 'dd.mm.yyyy') {
       return 'dd.MM.yyyy';
}

8. File: resources/helper.js

Funktion: getDateInstance [ab Zeile 59]

Folgende Zeilen müssen ersetzt werden. Der <..Snip..> Teil muss so erhalten bleiben :

var splittedDate = dateComponent.split("-");
<..snip..>
var splittedDateFormat = dateFormat.split("-");

Austauschen mit diesen Codezeilen:

var dotMode = false;
if(dateComponent.indexOf(".") != -1 && dateComponent.indexOf("-") == -1) {
      dotMode = true;
}
var splittedDate = dateComponent.split(dotMode?".":"-");
<..snip..> bis Zeile 67
var splittedDateFormat = dateFormat.split(dotMode?".":"-");

 

Das Ergebnis ist klasse. Danach kann man in der Übersicht das Datumsformat richtig sehen und die Darstellung ist perfekt an Europa angepasst.

Ebenfalls sind beim Export nach Excel oder PDF die Datumsformatierung angepasst.

Bild dazu:

vtiger vtiger7 excel export datum datumsformat deutsch europäisch

 

 

 

 

Ich danke den Leuten im Internet für diese Codezeilen und hoffe ich kann mit diesen Zeilen der Verbreitung von VTiger etwas Aufwind verleihen. Ich hoffe auch, dass endlich mal der VTiger dann auch in Europa Verbreitung findet und diese CodeSchnipsel in den Standard aufgenommen werden.

 

Known Problems:

10.Mai 2019: Wenn man diese Änderungen gemacht hat, haben wir noch ein Problem mit dem Datumsänderungen in einigen Module, welche via DatePicker funktionieren. Dort ist ein Wechseln des Datum aktuell nicht möglich, weil das Datumsformat nicht erkannt wird. Das ist ärgerlich und ich suche gerade eine Lösung dafür. Update folgt.

Update/Solution:

Das File muss angepasst werden: layouts/v7/resources/helper.js

Ab Zeile 85 die Function: getDateInstance um diesen farbigen Code ergänzen bzw. austauschen:

       getDateInstance : function(dateTime,dateFormat, fieldType){
               var dateTimeComponents = dateTime.split(" ");
               var dateComponent = dateTimeComponents[0];
               var timeComponent = dateTimeComponents[1];
               var seconds = '00';
               var splitter = '-';
               if ( dateComponent.includes(".") ) {
                      splitter = '.';
                }

               var splittedDate = dateComponent.split(splitter);
       if(splittedDate.length > 3) {
           var errorMsg = app.vtranslate("JS_INVALID_DATE");
           throw errorMsg;
       }
               var splittedDateFormat = dateFormat.split(splitter);
<....snip>

Diese Lösung ist aber leider nicht mit M$- IE kompatible. Update folgt, sobald das auch geht.

 

VTiger Erweiterung für User History View

Du möchtest auch die richtigen User sehen, welche Updates gemacht haben und nicht immer nur Admin, dann folge mir hier weiter -> (Vtiger Admin Solution)

 

Und ich möchte noch mal betonen, dass ihr die Änderungen auf eure eigene Gefahr hin gemacht habt. Ich bin nicht dafür verantwortlich, wenn ihr Tippfehler macht oder welche von mir aus versehen übernehmt.


Über den Author

One thought on “VTiger 7.1 – umstellen auf Deutsches/Europäisches Datumsformat

  1. Hi, ich habe die Schritte befolgt und das kuriose ist, dass es bei einer Testinstallation geklappt hat. Nun habe ich Vtiger 7.1.0 nochmal neu aufgesetzt, es läuft auch alles zufriedenstellend, aber die Datumsumstellung funktioniert nicht, obwohl ich die gleichen Dateien verwendet habe. An was kann das denn liegen?

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

10 + three =