Fix for #593, as inspired by @nhaarman.

This commit is contained in:
James Cole 2017-06-02 06:45:38 +02:00
parent 2eafd3cc15
commit 01fedc0bf8
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E

View File

@ -31,6 +31,7 @@ use Illuminate\Support\Collection;
use Navigation; use Navigation;
use Preferences; use Preferences;
use Response; use Response;
use Steam;
/** /**
* Class BudgetController * Class BudgetController
@ -320,12 +321,12 @@ class BudgetController extends Controller
['label' => strval(trans('firefly.overspent')), 'entries' => [], 'type' => 'bar',], ['label' => strval(trans('firefly.overspent')), 'entries' => [], 'type' => 'bar',],
]; ];
/** @var Budget $budget */ /** @var Budget $budget */
foreach ($budgets as $budget) { foreach ($budgets as $budget) {
// get relevant repetitions: // get relevant repetitions:
$limits = $this->repository->getBudgetLimits($budget, $start, $end); $limits = $this->repository->getBudgetLimits($budget, $start, $end);
$expenses = $this->getExpensesForBudget($limits, $budget, $start, $end); $expenses = $this->getExpensesForBudget($limits, $budget, $start, $end);
foreach ($expenses as $name => $row) { foreach ($expenses as $name => $row) {
$chartData[0]['entries'][$name] = $row['spent']; $chartData[0]['entries'][$name] = $row['spent'];
$chartData[1]['entries'][$name] = $row['left']; $chartData[1]['entries'][$name] = $row['left'];
@ -529,9 +530,7 @@ class BudgetController extends Controller
$rows = $this->spentInPeriodMulti($budget, $limits); $rows = $this->spentInPeriodMulti($budget, $limits);
foreach ($rows as $name => $row) { foreach ($rows as $name => $row) {
if (bccomp($row['spent'], '0') !== 0 || bccomp($row['left'], '0') !== 0) { if (bccomp($row['spent'], '0') !== 0 || bccomp($row['left'], '0') !== 0) {
$return[$name]['spent'] = bcmul($row['spent'], '-1'); $return[$name] = $row;
$return[$name]['left'] = $row['left'];
$return[$name]['overspent'] = bcmul($row['overspent'], '-1');
} }
} }
unset($rows, $row); unset($rows, $row);
@ -563,6 +562,7 @@ class BudgetController extends Controller
/** @var BudgetLimit $budgetLimit */ /** @var BudgetLimit $budgetLimit */
foreach ($limits as $budgetLimit) { foreach ($limits as $budgetLimit) {
$expenses = $this->repository->spentInPeriod(new Collection([$budget]), new Collection, $budgetLimit->start_date, $budgetLimit->end_date); $expenses = $this->repository->spentInPeriod(new Collection([$budget]), new Collection, $budgetLimit->start_date, $budgetLimit->end_date);
$expenses = Steam::positive($expenses);
if ($limits->count() > 1) { if ($limits->count() > 1) {
$name = $budget->name . ' ' . trans( $name = $budget->name . ' ' . trans(
@ -579,9 +579,13 @@ class BudgetController extends Controller
* spent: spent, or amount of budget limit when > amount * spent: spent, or amount of budget limit when > amount
*/ */
$amount = $budgetLimit->amount; $amount = $budgetLimit->amount;
$left = bccomp(bcadd($amount, $expenses), '0') < 1 ? '0' : bcadd($amount, $expenses); $leftInLimit = bcsub($amount, $expenses);
$spent = bccomp($expenses, $amount) === 1 ? $expenses : bcmul($amount, '-1'); $hasOverspent = bccomp($leftInLimit, '0') === -1;
$overspent = bccomp(bcadd($amount, $expenses), '0') < 1 ? bcadd($amount, $expenses) : '0';
$left = $hasOverspent ? '0' : bcsub($amount, $expenses);
$spent = $hasOverspent ? $amount : $expenses;
$overspent = $hasOverspent ? Steam::positive($leftInLimit) : '0';
$return[$name] = [ $return[$name] = [
'left' => $left, 'left' => $left,
'overspent' => $overspent, 'overspent' => $overspent,