From 7f5134f758f2d83d5d860c558e7f412de1a7d4f5 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 19 Oct 2017 18:35:19 +0200 Subject: [PATCH] Clean up routine for #938 --- app/Repositories/Budget/BudgetRepository.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index c83d7eba73..69a6d8b465 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -14,6 +14,7 @@ declare(strict_types=1); namespace FireflyIII\Repositories\Budget; use Carbon\Carbon; +use DB; use FireflyIII\Helpers\Collector\JournalCollectorInterface; use FireflyIII\Models\AccountType; use FireflyIII\Models\AvailableBudget; @@ -48,6 +49,18 @@ class BudgetRepository implements BudgetRepositoryInterface // delete limits with amount 0: BudgetLimit::where('amount', 0)->delete(); + // clean up: + $set = BudgetLimit::groupBy(['budget_id', 'start_date', 'end_date']) + ->get(['budget_id', 'start_date', 'end_date', DB::raw('COUNT(*) as ct')]); + foreach ($set as $entry) { + if ($entry->ct > 1) { + $newest = BudgetLimit::where('start_date', $entry->start_date)->where('end_date', $entry->end_date) + ->where('budget_id', $entry->budget_id)->orderBy('updated_at', 'DESC')->first(['budget_limits.*']); + BudgetLimit::where('start_date', $entry->start_date)->where('end_date', $entry->end_date) + ->where('budget_id', $entry->budget_id)->where('id', '!=', $newest->id)->delete(); + } + } + return true; }