diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php index 11031f865a..4de38a9199 100644 --- a/app/Http/Controllers/Chart/BudgetController.php +++ b/app/Http/Controllers/Chart/BudgetController.php @@ -9,6 +9,8 @@ use FireflyIII\Models\LimitRepetition; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Grumpydictator\Gchart\GChart; use Illuminate\Support\Collection; +use Navigation; +use Preferences; use Response; use Session; @@ -19,6 +21,38 @@ use Session; */ class BudgetController extends Controller { + /** + * @param GChart $chart + * @param BudgetRepositoryInterface $repository + * @param Budget $budget + */ + public function budget(GChart $chart, BudgetRepositoryInterface $repository, Budget $budget) + { + $chart->addColumn(trans('firefly.period'),'date'); + $chart->addColumn(trans('firefly.spent'), 'number'); + + + $first = $repository->getFirstBudgetLimitDate($budget); + $range = $viewRange = Preferences::get('viewRange', '1M')->data; + $last = Session::get('end', new Carbon); + $final = clone $last; + $final->addYears(2); + $last = Navigation::endOfX($last, $range, $final); + + while ($first < $last) { + $end = Navigation::addPeriod($first, $range, 0); + + $spent = $repository->spentInPeriodCorrected($budget, $first, $end); + $chart->addRow($end, $spent); + + + $first = Navigation::addPeriod($first, $range, 0); + } + + $chart->generate(); + return Response::json($chart->getData()); + } + /** * Shows the amount left in a specific budget limit. * @@ -44,7 +78,7 @@ class BudgetController extends Controller /* * Sum of expenses on this day: */ - $sum = $repository->expensesOnDay($budget, $start); + $sum = $repository->expensesOnDayCorrected($budget, $start); $amount += $sum; $chart->addRow(clone $start, $amount); $start->addDay(); @@ -78,13 +112,13 @@ class BudgetController extends Controller foreach ($budgets as $budget) { $repetitions = $repository->getBudgetLimitRepetitions($budget, $start, $end); if ($repetitions->count() == 0) { - $expenses = $repository->spentInPeriod($budget, $start, $end, true); + $expenses = $repository->spentInPeriodCorrected($budget, $start, $end, true); $allEntries->push([$budget->name, 0, 0, $expenses]); continue; } /** @var LimitRepetition $repetition */ foreach ($repetitions as $repetition) { - $expenses = $repository->spentInPeriod($budget, $repetition->startdate, $repetition->enddate, true); + $expenses = $repository->spentInPeriodCorrected($budget, $repetition->startdate, $repetition->enddate, true); $left = $expenses < floatval($repetition->amount) ? floatval($repetition->amount) - $expenses : 0; $spent = $expenses > floatval($repetition->amount) ? 0 : $expenses; $overspent = $expenses > floatval($repetition->amount) ? $expenses - floatval($repetition->amount) : 0; @@ -145,7 +179,7 @@ class BudgetController extends Controller // each budget, fill the row: foreach ($budgets as $budget) { - $spent = $repository->spentInPeriod($budget, $start, $month, $shared); + $spent = $repository->spentInPeriodCorrected($budget, $start, $month, $shared); $row[] = $spent; } $chart->addRowArray($row); diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index b51120ebc1..0d2d4a648c 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -50,7 +50,7 @@ class CategoryController extends Controller while ($start <= $end) { $currentEnd = Navigation::endOfPeriod($start, $range); - $spent = $repository->spentInPeriod($category, $start, $currentEnd); + $spent = $repository->spentInPeriodCorrected($category, $start, $currentEnd); $chart->addRow(clone $start, $spent); $start = Navigation::addPeriod($start, $range, 0); @@ -109,7 +109,7 @@ class CategoryController extends Controller $chart->addColumn(trans('firefly.spent'), 'number'); while ($start <= $end) { - $spent = $repository->spentOnDaySum($category, $start); + $spent = $repository->spentOnDaySumCorrected($category, $start); $chart->addRow(clone $start, $spent); $start->addDay(); } @@ -153,7 +153,7 @@ class CategoryController extends Controller // each budget, fill the row: foreach ($categories as $category) { - $spent = $repository->spentInPeriod($category, $start, $month, $shared); + $spent = $repository->spentInPeriodCorrected($category, $start, $month, $shared); $row[] = $spent; } $chart->addRowArray($row); diff --git a/app/Http/Controllers/Chart/ReportController.php b/app/Http/Controllers/Chart/ReportController.php index 0980cf9525..1576ad27b6 100644 --- a/app/Http/Controllers/Chart/ReportController.php +++ b/app/Http/Controllers/Chart/ReportController.php @@ -43,8 +43,8 @@ class ReportController extends Controller $month = clone $start; $month->endOfMonth(); // total income and total expenses: - $incomeSum = floatval($query->incomeInPeriod($start, $month, $shared)->sum('queryAmount')); - $expenseSum = floatval($query->expenseInPeriod($start, $month, $shared)->sum('queryAmount')) * -1; + $incomeSum = floatval($query->incomeInPeriodCorrected($start, $month, $shared)->sum('amount')); + $expenseSum = floatval($query->expenseInPeriodCorrected($start, $month, $shared)->sum('amount')); $chart->addRow(clone $start, $incomeSum, $expenseSum); $start->addMonth(); @@ -82,8 +82,8 @@ class ReportController extends Controller $month = clone $start; $month->endOfMonth(); // total income and total expenses: - $income += floatval($query->incomeInPeriod($start, $month, $shared)->sum('queryAmount')); - $expense += floatval($query->expenseInPeriod($start, $month, $shared)->sum('queryAmount')) * -1; + $income += floatval($query->incomeInPeriodCorrected($start, $month, $shared)->sum('amount')); + $expense += floatval($query->expenseInPeriodCorrected($start, $month, $shared)->sum('amount')); $count++; $start->addMonth(); } diff --git a/app/Http/routes.php b/app/Http/routes.php index c5b4ed80af..e232d5172f 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -288,6 +288,7 @@ Route::group( Route::get('/chart/budget/frontpage', ['uses' => 'Chart\BudgetController@frontpage']); Route::get('/chart/budget/year/{year}/{shared?}', ['uses' => 'Chart\BudgetController@year'])->where(['year' => '[0-9]{4}', 'shared' => 'shared']); Route::get('/chart/budget/{budget}/{limitrepetition}', ['uses' => 'Chart\BudgetController@budgetLimit']); + Route::get('/chart/budget/{budget}', ['uses' => 'Chart\BudgetController@budget']); // categories: Route::get('/chart/category/frontpage', ['uses' => 'Chart\CategoryController@frontpage']);