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.

Es sind einige Grundkenntnisse im Mysql und Linux notwendig. Ebenfalls sind noch einige Linux Kenntnisse nötig, da ich die Anleitung auf einem 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 mache 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 Datumsfomatierung 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 habe 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 ärgerlich und ich suche gerade eine Lösung dafür. Update folgt.

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

Schreiben Sie einen Kommentar

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