Cebit – Und ein eindeutiges Bekenntnis

January 12th, 2012 No comments

Hallo Leser!

Gerade habe ich ein wirklich sehr erfreuliche News gelesen.
Ein Microsoft Sprecher hat sich über die Organisation der CES in Las Vegas beklagt und nochmals die Entscheidung bekräftigt auf der CEBIT in Deutschland stärkere Präsenz zu zeigen.
Da Microsoft schon immer ein sehr wichtiger Partner der CEBIT war und, einer Meinung nach, auch immer einen der besten Stände unterhalten hat, erscheint mit die CEBIT doch noch nicht gestorben. Ganz im Gegenteil, wie die nächste News dazu verrät:

Eric Schmidt von Google wird zusammen mit Angela Merkel die Eröffnungsveranstaltung halten.

Es scheint dieses Jahr also ein interessantes CEBIT-Jahr für alle Webentwickler zu werden. Ich zu mindestens freue mich darauf und werde versuchen bei dieser Eröffnungsveranstaltung anwesend zu sein.

Aber auch wenn dies nicht klappen sollte, bin ich sicherlich auf der CEBIT anzutreffen und werde im Nachhinein auch darüber berichten!

Stefan

Categories: Dies und Das Tags:

Im vTiger 5.3 – Workflow den Absender von eMails angeben

December 5th, 2011 No comments

Hallo,

Damit es auch mal etwas Neues gibt, hier eine Beschreibung für eine unveröffentlichte Anpassungen meiner vTiger Systeme.

Ich hatte schon öfters das Problem, dass mein vTiger eMails über das Workflow-Modul versenden musste, ich aber den Absender der eMail nirgendwo konfigurieren konnte.

Das mag bei einem festen Absender kein Problem sein, da einfach die Angabe aus dem Admin-User genutzt wird.
Wenn aber der vTiger so angelegt ist, und davon gehe ich meistens aus, dass er mehrere Funktionen übernimmt, dann bekommt man schnell Probleme ob man username@domainA.de oder username@domainB.de nehmen sollte.

Deshalb hier eine kleine Beschreibung, wieder mit Archiv und diff-File, damit man im Aktionsteil eines Workflows diese Angabe unkompliziert konfigurieren kann.

modules/com_vtiger_workflow/tasks/VTEmailTask.inc

Da die beliebte Extension “PDFMaker”, bzw. Ihre Workflow Extension, an dieser Datei ebenfalls Änderungen durchführt, ist hier etwas Vorsicht geboten!

Funktion:  getFieldNames(..) [~Line 18]

Suchen: (Evtl. sieht diese Funktion durch PDFMaker anders aus)

return array("subject", "content", "recepient", 'emailcc', 'emailbcc');

In der Auflistung, am Ende, zwei Werte ergänzen:

,'from_mail', 'from_name'

Die Zeile sollte dann ungefähr folgendermaßen aussehen, wenn kein PDFMaker installiert ist:

return array("subject", "content", "recepient", 'emailcc', 'emailbcc', 'from_mail', 'from_name');

Mit PDFMaker steht noch der Wert ‘template’ in dieser Übersicht.

Funktion:  doTask(..) [~Line 21]

Suchen:

		$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');

Ersetzen mit folgendem Code:

		if(!empty($this->form_mail)) {
			$from_email = $this->from_mail;
			$from_name  = $this->from_name;
		} 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');
		}

Smarty/templates/com_vtiger_workflow/taskforms/VTEmailTask.tpl

Auch hier wieder der Hinweis bzgl. PDFMaker!

Suchen:

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

Danach einfügen:

	<tr>
		<td class='dvtCellLabel' align="right" width=15% nowrap="nowrap"><b><font color=red>*</font> From Name</b></td>
		<td class='dvtCellInfo'><input type="text" name="from_name" value="{$task->from_name}" id="save_from_name" class="form_input" style='width: 250px;'></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;'></td>
	</tr>

Das wars schon.
Ab jetzt habt Ihr 2 Felder für Absender Name und eMail. Wenn da nichts angegeben wird, dann wird auch weiterhin die Angabe vom Admin genutzt!

Hier noch das Archiv der Files: workflow_mailabsender

