Diese Anleitung erfordert einen sicheren Umgang mit der PHP Sprache, da Sie die Einstellungen im Code anpassen müssen.
Sie müssen wissen, wie unser EventHandler-Modul funktioniert und dieses Modul muss vor dem Start installiert sein.
Diese Anleitung behandelt das folgende Problem:
Sie haben ein Feld “Einkaufspreis” im Produktmodul und möchten den Preis aus diesem Feld automatisch laden, anstatt den Standardeinheitspreis, wenn Sie eine Bestellung oder ein anderes benutzerdefiniertes Bestandsmodul anlegen.
Um dies zu lösen, definieren wir 3 Events. Wenn Sie Colorizer mit Dateiänderungen installiert haben, müssen Sie nur 2 neue Events in vTiger Source hinzufügen.
Erstellen Sie zunächst einen EventHandler, wie ich es in der EventHandler-Beschreibung beschrieben habe. Sie benötigen diese Datei, um die benutzerdefinierten Zuordnungen vornehmen zu können.
Beginnen wir mit der Implementierung der Ereignisse im vTiger CRM-Code.
Datei: layouts/vlayout/modules/Inventory/resources/Edit.js ~Line 1712
Suche:
var dataUrl = "index.php?module=Inventory&action=GetTaxes&record="+selectedItemData.id+"¤cy_id="+jQuery('#currency_id option:selected').val();
Ersetze durch:
var dataUrl = "index.php?module=Inventory&action=GetTaxes&record="+selectedItemData.id+"¤cy_id="+jQuery('#currency_id option:selected').val()+"&src_module=" + jQuery('#module').val();
Datei: modules/Products/models/Record.php ~Line 17
Suche:
return 'index.php?module=Inventory&action=GetTaxes&record='. $this->getId();
Füge zuvor ein:
return EventHandler_Module_Model::do_filter('vtiger.filter.product.gettaxesurl', 'index.php?module=Inventory&action=GetTaxes&record='. $this->getId(), $this);
Datei: modules/Inventory/actions/GetTaxes.php ~Line 36
Suche:
$response->setResult(array( $recordId => array( 'id'=>$recordId, 'name'=>decode_html($recordModel->getName()), 'taxes'=>$taxes, 'listprice'=>$listPrice, 'listpricevalues'=>$listPriceValues, 'description' => decode_html($recordModel->get('description')), 'quantityInStock' => $recordModel->get('qtyinstock') )));
Ersetze durch:
$response->setResult(EventHandler_Module_Model::do_filter('vtiger.filter.productdata',array( $recordId => array( 'id'=>$recordId, 'name'=>decode_html($recordModel->getName()), 'taxes'=>$taxes, 'listprice'=>$listPrice, 'listpricevalues'=>$listPriceValues, 'description' => decode_html($recordModel->get('description')), 'quantityInStock' => $recordModel->get('qtyinstock') )), $recordModel));
Der nächste Schritt muss nur dann gemacht werden, wenn Sie den Colorizer NICHT installiert haben.
Sie können dies überprüfen, wenn Sie in der folgenden Datei nach vtiger.filter.listview.querygenerator.query suchen. Wenn Sie etwas finden, fügen Sie KEIN zweites hinzu.
Möglicherweise stellt der Colorizer auch eine Anfrage, Ihren manuell hinzugefügten Filter zu löschen, wenn Sie dieses Modul später installieren. Da es sich um den gleichen Filter handelt, ist es kein Problem, ihn zu entfernen und durch den Colorizer automatisch hinzufügen zu lassen.
Datei: modules/Products/models/ListView.php ~Line 118
Suche: (Sie weden zwei Treffer in der Datei finden. Wählen Sie den in der Funktion aus. getListViewEntries)
$listQuery = $this->getQuery();
Danach einfügen:
$this->set( 'query_generator', EventHandler_Module_Model::do_filter( array( 'vtiger.filter.listview.querygenerator.after', 'vtiger.filter.listview.'.strtolower($moduleName).'.querygenerator.after' ), $this->get('query_generator'), $pagingModel ) ); $listQuery = EventHandler_Module_Model::do_filter("vtiger.filter.listview.querygenerator.query", $listQuery, $this->get('query_generator'));
Das war alles mit dem vTigerCRM Source.
Nun müssen Sie Ihren erstellten EventHandler an diese 3 Events anhängen:
vtiger.filter.product.gettaxesurl vtiger.filter.productdata vtiger.filter.listview.querygenerator.query
Wenn Sie die handleFilter-Funktion bereits für andere Filter verwenden, filtern Sie die gewünschten Informationen aus der nächsten Quelle. Wenn Sie in Ihrer Klasse keine handleFilter-Funktion haben, können Sie diese verwenden:
[prism field=handler language=php]
In diesem Beispiel ist das benutzerdefinierte Feld mit dem Preis cf_852. Das MÜSSEN Sie ändern.
Wenn Sie auch das Modul ändern möchten, das dieses Feld auslöst, ändern Sie “PurchaseOrder” auf ein anderes Modul. Es funktioniert für jedes Inventarmodul.
Wie Sie sehen, passiert etwas nur, wenn das Modul korrekt ist. So sollten Sie keine Probleme in anderen Modulen bekommen. Aber wie mit jedem Modifikation: Testen Sie alle möglichen Situationen, um sicher zu sein, dass es funktioniert.