diff --git a/app/Generator/Report/Budget/MonthReportGenerator.php b/app/Generator/Report/Budget/MonthReportGenerator.php
index 85c0f70789..d1adeb82b0 100644
--- a/app/Generator/Report/Budget/MonthReportGenerator.php
+++ b/app/Generator/Report/Budget/MonthReportGenerator.php
@@ -66,17 +66,13 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
*/
public function generate(): string
{
- $accountIds = implode(',', $this->accounts->pluck('id')->toArray());
- $budgetIds = implode(',', $this->budgets->pluck('id')->toArray());
- $expenses = $this->getExpenses();
- $accountSummary = $this->summarizeByAccount($expenses);
- $budgetSummary = $this->summarizeByBudget($expenses);
- $averageExpenses = $this->getAverages($expenses, SORT_ASC);
- $topExpenses = $this->getTopExpenses();
-
- // render!
+ $accountIds = implode(',', $this->accounts->pluck('id')->toArray());
+ $budgetIds = implode(',', $this->budgets->pluck('id')->toArray());
try {
- $result = view('reports.budget.month', compact('accountIds', 'budgetIds', 'accountSummary', 'budgetSummary', 'averageExpenses', 'topExpenses'))
+ $result = view(
+ 'reports.budget.month',
+ compact('accountIds', 'budgetIds')
+ )
->with('start', $this->start)->with('end', $this->end)
->with('budgets', $this->budgets)
->with('accounts', $this->accounts)
@@ -89,57 +85,6 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
return $result;
}
- /**
- * Get the expenses.
- *
- * @return array
- */
- protected function getExpenses(): array
- {
- if (count($this->expenses) > 0) {
- Log::debug('Return previous set of expenses.');
-
- return $this->expenses;
- }
-
- /** @var GroupCollectorInterface $collector */
- $collector = app(GroupCollectorInterface::class);
- $collector->setAccounts($this->accounts)->setRange($this->start, $this->end)
- ->setTypes([TransactionType::WITHDRAWAL])
- ->withAccountInformation()
- ->withBudgetInformation()
- ->setBudgets($this->budgets);
-
- $journals = $collector->getExtractedJournals();
- $this->expenses = $journals;
-
- return $journals;
- }
-
- /**
- * Summarize a collection by its budget.
- *
- * @param array $array
- *
- * @return array
- */
- private function summarizeByBudget(array $array): array
- {
- $result = [
- 'sum' => '0',
- ];
-
- /** @var array $journal */
- foreach ($array as $journal) {
- $budgetId = (int)$journal['budget_id'];
- $result[$budgetId] = $result[$budgetId] ?? '0';
- $result[$budgetId] = bcadd($journal['amount'], $result[$budgetId]);
- $result['sum'] = bcadd($result['sum'], $journal['amount']);
- }
-
- return $result;
- }
-
/**
* Set the involved accounts.
*
@@ -231,4 +176,31 @@ class MonthReportGenerator extends Support implements ReportGeneratorInterface
{
return $this;
}
+
+ /**
+ * Get the expenses.
+ *
+ * @return array
+ */
+ protected function getExpenses(): array
+ {
+ if (count($this->expenses) > 0) {
+ Log::debug('Return previous set of expenses.');
+
+ return $this->expenses;
+ }
+
+ /** @var GroupCollectorInterface $collector */
+ $collector = app(GroupCollectorInterface::class);
+ $collector->setAccounts($this->accounts)->setRange($this->start, $this->end)
+ ->setTypes([TransactionType::WITHDRAWAL])
+ ->withAccountInformation()
+ ->withBudgetInformation()
+ ->setBudgets($this->budgets);
+
+ $journals = $collector->getExtractedJournals();
+ $this->expenses = $journals;
+
+ return $journals;
+ }
}
diff --git a/app/Http/Controllers/Report/BudgetController.php b/app/Http/Controllers/Report/BudgetController.php
index 7768551901..61963427d1 100644
--- a/app/Http/Controllers/Report/BudgetController.php
+++ b/app/Http/Controllers/Report/BudgetController.php
@@ -25,8 +25,8 @@ namespace FireflyIII\Http\Controllers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\Report\BudgetReportHelperInterface;
use FireflyIII\Http\Controllers\Controller;
-use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
-use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface;
+use FireflyIII\Models\Account;
+use FireflyIII\Models\Budget;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\Support\CacheProperties;
use FireflyIII\Support\Http\Controllers\BasicDataSupport;
@@ -41,6 +41,168 @@ class BudgetController extends Controller
{
use BasicDataSupport;
+ /**
+ * @param Collection $accounts
+ * @param Collection $budgets
+ * @param Carbon $start
+ * @param Carbon $end
+ */
+ public function accountPerBudget(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end)
+ {
+ // get all journals.
+ $opsRepository = app(OperationsRepositoryInterface::class);
+ $spent = $opsRepository->listExpenses($start, $end, $accounts, $budgets);
+ $report = [];
+ /** @var Account $account */
+ foreach ($accounts as $account) {
+ $accountId = $account->id;
+ $report[$accountId] = $report[$accountId] ?? [
+ 'name' => $account->name,
+ 'id' => $account->id,
+ 'iban' => $account->iban,
+ 'currencies' => [],
+ ];
+ }
+
+ // loop expenses.
+ foreach ($spent as $currency) {
+ $currencyId = $currency['currency_id'];
+
+ foreach ($currency['budgets'] as $budget) {
+ foreach ($budget['transaction_journals'] as $journal) {
+ $sourceAccountId = $journal['source_account_id'];
+
+
+ $report[$sourceAccountId]['currencies'][$currencyId] = $report[$sourceAccountId]['currencies'][$currencyId] ?? [
+ 'currency_id' => $currency['currency_id'],
+ 'currency_symbol' => $currency['currency_symbol'],
+ 'currency_name' => $currency['currency_name'],
+ 'currency_decimal_places' => $currency['currency_decimal_places'],
+ 'budgets' => [],
+ ];
+ $report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budget['id']]
+ = $report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budget['id']]
+ ?? '0';
+ $report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budget['id']] = bcadd(
+ $report[$sourceAccountId]['currencies'][$currencyId]['budgets'][$budget['id']], $journal['amount']
+ );
+ }
+ }
+ }
+
+ return view('reports.budget.partials.account-per-budget', compact('report', 'budgets'));
+ }
+
+ /**
+ * @param Collection $accounts
+ * @param Collection $budgets
+ * @param Carbon $start
+ * @param Carbon $end
+ */
+ public function accounts(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end)
+ {
+ // get all journals.
+ $opsRepository = app(OperationsRepositoryInterface::class);
+ $spent = $opsRepository->listExpenses($start, $end, $accounts, $budgets);
+ $report = [];
+ $sums = [];
+ /** @var Account $account */
+ foreach ($accounts as $account) {
+ $accountId = $account->id;
+ $report[$accountId] = $report[$accountId] ?? [
+ 'name' => $account->name,
+ 'id' => $account->id,
+ 'iban' => $account->iban,
+ 'currencies' => [],
+ ];
+ }
+
+ // loop expenses.
+ foreach ($spent as $currency) {
+ $currencyId = $currency['currency_id'];
+ $sums[$currencyId] = $sums[$currencyId] ?? [
+ 'currency_id' => $currency['currency_id'],
+ 'currency_symbol' => $currency['currency_symbol'],
+ 'currency_name' => $currency['currency_name'],
+ 'currency_decimal_places' => $currency['currency_decimal_places'],
+ 'sum' => '0',
+ ];
+ foreach ($currency['budgets'] as $budget) {
+ foreach ($budget['transaction_journals'] as $journal) {
+ $sourceAccountId = $journal['source_account_id'];
+ $report[$sourceAccountId]['currencies'][$currencyId] = $report[$sourceAccountId]['currencies'][$currencyId] ?? [
+ 'currency_id' => $currency['currency_id'],
+ 'currency_symbol' => $currency['currency_symbol'],
+ 'currency_name' => $currency['currency_name'],
+ 'currency_decimal_places' => $currency['currency_decimal_places'],
+ 'sum' => '0',
+ ];
+ $report[$sourceAccountId]['currencies'][$currencyId]['sum'] = bcadd(
+ $report[$sourceAccountId]['currencies'][$currencyId]['sum'], $journal['amount']
+ );
+ $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']);
+ }
+ }
+ }
+
+ return view('reports.budget.partials.accounts', compact('sums', 'report'));
+ }
+
+ /**
+ * @param Collection $accounts
+ * @param Collection $budgets
+ * @param Carbon $start
+ * @param Carbon $end
+ *
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function budgets(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end)
+ {
+ // get all journals.
+ $opsRepository = app(OperationsRepositoryInterface::class);
+ $spent = $opsRepository->listExpenses($start, $end, $accounts, $budgets);
+ $sums = [];
+ $report = [];
+ /** @var Budget $budget */
+ foreach ($budgets as $budget) {
+ $budgetId = $budget->id;
+ $report[$budgetId] = $report[$budgetId] ?? [
+ 'name' => $budget->name,
+ 'id' => $budget->id,
+ 'currencies' => [],
+ ];
+ }
+ foreach ($spent as $currency) {
+ $currencyId = $currency['currency_id'];
+ $sums[$currencyId] = $sums[$currencyId] ?? [
+ 'currency_id' => $currency['currency_id'],
+ 'currency_symbol' => $currency['currency_symbol'],
+ 'currency_name' => $currency['currency_name'],
+ 'currency_decimal_places' => $currency['currency_decimal_places'],
+ 'sum' => '0',
+ ];
+ /** @var array $budget */
+ foreach ($currency['budgets'] as $budget) {
+ $budgetId = $budget['id'];
+
+ foreach ($budget['transaction_journals'] as $journal) {
+ // add currency info to report array:
+ $report[$budgetId]['currencies'][$currencyId] = $report[$budgetId]['currencies'][$currencyId] ?? [
+ 'sum' => '0',
+ 'currency_id' => $currency['currency_id'],
+ 'currency_symbol' => $currency['currency_symbol'],
+ 'currency_name' => $currency['currency_name'],
+ 'currency_decimal_places' => $currency['currency_decimal_places'],
+ ];
+ $report[$budgetId]['currencies'][$currencyId]['sum'] = bcadd($report[$budgetId]['currencies'][$currencyId]['sum'], $journal['amount']);
+ $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['sum'], $journal['amount']);
+ }
+ }
+ }
+
+ return view('reports.budget.partials.budgets', compact('sums', 'report'));
+ }
+
/**
* Show partial overview of budgets.
*
@@ -94,30 +256,19 @@ class BudgetController extends Controller
$cache->addProperty('budget-period-report');
$cache->addProperty($accounts->pluck('id')->toArray());
if ($cache->has()) {
- // return $cache->get(); // @codeCoverageIgnore
+ return $cache->get(); // @codeCoverageIgnore
}
- // generate budget report right here.
- /** @var BudgetRepositoryInterface $repository */
- $repository = app(BudgetRepositoryInterface::class);
-
/** @var OperationsRepositoryInterface $opsRepository */
$opsRepository = app(OperationsRepositoryInterface::class);
-
- /** @var NoBudgetRepositoryInterface $nbRepository */
- $nbRepository = app(NoBudgetRepositoryInterface::class);
-
-
- $budgets = $repository->getBudgets();
- $periods = app('navigation')->listOfPeriods($start, $end);
- $keyFormat = app('navigation')->preferredCarbonFormat($start, $end);
-
+ $periods = app('navigation')->listOfPeriods($start, $end);
+ $keyFormat = app('navigation')->preferredCarbonFormat($start, $end);
// list expenses for budgets in account(s)
$expenses = $opsRepository->listExpenses($start, $end, $accounts);
- $report = [];
+ $report = [];
foreach ($expenses as $currency) {
foreach ($currency['budgets'] as $budget) {
foreach ($budget['transaction_journals'] as $journal) {
@@ -136,7 +287,7 @@ class BudgetController extends Controller
];
$report[$key] ['entries'][$dateKey] = $report[$key] ['entries'][$dateKey] ?? '0';
$report[$key] ['entries'][$dateKey] = bcadd($journal['amount'], $report[$key] ['entries'][$dateKey]);
- $report[$key] ['sum'] = bcadd($report[$key] ['sum'], $journal['amount']);
+ $report[$key] ['sum'] = bcadd($report[$key] ['sum'], $journal['amount']);
}
}
}
diff --git a/app/Repositories/Budget/OperationsRepository.php b/app/Repositories/Budget/OperationsRepository.php
index 69b62eea62..32d7b742fd 100644
--- a/app/Repositories/Budget/OperationsRepository.php
+++ b/app/Repositories/Budget/OperationsRepository.php
@@ -248,8 +248,9 @@ class OperationsRepository implements OperationsRepositoryInterface
$array[$currencyId]['budgets'][$budgetId]['transaction_journals'][$journalId] = [
- 'amount' => app('steam')->negative($journal['amount']),
- 'date' => $journal['date'],
+ 'amount' => app('steam')->negative($journal['amount']),
+ 'source_account_id' => $journal['source_account_id'],
+ 'date' => $journal['date'],
];
}
diff --git a/public/v1/js/ff/reports/budget/month.js b/public/v1/js/ff/reports/budget/month.js
index 7fd3b4b5e7..8586767b38 100644
--- a/public/v1/js/ff/reports/budget/month.js
+++ b/public/v1/js/ff/reports/budget/month.js
@@ -24,6 +24,11 @@ $(function () {
"use strict";
drawChart();
+ loadAjaxPartial('accountsHolder', accountsUri);
+ loadAjaxPartial('budgetsHolder', budgetsUri);
+ loadAjaxPartial('accountPerbudgetHolder', accountPerBudgetUri);
+
+
$('#budgets-out-pie-chart-checked').on('change', function () {
redrawPieChart('budgets-out-pie-chart', budgetExpenseUri);
});
diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php
index c04e921911..5aaf2125fc 100644
--- a/resources/lang/en_US/firefly.php
+++ b/resources/lang/en_US/firefly.php
@@ -887,6 +887,7 @@ return [
'cannot_edit_other_fields' => 'You cannot mass-edit other fields than the ones here, because there is no room to show them. Please follow the link and edit them by one-by-one, if you need to edit these fields.',
'cannot_change_amount_reconciled' => 'You can\'t change the amount of reconciled transactions.',
'no_budget' => '(no budget)',
+ 'account_per_budget' => 'Account per budget',
'no_budget_squared' => '(no budget)',
'perm-delete-many' => 'Deleting many items in one go can be very disruptive. Please be cautious. You can delete part of a split transaction from this page, so take care.',
'mass_deleted_transactions_success' => 'Deleted :amount transaction(s).',
@@ -1434,7 +1435,7 @@ return [
'box_balance_in_currency' => 'Balance (:currency)',
'box_spent_in_currency' => 'Spent (:currency)',
'box_earned_in_currency' => 'Earned (:currency)',
- 'box_budgeted_in_currency' => 'Budgeted (:currency)',
+ 'box_budgeted_in_currency' => 'Budgeted (:currency)',
'box_sum_in_currency' => 'Sum (:currency)',
'box_bill_paid_in_currency' => 'Bills paid (:currency)',
'box_bill_unpaid_in_currency' => 'Bills unpaid (:currency)',
diff --git a/resources/views/v1/reports/budget/month.twig b/resources/views/v1/reports/budget/month.twig
index 2d06943585..b6d9f0c526 100644
--- a/resources/views/v1/reports/budget/month.twig
+++ b/resources/views/v1/reports/budget/month.twig
@@ -7,83 +7,50 @@
{% block content %}
-
+
+ {# spent in these budgets per account, per currency.#}
-
-
-
-
- {{ 'name'|_ }} |
- {{ 'spent'|_ }} |
-
-
-
- {% set sum = 0 %}
- {% for account in accounts %}
-
-
-
- {{ account.name }}
- |
- {% if accountSummary[account.id] %}
- {% set sum = sum + accountSummary[account.id] %}
- {{ accountSummary[account.id]|formatAmount }} |
- {% else %}
- {{ 0|formatAmount }} |
- {% endif %}
-
- {% endfor %}
-
-
-
- {{ 'sum'|_ }} |
- {{ sum|formatAmount }} |
-
-
-
+
+
+ {# loading indicator #}
+
+
-
+
+
-
-
-
-
- {{ 'name'|_ }} |
- {{ 'spent'|_ }} |
-
-
-
- {% for budget in budgets %}
-
-
- {{ budget.name }}
- |
- {% if budgetSummary[budget.id] %}
- {{ budgetSummary[budget.id]|formatAmount }} |
- {% else %}
- {{ 0|formatAmount }} |
- {% endif %}
-
- {% endfor %}
-
-
-
- {{ 'sum'|_ }} |
- {{ budgetSummary.sum|formatAmount }} |
-
-
-
+
+
+ {# loading indicator #}
+
+
+
+
+
+
+
+
+
+ {# loading indicator #}
+
+
+
+
+
+
+
{% if budgets.count > 1 %}
@@ -145,6 +112,12 @@
{{ 'average_spending_per_account'|_ }}
+
+ {# loading indicator #}
+
+
+
+ {#
+ #}
{% endif %}
@@ -208,7 +182,14 @@
-
+
+
+ {# loading indicator #}
+
+
+
+ {#
+
@@ -249,7 +230,7 @@
-
+ |
{{ formatAmountBySymbol(row.amount, row.currency_symbol, row.currency_decimal_places) }}
|
@@ -273,6 +254,7 @@
+ #}
{% endif %}
@@ -293,6 +275,11 @@
var accountIds = '{{ accountIds }}';
var budgetIds = '{{ budgetIds }}';
+ // html block URI's:
+ var accountsUri = '{{ route('report-data.budget.accounts', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
+ var budgetsUri = '{{ route('report-data.budget.budgets', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
+ var accountPerBudgetUri = '{{ route('report-data.budget.account-per-budget', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd')]) }}';
+
// chart uri's
var budgetExpenseUri = '{{ route('chart.budget.budget-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd'),'OTHERS']) }}';
var accountExpenseUri = '{{ route('chart.budget.account-expense', [accountIds, budgetIds, start.format('Ymd'), end.format('Ymd'),'OTHERS']) }}';
diff --git a/resources/views/v1/reports/budget/partials/account-per-budget.twig b/resources/views/v1/reports/budget/partials/account-per-budget.twig
new file mode 100644
index 0000000000..f979a37c82
--- /dev/null
+++ b/resources/views/v1/reports/budget/partials/account-per-budget.twig
@@ -0,0 +1,30 @@
+
+
+
+ {{ 'name'|_ }} |
+ {% for budget in budgets %}
+ {{ budget.name }} |
+ {% endfor %}
+
+
+
+ {% for account in report %}
+ {% for currency in account.currencies %}
+
+
+ {{ account.name }} ({{ currency.currency_name }})
+ |
+ {% for budget in budgets %}
+
+ {% if currency.budgets[budget.id] %}
+ {{ formatAmountBySymbol(currency.budgets[budget.id], currency.currency_symbol, currency.currency_decimal_places) }}
+ {% else %}
+ —
+ {% endif %}
+ |
+ {% endfor %}
+
+ {% endfor %}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/resources/views/v1/reports/budget/partials/accounts.twig b/resources/views/v1/reports/budget/partials/accounts.twig
new file mode 100644
index 0000000000..b85fe8cf11
--- /dev/null
+++ b/resources/views/v1/reports/budget/partials/accounts.twig
@@ -0,0 +1,32 @@
+
+
+
+ {{ 'name'|_ }} |
+ {{ 'spent'|_ }} |
+
+
+
+ {% for account in report %}
+ {% for currency in account.currencies %}
+
+
+ {{ account.name }} ({{ currency.currency_name }})
+ |
+
+ {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
+ |
+
+ {% endfor %}
+ {% endfor %}
+
+
+ {% for sum in sums %}
+
+ {{ 'sum'|_ }} ({{ sum.currency_name }}) |
+
+ {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
+ |
+
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/resources/views/v1/reports/budget/partials/budgets.twig b/resources/views/v1/reports/budget/partials/budgets.twig
new file mode 100644
index 0000000000..1b7c8fa880
--- /dev/null
+++ b/resources/views/v1/reports/budget/partials/budgets.twig
@@ -0,0 +1,40 @@
+
+
+
+ {{ 'name'|_ }} |
+ {{ 'spent'|_ }} |
+
+
+
+ {% for budget in report %}
+ {% if budget.currencies|length == 0 %}
+
+
+ {{ budget.name }}
+ |
+ — |
+
+ {% endif %}
+ {% for currency in budget.currencies %}
+
+
+ {{ budget.name }} ({{ currency.currency_name }})
+ |
+
+ {{ formatAmountBySymbol(currency.sum, currency.currency_symbol, currency.currency_decimal_places) }}
+ |
+
+ {% endfor %}
+ {% endfor %}
+
+
+ {% for sum in sums %}
+
+ {{ 'sum'|_ }} ({{ sum.currency_name }}) |
+
+ {{ formatAmountBySymbol(sum.sum, sum.currency_symbol, sum.currency_decimal_places) }}
+ |
+
+ {% endfor %}
+
+
diff --git a/routes/web.php b/routes/web.php
index 9f77bcdddb..9a0a517aa9 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -23,7 +23,7 @@ declare(strict_types=1);
Route::group(
['namespace' => 'FireflyIII\Http\Controllers\System',
- 'as' => 'installer.', 'prefix' => 'install'], function () {
+ 'as' => 'installer.', 'prefix' => 'install'], static function () {
Route::get('', ['uses' => 'InstallController@index', 'as' => 'index']);
Route::post('runCommand', ['uses' => 'InstallController@runCommand', 'as' => 'runCommand']);
}
@@ -67,7 +67,7 @@ Route::group(
* For some other routes, it is only relevant that the user is authenticated.
*/
Route::group(
- ['middleware' => 'user-simple-auth', 'namespace' => 'FireflyIII\Http\Controllers'], function () {
+ ['middleware' => 'user-simple-auth', 'namespace' => 'FireflyIII\Http\Controllers'], static function () {
Route::get('error', ['uses' => 'DebugController@displayError', 'as' => 'error']);
Route::any('logout', ['uses' => 'Auth\LoginController@logout', 'as' => 'logout']);
Route::get('flush', ['uses' => 'DebugController@flush', 'as' => 'flush']);
@@ -82,7 +82,7 @@ Route::group(
// *
// */
Route::group(
- ['middleware' => 'user-logged-in-no-2fa', 'prefix' => 'two-factor', 'as' => 'two-factor.', 'namespace' => 'FireflyIII\Http\Controllers\Auth'], function () {
+ ['middleware' => 'user-logged-in-no-2fa', 'prefix' => 'two-factor', 'as' => 'two-factor.', 'namespace' => 'FireflyIII\Http\Controllers\Auth'], static function () {
Route::post('submit', ['uses' => 'TwoFactorController@submitMFA', 'as' => 'submit']);
Route::get('lost', ['uses' => 'TwoFactorController@lostTwoFactor', 'as' => 'lost']);
// Route::post('', ['uses' => 'TwoFactorController@postIndex', 'as' => 'post']);
@@ -98,7 +98,7 @@ Route::group(
* Home Controller
*/
Route::group(
- ['middleware' => ['user-full-auth'], 'namespace' => 'FireflyIII\Http\Controllers'], function () {
+ ['middleware' => ['user-full-auth'], 'namespace' => 'FireflyIII\Http\Controllers'], static function () {
Route::get('/', ['uses' => 'HomeController@index', 'as' => 'index']);
Route::get('/flash', ['uses' => 'DebugController@testFlash', 'as' => 'test-flash']);
Route::get('/home', ['uses' => 'HomeController@index', 'as' => 'home']);
@@ -111,7 +111,7 @@ Route::group(
* Account Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'accounts', 'as' => 'accounts.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'accounts', 'as' => 'accounts.'], static function () {
// show:
Route::get('{objectType}', ['uses' => 'Account\IndexController@index', 'as' => 'index'])->where('objectType', 'revenue|asset|expense|liabilities');
@@ -159,7 +159,7 @@ Route::group(
* Attachment Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'attachments', 'as' => 'attachments.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'attachments', 'as' => 'attachments.'], static function () {
Route::get('', ['uses' => 'AttachmentController@index', 'as' => 'index']);
Route::get('edit/{attachment}', ['uses' => 'AttachmentController@edit', 'as' => 'edit']);
Route::get('delete/{attachment}', ['uses' => 'AttachmentController@delete', 'as' => 'delete']);
@@ -176,7 +176,7 @@ Route::group(
* Bills Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'bills', 'as' => 'bills.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'bills', 'as' => 'bills.'], static function () {
Route::get('', ['uses' => 'BillController@index', 'as' => 'index']);
Route::get('rescan/{bill}', ['uses' => 'BillController@rescan', 'as' => 'rescan']);
Route::get('create', ['uses' => 'BillController@create', 'as' => 'create']);
@@ -195,7 +195,7 @@ Route::group(
* Budget Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'budgets', 'as' => 'budgets.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'budgets', 'as' => 'budgets.'], static function () {
// delete
Route::get('delete/{budget}', ['uses' => 'Budget\DeleteController@delete', 'as' => 'delete']);
@@ -267,7 +267,7 @@ Route::group(
* Category Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'categories', 'as' => 'categories.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'categories', 'as' => 'categories.'], static function () {
// index:
Route::get('', ['uses' => 'Category\IndexController@index', 'as' => 'index']);
@@ -300,7 +300,7 @@ Route::group(
* Currency Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'currencies', 'as' => 'currencies.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'currencies', 'as' => 'currencies.'], static function () {
Route::get('', ['uses' => 'CurrencyController@index', 'as' => 'index']);
Route::get('create', ['uses' => 'CurrencyController@create', 'as' => 'create']);
Route::get('edit/{currency}', ['uses' => 'CurrencyController@edit', 'as' => 'edit']);
@@ -320,7 +320,7 @@ Route::group(
* Chart\Account Controller (default report)
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/account', 'as' => 'chart.account.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/account', 'as' => 'chart.account.'], static function () {
Route::get('frontpage', ['uses' => 'AccountController@frontpage', 'as' => 'frontpage']);
Route::get('expense', ['uses' => 'AccountController@expenseAccounts', 'as' => 'expense']);
Route::get('revenue', ['uses' => 'AccountController@revenueAccounts', 'as' => 'revenue']);
@@ -342,7 +342,7 @@ Route::group(
* Chart\Bill Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/bill', 'as' => 'chart.bill.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/bill', 'as' => 'chart.bill.'], static function () {
Route::get('frontpage', ['uses' => 'BillController@frontpage', 'as' => 'frontpage']);
Route::get('single/{bill}', ['uses' => 'BillController@single', 'as' => 'single']);
@@ -353,7 +353,7 @@ Route::group(
* Chart\Budget Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/budget', 'as' => 'chart.budget.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/budget', 'as' => 'chart.budget.'], static function () {
Route::get('frontpage', ['uses' => 'BudgetController@frontpage', 'as' => 'frontpage']);
Route::get('period/0/{currency}/{accountList}/{start_date}/{end_date}', ['uses' => 'BudgetController@periodNoBudget', 'as' => 'period.no-budget']);
@@ -429,7 +429,7 @@ Route::group(
* Chart\Tag Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/tag', 'as' => 'chart.tag.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/tag', 'as' => 'chart.tag.'], static function () {
// these charts are used in reports (tag reports):
Route::get(
@@ -473,7 +473,7 @@ Route::group(
* Chart\Expense Controller (for expense/revenue report).
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/expense', 'as' => 'chart.expense.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/expense', 'as' => 'chart.expense.'], static function () {
Route::get(
'operations/{accountList}/{expenseList}/{start_date}/{end_date}',
['uses' => 'ExpenseReportController@mainChart', 'as' => 'main']
@@ -496,7 +496,7 @@ Route::group(
* Chart\Report Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/report', 'as' => 'chart.report.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Chart', 'prefix' => 'chart/report', 'as' => 'chart.report.'], static function () {
Route::get('operations/{accountList}/{start_date}/{end_date}', ['uses' => 'ReportController@operations', 'as' => 'operations']);
Route::get('net-worth/{accountList}/{start_date}/{end_date}/', ['uses' => 'ReportController@netWorth', 'as' => 'net-worth']);
@@ -507,7 +507,7 @@ Route::group(
* Import Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'import', 'as' => 'import.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'import', 'as' => 'import.'], static function () {
// index
Route::get('', ['uses' => 'Import\IndexController@index', 'as' => 'index']);
@@ -543,7 +543,7 @@ Route::group(
* Help Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'help', 'as' => 'help.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'help', 'as' => 'help.'], static function () {
Route::get('{route}', ['uses' => 'HelpController@show', 'as' => 'show']);
}
@@ -553,7 +553,7 @@ Route::group(
* Budget Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'v1/jscript', 'as' => 'javascript.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'v1/jscript', 'as' => 'javascript.'], static function () {
Route::get('variables', ['uses' => 'JavascriptController@variables', 'as' => 'variables']);
Route::get('accounts', ['uses' => 'JavascriptController@accounts', 'as' => 'accounts']);
Route::get('currencies', ['uses' => 'JavascriptController@currencies', 'as' => 'currencies']);
@@ -564,7 +564,7 @@ Route::group(
* JSON Controller(s)
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'json', 'as' => 'json.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'json', 'as' => 'json.'], static function () {
// for auto complete
Route::get('accounts', ['uses' => 'Json\AutoCompleteController@accounts', 'as' => 'autocomplete.accounts']);
@@ -611,7 +611,7 @@ Route::group(
* NewUser Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'new-user', 'as' => 'new-user.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'new-user', 'as' => 'new-user.'], static function () {
Route::get('', ['uses' => 'NewUserController@index', 'as' => 'index']);
Route::post('submit', ['uses' => 'NewUserController@submit', 'as' => 'submit']);
}
@@ -621,7 +621,7 @@ Route::group(
* Piggy Bank Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'piggy-banks', 'as' => 'piggy-banks.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'piggy-banks', 'as' => 'piggy-banks.'], static function () {
Route::get('', ['uses' => 'PiggyBankController@index', 'as' => 'index']);
Route::get('add/{piggyBank}', ['uses' => 'PiggyBankController@add', 'as' => 'add-money']);
Route::get('remove/{piggyBank}', ['uses' => 'PiggyBankController@remove', 'as' => 'remove-money']);
@@ -648,7 +648,7 @@ Route::group(
* Preferences Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'preferences', 'as' => 'preferences.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'preferences', 'as' => 'preferences.'], static function () {
Route::get('', ['uses' => 'PreferencesController@index', 'as' => 'index']);
Route::post('', ['uses' => 'PreferencesController@postIndex', 'as' => 'update']);
@@ -660,7 +660,7 @@ Route::group(
* Profile Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'profile', 'as' => 'profile.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'profile', 'as' => 'profile.'], static function () {
Route::get('', ['uses' => 'ProfileController@index', 'as' => 'index']);
Route::get('change-email', ['uses' => 'ProfileController@changeEmail', 'as' => 'change-email']);
@@ -686,7 +686,7 @@ Route::group(
* Recurring Transactions Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'recurring', 'as' => 'recurring.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'recurring', 'as' => 'recurring.'], static function () {
Route::get('', ['uses' => 'Recurring\IndexController@index', 'as' => 'index']);
@@ -709,7 +709,7 @@ Route::group(
* Report Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'reports', 'as' => 'reports.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'reports', 'as' => 'reports.'], static function () {
Route::get('', ['uses' => 'ReportController@index', 'as' => 'index']);
Route::get('options/{reportType}', ['uses' => 'ReportController@options', 'as' => 'options']);
@@ -770,7 +770,7 @@ Route::group(
*/
Route::group(
['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Report', 'prefix' => 'report-data/operations',
- 'as' => 'report-data.operations.'], function () {
+ 'as' => 'report-data.operations.'], static function () {
Route::get('operations/{accountList}/{start_date}/{end_date}', ['uses' => 'OperationsController@operations', 'as' => 'operations']);
Route::get('income/{accountList}/{start_date}/{end_date}', ['uses' => 'OperationsController@income', 'as' => 'income']);
Route::get('expenses/{accountList}/{start_date}/{end_date}', ['uses' => 'OperationsController@expenses', 'as' => 'expenses']);
@@ -783,7 +783,7 @@ Route::group(
*/
Route::group(
['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Report', 'prefix' => 'report-data/category',
- 'as' => 'report-data.category.'], function () {
+ 'as' => 'report-data.category.'], static function () {
Route::get('operations/{accountList}/{start_date}/{end_date}', ['uses' => 'CategoryController@operations', 'as' => 'operations']);
Route::get('income/{accountList}/{start_date}/{end_date}', ['uses' => 'CategoryController@income', 'as' => 'income']);
Route::get('expenses/{accountList}/{start_date}/{end_date}', ['uses' => 'CategoryController@expenses', 'as' => 'expenses']);
@@ -807,11 +807,15 @@ Route::group(
*/
Route::group(
['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Report', 'prefix' => 'report-data/budget', 'as' => 'report-data.budget.'],
- function () {
+ static function () {
Route::get('general/{accountList}/{start_date}/{end_date}/', ['uses' => 'BudgetController@general', 'as' => 'general']);
Route::get('period/{accountList}/{start_date}/{end_date}', ['uses' => 'BudgetController@period', 'as' => 'period']);
+ Route::get('accounts/{accountList}/{budgetList}/{start_date}/{end_date}', ['uses' => 'BudgetController@accounts', 'as' => 'accounts']);
+ Route::get('budgets/{accountList}/{budgetList}/{start_date}/{end_date}', ['uses' => 'BudgetController@budgets', 'as' => 'budgets']);
+ Route::get('account-per-budget/{accountList}/{budgetList}/{start_date}/{end_date}', ['uses' => 'BudgetController@accountPerBudget', 'as' => 'account-per-budget']);
+
}
);
@@ -819,7 +823,7 @@ Route::group(
* Rules Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'rules', 'as' => 'rules.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'rules', 'as' => 'rules.'], static function () {
// create controller
Route::get('create/{ruleGroup?}', ['uses' => 'Rule\CreateController@create', 'as' => 'create']);
@@ -855,7 +859,7 @@ Route::group(
* Rule Groups Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'rule-groups', 'as' => 'rule-groups.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'rule-groups', 'as' => 'rule-groups.'], static function () {
Route::get('create', ['uses' => 'RuleGroup\CreateController@create', 'as' => 'create']);
Route::get('edit/{ruleGroup}', ['uses' => 'RuleGroup\EditController@edit', 'as' => 'edit']);
Route::get('delete/{ruleGroup}', ['uses' => 'RuleGroup\DeleteController@delete', 'as' => 'delete']);
@@ -874,7 +878,7 @@ Route::group(
* Search Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'search', 'as' => 'search.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'search', 'as' => 'search.'], static function () {
Route::get('', ['uses' => 'SearchController@index', 'as' => 'index']);
Route::any('search', ['uses' => 'SearchController@search', 'as' => 'search']);
}
@@ -885,7 +889,7 @@ Route::group(
* Tag Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'tags', 'as' => 'tags.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'tags', 'as' => 'tags.'], static function () {
Route::get('', ['uses' => 'TagController@index', 'as' => 'index']);
Route::get('create', ['uses' => 'TagController@create', 'as' => 'create']);
@@ -906,7 +910,7 @@ Route::group(
* Transaction Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'transactions', 'as' => 'transactions.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers', 'prefix' => 'transactions', 'as' => 'transactions.'], static function () {
// show groups:
// TODO improve these routes
@@ -993,7 +997,7 @@ Route::group(
*/
//Route::group(
// ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Transaction', 'prefix' => 'transactions/split',
-// 'as' => 'transactions.split.'], function () {
+// 'as' => 'transactions.split.'], static function () {
// // TODO improve these routes
// Route::get('edit/{tj}', ['uses' => 'SplitController@edit', 'as' => 'edit']);
// Route::post('update/{tj}', ['uses' => 'SplitController@update', 'as' => 'update']);
@@ -1035,7 +1039,7 @@ Route::group(
* Report Popup Controller
*/
Route::group(
- ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Popup', 'prefix' => 'popup', 'as' => 'popup.'], function () {
+ ['middleware' => 'user-full-auth', 'namespace' => 'FireflyIII\Http\Controllers\Popup', 'prefix' => 'popup', 'as' => 'popup.'], static function () {
Route::get('general', ['uses' => 'ReportController@general', 'as' => 'general']);
}
@@ -1045,7 +1049,7 @@ Route::group(
* For the admin routes, the user must be logged in and have the role of 'owner'
*/
Route::group(
- ['middleware' => 'admin', 'namespace' => 'FireflyIII\Http\Controllers\Admin', 'prefix' => 'admin', 'as' => 'admin.'], function () {
+ ['middleware' => 'admin', 'namespace' => 'FireflyIII\Http\Controllers\Admin', 'prefix' => 'admin', 'as' => 'admin.'], static function () {
// admin home
Route::get('', ['uses' => 'HomeController@index', 'as' => 'index']);