Und das Patch-File: workflow_mailabsender (Macht PDFMaker Workflow-Extension ebenfalls unbrauchbar)

Viel Spaß damit!

Bye
Stefan

Categories: Dies und Das Tags:

vTiger 5.3 auf deutsches Datumsformat dd.mm.yyyy umstellen

December 2nd, 2011 No comments

Hallo Leute,

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 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" :
<strong>case "dd.mm.yyyy" :</strong>
     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.

Ein Archiv mit allen bereits angepassten Files habe ich [Download herausgenommen] zum Download hochgeladen. Dabei bitte beachten, dass die Änderungen in ein Neues 5.30 gemacht wurden und alle Modifikationen überschreiben.

Andernfalls hier eine [Download herausgenommen] um das ganze automatisch einzutragen.
In beiden Fällen muss die Datenbankänderung aus dem ersten Schritt trotzdem durchgeführt werden!

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

Bis dahin!

Bye

UPDATE

Entweder durch einen Bug im vTiger oder eine ungünstige Programmierung  musste ich eine Stelle aktuallisieren.

Und ist die Funktion __convertToDBFormat in der DateTimeField.php von mir etwas erweitert wurden.
Deshalb habe ich auch nochmal die PATCH-Datei und das Archiv herausgenommen.

Kommentare im vTiger auch Angeboten und Rechnungen hinzufügen

November 9th, 2011 No comments

Hallo,

Wiedereinmal gibt es eine Änderung am vTiger CRM – Core System um mit dem System noch besser arbeiten zu können.

Inzwischen ist auch mit dem Release Candidate von Version 5.3 ein Nachfolger der aktuellen Version 5.21 erschienen. Bei kurzen Testläufen habe ich aber nur beim kurzen Prüfen noch einige gravierende Fehler gefunden.

Diesmal geht es aber darum, dass ich gerne auch bei Angeboten und Rechnungen, kurze Kommentare verfassen würde, welche mit Verfasser und Datum gespeichert werden.
Da dies bei Organisationen, Personen und Leads bereits möglich ist, wollte ich diese Funktionalität auch gerne in anderen Modulen nutzen. Damit möchte ich eine bessere und einheitlichere Usability erreichen, da man ein System an verschiedenen Stellen nutzen kann und sich dies auch nur einmal erklären lassen muss.

Diesmal ist die Anpassung auch sehr sehr kurz und besteht einzig aus 3 MySQL-Queries, welche in der DB ausgeführt werden müssen.
Nutzer anderer DB-Systeme, müssten sich selber helfen und die Werte kopieren. :)

Bitte diese fertigen Querys nur dann nutzen, wenn Ihr noch nichts in der Tabelle vtiger_links geändert habt. Ansonsten müsst Ihr die `linkid` an eure nächste freie ID anpassen.
Wenn Ihr euch da nicht sicher seid, dann könnt Ihr diese Querys problemlos benutzen. Darin ändert man nur wissentlich.

INSERT INTO `vtiger_links` (`linkid`, `tabid`, `linktype`, `linklabel`, `linkurl`, `linkicon`, `sequence`) VALUES(24, 20, 'DETAILVIEWWIDGET', 'DetailViewBlockCommentWidget', 'block://ModComments:modules/ModComments/ModComments.php', '', 0);
INSERT INTO `vtiger_links` (`linkid`, `tabid`, `linktype`, `linklabel`, `linkurl`, `linkicon`, `sequence`) VALUES(25, 23, 'DETAILVIEWWIDGET', 'DetailViewBlockCommentWidget', 'block://ModComments:modules/ModComments/ModComments.php', '', 0);
UPDATE `vtiger_links_seq` SET `id` = '25';

Jetzt habt Ihr bei Angeboten und Rechnungen, genau wie bei Organisationen und Personen, die Möglichkeit, kurze Kommentare zu hinterlegen.

Weitere Module lassen sich ähnlich dazu hinzufügen. In der Spalte tabid wird das jeweilige Modul zugeordnet, welches man über die Tabelle `vtiger_tabs` herausfinden kann.

Wieder etwas näher mit vTiger am perfekten CRM!

Dokumente/Notizen im Vtiger einem Eintrag über den Webservice erstellen

