From 53760766a012c84a994870d4dd8c19a14c0141e0 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 24 Apr 2016 20:41:12 +0200 Subject: [PATCH] Fixed budget charts. --- .../Controllers/Chart/BudgetController.php | 15 ++++++++++-- app/Repositories/Budget/BudgetRepository.php | 23 ++++++++++++------- .../Budget/BudgetRepositoryInterface.php | 3 ++- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index 966e87d7d6..e4fca45a10 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -7,6 +7,7 @@ use Carbon\Carbon; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Budget; use FireflyIII\Models\LimitRepetition; +use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Account\AccountRepositoryInterface as ARI; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Support\CacheProperties; @@ -273,10 +274,20 @@ class BudgetController extends Controller $currentEnd = Navigation::endOfPeriod($currentStart, $viewRange); // get all budget limits and their repetitions. - $reps = $repository->getAllBudgetLimitRepetitions($currentStart, $currentEnd); + $reps = $repository->getAllBudgetLimitRepetitions($currentStart, $currentEnd, $budget); $budgeted = $reps->sum('amount'); $perBudget = $repository->spentPerBudgetPerAccount(new Collection([$budget]), $accounts, $currentStart, $currentEnd); - $spent = $perBudget->sum('spent'); + // includes null, so filter! + $perBudget = $perBudget->filter( + function (TransactionJournal $journal) use ($budget) { + if (intval($journal->budget_id) === $budget->id) { + return $journal; + } + } + ); + + + $spent = $perBudget->sum('spent'); $entry = [ 'date' => clone $currentStart, diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index 091e53f130..f90d15065e 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -146,19 +146,26 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn /** * @param Carbon $start * @param Carbon $end + * @param Budget $budget * * @return Collection */ - public function getAllBudgetLimitRepetitions(Carbon $start, Carbon $end): Collection + public function getAllBudgetLimitRepetitions(Carbon $start, Carbon $end, Budget $budget = null): Collection { - /** @var Collection $repetitions */ - return LimitRepetition:: + $query = LimitRepetition:: leftJoin('budget_limits', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id') - ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') - ->where('limit_repetitions.startdate', '<=', $end->format('Y-m-d 00:00:00')) - ->where('limit_repetitions.startdate', '>=', $start->format('Y-m-d 00:00:00')) - ->where('budgets.user_id', $this->user->id) - ->get(['limit_repetitions.*', 'budget_limits.budget_id']); + ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id') + ->where('limit_repetitions.startdate', '<=', $end->format('Y-m-d 00:00:00')) + ->where('limit_repetitions.startdate', '>=', $start->format('Y-m-d 00:00:00')) + ->where('budgets.user_id', $this->user->id); + + if (!is_null($budget)) { + $query->where('budgets.id', $budget->id); + } + + $set = $query->get(['limit_repetitions.*', 'budget_limits.budget_id']); + + return $set; } /** diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php index 7bb87520b9..51b252ad8e 100644 --- a/app/Repositories/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetRepositoryInterface.php @@ -78,10 +78,11 @@ interface BudgetRepositoryInterface /** * @param Carbon $start * @param Carbon $end + * @param Budget $budget * * @return Collection */ - public function getAllBudgetLimitRepetitions(Carbon $start, Carbon $end): Collection; + public function getAllBudgetLimitRepetitions(Carbon $start, Carbon $end, Budget $budget = null): Collection; /** * @param Account $account