This commit is contained in:
James Cole
2018-02-19 20:32:33 +01:00
parent 9f63dfb9cb
commit 36354c3846
2 changed files with 17 additions and 17 deletions

View File

@@ -82,9 +82,9 @@ class BudgetController extends Controller
*/ */
public function amount(Request $request, BudgetRepositoryInterface $repository, Budget $budget) public function amount(Request $request, BudgetRepositoryInterface $repository, Budget $budget)
{ {
$amount = strval($request->get('amount')); $amount = strval($request->get('amount'));
$start = Carbon::createFromFormat('Y-m-d', $request->get('start')); $start = Carbon::createFromFormat('Y-m-d', $request->get('start'));
$end = Carbon::createFromFormat('Y-m-d', $request->get('end')); $end = Carbon::createFromFormat('Y-m-d', $request->get('end'));
$budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount); $budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount);
if (0 === bccomp($amount, '0')) { if (0 === bccomp($amount, '0')) {
$budgetLimit = null; $budgetLimit = null;
@@ -421,7 +421,7 @@ class BudgetController extends Controller
$defaultCurrency = app('amount')->getDefaultCurrency(); $defaultCurrency = app('amount')->getDefaultCurrency();
$amount = $request->get('amount'); $amount = $request->get('amount');
$page = $request->integer('page') === 0 ? 1 : $request->integer('page'); $page = $request->integer('page') === 0 ? 1 : $request->integer('page');
$this->repository->cleanupBudgets();
$this->repository->setAvailableBudget($defaultCurrency, $start, $end, $amount); $this->repository->setAvailableBudget($defaultCurrency, $start, $end, $amount);
Preferences::mark(); Preferences::mark();
@@ -504,7 +504,7 @@ class BudgetController extends Controller
{ {
$data = $request->getBudgetData(); $data = $request->getBudgetData();
$budget = $this->repository->store($data); $budget = $this->repository->store($data);
$this->repository->cleanupBudgets();
$request->session()->flash('success', strval(trans('firefly.stored_new_budget', ['name' => $budget->name]))); $request->session()->flash('success', strval(trans('firefly.stored_new_budget', ['name' => $budget->name])));
Preferences::mark(); Preferences::mark();
@@ -531,6 +531,7 @@ class BudgetController extends Controller
$this->repository->update($budget, $data); $this->repository->update($budget, $data);
$request->session()->flash('success', strval(trans('firefly.updated_budget', ['name' => $budget->name]))); $request->session()->flash('success', strval(trans('firefly.updated_budget', ['name' => $budget->name])));
$this->repository->cleanupBudgets();
Preferences::mark(); Preferences::mark();
if (1 === intval($request->get('return_to_edit'))) { if (1 === intval($request->get('return_to_edit'))) {

View File

@@ -60,19 +60,17 @@ class BudgetRepository implements BudgetRepositoryInterface
// delete limits with amount 0: // delete limits with amount 0:
BudgetLimit::where('amount', 0)->delete(); BudgetLimit::where('amount', 0)->delete();
// clean up: // do the clean up by hand because Sqlite can be tricky with this.
$set = BudgetLimit::groupBy(['budget_id', 'start_date', 'end_date']) $budgetLimits = BudgetLimit::orderBy('created_at', 'DESC')->get(['id', 'budget_id', 'start_date', 'end_date']);
->get(['budget_id', 'start_date', 'end_date', DB::raw('COUNT(*) as ct')]); $count = [];
foreach ($set as $entry) { /** @var BudgetLimit $budgetLimit */
if ($entry->ct > 1) { foreach ($budgetLimits as $budgetLimit) {
$newest = BudgetLimit::where('start_date', $entry->start_date)->where('end_date', $entry->end_date) $key = $budgetLimit->budget_id . '-' . $budgetLimit->start_date->format('Y-m-d') . $budgetLimit->end_date->format('Y-m-d');
->where('budget_id', $entry->budget_id)->orderBy('updated_at', 'DESC')->first(['budget_limits.*']); if (isset($count[$key])) {
if (!is_null($newest)) { // delete it!
BudgetLimit::where('start_date', $entry->start_date)->where('end_date', $entry->end_date) BudgetLimit::find($budgetLimit->id)->delete();
->where('budget_id', $entry->budget_id)
->where('id', '!=', $newest->id)->delete();
}
} }
$count[$key] = true;
} }
return true; return true;
@@ -629,6 +627,7 @@ class BudgetRepository implements BudgetRepositoryInterface
*/ */
public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): BudgetLimit public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): BudgetLimit
{ {
$this->cleanupBudgets();
// count the limits: // count the limits:
$limits = $budget->budgetlimits() $limits = $budget->budgetlimits()
->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00')) ->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00'))