September 26th, 2011 No comments

Hy!

Da sich bei Version 5.3 vom vTiger CRM momentan noch relativ wenig tut und die Entwickler für Ende des Jahres einen Release Candidate angekündigt haben, habe ich wiedermal ein Problem selbst gelöst.

Meine Aufgabe war es, die folgende Frage zu lösen: “Warum kann ich kein Dokument über den Webservice mit einem anderem Eintrag verbinden?”

Gesagt getan, hab ich den Sourcecode durchwühlt. Immer auf der Suche nach einem Anhaltspunkt, warum das Feld “parent_id” über den Webservice nicht ausgewertet wird, welches eigentlich für diesen Zusammenhang verantwortlich ist.

Schuld daran ist der Umstand, dass auch der Anwender diesen Zusammenhang nicht setzen kann, wenn er ein Dokument erstellt. Erst in einem zweiten Schritt wäre dies möglich.
Aber auch dieser zweite Schritt ist über den WS leider nicht möglich.

Da der Lösung des Problems eigentlich nicht besonders viel Zeit zugedacht wurden ist, (Warum sollte diese Verbindung auch nicht funkionieren?) musste es schnell gehen.
Da ich nicht erst suchen wollte, wie ich ein Feld erstellen kann, welches eine Verbindung aufbaut und vom WS genutzt werden kann, habe ich mich für eine relativ schnelle, allerdings wahrscheinlich SEHR unsaubere Lösung entschieden.
Daher möchte ich mich schon vorher für dafür entschuldigen, was ich da getan habe. ;)

Nun also zur Lösung:

Es sind nur zwei Schritte notwendig:

/modules/Documents/Documents.php [Line ~27]

Suche:

var $tab_name = Array('vtiger_crmentity','vtiger_notes');
var $tab_name_index = Array('vtiger_crmentity'=>'crmid','vtiger_notes'=>'notesid');

Daraus machen wir:

var $tab_name = Array('vtiger_crmentity','vtiger_notes','vtiger_senotesrel');
var $tab_name_index = Array('vtiger_crmentity'=>'crmid','vtiger_notes'=>'notesid','vtiger_senotesrel'=>'notesid');

/data/CRMEntity.php [Line ~61]

Suche:

if($table_name == "vtiger_crmentity")
{
    $this->insertIntoCrmEntity($module,$fileid);
} else {
    $this->insertIntoEntityTable($table_name, $module,$fileid);
}

Daraus machen wir:

if($table_name == "vtiger_crmentity")
{
     $this->insertIntoCrmEntity($module,$fileid);
/** Added by SWarnat (2011-09-16) **/
} elseif($module == "Documents" && $table_name == "vtiger_senotesrel" && !empty($this->column_fields["parentid"])) {
    $sql = "INSERT INTO vtiger_senotesrel SET crmid = '".intval(substr($this->column_fields["parentid"],2))."', notesid = '".(int)$this->id."'";
    $this->db->query($sql);
} else {
/** ENDE changed by SWarnat**/
    $this->insertIntoEntityTable($table_name, $module,$fileid);
}

Ich hoffe ich konnte euch trotz der Art und weise, wie es implementiert wurde, etwas helfen. Das Hauptziel wurde erreicht und ich kann jetzt über den Webservice in dem Feld parent_id ein Record im Format “<tabid>x<recordid>” übergeben, welches auch genutzt wird.

Getestet habe ich es allerdings nur mit externen Dokumenten, welche ich extern über eine URL aufrufen kann. Bei internen Dokumenten kommen wir dann wahrscheinlich doch endgültig an die Grenze des WS.

Ich bin natürlich offen gegenüber anderen Lösungswegen, welche es sicherlich gibt.

Weiterhin viel Spaß mit dem Tiger!

Stefan

vTiger – deutsche Auswahllisten sortieren

June 1st, 2011 2 comments

Hallo Zusammen,

Heute soll es wiedereinmal um das CRM vTiger gehen. Dieses hat sich in letzter Zeit bei mir wirklich beliebt gemacht, da auch eine aktive Entwicklung zu erkennen ist. Unter anderem wird im Juli 2011 die nächste Version mit vielen wichtigen und dringend benötigten Features veröffentlicht. So ist zumindestens der Plan. :) Ob dieser eingehalten wird, werden wir noch sehen.

