vTiger 5.3 / 5.4 auf deutsches Datumsformat dd.mm.yyyy umstellen [UPDATE 5.4]

April 25th, 2012 7 comments

Hallo Leute,

UPDATE Die nachfolgende Beschreibung kann auf vTiger 5.3 UND 5.4 angewendet werden.

Vielen Dank für das umfassende positive Feadback auf die erste Beschreibung.
Deshalb möchte ich mit diesem Post meine Anpassungen des Datums-Formates im vTiger für die Version 5.30 / 5.40 aktuallisieren.
Da das Team hinter vTiger in dieser Version größere Anpassungen in diesem Bereich gemacht haben, sind die Änderungen leider komplett anders. Allerdings deutlich übersichtlicher gewurden.
Da ich finde, dass sich der Ablauf bewährt hat, hier der übliche Ablauf der Änderungen:

Von Haus aus unterstützt das CRM leider nur die folgenden Formate:

  1. yyyy-mm-dd
  2. dd-mm-yyyy
  3. mm-dd-yyyy

Punkt 2 kommt dem deutschen Format “dd.mm.yyyy” zwar schon sehr nahe, wirkt aber doch unprofessionell, da auf ausgehenden Rechnungen das Datum mit “10-02-2009″ angegeben ist.
“Kein Problem”, dachte ich mir und begann das System zu untersuchen … und verstand langsam, warum es nicht alzu viele Extensions zu dem System gibt. … Es ist einfach unheimlich komplex.

Lösung

Zu erst, habe ich in der Tabelle “vtiger_date_format” eine Zeile mit folgendem Inhalt eingefügt:

date_formatid : 4
date_format : dd.mm.yyyy
sortorderid : 0
presence : 1

Die Spalte sortorderid kann natürlich angepasst werden, um die Formatauswahl umzusortieren. Bei mir war einzig das deutsche Format notwendig, weshalb es auch an erster Stelle erscheinen sollte, damit es als Standard gewählt wird.

Daraufhin fingen die Probleme an. Erst wurden zu importierten eMails (Die Anpassung fand während der Einrichtung des Systems statt) keine Sende-Daten mehr gespeichert, dann verschwanden Geburtsdaten und Rechnungsdaten.
Das Ergebnis war also wenig zufriedenstellend, sodass ich motiviert weitergesucht habe.

Daraufhin habe ich in folgenden Dateien noch Änderungen gemacht, damit das deutsche Datumsformat verfügbar ist. (Die Zeilenangaben richten sich jeweils an ein vTiger Version 5.21)
Ich versuche die Positionen aber zu beschreiben, sodass auch andere Version davon profitieren können.

/include/utils/CommonUtils.php

Funktion : parse_calendardate(…) [Line ~221]

In if-Anweisung integrieren, bzw. einfach dahinter schreiben:

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

/include/fields/DateTimeField.php

Funktion : __convertToDBFormat(…) [Line ~95]
folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar)

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

An dieser Stelle wird leider ab und zu ein Format dd-mm-yyyy und die Einstellung des Users dd.mm.yyyy übergeben. Deshalb nochmal der Check.

Funktion: __convertToUserFormat((…) [Line ~157]

folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar)

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

Funktion:  convertToUserFormat(…) [Line ~139]
An dieser Stelle wird das Standard-Format des Vtigers auf dd.mm.yyyy gesetzt. Diese Einstellung ist besonders für die Extension PDFMaker relevant, da diese für Datumsausgaben in PDF’s aus einem Workflow genutzt wird.
Suchen:

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

ersetzen:

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

Funktion:  convertToDBFormat(…) [Line ~139]

Suchen:

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

ersetzen:

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

include/js/general.js

Funktion: patternValidate(..)

Diese Position überprüft eingegebene Datumsangaben und muss ebenfalls um dd.mm.yyyy erweitert werden.
Folgendes suchen:

case "mm-dd-yyyy" :
case "dd-mm-yyyy" :
     var re = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

und folgendermaßen ergänzen:

case "mm-dd-yyyy" :
case "dd-mm-yyyy" :
case "dd.mm.yyyy" :
     var re = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

Funktion splitDateVal(…)
Folgendes suchen:

case "dd-mm-yyyy" :
     dateelements[0]=dateval.substring(0,dateval.indexOf(datesep))
     dateelements[1]=dateval.substring(dateval.indexOf(datesep)+1,dateval.lastIndexOf(datesep))
     dateelements[2]=dateval.substr(dateval.lastIndexOf(datesep)+1,dateval.length)

daraus folgendes machen (case “dd.mm.yyyy” für “dd-mm-yyyy” einfügen)

