Beispiel #1
0
 /**
  * @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;
 }