Langsam aber sicher verstehe ich auch das System hinter vTiger und meine Anpassungen laufen immer besser.

Nach einer Anfrage habe ich mich mit dem Thema der Sortierung von Auswahllisten in der deutschen Sprache beschäftigt.
Diese werden, wie anderen vTiger Nutzern sicherlich schon aufgefallen ist, zwar übersetzt, aber weiterhin nach den englischen Wortlauten sortiert. Das führt nicht selten zu kompletten Scans der Listen durch die Mitarbeiter. => zeitraubend

Damit diese Listen in Zukunft nach Ihrem deutschem Wortlaut sortiert werden, sind folgende zwei kleine Anpassungen notwendig:

/include/utils/EditViewUtils.php [~Line 225]

Suchen:

$fieldvalue [] = $options;

Zuvor einfügen:

/** 2011-06-01 Update1  PICKLIST SORTER - MODIFIED BY SWARNAT START **/
if($fieldname != "eventstatus" && $fieldname != "leadstatus") {
 usort($options, "sortoptions");
}
/** MODIFIED BY SWARNAT ENDE **/

Ganz am Ende der Datei einfügen:

/** 2011-06-01 PICKLIST SORTER - MODIFIED BY SWARNAT START **/
/**
 * Diese Funktion sortiert die von vTiger erstellten Options-Einträge nach der deutschen Einträge
 * @author Stefan Warnat <ich@stefanwarnat.de>
 */
function sw_sortOptions($a, $b) {
 if(strtolower($a[0]) == strtolower($b[0])) return 0;
 return (strtolower($a[0])<strtolower($b[0]))?-1:1;
}
/** MODIFIED BY SWARNAT ENDE **/

/include/utils/DetailViewUtils.php

Suchen: [~Line 219, innerhalb "if(uitype == 15) {"]

$label_fld ["options"] = $options;

Zuvor einfügen:

/** 2011-06-01 Update1  PICKLIST SORTER - MODIFIED BY SWARNAT START **/
if($fieldname != "eventstatus" && $fieldname != "leadstatus") {
          usort($options, "sw_sortOptions_detail");
}
/** MODIFIED BY SWARNAT ENDE **/

Suchen: [~Line 329, innerhalb "if(uitype == 33) {"]

$label_fld ["options"] = $options;

Zuvor einfügen:

/** 2011-06-01 Update1  PICKLIST SORTER - MODIFIED BY SWARNAT START **/
if($fieldname != "eventstatus" && $fieldname != "leadstatus") {
          usort($options, "sw_sortOptions_detail");
}
/** MODIFIED BY SWARNAT ENDE **/

Ganz am Ende der Datei einfügen:

/** 2011-06-01 PICKLIST SORTER - MODIFIED BY SWARNAT START **/
/**
 * Diese Funktion sortiert die von vTiger erstellten Options-Einträge nach der deutschen Einträge
 * @author Stefan Warnat <ich@stefanwarnat.de>
 */
function sw_sortOptions_detail($a, $b) {
 if(strtolower($a[0]) == strtolower($b[0])) return 0;
 return (strtolower($a[0])<strtolower($b[0]))?-1:1;
}
/** MODIFIED BY SWARNAT ENDE **/

Getestet habe ich diese Erweiterung nur flüchtig, sprich in Leads, Accounts und Contacts und sie lief.

Vielleicht ist diese kleine Erweiterung für den einen oder anderen ja doch nützlich und Sie wird eingesetzt.

Bis zum nächsten Post,

Stefan

UPDATE

Durch einen Hinweis sind noch zwei Optimierungen zu dieser Änderung hinzugekommen. Zum einen, wurde der Eventstatus und der Leadstatus unsortiert belassen, da an dieser Stelle der Ablauf abgebildet ist.

Zum anderen wurden die Listen in der Live Bearbeiten bisher Funktion nicht sortiert. Dieser Umstand wurde jetzt auch geändert.

Inkrementelle Backups unter Linux auf Filebasis (Debian)

April 21st, 2011 1 comment