case "dd-mm-yyyy" :
case "dd.mm.yyyy" :
     dateelements[0]=dateval.substring(0,dateval.indexOf(datesep))
     dateelements[1]=dateval.substring(dateval.indexOf(datesep)+1,dateval.lastIndexOf(datesep))
     dateelements[2]=dateval.substr(dateval.lastIndexOf(datesep)+1,dateval.length)

Funktion: re_patternValidate(…) [~LIne 4262]

Suchen:

                        case "dd-mm-yyyy" :
                                var re = /^\d{1,2}(-)\d{1,2}\1\d{4}$/

Daraus folgendes machen:

                        case "dd-mm-yyyy" :
                        case "dd.mm.yyyy" :
                                var re = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

include/ComboStrings.php

Um Line 304 steht die Zuweisung

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

Daraus folgendes machen:

'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'
                     ),

Bitte zuletzt noch das Datumsformat rechts oben unter “Meine Einstellungen” aktuallisieren, damit Ihr auch eine Änderung sehen könnt.

Die anderen Updates für 5.30 kommen heute im Laufe des Tages online.

Bis dahin!

Bye

Patch für vTiger 5.40:

Neues vTigerCRM 5.4.0 Release

April 20th, 2012 No comments

Es geht relativ flott weiter, nachdem das 5.3.0 Release nicht unbedingt zu den besten Versionen des CRM gehört hat.

In Version 5.4.0 wurden neben vielen Änderungen im Hintergrund, besonders auch im Frontend wichtige Anpassungen durchgeführt.

Die offensichtlichste Änderung betrifft das Menü, welches jetzt die wichtigsten Module sofort per Klick erreichbar macht.

Dieses Release und einige vergangene Erfahrungen habe ich zum Anlass genommen, dieses Blog zweisprachig zu führen.

Da ich die Modifikationen einheitlich gestalte und Suche/Ersetze auch auf Englisch verständlich sind, werde ich die Änderungen selbst aber nur noch auf der englischen Version dieses Blog veröffentlichen.
Zu finden sein wird dieses unter folgender URL:

http://vtiger.stefanwarnat.de

Damit möchte ich versuchen, dass 1. auch englischsprachige User etwas von meinen Modifikationen haben und 2. ich das Thema vTiger auf lange Sicht aus meinem ursprünglich privatem Blog ausgliedern kann.

Ich hoffe natürlich, dass die englische Sprache niemanden davon abhält, meine Tipps zu verfolgen.

Bye,

Stefan

Categories: Dies und Das Tags:

Erweitere Absendereinstellungen im eMail Workflow – Modul des vTigers

April 11th, 2012 1 comment

Hallo!

Diesmal geht es darum, dass ich eine Frage zu den Absendereinstellungen der “Sende eMail” Aufgabe im Workflow – Modul, beantwortet habe und dafür die vor einiger Zeit gepostete Modifikation für diese Einstellungen nochmals erweitert habe.

Es bestand der Wunsch, dass als Absender der Workflow-Mails keine feste Angabe angegeben werden muss, sondern der jeweilig zugewiesene User als Absender eingesetzt werden kann, sodass die Leads oder Personen von keinen unbekannten Adressen angeschrieben werden, wenn es eine feste Kontaktperson gibt.

Ich habe dazu die Möglichkeit der Auswahl dieser Einstellung von den Empfänger-Feldern einfach auf die Absender-Felder ausgedehnt, sodass keinerlei große Änderungen am Code vorgenommen werden müssen. Es werden schon vorhandene vTiger-Funktionen genutzt.

Da ich mir endlich eine umfangreiche Testsuite aufgebaut habe, kann ich diese Modifikation als voll getestet für vTiger 5.2.0 / 5.2.1 / 5.3 und 5.4.0 RC1 herausgeben.
Ich hoffe, dass diese Änderung auch im 5.4 oder 5.5 Zweig mit aufgenommen wird, da es eine recht nützliche Funktion ist und ab 5.4 selbst Informationen zum zuletzt bearbeiteten User eingesetzt werden können.

Bei dieser Modifikation besteht das geringe Potential die PDFMaker Extension aus der Mail-Workflow Aufgabe auszusperren. die entsprechende Stelle ist gekennzeichnet.

Da sich die Änderungen zwischen den Versionen eigentlich nicht unterscheiden, sollte man mit dieser Anleitung alle oben genannten Versionen patchen können.

module/com_vtiger_workflow/tasks/VTEmailTask.inc

Funktion: getFieldNames()

Suchen:

return array("subject", "content", "recepient", 'emailcc', 'emailbcc', [...]

In Array am Ende einfügen: (Zeile enthält evtl. Code aus PDFMaker, weshalb man Sie nicht komplett ersetzen sollte)

, 'from_mail', 'from_name'

Funktion: doTask()

Suchen und auskommentieren: (~ Zeile 3  in Funktion)

$result = $adb->query("select user_name, email1, email2 from vtiger_users where id=1");
$from_email = $adb->query_result($result,0,'email1');
$from_name = $adb->query_result($result,0,'user_name');

Suchen:

$entityCache = new VTEntityCache($admin);

Danach einfügen:

if(!empty($this->from_mail)) {
  $et = new VTEmailRecipientsTemplate($this->from_mail);
  $from_email = trim($et->render($entityCache, $entity->getId()), ",");
  $et = new VTEmailRecipientsTemplate($this->from_name);
  $from_name = trim($et->render($entityCache, $entity->getId()), ",");
} else {
  $result = $adb->query("select user_name, email1, email2 from vtiger_users where id=1");
  $from_email = $adb->query_result($result,0,'email1');
  $from_name = $adb->query_result($result,0,'user_name');
}

module/com_vtiger_workflow/resources/emailtaskscript.js

Da es sich hier um eine komplexe JavaScript Datei handelt, ist besonders das Auffinden der korrekte Position zum bearbeiten schwieriger. Also bitte hier besonders darauf achten!

Funktion: vtinst.listTypes(handleError(function(accessibleModules) {

Suchen:

$('#task-fieldnames').change(function(){

Nach diesem Block (endet mit “});” ), folgende Zeilen einfügen:

/** ADDED BY SWARNAT START FROM-EMAIL **/
 fillSelectBox('task-emailfieldsfrom', modules, moduleName,
 function(e){return e['type']['name']=='email';});
 $('#task-emailfieldsname-busyicon').hide();
 $('#task-emailfieldsname').show();
 $('#task-emailfieldsname').change(function(){
   var input = $($('#save_from_name').get());
   var value = '$'+$(this).attr('value');
   input.attr("value", input.attr("value")+','+value);
 });
 fillSelectBox('task-emailfieldsname', modules, moduleName,
 function(e){ return e['name'].indexOf("name") != -1});
 $('#task-emailfieldsfrom-busyicon').hide();
 $('#task-emailfieldsfrom').show();
 $('#task-emailfieldsfrom').change(function(){
   var input = $($('#save_from_mail').get());
   var value = '$'+$(this).attr('value');
   input.attr("value", input.attr("value")+','+value);
 });
 /** ADDED BY SWARNAT ENDE FROM-EMAIL **/

Smarty/templates/com_vtiger_workflow/taskforms/VTEmailTask.tpl

Suchen:

<table border="0" cellpadding="5" cellspacing="0" width="100%">

Danach einfügen:

<tr>
  <td class='dvtCellLabel' align="right" width=15% nowrap="nowrap">* From Name</td>
  <td class='dvtCellInfo'><input type="text" name="from_name" value="{$task->from_name}" id="save_from_name" class="form_input" style='width: 250px;'>
  <span id="task-emailfieldsname-busyicon"><b>{$MOD.LBL_LOADING}</b><img src="{'vtbusy.gif'|@vtiger_imageurl:$THEME}" border="0">
  <select id="task-emailfieldsname" class="small" style="display: none;"><option value=''>{$MOD.LBL_SELECT_OPTION_DOTDOTDOT}</option></select></td>
</tr>
<tr>
  <td class='dvtCellLabel' align="right" width=15% nowrap="nowrap"><b><font color=red>*</font> From Mail</b></td>
  <td class='dvtCellInfo'><input type="text" name="from_mail" value="{$task->from_mail}" id="save_from_mail" class="form_input" style='width: 250px;'>
  <span id="task-emailfieldsfrom-busyicon"><b>{$MOD.LBL_LOADING}</b><img src="{'vtbusy.gif'|@vtiger_imageurl:$THEME}" border="0"></span>
  <select id="task-emailfieldsfrom" class="small" style="display: none;"><option value=''>{$MOD.LBL_SELECT_OPTION_DOTDOTDOT}</option></select></td>
</tr>

/Und da das Suchen und Bearbeiten immer recht umständlich ist, habe ich hier noch 3 patch-Files vorbereitet. (Jeweils einmal für 5.2.0/5.2.1, 5.3 und 5.4 RC1)

Diese überschreiben allerdings jegliche Anpassungen in diesen Files. Speziell eine Änderung dürfte Probleme in Kombination mit dem PDFMaker bereiten, wenn Sie automatisiert ausgeführt wird. (Dabei handelt es sich um die erste Änderung im File module/com_vtiger_workflow/tasks/VTEmailTask.inc)

Bei Fragen und Problemen stehe ich, soweit es meine Zeit zulässt, jederzeit gerne über die Kommentarfunktion zur Verfügung.

Stefan

Patch-Files:
5.2.0/1
5.3.0
5.4.0 RC1

Categories: Dies und Das Tags:

Page optimized by WP Minify WordPress Plugin