©Sergey Emelyanov 2025 | Alle Rechte vorbehalten
Im Folgenden beschreibe ich, wie Sie in Vtiger CRM 6.5 die Gesamtsumme in der Rechnungsübersicht (ListView) anzeigen können. Dieser Blogartikel richtet sich an Administratoren und Entwickler, die häufig den Gesamtbetrag der Rechnungen oder andere Felder summieren möchten – beispielsweise den Saldo. Viele Anwender wünschen sich, dass unterhalb der Rechnungsliste die Gesamtsumme der einzelnen Rechnungsbilanzen angezeigt wird. Im Folgenden wird erläutert, wie ein solches Feature realisiert werden kann.
Oftmals ist es erforderlich, in einer Übersicht (ListView) den Gesamtwert eines bestimmten Feldes – etwa des Rechnungsfeldes "balance" – auszuwerten. Ein Kunde wandte sich kürzlich mit der Anfrage an mich, unter der Rechnungsübersicht den Gesamtsaldo aller Einträge anzuzeigen. Das Ziel war, dass direkt unter der Tabelle mit den Rechnungen eine Zeile erscheint, in der der finale Betrag aller Konten eingeblendet wird.
Die Lösung umfasst zwei zentrale Schritte:
Zunächst bearbeiten Sie die Datei modules/Invoice/views/List.php
Standardmäßig enthält diese Datei eine leere Klassenimplementierung. In unserem Fall wollen wir den vorhandenen Code komplett ersetzen, um die Gesamtsumme in der Listansicht zu berechnen. Dafür wird der Ansatz gewählt, alle Listeneinträge zu iterieren und jeweils das Feld "balance" aufzusummieren.
Ersetzen Sie den Inhalt von List.php durch folgenden Code:
<?php
class Invoice_List_View extends Inventory_List_View {
/*
* Funktion zur Initialisierung der notwendigen Daten, damit der ListView-Inhalt korrekt dargestellt werden kann.
*/
public function initializeListViewContents(Vtiger_Request $request, Vtiger_Viewer $viewer) {
$moduleName = $request->getModule();
$cvId = $this->viewName;
$pageNumber = $request->get('page');
$orderBy = $request->get('orderby');
$sortOrder = $request->get('sortorder');
if($sortOrder == "ASC"){
$nextSortOrder = "DESC";
$sortImage = "icon-chevron-down";
} else {
$nextSortOrder = "ASC";
$sortImage = "icon-chevron-up";
}
if(empty($pageNumber)) {
$pageNumber = '1';
}
$listViewModel = Vtiger_ListView_Model::getInstance($moduleName, $cvId);
$currentUser = Users_Record_Model::getCurrentUserModel();
$linkParams = array('MODULE'=>$moduleName, 'ACTION'=>$request->get('view'), 'CVID'=>$cvId);
$linkModels = $listViewModel->getListViewMassActions($linkParams);
$pagingModel = new Vtiger_Paging_Model();
$pagingModel->set('page', $pageNumber);
$pagingModel->set('viewid', $request->get('viewname'));
if(!empty($orderBy)) {
$listViewModel->set('orderby', $orderBy);
$listViewModel->set('sortorder', $sortOrder);
}
$searchKey = $request->get('search_key');
$searchValue = $request->get('search_value');
$operator = $request->get('operator');
if(!empty($operator)) {
$listViewModel->set('operator', $operator);
$viewer->assign('OPERATOR', $operator);
$viewer->assign('ALPHABET_VALUE', $searchValue);
}
if(!empty($searchKey) && !empty($searchValue)) {
$listViewModel->set('search_key', $searchKey);
$listViewModel->set('search_value', $searchValue);
}
$searchParmams = $request->get('search_params');
if(empty($searchParmams)) {
$searchParmams = array();
}
$transformedSearchParams = $this->transferListSearchParamsToFilterCondition($searchParmams, $listViewModel->getModule());
$listViewModel->set('search_params', $transformedSearchParams);
// Erleichtert den Zugriff auf Suchparameter im Template
foreach($searchParmams as $fieldListGroup){
foreach($fieldListGroup as $fieldSearchInfo){
$fieldSearchInfo['searchValue'] = $fieldSearchInfo[2];
$fieldSearchInfo['fieldName'] = $fieldName = $fieldSearchInfo[0];
$searchParmams[$fieldName] = $fieldSearchInfo;
}
}
if(!$this->listViewHeaders){
$this->listViewHeaders = $listViewModel->getListViewHeaders();
}
if(!$this->listViewEntries){
$this->listViewEntries = $listViewModel->getListViewEntries($pagingModel);
}
$noOfEntries = count($this->listViewEntries);
$viewer->assign('MODULE', $moduleName);
if(!$this->listViewLinks){
$this->listViewLinks = $listViewModel->getListViewLinks($linkParams);
}
$viewer->assign('LISTVIEW_LINKS', $this->listViewLinks);
$viewer->assign('LISTVIEW_MASSACTIONS', $linkModels['LISTVIEWMASSACTION']);
$viewer->assign('PAGING_MODEL', $pagingModel);
$viewer->assign('PAGE_NUMBER', $pageNumber);
$viewer->assign('ORDER_BY', $orderBy);
$viewer->assign('SORT_ORDER', $sortOrder);
$viewer->assign('NEXT_SORT_ORDER', $nextSortOrder);
$viewer->assign('SORT_IMAGE', $sortImage);
$viewer->assign('COLUMN_NAME', $orderBy);
$viewer->assign('LISTVIEW_ENTRIES_COUNT', $noOfEntries);
$viewer->assign('LISTVIEW_HEADERS', $this->listViewHeaders);
$viewer->assign('LISTVIEW_ENTRIES', $this->listViewEntries);
if (PerformancePrefs::getBoolean('LISTVIEW_COMPUTE_PAGE_COUNT', false)) {
if(!$this->listViewCount){
$this->listViewCount = $listViewModel->getListViewCount();
}
$totalCount = $this->listViewCount;
$pageLimit = $pagingModel->getPageLimit();
$pageCount = ceil((int)$totalCount / (int)$pageLimit);
if($pageCount == 0){
$pageCount = 1;
}
$viewer->assign('PAGE_COUNT', $pageCount);
$viewer->assign('LISTVIEW_COUNT', $totalCount);
}
// Berechnung der Gesamtsumme der Balance aus der Liste
$curbal = 0;
if (!empty($this->listViewEntries)) {
foreach ($this->listViewEntries as $entry) {
$curbal += $entry->get('balance');
}
}
$viewer->assign('CURBALANCE', $curbal);
// Ende der Berechnung
$viewer->assign('LIST_VIEW_MODEL', $listViewModel);
$viewer->assign('GROUPS_IDS', Vtiger_Util_Helper::getGroupsIdsForUsers($currentUser->getId()));
$viewer->assign('IS_RECORD_CREATABLE', $listViewModel->getModule()->isPermitted('CreateView'));
$viewer->assign('IS_MODULE_EDITABLE', $listViewModel->getModule()->isPermitted('EditView'));
$viewer->assign('IS_MODULE_DELETABLE', $listViewModel->getModule()->isPermitted('Delete'));
$viewer->assign('SEARCH_DETAILS', $searchParmams);
}
}
?>
In diesem Code wird die Klasse erweitert. Im Wesentlichen wird der Array der ListView-Einträge durchlaufen und das Feld "balance" jedes Eintrags summiert. Der Gesamtbetrag wird dann im Template über die Variable CURBALANCE bereitgestellt.
Nachdem der Gesamtbetrag berechnet wurde, müssen Sie diesen Wert im ListView-Template darstellen. Dazu erstellen oder bearbeiten Sie die Datei:
layouts/vlayout/modules/Invoice/ListViewContents.tpl
Ergänzen Sie an passender Stelle folgenden Code, um den summierten Balance-Betrag anzuzeigen:
{strip}
…
{vtranslate('LBL_BALANCE TOTAL', $MODULE)} {$CURBALANCE} {decimalFormat($LISTVIEW_ENTRY->get('currencySymbol'))}
…
{/strip}
Hinweis:
Damit der Text für die Anzeige korrekt übersetzt wird, fügen Sie in der Datei languages/ru_ru/Invoice.php
die Übersetzung für 'LBL_BALANCE TOTAL' hinzu, z. B.: 'LBL_BALANCE TOTAL' => 'Gesamtsumme der Bilanz:',
oder eine andere von Ihnen gewünschte Übersetzung.
Nach diesen Anpassungen wird in der Rechnungsübersicht von Vtiger CRM 6.5 unterhalb der Liste eine Zeile mit der Gesamtsumme der Balances angezeigt. Diese Lösung summiert alle "balance"-Werte der aktuell angezeigten Rechnungen und zeigt den Gesamtbetrag im Template an.
Dieses Vorgehen verbessert die Übersichtlichkeit und hilft bei der schnellen Kontrolle der finanziellen Werte. Bei Fragen oder Problemen empfiehlt es sich, in der Vtiger-Community oder der offiziellen Dokumentation weitere Informationen zu suchen.
Ich hoffe, dieser Artikel hilft Ihnen, die gewünschte Funktionalität in Ihrem System zu realisieren.
©Sergey Emelyanov 2025 | Alle Rechte vorbehalten