Gerade habe ich wieder eines dieser Tools entdeckt, welche das Leben eines Systemadministrator erheblich einfacher und ruhiger gestalten.

Meistens geht es mir zumindestens so, dass ich Backups zwar anfertige, diese aber bei einigen meiner Server nicht ausreichend getrennt gespeichert werden.
Ich schicke nur die Datenbank geteilt an einen Google-Mail Account und habe bei den Daten bisher nur ein lokales Backup auf einer zweiten Festplatte.

Heute habe ich das Programm FauBackup gefunden, welches sehr einfach in der Anwendung ist, incrementell arbeitet und die Dateien über SSH versendet.

Das dies sicherlich auch mit Linux-internen Tools machbar ist, ist sicherlich möglich, aber sicherlich nicht so einfach im einrichten und der Rückspielung.  Ich bekomme am Ende eine Dateistruktur, wie auf dem gesicherten Rechner und kann mir auch einzelne Datei schnell mit SCP rüberkopieren.

Dabei werden inkrementelle Backups über Hardlinks im Dateisystem realisiert.
Kurze Erläuterung dazu: Die Datei wird einmal transferiert und solange per Hardlink verlinkt, also immer die gleiche Datei auf der Festplatte genutzt, bis Sie geändert wurden. Das spart in nicht unerheblichen Maße Traffic und Speicherplatz.

Kurz noch mein Script, welches ich mir zur Verwendung mit FauBackup gebastelt habe:

#!/bin/bash
# Sample faubackup script
export PATH="/usr/sbin/:$PATH"
faubackup=/usr/sbin/faubackup
[ -f $faubackup ] || { echo "(EE) faubackup not found"; exit 1; }
FILES="/zu/sichernder/pfad1
/zu/sichernder/pfad2"
for file in $FILES
do
$faubackup --clean $file
$faubackup -v $file /backuppath/$file
done

(Hilfe war mir dabei dieser Thread)

Achja, die Installation: (Fast zu einfach, um es nochmal niederzuschreiben):
Debian Lenny:

sudo apt-get install faubackup

Und zuletzt nochmal die URL zu FauBackup:

http://faubackup.sourceforge.net/

Viel Spaß mit dem Tool!

Stefan

vtiger Standard Sortierung der Listen

April 18th, 2011 1 comment

Willkommen zu einem weiterem Teil meiner Tipps rund um das CRM System vTiger.

Diesmal möchte ich die kleine Sache beschreiben, wie es möglich ist, dass die Sortierung der Listen von jedem Benutzer selbstständig per Filtereinstellungen gesetzt werden kann. Diese Funktionalität fehlt leider im System und ist doch relativ wichtig, da verschiedene Mitarbeiter gerne verschiedene Prioritäten setzen möchten.

Als schnelle aber gute Lösung habe ich es so umgesetzt, dass die Liste grundsätzlich nach der ersten Spalte des Filters sortiert ist. So kann jeder Mitarbeiter die Listen leicht & ohne Probleme seinen Bedürfnissen anpassen.

Diese Beschreibung lässt sich grundsätzlich für jedes Modul mit einer ListView.php umsetzen, sodass diese Anleitung als universell betrachtet werden kann. Dazu einzig an der gekennzeichneten Stelle den Modulnamen in Großbuchstaben einsetzen.

Also los gehts:

/modules/<modulname>/ListView.php

Folgende Stelle suchen:

