diff --git a/app/Helpers/Report/BudgetReportHelper.php b/app/Helpers/Report/BudgetReportHelper.php deleted file mode 100644 index 913b5b340b..0000000000 --- a/app/Helpers/Report/BudgetReportHelper.php +++ /dev/null @@ -1,223 +0,0 @@ -. - */ -declare(strict_types=1); - -namespace FireflyIII\Helpers\Report; - -use Carbon\Carbon; -use FireflyIII\Models\Budget; -use FireflyIII\Models\BudgetLimit; -use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; -use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; -use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface; -use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; -use Illuminate\Support\Collection; -use Log; - -/** - * Class BudgetReportHelper. - * - * @codeCoverageIgnore - */ -class BudgetReportHelper implements BudgetReportHelperInterface -{ - /** @var BudgetLimitRepositoryInterface */ - private $blRepository; - /** @var NoBudgetRepositoryInterface */ - private $noBudgetRepository; - /** @var OperationsRepositoryInterface */ - private $opsRepository; - /** @var BudgetRepositoryInterface The budget repository interface. */ - private $repository; - - /** - * BudgetReportHelper constructor. - */ - public function __construct() - { - $this->repository = app(BudgetRepositoryInterface::class); - $this->blRepository = app(BudgetLimitRepositoryInterface::class); - $this->opsRepository = app(OperationsRepositoryInterface::class); - $this->noBudgetRepository = app(NoBudgetRepositoryInterface::class); - if ('testing' === config('app.env')) { - Log::warning(sprintf('%s should not be instantiated in the TEST environment!', get_class($this))); - } - - } - - /** - * Get the full budget report. - * - * TODO one big method is very complex. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array - */ - public function getBudgetReport(Carbon $start, Carbon $end, Collection $accounts): array - { - $set = $this->repository->getBudgets(); - $array = [ - 'budgets' => [], - 'sums' => [], - ]; - - /** @var Budget $budget */ - foreach ($set as $budget) { - $entry = [ - 'budget_id' => $budget->id, - 'budget_name' => $budget->name, - 'no_budget' => false, - 'rows' => [], - ]; - // get multi currency expenses first: - $budgetLimits = $this->blRepository->getBudgetLimits($budget, $start, $end); - $expenses = $this->opsRepository->spentInPeriodMc(new Collection([$budget]), $accounts, $start, $end); - $defaultCurrency = app('amount')->getDefaultCurrencyByUser($budget->user); - Log::debug(sprintf('Default currency for getBudgetReport is %s', $defaultCurrency->code)); - if (0 === count($expenses)) { - // list the budget limits, basic amounts. - /** @var BudgetLimit $limit */ - foreach ($budgetLimits as $limit) { - $currency = $limit->transactionCurrency ?? $defaultCurrency; - Log::debug(sprintf('Default currency for limit #%d is %s', $limit->id, $currency->code)); - $row = [ - 'limit_id' => $limit->id, - 'start_date' => $limit->start_date, - 'end_date' => $limit->end_date, - 'budgeted' => $limit->amount, - 'spent' => '0', - 'left' => $limit->amount, - 'overspent' => '0', - 'currency_id' => $currency->id, - 'currency_code' => $currency->code, - 'currency_name' => $currency->name, - 'currency_symbol' => $currency->symbol, - 'currency_decimal_places' => $currency->decimal_places, - ]; - - $entry['rows'][] = $row; - } - } - foreach ($expenses as $expense) { - $limit = $this->budgetLimitInCurrency($expense['currency_id'], $budgetLimits); - $row = [ - 'limit_id' => null, - 'start_date' => null, - 'end_date' => null, - 'budgeted' => null, - 'spent' => $expense['amount'], - 'left' => null, - 'overspent' => '0', - 'currency_id' => $expense['currency_id'], - 'currency_code' => $expense['currency_name'], - 'currency_name' => $expense['currency_name'], - 'currency_symbol' => $expense['currency_symbol'], - 'currency_decimal_places' => $expense['currency_decimal_places'], - ]; - if (null !== $limit) { - // yes - $row['start_date'] = $limit->start_date; - $row['end_date'] = $limit->end_date; - $row['budgeted'] = $limit->amount; - $row['limit_id'] = $limit->id; - - // less than zero? Set to 0.0 - $row['left'] = -1 === bccomp(bcadd($limit->amount, $row['spent']), '0') ? '0' : bcadd($limit->amount, $row['spent']); - - // spent > budgeted? then sum, otherwise other sum - $row['overspent'] = 1 === bccomp(bcmul($row['spent'],'-1'), $row['budgeted']) ? bcadd($row['spent'], $row['budgeted']) : '0'; - } - $entry['rows'][] = $row; - } - $array['budgets'][] = $entry; - } - $noBudget = $this->noBudgetRepository->spentInPeriodWoBudgetMc($accounts, $start, $end); - $noBudgetEntry = [ - 'budget_id' => null, - 'budget_name' => null, - 'no_budget' => true, - 'rows' => [], - ]; - foreach ($noBudget as $row) { - $noBudgetEntry['rows'][] = [ - 'limit_id' => null, - 'start_date' => null, - 'end_date' => null, - 'budgeted' => null, - 'spent' => $row['amount'], - 'left' => null, - 'overspent' => null, - 'currency_id' => $row['currency_id'], - 'currency_code' => $row['currency_code'], - 'currency_name' => $row['currency_name'], - 'currency_symbol' => $row['currency_symbol'], - 'currency_decimal_places' => $row['currency_decimal_places'], - ]; - } - $array['budgets'][] = $noBudgetEntry; - - // fill sums: - /** @var array $budget */ - foreach ($array['budgets'] as $budget) { - /** @var array $row */ - foreach ($budget['rows'] as $row) { - $currencyId = $row['currency_id']; - $array['sums'][$currencyId] = $array['sums'][$currencyId] ?? [ - 'currency_id' => $row['currency_id'], - 'currency_code' => $row['currency_code'], - 'currency_name' => $row['currency_name'], - 'currency_symbol' => $row['currency_symbol'], - 'currency_decimal_places' => $row['currency_decimal_places'], - 'budgeted' => '0', - 'spent' => '0', - 'left' => '0', - 'overspent' => '0', - ]; - $array['sums'][$currencyId]['budgeted'] = bcadd($array['sums'][$currencyId]['budgeted'], $row['budgeted'] ?? '0'); - $array['sums'][$currencyId]['spent'] = bcadd($array['sums'][$currencyId]['spent'], $row['spent'] ?? '0'); - $array['sums'][$currencyId]['left'] = bcadd($array['sums'][$currencyId]['left'], $row['left'] ?? '0'); - $array['sums'][$currencyId]['overspent'] = bcadd($array['sums'][$currencyId]['overspent'], $row['overspent'] ?? '0'); - } - } - - return $array; - } - - /** - * Returns from the collection the budget limit with the indicated currency ID - * - * @param int $currencyId - * @param Collection $budgetLimits - * - * @return BudgetLimit|null - */ - private function budgetLimitInCurrency(int $currencyId, Collection $budgetLimits): ?BudgetLimit - { - return $budgetLimits->first( - static function (BudgetLimit $limit) use ($currencyId) { - return $limit->transaction_currency_id === $currencyId; - } - ); - } -} diff --git a/app/Helpers/Report/BudgetReportHelperInterface.php b/app/Helpers/Report/BudgetReportHelperInterface.php deleted file mode 100644 index a8adae656d..0000000000 --- a/app/Helpers/Report/BudgetReportHelperInterface.php +++ /dev/null @@ -1,43 +0,0 @@ -. - */ -declare(strict_types=1); - -namespace FireflyIII\Helpers\Report; - -use Carbon\Carbon; -use Illuminate\Support\Collection; - -/** - * Interface BudgetReportHelperInterface. - */ -interface BudgetReportHelperInterface -{ - /** - * Generates the budget report. - * - * @param Carbon $start - * @param Carbon $end - * @param Collection $accounts - * - * @return array - */ - public function getBudgetReport(Carbon $start, Carbon $end, Collection $accounts): array; -} diff --git a/app/Http/Controllers/Report/BudgetController.php b/app/Http/Controllers/Report/BudgetController.php index 65d12c0805..c733a83f0c 100644 --- a/app/Http/Controllers/Report/BudgetController.php +++ b/app/Http/Controllers/Report/BudgetController.php @@ -23,10 +23,13 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Report; use Carbon\Carbon; -use FireflyIII\Helpers\Report\BudgetReportHelperInterface; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Models\Budget; +use FireflyIII\Models\BudgetLimit; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; +use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Controllers\BasicDataSupport; @@ -41,8 +44,14 @@ class BudgetController extends Controller { use BasicDataSupport; + /** @var BudgetLimitRepositoryInterface */ + private $blRepository; + /** @var NoBudgetRepositoryInterface */ + private $nbRepository; /** @var OperationsRepositoryInterface */ private $opsRepository; + /** @var BudgetRepositoryInterface */ + private $repository; /** * ExpenseReportController constructor. @@ -55,6 +64,9 @@ class BudgetController extends Controller $this->middleware( function ($request, $next) { $this->opsRepository = app(OperationsRepositoryInterface::class); + $this->repository = app(BudgetRepositoryInterface::class); + $this->blRepository = app(BudgetLimitRepositoryInterface::class); + $this->nbRepository = app(NoBudgetRepositoryInterface::class); return $next($request); } @@ -184,9 +196,9 @@ class BudgetController extends Controller $currencyId = $currency['currency_id']; foreach ($currency['budgets'] as $budget) { foreach ($budget['transaction_journals'] as $journal) { - $destinationId = $journal['destination_account_id']; - $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $destinationId = $journal['destination_account_id']; + $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); + $result[$key] = $result[$key] ?? [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -260,10 +272,12 @@ class BudgetController extends Controller // add currency info to report array: $report[$budgetId]['currencies'][$currencyId] = $report[$budgetId]['currencies'][$currencyId] ?? [ 'sum' => '0', + 'sum_pct' => '0', 'currency_id' => $currency['currency_id'], 'currency_symbol' => $currency['currency_symbol'], 'currency_name' => $currency['currency_name'], 'currency_decimal_places' => $currency['currency_decimal_places'], + ]; $report[$budgetId]['currencies'][$currencyId]['sum'] = bcadd($report[$budgetId]['currencies'][$currencyId]['sum'], $journal['amount']); $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']); @@ -271,6 +285,20 @@ class BudgetController extends Controller } } + // loop again to get percentages. + foreach ($report as $budgetId => $data) { + foreach ($data['currencies'] as $currencyId => $data) { + $sum = $data['sum'] ?? '0'; + $total = $sums[$currencyId]['sum'] ?? '0'; + $pct = '0'; + if (0 !== bccomp($sum, '0') && 0 !== bccomp($total, '9')) { + $pct = round(bcmul(bcdiv($sum, $total), '100')); + + } + $report[$budgetId]['currencies'][$currencyId]['sum_pct'] = $pct; + } + } + return view('reports.budget.partials.budgets', compact('sums', 'report')); } @@ -286,26 +314,136 @@ class BudgetController extends Controller */ public function general(Collection $accounts, Carbon $start, Carbon $end) { - // chart properties for cache: - $cache = new CacheProperties; - $cache->addProperty($start); - $cache->addProperty($end); - $cache->addProperty('budget-report'); - $cache->addProperty($accounts->pluck('id')->toArray()); - if ($cache->has()) { - return $cache->get(); // @codeCoverageIgnore + $report = [ + 'budgets' => [], + 'sums' => [], + ]; + $budgets = $this->repository->getBudgets(); + $defaultCurrency = app('amount')->getDefaultCurrency(); + /** @var Budget $budget */ + foreach ($budgets as $budget) { + $budgetId = $budget->id; + $report['budgets'][$budgetId] = $report['budgets'][$budgetId] ?? [ + 'budget_id' => $budgetId, + 'budget_name' => $budget->name, + 'no_budget' => false, + 'budget_limits' => [], + ]; + + // get all budget limits for budget in period: + $limits = $this->blRepository->getBudgetLimits($budget, $start, $end); + /** @var BudgetLimit $limit */ + foreach ($limits as $limit) { + $limitId = $limit->id; + $currency = $limit->transactionCurrency ?? $defaultCurrency; + $expenses = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, $accounts, new Collection([$budget])); + $spent = $expenses[$currency->id]['sum'] ?? '0'; + $left = -1 === bccomp(bcadd($limit->amount, $spent), '0') ? '0' : bcadd($limit->amount, $spent); + $overspent = 1 === bccomp(bcmul($spent, '-1'), $limit->amount) ? bcadd($spent, $limit->amount) : '0'; + + $report['budgets'][$budgetId]['budget_limits'][$limitId] = $report['budgets'][$budgetId]['budget_limits'][$limitId] ?? [ + 'budget_limit_id' => $limitId, + 'start_date' => $limit->start_date, + 'end_date' => $limit->end_date, + 'budgeted' => $limit->amount, + 'budgeted_pct' => '0', + 'spent' => $spent, + 'spent_pct' => '0', + 'left' => $left, + 'overspent' => $overspent, + 'currency_id' => $currency->id, + 'currency_code' => $currency->code, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + ]; + + // make sum information: + $report['sums'][$currency->id] = $report['sums'][$currency->id] ?? [ + 'budgeted' => '0', + 'spent' => '0', + 'left' => '0', + 'overspent' => '0', + 'currency_id' => $currency->id, + 'currency_code' => $currency->code, + 'currency_name' => $currency->name, + 'currency_symbol' => $currency->symbol, + 'currency_decimal_places' => $currency->decimal_places, + ]; + $report['sums'][$currency->id]['budgeted'] = bcadd($report['sums'][$currency->id]['budgeted'], $limit->amount); + $report['sums'][$currency->id]['spent'] = bcadd($report['sums'][$currency->id]['spent'], $spent); + $report['sums'][$currency->id]['left'] = bcadd($report['sums'][$currency->id]['left'], bcadd($limit->amount, $spent)); + $report['sums'][$currency->id]['overspent'] = bcadd($report['sums'][$currency->id]['overspent'], $overspent); + } } - $helper = app(BudgetReportHelperInterface::class); - $budgets = $helper->getBudgetReport($start, $end, $accounts); - try { - $result = view('reports.partials.budgets', compact('budgets'))->render(); - // @codeCoverageIgnoreStart - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budgets: %s', $e->getMessage())); - $result = 'Could not render view.'; + + // add no budget info. + $report['budgets'][0] = $report['budgets'][0] ?? [ + 'budget_id' => null, + 'budget_name' => null, + 'no_budget' => true, + 'budget_limits' => [], + ]; + $noBudget = $this->nbRepository->sumExpenses($start, $end); + foreach ($noBudget as $noBudgetEntry) { + $report['budgets'][0]['budget_limits'][] = [ + 'budget_limit_id' => null, + 'start_date' => $start, + 'end_date' => $end, + 'budgeted' => '0', + 'budgeted_pct' => '0', + 'spent' => $noBudgetEntry['sum'], + 'spent_pct' => '0', + 'left' => '0', + 'overspent' => '0', + 'currency_id' => $noBudgetEntry['currency_id'], + 'currency_code' => $noBudgetEntry['currency_code'], + 'currency_name' => $noBudgetEntry['currency_name'], + 'currency_symbol' => $noBudgetEntry['currency_symbol'], + 'currency_decimal_places' => $noBudgetEntry['currency_decimal_places'], + ]; + $report['sums'][$noBudgetEntry['currency_id']]['spent'] = bcadd($report['sums'][$noBudgetEntry['currency_id']]['spent'], $noBudgetEntry['sum']); } + + // make percentages based on total amount. + foreach ($report['budgets'] as $budgetId => $data) { + foreach ($data['budget_limits'] as $limitId => $entry) { + $currencyId = $entry['currency_id']; + + $spent = $entry['spent']; + $totalSpent = $report['sums'][$currencyId]['spent'] ?? '0'; + $spentPct = '0'; + + $budgeted = $entry['budgeted']; + $totalBudgeted = $report['sums'][$currencyId]['budgeted'] ?? '0';; + $budgetedPct = '0'; + + if (0 !== bccomp($spent, '0') && 0 !== bccomp($totalSpent, '0')) { + $spentPct = round(bcmul(bcdiv($spent, $totalSpent), '100')); + } + if (0 !== bccomp($budgeted, '0') && 0 !== bccomp($totalBudgeted, '0')) { + $budgetedPct = round(bcmul(bcdiv($budgeted, $totalBudgeted), '100')); + } + $report['budgets'][$budgetId]['budget_limits'][$limitId]['spent_pct'] = $spentPct; + $report['budgets'][$budgetId]['budget_limits'][$limitId]['budgeted_pct'] = $budgetedPct; + } + } + + // var_dump($noBudget); + // + // + // echo '
';
+        //        print_r($report);
+        //        exit;
+        //        try {
+        $result = view('reports.partials.budgets', compact('report'))->render();
+        // @codeCoverageIgnoreStart
+        //        } catch (Throwable $e) {
+        //            Log::debug(sprintf('Could not render reports.partials.budgets: %s', $e->getMessage()));
+        //            $result = 'Could not render view.';
+        //        }
+
         // @codeCoverageIgnoreEnd
-        $cache->store($result);
 
         return $result;
     }
diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php
index edf77e3337..2993995d01 100644
--- a/app/Providers/FireflyServiceProvider.php
+++ b/app/Providers/FireflyServiceProvider.php
@@ -33,8 +33,6 @@ use FireflyIII\Helpers\Help\Help;
 use FireflyIII\Helpers\Help\HelpInterface;
 use FireflyIII\Helpers\Report\BalanceReportHelper;
 use FireflyIII\Helpers\Report\BalanceReportHelperInterface;
-use FireflyIII\Helpers\Report\BudgetReportHelper;
-use FireflyIII\Helpers\Report\BudgetReportHelperInterface;
 use FireflyIII\Helpers\Report\NetWorth;
 use FireflyIII\Helpers\Report\NetWorthInterface;
 use FireflyIII\Helpers\Report\PopupReport;
@@ -189,7 +187,6 @@ class FireflyServiceProvider extends ServiceProvider
         $this->app->bind(ReportHelperInterface::class, ReportHelper::class);
         $this->app->bind(FiscalHelperInterface::class, FiscalHelper::class);
         $this->app->bind(BalanceReportHelperInterface::class, BalanceReportHelper::class);
-        $this->app->bind(BudgetReportHelperInterface::class, BudgetReportHelper::class);
         $class = (string)config(sprintf('firefly.cer_providers.%s', (string)config('firefly.cer_provider')));
         if ('' === $class) {
             throw new FireflyException('Invalid currency exchange rate provider. Cannot continue.');
diff --git a/resources/lang/en_US/list.php b/resources/lang/en_US/list.php
index 481ae46017..bb13e331f7 100644
--- a/resources/lang/en_US/list.php
+++ b/resources/lang/en_US/list.php
@@ -36,6 +36,7 @@ return [
     'currentBalance'          => 'Current balance',
     'linked_to_rules'         => 'Relevant rules',
     'active'                  => 'Is active?',
+    'percentage'              => 'pct.',
     'transaction_type'        => 'Type',
     'lastActivity'            => 'Last activity',
     'balanceDiff'             => 'Balance difference',
diff --git a/resources/views/v1/reports/budget/partials/budgets.twig b/resources/views/v1/reports/budget/partials/budgets.twig
index 0716387837..66dab99ab5 100644
--- a/resources/views/v1/reports/budget/partials/budgets.twig
+++ b/resources/views/v1/reports/budget/partials/budgets.twig
@@ -3,6 +3,7 @@
     
         {{ 'name'|_ }}
         {{ 'spent'|_ }}
+        {{ trans('list.percentage') }}
     
     
     
@@ -13,6 +14,7 @@
                     {{ budget.name }}
                 
                 —
+                 
             
         {% endif %}
         {% for currency in budget.currencies %}
@@ -23,6 +25,7 @@
                 
                     {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
                 
+                {{ currency.sum_pct }}%
             
         {% endfor %}
     {% endfor %}
@@ -34,6 +37,7 @@
             
                 {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
             
+             
         
     {% endfor %}
     
diff --git a/resources/views/v1/reports/partials/budgets.twig b/resources/views/v1/reports/partials/budgets.twig
index 9378ab4dda..604f2a02f9 100644
--- a/resources/views/v1/reports/partials/budgets.twig
+++ b/resources/views/v1/reports/partials/budgets.twig
@@ -4,147 +4,110 @@
         {{ 'budget'|_ }}
         {{ 'date'|_ }}
         {{ 'budgeted'|_ }}
+        {{ trans('list.percentage') }}
         {{ 'spent'|_ }}
+        {{ trans('list.percentage') }}
          
         {{ 'left'|_ }}
         {{ 'overspent'|_ }}
     
     
     
-    {% for budget in budgets.budgets %}
-        {% for row in budget.rows %}
+    {% for budget in report.budgets %}
+        {% for budget_limit in budget.budget_limits %}
             
-                
                 {% if budget.no_budget %}
                     
-                        {{ 'no_budget'|_ }} ({{ row.currency_name }})
+                        {{ 'no_budget'|_ }} ({{ budget_limit.currency_name }})
                     
                 {% else %}
                     
-                        {{ budget.budget_name }}
+                        {{ budget.budget_name }}
                     
                 {% endif %}
-
                 
-                
-                    {% if null != row.limit_id %}
-                        
-                            {{ row.start_date.formatLocalized(monthAndDayFormat) }}
+                
+                    {% if null != budget_limit.budget_limit_id %}
+                        
+                            {{ budget_limit.start_date.formatLocalized(monthAndDayFormat) }}
                             —
-                            {{ row.end_date.formatLocalized(monthAndDayFormat) }}
+                            {{ budget_limit.end_date.formatLocalized(monthAndDayFormat) }}
                         
                     {% endif %}
                 
 
                 
-                
-                    {% if null != row.budgeted %}
-                        {{ formatAmountBySymbol(row.budgeted, row.currency_symbol, row.currency_decimal_places) }}
+                
+                    {% if null != budget_limit.budgeted %}
+                        {{ formatAmountBySymbol(budget_limit.budgeted, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
                     {% endif %}
                 
+                
+                
+                    {{ budget_limit.budgeted_pct }}%
+                
+
 
                 
-                
-                    {{ formatAmountBySymbol(row.spent, row.currency_symbol, row.currency_decimal_places) }}
+                
+                    {{ formatAmountBySymbol(budget_limit.spent, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
+                
+                
+                
+                    {{ budget_limit.spent_pct }}%
                 
 
                 
                 
-                    {% if row.spent != 0 %}
+                    {% if budget_limit.spent != 0 %}
                         
+                           data-location="budget-spent-amount" data-currency-id="{{ budget_limit.currency_id }}" data-budget-id="{{ budget.budget_id }}">
                     {% endif %}
                 
 
+
                 
-                
-                    {% if null != row.left %}
-                        {{ formatAmountBySymbol(row.left, row.currency_symbol, row.currency_decimal_places) }}
+                
+                    {% if null != budget_limit.left %}
+                        {{ formatAmountBySymbol(budget_limit.left, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
                     {% endif %}
                 
 
+
+
                 
-                
-                    {% if null != row.overspent %}
-                        {{ formatAmountBySymbol(row.overspent, row.currency_symbol, row.currency_decimal_places) }}
+                
+                    {% if null != budget_limit.overspent %}
+                        {{ formatAmountBySymbol(budget_limit.overspent, budget_limit.currency_symbol, budget_limit.currency_decimal_places) }}
                     {% endif %}
                 
             
         {% endfor %}
-        {#
-        {% set sum_budgeted = sum_budgeted + line.budgeted %}
-        {% set sum_spent = sum_spent + line.spent %}
-        {% set sum_left = sum_left + line.left %}
-        {% set sum_overspent = sum_overspent + line.overspent %}
-
-        
-            
-            {% if line.type == 'no-budget' %}
-                
-                    {{ 'no_budget'|_ }}
-                
-            {% else %}
-                
-                    {{ line.name }}
-                
-            {% endif %}
-            
-            {% if line.type == 'budget-line' %}
-                
-                    
-                        {{ line.start.formatLocalized(monthAndDayFormat) }}
-                        —
-                        {{ line.end.formatLocalized(monthAndDayFormat) }}
-                    
-                
-            {% else %}
-                
-
-                
-            {% endif %}
-
-            
-            
-                {{ line.budgeted|formatAmount }}
-            
-
-            
-            
-                {{ line.spent|formatAmount }}
-            
-
-            
-            
-                {% if line.spent != 0 %}
-                    
-                {% endif %}
-            
-
-            
-            
-                {{ line.left|formatAmount }}
-            
-
-            
-            
-                {{ line.overspent|formatAmount }}
-            
-        #}
-        
     {% endfor %}
     
     
-    {% for sum in budgets.sums %}
+    {% for sum in report.sums %}
         
             {{ 'sum'|_ }} ({{ sum.currency_name }})
-            {{ formatAmountBySymbol(sum.budgeted, sum.currency_symbol, sum.decimal_places) }}
-            {{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.decimal_places) }}
+            {{ formatAmountBySymbol(sum.budgeted, sum.currency_symbol, sum.currency_decimal_places) }}
              
-            {{ formatAmountBySymbol(sum.left, sum.currency_symbol, sum.decimal_places) }}
-            {{ formatAmountBySymbol(sum.overspent, sum.currency_symbol, sum.decimal_places) }}
+            {{ formatAmountBySymbol(sum.spent, sum.currency_symbol, sum.currency_decimal_places) }}
+             
+             
+            {{ formatAmountBySymbol(sum.left, sum.currency_symbol, sum.currency_decimal_places) }}
+            {{ formatAmountBySymbol(sum.overspent, sum.currency_symbol, sum.currency_decimal_places) }}
+
         
-    {% endfor %}
+        {% endfor %}
+        {#
+
+
+
+             
+
+
+        
+        #}
     {#
     
         
diff --git a/tests/Feature/Controllers/Report/BudgetControllerTest.php b/tests/Feature/Controllers/Report/BudgetControllerTest.php
index 2370022471..a1f107581e 100644
--- a/tests/Feature/Controllers/Report/BudgetControllerTest.php
+++ b/tests/Feature/Controllers/Report/BudgetControllerTest.php
@@ -25,7 +25,6 @@ namespace Tests\Feature\Controllers\Report;
 use Amount;
 use Carbon\Carbon;
 use FireflyIII\Helpers\Fiscal\FiscalHelperInterface;
-use FireflyIII\Helpers\Report\BudgetReportHelperInterface;
 use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
 use Illuminate\Support\Collection;
 use Log;
@@ -58,7 +57,6 @@ class BudgetControllerTest extends TestCase
     {
         $this->mockDefaultSession();
         $return       = [];
-        $helper       = $this->mock(BudgetReportHelperInterface::class);
         $fiscalHelper = $this->mock(FiscalHelperInterface::class);
         $date         = new Carbon;
 
@@ -66,7 +64,6 @@ class BudgetControllerTest extends TestCase
         //Amount::shouldReceive('formatAnything')->atLeast()->once()->andReturn('x');
         $fiscalHelper->shouldReceive('endOfFiscalYear')->atLeast()->once()->andReturn($date);
         $fiscalHelper->shouldReceive('startOfFiscalYear')->atLeast()->once()->andReturn($date);
-        $helper->shouldReceive('getBudgetReport')->andReturn($return);
 
         $this->be($this->user());
         $response = $this->get(route('report-data.budget.general', ['1', '20120101', '20120131']));