/** * @param Collection $collection * @param array $collectionFilters * @return array */ public static function getTopSpendingReportData(Xhb $xhb, array $collectionFilters) { $i18n = I18n::instance(); $opColl = $xhb->getOperationCollection(); AccountOperation::applyFiltersOnCollection($opColl, $collectionFilters); $opColl->addFieldToFilter('paymode', array('neq' => Constants::PAYMODE_INTXFER))->addFieldToFilter('amount', array('lt' => 0))->addFieldToFilter('date', array('lt' => Date::dateToJd(Date::getDate()))); // FIXME does not handle split amounts yet $maxResults = 6; $sumByCategory = Chart::sumBy($opColl, 'category', 'amount', 0, $maxResults); $return = array(); $n = 0; foreach ($sumByCategory as $catId => $sum) { $cat = $xhb->getCategory($catId); if (!$cat) { $catName = $i18n->tr($n == $maxResults - 1 ? 'Other' : '(Unknown)'); } else { $catName = $cat->getFullname(); } $v = abs(round($sum, 2)); $return[] = array('value' => $v, 'label' => $i18n->tr('{0} ({1})', $catName, I18n::instance()->currency($v)), 'color' => Output::rgbToCss(Chart::getColor($n++))); } return $return; }