if(ListViewSession::hasViewChanged($currentModule,$viewid)) {

Hier folgende Zeilen einfügen:

/** CHANGE BY SWARNAT 18.04.2011 START */
 $viewChange = true;
/** CHANGE BY SWARNAT 18.04.2011 ENDE */

An der zweiten Zeile in dieser IF-Bedingung sieht man den Aufbau des Namen der SESSION-Variable, welchen wir gleich einsetzen müssen.

z.B. bei Potentialen:

$_SESSION['POTENTIALS_ORDER_BY'] = '';

Daraufhin folgende Zeile suchen:

if($order_by == 'smownerid')

In den ELSE-Pfad dieser Bedingung gleich zu Beginn folgendes einfügen: (Hier die Benennung der Variable beachten!)

 /** CHANGE BY SWARNAT 18.04.2011 START */
 if(empty($_REQUEST["order_by"]) && (empty($_REQUEST["start"]) ||
 ($_REQUEST["start"] == "1" && $viewChange == true)))
 {
 $fields = $queryGenerator->getFields();
 $order_by = $fields[0];
 $sorder = "DESC";
 $_SESSION['<MODULNAME>_ORDER_BY'] = $order_by;
 $_SESSION['<MODULNAME>_ORDER'] = $sorder;
 }
 /** CHANGE BY SWARNAT 18.04.2011 ENDE */

Das wars auch schon.

Nachdem man diese Schritte für alle Module wiederholt hat, ist vTiger wieder um eine Funktion reicher!

Bis zum nächsten Artikel!

Stefan

vTiger auf deutsches Datumsformat dd.mm.yyyy umstellen

April 12th, 2011 14 comments

UPDATE: Änderungen für vTiger 5.30 befinden sich in einem extra Post.

Dies soll der erste Post einer Reihe von Artikeln sein, welche sich um Anpassungen des CRM-Systems vTiger drehen.

Da ich beruflich in den letzten Wochen sehr viel mit dieser Software zu tun hatte, wollte ich meine Erkenntnisse im Internet veröffentlichen um evtl. anderen Hilfesuchenden behilflich zu sein.

In diesem ersten Artikel geht es jetzt darum, wie ich das größte Problem beim Einsatz eines vTigers mit Kundenkontakt in Deutschland habe: Das Datumsformat.

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 : getNewDisplayDate(…) [Line ~1012]
folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar)

elseif($dat_fmt == 'dd.mm.yyyy')
{
    $display_date = date('d-m-Y');
}

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

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

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

elseif($dat_fmt == 'dd.mm.yyyy')
{
    $display_date = $d.'.'.$m.'.'.$y;
}

include/utils/utils.php

Funktion: getDBInsertDateValue(…) [Line ~1541]
folgendes an passender Stelle einfügen: (If Abfragen sind gut erkennbar)
Achtung! Der Bindestrich an dieser Stelle ist korrekt. Erklärung folgt darunter.

elseif($dat_fmt == 'dd.mm.yyyy')
{
    list($d,$m,$y) = explode('-', $value);
}

Offenbar wird der Funktion getDBInsertDateValue(…) ab und zu ein Datumsformat übergeben, in welchem alle nichtnumerischen Zeichen durch den Bindestrich ersetzt werden. (Genauer: Bei der JavaScript-Inpage Edit-Funktion)
Deshalb habe ich in der Funktion getDBInsertDateValue(…) nach der Zuweisung von $dat_fmt [Line ???] folgende Zeile eingefügt:

$value = str_replace(".", "-", $value);

Diese ersetzt alle Punkte durch Bindestriche, sodass dd.mm.yyyy im Grunde zu dd-mm-yyyy wird.

include/js/general.js

Funktion: patternValidate(..)

Hier wird offenbar nicht korrekt geprüft, ob das pattern überhaupt gesetzt wird, weshalb der Ajax-Edit nicht mehr korrekt abgeschickt werden kann. Deshalb folgende Stelle suchen:

if (type.toUpperCase()=="TIME") {//TIME validation
     var re = /^\d{1,2}\:\d{1,2}$/
}

und danach folgendes einfügen:

if(re == undefined)
       return true;

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

An dieser Stelle muss folgende Zeile eingefügt werden. Bestenfalls vor der ‘mm-dd-yyyy’ Zuweisung

'dd.mm.yyyy' => 'dd.mm.yyyy'

Ich verspreche nicht, dass durch die Änderung des Datumsformates später nicht noch weitere Probleme auftreten, werde diesen Post allerdings updaten und dahingehend aktuell halten, wenn sich solche Probleme in unserer, oder eurer, Umgebung abzeichnen sollten.

Leider wurde unser Format bei der Entwicklung vom vTiger komplett vergessen. Trotz dessen ist dieses KOSTENFREIE CMS problemlos auch in Deutschland einzusetzen und gerade weil es in der Basis keinen Euro kostet, schon Wert genutzt zu werden.

Ich habe noch einige Problemlösungen auf Lager und werde diese im Laufe der Tage noch posten.
Unter anderem:

  • Rechnungen über Webservice mit einer Produktliste anlegen
  • Schwierigkeiten mit dem Webservice und UTF-8
  • Listen standardmäßig nach der ersten Spalte sortieren, statt der ID, damit jeder User die Sortierung ändern kann

Bis dahin!

Bye

UPDATE [19.07.2011]:

Da ich den Hinweis vergessen hatte:

Um die Änderungen zu aktivieren, müsst Ihr unter “Meine Einstellungen”, rechts oben, das neue Datumsformat “dd.mm.yyyy” auswählen. Ansonsten nutzt Ihr weiter die fest integrierten Formate.

UPDATE2 [26.09.2011]:

Solltet Ihr ein komplett neues vTiger-System nutzen, könnt ihr auch folgendes Archiv nutzen, welches alle geänderten Dateien beinhaltet. Die Datenbankänderung in Schritt 1 müsstet Ihr aber trotzdem durchführen:

http://www.stefanwarnat.de/wp-content/uploads/2011/07/vtiger_files1.zip

Categories: EDV, vTiger Tags: , , ,

Studentenmission Deutschland (SMD) in Bayreuth

October 19th, 2010 2 comments

Heute ist es wiedereinmal soweit. Ein neuer Eintrag soll meinem Blog zu neuen Höhenflügen verhelfen.
Allerdings geht es diesmal nicht um die Vorstellung eines Produktes oder sonst irgendeine Erfahrung, die ich in Leipzig und Umgebung machen musste.

Denn die SMD in Bayreuth hat ein echtes Problem mit Ihrer Internetseite, welche ich momentan überarbeite, um den Erstsemestern einen noch besseren und leichteren Einstieg in dieses Projekt zu ermöglichen.
Das neue Semester beginnt in Bayreuth am 20.10.2010, sprich schon relativ kurzfristig, und deren Homepage ist nicht über Google zu finden, da durch eine Umstellung des Content-Management-Systems die kompletten Inhalte verloren wurden, bzw. sich alle Pfade geändert haben.
Aus diesem Grund möchte ich mit diesem Post die neue Homepage dieser Untergruppe der SMD verlinken und erreichbar machen.

Allerdings soll dieser Beitrag nicht nur dem Ziel dienen, eine neue URL zu verbreiten,
sondern ich möchte kurz das Prinzip hinter der SMD vorstellen um möglichen interessierten Studenten eine Erklärung zu bieten.
Die SMD in Bayreuth besteht aus einer Gruppe junger Christen, welche Ihren Studienalltag nicht allein durch lernen, lernen und Hausarbeit schreiben meistern wollen, sondern einiges an Last auf dem Weg zum Abschluss an eine Person abgeben, der vielleicht nicht sofort sichtbar, aber doch fühlbar ist. Gemeint ist, wie der Name StudentenMISSION sicherlich schon sagt, in diesem Fall Jesus Christus.
Es war für mich, wenn es auch in Mittweida keine richtige SMD gab, immer eine starke Hilfe zu wissen, dass man in Prüfungen oder langen Abenden zu Hause eben nicht allein arbeitet, sondern darauf vertrauen kann, dass gute Ideen und Gedanken von Jesus kommen.
Ich könnte einige wirklich kuriose Gegebenheiten erzählen, welche eigentlich nur durch höhere Mächte zustande kommen konnten.
Leider wird man aber gerade im Studium immer wieder damit konfrontiert, dass nur wissenschaftlich belegbare Beweise als Grundlage einer These anerkannt werden.
Deshalb ist es umso wichtiger, dass man sich in der Studentenmission Bayreuth regelmäßig zum beten und reden zusammensetzen kann um den Alltag zu vergessen.

Die eine oder andere Party ist da natürlich aber auch mit dabei. ;)
Denn die richtige Mischung zwischen Studium, Glaube und Feiern ist notwendig um heute in Deutschland ein Studium zum Abschluss zu bringen. :)

JEDER neugierige Student ist dazu herzlich eingeladen!

Nähere Informationen findet Ihr unter folgender URL:
Zur Webseite der SMD in Bayreuth

Bis Später,

Stefan

Page optimized by WP Minify WordPress Plugin