diff --git a/.scrutinizer.yml b/.scrutinizer.yml
index 8486eef106..e36d2f3684 100644
--- a/.scrutinizer.yml
+++ b/.scrutinizer.yml
@@ -2,4 +2,4 @@
tools:
external_code_coverage:
timeout: 1800 # Timeout in seconds.
- runs: 2
\ No newline at end of file
+ runs: 2
diff --git a/.travis.yml b/.travis.yml
index a0ca8e95fe..150aeec78c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,4 +19,4 @@ after_script:
- CODECLIMATE_REPO_TOKEN=26489f9e854fcdf7e7660ba29c1455694685465b1f90329a79f7d2bf448acb61 ./vendor/bin/test-reporter --stdout > codeclimate.json
- "curl -X POST -d @codeclimate.json -H 'Content-Type: application/json' -H 'User-Agent: Code Climate (PHP Test Reporter v0.1.1)' https://codeclimate.com/test_reports"
- wget https://scrutinizer-ci.com/ocular.phar
- - php ocular.phar code-coverage:upload --format=php-clover build/logs/clover.xml
\ No newline at end of file
+ - php ocular.phar code-coverage:upload --format=php-clover build/logs/clover.xml
diff --git a/README.md b/README.md
index 47d7dac02e..f105242ea2 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Firefly III (v3.4.3)
+# Firefly III (v3.4.4)
[](https://scrutinizer-ci.com/g/JC5/firefly-iii/?branch=master)
[](https://scrutinizer-ci.com/g/JC5/firefly-iii/?branch=master)
diff --git a/app/Handlers/Events/ConnectJournalToPiggyBank.php b/app/Handlers/Events/ConnectJournalToPiggyBank.php
index f33e283fa1..701daa11c7 100644
--- a/app/Handlers/Events/ConnectJournalToPiggyBank.php
+++ b/app/Handlers/Events/ConnectJournalToPiggyBank.php
@@ -4,7 +4,6 @@ use Auth;
use FireflyIII\Events\JournalCreated;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\PiggyBankEvent;
-use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
/**
@@ -53,17 +52,9 @@ class ConnectJournalToPiggyBank
return false;
}
- $amount = $journal->amount;
- /** @var Transaction $transaction */
- foreach ($journal->transactions()->get() as $transaction) {
- if ($transaction->account_id == $piggyBank->account_id) {
- if ($transaction->amount < 0) {
- $amount = $transaction->amount * -1;
- }
- }
- }
-
- $repetition->currentamount += $amount;
+ $amount = $journal->correct_amount;
+ bcscale(2);
+ $repetition->currentamount = bcadd($repetition->currentamount, $amount);
$repetition->save();
PiggyBankEvent::create(['piggy_bank_id' => $piggyBank->id, 'transaction_journal_id' => $journal->id, 'date' => $journal->date, 'amount' => $amount]);
diff --git a/app/Helpers/Collection/BalanceLine.php b/app/Helpers/Collection/BalanceLine.php
index de82b6814d..d491f32959 100644
--- a/app/Helpers/Collection/BalanceLine.php
+++ b/app/Helpers/Collection/BalanceLine.php
@@ -64,6 +64,7 @@ class BalanceLine
if ($this->getRole() == self::ROLE_DIFFROLE) {
return trans('firefly.leftUnbalanced');
}
+
return '';
}
diff --git a/app/Helpers/Collection/Bill.php b/app/Helpers/Collection/Bill.php
index de5b86fc97..34b3205c6b 100644
--- a/app/Helpers/Collection/Bill.php
+++ b/app/Helpers/Collection/Bill.php
@@ -41,7 +41,7 @@ class Bill
public function getBills()
{
$this->bills->sortBy(
- function(BillLine $bill) {
+ function (BillLine $bill) {
$active = intval($bill->getBill()->active) == 0 ? 1 : 0;
$name = $bill->getBill()->name;
diff --git a/app/Helpers/Collection/Category.php b/app/Helpers/Collection/Category.php
index 71af3c2607..84f426487a 100644
--- a/app/Helpers/Collection/Category.php
+++ b/app/Helpers/Collection/Category.php
@@ -55,7 +55,7 @@ class Category
public function getCategories()
{
$this->categories->sortByDesc(
- function(CategoryModel $category) {
+ function (CategoryModel $category) {
return $category->spent;
}
);
diff --git a/app/Helpers/Collection/Expense.php b/app/Helpers/Collection/Expense.php
index f328bfd42a..a66c1ef86d 100644
--- a/app/Helpers/Collection/Expense.php
+++ b/app/Helpers/Collection/Expense.php
@@ -67,7 +67,7 @@ class Expense
public function getExpenses()
{
$this->expenses->sortByDesc(
- function(stdClass $object) {
+ function (stdClass $object) {
return $object->amount;
}
);
diff --git a/app/Helpers/Collection/Income.php b/app/Helpers/Collection/Income.php
index 2b635f8aa4..c3caf9eba7 100644
--- a/app/Helpers/Collection/Income.php
+++ b/app/Helpers/Collection/Income.php
@@ -68,7 +68,7 @@ class Income
public function getIncomes()
{
$this->incomes->sortByDesc(
- function(stdClass $object) {
+ function (stdClass $object) {
return $object->amount;
}
);
diff --git a/app/Helpers/Report/ReportHelper.php b/app/Helpers/Report/ReportHelper.php
index a1e337531a..4790b1d81c 100644
--- a/app/Helpers/Report/ReportHelper.php
+++ b/app/Helpers/Report/ReportHelper.php
@@ -66,10 +66,11 @@ class ReportHelper implements ReportHelperInterface
// remove cash account, if any:
$accounts = $accounts->filter(
- function(Account $account) {
+ function (Account $account) {
if ($account->accountType->type != 'Cash account') {
return $account;
}
+
return null;
}
);
diff --git a/app/Helpers/Report/ReportHelperInterface.php b/app/Helpers/Report/ReportHelperInterface.php
index e1e0a3df1a..75ffbdfd0c 100644
--- a/app/Helpers/Report/ReportHelperInterface.php
+++ b/app/Helpers/Report/ReportHelperInterface.php
@@ -5,9 +5,9 @@ namespace FireflyIII\Helpers\Report;
use Carbon\Carbon;
use FireflyIII\Helpers\Collection\Account as AccountCollection;
use FireflyIII\Helpers\Collection\Balance;
+use FireflyIII\Helpers\Collection\Bill as BillCollection;
use FireflyIII\Helpers\Collection\Budget as BudgetCollection;
use FireflyIII\Helpers\Collection\Category as CategoryCollection;
-use FireflyIII\Helpers\Collection\Bill as BillCollection;
use FireflyIII\Helpers\Collection\Expense;
use FireflyIII\Helpers\Collection\Income;
diff --git a/app/Helpers/Report/ReportQuery.php b/app/Helpers/Report/ReportQuery.php
index 5bcf09f9d8..2e720e0653 100644
--- a/app/Helpers/Report/ReportQuery.php
+++ b/app/Helpers/Report/ReportQuery.php
@@ -35,15 +35,15 @@ class ReportQuery implements ReportQueryInterface
$query = $this->queryJournalsWithTransactions($start, $end);
if ($includeShared === false) {
$query->where(
- function(Builder $query) {
+ function (Builder $query) {
$query->where(
- function(Builder $q) { // only get withdrawals not from a shared account
+ function (Builder $q) { // only get withdrawals not from a shared account
$q->where('transaction_types.type', 'Withdrawal');
$q->where('acm_from.data', '!=', '"sharedAsset"');
}
);
$query->orWhere(
- function(Builder $q) { // and transfers from a shared account.
+ function (Builder $q) { // and transfers from a shared account.
$q->where('transaction_types.type', 'Transfer');
$q->where('acm_to.data', '=', '"sharedAsset"');
}
@@ -61,17 +61,18 @@ class ReportQuery implements ReportQueryInterface
);
$data->each(
- function(TransactionJournal $journal) {
+ function (TransactionJournal $journal) {
if (intval($journal->account_encrypted) == 1) {
$journal->name = Crypt::decrypt($journal->name);
}
}
);
$data = $data->filter(
- function(TransactionJournal $journal) {
+ function (TransactionJournal $journal) {
if ($journal->amount != 0) {
return $journal;
}
+
return null;
}
);
@@ -91,26 +92,26 @@ class ReportQuery implements ReportQueryInterface
public function getAllAccounts(Carbon $start, Carbon $end, $includeShared = false)
{
$query = Auth::user()->accounts()->orderBy('accounts.name', 'ASC')
- ->accountTypeIn(['Default account', 'Asset account', 'Cash account']);
+ ->accountTypeIn(['Default account', 'Asset account', 'Cash account']);
if ($includeShared === false) {
$query->leftJoin(
- 'account_meta', function(JoinClause $join) {
+ 'account_meta', function (JoinClause $join) {
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
}
)
- ->orderBy('accounts.name', 'ASC')
- ->where(
- function(Builder $query) {
+ ->orderBy('accounts.name', 'ASC')
+ ->where(
+ function (Builder $query) {
- $query->where('account_meta.data', '!=', '"sharedAsset"');
- $query->orWhereNull('account_meta.data');
+ $query->where('account_meta.data', '!=', '"sharedAsset"');
+ $query->orWhereNull('account_meta.data');
- }
- );
+ }
+ );
}
$set = $query->get(['accounts.*']);
$set->each(
- function(Account $account) use ($start, $end) {
+ function (Account $account) use ($start, $end) {
/**
* The balance for today always incorporates transactions
* made on today. So to get todays "start" balance, we sub one
@@ -151,15 +152,15 @@ class ReportQuery implements ReportQueryInterface
// only get deposits not to a shared account
// and transfers to a shared account.
$query->where(
- function(Builder $query) {
+ function (Builder $query) {
$query->where(
- function(Builder $q) {
+ function (Builder $q) {
$q->where('transaction_types.type', 'Deposit');
$q->where('acm_to.data', '!=', '"sharedAsset"');
}
);
$query->orWhere(
- function(Builder $q) {
+ function (Builder $q) {
$q->where('transaction_types.type', 'Transfer');
$q->where('acm_from.data', '=', '"sharedAsset"');
}
@@ -178,17 +179,18 @@ class ReportQuery implements ReportQueryInterface
);
$data->each(
- function(TransactionJournal $journal) {
+ function (TransactionJournal $journal) {
if (intval($journal->account_encrypted) == 1) {
$journal->name = Crypt::decrypt($journal->name);
}
}
);
$data = $data->filter(
- function(TransactionJournal $journal) {
+ function (TransactionJournal $journal) {
if ($journal->amount != 0) {
return $journal;
}
+
return null;
}
);
@@ -210,16 +212,16 @@ class ReportQuery implements ReportQueryInterface
{
return floatval(
- Auth::user()->transactionjournals()
- ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
- ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
- ->transactionTypes(['Withdrawal'])
- ->where('transactions.account_id', $account->id)
- ->before($end)
- ->after($start)
- ->where('budget_transaction_journal.budget_id', $budget->id)
- ->get(['transaction_journals.*'])->sum('amount')
- ) * -1;
+ Auth::user()->transactionjournals()
+ ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
+ ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
+ ->transactionTypes(['Withdrawal'])
+ ->where('transactions.account_id', $account->id)
+ ->before($end)
+ ->after($start)
+ ->where('budget_transaction_journal.budget_id', $budget->id)
+ ->get(['transaction_journals.*'])->sum('amount')
+ ) * -1;
}
/**
@@ -254,28 +256,28 @@ class ReportQuery implements ReportQueryInterface
{
$query = TransactionJournal::
leftJoin(
- 'transactions as t_from', function(JoinClause $join) {
+ 'transactions as t_from', function (JoinClause $join) {
$join->on('t_from.transaction_journal_id', '=', 'transaction_journals.id')->where('t_from.amount', '<', 0);
}
)
- ->leftJoin('accounts as ac_from', 't_from.account_id', '=', 'ac_from.id')
- ->leftJoin(
- 'account_meta as acm_from', function(JoinClause $join) {
- $join->on('ac_from.id', '=', 'acm_from.account_id')->where('acm_from.name', '=', 'accountRole');
- }
- )
- ->leftJoin(
- 'transactions as t_to', function(JoinClause $join) {
- $join->on('t_to.transaction_journal_id', '=', 'transaction_journals.id')->where('t_to.amount', '>', 0);
- }
- )
- ->leftJoin('accounts as ac_to', 't_to.account_id', '=', 'ac_to.id')
- ->leftJoin(
- 'account_meta as acm_to', function(JoinClause $join) {
- $join->on('ac_to.id', '=', 'acm_to.account_id')->where('acm_to.name', '=', 'accountRole');
- }
- )
- ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id');
+ ->leftJoin('accounts as ac_from', 't_from.account_id', '=', 'ac_from.id')
+ ->leftJoin(
+ 'account_meta as acm_from', function (JoinClause $join) {
+ $join->on('ac_from.id', '=', 'acm_from.account_id')->where('acm_from.name', '=', 'accountRole');
+ }
+ )
+ ->leftJoin(
+ 'transactions as t_to', function (JoinClause $join) {
+ $join->on('t_to.transaction_journal_id', '=', 'transaction_journals.id')->where('t_to.amount', '>', 0);
+ }
+ )
+ ->leftJoin('accounts as ac_to', 't_to.account_id', '=', 'ac_to.id')
+ ->leftJoin(
+ 'account_meta as acm_to', function (JoinClause $join) {
+ $join->on('ac_to.id', '=', 'acm_to.account_id')->where('acm_to.name', '=', 'accountRole');
+ }
+ )
+ ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id');
$query->before($end)->after($start)->where('transaction_journals.user_id', Auth::user()->id);
return $query;
diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php
index bddabbd04b..be1a8545c8 100644
--- a/app/Http/Controllers/AccountController.php
+++ b/app/Http/Controllers/AccountController.php
@@ -7,6 +7,7 @@ use FireflyIII\Http\Requests\AccountFormRequest;
use FireflyIII\Models\Account;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use Input;
+use Preferences;
use Redirect;
use Session;
use Steam;
@@ -86,6 +87,7 @@ class AccountController extends Controller
$repository->destroy($account);
Session::flash('success', trans('firefly.' . $typeName . '_deleted', ['name' => $name]));
+ Preferences::mark();
return Redirect::to(Session::get('accounts.delete.url'));
}
@@ -154,7 +156,7 @@ class AccountController extends Controller
$start = clone Session::get('start', Carbon::now()->startOfMonth());
$start->subDay();
$accounts->each(
- function(Account $account) use ($start, $repository) {
+ function (Account $account) use ($start, $repository) {
$account->lastActivityDate = $repository->getLastActivity($account);
$account->startBalance = Steam::balance($account, $start);
$account->endBalance = Steam::balance($account, clone Session::get('end', Carbon::now()->endOfMonth()));
@@ -199,13 +201,14 @@ class AccountController extends Controller
'user' => Auth::user()->id,
'accountRole' => $request->input('accountRole'),
'openingBalance' => floatval($request->input('openingBalance')),
- 'openingBalanceDate' => new Carbon((string) $request->input('openingBalanceDate')),
+ 'openingBalanceDate' => new Carbon((string)$request->input('openingBalanceDate')),
'openingBalanceCurrency' => intval($request->input('balance_currency_id')),
];
- $account = $repository->store($accountData);
+ $account = $repository->store($accountData);
Session::flash('success', 'New account "' . $account->name . '" stored!');
+ Preferences::mark();
if (intval(Input::get('create_another')) === 1) {
// set value so create routine will not overwrite URL:
@@ -237,7 +240,7 @@ class AccountController extends Controller
'accountRole' => $request->input('accountRole'),
'virtualBalance' => floatval($request->input('virtualBalance')),
'openingBalance' => floatval($request->input('openingBalance')),
- 'openingBalanceDate' => new Carbon((string) $request->input('openingBalanceDate')),
+ 'openingBalanceDate' => new Carbon((string)$request->input('openingBalanceDate')),
'openingBalanceCurrency' => intval($request->input('balance_currency_id')),
'ccType' => $request->input('ccType'),
'ccMonthlyPaymentDate' => $request->input('ccMonthlyPaymentDate'),
@@ -246,6 +249,7 @@ class AccountController extends Controller
$repository->update($account, $accountData);
Session::flash('success', 'Account "' . $account->name . '" updated.');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
// set value so edit routine will not overwrite URL:
diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php
index a44ab81cbc..4330203b5c 100644
--- a/app/Http/Controllers/Auth/AuthController.php
+++ b/app/Http/Controllers/Auth/AuthController.php
@@ -109,7 +109,6 @@ class AuthController extends Controller
if (User::count() == 1) {
$admin = Role::where('name', 'owner')->first();
$this->auth->user()->attachRole($admin);
-// $this->auth->user()->roles()->save($admin);
}
diff --git a/app/Http/Controllers/BillController.php b/app/Http/Controllers/BillController.php
index 80bc497336..045b242b97 100644
--- a/app/Http/Controllers/BillController.php
+++ b/app/Http/Controllers/BillController.php
@@ -6,6 +6,7 @@ use FireflyIII\Models\Bill;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use Input;
+use Preferences;
use Redirect;
use Session;
use URL;
@@ -75,6 +76,7 @@ class BillController extends Controller
$repository->destroy($bill);
Session::flash('success', 'The bill was deleted.');
+ Preferences::mark();
return Redirect::to(Session::get('bills.delete.url'));
@@ -110,7 +112,7 @@ class BillController extends Controller
{
$bills = $repository->getBills();
$bills->each(
- function(Bill $bill) use ($repository) {
+ function (Bill $bill) use ($repository) {
$bill->nextExpectedMatch = $repository->nextExpectedMatch($bill);
$bill->lastFoundMatch = $repository->lastFoundMatch($bill);
}
@@ -141,6 +143,7 @@ class BillController extends Controller
Session::flash('success', 'Rescanned everything.');
+ Preferences::mark();
return Redirect::to(URL::previous());
}
@@ -172,6 +175,7 @@ class BillController extends Controller
$billData = $request->getBillData();
$bill = $repository->store($billData);
Session::flash('success', 'Bill "' . e($bill->name) . '" stored.');
+ Preferences::mark();
if (intval(Input::get('create_another')) === 1) {
// set value so create routine will not overwrite URL:
@@ -198,6 +202,7 @@ class BillController extends Controller
$bill = $repository->update($bill, $billData);
Session::flash('success', 'Bill "' . e($bill->name) . '" updated.');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
// set value so edit routine will not overwrite URL:
diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php
index b4d0cca20e..a58248e9fc 100644
--- a/app/Http/Controllers/BudgetController.php
+++ b/app/Http/Controllers/BudgetController.php
@@ -49,6 +49,7 @@ class BudgetController extends Controller
if ($amount == 0) {
$limitRepetition = null;
}
+ Preferences::mark();
return Response::json(['name' => $budget->name, 'repetition' => $limitRepetition ? $limitRepetition->id : 0]);
@@ -102,6 +103,7 @@ class BudgetController extends Controller
Session::flash('success', 'The budget "' . e($name) . '" was deleted.');
+ Preferences::mark();
return Redirect::to(Session::get('budgets.delete.url'));
@@ -196,6 +198,7 @@ class BudgetController extends Controller
$date = Session::get('start', Carbon::now()->startOfMonth())->format('FY');
Preferences::set('budgetIncomeTotal' . $date, intval(Input::get('amount')));
+ Preferences::mark();
return Redirect::route('budgets.index');
}
@@ -216,12 +219,15 @@ class BudgetController extends Controller
}
$journals = $repository->getJournals($budget, $repetition);
- $limits = !is_null($repetition->id) ? [$repetition->budgetLimit] : $repository->getBudgetLimits($budget);
- $subTitle = !is_null($repetition->id)
- ?
- trans('firefly.budget_in_month', ['name' => $budget->name, 'month' => $repetition->startdate->formatLocalized($this->monthFormat)])
- :
- e($budget->name);
+
+ if (is_null($repetition->id)) {
+ $limits = $repository->getBudgetLimits($budget);
+ $subTitle = e($budget->name);
+ } else {
+ $limits = [$repetition->budgetLimit];
+ $subTitle = trans('firefly.budget_in_month', ['name' => $budget->name, 'month' => $repetition->startdate->formatLocalized($this->monthFormat)]);
+ }
+
$journals->setPath('/budgets/show/' . $budget->id);
return view('budgets.show', compact('limits', 'budget', 'repetition', 'journals', 'subTitle'));
@@ -239,9 +245,10 @@ class BudgetController extends Controller
'name' => $request->input('name'),
'user' => Auth::user()->id,
];
- $budget = $repository->store($budgetData);
+ $budget = $repository->store($budgetData);
Session::flash('success', 'New budget "' . $budget->name . '" stored!');
+ Preferences::mark();
if (intval(Input::get('create_another')) === 1) {
// set value so create routine will not overwrite URL:
@@ -272,6 +279,7 @@ class BudgetController extends Controller
$repository->update($budget, $budgetData);
Session::flash('success', 'Budget "' . $budget->name . '" updated.');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
// set value so edit routine will not overwrite URL:
diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php
index 92f027ab26..b6f016f272 100644
--- a/app/Http/Controllers/CategoryController.php
+++ b/app/Http/Controllers/CategoryController.php
@@ -7,6 +7,7 @@ use FireflyIII\Models\Category;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use Illuminate\Pagination\LengthAwarePaginator;
use Input;
+use Preferences;
use Redirect;
use Session;
use URL;
@@ -77,6 +78,7 @@ class CategoryController extends Controller
$repository->destroy($category);
Session::flash('success', 'The category "' . e($name) . '" was deleted.');
+ Preferences::mark();
return Redirect::to(Session::get('categories.delete.url'));
}
@@ -112,7 +114,7 @@ class CategoryController extends Controller
$categories = $repository->getCategories();
$categories->each(
- function(Category $category) use ($repository) {
+ function (Category $category) use ($repository) {
$category->lastActivity = $repository->getLatestActivity($category);
}
);
@@ -165,9 +167,10 @@ class CategoryController extends Controller
'name' => $request->input('name'),
'user' => Auth::user()->id,
];
- $category = $repository->store($categoryData);
+ $category = $repository->store($categoryData);
Session::flash('success', 'New category "' . $category->name . '" stored!');
+ Preferences::mark();
if (intval(Input::get('create_another')) === 1) {
Session::put('categories.create.fromStore', true);
@@ -195,6 +198,7 @@ class CategoryController extends Controller
$repository->update($category, $categoryData);
Session::flash('success', 'Category "' . $category->name . '" updated.');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
Session::put('categories.edit.fromUpdate', true);
diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php
index 5c9e11e3c1..2c5d4f7a6e 100644
--- a/app/Http/Controllers/Chart/AccountController.php
+++ b/app/Http/Controllers/Chart/AccountController.php
@@ -6,6 +6,7 @@ use Carbon\Carbon;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Account;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
+use FireflyIII\Support\CacheProperties;
use Grumpydictator\Gchart\GChart;
use Illuminate\Support\Collection;
use Preferences;
@@ -37,6 +38,18 @@ class AccountController extends Controller
$start = new Carbon($year . '-' . $month . '-01');
$end = clone $start;
$end->endOfMonth();
+
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('all');
+ $cache->addProperty('accounts');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
+
$chart->addColumn(trans('firefly.dayOfMonth'), 'date');
/** @var Collection $accounts */
@@ -50,6 +63,7 @@ class AccountController extends Controller
}
}
+ //
$index = 1;
/** @var Account $account */
@@ -73,7 +87,10 @@ class AccountController extends Controller
}
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
/**
@@ -93,6 +110,17 @@ class AccountController extends Controller
$end = Session::get('end', Carbon::now()->endOfMonth());
$accounts = $repository->getFrontpageAccounts($frontPage);
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('frontpage');
+ $cache->addProperty('accounts');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
+
$index = 1;
/** @var Account $account */
foreach ($accounts as $account) {
@@ -115,7 +143,10 @@ class AccountController extends Controller
}
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
@@ -138,6 +169,17 @@ class AccountController extends Controller
$current = clone $start;
$today = new Carbon;
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('frontpage');
+ $cache->addProperty('single');
+ $cache->addProperty($account->id);
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
while ($end >= $current) {
$certain = $current < $today;
$chart->addRow(clone $current, Steam::balance($account, $current), $certain);
@@ -147,6 +189,9 @@ class AccountController extends Controller
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
}
diff --git a/app/Http/Controllers/Chart/BillController.php b/app/Http/Controllers/Chart/BillController.php
index 9ba00ee2fc..7a4c2670bb 100644
--- a/app/Http/Controllers/Chart/BillController.php
+++ b/app/Http/Controllers/Chart/BillController.php
@@ -8,6 +8,7 @@ use FireflyIII\Models\Bill;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
+use FireflyIII\Support\CacheProperties;
use Grumpydictator\Gchart\GChart;
use Illuminate\Support\Collection;
use Response;
@@ -38,6 +39,14 @@ class BillController extends Controller
$chart->addColumn(trans('firefly.minAmount'), 'number');
$chart->addColumn(trans('firefly.billEntry'), 'number');
+ $cache = new CacheProperties;
+ $cache->addProperty('single');
+ $cache->addProperty('bill');
+ $cache->addProperty($bill->id);
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
// get first transaction or today for start:
$results = $repository->getJournals($bill);
/** @var TransactionJournal $result */
@@ -47,8 +56,10 @@ class BillController extends Controller
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+ return Response::json($data);
}
/**
@@ -66,8 +77,20 @@ class BillController extends Controller
$chart->addColumn(trans('firefly.name'), 'string');
$chart->addColumn(trans('firefly.amount'), 'number');
- $start = Session::get('start', Carbon::now()->startOfMonth());
- $end = Session::get('end', Carbon::now()->endOfMonth());
+ $start = Session::get('start', Carbon::now()->startOfMonth());
+ $end = Session::get('end', Carbon::now()->endOfMonth());
+
+
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('bills');
+ $cache->addProperty('frontpage');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
$bills = $repository->getActiveBills();
$paid = new Collection; // journals.
$unpaid = new Collection; // bills
@@ -133,8 +156,12 @@ class BillController extends Controller
$chart->addRow(trans('firefly.unpaid') . ': ' . join(', ', $unpaidDescriptions), $unpaidAmount);
$chart->addRow(trans('firefly.paid') . ': ' . join(', ', $paidDescriptions), $paidAmount);
+
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
}
diff --git a/app/Http/Controllers/Chart/BudgetController.php b/app/Http/Controllers/Chart/BudgetController.php
index 12c1f9e476..517f9e56f9 100644
--- a/app/Http/Controllers/Chart/BudgetController.php
+++ b/app/Http/Controllers/Chart/BudgetController.php
@@ -7,6 +7,7 @@ use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Budget;
use FireflyIII\Models\LimitRepetition;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
+use FireflyIII\Support\CacheProperties;
use Grumpydictator\Gchart\GChart;
use Illuminate\Support\Collection;
use Navigation;
@@ -41,19 +42,41 @@ class BudgetController extends Controller
$final->addYears(2);
$last = Navigation::endOfX($last, $range, $final);
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($first);
+ $cache->addProperty($last);
+ $cache->addProperty('budget');
+ $cache->addProperty('budget');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
+
while ($first < $last) {
$end = Navigation::addPeriod($first, $range, 0);
+ $end->subDay();
+
+ // start date for chart.
+ $chartDate = clone $end;
+ $chartDate->startOfMonth();
$spent = $repository->spentInPeriodCorrected($budget, $first, $end);
- $chart->addRow($end, $spent);
-
+ $chart->addRow($chartDate, $spent);
$first = Navigation::addPeriod($first, $range, 0);
+
+
}
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+
+
+ $cache->store($data);
+
+ return Response::json($data);
}
/**
@@ -71,6 +94,18 @@ class BudgetController extends Controller
$start = clone $repetition->startdate;
$end = $repetition->enddate;
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('budget');
+ $cache->addProperty('limit');
+ $cache->addProperty($budget->id);
+ $cache->addProperty($repetition->id);
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
$chart->addColumn(trans('firefly.day'), 'date');
$chart->addColumn(trans('firefly.left'), 'number');
@@ -88,7 +123,10 @@ class BudgetController extends Controller
}
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
@@ -112,6 +150,18 @@ class BudgetController extends Controller
$end = Session::get('end', Carbon::now()->endOfMonth());
$allEntries = new Collection;
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('budget');
+ $cache->addProperty('all');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
+
+ /** @var Budget $budget */
foreach ($budgets as $budget) {
$repetitions = $repository->getBudgetLimitRepetitions($budget, $start, $end);
if ($repetitions->count() == 0) {
@@ -127,9 +177,9 @@ class BudgetController extends Controller
$overspent = $expenses > floatval($repetition->amount) ? $expenses - floatval($repetition->amount) : 0;
$allEntries->push(
[$budget->name . ' (' . $repetition->startdate->formatLocalized($this->monthAndDayFormat) . ')',
- $left,
- $spent,
- $overspent
+ $left,
+ $spent,
+ $overspent
]
);
}
@@ -146,7 +196,10 @@ class BudgetController extends Controller
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
@@ -167,6 +220,16 @@ class BudgetController extends Controller
$shared = $shared == 'shared' ? true : false;
$budgets = $repository->getBudgets();
+ // chart properties for cache:
+ $cache = new CacheProperties();
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('budget');
+ $cache->addProperty('year');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
// add columns:
$chart->addColumn(trans('firefly.month'), 'date');
foreach ($budgets as $budget) {
@@ -187,11 +250,14 @@ class BudgetController extends Controller
}
$chart->addRowArray($row);
- $start->addMonth();
+ $start->endOfMonth()->addDay();
}
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
}
diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php
index c6f42cad5b..b7c4bdb800 100644
--- a/app/Http/Controllers/Chart/CategoryController.php
+++ b/app/Http/Controllers/Chart/CategoryController.php
@@ -7,6 +7,7 @@ use Carbon\Carbon;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Models\Category;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
+use FireflyIII\Support\CacheProperties;
use Grumpydictator\Gchart\GChart;
use Navigation;
use Preferences;
@@ -75,12 +76,23 @@ class CategoryController extends Controller
$start = Session::get('start', Carbon::now()->startOfMonth());
$end = Session::get('end', Carbon::now()->endOfMonth());
- $set = $repository->getCategoriesAndExpensesCorrected($start, $end);
+
+ // chart properties for cache:
+ $cache = new CacheProperties;
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('category');
+ $cache->addProperty('frontpage');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
+ $set = $repository->getCategoriesAndExpensesCorrected($start, $end);
// sort by callback:
uasort(
$set,
- function($left, $right) {
+ function ($left, $right) {
if ($left['sum'] == $right['sum']) {
return 0;
}
@@ -99,7 +111,10 @@ class CategoryController extends Controller
$chart->generate();
- return Response::json($chart->getData());
+ $data = $chart->getData();
+ $cache->store($data);
+
+ return Response::json($data);
}
diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php
index 6f57851cb9..8f34c5422d 100644
--- a/app/Http/Controllers/CurrencyController.php
+++ b/app/Http/Controllers/CurrencyController.php
@@ -59,6 +59,7 @@ class CurrencyController extends Controller
{
Preferences::set('currencyPreference', $currency->code);
+ Preferences::mark();
Session::flash('success', $currency->name . ' is now the default currency.');
Cache::forget('FFCURRENCYSYMBOL');
@@ -170,6 +171,7 @@ class CurrencyController extends Controller
if (Auth::user()->hasRole('owner')) {
$currency = $repository->store($data);
Session::flash('success', 'Currency "' . $currency->name . '" created');
+
}
if (intval(Input::get('create_another')) === 1) {
@@ -198,6 +200,7 @@ class CurrencyController extends Controller
$currency = $repository->update($currency, $data);
}
Session::flash('success', 'Currency "' . e($currency->name) . '" updated.');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
index 3b09b9f96c..6db95ea8ef 100644
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -6,7 +6,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use Input;
use Preferences;
use Redirect;
-use Route;
use Session;
use Steam;
@@ -46,40 +45,52 @@ class HomeController extends Controller
/**
* @param AccountRepositoryInterface $repository
*
- * @return \Illuminate\View\View
+ * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
*/
public function index(AccountRepositoryInterface $repository)
{
- $types = Config::get('firefly.accountTypesByIdentifier.asset');
- $count = $repository->countAccounts($types);
- $title = 'Firefly';
- $subTitle = trans('firefly.welcomeBack');
- $mainTitleIcon = 'fa-fire';
- $transactions = [];
- $frontPage = Preferences::get('frontPageAccounts', []);
- $start = Session::get('start', Carbon::now()->startOfMonth());
- $end = Session::get('end', Carbon::now()->endOfMonth());
- $accounts = $repository->getFrontpageAccounts($frontPage);
- $savings = $repository->getSavingsAccounts();
+
+ $types = Config::get('firefly.accountTypesByIdentifier.asset');
+ $count = $repository->countAccounts($types);
+
+
+ if ($count == 0) {
+ return Redirect::route('new-user.index');
+ }
+
+ $title = 'Firefly';
+ $subTitle = trans('firefly.welcomeBack');
+ $mainTitleIcon = 'fa-fire';
+ $transactions = [];
+ $frontPage = Preferences::get('frontPageAccounts', []);
+ $start = Session::get('start', Carbon::now()->startOfMonth());
+ $end = Session::get('end', Carbon::now()->endOfMonth());
+
+ $accounts = $repository->getFrontpageAccounts($frontPage);
+ $savings = $repository->getSavingsAccounts();
+
$piggyBankAccounts = $repository->getPiggyBankAccounts();
+
$savingsTotal = 0;
foreach ($savings as $savingAccount) {
$savingsTotal += Steam::balance($savingAccount, $end);
}
$sum = $repository->sumOfEverything();
+
if ($sum != 0) {
Session::flash(
'error', 'Your transactions are unbalanced. This means a'
- . ' withdrawal, deposit or transfer was not stored properly. '
- . 'Please check your accounts and transactions for errors.'
+ . ' withdrawal, deposit or transfer was not stored properly. '
+ . 'Please check your accounts and transactions for errors.'
);
}
foreach ($accounts as $account) {
$set = $repository->getFrontpageTransactions($account, $start, $end);
+
if (count($set) > 0) {
$transactions[] = [$set, $account];
}
@@ -87,79 +98,4 @@ class HomeController extends Controller
return view('index', compact('count', 'title', 'savings', 'subTitle', 'mainTitleIcon', 'transactions', 'savingsTotal', 'piggyBankAccounts'));
}
-
- /**
- * @codeCoverageIgnore
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- */
- public function routes()
- {
- $directory = '/vagrant_data/Sites/firefly-iii-help';
- $languages = array_keys(Config::get('firefly.lang'));
- $routes = [];
- $ignored = [
- 'debugbar.openhandler', 'debugbar.assets.css', 'debugbar.assets.js', 'register', 'routes', 'daterange',
- 'flush', 'delete-account-post', 'change-password-post', 'logout', 'login', 'tags.hideTagHelp',
- 'budgets.postIncome', 'flush'
- ];
-
- $ignoreMatch = ['.store', '.update', '.destroy', 'json.'];
-
- $routeCollection = Route::getRoutes();
- /** @var \Illuminate\Routing\Route $object */
- foreach ($routeCollection as $object) {
- // get name:
- $name = $object->getName();
- // has name and not in ignore list?
- if (strlen($name) > 0 && !in_array($name, $ignored)) {
-
- // not in ignoreMatch?
- $continue = true;
- foreach ($ignoreMatch as $ignore) {
- $match = strpos($name, $ignore);
- if (!($match === false)) {
- $continue = false;
- }
- }
- unset($ignore, $match);
-
- if ($continue) {
-
- $routes[] = $name;
-
- // check all languages:
- foreach ($languages as $lang) {
- $file = $directory . '/' . $lang . '/' . $name . '.md';
- if (!file_exists($file)) {
- touch($file);
- echo $name . '
';
- }
- }
- }
-
-
- }
-
- }
-
- // loop directories with language file.
- // tag the ones not in the list of approved routes.
- foreach ($languages as $lang) {
- $dir = $directory . '/' . $lang;
- $set = scandir($dir);
- foreach ($set as $entry) {
- if ($entry != '.' && $entry != '..') {
- $name = str_replace('.md', '', $entry);
- if (!in_array($name, $routes)) {
- $file = $dir . '/' . $entry;
- unlink($file);
- }
- }
- }
- }
- echo 'Done!';
- }
-
-
}
diff --git a/app/Http/Controllers/JsonController.php b/app/Http/Controllers/JsonController.php
index b88dc0e0b3..6dafae3266 100644
--- a/app/Http/Controllers/JsonController.php
+++ b/app/Http/Controllers/JsonController.php
@@ -10,6 +10,7 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
+use FireflyIII\Support\CacheProperties;
use Illuminate\Support\Collection;
use Response;
use Session;
@@ -33,10 +34,21 @@ class JsonController extends Controller
*/
public function boxBillsPaid(BillRepositoryInterface $repository, AccountRepositoryInterface $accountRepository)
{
- $start = Session::get('start', Carbon::now()->startOfMonth());
- $end = Session::get('end', Carbon::now()->endOfMonth());
+ $start = Session::get('start', Carbon::now()->startOfMonth());
+ $end = Session::get('end', Carbon::now()->endOfMonth());
+
+ // works for json too!
+ $cache = new CacheProperties;
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('box-bills-paid');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
$amount = 0;
+
// these two functions are the same as the chart
$bills = $repository->getActiveBills();
@@ -60,8 +72,11 @@ class JsonController extends Controller
$amount += $accountRepository->getTransfersInRange($creditCard, $start, $end)->sum('amount');
}
}
+ $data = ['box' => 'bills-paid', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
+ $cache->store($data);
- return Response::json(['box' => 'bills-paid', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
+
+ return Response::json($data);
}
/**
@@ -75,6 +90,16 @@ class JsonController extends Controller
$amount = 0;
$start = Session::get('start', Carbon::now()->startOfMonth());
$end = Session::get('end', Carbon::now()->endOfMonth());
+
+ // works for json too!
+ $cache = new CacheProperties;
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('box-bills-unpaid');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
$bills = $repository->getActiveBills();
$unpaid = new Collection; // bills
@@ -109,7 +134,10 @@ class JsonController extends Controller
$amount += $current;
}
- return Response::json(['box' => 'bills-unpaid', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
+ $data = ['box' => 'bills-unpaid', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
+ $cache->store($data);
+
+ return Response::json($data);
}
/**
@@ -119,11 +147,24 @@ class JsonController extends Controller
*/
public function boxIn(ReportQueryInterface $reportQuery)
{
- $start = Session::get('start', Carbon::now()->startOfMonth());
- $end = Session::get('end', Carbon::now()->endOfMonth());
+ $start = Session::get('start', Carbon::now()->startOfMonth());
+ $end = Session::get('end', Carbon::now()->endOfMonth());
+
+ // works for json too!
+ $cache = new CacheProperties;
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('box-in');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
$amount = $reportQuery->incomeInPeriodCorrected($start, $end, true)->sum('amount');
- return Response::json(['box' => 'in', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
+ $data = ['box' => 'in', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
+ $cache->store($data);
+
+ return Response::json($data);
}
/**
@@ -133,11 +174,25 @@ class JsonController extends Controller
*/
public function boxOut(ReportQueryInterface $reportQuery)
{
- $start = Session::get('start', Carbon::now()->startOfMonth());
- $end = Session::get('end', Carbon::now()->endOfMonth());
+ $start = Session::get('start', Carbon::now()->startOfMonth());
+ $end = Session::get('end', Carbon::now()->endOfMonth());
+
+
+ // works for json too!
+ $cache = new CacheProperties;
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty('box-out');
+ if ($cache->has()) {
+ return Response::json($cache->get()); // @codeCoverageIgnore
+ }
+
$amount = $reportQuery->expenseInPeriodCorrected($start, $end, true)->sum('amount');
- return Response::json(['box' => 'out', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount]);
+ $data = ['box' => 'out', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
+ $cache->store($data);
+
+ return Response::json($data);
}
/**
diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php
new file mode 100644
index 0000000000..563bf81e28
--- /dev/null
+++ b/app/Http/Controllers/NewUserController.php
@@ -0,0 +1,111 @@
+countAccounts($types);
+
+ if ($count > 0) {
+ return Redirect::route('index');
+
+ }
+
+ return view('new-user.index');
+ }
+
+ /**
+ * @param NewUserFormRequest $request
+ * @param AccountRepositoryInterface $repository
+ *
+ * @return \Illuminate\Http\RedirectResponse
+ */
+ public function submit(NewUserFormRequest $request, AccountRepositoryInterface $repository)
+ {
+
+ // create normal asset account:
+ $assetAccount = [
+ 'name' => $request->get('bank_name'),
+ 'accountType' => 'asset',
+ 'virtualBalance' => 0,
+ 'active' => true,
+ 'user' => Auth::user()->id,
+ 'accountRole' => 'defaultAsset',
+ 'openingBalance' => floatval($request->input('bank_balance')),
+ 'openingBalanceDate' => new Carbon,
+ 'openingBalanceCurrency' => intval($request->input('balance_currency_id')),
+ ];
+
+ $repository->store($assetAccount);
+
+ // create savings account
+ if (strlen($request->get('savings_balance') > 0)) {
+ $savingsAccount = [
+ 'name' => $request->get('bank_name') . ' savings account',
+ 'accountType' => 'asset',
+ 'virtualBalance' => 0,
+ 'active' => true,
+ 'user' => Auth::user()->id,
+ 'accountRole' => 'savingAsset',
+ 'openingBalance' => floatval($request->input('savings_balance')),
+ 'openingBalanceDate' => new Carbon,
+ 'openingBalanceCurrency' => intval($request->input('balance_currency_id')),
+ ];
+ $repository->store($savingsAccount);
+ }
+
+
+ // create credit card.
+ if (strlen($request->get('credit_card_limit') > 0)) {
+ $creditAccount = [
+ 'name' => 'Credit card',
+ 'accountType' => 'asset',
+ 'virtualBalance' => floatval($request->get('credit_card_limit')),
+ 'active' => true,
+ 'user' => Auth::user()->id,
+ 'accountRole' => 'ccAsset',
+ 'openingBalance' => null,
+ 'openingBalanceDate' => null,
+ 'openingBalanceCurrency' => intval($request->input('balance_currency_id')),
+ ];
+ $creditCard = $repository->store($creditAccount);
+
+ // store meta for CC:
+ AccountMeta::create(['name' => 'ccType', 'data' => 'monthlyFull', 'account_id' => $creditCard->id,]);
+ AccountMeta::create(['name' => 'ccMonthlyPaymentDate', 'data' => Carbon::now()->year . '-01-01', 'account_id' => $creditCard->id,]);
+
+ }
+ Session::flash('success', 'New account(s) created!');
+ Preferences::mark();
+
+ return Redirect::route('index');
+ }
+}
diff --git a/app/Http/Controllers/PiggyBankController.php b/app/Http/Controllers/PiggyBankController.php
index 6961b5787b..381f1c544c 100644
--- a/app/Http/Controllers/PiggyBankController.php
+++ b/app/Http/Controllers/PiggyBankController.php
@@ -10,6 +10,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use Illuminate\Support\Collection;
use Input;
+use Preferences;
use Redirect;
use Session;
use Steam;
@@ -108,6 +109,7 @@ class PiggyBankController extends Controller
Session::flash('success', 'Piggy bank "' . e($piggyBank->name) . '" deleted.');
+ Preferences::mark();
$repository->destroy($piggyBank);
return Redirect::to(Session::get('piggy-banks.delete.url'));
@@ -137,11 +139,11 @@ class PiggyBankController extends Controller
$targetDate = $targetDate->format('Y-m-d');
}
$preFilled = ['name' => $piggyBank->name,
- 'account_id' => $piggyBank->account_id,
- 'targetamount' => $piggyBank->targetamount,
- 'targetdate' => $targetDate,
- 'reminder' => $piggyBank->reminder,
- 'remind_me' => intval($piggyBank->remind_me) == 1 && !is_null($piggyBank->reminder) ? true : false
+ 'account_id' => $piggyBank->account_id,
+ 'targetamount' => $piggyBank->targetamount,
+ 'targetdate' => $targetDate,
+ 'reminder' => $piggyBank->reminder,
+ 'remind_me' => intval($piggyBank->remind_me) == 1 && !is_null($piggyBank->reminder) ? true : false
];
Session::flash('preFilled', $preFilled);
Session::flash('gaEventCategory', 'piggy-banks');
@@ -208,6 +210,7 @@ class PiggyBankController extends Controller
// set all users piggy banks to zero:
$repository->reset();
+
if (is_array($data)) {
foreach ($data as $order => $id) {
$repository->setOrder(intval($id), (intval($order) + 1));
@@ -240,6 +243,7 @@ class PiggyBankController extends Controller
$repository->createEvent($piggyBank, $amount);
Session::flash('success', 'Added ' . Amount::format($amount, false) . ' to "' . e($piggyBank->name) . '".');
+ Preferences::mark();
} else {
Session::flash('error', 'Could not add ' . Amount::format($amount, false) . ' to "' . e($piggyBank->name) . '".');
}
@@ -268,6 +272,7 @@ class PiggyBankController extends Controller
$repository->createEvent($piggyBank, $amount * -1);
Session::flash('success', 'Removed ' . Amount::format($amount, false) . ' from "' . e($piggyBank->name) . '".');
+ Preferences::mark();
} else {
Session::flash('error', 'Could not remove ' . Amount::format($amount, false) . ' from "' . e($piggyBank->name) . '".');
}
@@ -328,6 +333,7 @@ class PiggyBankController extends Controller
$piggyBank = $repository->store($piggyBankData);
Session::flash('success', 'Stored piggy bank "' . e($piggyBank->name) . '".');
+ Preferences::mark();
if (intval(Input::get('create_another')) === 1) {
Session::put('piggy-banks.create.fromStore', true);
@@ -362,6 +368,7 @@ class PiggyBankController extends Controller
$piggyBank = $repository->update($piggyBank, $piggyBankData);
Session::flash('success', 'Updated piggy bank "' . e($piggyBank->name) . '".');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
Session::put('piggy-banks.edit.fromUpdate', true);
diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php
index 0848155a01..5fd6e4fd24 100644
--- a/app/Http/Controllers/PreferencesController.php
+++ b/app/Http/Controllers/PreferencesController.php
@@ -77,6 +77,7 @@ class PreferencesController extends Controller
Session::flash('success', 'Preferences saved!');
+ Preferences::mark();
return Redirect::route('preferences');
}
diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php
index d776a58e1a..f806cd0328 100644
--- a/app/Http/Controllers/ReportController.php
+++ b/app/Http/Controllers/ReportController.php
@@ -141,18 +141,9 @@ class ReportController extends Controller
Session::flash('gaEventAction', 'year');
Session::flash('gaEventLabel', $start->format('Y'));
-
return view(
'reports.year',
- compact(
- 'start', // the date for this report.
- 'shared', // is a shared report?
- 'accounts', // all accounts
- 'incomes', 'expenses', // expenses and incomes.
- 'subTitle', 'subTitleIcon', // subtitle and subtitle icon.
- 'incomeTopLength', // length of income top X
- 'expenseTopLength' // length of expense top X.
- )
+ compact('start', 'shared', 'accounts', 'incomes', 'expenses', 'subTitle', 'subTitleIcon', 'incomeTopLength', 'expenseTopLength')
);
}
diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php
index 8473f1d5e3..6b000256b7 100644
--- a/app/Http/Controllers/TagController.php
+++ b/app/Http/Controllers/TagController.php
@@ -106,6 +106,7 @@ class TagController extends Controller
$repository->destroy($tag);
Session::flash('success', 'Tag "' . e($tagName) . '" was deleted.');
+ Preferences::mark();
return Redirect::to(route('tags.index'));
}
@@ -226,6 +227,7 @@ class TagController extends Controller
$repository->store($data);
Session::flash('success', 'The tag has been created!');
+ Preferences::mark();
if (intval(Input::get('create_another')) === 1) {
// set value so create routine will not overwrite URL:
@@ -268,9 +270,11 @@ class TagController extends Controller
'tagMode' => $request->get('tagMode'),
];
+
$repository->update($tag, $data);
Session::flash('success', 'Tag "' . e($data['tag']) . '" updated.');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
// set value so edit routine will not overwrite URL:
diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php
index 223dab527a..6eee693adf 100644
--- a/app/Http/Controllers/TransactionController.php
+++ b/app/Http/Controllers/TransactionController.php
@@ -11,6 +11,7 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use Input;
+use Preferences;
use Redirect;
use Response;
use Session;
@@ -79,15 +80,15 @@ class TransactionController extends Controller
*/
public function delete(TransactionJournal $journal)
{
- $type = strtolower($journal->transactionType->type);
- $subTitle = trans('firefly.delete_' . $type, ['description' => $journal->description]);
+ $what = strtolower($journal->transactionType->type);
+ $subTitle = trans('firefly.delete_' . $what, ['description' => $journal->description]);
// put previous url in session
Session::put('transactions.delete.url', URL::previous());
Session::flash('gaEventCategory', 'transactions');
- Session::flash('gaEventAction', 'delete-' . $type);
+ Session::flash('gaEventAction', 'delete-' . $what);
- return view('transactions.delete', compact('journal', 'subTitle'));
+ return view('transactions.delete', compact('journal', 'subTitle','what'));
}
@@ -104,6 +105,8 @@ class TransactionController extends Controller
$repository->delete($transactionJournal);
+ Preferences::mark();
+
// redirect to previous URL:
return Redirect::to(Session::get('transactions.delete.url'));
}
@@ -154,7 +157,7 @@ class TransactionController extends Controller
}
$preFilled['amount'] = $journal->actual_amount;
- $preFilled['account_id'] = $journal->asset_account->id;
+ $preFilled['account_id'] = $journal->destination_account->id;
$preFilled['expense_account'] = $transactions[0]->account->name;
$preFilled['revenue_account'] = $transactions[1]->account->name;
$preFilled['account_from_id'] = $transactions[1]->account->id;
@@ -235,6 +238,7 @@ class TransactionController extends Controller
}
}
}
+ Preferences::mark();
return Response::json([true]);
@@ -249,14 +253,15 @@ class TransactionController extends Controller
public function show(JournalRepositoryInterface $repository, TransactionJournal $journal)
{
$journal->transactions->each(
- function(Transaction $t) use ($journal, $repository) {
+ function (Transaction $t) use ($journal, $repository) {
$t->before = $repository->getAmountBefore($journal, $t);
$t->after = $t->before + $t->amount;
}
);
+ $what = strtolower($journal->transactionType->type);
$subTitle = trans('firefly.' . $journal->transactionType->type) . ' "' . e($journal->description) . '"';
- return view('transactions.show', compact('journal', 'subTitle'));
+ return view('transactions.show', compact('journal', 'subTitle','what'));
}
/**
@@ -281,6 +286,7 @@ class TransactionController extends Controller
$repository->deactivateReminder($request->get('reminder_id'));
Session::flash('success', 'New transaction "' . $journal->description . '" stored!');
+ Preferences::mark();
if (intval(Input::get('create_another')) === 1) {
// set value so create routine will not overwrite URL:
@@ -312,6 +318,7 @@ class TransactionController extends Controller
// update, get events by date and sort DESC
Session::flash('success', 'Transaction "' . e($journalData['description']) . '" updated.');
+ Preferences::mark();
if (intval(Input::get('return_to_edit')) === 1) {
// set value so edit routine will not overwrite URL:
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index f0aac457a4..30bdc71e89 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -37,7 +37,6 @@ class Kernel extends HttpKernel
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'FireflyIII\Http\Middleware\RedirectIfAuthenticated',
'range' => 'FireflyIII\Http\Middleware\Range',
- 'cleanup' => 'FireflyIII\Http\Middleware\Cleanup',
'reminders' => 'FireflyIII\Http\Middleware\Reminders',
];
diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php
index d447376e03..e83a32aefb 100644
--- a/app/Http/Middleware/Authenticate.php
+++ b/app/Http/Middleware/Authenticate.php
@@ -1,12 +1,13 @@
auth = $auth;
- }
-
- /**
- * Handle an incoming request.
- *
- * @param \Illuminate\Http\Request $request
- * @param \Closure $next
- *
- * @return mixed
- */
- public function handle(Request $request, Closure $next)
- {
- if ($this->auth->guest()) {
- return response('Unauthorized.', 401);
- }
- $count = -1;
-
- bcscale(0);
-
- if (env('RUNCLEANUP') == 'true') {
- $count = 0;
- $count = bcadd($count, $this->encryptAccountAndBills());
- $count = bcadd($count, $this->encryptBudgetsAndCategories());
- $count = bcadd($count, $this->encryptPiggiesAndJournals());
- $count = bcadd($count, $this->encryptRemindersAndPreferences());
-
- }
- if ($count == 0) {
- Session::flash('warning', 'Please open the .env file and change RUNCLEANUP=true to RUNCLEANUP=false');
- }
-
- return $next($request);
-
- }
-
- /**
- * @return int
- */
- protected function encryptAccountAndBills()
- {
- $count = 0;
- // encrypt account name
- $set = Account::where('encrypted', 0)->take(5)->get();
- /** @var Account $entry */
- foreach ($set as $entry) {
- $count++;
- $name = $entry->name;
- $entry->name = $name;
- $entry->save();
- }
- unset($set, $entry, $name);
-
- // encrypt bill name
- $set = Bill::where('name_encrypted', 0)->take(5)->get();
- /** @var Bill $entry */
- foreach ($set as $entry) {
- $count++;
- $name = $entry->name;
- $entry->name = $name;
- $entry->save();
- }
- unset($set, $entry, $name);
-
- // encrypt bill match
- $set = Bill::where('match_encrypted', 0)->take(5)->get();
- /** @var Bill $entry */
- foreach ($set as $entry) {
- $match = $entry->match;
- $entry->match = $match;
- $entry->save();
- }
- unset($set, $entry, $match);
-
-
- return $count;
-
- }
-
- /**
- * @return int
- */
- protected function encryptBudgetsAndCategories()
- {
- $count = 0;
- // encrypt budget name
- $set = Budget::where('encrypted', 0)->take(5)->get();
- /** @var Budget $entry */
- foreach ($set as $entry) {
- $count++;
- $name = $entry->name;
- $entry->name = $name;
- $entry->save();
- }
- unset($set, $entry, $name);
-
- // encrypt category name
- $set = Category::where('encrypted', 0)->take(5)->get();
- /** @var Category $entry */
- foreach ($set as $entry) {
- $count++;
- $name = $entry->name;
- $entry->name = $name;
- $entry->save();
- }
- unset($set, $entry, $name);
-
- return $count;
- }
-
- /**
- * @return int
- */
- protected function encryptPiggiesAndJournals()
- {
- $count = 0;
- // encrypt piggy bank name
- $set = PiggyBank::where('encrypted', 0)->take(5)->get();
- /** @var PiggyBank $entry */
- foreach ($set as $entry) {
- $count++;
- $name = $entry->name;
- $entry->name = $name;
- $entry->save();
- }
- unset($set, $entry, $name);
-
- // encrypt transaction journal description
- $set = TransactionJournal::where('encrypted', 0)->take(5)->get();
- /** @var TransactionJournal $entry */
- foreach ($set as $entry) {
- $count++;
- $description = $entry->description;
- $entry->description = $description;
- $entry->save();
- }
- unset($set, $entry, $description);
-
- return $count;
- }
-
- /**
- * @return int
- */
- protected function encryptRemindersAndPreferences()
- {
- $count = 0;
- // encrypt reminder metadata
- $set = Reminder::where('encrypted', 0)->take(5)->get();
- /** @var Reminder $entry */
- foreach ($set as $entry) {
- $count++;
- $metadata = $entry->metadata;
- $entry->metadata = $metadata;
- $entry->save();
- }
- unset($set, $entry, $metadata);
-
- //encrypt preference name
- $set = Preference::whereNull('name_encrypted')->take(5)->get();
- /** @var Preference $entry */
- foreach ($set as $entry) {
- $count++;
- $name = $entry->name;
- $entry->name = $name;
- $entry->save();
- }
- unset($set, $entry, $name);
-
- //encrypt preference data
- $set = Preference::whereNull('data_encrypted')->take(5)->get();
- /** @var Preference $entry */
- foreach ($set as $entry) {
- $count++;
- $data = $entry->data;
- $entry->data = $data;
- $entry->save();
- }
- unset($set, $entry, $data);
-
- return $count;
- }
-
-}
diff --git a/app/Http/Middleware/Reminders.php b/app/Http/Middleware/Reminders.php
index 9814e448d0..0be752e89e 100644
--- a/app/Http/Middleware/Reminders.php
+++ b/app/Http/Middleware/Reminders.php
@@ -7,6 +7,7 @@ use Carbon\Carbon;
use Closure;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\Reminder;
+use FireflyIII\Support\CacheProperties;
use FireflyIII\User;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Http\Request;
@@ -47,35 +48,46 @@ class Reminders
*/
public function handle(Request $request, Closure $next)
{
- if ($this->auth->check() && !$request->isXmlHttpRequest()) {
+
+
+ $user = $this->auth->user();
+ if ($this->auth->check() && !$request->isXmlHttpRequest() && $user instanceof User) {
// do reminders stuff.
- $reminders = [];
- if ($this->auth->user() instanceof User) {
- $piggyBanks = $this->auth->user()->piggyBanks()->where('remind_me', 1)->get();
- /** @var \FireflyIII\Helpers\Reminders\ReminderHelperInterface $helper */
- $helper = App::make('FireflyIII\Helpers\Reminders\ReminderHelperInterface');
- /** @var PiggyBank $piggyBank */
- foreach ($piggyBanks as $piggyBank) {
- $helper->createReminders($piggyBank, new Carbon);
- }
- // delete invalid reminders
- // this is a construction SQLITE cannot handle :(
- if (env('DB_CONNECTION') != 'sqlite') {
- Reminder::whereUserId($this->auth->user()->id)
- ->leftJoin('piggy_banks', 'piggy_banks.id', '=', 'remindersable_id')
- ->whereNull('piggy_banks.id')
- ->delete();
- }
+ // abuse CacheProperties to find out if we need to do this:
+ $cache = new CacheProperties;
- // get and list active reminders:
- $reminders = $this->auth->user()->reminders()->today()->get();
- $reminders->each(
- function (Reminder $reminder) use ($helper) {
- $reminder->description = $helper->getReminderText($reminder);
- }
- );
+ $cache->addProperty('reminders');
+ if ($cache->has()) {
+ $reminders = $cache->get();
+ View::share('reminders', $reminders);
+
+ return $next($request);
}
+
+ $piggyBanks = $user->piggyBanks()->where('remind_me', 1)->get();
+
+ /** @var \FireflyIII\Helpers\Reminders\ReminderHelperInterface $helper */
+ $helper = App::make('FireflyIII\Helpers\Reminders\ReminderHelperInterface');
+
+ /** @var PiggyBank $piggyBank */
+ foreach ($piggyBanks as $piggyBank) {
+ $helper->createReminders($piggyBank, new Carbon);
+ }
+ // delete invalid reminders
+ // this is a construction SQLITE cannot handle :(
+ if (env('DB_CONNECTION') != 'sqlite') {
+ Reminder::whereUserId($user->id)->leftJoin('piggy_banks', 'piggy_banks.id', '=', 'remindersable_id')->whereNull('piggy_banks.id')->delete();
+ }
+
+ // get and list active reminders:
+ $reminders = $user->reminders()->today()->get();
+ $reminders->each(
+ function (Reminder $reminder) use ($helper) {
+ $reminder->description = $helper->getReminderText($reminder);
+ }
+ );
+ $cache->store($reminders);
View::share('reminders', $reminders);
}
diff --git a/app/Http/Requests/BillFormRequest.php b/app/Http/Requests/BillFormRequest.php
index 452e5a1e7a..3a360f4874 100644
--- a/app/Http/Requests/BillFormRequest.php
+++ b/app/Http/Requests/BillFormRequest.php
@@ -48,8 +48,8 @@ class BillFormRequest extends Request
*/
public function rules()
{
- $nameRule = 'required|between:1,255|uniqueObjectForUser:bills,name,name_encrypted';
- $matchRule = 'required|between:1,255|uniqueObjectForUser:bills,match,match_encrypted';
+ $nameRule = 'required|between:1,255|uniqueObjectForUser:bills,name';
+ $matchRule = 'required|between:1,255|uniqueObjectForUser:bills,match';
if (intval(Input::get('id')) > 0) {
$nameRule .= ',' . intval(Input::get('id'));
$matchRule .= ',' . intval(Input::get('id'));
diff --git a/app/Http/Requests/BudgetFormRequest.php b/app/Http/Requests/BudgetFormRequest.php
index ad871cd07b..38814f1d2d 100644
--- a/app/Http/Requests/BudgetFormRequest.php
+++ b/app/Http/Requests/BudgetFormRequest.php
@@ -29,9 +29,9 @@ class BudgetFormRequest extends Request
public function rules()
{
- $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name,encrypted';
+ $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name';
if (Budget::find(Input::get('id'))) {
- $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,name,encrypted,' . intval(Input::get('id'));
+ $nameRule = 'required|between:1,100|uniqueObjectForUser:budgets,' . intval(Input::get('id'));
}
return [
diff --git a/app/Http/Requests/CategoryFormRequest.php b/app/Http/Requests/CategoryFormRequest.php
index 7c32b3329c..04a16ce9b6 100644
--- a/app/Http/Requests/CategoryFormRequest.php
+++ b/app/Http/Requests/CategoryFormRequest.php
@@ -29,9 +29,9 @@ class CategoryFormRequest extends Request
public function rules()
{
- $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,encrypted';
+ $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name';
if (Category::find(Input::get('id'))) {
- $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,encrypted,' . intval(Input::get('id'));
+ $nameRule = 'required|between:1,100|uniqueObjectForUser:categories,name,' . intval(Input::get('id'));
}
return [
diff --git a/app/Http/Requests/NewUserFormRequest.php b/app/Http/Requests/NewUserFormRequest.php
new file mode 100644
index 0000000000..b500ce6b02
--- /dev/null
+++ b/app/Http/Requests/NewUserFormRequest.php
@@ -0,0 +1,37 @@
+ 'required|between:1,200',
+ 'bank_balance' => 'required|numeric',
+ 'savings_balance' => 'numeric',
+ 'credit_card_limit' => 'numeric',
+ 'balance_currency_id' => 'exists:transaction_currencies,id',
+ ];
+ }
+}
diff --git a/app/Http/Requests/TagFormRequest.php b/app/Http/Requests/TagFormRequest.php
index 1b2885453d..28773c874c 100644
--- a/app/Http/Requests/TagFormRequest.php
+++ b/app/Http/Requests/TagFormRequest.php
@@ -28,10 +28,10 @@ class TagFormRequest extends Request
public function rules()
{
$idRule = '';
- $tagRule = 'required|min:1|uniqueObjectForUser:tags,tag,TRUE';
+ $tagRule = 'required|min:1|uniqueObjectForUser:tags,tag';
if (Tag::find(Input::get('id'))) {
$idRule = 'belongsToUser:tags';
- $tagRule = 'required|min:1|uniqueObjectForUser:tags,tag,TRUE,' . Input::get('id');
+ $tagRule = 'required|min:1|uniqueObjectForUser:tags,tag,' . Input::get('id');
}
return [
diff --git a/app/Http/breadcrumbs.php b/app/Http/breadcrumbs.php
index 80aa857876..fd8e5a146f 100644
--- a/app/Http/breadcrumbs.php
+++ b/app/Http/breadcrumbs.php
@@ -17,7 +17,7 @@ use FireflyIII\Models\TransactionJournal;
*/
Breadcrumbs::register(
'home',
- function(Generator $breadcrumbs) {
+ function (Generator $breadcrumbs) {
$breadcrumbs->push(trans('breadcrumbs.home'), route('index'));
}
@@ -25,7 +25,7 @@ Breadcrumbs::register(
Breadcrumbs::register(
'index',
- function(Generator $breadcrumbs) {
+ function (Generator $breadcrumbs) {
$breadcrumbs->push(trans('breadcrumbs.home'), route('index'));
}
@@ -34,21 +34,21 @@ Breadcrumbs::register(
// accounts
Breadcrumbs::register(
- 'accounts.index', function(Generator $breadcrumbs, $what) {
+ 'accounts.index', function (Generator $breadcrumbs, $what) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.' . strtolower(e($what)) . '_accounts'), route('accounts.index', [$what]));
}
);
Breadcrumbs::register(
- 'accounts.create', function(Generator $breadcrumbs, $what) {
+ 'accounts.create', function (Generator $breadcrumbs, $what) {
$breadcrumbs->parent('accounts.index', $what);
$breadcrumbs->push(trans('breadcrumbs.new_' . strtolower(e($what)) . '_account'), route('accounts.create', [$what]));
}
);
Breadcrumbs::register(
- 'accounts.show', function(Generator $breadcrumbs, Account $account) {
+ 'accounts.show', function (Generator $breadcrumbs, Account $account) {
$what = Config::get('firefly.shortNamesByFullName.' . $account->accountType->type);
@@ -58,7 +58,7 @@ Breadcrumbs::register(
}
);
Breadcrumbs::register(
- 'accounts.delete', function(Generator $breadcrumbs, Account $account) {
+ 'accounts.delete', function (Generator $breadcrumbs, Account $account) {
$breadcrumbs->parent('accounts.show', $account);
$breadcrumbs->push(trans('breadcrumbs.delete_account', ['name' => e($account->name)]), route('accounts.delete', [$account->id]));
}
@@ -66,7 +66,7 @@ Breadcrumbs::register(
Breadcrumbs::register(
- 'accounts.edit', function(Generator $breadcrumbs, Account $account) {
+ 'accounts.edit', function (Generator $breadcrumbs, Account $account) {
$breadcrumbs->parent('accounts.show', $account);
$what = Config::get('firefly.shortNamesByFullName.' . $account->accountType->type);
@@ -76,40 +76,40 @@ Breadcrumbs::register(
// budgets.
Breadcrumbs::register(
- 'budgets.index', function(Generator $breadcrumbs) {
+ 'budgets.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.budgets'), route('budgets.index'));
}
);
Breadcrumbs::register(
- 'budgets.create', function(Generator $breadcrumbs) {
+ 'budgets.create', function (Generator $breadcrumbs) {
$breadcrumbs->parent('budgets.index');
$breadcrumbs->push(trans('breadcrumbs.newBudget'), route('budgets.create'));
}
);
Breadcrumbs::register(
- 'budgets.edit', function(Generator $breadcrumbs, Budget $budget) {
+ 'budgets.edit', function (Generator $breadcrumbs, Budget $budget) {
$breadcrumbs->parent('budgets.show', $budget);
$breadcrumbs->push(trans('breadcrumbs.edit_budget', ['name' => e($budget->name)]), route('budgets.edit', [$budget->id]));
}
);
Breadcrumbs::register(
- 'budgets.delete', function(Generator $breadcrumbs, Budget $budget) {
+ 'budgets.delete', function (Generator $breadcrumbs, Budget $budget) {
$breadcrumbs->parent('budgets.show', $budget);
$breadcrumbs->push(trans('breadcrumbs.delete_budget', ['name' => e($budget->name)]), route('budgets.delete', [$budget->id]));
}
);
Breadcrumbs::register(
- 'budgets.noBudget', function(Generator $breadcrumbs, $subTitle) {
+ 'budgets.noBudget', function (Generator $breadcrumbs, $subTitle) {
$breadcrumbs->parent('budgets.index');
$breadcrumbs->push($subTitle, route('budgets.noBudget'));
}
);
Breadcrumbs::register(
- 'budgets.show', function(Generator $breadcrumbs, Budget $budget, LimitRepetition $repetition = null) {
+ 'budgets.show', function (Generator $breadcrumbs, Budget $budget, LimitRepetition $repetition = null) {
$breadcrumbs->parent('budgets.index');
$breadcrumbs->push(e($budget->name), route('budgets.show', [$budget->id]));
if (!is_null($repetition) && !is_null($repetition->id)) {
@@ -122,33 +122,33 @@ Breadcrumbs::register(
// categories
Breadcrumbs::register(
- 'categories.index', function(Generator $breadcrumbs) {
+ 'categories.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.categories'), route('categories.index'));
}
);
Breadcrumbs::register(
- 'categories.create', function(Generator $breadcrumbs) {
+ 'categories.create', function (Generator $breadcrumbs) {
$breadcrumbs->parent('categories.index');
$breadcrumbs->push(trans('breadcrumbs.newCategory'), route('categories.create'));
}
);
Breadcrumbs::register(
- 'categories.edit', function(Generator $breadcrumbs, Category $category) {
+ 'categories.edit', function (Generator $breadcrumbs, Category $category) {
$breadcrumbs->parent('categories.show', $category);
$breadcrumbs->push(trans('breadcrumbs.edit_category', ['name' => e($category->name)]), route('categories.edit', [$category->id]));
}
);
Breadcrumbs::register(
- 'categories.delete', function(Generator $breadcrumbs, Category $category) {
+ 'categories.delete', function (Generator $breadcrumbs, Category $category) {
$breadcrumbs->parent('categories.show', $category);
$breadcrumbs->push(trans('breadcrumbs.delete_category', ['name' => e($category->name)]), route('categories.delete', [$category->id]));
}
);
Breadcrumbs::register(
- 'categories.show', function(Generator $breadcrumbs, Category $category) {
+ 'categories.show', function (Generator $breadcrumbs, Category $category) {
$breadcrumbs->parent('categories.index');
$breadcrumbs->push(e($category->name), route('categories.show', [$category->id]));
@@ -156,7 +156,7 @@ Breadcrumbs::register(
);
Breadcrumbs::register(
- 'categories.noCategory', function(Generator $breadcrumbs, $subTitle) {
+ 'categories.noCategory', function (Generator $breadcrumbs, $subTitle) {
$breadcrumbs->parent('categories.index');
$breadcrumbs->push($subTitle, route('categories.noCategory'));
}
@@ -164,20 +164,20 @@ Breadcrumbs::register(
// currencies.
Breadcrumbs::register(
- 'currency.index', function(Generator $breadcrumbs) {
+ 'currency.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.currencies'), route('currency.index'));
}
);
Breadcrumbs::register(
- 'currency.edit', function(Generator $breadcrumbs, TransactionCurrency $currency) {
+ 'currency.edit', function (Generator $breadcrumbs, TransactionCurrency $currency) {
$breadcrumbs->parent('currency.index');
$breadcrumbs->push(trans('breadcrumbs.edit_currency', ['name' => e($currency->name)]), route('currency.edit', [$currency->id]));
}
);
Breadcrumbs::register(
- 'currency.delete', function(Generator $breadcrumbs, TransactionCurrency $currency) {
+ 'currency.delete', function (Generator $breadcrumbs, TransactionCurrency $currency) {
$breadcrumbs->parent('currency.index');
$breadcrumbs->push(trans('breadcrumbs.delete_currency', ['name' => e($currency->name)]), route('currency.delete', [$currency->id]));
}
@@ -186,33 +186,33 @@ Breadcrumbs::register(
// piggy banks
Breadcrumbs::register(
- 'piggy-banks.index', function(Generator $breadcrumbs) {
+ 'piggy-banks.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.piggyBanks'), route('piggy-banks.index'));
}
);
Breadcrumbs::register(
- 'piggy-banks.create', function(Generator $breadcrumbs) {
+ 'piggy-banks.create', function (Generator $breadcrumbs) {
$breadcrumbs->parent('piggy-banks.index');
$breadcrumbs->push(trans('breadcrumbs.newPiggyBank'), route('piggy-banks.create'));
}
);
Breadcrumbs::register(
- 'piggy-banks.edit', function(Generator $breadcrumbs, PiggyBank $piggyBank) {
+ 'piggy-banks.edit', function (Generator $breadcrumbs, PiggyBank $piggyBank) {
$breadcrumbs->parent('piggy-banks.show', $piggyBank);
$breadcrumbs->push(trans('breadcrumbs.edit_piggyBank', ['name' => e($piggyBank->name)]), route('piggy-banks.edit', [$piggyBank->id]));
}
);
Breadcrumbs::register(
- 'piggy-banks.delete', function(Generator $breadcrumbs, PiggyBank $piggyBank) {
+ 'piggy-banks.delete', function (Generator $breadcrumbs, PiggyBank $piggyBank) {
$breadcrumbs->parent('piggy-banks.show', $piggyBank);
$breadcrumbs->push(trans('breadcrumbs.delete_piggyBank', ['name' => e($piggyBank->name)]), route('piggy-banks.delete', [$piggyBank->id]));
}
);
Breadcrumbs::register(
- 'piggy-banks.show', function(Generator $breadcrumbs, PiggyBank $piggyBank) {
+ 'piggy-banks.show', function (Generator $breadcrumbs, PiggyBank $piggyBank) {
$breadcrumbs->parent('piggy-banks.index');
$breadcrumbs->push(e($piggyBank->name), route('piggy-banks.show', [$piggyBank->id]));
@@ -221,7 +221,7 @@ Breadcrumbs::register(
// preferences
Breadcrumbs::register(
- 'preferences', function(Generator $breadcrumbs) {
+ 'preferences', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.preferences'), route('preferences'));
@@ -230,14 +230,14 @@ Breadcrumbs::register(
// profile
Breadcrumbs::register(
- 'profile', function(Generator $breadcrumbs) {
+ 'profile', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.profile'), route('profile'));
}
);
Breadcrumbs::register(
- 'change-password', function(Generator $breadcrumbs) {
+ 'change-password', function (Generator $breadcrumbs) {
$breadcrumbs->parent('profile');
$breadcrumbs->push(trans('breadcrumbs.changePassword'), route('change-password'));
@@ -246,33 +246,33 @@ Breadcrumbs::register(
// bills
Breadcrumbs::register(
- 'bills.index', function(Generator $breadcrumbs) {
+ 'bills.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.bills'), route('bills.index'));
}
);
Breadcrumbs::register(
- 'bills.create', function(Generator $breadcrumbs) {
+ 'bills.create', function (Generator $breadcrumbs) {
$breadcrumbs->parent('bills.index');
$breadcrumbs->push(trans('breadcrumbs.newBill'), route('bills.create'));
}
);
Breadcrumbs::register(
- 'bills.edit', function(Generator $breadcrumbs, Bill $bill) {
+ 'bills.edit', function (Generator $breadcrumbs, Bill $bill) {
$breadcrumbs->parent('bills.show', $bill);
$breadcrumbs->push(trans('breadcrumbs.edit_bill', ['name' => e($bill->name)]), route('bills.edit', [$bill->id]));
}
);
Breadcrumbs::register(
- 'bills.delete', function(Generator $breadcrumbs, Bill $bill) {
+ 'bills.delete', function (Generator $breadcrumbs, Bill $bill) {
$breadcrumbs->parent('bills.show', $bill);
$breadcrumbs->push(trans('breadcrumbs.delete_bill', ['name' => e($bill->name)]), route('bills.delete', [$bill->id]));
}
);
Breadcrumbs::register(
- 'bills.show', function(Generator $breadcrumbs, Bill $bill) {
+ 'bills.show', function (Generator $breadcrumbs, Bill $bill) {
$breadcrumbs->parent('bills.index');
$breadcrumbs->push(e($bill->name), route('bills.show', [$bill->id]));
@@ -281,7 +281,7 @@ Breadcrumbs::register(
// reminders
Breadcrumbs::register(
- 'reminders.index', function(Generator $breadcrumbs) {
+ 'reminders.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.reminders'), route('reminders.index'));
@@ -290,7 +290,7 @@ Breadcrumbs::register(
// reminders
Breadcrumbs::register(
- 'reminders.show', function(Generator $breadcrumbs, Reminder $reminder) {
+ 'reminders.show', function (Generator $breadcrumbs, Reminder $reminder) {
$breadcrumbs->parent('reminders.index');
$breadcrumbs->push(trans('breadcrumbs.reminder', ['id' => e($reminder->id)]), route('reminders.show', [$reminder->id]));
@@ -300,14 +300,14 @@ Breadcrumbs::register(
// reports
Breadcrumbs::register(
- 'reports.index', function(Generator $breadcrumbs) {
+ 'reports.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.reports'), route('reports.index'));
}
);
Breadcrumbs::register(
- 'reports.year', function(Generator $breadcrumbs, Carbon $date, $shared) {
+ 'reports.year', function (Generator $breadcrumbs, Carbon $date, $shared) {
$breadcrumbs->parent('reports.index');
if ($shared) {
$title = trans('breadcrumbs.yearly_report_shared', ['date' => $date->year]);
@@ -319,7 +319,7 @@ Breadcrumbs::register(
);
Breadcrumbs::register(
- 'reports.month', function(Generator $breadcrumbs, Carbon $date, $shared) {
+ 'reports.month', function (Generator $breadcrumbs, Carbon $date, $shared) {
$breadcrumbs->parent('reports.year', $date, $shared);
if ($shared) {
@@ -334,7 +334,7 @@ Breadcrumbs::register(
// search
Breadcrumbs::register(
- 'search', function(Generator $breadcrumbs, $query) {
+ 'search', function (Generator $breadcrumbs, $query) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.searchResult', ['query' => e($query)]), route('search'));
}
@@ -342,33 +342,33 @@ Breadcrumbs::register(
// transactions
Breadcrumbs::register(
- 'transactions.index', function(Generator $breadcrumbs, $what) {
+ 'transactions.index', function (Generator $breadcrumbs, $what) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.' . $what . '_list'), route('transactions.index', [$what]));
}
);
Breadcrumbs::register(
- 'transactions.create', function(Generator $breadcrumbs, $what) {
+ 'transactions.create', function (Generator $breadcrumbs, $what) {
$breadcrumbs->parent('transactions.index', $what);
$breadcrumbs->push(trans('breadcrumbs.create_' . e($what)), route('transactions.create', [$what]));
}
);
Breadcrumbs::register(
- 'transactions.edit', function(Generator $breadcrumbs, TransactionJournal $journal) {
+ 'transactions.edit', function (Generator $breadcrumbs, TransactionJournal $journal) {
$breadcrumbs->parent('transactions.show', $journal);
$breadcrumbs->push(trans('breadcrumbs.edit_journal', ['description' => $journal->description]), route('transactions.edit', [$journal->id]));
}
);
Breadcrumbs::register(
- 'transactions.delete', function(Generator $breadcrumbs, TransactionJournal $journal) {
+ 'transactions.delete', function (Generator $breadcrumbs, TransactionJournal $journal) {
$breadcrumbs->parent('transactions.show', $journal);
$breadcrumbs->push(trans('breadcrumbs.delete_journal', ['description' => e($journal->description)]), route('transactions.delete', [$journal->id]));
}
);
Breadcrumbs::register(
- 'transactions.show', function(Generator $breadcrumbs, TransactionJournal $journal) {
+ 'transactions.show', function (Generator $breadcrumbs, TransactionJournal $journal) {
$breadcrumbs->parent('transactions.index', strtolower($journal->transactionType->type));
$breadcrumbs->push($journal->description, route('transactions.show', [$journal->id]));
@@ -378,28 +378,28 @@ Breadcrumbs::register(
// tags
Breadcrumbs::register(
- 'tags.index', function(Generator $breadcrumbs) {
+ 'tags.index', function (Generator $breadcrumbs) {
$breadcrumbs->parent('home');
$breadcrumbs->push(trans('breadcrumbs.tags'), route('tags.index'));
}
);
Breadcrumbs::register(
- 'tags.create', function(Generator $breadcrumbs) {
+ 'tags.create', function (Generator $breadcrumbs) {
$breadcrumbs->parent('tags.index');
$breadcrumbs->push(trans('breadcrumbs.createTag'), route('tags.create'));
}
);
Breadcrumbs::register(
- 'tags.edit', function(Generator $breadcrumbs, Tag $tag) {
+ 'tags.edit', function (Generator $breadcrumbs, Tag $tag) {
$breadcrumbs->parent('tags.show', $tag);
$breadcrumbs->push(trans('breadcrumbs.edit_tag', ['tag' => e($tag->tag)]), route('tags.edit', [$tag->id]));
}
);
Breadcrumbs::register(
- 'tags.delete', function(Generator $breadcrumbs, Tag $tag) {
+ 'tags.delete', function (Generator $breadcrumbs, Tag $tag) {
$breadcrumbs->parent('tags.show', $tag);
$breadcrumbs->push(trans('breadcrumbs.delete_tag', ['tag' => e($tag->tag)]), route('tags.delete', [$tag->id]));
}
@@ -407,7 +407,7 @@ Breadcrumbs::register(
Breadcrumbs::register(
- 'tags.show', function(Generator $breadcrumbs, Tag $tag) {
+ 'tags.show', function (Generator $breadcrumbs, Tag $tag) {
$breadcrumbs->parent('tags.index');
$breadcrumbs->push(e($tag->tag), route('tags.show', [$tag->id]));
}
diff --git a/app/Http/routes.php b/app/Http/routes.php
index 750d9a7b3b..2b66dac023 100644
--- a/app/Http/routes.php
+++ b/app/Http/routes.php
@@ -15,13 +15,13 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
// models
Route::bind(
'account',
- function($value) {
+ function ($value) {
if (Auth::check()) {
$object = Account::leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id')
- ->where('account_types.editable', 1)
- ->where('accounts.id', $value)
- ->where('user_id', Auth::user()->id)
- ->first(['accounts.*']);
+ ->where('account_types.editable', 1)
+ ->where('accounts.id', $value)
+ ->where('user_id', Auth::user()->id)
+ ->first(['accounts.*']);
if ($object) {
return $object;
}
@@ -31,7 +31,7 @@ Route::bind(
);
Route::bind(
- 'tj', function($value) {
+ 'tj', function ($value) {
if (Auth::check()) {
$object = TransactionJournal::where('id', $value)->where('user_id', Auth::user()->id)->first();
if ($object) {
@@ -44,7 +44,7 @@ Route::bind(
);
Route::bind(
- 'currency', function($value) {
+ 'currency', function ($value) {
if (Auth::check()) {
$object = TransactionCurrency::find($value);
if ($object) {
@@ -56,7 +56,7 @@ Route::bind(
);
Route::bind(
- 'bill', function($value) {
+ 'bill', function ($value) {
if (Auth::check()) {
$object = Bill::where('id', $value)->where('user_id', Auth::user()->id)->first();
if ($object) {
@@ -69,7 +69,7 @@ Route::bind(
);
Route::bind(
- 'budget', function($value) {
+ 'budget', function ($value) {
if (Auth::check()) {
$object = Budget::where('id', $value)->where('user_id', Auth::user()->id)->first();
if ($object) {
@@ -82,7 +82,7 @@ Route::bind(
);
Route::bind(
- 'reminder', function($value) {
+ 'reminder', function ($value) {
if (Auth::check()) {
$object = Reminder::where('id', $value)->where('user_id', Auth::user()->id)->first();
if ($object) {
@@ -95,13 +95,13 @@ Route::bind(
);
Route::bind(
- 'limitrepetition', function($value) {
+ 'limitrepetition', function ($value) {
if (Auth::check()) {
$object = LimitRepetition::where('limit_repetitions.id', $value)
- ->leftjoin('budget_limits', 'budget_limits.id', '=', 'limit_repetitions.budget_limit_id')
- ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id')
- ->where('budgets.user_id', Auth::user()->id)
- ->first(['limit_repetitions.*']);
+ ->leftjoin('budget_limits', 'budget_limits.id', '=', 'limit_repetitions.budget_limit_id')
+ ->leftJoin('budgets', 'budgets.id', '=', 'budget_limits.budget_id')
+ ->where('budgets.user_id', Auth::user()->id)
+ ->first(['limit_repetitions.*']);
if ($object) {
return $object;
}
@@ -112,12 +112,12 @@ Route::bind(
);
Route::bind(
- 'piggyBank', function($value) {
+ 'piggyBank', function ($value) {
if (Auth::check()) {
$object = PiggyBank::where('piggy_banks.id', $value)
- ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')
- ->where('accounts.user_id', Auth::user()->id)
- ->first(['piggy_banks.*']);
+ ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')
+ ->where('accounts.user_id', Auth::user()->id)
+ ->first(['piggy_banks.*']);
if ($object) {
return $object;
}
@@ -128,7 +128,7 @@ Route::bind(
);
Route::bind(
- 'category', function($value) {
+ 'category', function ($value) {
if (Auth::check()) {
$object = Category::where('id', $value)->where('user_id', Auth::user()->id)->first();
if ($object) {
@@ -142,7 +142,7 @@ Route::bind(
/** @noinspection PhpUnusedParameterInspection */
Route::bind(
- 'reminder', function($value) {
+ 'reminder', function ($value) {
if (Auth::check()) {
/** @var \FireflyIII\Models\Reminder $object */
$object = Reminder::find($value);
@@ -158,7 +158,7 @@ Route::bind(
);
Route::bind(
- 'tag', function($value) {
+ 'tag', function ($value) {
if (Auth::check()) {
$object = Tag::where('id', $value)->where('user_id', Auth::user()->id)->first();
if ($object) {
@@ -183,14 +183,12 @@ Route::controllers(
]
);
-Route::get('/routes', ['uses' => 'HomeController@routes', 'as' => 'routes']);
-
/**
* Home Controller
*/
Route::group(
- ['middleware' => ['auth', 'range', 'reminders']], function() {
- Route::get('/', ['uses' => 'HomeController@index', 'as' => 'index', 'middleware' => 'cleanup']);
+ ['middleware' => ['auth', 'range', 'reminders']], function () {
+ Route::get('/', ['uses' => 'HomeController@index', 'as' => 'index']);
Route::get('/home', ['uses' => 'HomeController@index', 'as' => 'home']);
Route::post('/daterange', ['uses' => 'HomeController@dateRange', 'as' => 'daterange']);
Route::get('/flush', ['uses' => 'HomeController@flush', 'as' => 'flush']);
@@ -317,6 +315,12 @@ Route::group(
Route::get('/json/box/bills-paid', ['uses' => 'JsonController@boxBillsPaid', 'as' => 'json.box.unpaid']);
Route::get('/json/transaction-journals/{what}', 'JsonController@transactionJournals');
+ /**
+ * New user Controller
+ */
+ Route::get('/new-user', ['uses' => 'NewUserController@index', 'as' => 'new-user.index']);
+ Route::post('/new-user/submit', ['uses' => 'NewUserController@submit', 'as' => 'new-user.submit']);
+
/**
* Piggy Bank Controller
*/
diff --git a/app/Models/Account.php b/app/Models/Account.php
index c621afca8e..8a9f1f80fd 100644
--- a/app/Models/Account.php
+++ b/app/Models/Account.php
@@ -11,22 +11,22 @@ use Watson\Validating\ValidatingTrait;
* Class Account
*
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property integer $user_id
- * @property integer $account_type_id
- * @property string $name
- * @property boolean $active
- * @property boolean $encrypted
- * @property float $virtual_balance
- * @property string $virtual_balance_encrypted
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property integer $user_id
+ * @property integer $account_type_id
+ * @property string $name
+ * @property boolean $active
+ * @property boolean $encrypted
+ * @property float $virtual_balance
+ * @property string $virtual_balance_encrypted
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\AccountMeta[] $accountMeta
- * @property-read \FireflyIII\Models\AccountType $accountType
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\PiggyBank[] $piggyBanks
+ * @property-read \FireflyIII\Models\AccountType $accountType
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\PiggyBank[] $piggyBanks
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Transaction[] $transactions
- * @property-read \FireflyIII\User $user
+ * @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Account whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Account whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Account whereUpdatedAt($value)
@@ -40,14 +40,13 @@ use Watson\Validating\ValidatingTrait;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Account whereVirtualBalanceEncrypted($value)
* @method static \FireflyIII\Models\Account accountTypeIn($types)
* @method static \FireflyIII\Models\Account hasMetaValue($name, $value)
- * @property boolean joinedAccountTypes
- * @property mixed startBalance
- * @property mixed endBalance
- * @property mixed lastActivityDate
- * @property mixed piggyBalance
- * @property mixed difference
- * @propery mixed percentage
- *
+ * @property boolean joinedAccountTypes
+ * @property mixed startBalance
+ * @property mixed endBalance
+ * @property mixed lastActivityDate
+ * @property mixed piggyBalance
+ * @property mixed difference
+ * @property mixed percentage
*/
class Account extends Model
{
@@ -216,7 +215,7 @@ class Account extends Model
{
$joinName = str_replace('.', '_', $name);
$query->leftJoin(
- 'account_meta as ' . $joinName, function(JoinClause $join) use ($joinName, $name) {
+ 'account_meta as ' . $joinName, function (JoinClause $join) use ($joinName, $name) {
$join->on($joinName . '.account_id', '=', 'accounts.id')->where($joinName . '.name', '=', $name);
}
);
diff --git a/app/Models/AccountMeta.php b/app/Models/AccountMeta.php
index f3ec8dfb60..279fe60765 100644
--- a/app/Models/AccountMeta.php
+++ b/app/Models/AccountMeta.php
@@ -6,14 +6,14 @@ use Watson\Validating\ValidatingTrait;
/**
* Class AccountMeta
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $account_id
- * @property string $name
- * @property string $data
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $account_id
+ * @property string $name
+ * @property string $data
* @property-read \FireflyIII\Models\Account $account
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\AccountMeta whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\AccountMeta whereCreatedAt($value)
@@ -33,7 +33,7 @@ class AccountMeta extends Model
'name' => 'required|between:1,100',
'data' => 'required'
];
- protected $table = 'account_meta';
+ protected $table = 'account_meta';
/**
*
diff --git a/app/Models/AccountType.php b/app/Models/AccountType.php
index 10c10a1ef4..2148b9e961 100644
--- a/app/Models/AccountType.php
+++ b/app/Models/AccountType.php
@@ -5,13 +5,13 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class AccountType
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property string $type
- * @property boolean $editable
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property string $type
+ * @property boolean $editable
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Account[] $accounts
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\AccountType whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\AccountType whereCreatedAt($value)
diff --git a/app/Models/Bill.php b/app/Models/Bill.php
index 70fab19668..76ce0b66ad 100644
--- a/app/Models/Bill.php
+++ b/app/Models/Bill.php
@@ -7,26 +7,26 @@ use Illuminate\Database\Eloquent\Model;
* FireflyIII\Models\Bill
*
* @codeCoverageIgnore Class Bill
- * @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $user_id
- * @property string $name
- * @property string $match
- * @property float $amount_min
- * @property string $amount_min_encrypted
- * @property float $amount_max
- * @property string $amount_max_encrypted
- * @property \Carbon\Carbon $date
- * @property boolean $active
- * @property boolean $automatch
- * @property string $repeat_freq
- * @property integer $skip
- * @property boolean $name_encrypted
- * @property boolean $match_encrypted
+ * @package FireflyIII\Models
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $user_id
+ * @property string $name
+ * @property string $match
+ * @property float $amount_min
+ * @property string $amount_min_encrypted
+ * @property float $amount_max
+ * @property string $amount_max_encrypted
+ * @property \Carbon\Carbon $date
+ * @property boolean $active
+ * @property boolean $automatch
+ * @property string $repeat_freq
+ * @property integer $skip
+ * @property boolean $name_encrypted
+ * @property boolean $match_encrypted
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionjournals
- * @property-read \FireflyIII\User $user
+ * @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereUpdatedAt($value)
@@ -44,17 +44,18 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereSkip($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereNameEncrypted($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Bill whereMatchEncrypted($value)
- * @property mixed nextExpectedMatch
- * @property mixed lastFoundMatch
+ * @property mixed nextExpectedMatch
+ * @property mixed lastFoundMatch
*/
class Bill extends Model
{
protected $fillable
- = ['name', 'match', 'amount_min', 'match_encrypted', 'name_encrypted', 'user_id', 'amount_max', 'date', 'repeat_freq', 'skip', 'automatch', 'active', ];
+ = ['name', 'match', 'amount_min', 'match_encrypted', 'name_encrypted', 'user_id', 'amount_max', 'date', 'repeat_freq', 'skip', 'automatch', 'active',];
protected $hidden = ['amount_min_encrypted', 'amount_max_encrypted', 'name_encrypted', 'match_encrypted'];
+
/**
* @return array
*/
diff --git a/app/Models/Budget.php b/app/Models/Budget.php
index 7de89a558e..02f1e46808 100644
--- a/app/Models/Budget.php
+++ b/app/Models/Budget.php
@@ -7,19 +7,19 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class Budget
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property string $name
- * @property integer $user_id
- * @property boolean $active
- * @property boolean $encrypted
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\BudgetLimit[] $budgetlimits
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property string $name
+ * @property integer $user_id
+ * @property boolean $active
+ * @property boolean $encrypted
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\BudgetLimit[] $budgetlimits
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionjournals
- * @property-read \FireflyIII\User $user
+ * @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Budget whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Budget whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Budget whereUpdatedAt($value)
diff --git a/app/Models/BudgetLimit.php b/app/Models/BudgetLimit.php
index 921f37d9db..42e72dc502 100644
--- a/app/Models/BudgetLimit.php
+++ b/app/Models/BudgetLimit.php
@@ -5,18 +5,18 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class BudgetLimit
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $budget_id
- * @property \Carbon\Carbon $startdate
- * @property float $amount
- * @property string $amount_encrypted
- * @property boolean $repeats
- * @property string $repeat_freq
- * @property-read \FireflyIII\Models\Budget $budget
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $budget_id
+ * @property \Carbon\Carbon $startdate
+ * @property float $amount
+ * @property string $amount_encrypted
+ * @property boolean $repeats
+ * @property string $repeat_freq
+ * @property-read \FireflyIII\Models\Budget $budget
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\LimitRepetition[] $limitrepetitions
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\BudgetLimit whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\BudgetLimit whereCreatedAt($value)
diff --git a/app/Models/Category.php b/app/Models/Category.php
index 3497fd9dc6..dc4f7cbbff 100644
--- a/app/Models/Category.php
+++ b/app/Models/Category.php
@@ -8,15 +8,15 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* Class Category
*
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property string $name
- * @property integer $user_id
- * @property boolean $encrypted
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property string $name
+ * @property integer $user_id
+ * @property boolean $encrypted
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionjournals
- * @property-read \FireflyIII\User $user
+ * @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereUpdatedAt($value)
@@ -24,8 +24,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereName($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereUserId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Category whereEncrypted($value)
- * @property mixed spent
- * @property mixed lastActivity
+ * @property mixed spent
+ * @property mixed lastActivity
*/
class Category extends Model
{
diff --git a/app/Models/Component.php b/app/Models/Component.php
index ac43425ad7..84686751be 100644
--- a/app/Models/Component.php
+++ b/app/Models/Component.php
@@ -6,15 +6,15 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class Component
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
+ * @property integer $id
* @property \Carbon\Carbon $created_at
* @property \Carbon\Carbon $updated_at
* @property \Carbon\Carbon $deleted_at
- * @property string $name
- * @property integer $user_id
- * @property string $class
+ * @property string $name
+ * @property integer $user_id
+ * @property string $class
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Component whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Component whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Component whereUpdatedAt($value)
diff --git a/app/Models/LimitRepetition.php b/app/Models/LimitRepetition.php
index 1adffb5e18..d5fd692dae 100644
--- a/app/Models/LimitRepetition.php
+++ b/app/Models/LimitRepetition.php
@@ -5,16 +5,16 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class LimitRepetition
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $budget_limit_id
- * @property \Carbon\Carbon $startdate
- * @property \Carbon\Carbon $enddate
- * @property float $amount
- * @property string $amount_encrypted
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $budget_limit_id
+ * @property \Carbon\Carbon $startdate
+ * @property \Carbon\Carbon $enddate
+ * @property float $amount
+ * @property string $amount_encrypted
* @property-read \FireflyIII\Models\BudgetLimit $budgetLimit
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\LimitRepetition whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\LimitRepetition whereCreatedAt($value)
diff --git a/app/Models/Permission.php b/app/Models/Permission.php
index a075f74e01..3e87ce4207 100644
--- a/app/Models/Permission.php
+++ b/app/Models/Permission.php
@@ -8,7 +8,20 @@ use Zizaco\Entrust\EntrustPermission;
* Class Permission
*
* @package FireflyIII\Models
+ * @property integer $id
+ * @property string $name
+ * @property string $display_name
+ * @property string $description
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property-read \Illuminate\Database\Eloquent\Collection|\Config::get('entrust.role')[] $roles
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Permission whereId($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Permission whereName($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Permission whereDisplayName($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Permission whereDescription($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Permission whereCreatedAt($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Permission whereUpdatedAt($value)
*/
class Permission extends EntrustPermission
{
-}
\ No newline at end of file
+}
diff --git a/app/Models/PiggyBank.php b/app/Models/PiggyBank.php
index a08241d1a1..44c05fa63b 100644
--- a/app/Models/PiggyBank.php
+++ b/app/Models/PiggyBank.php
@@ -7,27 +7,27 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class PiggyBank
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property integer $account_id
- * @property string $name
- * @property float $targetamount
- * @property string $targetamount_encrypted
- * @property \Carbon\Carbon $startdate
- * @property \Carbon\Carbon $targetdate
- * @property string $reminder
- * @property integer $reminder_skip
- * @property boolean $remind_me
- * @property integer $order
- * @property boolean $encrypted
- * @property-read \FireflyIII\Models\Account $account
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property integer $account_id
+ * @property string $name
+ * @property float $targetamount
+ * @property string $targetamount_encrypted
+ * @property \Carbon\Carbon $startdate
+ * @property \Carbon\Carbon $targetdate
+ * @property string $reminder
+ * @property integer $reminder_skip
+ * @property boolean $remind_me
+ * @property integer $order
+ * @property boolean $encrypted
+ * @property-read \FireflyIII\Models\Account $account
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\PiggyBankRepetition[] $piggyBankRepetitions
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\PiggyBankEvent[] $piggyBankEvents
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Reminder[] $reminders
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\PiggyBankEvent[] $piggyBankEvents
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Reminder[] $reminders
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBank whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBank whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBank whereUpdatedAt($value)
@@ -43,14 +43,14 @@ use Illuminate\Database\Eloquent\SoftDeletes;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBank whereRemindMe($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBank whereOrder($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBank whereEncrypted($value)
- * @property PiggyBankRepetition currentRep
+ * @property PiggyBankRepetition currentRep
*/
class PiggyBank extends Model
{
use SoftDeletes;
protected $fillable
- = ['name', 'account_id', 'order', 'reminder_skip', 'targetamount', 'startdate', 'targetdate', 'reminder', 'remind_me'];
+ = ['name', 'account_id', 'order', 'reminder_skip', 'targetamount', 'startdate', 'targetdate', 'reminder', 'remind_me'];
protected $hidden = ['targetamount_encrypted', 'encrypted'];
/**
diff --git a/app/Models/PiggyBankEvent.php b/app/Models/PiggyBankEvent.php
index 2c03dadace..6b9bdceda1 100644
--- a/app/Models/PiggyBankEvent.php
+++ b/app/Models/PiggyBankEvent.php
@@ -5,17 +5,17 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class PiggyBankEvent
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $piggy_bank_id
- * @property integer $transaction_journal_id
- * @property \Carbon\Carbon $date
- * @property float $amount
- * @property string $amount_encrypted
- * @property-read \FireflyIII\Models\PiggyBank $piggyBank
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $piggy_bank_id
+ * @property integer $transaction_journal_id
+ * @property \Carbon\Carbon $date
+ * @property float $amount
+ * @property string $amount_encrypted
+ * @property-read \FireflyIII\Models\PiggyBank $piggyBank
* @property-read \FireflyIII\Models\TransactionJournal $transactionJournal
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBankEvent whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBankEvent whereCreatedAt($value)
diff --git a/app/Models/PiggyBankRepetition.php b/app/Models/PiggyBankRepetition.php
index 699b712c25..a24066f2ee 100644
--- a/app/Models/PiggyBankRepetition.php
+++ b/app/Models/PiggyBankRepetition.php
@@ -7,16 +7,16 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class PiggyBankRepetition
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $piggy_bank_id
- * @property \Carbon\Carbon $startdate
- * @property \Carbon\Carbon $targetdate
- * @property float $currentamount
- * @property string $currentamount_encrypted
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $piggy_bank_id
+ * @property \Carbon\Carbon $startdate
+ * @property \Carbon\Carbon $targetdate
+ * @property float $currentamount
+ * @property string $currentamount_encrypted
* @property-read \FireflyIII\Models\PiggyBank $piggyBank
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBankRepetition whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\PiggyBankRepetition whereCreatedAt($value)
@@ -77,13 +77,13 @@ class PiggyBankRepetition extends Model
$q->orWhereNull('startdate');
}
)
- ->where(
- function (EloquentBuilder $q) use ($date) {
+ ->where(
+ function (EloquentBuilder $q) use ($date) {
- $q->where('targetdate', '>=', $date->format('Y-m-d 00:00:00'));
- $q->orWhereNull('targetdate');
- }
- );
+ $q->where('targetdate', '>=', $date->format('Y-m-d 00:00:00'));
+ $q->orWhereNull('targetdate');
+ }
+ );
}
/**
diff --git a/app/Models/Preference.php b/app/Models/Preference.php
index a25fd850e6..56bc6f7cfd 100644
--- a/app/Models/Preference.php
+++ b/app/Models/Preference.php
@@ -6,16 +6,16 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class Preference
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $user_id
- * @property string $name
- * @property string $name_encrypted
- * @property string $data
- * @property string $data_encrypted
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $user_id
+ * @property string $name
+ * @property string $name_encrypted
+ * @property string $data
+ * @property string $data_encrypted
* @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Preference whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Preference whereCreatedAt($value)
@@ -55,21 +55,6 @@ class Preference extends Model
return ['created_at', 'updated_at'];
}
- /**
- * @param $value
- *
- * @return float|int
- */
- public function getNameAttribute($value)
- {
- if (is_null($this->name_encrypted)) {
- return $value;
- }
- $value = Crypt::decrypt($this->name_encrypted);
-
- return $value;
- }
-
/**
* @param $value
*/
@@ -79,15 +64,6 @@ class Preference extends Model
$this->attributes['data_encrypted'] = Crypt::encrypt(json_encode($value));
}
- /**
- * @param $value
- */
- public function setNameAttribute($value)
- {
- $this->attributes['name_encrypted'] = Crypt::encrypt($value);
- $this->attributes['name'] = $value;
- }
-
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
diff --git a/app/Models/Reminder.php b/app/Models/Reminder.php
index 99baf19835..b4797dae8d 100644
--- a/app/Models/Reminder.php
+++ b/app/Models/Reminder.php
@@ -8,21 +8,21 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class Reminder
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property integer $user_id
- * @property \Carbon\Carbon $startdate
- * @property \Carbon\Carbon $enddate
- * @property boolean $active
- * @property boolean $notnow
- * @property integer $remindersable_id
- * @property string $remindersable_type
- * @property string $metadata
- * @property boolean $encrypted
- * @property-read \ $remindersable
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property integer $user_id
+ * @property \Carbon\Carbon $startdate
+ * @property \Carbon\Carbon $enddate
+ * @property boolean $active
+ * @property boolean $notnow
+ * @property integer $remindersable_id
+ * @property string $remindersable_type
+ * @property string $metadata
+ * @property boolean $encrypted
+ * @property-read \ $remindersable
* @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Reminder whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Reminder whereCreatedAt($value)
@@ -38,13 +38,13 @@ use Illuminate\Database\Eloquent\Model;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Reminder whereEncrypted($value)
* @method static \FireflyIII\Models\Reminder onDates($start, $end)
* @method static \FireflyIII\Models\Reminder today()
- * @property string description
+ * @property string description
*/
class Reminder extends Model
{
- protected $fillable = ['user_id', 'startdate', 'metadata', 'enddate', 'active', 'notnow', 'remindersable_id', 'remindersable_type', ];
+ protected $fillable = ['user_id', 'startdate', 'metadata', 'enddate', 'active', 'notnow', 'remindersable_id', 'remindersable_type',];
protected $hidden = ['encrypted'];
/**
@@ -124,7 +124,7 @@ class Reminder extends Model
$today = new Carbon;
return $query->where('startdate', '<=', $today->format('Y-m-d 00:00:00'))->where('enddate', '>=', $today->format('Y-m-d 00:00:00'))->where('active', 1)
- ->where('notnow', 0);
+ ->where('notnow', 0);
}
/**
diff --git a/app/Models/Role.php b/app/Models/Role.php
index d7df217c7f..90d89caff6 100644
--- a/app/Models/Role.php
+++ b/app/Models/Role.php
@@ -8,7 +8,21 @@ use Zizaco\Entrust\EntrustRole;
* Class Role
*
* @package FireflyIII\Models
+ * @property integer $id
+ * @property string $name
+ * @property string $display_name
+ * @property string $description
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property-read \Illuminate\Database\Eloquent\Collection|\Config::get('auth.model')[] $users
+ * @property-read \Illuminate\Database\Eloquent\Collection|\Config::get('entrust.permission')[] $perms
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Role whereId($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Role whereName($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Role whereDisplayName($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Role whereDescription($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Role whereCreatedAt($value)
+ * @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Role whereUpdatedAt($value)
*/
class Role extends EntrustRole
{
-}
\ No newline at end of file
+}
diff --git a/app/Models/Tag.php b/app/Models/Tag.php
index 0fb6a9c876..86e03e0ccf 100644
--- a/app/Models/Tag.php
+++ b/app/Models/Tag.php
@@ -10,20 +10,20 @@ use Watson\Validating\ValidatingTrait;
* Class Tag
*
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property string $deleted_at
- * @property integer $user_id
- * @property string $tag
- * @property string $tagMode
- * @property \Carbon\Carbon $date
- * @property string $description
- * @property float $latitude
- * @property float $longitude
- * @property integer $zoomLevel
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property string $deleted_at
+ * @property integer $user_id
+ * @property string $tag
+ * @property string $tagMode
+ * @property \Carbon\Carbon $date
+ * @property string $description
+ * @property float $latitude
+ * @property float $longitude
+ * @property integer $zoomLevel
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionjournals
- * @property-read \FireflyIII\User $user
+ * @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Tag whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Tag whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Tag whereUpdatedAt($value)
@@ -44,7 +44,7 @@ class Tag extends Model
protected $fillable = ['user_id', 'tag', 'date', 'description', 'longitude', 'latitude', 'zoomLevel', 'tagMode'];
protected $rules
= [
- 'tag' => 'required|min:1|uniqueObjectForUser:tags,tag,TRUE',
+ 'tag' => 'required|min:1',
'description' => 'min:1',
'date' => 'date',
'latitude' => 'numeric|min:-90|max:90',
diff --git a/app/Models/Transaction.php b/app/Models/Transaction.php
index 827f6958e3..26ca48ef45 100644
--- a/app/Models/Transaction.php
+++ b/app/Models/Transaction.php
@@ -9,18 +9,18 @@ use Watson\Validating\ValidatingTrait;
/**
* Class Transaction
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property integer $account_id
- * @property integer $transaction_journal_id
- * @property string $description
- * @property float $amount
- * @property string $amount_encrypted
- * @property-read \FireflyIII\Models\Account $account
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property integer $account_id
+ * @property integer $transaction_journal_id
+ * @property string $description
+ * @property float $amount
+ * @property string $amount_encrypted
+ * @property-read \FireflyIII\Models\Account $account
* @property-read \FireflyIII\Models\TransactionJournal $transactionJournal
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Transaction whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Transaction whereCreatedAt($value)
@@ -33,8 +33,8 @@ use Watson\Validating\ValidatingTrait;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\Transaction whereAmountEncrypted($value)
* @method static \FireflyIII\Models\Transaction after($date)
* @method static \FireflyIII\Models\Transaction before($date)
- * @property mixed before
- * @property mixed after
+ * @property mixed before
+ * @property mixed after
*/
class Transaction extends Model
{
diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php
index edc8797aca..27b21f36c3 100644
--- a/app/Models/TransactionCurrency.php
+++ b/app/Models/TransactionCurrency.php
@@ -6,15 +6,15 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class TransactionCurrency
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property string $code
- * @property string $name
- * @property string $symbol
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property string $code
+ * @property string $name
+ * @property string $symbol
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionJournals
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionCurrency whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionCurrency whereCreatedAt($value)
diff --git a/app/Models/TransactionGroup.php b/app/Models/TransactionGroup.php
index 9ef702872c..bb41749ca2 100644
--- a/app/Models/TransactionGroup.php
+++ b/app/Models/TransactionGroup.php
@@ -6,16 +6,16 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class TransactionGroup
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property integer $user_id
- * @property string $relation
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property integer $user_id
+ * @property string $relation
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionjournals
- * @property-read \FireflyIII\User $user
+ * @property-read \FireflyIII\User $user
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionGroup whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionGroup whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionGroup whereUpdatedAt($value)
diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php
index 8aedbd44d2..5b78595ec5 100644
--- a/app/Models/TransactionJournal.php
+++ b/app/Models/TransactionJournal.php
@@ -2,6 +2,7 @@
use Carbon\Carbon;
use Crypt;
+use FireflyIII\Support\CacheProperties;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -60,13 +61,17 @@ use Watson\Validating\ValidatingTrait;
* @method static \FireflyIII\Models\TransactionJournal onDate($date)
* @method static \FireflyIII\Models\TransactionJournal transactionTypes($types)
* @method static \FireflyIII\Models\TransactionJournal withRelevantData()
- * @property-read mixed $expense_account
- * @property string account_encrypted
- * @property bool joinedTransactions
- * @property bool joinedTransactionTypes
- * @property mixed account_id
- * @property mixed name
- * @property mixed symbol
+ * @property-read mixed $expense_account
+ * @property string account_encrypted
+ * @property bool joinedTransactions
+ * @property bool joinedTransactionTypes
+ * @property mixed account_id
+ * @property mixed name
+ * @property mixed symbol
+ * @property-read mixed $correct_amount
+ * @method static \FireflyIII\Models\TransactionJournal orderBy
+ * @method static \FireflyIII\Models\TransactionJournal|null first
+ * @property-read mixed $source_account
*/
class TransactionJournal extends Model
{
@@ -134,6 +139,13 @@ class TransactionJournal extends Model
*/
public function getAmountAttribute()
{
+ $cache = new CacheProperties();
+ $cache->addProperty($this->id);
+ $cache->addProperty('amount');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
$amount = '0';
bcscale(2);
/** @var Transaction $t */
@@ -142,51 +154,61 @@ class TransactionJournal extends Model
$amount = $t->amount;
}
}
+ $count = $this->tags->count();
- /*
- * If the journal has tags, it gets complicated.
- */
- if ($this->tags->count() == 0) {
- return $amount;
+ if ($count === 1) {
+ // get amount for single tag:
+ $amount = $this->amountByTag($this->tags()->first(), $amount);
}
- // if journal is part of advancePayment AND journal is a withdrawal,
- // then journal is being repaid by other journals, so the actual amount will lower:
- /** @var Tag $advancePayment */
- $advancePayment = $this->tags()->where('tagMode', 'advancePayment')->first();
- if ($advancePayment && $this->transactionType->type == 'Withdrawal') {
- // loop other deposits, remove from our amount.
- $others = $advancePayment->transactionJournals()->transactionTypes(['Deposit'])->get();
- foreach ($others as $other) {
- $amount = bcsub($amount, $other->actual_amount);
- }
+ if ($count > 1) {
+ // get amount for either tag.
+ $amount = $this->amountByTags($amount);
- return $amount;
}
+ $cache->store($amount);
- // if this journal is part of an advancePayment AND the journal is a deposit,
- // then the journal amount is correcting a withdrawal, and the amount is zero:
- if ($advancePayment && $this->transactionType->type == 'Deposit') {
- return '0';
- }
+ return $amount;
+ }
- // is balancing act?
- $balancingAct = $this->tags()->where('tagMode', 'balancingAct')->first();
-
- if ($balancingAct) {
- // this is the expense:
+ /**
+ * Assuming the journal has only one tag. Parameter amount is used as fallback.
+ *
+ * @param Tag $tag
+ * @param string $amount
+ *
+ * @return string
+ */
+ protected function amountByTag(Tag $tag, $amount)
+ {
+ if ($tag->tagMode == 'advancePayment') {
if ($this->transactionType->type == 'Withdrawal') {
- $transfer = $balancingAct->transactionJournals()->transactionTypes(['Transfer'])->first();
+ $others = $tag->transactionJournals()->transactionTypes(['Deposit'])->get();
+ foreach ($others as $other) {
+ $amount = bcsub($amount, $other->actual_amount);
+ }
+
+ return $amount;
+ }
+ if ($this->transactionType->type == 'Deposit') {
+ return '0';
+ }
+ }
+
+ if ($tag->tagMode == 'balancingAct') {
+ if ($this->transactionType->type == 'Withdrawal') {
+ $transfer = $tag->transactionJournals()->transactionTypes(['Transfer'])->first();
if ($transfer) {
$amount = bcsub($amount, $transfer->actual_amount);
return $amount;
}
- } // @codeCoverageIgnore
- } // @codeCoverageIgnore
+ }
+ }
return $amount;
+
}
/**
@@ -199,24 +221,39 @@ class TransactionJournal extends Model
}
/**
- * @return Account
+ * @param string $amount
+ *
+ * @return string
*/
- public function getAssetAccountAttribute()
+ public function amountByTags($amount)
+ {
+ $firstBalancingAct = $this->tags()->where('tagMode', 'balancingAct')->first();
+ if ($firstBalancingAct) {
+ return $this->amountByTag($firstBalancingAct, $amount);
+ }
+
+ $firstAdvancePayment = $this->tags()->where('tagMode', 'advancePayment')->first();
+ if ($firstAdvancePayment) {
+ return $this->amountByTag($firstAdvancePayment, $amount);
+ }
+
+ return $amount;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCorrectAmountAttribute()
{
- // if it's a deposit, it's the one thats positive
- // if it's a withdrawal, it's the one thats negative
- // otherwise, it's either (return first one):
switch ($this->transactionType->type) {
case 'Deposit':
- return $this->transactions()->where('amount', '>', 0)->first()->account;
+ return $this->transactions()->where('amount', '>', 0)->first()->amount;
case 'Withdrawal':
- return $this->transactions()->where('amount', '<', 0)->first()->account;
-
+ return $this->transactions()->where('amount', '<', 0)->first()->amount;
}
- return $this->transactions()->first()->account;
-
+ return $this->transactions()->where('amount', '>', 0)->first()->amount;
}
/**
@@ -258,35 +295,35 @@ class TransactionJournal extends Model
*/
public function getDestinationAccountAttribute()
{
- /** @var Transaction $transaction */
- foreach ($this->transactions()->get() as $transaction) {
- if (floatval($transaction->amount) > 0) {
- return $transaction->account;
- }
- }
+ $cache = new CacheProperties;
+ $cache->addProperty($this->id);
+ $cache->addProperty('destinationAccount');
- return $this->transactions()->first()->account;
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+ $account = $this->transactions()->where('amount', '>', 0)->first()->account;
+ $cache->store($account);
+
+ return $account;
}
/**
* @return Account
*/
- public function getExpenseAccountAttribute()
+ public function getSourceAccountAttribute()
{
- // if it's a deposit, it's the one thats negative
- // if it's a withdrawal, it's the one thats positive
- // otherwise, it's either (return first one):
-
- switch ($this->transactionType->type) {
- case 'Deposit':
- return $this->transactions()->where('amount', '<', 0)->first()->account;
- case 'Withdrawal':
- return $this->transactions()->where('amount', '>', 0)->first()->account;
-
+ $cache = new CacheProperties;
+ $cache->addProperty($this->id);
+ $cache->addProperty('destinationAccount');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
}
+ $account = $this->transactions()->where('amount', '<', 0)->first()->account;
- return $this->transactions()->first()->account;
+ $cache->store($account);
+ return $account;
}
/**
@@ -379,7 +416,7 @@ class TransactionJournal extends Model
public function scopeWithRelevantData(EloquentBuilder $query)
{
$query->with(
- ['transactions' => function(HasMany $q) {
+ ['transactions' => function (HasMany $q) {
$q->orderBy('amount', 'ASC');
}, 'transactiontype', 'transactioncurrency', 'budgets', 'categories', 'transactions.account.accounttype', 'bill', 'budgets', 'categories']
);
diff --git a/app/Models/TransactionRelation.php b/app/Models/TransactionRelation.php
index 056d61fdd8..aa4d3810af 100644
--- a/app/Models/TransactionRelation.php
+++ b/app/Models/TransactionRelation.php
@@ -5,7 +5,7 @@ use Illuminate\Database\Eloquent\Model;
/**
* Class TransactionRelation
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
*/
class TransactionRelation extends Model
diff --git a/app/Models/TransactionType.php b/app/Models/TransactionType.php
index 697b0e8432..098d5bcfc7 100644
--- a/app/Models/TransactionType.php
+++ b/app/Models/TransactionType.php
@@ -6,13 +6,13 @@ use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class TransactionType
*
- * @codeCoverageIgnore
+ * @codeCoverageIgnore
* @package FireflyIII\Models
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property \Carbon\Carbon $deleted_at
- * @property string $type
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property \Carbon\Carbon $deleted_at
+ * @property string $type
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionJournals
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionType whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\Models\TransactionType whereCreatedAt($value)
diff --git a/app/Providers/BusServiceProvider.php b/app/Providers/BusServiceProvider.php
index 1eef3684d7..dc2e86ac21 100644
--- a/app/Providers/BusServiceProvider.php
+++ b/app/Providers/BusServiceProvider.php
@@ -23,7 +23,7 @@ class BusServiceProvider extends ServiceProvider
public function boot(Dispatcher $dispatcher)
{
$dispatcher->mapUsing(
- function($command) {
+ function ($command) {
return Dispatcher::simpleMapping(
$command, 'FireflyIII\Commands', 'FireflyIII\Handlers\Commands'
);
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index 3e01105bd5..697f7df767 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -52,12 +52,15 @@ class EventServiceProvider extends ServiceProvider
$this->registerDeleteEvents();
$this->registerCreateEvents();
BudgetLimit::saved(
- function(BudgetLimit $budgetLimit) {
+ function (BudgetLimit $budgetLimit) {
+ Log::debug('Saved!');
$end = Navigation::addPeriod(clone $budgetLimit->startdate, $budgetLimit->repeat_freq, 0);
$end->subDay();
- $set = $budgetLimit->limitrepetitions()->where('startdate', $budgetLimit->startdate->format('Y-m-d'))->where('enddate', $end->format('Y-m-d'))
- ->get();
+ $set = $budgetLimit->limitrepetitions()
+ ->where('startdate', $budgetLimit->startdate->format('Y-m-d 00:00:00'))
+ ->where('enddate', $end->format('Y-m-d 00:00:00'))
+ ->get();
if ($set->count() == 0) {
$repetition = new LimitRepetition;
$repetition->startdate = $budgetLimit->startdate;
@@ -68,8 +71,7 @@ class EventServiceProvider extends ServiceProvider
try {
$repetition->save();
} catch (QueryException $e) {
- Log::error('Trying to save new LimitRepetition failed!');
- Log::error($e->getMessage());
+ Log::error('Trying to save new LimitRepetition failed: ' . $e->getMessage()); // @codeCoverageIgnore
}
} else {
if ($set->count() == 1) {
@@ -91,7 +93,7 @@ class EventServiceProvider extends ServiceProvider
protected function registerDeleteEvents()
{
TransactionJournal::deleted(
- function(TransactionJournal $journal) {
+ function (TransactionJournal $journal) {
/** @var Transaction $transaction */
foreach ($journal->transactions()->get() as $transaction) {
@@ -100,7 +102,7 @@ class EventServiceProvider extends ServiceProvider
}
);
PiggyBank::deleting(
- function(PiggyBank $piggyBank) {
+ function (PiggyBank $piggyBank) {
$reminders = $piggyBank->reminders()->get();
/** @var Reminder $reminder */
foreach ($reminders as $reminder) {
@@ -110,7 +112,7 @@ class EventServiceProvider extends ServiceProvider
);
Account::deleted(
- function(Account $account) {
+ function (Account $account) {
/** @var Transaction $transaction */
foreach ($account->transactions()->get() as $transaction) {
@@ -131,7 +133,7 @@ class EventServiceProvider extends ServiceProvider
// move this routine to a filter
// in case of repeated piggy banks and/or other problems.
PiggyBank::created(
- function(PiggyBank $piggyBank) {
+ function (PiggyBank $piggyBank) {
$repetition = new PiggyBankRepetition;
$repetition->piggyBank()->associate($piggyBank);
$repetition->startdate = is_null($piggyBank->startdate) ? null : $piggyBank->startdate;
diff --git a/app/Providers/FireflyServiceProvider.php b/app/Providers/FireflyServiceProvider.php
index ab5d1be9e5..eff456ea08 100644
--- a/app/Providers/FireflyServiceProvider.php
+++ b/app/Providers/FireflyServiceProvider.php
@@ -30,7 +30,7 @@ class FireflyServiceProvider extends ServiceProvider
public function boot()
{
Validator::resolver(
- function($translator, $data, $rules, $messages) {
+ function ($translator, $data, $rules, $messages) {
return new FireflyValidator($translator, $data, $rules, $messages);
}
);
@@ -55,28 +55,28 @@ class FireflyServiceProvider extends ServiceProvider
$this->app->bind(
- 'preferences', function() {
+ 'preferences', function () {
return new Preferences;
}
);
$this->app->bind(
- 'navigation', function() {
+ 'navigation', function () {
return new Navigation;
}
);
$this->app->bind(
- 'amount', function() {
+ 'amount', function () {
return new Amount;
}
);
$this->app->bind(
- 'steam', function() {
+ 'steam', function () {
return new Steam;
}
);
$this->app->bind(
- 'expandedform', function() {
+ 'expandedform', function () {
return new ExpandedForm;
}
);
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
index b95fa98635..4e40f5bec8 100644
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -44,7 +44,7 @@ class RouteServiceProvider extends ServiceProvider
public function map(Router $router)
{
$router->group(
- ['namespace' => $this->namespace], function($router) {
+ ['namespace' => $this->namespace], function ($router) {
/** @noinspection PhpIncludeInspection */
require app_path('Http/routes.php');
}
diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php
index e5900e802b..dd413a236e 100644
--- a/app/Repositories/Account/AccountRepository.php
+++ b/app/Repositories/Account/AccountRepository.php
@@ -15,6 +15,7 @@ use FireflyIII\Models\Preference;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType;
+use FireflyIII\Support\CacheProperties;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Query\Builder;
use Illuminate\Pagination\LengthAwarePaginator;
@@ -64,7 +65,7 @@ class AccountRepository implements AccountRepositoryInterface
public function getAccounts(array $types)
{
$result = Auth::user()->accounts()->with(
- ['accountmeta' => function(HasMany $query) {
+ ['accountmeta' => function (HasMany $query) {
$query->where('name', 'accountRole');
}]
)->accountTypeIn($types)->orderBy('accounts.name', 'ASC')->get(['accounts.*'])->sortBy('name');
@@ -79,15 +80,15 @@ class AccountRepository implements AccountRepositoryInterface
public function getCreditCards()
{
return Auth::user()->accounts()
- ->hasMetaValue('accountRole', 'ccAsset')
- ->hasMetaValue('ccType', 'monthlyFull')
- ->get(
- [
- 'accounts.*',
- 'ccType.data as ccType',
- 'accountRole.data as accountRole'
- ]
- );
+ ->hasMetaValue('accountRole', 'ccAsset')
+ ->hasMetaValue('ccType', 'monthlyFull')
+ ->get(
+ [
+ 'accounts.*',
+ 'ccType.data as ccType',
+ 'accountRole.data as accountRole'
+ ]
+ );
}
/**
@@ -109,12 +110,22 @@ class AccountRepository implements AccountRepositoryInterface
*/
public function getFrontpageAccounts(Preference $preference)
{
+ $cache = new CacheProperties();
+ $cache->addProperty($preference->data);
+ $cache->addProperty('frontPageaccounts');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
+
if ($preference->data == []) {
$accounts = Auth::user()->accounts()->accountTypeIn(['Default account', 'Asset account'])->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
} else {
$accounts = Auth::user()->accounts()->whereIn('id', $preference->data)->orderBy('accounts.name', 'ASC')->get(['accounts.*']);
}
+ $cache->store($accounts);
+
return $accounts;
}
@@ -131,19 +142,30 @@ class AccountRepository implements AccountRepositoryInterface
*/
public function getFrontpageTransactions(Account $account, Carbon $start, Carbon $end)
{
- return Auth::user()
- ->transactionjournals()
- ->with(['transactions'])
- ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
- ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')->where('accounts.id', $account->id)
- ->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transaction_journals.transaction_currency_id')
- ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
- ->before($end)
- ->after($start)
- ->orderBy('transaction_journals.date', 'DESC')
- ->orderBy('transaction_journals.id', 'DESC')
- ->take(10)
- ->get(['transaction_journals.*', 'transaction_currencies.symbol', 'transaction_types.type']);
+ $cache = new CacheProperties();
+ $cache->addProperty($account->id);
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
+ $set = Auth::user()
+ ->transactionjournals()
+ ->with(['transactions'])
+ ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
+ ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')->where('accounts.id', $account->id)
+ ->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transaction_journals.transaction_currency_id')
+ ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
+ ->before($end)
+ ->after($start)
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.id', 'DESC')
+ ->take(10)
+ ->get(['transaction_journals.*', 'transaction_currencies.symbol', 'transaction_types.type']);
+ $cache->store($set);
+
+ return $set;
}
/**
@@ -156,13 +178,13 @@ class AccountRepository implements AccountRepositoryInterface
{
$offset = ($page - 1) * 50;
$query = Auth::user()
- ->transactionJournals()
- ->withRelevantData()
- ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
- ->where('transactions.account_id', $account->id)
- ->orderBy('transaction_journals.date', 'DESC')
- ->orderBy('transaction_journals.order', 'ASC')
- ->orderBy('transaction_journals.id', 'DESC');
+ ->transactionJournals()
+ ->withRelevantData()
+ ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
+ ->where('transactions.account_id', $account->id)
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.order', 'ASC')
+ ->orderBy('transaction_journals.id', 'DESC');
$count = $query->count();
$set = $query->take(50)->offset($offset)->get(['transaction_journals.*']);
@@ -207,13 +229,20 @@ class AccountRepository implements AccountRepositoryInterface
$ids[] = intval($id->account_id);
}
+ $cache = new CacheProperties;
+ $cache->addProperty($ids);
+ $cache->addProperty('piggyAccounts');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
$ids = array_unique($ids);
if (count($ids) > 0) {
$accounts = Auth::user()->accounts()->whereIn('id', $ids)->get();
}
$accounts->each(
- function(Account $account) use ($start, $end) {
+ function (Account $account) use ($start, $end) {
$account->startBalance = Steam::balance($account, $start, true);
$account->endBalance = Steam::balance($account, $end, true);
$account->piggyBalance = 0;
@@ -231,6 +260,8 @@ class AccountRepository implements AccountRepositoryInterface
}
);
+ $cache->store($accounts);
+
return $accounts;
}
@@ -251,7 +282,7 @@ class AccountRepository implements AccountRepositoryInterface
$end = clone Session::get('end', new Carbon);
$accounts->each(
- function(Account $account) use ($start, $end) {
+ function (Account $account) use ($start, $end) {
$account->startBalance = Steam::balance($account, $start);
$account->endBalance = Steam::balance($account, $end);
@@ -289,25 +320,26 @@ class AccountRepository implements AccountRepositoryInterface
*/
public function getTransfersInRange(Account $account, Carbon $start, Carbon $end)
{
- $set = TransactionJournal::whereIn(
- 'id', function(Builder $q) use ($account, $start, $end) {
+ $set = TransactionJournal::whereIn(
+ 'id', function (Builder $q) use ($account, $start, $end) {
$q->select('transaction_journals.id')
- ->from('transactions')
- ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
- ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
- ->where('transactions.account_id', $account->id)
- ->where('transaction_journals.user_id', Auth::user()->id)
- ->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
- ->where('transaction_journals.date', '<=', $end->format('Y-m-d'))
- ->where('transaction_types.type', 'Transfer');
+ ->from('transactions')
+ ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
+ ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
+ ->where('transactions.account_id', $account->id)
+ ->where('transaction_journals.user_id', Auth::user()->id)
+ ->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
+ ->where('transaction_journals.date', '<=', $end->format('Y-m-d'))
+ ->where('transaction_types.type', 'Transfer');
}
)->get();
$filtered = $set->filter(
- function(TransactionJournal $journal) use ($account) {
+ function (TransactionJournal $journal) use ($account) {
if ($journal->destination_account->id == $account->id) {
return $journal;
}
+
return null;
}
);
@@ -341,10 +373,11 @@ class AccountRepository implements AccountRepositoryInterface
*/
public function openingBalanceTransaction(Account $account)
{
- return TransactionJournal::accountIs($account)
- ->orderBy('transaction_journals.date', 'ASC')
- ->orderBy('created_at', 'ASC')
- ->first(['transaction_journals.*']);
+ return TransactionJournal
+ ::orderBy('transaction_journals.date', 'ASC')
+ ->accountIs($account)
+ ->orderBy('created_at', 'ASC')
+ ->first(['transaction_journals.*']);
}
/**
@@ -362,13 +395,13 @@ class AccountRepository implements AccountRepositoryInterface
if ($data['openingBalance'] != 0) {
$type = $data['openingBalance'] < 0 ? 'expense' : 'revenue';
$opposingData = [
- 'user' => $data['user'],
- 'accountType' => $type,
- 'virtual_balance' => $data['virtualBalance'],
- 'name' => $data['name'] . ' initial balance',
- 'active' => false,
+ 'user' => $data['user'],
+ 'accountType' => $type,
+ 'virtualBalance' => 0,
+ 'name' => $data['name'] . ' initial balance',
+ 'active' => false,
];
- $opposing = $this->storeAccount($opposingData);
+ $opposing = $this->storeAccount($opposingData);
$this->storeInitialBalance($newAccount, $opposing, $data);
}
@@ -413,12 +446,13 @@ class AccountRepository implements AccountRepositoryInterface
// create new opening balance.
$type = $data['openingBalance'] < 0 ? 'expense' : 'revenue';
$opposingData = [
- 'user' => $data['user'],
- 'accountType' => $type,
- 'name' => $data['name'] . ' initial balance',
- 'active' => false,
+ 'user' => $data['user'],
+ 'accountType' => $type,
+ 'name' => $data['name'] . ' initial balance',
+ 'active' => false,
+ 'virtualBalance' => 0,
];
- $opposing = $this->storeAccount($opposingData);
+ $opposing = $this->storeAccount($opposingData);
$this->storeInitialBalance($account, $opposing, $data);
}
@@ -445,15 +479,17 @@ class AccountRepository implements AccountRepositoryInterface
'user_id' => $data['user'],
'account_type_id' => $accountType->id,
'name' => $data['name'],
+ 'virtual_balance' => $data['virtualBalance'],
'active' => $data['active'] === true ? true : false,
]
);
if (!$newAccount->isValid()) {
// does the account already exist?
- $searchData = [
+ $searchData = [
'user_id' => $data['user'],
'account_type_id' => $accountType->id,
+ 'virtual_balance' => $data['virtualBalance'],
'name' => $data['name']
];
$existingAccount = Account::firstOrNullEncrypted($searchData);
diff --git a/app/Repositories/Bill/BillRepository.php b/app/Repositories/Bill/BillRepository.php
index 54ee071c66..cf2c8d2860 100644
--- a/app/Repositories/Bill/BillRepository.php
+++ b/app/Repositories/Bill/BillRepository.php
@@ -262,27 +262,10 @@ class BillRepository implements BillRepositoryInterface
*/
public function scan(Bill $bill, TransactionJournal $journal)
{
- $amountMatch = false;
- $wordMatch = false;
$matches = explode(',', $bill->match);
- $description = strtolower($journal->description) . ' ' . strtolower($journal->expense_account->name);
- $count = 0;
- foreach ($matches as $word) {
- if (!(strpos($description, strtolower($word)) === false)) {
- $count++;
- }
- }
- if ($count >= count($matches)) {
- $wordMatch = true;
- }
-
-
- /*
- * Match amount.
- */
- if ($journal->amount >= $bill->amount_min && $journal->amount <= $bill->amount_max) {
- $amountMatch = true;
- }
+ $description = strtolower($journal->description) . ' ' . strtolower($journal->destination_account->name);
+ $wordMatch = $this->doWordMatch($matches, $description);
+ $amountMatch = $this->doAmountMatch($journal->amount, $bill->amount_min, $bill->amount_max);
/*
* If both, update!
@@ -290,13 +273,17 @@ class BillRepository implements BillRepositoryInterface
if ($wordMatch && $amountMatch) {
$journal->bill()->associate($bill);
$journal->save();
- } else {
- if ($bill->id == $journal->bill_id) {
- // if no match, but bill used to match, remove it:
- $journal->bill_id = null;
- $journal->save();
- }
+
+ return true;
}
+ if ($bill->id == $journal->bill_id) {
+ // if no match, but bill used to match, remove it:
+ $journal->bill_id = null;
+ $journal->save();
+
+ return true;
+ }
+
}
/**
@@ -350,4 +337,42 @@ class BillRepository implements BillRepositoryInterface
return $bill;
}
+
+ /**
+ * @param array $matches
+ * @param $description
+ *
+ * @return bool
+ */
+ protected function doWordMatch(array $matches, $description)
+ {
+ $wordMatch = false;
+ $count = 0;
+ foreach ($matches as $word) {
+ if (!(strpos($description, strtolower($word)) === false)) {
+ $count++;
+ }
+ }
+ if ($count >= count($matches)) {
+ $wordMatch = true;
+ }
+
+ return $wordMatch;
+ }
+
+ /**
+ * @param float $amount
+ * @param float $min
+ * @param float $max
+ *
+ * @return bool
+ */
+ protected function doAmountMatch($amount, $min, $max)
+ {
+ if ($amount >= $min && $amount <= $max) {
+ return true;
+ }
+
+ return false;
+ }
}
diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php
index efe12c2eab..a4a9bda75f 100644
--- a/app/Repositories/Budget/BudgetRepository.php
+++ b/app/Repositories/Budget/BudgetRepository.php
@@ -7,8 +7,9 @@ use Carbon\Carbon;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\LimitRepetition;
+use FireflyIII\Repositories\Shared\ComponentRepository;
+use FireflyIII\Support\CacheProperties;
use Illuminate\Database\Query\Builder as QueryBuilder;
-use Illuminate\Database\Query\JoinClause;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use Input;
@@ -18,7 +19,7 @@ use Input;
*
* @package FireflyIII\Repositories\Budget
*/
-class BudgetRepository implements BudgetRepositoryInterface
+class BudgetRepository extends ComponentRepository implements BudgetRepositoryInterface
{
/**
@@ -79,10 +80,10 @@ class BudgetRepository implements BudgetRepositoryInterface
/** @var Collection $repetitions */
return LimitRepetition::
leftJoin('budget_limits', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')
- ->where('limit_repetitions.startdate', '<=', $end->format('Y-m-d 00:00:00'))
- ->where('limit_repetitions.startdate', '>=', $start->format('Y-m-d 00:00:00'))
- ->where('budget_limits.budget_id', $budget->id)
- ->get(['limit_repetitions.*']);
+ ->where('limit_repetitions.startdate', '<=', $end->format('Y-m-d 00:00:00'))
+ ->where('limit_repetitions.startdate', '>=', $start->format('Y-m-d 00:00:00'))
+ ->where('budget_limits.budget_id', $budget->id)
+ ->get(['limit_repetitions.*']);
}
/**
@@ -113,7 +114,17 @@ class BudgetRepository implements BudgetRepositoryInterface
*/
public function getCurrentRepetition(Budget $budget, Carbon $date)
{
- return $budget->limitrepetitions()->where('limit_repetitions.startdate', $date)->first(['limit_repetitions.*']);
+ $cache = new CacheProperties;
+ $cache->addProperty($budget->id);
+ $cache->addProperty($date);
+ $cache->addProperty('getCurrentRepetition');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+ $data = $budget->limitrepetitions()->where('limit_repetitions.startdate', $date)->first(['limit_repetitions.*']);
+ $cache->store($data);
+
+ return $data;
}
/**
@@ -150,13 +161,22 @@ class BudgetRepository implements BudgetRepositoryInterface
*/
public function getJournals(Budget $budget, LimitRepetition $repetition = null, $take = 50)
{
- $offset = intval(Input::get('page')) > 0 ? intval(Input::get('page')) * $take : 0;
-
+ $cache = new CacheProperties;
+ $cache->addProperty($budget->id);
+ if ($repetition) {
+ $cache->addProperty($repetition->id);
+ }
+ $cache->addProperty($take);
+ $cache->addProperty('getJournals');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+ $offset = intval(Input::get('page')) > 0 ? intval(Input::get('page')) * $take : 0;
$setQuery = $budget->transactionJournals()->withRelevantData()->take($take)->offset($offset)
- ->orderBy('transaction_journals.date', 'DESC')
- ->orderBy('transaction_journals.order', 'ASC')
- ->orderBy('transaction_journals.id', 'DESC');
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.order', 'ASC')
+ ->orderBy('transaction_journals.id', 'DESC');
$countQuery = $budget->transactionJournals();
@@ -169,7 +189,11 @@ class BudgetRepository implements BudgetRepositoryInterface
$set = $setQuery->get(['transaction_journals.*']);
$count = $countQuery->count();
- return new LengthAwarePaginator($set, $count, $take, $offset);
+
+ $paginator = new LengthAwarePaginator($set, $count, $take, $offset);
+ $cache->store($paginator);
+
+ return $paginator;
}
/**
@@ -196,9 +220,9 @@ class BudgetRepository implements BudgetRepositoryInterface
public function getLimitAmountOnDate(Budget $budget, Carbon $date)
{
$repetition = LimitRepetition::leftJoin('budget_limits', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')
- ->where('limit_repetitions.startdate', $date->format('Y-m-d 00:00:00'))
- ->where('budget_limits.budget_id', $budget->id)
- ->first(['limit_repetitions.*']);
+ ->where('limit_repetitions.startdate', $date->format('Y-m-d 00:00:00'))
+ ->where('budget_limits.budget_id', $budget->id)
+ ->first(['limit_repetitions.*']);
if ($repetition) {
return floatval($repetition->amount);
@@ -216,15 +240,15 @@ class BudgetRepository implements BudgetRepositoryInterface
public function getWithoutBudget(Carbon $start, Carbon $end)
{
return Auth::user()
- ->transactionjournals()
- ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
- ->whereNull('budget_transaction_journal.id')
- ->before($end)
- ->after($start)
- ->orderBy('transaction_journals.date', 'DESC')
- ->orderBy('transaction_journals.order', 'ASC')
- ->orderBy('transaction_journals.id', 'DESC')
- ->get(['transaction_journals.*']);
+ ->transactionjournals()
+ ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
+ ->whereNull('budget_transaction_journal.id')
+ ->before($end)
+ ->after($start)
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.order', 'ASC')
+ ->orderBy('transaction_journals.id', 'DESC')
+ ->get(['transaction_journals.*']);
}
/**
@@ -236,22 +260,22 @@ class BudgetRepository implements BudgetRepositoryInterface
public function getWithoutBudgetSum(Carbon $start, Carbon $end)
{
$noBudgetSet = Auth::user()
- ->transactionjournals()
- ->whereNotIn(
- 'transaction_journals.id', function (QueryBuilder $query) use ($start, $end) {
- $query
- ->select('transaction_journals.id')
- ->from('transaction_journals')
- ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
- ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00'))
- ->where('transaction_journals.date', '<=', $end->format('Y-m-d 00:00:00'))
- ->whereNotNull('budget_transaction_journal.budget_id');
- }
- )
- ->after($start)
- ->before($end)
- ->transactionTypes(['Withdrawal'])
- ->get(['transaction_journals.*'])->sum('amount');
+ ->transactionjournals()
+ ->whereNotIn(
+ 'transaction_journals.id', function (QueryBuilder $query) use ($start, $end) {
+ $query
+ ->select('transaction_journals.id')
+ ->from('transaction_journals')
+ ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
+ ->where('transaction_journals.date', '>=', $start->format('Y-m-d 00:00:00'))
+ ->where('transaction_journals.date', '<=', $end->format('Y-m-d 00:00:00'))
+ ->whereNotNull('budget_transaction_journal.budget_id');
+ }
+ )
+ ->after($start)
+ ->before($end)
+ ->transactionTypes(['Withdrawal'])
+ ->get(['transaction_journals.*'])->sum('amount');
return floatval($noBudgetSet) * -1;
}
@@ -262,32 +286,11 @@ class BudgetRepository implements BudgetRepositoryInterface
* @param Carbon $end
* @param bool $shared
*
- * @return float
+ * @return string
*/
public function spentInPeriodCorrected(Budget $budget, Carbon $start, Carbon $end, $shared = true)
{
- if ($shared === true) {
- // get everything:
- $sum = floatval($budget->transactionjournals()->before($end)->after($start)->get(['transaction_journals.*'])->sum('amount'));
- } else {
- // get all journals in this month where the asset account is NOT shared.
- $sum = $budget->transactionjournals()
- ->before($end)
- ->after($start)
- ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
- ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
- ->leftJoin(
- 'account_meta', function (JoinClause $join) {
- $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
- }
- )
- ->where('account_meta.data', '!=', '"sharedAsset"')
- ->get(['transaction_journals.*'])
- ->sum('amount');
- $sum = floatval($sum);
- }
-
- return $sum;
+ return $this->spentInPeriod($budget, $start, $end, $shared);
}
/**
diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php
index 0a035bea35..12d3d01b93 100644
--- a/app/Repositories/Budget/BudgetRepositoryInterface.php
+++ b/app/Repositories/Budget/BudgetRepositoryInterface.php
@@ -134,7 +134,7 @@ interface BudgetRepositoryInterface
* @param Carbon $end
* @param boolean $shared
*
- * @return float
+ * @return string
*/
public function spentInPeriodCorrected(Budget $budget, Carbon $start, Carbon $end, $shared = true);
diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php
index 5bf3dfd1b1..f2cc4bc3a6 100644
--- a/app/Repositories/Category/CategoryRepository.php
+++ b/app/Repositories/Category/CategoryRepository.php
@@ -7,7 +7,7 @@ use Carbon\Carbon;
use Crypt;
use FireflyIII\Models\Category;
use FireflyIII\Models\TransactionJournal;
-use Illuminate\Database\Query\JoinClause;
+use FireflyIII\Repositories\Shared\ComponentRepository;
use Illuminate\Support\Collection;
/**
@@ -15,7 +15,7 @@ use Illuminate\Support\Collection;
*
* @package FireflyIII\Repositories\Category
*/
-class CategoryRepository implements CategoryRepositoryInterface
+class CategoryRepository extends ComponentRepository implements CategoryRepositoryInterface
{
/**
@@ -49,7 +49,7 @@ class CategoryRepository implements CategoryRepositoryInterface
/** @var Collection $set */
$set = Auth::user()->categories()->orderBy('name', 'ASC')->get();
$set->sortBy(
- function(Category $category) {
+ function (Category $category) {
return $category->name;
}
);
@@ -67,22 +67,22 @@ class CategoryRepository implements CategoryRepositoryInterface
public function getCategoriesAndExpensesCorrected($start, $end)
{
$set = Auth::user()->transactionjournals()
- ->leftJoin(
- 'category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id'
- )
- ->leftJoin('categories', 'categories.id', '=', 'category_transaction_journal.category_id')
- ->before($end)
- ->where('categories.user_id', Auth::user()->id)
- ->after($start)
- ->transactionTypes(['Withdrawal'])
- ->groupBy('categories.id')
- ->get(['categories.id as category_id', 'categories.encrypted as category_encrypted', 'categories.name', 'transaction_journals.*']);
+ ->leftJoin(
+ 'category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id'
+ )
+ ->leftJoin('categories', 'categories.id', '=', 'category_transaction_journal.category_id')
+ ->before($end)
+ ->where('categories.user_id', Auth::user()->id)
+ ->after($start)
+ ->transactionTypes(['Withdrawal'])
+ ->get(['categories.id as category_id', 'categories.encrypted as category_encrypted', 'categories.name', 'transaction_journals.*']);
$result = [];
foreach ($set as $entry) {
$categoryId = intval($entry->category_id);
if (isset($result[$categoryId])) {
- $result[$categoryId]['sum'] += floatval($entry->amount);
+ bcscale(2);
+ $result[$categoryId]['sum'] = bcadd($result[$categoryId]['sum'], $entry->amount);
} else {
$isEncrypted = intval($entry->category_encrypted) == 1 ? true : false;
$name = strlen($entry->name) == 0 ? trans('firefly.no_category') : $entry->name;
@@ -143,10 +143,10 @@ class CategoryRepository implements CategoryRepositoryInterface
public function getLatestActivity(Category $category)
{
$latest = $category->transactionjournals()
- ->orderBy('transaction_journals.date', 'DESC')
- ->orderBy('transaction_journals.order', 'ASC')
- ->orderBy('transaction_journals.id', 'DESC')
- ->first();
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.order', 'ASC')
+ ->orderBy('transaction_journals.id', 'DESC')
+ ->first();
if ($latest) {
return $latest->date;
}
@@ -163,15 +163,15 @@ class CategoryRepository implements CategoryRepositoryInterface
public function getWithoutCategory(Carbon $start, Carbon $end)
{
return Auth::user()
- ->transactionjournals()
- ->leftJoin('category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
- ->whereNull('category_transaction_journal.id')
- ->before($end)
- ->after($start)
- ->orderBy('transaction_journals.date', 'DESC')
- ->orderBy('transaction_journals.order', 'ASC')
- ->orderBy('transaction_journals.id', 'DESC')
- ->get(['transaction_journals.*']);
+ ->transactionjournals()
+ ->leftJoin('category_transaction_journal', 'category_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
+ ->whereNull('category_transaction_journal.id')
+ ->before($end)
+ ->after($start)
+ ->orderBy('transaction_journals.date', 'DESC')
+ ->orderBy('transaction_journals.order', 'ASC')
+ ->orderBy('transaction_journals.id', 'DESC')
+ ->get(['transaction_journals.*']);
}
/**
@@ -181,39 +181,11 @@ class CategoryRepository implements CategoryRepositoryInterface
*
* @param bool $shared
*
- * @return float
+ * @return string
*/
public function spentInPeriodCorrected(Category $category, Carbon $start, Carbon $end, $shared = false)
{
- if ($shared === true) {
- // shared is true.
- // always ignore transfers between accounts!
- $sum = floatval(
- $category->transactionjournals()
- ->transactionTypes(['Withdrawal'])
- ->before($end)->after($start)->get(['transaction_journals.*'])->sum('amount')
- );
-
- } else {
- // do something else, SEE budgets.
- // get all journals in this month where the asset account is NOT shared.
- $sum = $category->transactionjournals()
- ->before($end)
- ->after($start)
- ->transactionTypes(['Withdrawal'])
- ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
- ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
- ->leftJoin(
- 'account_meta', function(JoinClause $join) {
- $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
- }
- )
- ->where('account_meta.data', '!=', '"sharedAsset"')
- ->get(['transaction_journals.*'])->sum('amount');
- $sum = floatval($sum);
- }
-
- return $sum;
+ return $this->spentInPeriod($category, $start, $end, $shared);
}
/**
diff --git a/app/Repositories/Category/CategoryRepositoryInterface.php b/app/Repositories/Category/CategoryRepositoryInterface.php
index cfe3f93c50..a24dfb6efe 100644
--- a/app/Repositories/Category/CategoryRepositoryInterface.php
+++ b/app/Repositories/Category/CategoryRepositoryInterface.php
@@ -81,7 +81,7 @@ interface CategoryRepositoryInterface
*
* @param bool $shared
*
- * @return float
+ * @return string
*/
public function spentInPeriodCorrected(Category $category, Carbon $start, Carbon $end, $shared = false);
diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php
index a7fb12f50a..6713821bb9 100644
--- a/app/Repositories/Journal/JournalRepository.php
+++ b/app/Repositories/Journal/JournalRepository.php
@@ -48,11 +48,6 @@ class JournalRepository implements JournalRepositoryInterface
*/
public function delete(TransactionJournal $journal)
{
- // delete transactions first:
- /** @var Transaction $transaction */
- foreach ($journal->transactions()->get() as $transaction) {
- $transaction->delete();
- }
$journal->delete();
return true;
@@ -111,7 +106,7 @@ class JournalRepository implements JournalRepositoryInterface
*/
public function getJournalsOfTypes(array $types, $offset, $page)
{
- $set = Auth::user()->transactionJournals()->transactionTypes($types)->withRelevantData()->take(50)->offset($offset)
+ $set = Auth::user()->transactionJournals()->transactionTypes($types)->withRelevantData()->take(50)->offset($offset)
->orderBy('date', 'DESC')
->orderBy('order', 'ASC')
->orderBy('id', 'DESC')
diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php
index 3db4693284..78c8d80b2d 100644
--- a/app/Repositories/PiggyBank/PiggyBankRepository.php
+++ b/app/Repositories/PiggyBank/PiggyBankRepository.php
@@ -102,7 +102,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
public function setOrder($id, $order)
{
$piggyBank = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')->where('accounts.user_id', Auth::user()->id)
- ->where('piggy_banks.id', $id)->first(['piggy_banks.*']);
+ ->where('piggy_banks.id', $id)->first(['piggy_banks.*']);
if ($piggyBank) {
$piggyBank->order = $order;
$piggyBank->save();
diff --git a/app/Repositories/Reminder/ReminderRepository.php b/app/Repositories/Reminder/ReminderRepository.php
index ae04c59c66..8db6d0ada0 100644
--- a/app/Repositories/Reminder/ReminderRepository.php
+++ b/app/Repositories/Reminder/ReminderRepository.php
@@ -36,14 +36,14 @@ class ReminderRepository implements ReminderRepositoryInterface
$today = new Carbon;
// active reminders:
$active = Auth::user()->reminders()
- ->where('notnow', 0)
- ->where('active', 1)
- ->where('startdate', '<=', $today->format('Y-m-d 00:00:00'))
- ->where('enddate', '>=', $today->format('Y-m-d 00:00:00'))
- ->get();
+ ->where('notnow', 0)
+ ->where('active', 1)
+ ->where('startdate', '<=', $today->format('Y-m-d 00:00:00'))
+ ->where('enddate', '>=', $today->format('Y-m-d 00:00:00'))
+ ->get();
$active->each(
- function(Reminder $reminder) {
+ function (Reminder $reminder) {
$reminder->description = $this->helper->getReminderText($reminder);
}
);
@@ -58,11 +58,11 @@ class ReminderRepository implements ReminderRepositoryInterface
public function getDismissedReminders()
{
$dismissed = Auth::user()->reminders()
- ->where('notnow', 1)
- ->get();
+ ->where('notnow', 1)
+ ->get();
$dismissed->each(
- function(Reminder $reminder) {
+ function (Reminder $reminder) {
$reminder->description = $this->helper->getReminderText($reminder);
}
);
@@ -77,18 +77,18 @@ class ReminderRepository implements ReminderRepositoryInterface
{
$expired = Auth::user()->reminders()
- ->where('notnow', 0)
- ->where('active', 1)
- ->where(
- function (Builder $q) {
- $today = new Carbon;
- $q->where('startdate', '>', $today->format('Y-m-d 00:00:00'));
- $q->orWhere('enddate', '<', $today->format('Y-m-d 00:00:00'));
- }
- )->get();
+ ->where('notnow', 0)
+ ->where('active', 1)
+ ->where(
+ function (Builder $q) {
+ $today = new Carbon;
+ $q->where('startdate', '>', $today->format('Y-m-d 00:00:00'));
+ $q->orWhere('enddate', '<', $today->format('Y-m-d 00:00:00'));
+ }
+ )->get();
$expired->each(
- function(Reminder $reminder) {
+ function (Reminder $reminder) {
$reminder->description = $this->helper->getReminderText($reminder);
}
);
@@ -106,7 +106,7 @@ class ReminderRepository implements ReminderRepositoryInterface
->get();
$inactive->each(
- function(Reminder $reminder) {
+ function (Reminder $reminder) {
$reminder->description = $this->helper->getReminderText($reminder);
}
);
diff --git a/app/Repositories/Shared/ComponentRepository.php b/app/Repositories/Shared/ComponentRepository.php
new file mode 100644
index 0000000000..e4187f9e58
--- /dev/null
+++ b/app/Repositories/Shared/ComponentRepository.php
@@ -0,0 +1,74 @@
+addProperty($object->id);
+ $cache->addProperty(get_class($object));
+ $cache->addProperty($start);
+ $cache->addProperty($end);
+ $cache->addProperty($shared);
+ $cache->addProperty('spentInPeriod');
+
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
+
+ if ($shared === true) {
+ // shared is true.
+ // always ignore transfers between accounts!
+ $sum
+ = $object->transactionjournals()
+ ->transactionTypes(['Withdrawal'])
+ ->before($end)->after($start)->get(['transaction_journals.*'])->sum('amount');
+
+ } else {
+ // do something else, SEE budgets.
+ // get all journals in this month where the asset account is NOT shared.
+ $sum = $object->transactionjournals()
+ ->before($end)
+ ->after($start)
+ ->transactionTypes(['Withdrawal'])
+ ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
+ ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
+ ->leftJoin(
+ 'account_meta', function (JoinClause $join) {
+ $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
+ }
+ )
+ ->where('account_meta.data', '!=', '"sharedAsset"')
+ ->get(['transaction_journals.*'])->sum('amount');
+ }
+
+ $cache->store($sum);
+
+ return $sum;
+ }
+}
diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php
index 358eeac892..935c2967fa 100644
--- a/app/Repositories/Tag/TagRepository.php
+++ b/app/Repositories/Tag/TagRepository.php
@@ -64,14 +64,15 @@ class TagRepository implements TagRepositoryInterface
* @param Carbon $start
* @param Carbon $end
*
- * @return integer
+ * @return string
*/
public function coveredByBalancingActs(Account $account, Carbon $start, Carbon $end)
{
// the quickest way to do this is by scanning all balancingAct tags
// because there will be less of them any way.
$tags = Auth::user()->tags()->where('tagMode', 'balancingAct')->get();
- $amount = 0;
+ $amount = '0';
+ bcscale(2);
/** @var Tag $tag */
foreach ($tags as $tag) {
@@ -80,7 +81,7 @@ class TagRepository implements TagRepositoryInterface
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
if ($journal->destination_account->id == $account->id) {
- $amount += $journal->amount;
+ $amount = bcadd($amount, $journal->amount);
}
}
}
@@ -109,7 +110,7 @@ class TagRepository implements TagRepositoryInterface
/** @var Collection $tags */
$tags = Auth::user()->tags()->get();
$tags->sortBy(
- function(Tag $tag) {
+ function (Tag $tag) {
return $tag->tag;
}
);
@@ -198,16 +199,11 @@ class TagRepository implements TagRepositoryInterface
/*
* If any transaction is a deposit, cannot become a balancing act.
*/
- $count = 0;
foreach ($tag->transactionjournals as $journal) {
if ($journal->transactionType->type == 'Deposit') {
- $count++;
+ return false;
}
}
- if ($count > 0) {
- return false;
- }
-
return true;
}
@@ -308,7 +304,8 @@ class TagRepository implements TagRepositoryInterface
return $this->matchAll($journal, $tag);
}
- return false;
+ // this statement is unreachable.
+ return false; // @codeCoverageIgnore
}
@@ -323,7 +320,7 @@ class TagRepository implements TagRepositoryInterface
$match = true;
/** @var TransactionJournal $check */
foreach ($tag->transactionjournals as $check) {
- if ($check->asset_account->id != $journal->asset_account->id) {
+ if ($check->source_account->id != $journal->source_account->id) {
$match = false;
}
}
diff --git a/app/Repositories/Tag/TagRepositoryInterface.php b/app/Repositories/Tag/TagRepositoryInterface.php
index 463e0979d2..7d76fa30e8 100644
--- a/app/Repositories/Tag/TagRepositoryInterface.php
+++ b/app/Repositories/Tag/TagRepositoryInterface.php
@@ -38,7 +38,7 @@ interface TagRepositoryInterface
* @param Carbon $start
* @param Carbon $end
*
- * @return float
+ * @return string
*/
public function coveredByBalancingActs(Account $account, Carbon $start, Carbon $end);
diff --git a/app/Services/Registrar.php b/app/Services/Registrar.php
index 6f9ffa729a..5f69c7ba24 100644
--- a/app/Services/Registrar.php
+++ b/app/Services/Registrar.php
@@ -41,9 +41,9 @@ class Registrar implements RegistrarContract
{
return Validator::make(
$data, [
- 'email' => 'required|email|max:255|unique:users',
- 'password' => 'required|confirmed|min:6',
- ]
+ 'email' => 'required|email|max:255|unique:users',
+ 'password' => 'required|confirmed|min:6',
+ ]
);
}
diff --git a/app/Support/Amount.php b/app/Support/Amount.php
index 8a1916e9ca..c823d7736a 100644
--- a/app/Support/Amount.php
+++ b/app/Support/Amount.php
@@ -35,15 +35,8 @@ class Amount
*/
public function getCurrencySymbol()
{
- if (defined('FFCURRENCYSYMBOL')) {
- return FFCURRENCYSYMBOL;
- }
-
$currencyPreference = Prefs::get('currencyPreference', 'EUR');
$currency = TransactionCurrency::whereCode($currencyPreference->data)->first();
-
- define('FFCURRENCYSYMBOL', $currency->symbol);
-
return $currency->symbol;
}
@@ -84,6 +77,15 @@ class Amount
*/
public function formatJournal(TransactionJournal $journal, $coloured = true)
{
+ $cache = new CacheProperties;
+ $cache->addProperty($journal->id);
+ $cache->addProperty('formatJournal');
+
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
+
if (is_null($journal->symbol)) {
$symbol = $journal->transactionCurrency->symbol;
} else {
@@ -94,13 +96,22 @@ class Amount
$amount = $amount * -1;
}
if ($journal->transactionType->type == 'Transfer' && $coloured) {
- return '' . $this->formatWithSymbol($symbol, $amount, false) . '';
+ $txt = '' . $this->formatWithSymbol($symbol, $amount, false) . '';
+ $cache->store($txt);
+
+ return $txt;
}
if ($journal->transactionType->type == 'Transfer' && !$coloured) {
- return $this->formatWithSymbol($symbol, $amount, false);
+ $txt = $this->formatWithSymbol($symbol, $amount, false);
+ $cache->store($txt);
+
+ return $txt;
}
- return $this->formatWithSymbol($symbol, $amount, $coloured);
+ $txt = $this->formatWithSymbol($symbol, $amount, $coloured);
+ $cache->store($txt);
+
+ return $txt;
}
/**
@@ -130,22 +141,16 @@ class Amount
*/
public function getCurrencyCode()
{
- if (defined('FFCURRENCYCODE')) {
- return FFCURRENCYCODE;
- }
-
$currencyPreference = Prefs::get('currencyPreference', 'EUR');
$currency = TransactionCurrency::whereCode($currencyPreference->data)->first();
if ($currency) {
- define('FFCURRENCYCODE', $currency->code);
-
return $currency->code;
}
- return 'EUR';
+ return 'EUR'; // @codeCoverageIgnore
}
/**
diff --git a/app/Support/CacheProperties.php b/app/Support/CacheProperties.php
new file mode 100644
index 0000000000..ba2d654b3d
--- /dev/null
+++ b/app/Support/CacheProperties.php
@@ -0,0 +1,106 @@
+properties = new Collection;
+ $this->addProperty(Auth::user()->id);
+ $this->addProperty(Prefs::lastActivity());
+ }
+
+ /**
+ * @param $property
+ */
+ public function addProperty($property)
+ {
+ $this->properties->push($property);
+ }
+
+ /**
+ * @return mixed
+ */
+ public function get()
+ {
+ return Cache::get($this->md5);
+ }
+
+ /**
+ * @return string
+ */
+ public function getMd5()
+ {
+ return $this->md5;
+ }
+
+ /**
+ * @return bool
+ */
+ public function has()
+ {
+ if (getenv('APP_ENV') == 'testing') {
+ return false;
+ }
+ $this->md5();
+
+ return Cache::has($this->md5);
+ }
+
+ /**
+ * @return void
+ */
+ private function md5()
+ {
+ foreach ($this->properties as $property) {
+
+ if ($property instanceof Collection || $property instanceof EloquentCollection) {
+ $this->md5 .= json_encode($property->toArray());
+ continue;
+ }
+ if ($property instanceof Carbon) {
+ $this->md5 .= $property->toRfc3339String();
+ continue;
+ }
+ if (is_object($property)) {
+ $this->md5 .= $property->__toString();
+ }
+
+ $this->md5 .= json_encode($property);
+ }
+
+ $this->md5 = md5($this->md5);
+ }
+
+ /**
+ * @param $data
+ */
+ public function store($data)
+ {
+ Cache::forever($this->md5, $data);
+ }
+}
diff --git a/app/Support/ExpandedForm.php b/app/Support/ExpandedForm.php
index bac40078a4..1e65ebf1aa 100644
--- a/app/Support/ExpandedForm.php
+++ b/app/Support/ExpandedForm.php
@@ -7,6 +7,7 @@ use Eloquent;
use Illuminate\Support\Collection;
use Illuminate\Support\MessageBag;
use Input;
+use RuntimeException;
use Session;
use View;
@@ -109,10 +110,17 @@ class ExpandedForm
$preFilled = Session::get('preFilled');
$value = isset($preFilled[$name]) && is_null($value) ? $preFilled[$name] : $value;
}
- if (!is_null(Input::old($name))) {
- $value = Input::old($name);
+ // @codeCoverageIgnoreStart
+ try {
+ if (!is_null(Input::old($name))) {
+ $value = Input::old($name);
+ }
+ } catch (RuntimeException $e) {
+ // don't care about session errors.
}
+ // @codeCoverageIgnoreEnd
+
return $value;
}
@@ -249,24 +257,6 @@ class ExpandedForm
return $selectList;
}
- /**
- * @param $name
- * @param null $value
- * @param array $options
- *
- * @return string
- */
- public function month($name, $value = null, array $options = [])
- {
- $label = $this->label($name, $options);
- $options = $this->expandOptionArray($name, $label, $options);
- $classes = $this->getHolderClasses($name);
- $value = $this->fillFieldValue($name, $value);
- $html = View::make('form.month', compact('classes', 'name', 'label', 'value', 'options'))->render();
-
- return $html;
- }
-
/**
* @param $name
* @param array $list
@@ -274,7 +264,6 @@ class ExpandedForm
* @param array $options
*
* @return string
- * @internal param null $value
*/
public function multiRadio($name, array $list = [], $selected = null, array $options = [])
{
@@ -297,7 +286,16 @@ class ExpandedForm
*/
public function optionsList($type, $name)
{
- $previousValue = Input::old('post_submit_action');
+ $previousValue = null;
+
+ // @codeCoverageIgnoreStart
+ try {
+ $previousValue = Input::old('post_submit_action');
+ } catch (RuntimeException $e) {
+ // don't care
+ }
+ // @codeCoverageIgnoreEnd
+
$previousValue = is_null($previousValue) ? 'store' : $previousValue;
$html = View::make('form.options', compact('type', 'name', 'previousValue'))->render();
diff --git a/app/Support/Navigation.php b/app/Support/Navigation.php
index f2dd884673..2c3f564a61 100644
--- a/app/Support/Navigation.php
+++ b/app/Support/Navigation.php
@@ -41,6 +41,7 @@ class Navigation
'6M' => 6,
'half-year' => 6,
];
+
if (!isset($functionMap[$repeatFreq])) {
throw new FireflyException('Cannot do addPeriod for $repeat_freq "' . $repeatFreq . '"');
}
@@ -118,7 +119,7 @@ class Navigation
'year' => 'endOfYear',
'yearly' => 'endOfYear',
];
- $specials = ['mont', 'monthly'];
+ $specials = ['mont', 'monthly'];
$currentEnd = clone $theCurrentEnd;
@@ -270,7 +271,7 @@ class Navigation
'3M' => 'lastOfQuarter',
'1Y' => 'endOfYear',
];
- $end = clone $start;
+ $end = clone $start;
if (isset($functionMap[$range])) {
$function = $functionMap[$range];
diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php
index 3d53d9c16a..e705f9cb55 100644
--- a/app/Support/Preferences.php
+++ b/app/Support/Preferences.php
@@ -3,6 +3,7 @@
namespace FireflyIII\Support;
use Auth;
+use Cache;
use FireflyIII\Models\Preference;
/**
@@ -13,20 +14,34 @@ use FireflyIII\Models\Preference;
class Preferences
{
/**
- * @param $name
- * @param null $default
+ * @return string
+ */
+ public function lastActivity()
+ {
+ $preference = $this->get('lastActivity', microtime())->data;
+
+ return md5($preference);
+ }
+
+ /**
+ * @param string $name
+ * @param string $default
*
* @return null|\FireflyIII\Models\Preference
*/
public function get($name, $default = null)
{
- $preferences = Preference::where('user_id', Auth::user()->id)->get();
+ $fullName = 'preference' . Auth::user()->id . $name;
+ if (Cache::has($fullName)) {
+ return Cache::get($fullName);
+ }
- /** @var Preference $preference */
- foreach ($preferences as $preference) {
- if ($preference->name == $name) {
- return $preference;
- }
+ $preference = Preference::where('user_id', Auth::user()->id)->where('name', $name)->first(['id', 'name', 'data_encrypted']);
+
+ if ($preference) {
+ Cache::forever($fullName, $preference);
+
+ return $preference;
}
// no preference found and default is null:
if (is_null($default)) {
@@ -39,33 +54,40 @@ class Preferences
}
/**
- * @param $name
- * @param $value
+ * @param $name
+ * @param string $value
*
* @return Preference
*/
public function set($name, $value)
{
- $preferences = Preference::where('user_id', Auth::user()->id)->get();
- /** @var Preference $preference */
- foreach ($preferences as $preference) {
- if ($preference->name == $name) {
- $preference->data = $value;
- $preference->save();
-
- return $preference;
- }
- }
- $pref = new Preference;
- $pref->name = $name;
- $pref->data = $value;
-
- if (!is_null(Auth::user()->id)) {
+ $fullName = 'preference' . Auth::user()->id . $name;
+ Cache::forget($fullName);
+ $pref = Preference::where('user_id', Auth::user()->id)->where('name', $name)->first(['id', 'name', 'data_encrypted']);
+ if ($pref) {
+ $pref->data = $value;
+ } else {
+ $pref = new Preference;
+ $pref->name = $name;
+ $pref->data = $value;
$pref->user()->associate(Auth::user());
- $pref->save();
+
}
+ $pref->save();
+
+ Cache::forever($fullName, $pref);
return $pref;
}
+
+ /**
+ * @return bool
+ */
+ public function mark()
+ {
+ $this->set('lastActivity', microtime());
+
+ return true;
+ }
}
diff --git a/app/Support/Search/Search.php b/app/Support/Search/Search.php
index 7b1e0f42b5..a493ad0741 100644
--- a/app/Support/Search/Search.php
+++ b/app/Support/Search/Search.php
@@ -25,7 +25,7 @@ class Search implements SearchInterface
public function searchAccounts(array $words)
{
return Auth::user()->accounts()->with('accounttype')->where(
- function(EloquentBuilder $q) use ($words) {
+ function (EloquentBuilder $q) use ($words) {
foreach ($words as $word) {
$q->orWhere('name', 'LIKE', '%' . e($word) . '%');
}
@@ -43,7 +43,7 @@ class Search implements SearchInterface
/** @var Collection $set */
$set = Auth::user()->budgets()->get();
$newSet = $set->filter(
- function(Budget $b) use ($words) {
+ function (Budget $b) use ($words) {
$found = 0;
foreach ($words as $word) {
if (!(strpos(strtolower($b->name), strtolower($word)) === false)) {
@@ -68,7 +68,7 @@ class Search implements SearchInterface
/** @var Collection $set */
$set = Auth::user()->categories()->get();
$newSet = $set->filter(
- function(Category $c) use ($words) {
+ function (Category $c) use ($words) {
$found = 0;
foreach ($words as $word) {
if (!(strpos(strtolower($c->name), strtolower($word)) === false)) {
@@ -103,7 +103,7 @@ class Search implements SearchInterface
{
// decrypted transaction journals:
$decrypted = Auth::user()->transactionjournals()->withRelevantData()->where('encrypted', 0)->where(
- function(EloquentBuilder $q) use ($words) {
+ function (EloquentBuilder $q) use ($words) {
foreach ($words as $word) {
$q->orWhere('description', 'LIKE', '%' . e($word) . '%');
}
@@ -113,7 +113,7 @@ class Search implements SearchInterface
// encrypted
$all = Auth::user()->transactionjournals()->withRelevantData()->where('encrypted', 1)->get();
$set = $all->filter(
- function(TransactionJournal $journal) use ($words) {
+ function (TransactionJournal $journal) use ($words) {
foreach ($words as $word) {
$haystack = strtolower($journal->description);
$word = strtolower($word);
@@ -129,7 +129,7 @@ class Search implements SearchInterface
$filtered = $set->merge($decrypted);
$filtered->sortBy(
- function(TransactionJournal $journal) {
+ function (TransactionJournal $journal) {
return intval($journal->date->format('U'));
}
);
diff --git a/app/Support/Steam.php b/app/Support/Steam.php
index a04e3ee002..627faba6d9 100644
--- a/app/Support/Steam.php
+++ b/app/Support/Steam.php
@@ -4,8 +4,6 @@ namespace FireflyIII\Support;
use Carbon\Carbon;
use FireflyIII\Models\Account;
-use FireflyIII\Models\PiggyBank;
-use FireflyIII\Models\PiggyBankRepetition;
/**
* Class Steam
@@ -24,6 +22,18 @@ class Steam
*/
public function balance(Account $account, Carbon $date, $ignoreVirtualBalance = false)
{
+
+ // abuse chart properties:
+ $cache = new CacheProperties;
+ $cache->addProperty($account->id);
+ $cache->addProperty('balance');
+ $cache->addProperty($date);
+ $cache->addProperty($ignoreVirtualBalance);
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
+
// find the first known transaction on this account:
$firstDateObject = $account
->transactions()
@@ -45,6 +55,7 @@ class Steam
if (!$ignoreVirtualBalance) {
$balance = bcadd($balance, $account->virtual_balance);
}
+ $cache->store(round($balance, 2));
return round($balance, 2);
}
diff --git a/app/Support/Twig/Budget.php b/app/Support/Twig/Budget.php
index 2424f8b0c8..278f6b0448 100644
--- a/app/Support/Twig/Budget.php
+++ b/app/Support/Twig/Budget.php
@@ -4,6 +4,7 @@ namespace FireflyIII\Support\Twig;
use Auth;
use FireflyIII\Models\LimitRepetition;
+use FireflyIII\Support\CacheProperties;
use Twig_Extension;
use Twig_SimpleFunction;
@@ -19,20 +20,27 @@ class Budget extends Twig_Extension
*/
public function getFunctions()
{
- $functions = [];
+ $functions = [];
$functions[] = new Twig_SimpleFunction(
- 'spentInRepetitionCorrected', function(LimitRepetition $repetition) {
+ 'spentInRepetitionCorrected', function (LimitRepetition $repetition) {
+ $cache = new CacheProperties;
+ $cache->addProperty($repetition->id);
+ $cache->addProperty('spentInRepetitionCorrected');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
$sum
= Auth::user()->transactionjournals()
- ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
- ->leftJoin('budget_limits', 'budget_limits.budget_id', '=', 'budget_transaction_journal.budget_id')
- ->leftJoin('limit_repetitions', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')
- ->before($repetition->enddate)
- ->after($repetition->startdate)
- ->where('limit_repetitions.id', '=', $repetition->id)
- ->get(['transaction_journals.*'])->sum('amount');
+ ->leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id')
+ ->leftJoin('budget_limits', 'budget_limits.budget_id', '=', 'budget_transaction_journal.budget_id')
+ ->leftJoin('limit_repetitions', 'limit_repetitions.budget_limit_id', '=', 'budget_limits.id')
+ ->before($repetition->enddate)
+ ->after($repetition->startdate)
+ ->where('limit_repetitions.id', '=', $repetition->id)
+ ->get(['transaction_journals.*'])->sum('amount');
+ $cache->store($sum);
- return floatval($sum);
+ return $sum;
}
);
diff --git a/app/Support/Twig/General.php b/app/Support/Twig/General.php
index 81ea504928..4f79622995 100644
--- a/app/Support/Twig/General.php
+++ b/app/Support/Twig/General.php
@@ -28,51 +28,15 @@ class General extends Twig_Extension
*/
public function getFilters()
{
- $filters = [];
+ return [
+ $this->formatAmount(),
+ $this->formatTransaction(),
+ $this->formatAmountPlain(),
+ $this->formatJournal(),
+ $this->balance(),
+ $this->getAccountRole()
+ ];
- $filters[] = new Twig_SimpleFilter(
- 'formatAmount', function($string) {
- return App::make('amount')->format($string);
- }, ['is_safe' => ['html']]
- );
-
- $filters[] = new Twig_SimpleFilter(
- 'formatTransaction', function(Transaction $transaction) {
- return App::make('amount')->formatTransaction($transaction);
- }, ['is_safe' => ['html']]
- );
-
- $filters[] = new Twig_SimpleFilter(
- 'formatAmountPlain', function($string) {
- return App::make('amount')->format($string, false);
- }, ['is_safe' => ['html']]
- );
-
- $filters[] = new Twig_SimpleFilter(
- 'formatJournal', function($journal) {
- return App::make('amount')->formatJournal($journal);
- }, ['is_safe' => ['html']]
- );
-
- $filters[] = new Twig_SimpleFilter(
- 'balance', function(Account $account = null) {
- if (is_null($account)) {
- return 'NULL';
- }
- $date = Session::get('end', Carbon::now()->endOfMonth());
-
- return App::make('steam')->balance($account, $date);
- }
- );
-
- // should be a function but OK
- $filters[] = new Twig_SimpleFilter(
- 'getAccountRole', function($name) {
- return Config::get('firefly.accountRoles.' . $name);
- }
- );
-
- return $filters;
}
/**
@@ -80,62 +44,16 @@ class General extends Twig_Extension
*/
public function getFunctions()
{
- $functions = [];
-
- $functions[] = new Twig_SimpleFunction(
- 'getCurrencyCode', function() {
- return App::make('amount')->getCurrencyCode();
- }
- );
-
- $functions[] = new Twig_SimpleFunction(
- 'getCurrencySymbol', function() {
- return App::make('amount')->getCurrencySymbol();
- }
- );
-
- $functions[] = new Twig_SimpleFunction(
- 'phpdate', function($str) {
- return date($str);
- }
- );
-
-
- $functions[] = new Twig_SimpleFunction(
- 'env', function($name, $default) {
- return env($name, $default);
- }
- );
-
- $functions[] = new Twig_SimpleFunction(
- 'activeRoute', function($context) {
- $args = func_get_args();
- $route = $args[1];
- $what = isset($args[2]) ? $args[2] : false;
- $strict = isset($args[3]) ? $args[3] : false;
- $activeWhat = isset($context['what']) ? $context['what'] : false;
-
- // activeRoute
- if (!($what === false)) {
- if ($what == $activeWhat && Route::getCurrentRoute()->getName() == $route) {
- return 'active because-active-what';
- }
- } else {
- if (!$strict && !(strpos(Route::getCurrentRoute()->getName(), $route) === false)) {
- return 'active because-route-matches-non-strict';
- } else {
- if ($strict && Route::getCurrentRoute()->getName() == $route) {
- return 'active because-route-matches-strict';
- }
- }
- }
-
- return 'not-xxx-at-all';
- }, ['needs_context' => true]
- );
-
- return $functions;
+ return [
+ $this->getCurrencyCode(),
+ $this->getCurrencySymbol(),
+ $this->phpdate(),
+ $this->env(),
+ $this->activeRouteStrict(),
+ $this->activeRoutePartial(),
+ $this->activeRoutePartialWhat(),
+ ];
}
@@ -147,4 +65,196 @@ class General extends Twig_Extension
return 'FireflyIII\Support\Twig\General';
}
+ /**
+ * @return Twig_SimpleFilter
+ */
+ protected function formatAmount()
+ {
+ return new Twig_SimpleFilter(
+ 'formatAmount', function ($string) {
+ return App::make('amount')->format($string);
+ }, ['is_safe' => ['html']]
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFilter
+ */
+ protected function formatTransaction()
+ {
+ return new Twig_SimpleFilter(
+ 'formatTransaction', function (Transaction $transaction) {
+ return App::make('amount')->formatTransaction($transaction);
+ }, ['is_safe' => ['html']]
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFilter
+ */
+ protected function formatAmountPlain()
+ {
+ return new Twig_SimpleFilter(
+ 'formatAmountPlain', function ($string) {
+ return App::make('amount')->format($string, false);
+ }, ['is_safe' => ['html']]
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFilter
+ */
+ protected function formatJournal()
+ {
+ return new Twig_SimpleFilter(
+ 'formatJournal', function ($journal) {
+ return App::make('amount')->formatJournal($journal);
+ }, ['is_safe' => ['html']]
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFilter
+ */
+ protected function balance()
+ {
+ return new Twig_SimpleFilter(
+ 'balance', function (Account $account = null) {
+ if (is_null($account)) {
+ return 'NULL';
+ }
+ $date = Session::get('end', Carbon::now()->endOfMonth());
+
+ return App::make('steam')->balance($account, $date);
+ }
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFilter
+ */
+ protected function getAccountRole()
+ {
+ return new Twig_SimpleFilter(
+ 'getAccountRole', function ($name) {
+ return Config::get('firefly.accountRoles.' . $name);
+ }
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFunction
+ */
+ protected function getCurrencyCode()
+ {
+ return new Twig_SimpleFunction(
+ 'getCurrencyCode', function () {
+ return App::make('amount')->getCurrencyCode();
+ }
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFunction
+ */
+ protected function getCurrencySymbol()
+ {
+ return new Twig_SimpleFunction(
+ 'getCurrencySymbol', function () {
+ return App::make('amount')->getCurrencySymbol();
+ }
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFunction
+ */
+ protected function phpdate()
+ {
+ return new Twig_SimpleFunction(
+ 'phpdate', function ($str) {
+ return date($str);
+ }
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFunction
+ */
+ protected function env()
+ {
+ return new Twig_SimpleFunction(
+ 'env', function ($name, $default) {
+ return env($name, $default);
+ }
+ );
+ }
+
+ /**
+ * Will return "active" when the current route matches the given argument
+ * exactly.
+ *
+ * @return Twig_SimpleFunction
+ */
+ protected function activeRouteStrict()
+ {
+ return new Twig_SimpleFunction(
+ 'activeRouteStrict', function () {
+ $args = func_get_args();
+ $route = $args[0]; // name of the route.
+
+ if (Route::getCurrentRoute()->getName() == $route) {
+ return 'active because-route-matches-strict';
+ }
+
+ return 'not-xxx-at-all';
+ }
+ );
+ }
+
+ /**
+ * Will return "active" when a part of the route matches the argument.
+ * ie. "accounts" will match "accounts.index".
+ *
+ * @return Twig_SimpleFunction
+ */
+ protected function activeRoutePartial()
+ {
+ return new Twig_SimpleFunction(
+ 'activeRoutePartial', function () {
+ $args = func_get_args();
+ $route = $args[0]; // name of the route.
+ if (!(strpos(Route::getCurrentRoute()->getName(), $route) === false)) {
+ return 'active because-route-matches-non-strict';
+ }
+
+ return 'not-xxx-at-all';
+ }
+ );
+ }
+
+ /**
+ * This function will return "active" when the current route matches the first argument (even partly)
+ * but, the variable $what has been set and matches the second argument.
+ *
+ * @return Twig_SimpleFunction
+ */
+ protected function activeRoutePartialWhat()
+ {
+ return new Twig_SimpleFunction(
+ 'activeRoutePartialWhat', function ($context) {
+ $args = func_get_args();
+ $route = $args[1]; // name of the route.
+ $what = $args[2]; // name of the route.
+ $activeWhat = isset($context['what']) ? $context['what'] : false;
+
+ if ($what == $activeWhat && !(strpos(Route::getCurrentRoute()->getName(), $route) === false)) {
+ return 'active because-route-matches-non-strict-what';
+ }
+
+ return 'not-xxx-at-all';
+ }, ['needs_context' => true]
+ );
+ }
+
}
diff --git a/app/Support/Twig/Journal.php b/app/Support/Twig/Journal.php
index beaafae668..f1e327e6be 100644
--- a/app/Support/Twig/Journal.php
+++ b/app/Support/Twig/Journal.php
@@ -4,7 +4,9 @@ namespace FireflyIII\Support\Twig;
use App;
+use FireflyIII\Models\Tag;
use FireflyIII\Models\TransactionJournal;
+use FireflyIII\Support\CacheProperties;
use Twig_Extension;
use Twig_SimpleFilter;
use Twig_SimpleFunction;
@@ -18,103 +20,24 @@ class Journal extends Twig_Extension
{
/**
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @return array
*/
public function getFilters()
{
- $filters = [];
-
- $filters[] = new Twig_SimpleFilter(
- 'typeIcon', function(TransactionJournal $journal) {
- $type = $journal->transactionType->type;
-
- switch ($type) {
- case 'Withdrawal':
- return '';
- case 'Deposit':
- return '';
- case 'Transfer':
- return '';
- case 'Opening balance':
- return '';
- default:
- return '';
- }
-
-
- }, ['is_safe' => ['html']]
- );
+ $filters = [$this->typeIcon()];
return $filters;
}
/**
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- *
* @return array
*/
public function getFunctions()
{
- $functions = [];
-
- $functions[] = new Twig_SimpleFunction(
- 'invalidJournal', function(TransactionJournal $journal) {
- if (!isset($journal->transactions[1]) || !isset($journal->transactions[0])) {
- return true;
- }
-
- return false;
- }
- );
-
- $functions[] = new Twig_SimpleFunction(
- 'relevantTags', function(TransactionJournal $journal) {
- if ($journal->tags->count() == 0) {
- return App::make('amount')->formatJournal($journal);
- }
-
-
- foreach ($journal->tags as $tag) {
- if ($tag->tagMode == 'balancingAct') {
- // return tag formatted for a "balancing act", even if other
- // tags are present.
- $amount = App::make('amount')->format($journal->actual_amount, false);
-
- return ' ' . $tag->tag . '';
- }
-
- /*
- * AdvancePayment with a deposit will show the tag instead of the amount:
- */
- if ($tag->tagMode == 'advancePayment' && $journal->transactionType->type == 'Deposit') {
- $amount = App::make('amount')->formatJournal($journal, false);
-
- return ' ' . $tag->tag . '';
- }
- /*
- * AdvancePayment with a withdrawal will show the amount with a link to
- * the tag. The TransactionJournal should properly calculate the amount.
- */
- if ($tag->tagMode == 'advancePayment' && $journal->transactionType->type == 'Withdrawal') {
- $amount = App::make('amount')->formatJournal($journal);
-
- return '' . $amount . '';
- }
-
-
- if ($tag->tagMode == 'nothing') {
- // return the amount:
- return App::make('amount')->formatJournal($journal);
- }
- }
-
-
- return 'TODO: ' . $journal->amount;
- }
- );
+ $functions = [
+ $this->invalidJournal(),
+ $this->relevantTags()
+ ];
return $functions;
}
@@ -128,4 +51,192 @@ class Journal extends Twig_Extension
{
return 'FireflyIII\Support\Twig\Journals';
}
+
+ /**
+ * @return Twig_SimpleFilter
+ */
+ protected function typeIcon()
+ {
+ return new Twig_SimpleFilter(
+ 'typeIcon', function (TransactionJournal $journal) {
+
+ $cache = new CacheProperties();
+ $cache->addProperty($journal->id);
+ $cache->addProperty('typeIcon');
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+
+ $type = $journal->transactionType->type;
+
+ switch ($type) {
+ case 'Withdrawal':
+ $txt = '';
+ break;
+ case 'Deposit':
+ $txt = '';
+ break;
+ case 'Transfer':
+ $txt = '';
+ break;
+ case 'Opening balance':
+ $txt = '';
+ break;
+ default:
+ $txt = '';
+ break;
+ }
+ $cache->store($txt);
+
+ return $txt;
+
+
+ }, ['is_safe' => ['html']]
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFunction
+ */
+ protected function invalidJournal()
+ {
+ return new Twig_SimpleFunction(
+ 'invalidJournal', function (TransactionJournal $journal) {
+ if (!isset($journal->transactions[1]) || !isset($journal->transactions[0])) {
+ return true;
+ }
+
+ return false;
+ }
+ );
+ }
+
+ /**
+ * @return Twig_SimpleFunction
+ */
+ protected function relevantTags()
+ {
+ return new Twig_SimpleFunction(
+ 'relevantTags', function (TransactionJournal $journal) {
+ $cache = new CacheProperties;
+ $cache->addProperty('relevantTags');
+ $cache->addProperty($journal->id);
+
+ if ($cache->has()) {
+ return $cache->get(); // @codeCoverageIgnore
+ }
+ $count = $journal->tags->count();
+ $string = '';
+
+ if ($count === 0) {
+ $string = $this->relevantTagsNoTags($journal);
+ }
+
+ if ($count === 1) {
+ $string = $this->relevantTagsSingle($journal);
+ }
+
+ if ($count > 1) {
+ $string = $this->relevantTagsMulti($journal);
+ }
+
+ $cache->store($string);
+
+ return $string;
+ }
+ );
+ }
+
+ /**
+ * @param TransactionJournal $journal
+ *
+ * @return string
+ */
+ protected function relevantTagsNoTags(TransactionJournal $journal)
+ {
+ return App::make('amount')->formatJournal($journal);
+ }
+
+ /**
+ * @param TransactionJournal $journal
+ *
+ * @return string
+ */
+ protected function relevantTagsSingle(TransactionJournal $journal)
+ {
+ $tag = $journal->tags()->first();
+
+ return $this->formatJournalByTag($journal, $tag);
+ }
+
+ /**
+ * @param TransactionJournal $journal
+ * @param Tag $tag
+ *
+ * @return string
+ */
+ protected function formatJournalByTag(TransactionJournal $journal, Tag $tag)
+ {
+ if ($tag->tagMode == 'balancingAct') {
+ // return tag formatted for a "balancing act", even if other
+ // tags are present.
+ $amount = App::make('amount')->format($journal->actual_amount, false);
+ $string = ' ' . $tag->tag . '';
+
+ return $string;
+ }
+
+ if ($tag->tagMode == 'advancePayment') {
+ if ($journal->transactionType->type == 'Deposit') {
+ $amount = App::make('amount')->formatJournal($journal, false);
+ $string = ' ' . $tag->tag . '';
+
+ return $string;
+ }
+
+ /*
+ * AdvancePayment with a withdrawal will show the amount with a link to
+ * the tag. The TransactionJournal should properly calculate the amount.
+ */
+ if ($journal->transactionType->type == 'Withdrawal') {
+ $amount = App::make('amount')->formatJournal($journal);
+
+ $string = '' . $amount . '';
+
+ return $string;
+ }
+ }
+
+
+ return $this->relevantTagsNoTags($journal);
+ }
+
+ /**
+ * If a transaction journal has multiple tags, we'll have to gamble. FF3
+ * does not yet block adding multiple 'special' tags so we must wing it.
+ *
+ * We grab the first special tag (for advancePayment and for balancingAct
+ * and try to format those. If they're not present (it's all normal tags),
+ * we can format like any other journal.
+ *
+ * @param TransactionJournal $journal
+ *
+ * @return string
+ */
+ protected function relevantTagsMulti(TransactionJournal $journal)
+ {
+ $firstBalancingAct = $journal->tags()->where('tagMode', 'balancingAct')->first();
+ if ($firstBalancingAct) {
+ return $this->formatJournalByTag($journal, $firstBalancingAct);
+ }
+
+ $firstAdvancePayment = $journal->tags()->where('tagMode', 'advancePayment')->first();
+ if ($firstAdvancePayment) {
+ return $this->formatJournalByTag($journal, $firstAdvancePayment);
+ }
+
+ return $this->relevantTagsNoTags($journal);
+ }
}
diff --git a/app/Support/Twig/PiggyBank.php b/app/Support/Twig/PiggyBank.php
index f178aa6316..6ff4aafe90 100644
--- a/app/Support/Twig/PiggyBank.php
+++ b/app/Support/Twig/PiggyBank.php
@@ -22,7 +22,7 @@ class PiggyBank extends Twig_Extension
$functions = [];
$functions[] = new Twig_SimpleFunction(
- 'currentRelevantRepAmount', function(PB $piggyBank) {
+ 'currentRelevantRepAmount', function (PB $piggyBank) {
return $piggyBank->currentRelevantRep()->currentamount;
}
);
diff --git a/app/Support/Twig/Translation.php b/app/Support/Twig/Translation.php
index d91c1816e6..1cb3314cf2 100644
--- a/app/Support/Twig/Translation.php
+++ b/app/Support/Twig/Translation.php
@@ -21,7 +21,7 @@ class Translation extends Twig_Extension
$filters = [];
$filters[] = new Twig_SimpleFilter(
- '_', function($name) {
+ '_', function ($name) {
return trans('firefly.' . $name);
diff --git a/app/User.php b/app/User.php
index 0207cc0fad..8264621ea1 100644
--- a/app/User.php
+++ b/app/User.php
@@ -11,20 +11,20 @@ use Zizaco\Entrust\Traits\EntrustUserTrait;
* Class User
*
* @package FireflyIII
- * @property integer $id
- * @property \Carbon\Carbon $created_at
- * @property \Carbon\Carbon $updated_at
- * @property string $email
- * @property string $password
- * @property string $reset
- * @property string $remember_token
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Account[] $accounts
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Tag[] $tags
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Bill[] $bills
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Budget[] $budgets
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Category[] $categories
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Preference[] $preferences
- * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Reminder[] $reminders
+ * @property integer $id
+ * @property \Carbon\Carbon $created_at
+ * @property \Carbon\Carbon $updated_at
+ * @property string $email
+ * @property string $password
+ * @property string $reset
+ * @property string $remember_token
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Account[] $accounts
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Tag[] $tags
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Bill[] $bills
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Budget[] $budgets
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Category[] $categories
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Preference[] $preferences
+ * @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\Reminder[] $reminders
* @property-read \Illuminate\Database\Eloquent\Collection|\FireflyIII\Models\TransactionJournal[] $transactionjournals
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereId($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereCreatedAt($value)
@@ -33,6 +33,7 @@ use Zizaco\Entrust\Traits\EntrustUserTrait;
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User wherePassword($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereReset($value)
* @method static \Illuminate\Database\Query\Builder|\FireflyIII\User whereRememberToken($value)
+ * @property-read \Illuminate\Database\Eloquent\Collection|\Config::get('entrust.role')[] $roles
*/
class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
diff --git a/app/Validation/FireflyValidator.php b/app/Validation/FireflyValidator.php
index 59de869bd8..120b757542 100644
--- a/app/Validation/FireflyValidator.php
+++ b/app/Validation/FireflyValidator.php
@@ -9,9 +9,9 @@ use Crypt;
use DB;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
+use FireflyIII\User;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Validation\Validator;
-use Log;
use Navigation;
use Symfony\Component\Translation\TranslatorInterface;
@@ -93,54 +93,99 @@ class FireflyValidator extends Validator
*/
public function validateUniqueAccountForUser($attribute, $value, $parameters)
{
- $type = null;
-
- /**
- * Switch on different cases on which this method can respond:
- */
- $hasWhat = isset($this->data['what']);
- $hasAccountTypeId = isset($this->data['account_type_id']) && isset($this->data['name']);
- $hasAccountId = isset($this->data['id']);
- $ignoreId = 0;
-
-
- if ($hasWhat) {
- $search = Config::get('firefly.accountTypeByIdentifier.' . $this->data['what']);
- $type = AccountType::whereType($search)->first();
- // this field can be used to find the exact type, and continue.
+ // because a user does not have to be logged in (tests and what-not).
+ if (!Auth::check()) {
+ return $this->validateAccountAnonymously();
}
- if ($hasAccountTypeId) {
- $type = AccountType::find($this->data['account_type_id']);
+ if (isset($this->data['what'])) {
+ return $this->validateByAccountTypeString($value, $parameters);
}
- if ($hasAccountId) {
- /** @var Account $account */
- $account = Account::find($this->data['id']);
- $ignoreId = intval($this->data['id']);
- $type = AccountType::find($account->account_type_id);
- unset($account);
+ if (isset($this->data['account_type_id'])) {
+ return $this->validateByAccountTypeId($value, $parameters);
}
- /**
- * Try to decrypt data just in case:
- */
- try {
- $value = Crypt::decrypt($value);
- } catch (DecryptException $e) {
- // if it fails, probably not encrypted.
- }
-
-
- if (is_null($type)) {
- Log::error('Could not determine type of account to validate.');
+ return false;
+ }
+ /**
+ * @return bool
+ */
+ protected function validateAccountAnonymously()
+ {
+ if (!isset($this->data['user_id'])) {
return false;
}
- // get all accounts with this type, and find the name.
- $userId = Auth::check() ? Auth::user()->id : 0;
- $set = Account::where('account_type_id', $type->id)->where('id', '!=', $ignoreId)->where('user_id', $userId)->get();
+ $user = User::find($this->data['user_id']);
+ $type = AccountType::find($this->data['account_type_id'])->first();
+ $value = $this->tryDecrypt($this->data['name']);
+
+
+ $set = $user->accounts()->where('account_type_id', $type->id)->get();
+ /** @var Account $entry */
+ foreach ($set as $entry) {
+ if ($entry->name == $value) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $value
+ *
+ * @return mixed
+ */
+ protected function tryDecrypt($value)
+ {
+ try {
+ $value = Crypt::decrypt($value);
+ } catch (DecryptException $e) {
+ // do not care.
+ }
+
+ return $value;
+ }
+
+ /**
+ * @param $value
+ * @param $parameters
+ *
+ * @return bool
+ */
+ protected function validateByAccountTypeString($value, $parameters)
+ {
+ $search = Config::get('firefly.accountTypeByIdentifier.' . $this->data['what']);
+ $type = AccountType::whereType($search)->first();
+ $ignore = isset($parameters[0]) ? intval($parameters[0]) : 0;
+
+ $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get();
+ /** @var Account $entry */
+ foreach ($set as $entry) {
+ if ($entry->name == $value) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @param $value
+ * @param $parameters
+ *
+ * @return bool
+ */
+ protected function validateByAccountTypeId($value, $parameters)
+ {
+ $type = AccountType::find($this->data['account_type_id'])->first();
+ $ignore = isset($parameters[0]) ? intval($parameters[0]) : 0;
+ $value = $this->tryDecrypt($value);
+
+ $set = Auth::user()->accounts()->where('account_type_id', $type->id)->where('id', '!=', $ignore)->get();
/** @var Account $entry */
foreach ($set as $entry) {
if ($entry->name == $value) {
@@ -180,8 +225,7 @@ class FireflyValidator extends Validator
*
* parameter 0: the table
* parameter 1: the field
- * parameter 2: the encrypted / not encrypted boolean. Defaults to "encrypted".
- * parameter 3: an id to ignore (when editing)
+ * parameter 2: an id to ignore (when editing)
*
* @param $attribute
* @param $value
@@ -191,37 +235,19 @@ class FireflyValidator extends Validator
*/
public function validateUniqueObjectForUser($attribute, $value, $parameters)
{
- $table = $parameters[0];
- $field = $parameters[1];
- $encrypted = isset($parameters[2]) ? $parameters[2] : 'encrypted';
- $exclude = isset($parameters[3]) ? $parameters[3] : null;
- $alwaysEncrypted = false;
- if ($encrypted == 'TRUE') {
- $alwaysEncrypted = true;
- }
+ $value = $this->tryDecrypt($value);
+ // exclude?
+ $table = $parameters[0];
+ $field = $parameters[1];
+ $exclude = isset($parameters[2]) ? intval($parameters[2]) : 0;
- if (is_null(Auth::user())) {
- // user is not logged in.. weird.
- return true;
- } else {
- $query = DB::table($table)->where('user_id', Auth::user()->id);
- }
+ // get entries from table
+ $set = DB::table($table)->where('user_id', Auth::user()->id)->where('id', '!=', $exclude)->get([$field]);
-
- if (!is_null($exclude)) {
- $query->where('id', '!=', $exclude);
- }
-
-
- $set = $query->get();
foreach ($set as $entry) {
- if (!$alwaysEncrypted) {
- $isEncrypted = intval($entry->$encrypted) == 1 ? true : false;
- } else {
- $isEncrypted = true;
- }
- $checkValue = $isEncrypted ? Crypt::decrypt($entry->$field) : $entry->$field;
- if ($checkValue == $value) {
+ $fieldValue = $this->tryDecrypt($entry->$field);
+
+ if ($fieldValue === $value) {
return false;
}
}
@@ -248,9 +274,8 @@ class FireflyValidator extends Validator
$set = $query->get(['piggy_banks.*']);
foreach ($set as $entry) {
- $isEncrypted = intval($entry->encrypted) == 1 ? true : false;
- $checkValue = $isEncrypted ? Crypt::decrypt($entry->name) : $entry->name;
- if ($checkValue == $value) {
+ $fieldValue = $this->tryDecrypt($entry->name);
+ if ($fieldValue == $value) {
return false;
}
}
diff --git a/composer.json b/composer.json
index 48d5895bfe..f123bbe2b4 100644
--- a/composer.json
+++ b/composer.json
@@ -28,7 +28,6 @@
"illuminate/html": "~5.0",
"league/commonmark": "0.7.*",
"rcrowe/twigbridge": "0.7.x@dev",
- "twig/extensions": "~1.2",
"zizaco/entrust": "dev-laravel-5"
},
"require-dev": {
diff --git a/composer.lock b/composer.lock
index 09cf164f3e..20b62cda5d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "a0c92aa0223617ca2730500921bdd82c",
+ "hash": "077d2b2548df62c8ef92871c6e52c856",
"packages": [
{
"name": "classpreloader/classpreloader",
@@ -943,16 +943,16 @@
},
{
"name": "laravel/framework",
- "version": "v5.0.31",
+ "version": "v5.0.32",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "db0a7400465df159ba8c6eaa954f97f50bc19687"
+ "reference": "85f12207cf45cc288e9e6b9b5d184aad5f08e2ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/db0a7400465df159ba8c6eaa954f97f50bc19687",
- "reference": "db0a7400465df159ba8c6eaa954f97f50bc19687",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/85f12207cf45cc288e9e6b9b5d184aad5f08e2ca",
+ "reference": "85f12207cf45cc288e9e6b9b5d184aad5f08e2ca",
"shasum": ""
},
"require": {
@@ -1065,7 +1065,7 @@
"framework",
"laravel"
],
- "time": "2015-05-11 22:15:00"
+ "time": "2015-05-29 18:56:49"
},
{
"name": "league/commonmark",
@@ -1645,17 +1645,17 @@
},
{
"name": "symfony/console",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/Console",
"source": {
"type": "git",
"url": "https://github.com/symfony/Console.git",
- "reference": "2343f6d8026306bd330e0c987e4c102483c213e7"
+ "reference": "b5ec0c11a204718f2b656357f5505a8e578f30dd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Console/zipball/2343f6d8026306bd330e0c987e4c102483c213e7",
- "reference": "2343f6d8026306bd330e0c987e4c102483c213e7",
+ "url": "https://api.github.com/repos/symfony/Console/zipball/b5ec0c11a204718f2b656357f5505a8e578f30dd",
+ "reference": "b5ec0c11a204718f2b656357f5505a8e578f30dd",
"shasum": ""
},
"require": {
@@ -1699,11 +1699,11 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2015-05-22 14:53:08"
+ "time": "2015-05-29 14:42:58"
},
{
"name": "symfony/debug",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/Debug",
"source": {
"type": "git",
@@ -1764,21 +1764,20 @@
},
{
"name": "symfony/event-dispatcher",
- "version": "v2.6.8",
- "target-dir": "Symfony/Component/EventDispatcher",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/EventDispatcher.git",
- "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02"
+ "reference": "687039686d0e923429ba6e958d0baa920cd5d458"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/672593bc4b0043a0acf91903bb75a1c82d8f2e02",
- "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02",
+ "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/687039686d0e923429ba6e958d0baa920cd5d458",
+ "reference": "687039686d0e923429ba6e958d0baa920cd5d458",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=5.3.9"
},
"require-dev": {
"psr/log": "~1.0",
@@ -1795,11 +1794,11 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.6-dev"
+ "dev-master": "2.7-dev"
}
},
"autoload": {
- "psr-0": {
+ "psr-4": {
"Symfony\\Component\\EventDispatcher\\": ""
}
},
@@ -1819,25 +1818,24 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2015-05-02 15:18:45"
+ "time": "2015-05-02 15:21:08"
},
{
"name": "symfony/filesystem",
- "version": "v2.6.8",
- "target-dir": "Symfony/Component/Filesystem",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/Filesystem.git",
- "reference": "1f8429f72a5bfa58b33fd96824bea146fc4b3f49"
+ "reference": "ae4551fd6d4d4f51f2e7390fbc902fbd67f3b7ba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Filesystem/zipball/1f8429f72a5bfa58b33fd96824bea146fc4b3f49",
- "reference": "1f8429f72a5bfa58b33fd96824bea146fc4b3f49",
+ "url": "https://api.github.com/repos/symfony/Filesystem/zipball/ae4551fd6d4d4f51f2e7390fbc902fbd67f3b7ba",
+ "reference": "ae4551fd6d4d4f51f2e7390fbc902fbd67f3b7ba",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=5.3.9"
},
"require-dev": {
"symfony/phpunit-bridge": "~2.7"
@@ -1845,11 +1843,11 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.6-dev"
+ "dev-master": "2.7-dev"
}
},
"autoload": {
- "psr-0": {
+ "psr-4": {
"Symfony\\Component\\Filesystem\\": ""
}
},
@@ -1869,11 +1867,11 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
- "time": "2015-05-15 13:32:45"
+ "time": "2015-05-15 13:33:16"
},
{
"name": "symfony/finder",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/Finder",
"source": {
"type": "git",
@@ -1923,7 +1921,7 @@
},
{
"name": "symfony/http-foundation",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/HttpFoundation",
"source": {
"type": "git",
@@ -1977,17 +1975,17 @@
},
{
"name": "symfony/http-kernel",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/HttpKernel",
"source": {
"type": "git",
"url": "https://github.com/symfony/HttpKernel.git",
- "reference": "a9a6f595941fce8dddd64f4e9bf47747cf1515fc"
+ "reference": "7c883eb1a5d8b52b1fa6d4134b82304c6bb7007f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/a9a6f595941fce8dddd64f4e9bf47747cf1515fc",
- "reference": "a9a6f595941fce8dddd64f4e9bf47747cf1515fc",
+ "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/7c883eb1a5d8b52b1fa6d4134b82304c6bb7007f",
+ "reference": "7c883eb1a5d8b52b1fa6d4134b82304c6bb7007f",
"shasum": ""
},
"require": {
@@ -2051,11 +2049,11 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2015-05-27 00:17:10"
+ "time": "2015-05-29 22:55:07"
},
{
"name": "symfony/process",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/Process",
"source": {
"type": "git",
@@ -2105,7 +2103,7 @@
},
{
"name": "symfony/routing",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/Routing",
"source": {
"type": "git",
@@ -2174,7 +2172,7 @@
},
{
"name": "symfony/security-core",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/Security/Core",
"source": {
"type": "git",
@@ -2238,17 +2236,17 @@
},
{
"name": "symfony/translation",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/Translation",
"source": {
"type": "git",
"url": "https://github.com/symfony/Translation.git",
- "reference": "d030b3d8d9699795dbf8c59e915ef879007a4483"
+ "reference": "89cdf3c43bc24c85dd8173dfcf5a979a95e5bd9c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Translation/zipball/d030b3d8d9699795dbf8c59e915ef879007a4483",
- "reference": "d030b3d8d9699795dbf8c59e915ef879007a4483",
+ "url": "https://api.github.com/repos/symfony/Translation/zipball/89cdf3c43bc24c85dd8173dfcf5a979a95e5bd9c",
+ "reference": "89cdf3c43bc24c85dd8173dfcf5a979a95e5bd9c",
"shasum": ""
},
"require": {
@@ -2293,11 +2291,11 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2015-05-22 14:37:51"
+ "time": "2015-05-29 14:42:58"
},
{
"name": "symfony/var-dumper",
- "version": "v2.6.8",
+ "version": "v2.6.9",
"target-dir": "Symfony/Component/VarDumper",
"source": {
"type": "git",
@@ -2355,58 +2353,6 @@
],
"time": "2015-05-01 14:14:24"
},
- {
- "name": "twig/extensions",
- "version": "v1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/twigphp/Twig-extensions.git",
- "reference": "8cf4b9fe04077bd54fc73f4fde83347040c3b8cd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/8cf4b9fe04077bd54fc73f4fde83347040c3b8cd",
- "reference": "8cf4b9fe04077bd54fc73f4fde83347040c3b8cd",
- "shasum": ""
- },
- "require": {
- "twig/twig": "~1.12"
- },
- "require-dev": {
- "symfony/translation": "~2.3"
- },
- "suggest": {
- "symfony/translation": "Allow the time_diff output to be translated"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Twig_Extensions_": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- }
- ],
- "description": "Common additional features for Twig that do not directly belong in core",
- "homepage": "http://twig.sensiolabs.org/doc/extensions/index.html",
- "keywords": [
- "i18n",
- "text"
- ],
- "time": "2014-10-30 14:30:03"
- },
{
"name": "twig/twig",
"version": "v1.18.1",
@@ -2466,16 +2412,16 @@
},
{
"name": "vlucas/phpdotenv",
- "version": "v1.1.0",
+ "version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "732d2adb7d916c9593b9d58c3b0d9ebefead07aa"
+ "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/732d2adb7d916c9593b9d58c3b0d9ebefead07aa",
- "reference": "732d2adb7d916c9593b9d58c3b0d9ebefead07aa",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa",
+ "reference": "0cac554ce06277e33ddf9f0b7ade4b8bbf2af3fa",
"shasum": ""
},
"require": {
@@ -2485,11 +2431,6 @@
"phpunit/phpunit": "~4.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
"autoload": {
"psr-0": {
"Dotenv": "src/"
@@ -2513,20 +2454,20 @@
"env",
"environment"
],
- "time": "2014-12-05 15:19:21"
+ "time": "2015-05-30 15:59:26"
},
{
"name": "watson/validating",
- "version": "1.0.2",
+ "version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/dwightwatson/validating.git",
- "reference": "47320813a45cc35384e72364484d54fe44dcd3fb"
+ "reference": "c32912f760b456c043657951683ed6c468ab83e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dwightwatson/validating/zipball/47320813a45cc35384e72364484d54fe44dcd3fb",
- "reference": "47320813a45cc35384e72364484d54fe44dcd3fb",
+ "url": "https://api.github.com/repos/dwightwatson/validating/zipball/c32912f760b456c043657951683ed6c468ab83e7",
+ "reference": "c32912f760b456c043657951683ed6c468ab83e7",
"shasum": ""
},
"require": {
@@ -2568,7 +2509,7 @@
"laravel",
"validation"
],
- "time": "2015-05-23 00:03:54"
+ "time": "2015-06-03 02:25:38"
},
{
"name": "zizaco/entrust",
@@ -3322,16 +3263,16 @@
},
{
"name": "phpspec/phpspec",
- "version": "2.2.0",
+ "version": "2.2.1",
"source": {
"type": "git",
"url": "https://github.com/phpspec/phpspec.git",
- "reference": "9727d75919a00455433e867565bc022f0b985a39"
+ "reference": "e9a40577323e67f1de2e214abf32976a0352d8f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/phpspec/zipball/9727d75919a00455433e867565bc022f0b985a39",
- "reference": "9727d75919a00455433e867565bc022f0b985a39",
+ "url": "https://api.github.com/repos/phpspec/phpspec/zipball/e9a40577323e67f1de2e214abf32976a0352d8f8",
+ "reference": "e9a40577323e67f1de2e214abf32976a0352d8f8",
"shasum": ""
},
"require": {
@@ -3396,7 +3337,7 @@
"testing",
"tests"
],
- "time": "2015-04-18 16:22:51"
+ "time": "2015-05-30 15:21:40"
},
{
"name": "phpspec/prophecy",
@@ -3460,16 +3401,16 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "2.0.17",
+ "version": "2.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "c4e8e7725e351184a76544634855b8a9c405a6e3"
+ "reference": "28a6b34e91d789b2608072ab3c82eaae7cdb973c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c4e8e7725e351184a76544634855b8a9c405a6e3",
- "reference": "c4e8e7725e351184a76544634855b8a9c405a6e3",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/28a6b34e91d789b2608072ab3c82eaae7cdb973c",
+ "reference": "28a6b34e91d789b2608072ab3c82eaae7cdb973c",
"shasum": ""
},
"require": {
@@ -3492,7 +3433,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "2.1.x-dev"
}
},
"autoload": {
@@ -3518,7 +3459,7 @@
"testing",
"xunit"
],
- "time": "2015-05-25 05:11:59"
+ "time": "2015-06-03 07:01:01"
},
{
"name": "phpunit/php-file-iterator",
@@ -3706,16 +3647,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "4.6.7",
+ "version": "4.7.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "57bf06dd4eebe2a5ced79a8de71509e7d5c18b25"
+ "reference": "c2241b8d3381be3e4c6125ae347687d59f286784"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/57bf06dd4eebe2a5ced79a8de71509e7d5c18b25",
- "reference": "57bf06dd4eebe2a5ced79a8de71509e7d5c18b25",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c2241b8d3381be3e4c6125ae347687d59f286784",
+ "reference": "c2241b8d3381be3e4c6125ae347687d59f286784",
"shasum": ""
},
"require": {
@@ -3726,7 +3667,7 @@
"ext-spl": "*",
"php": ">=5.3.3",
"phpspec/prophecy": "~1.3,>=1.3.1",
- "phpunit/php-code-coverage": "~2.0,>=2.0.11",
+ "phpunit/php-code-coverage": "~2.1",
"phpunit/php-file-iterator": "~1.4",
"phpunit/php-text-template": "~1.2",
"phpunit/php-timer": "~1.0",
@@ -3748,7 +3689,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.6.x-dev"
+ "dev-master": "4.7.x-dev"
}
},
"autoload": {
@@ -3774,20 +3715,20 @@
"testing",
"xunit"
],
- "time": "2015-05-25 05:18:18"
+ "time": "2015-06-05 04:14:02"
},
{
"name": "phpunit/phpunit-mock-objects",
- "version": "2.3.1",
+ "version": "2.3.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "74ffb87f527f24616f72460e54b595f508dccb5c"
+ "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/74ffb87f527f24616f72460e54b595f508dccb5c",
- "reference": "74ffb87f527f24616f72460e54b595f508dccb5c",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/253c005852591fd547fc18cd5b7b43a1ec82d8f7",
+ "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7",
"shasum": ""
},
"require": {
@@ -3829,7 +3770,7 @@
"mock",
"xunit"
],
- "time": "2015-04-02 05:36:41"
+ "time": "2015-05-29 05:19:18"
},
{
"name": "satooshi/php-coveralls",
@@ -4272,21 +4213,20 @@
},
{
"name": "symfony/class-loader",
- "version": "v2.6.8",
- "target-dir": "Symfony/Component/ClassLoader",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/ClassLoader.git",
- "reference": "abf5632a31402ae6ac19cd00683faf603046440a"
+ "reference": "fa19598cb708b92d983b34aae313f57c217f9386"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/abf5632a31402ae6ac19cd00683faf603046440a",
- "reference": "abf5632a31402ae6ac19cd00683faf603046440a",
+ "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/fa19598cb708b92d983b34aae313f57c217f9386",
+ "reference": "fa19598cb708b92d983b34aae313f57c217f9386",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=5.3.9"
},
"require-dev": {
"symfony/finder": "~2.0,>=2.0.5",
@@ -4295,11 +4235,11 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.6-dev"
+ "dev-master": "2.7-dev"
}
},
"autoload": {
- "psr-0": {
+ "psr-4": {
"Symfony\\Component\\ClassLoader\\": ""
}
},
@@ -4319,25 +4259,24 @@
],
"description": "Symfony ClassLoader Component",
"homepage": "https://symfony.com",
- "time": "2015-05-15 13:32:45"
+ "time": "2015-05-15 13:33:16"
},
{
"name": "symfony/config",
- "version": "v2.6.8",
- "target-dir": "Symfony/Component/Config",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/Config.git",
- "reference": "2696c5bc7c31485a482c10865d713de9fcc7aa31"
+ "reference": "537e9912063e66aa70cbcddd7d6e6e8db61d98e4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Config/zipball/2696c5bc7c31485a482c10865d713de9fcc7aa31",
- "reference": "2696c5bc7c31485a482c10865d713de9fcc7aa31",
+ "url": "https://api.github.com/repos/symfony/Config/zipball/537e9912063e66aa70cbcddd7d6e6e8db61d98e4",
+ "reference": "537e9912063e66aa70cbcddd7d6e6e8db61d98e4",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
+ "php": ">=5.3.9",
"symfony/filesystem": "~2.3"
},
"require-dev": {
@@ -4346,11 +4285,11 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.6-dev"
+ "dev-master": "2.7-dev"
}
},
"autoload": {
- "psr-0": {
+ "psr-4": {
"Symfony\\Component\\Config\\": ""
}
},
@@ -4370,25 +4309,24 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
- "time": "2015-05-15 13:32:45"
+ "time": "2015-05-15 13:33:16"
},
{
"name": "symfony/stopwatch",
- "version": "v2.6.8",
- "target-dir": "Symfony/Component/Stopwatch",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/Stopwatch.git",
- "reference": "b470f87c69837cb71115f1fa720388bb19b63635"
+ "reference": "7702945bceddc0e1f744519abb8a2baeb94bd5ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/b470f87c69837cb71115f1fa720388bb19b63635",
- "reference": "b470f87c69837cb71115f1fa720388bb19b63635",
+ "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/7702945bceddc0e1f744519abb8a2baeb94bd5ce",
+ "reference": "7702945bceddc0e1f744519abb8a2baeb94bd5ce",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=5.3.9"
},
"require-dev": {
"symfony/phpunit-bridge": "~2.7"
@@ -4396,11 +4334,11 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.6-dev"
+ "dev-master": "2.7-dev"
}
},
"autoload": {
- "psr-0": {
+ "psr-4": {
"Symfony\\Component\\Stopwatch\\": ""
}
},
@@ -4420,25 +4358,24 @@
],
"description": "Symfony Stopwatch Component",
"homepage": "https://symfony.com",
- "time": "2015-05-02 15:18:45"
+ "time": "2015-05-02 15:21:08"
},
{
"name": "symfony/yaml",
- "version": "v2.6.8",
- "target-dir": "Symfony/Component/Yaml",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/Yaml.git",
- "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2"
+ "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/Yaml/zipball/f157ab074e453ecd4c0fa775f721f6e67a99d9e2",
- "reference": "f157ab074e453ecd4c0fa775f721f6e67a99d9e2",
+ "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3",
+ "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=5.3.9"
},
"require-dev": {
"symfony/phpunit-bridge": "~2.7"
@@ -4446,11 +4383,11 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.6-dev"
+ "dev-master": "2.7-dev"
}
},
"autoload": {
- "psr-0": {
+ "psr-4": {
"Symfony\\Component\\Yaml\\": ""
}
},
@@ -4470,7 +4407,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2015-05-02 15:18:45"
+ "time": "2015-05-02 15:21:08"
}
],
"aliases": [],
diff --git a/config/app.php b/config/app.php
index 7c8c30c9c3..c23a78eb01 100644
--- a/config/app.php
+++ b/config/app.php
@@ -115,7 +115,7 @@ return [
*/
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
- 'Illuminate\Bus\BusServiceProvider',
+ //'Illuminate\Bus\BusServiceProvider',
'Illuminate\Cache\CacheServiceProvider',
'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
'Illuminate\Routing\ControllerServiceProvider',
@@ -139,16 +139,16 @@ return [
'TwigBridge\ServiceProvider',
'DaveJamesMiller\Breadcrumbs\ServiceProvider',
-// 'Barryvdh\Debugbar\ServiceProvider',
-// 'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
+ //'Barryvdh\Debugbar\ServiceProvider',
+ //'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
'Zizaco\Entrust\EntrustServiceProvider',
/*
* Application Service Providers...
*/
'FireflyIII\Providers\AppServiceProvider',
- 'FireflyIII\Providers\BusServiceProvider',
- 'FireflyIII\Providers\ConfigServiceProvider',
+ //'FireflyIII\Providers\BusServiceProvider',
+ //'FireflyIII\Providers\ConfigServiceProvider',
'FireflyIII\Providers\EventServiceProvider',
'FireflyIII\Providers\RouteServiceProvider',
'FireflyIII\Providers\FireflyServiceProvider',
diff --git a/public/css/firefly.css b/public/css/firefly.css
index 09359d29db..bb147ee849 100644
--- a/public/css/firefly.css
+++ b/public/css/firefly.css
@@ -10,4 +10,10 @@
height: 100%;
margin: 0px;
padding: 0px
-}
\ No newline at end of file
+}
+.medium {
+ font-size: 16px;
+}
+
+a.panel-link {color:#fff;text-decoration: none;}
+a.panel-link:hover {color:#fff;text-decoration: none;}
\ No newline at end of file
diff --git a/public/js/budgets.js b/public/js/budgets.js
index 52e80dff01..ee4ecceb21 100644
--- a/public/js/budgets.js
+++ b/public/js/budgets.js
@@ -2,43 +2,47 @@
function drawSpentBar() {
"use strict";
+ if ($('.spentBar').length > 0) {
+ var overspent = spent > budgeted;
+ var pct;
- var overspent = spent > budgeted;
- var pct;
-
- if (overspent) {
- // draw overspent bar
- pct = (budgeted / spent) * 100;
- $('.spentBar .progress-bar-warning').css('width', pct + '%');
- $('.spentBar .progress-bar-danger').css('width', (100 - pct) + '%');
- } else {
- // draw normal bar:
- pct = (spent / budgeted) * 100;
- $('.spentBar .progress-bar-info').css('width', pct + '%');
+ if (overspent) {
+ // draw overspent bar
+ pct = (budgeted / spent) * 100;
+ $('.spentBar .progress-bar-warning').css('width', pct + '%');
+ $('.spentBar .progress-bar-danger').css('width', (100 - pct) + '%');
+ } else {
+ // draw normal bar:
+ pct = (spent / budgeted) * 100;
+ $('.spentBar .progress-bar-info').css('width', pct + '%');
+ }
}
}
function drawBudgetedBar() {
"use strict";
- var budgetedMuch = budgeted > budgetIncomeTotal;
- // recalculate percentage:
+ if ($('.budgetedBar').length > 0) {
+ var budgetedMuch = budgeted > budgetIncomeTotal;
- var pct;
- if (budgetedMuch) {
- // budgeted too much.
- pct = (budgetIncomeTotal / budgeted) * 100;
- $('.budgetedBar .progress-bar-warning').css('width', pct + '%');
- $('.budgetedBar .progress-bar-danger').css('width', (100 - pct) + '%');
- $('.budgetedBar .progress-bar-info').css('width', 0);
- } else {
- pct = (budgeted / budgetIncomeTotal) * 100;
- $('.budgetedBar .progress-bar-warning').css('width', 0);
- $('.budgetedBar .progress-bar-danger').css('width', 0);
- $('.budgetedBar .progress-bar-info').css('width', pct + '%');
+ // recalculate percentage:
+
+ var pct;
+ if (budgetedMuch) {
+ // budgeted too much.
+ pct = (budgetIncomeTotal / budgeted) * 100;
+ $('.budgetedBar .progress-bar-warning').css('width', pct + '%');
+ $('.budgetedBar .progress-bar-danger').css('width', (100 - pct) + '%');
+ $('.budgetedBar .progress-bar-info').css('width', 0);
+ } else {
+ pct = (budgeted / budgetIncomeTotal) * 100;
+ $('.budgetedBar .progress-bar-warning').css('width', 0);
+ $('.budgetedBar .progress-bar-danger').css('width', 0);
+ $('.budgetedBar .progress-bar-info').css('width', pct + '%');
+ }
+
+ $('#budgetedAmount').html(currencySymbol + ' ' + budgeted.toFixed(2));
}
-
- $('#budgetedAmount').html(currencySymbol + ' ' + budgeted.toFixed(2));
}
function updateBudgetedAmounts(e) {
diff --git a/public/js/transactions.js b/public/js/transactions.js
index b9cee1ded4..bb70ee82c8 100644
--- a/public/js/transactions.js
+++ b/public/js/transactions.js
@@ -1,4 +1,4 @@
-/* globals what, $ */
+/* globals what:true, $, doSwitch, txt, middleCrumbName, title,button, middleCrumbUrl, piggiesLength, breadcrumbs */
$(document).ready(function () {
"use strict";
if ($('input[name="expense_account"]').length > 0) {
@@ -38,4 +38,104 @@ $(document).ready(function () {
});
}
-});
\ No newline at end of file
+ // respond to switch buttons:
+ if (doSwitch) {
+ updateButtons();
+ updateForm();
+ updateLayout();
+ }
+
+
+});
+
+function updateLayout() {
+ "use strict";
+ $('#subTitle').text(title[what]);
+ $('.breadcrumb .active').text(breadcrumbs[what]);
+ $('.breadcrumb li:nth-child(2)').html('' + middleCrumbName[what] + '');
+ $('#transaction-btn').html(' ' + button[what]);
+}
+
+function updateForm() {
+ "use strict";
+
+ $('input[name="what"]').val(what);
+
+ switch (what) {
+ case 'withdrawal':
+ $('#account_id_holder').show();
+ $('#expense_account_holder').show();
+ $('#revenue_account_holder').hide();
+ $('#account_from_id_holder').hide();
+ $('#account_to_id_holder').hide();
+ $('#budget_id_holder').show();
+ $('#piggy_bank_id_holder').hide();
+
+
+ if ($('#ffInput_revenue_account').val().length > 0) {
+ $('#ffInput_expense_account').val($('#ffInput_revenue_account').val());
+ }
+
+ break;
+ case 'deposit':
+ $('#account_id_holder').show();
+ $('#expense_account_holder').hide();
+ $('#revenue_account_holder').show();
+ $('#account_from_id_holder').hide();
+ $('#account_to_id_holder').hide();
+ $('#budget_id_holder').hide();
+ $('#piggy_bank_id_holder').hide();
+
+ if ($('#ffInput_expense_account').val().length > 0) {
+ $('#ffInput_revenue_account').val($('#ffInput_expense_account').val());
+ }
+
+ break;
+ case 'transfer':
+ $('#account_id_holder').hide();
+ $('#expense_account_holder').hide();
+ $('#revenue_account_holder').hide();
+ $('#account_from_id_holder').show();
+ $('#account_to_id_holder').show();
+ $('#budget_id_holder').hide();
+ if (piggiesLength === 0) {
+ $('#piggy_bank_id_holder').hide();
+ } else {
+ $('#piggy_bank_id_holder').show();
+ }
+ break;
+ }
+}
+
+
+function updateButtons() {
+ "use strict";
+ $('.switch').each(function (i, v) {
+ var button = $(v);
+
+ // remove click event:
+ button.unbind('click');
+ // new click event:
+ button.bind('click', clickButton);
+
+ if (button.data('what') == what) {
+ button.removeClass('btn-default').addClass('btn-info').html(' ' + txt[button.data('what')]);
+ console.log('Now displaying form for ' + what);
+ } else {
+ button.removeClass('btn-info').addClass('btn-default').text(txt[button.data('what')]);
+ }
+ });
+}
+
+function clickButton(e) {
+ "use strict";
+ var button = $(e.target);
+ var newWhat = button.data('what');
+ if (newWhat != what) {
+ what = newWhat;
+ updateButtons();
+ updateForm();
+ updateLayout();
+ }
+ return false;
+}
\ No newline at end of file
diff --git a/resources/lang/en/firefly.php b/resources/lang/en/firefly.php
index 9f99552a15..28970efa4f 100644
--- a/resources/lang/en/firefly.php
+++ b/resources/lang/en/firefly.php
@@ -18,6 +18,13 @@ return [
'showEverything' => 'Show everything',
'never' => 'Never',
+ // new user:
+ 'submit' => 'Submit',
+ 'getting_started' => 'Getting started',
+ 'to_get_started' => 'To get started with Firefly, please enter your current bank\'s name, and the balance of your checking account:',
+ 'savings_balance_text' => 'If you have a savings account, please enter the current balance of your savings account:',
+ 'cc_balance_text' => 'If you have a credit card, please enter your credit card\'s limit.',
+
// forms:
'mandatoryFields' => 'Mandatory fields',
'optionalFields' => 'Optional fields',
@@ -142,7 +149,7 @@ return [
'transactions' => 'Transactions',
'expenses' => 'Expenses',
'income' => 'Revenue / income',
- 'transfers' => 'Transfer',
+ 'transfers' => 'Transfers',
'moneyManagement' => 'Money management',
'piggyBanks' => 'Piggy banks',
'bills' => 'Bills',
@@ -226,6 +233,7 @@ return [
'balanceFor' => 'Balance for :name',
// piggy banks:
+ 'piggy_bank' => 'Piggy bank',
'new_piggy_bank' => 'Create new piggy bank',
'account_status' => 'Account status',
'left_for_piggy_banks' => 'Left for piggy banks',
diff --git a/resources/lang/en/form.php b/resources/lang/en/form.php
index aeacd0ebfd..b88dd2d972 100644
--- a/resources/lang/en/form.php
+++ b/resources/lang/en/form.php
@@ -1,5 +1,12 @@
'Bank name',
+ 'bank_balance' => 'Balance',
+ 'savings_balance' => 'Savings balance',
+ 'credit_card_limit' => 'Credit card limit',
+
'name' => 'Name',
'active' => 'Active',
'amount_min' => 'Minimum amount',
diff --git a/resources/lang/nl/breadcrumbs.php b/resources/lang/nl/breadcrumbs.php
index 18e12fe0c5..bfed39b02a 100644
--- a/resources/lang/nl/breadcrumbs.php
+++ b/resources/lang/nl/breadcrumbs.php
@@ -45,10 +45,10 @@ return [
'changePassword' => 'Verander je wachtwoord',
// bills
- 'bills' => 'Rekeningen',
- 'newBill' => 'Nieuwe rekening',
- 'edit_bill' => 'Wijzig rekening ":name"',
- 'delete_bill' => 'Verwijder rekening ":name"',
+ 'bills' => 'Contracten',
+ 'newBill' => 'Nieuw contract',
+ 'edit_bill' => 'Wijzig contract ":name"',
+ 'delete_bill' => 'Verwijder contract ":name"',
// reminders
'reminders' => 'Herinneringen',
diff --git a/resources/lang/nl/firefly.php b/resources/lang/nl/firefly.php
index 28f289d678..9b36c7f94e 100644
--- a/resources/lang/nl/firefly.php
+++ b/resources/lang/nl/firefly.php
@@ -18,6 +18,13 @@ return [
'showEverything' => 'Laat alles zien',
'never' => 'Nooit',
+ // new user:
+ 'submit' => 'Invoeren',
+ 'getting_started' => 'Aan de start!',
+ 'to_get_started' => 'Begin met de naam van de bank waar je je betaalrekening hebt, en het saldo van die rekening.',
+ 'savings_balance_text' => 'Voer ook het saldo van je spaarrekening in, als je die hebt.',
+ 'cc_balance_text' => 'Als je een credit card hebt, vul dan hier je credit cardlimiet in.',
+
// forms:
'mandatoryFields' => 'Verplichte velden',
'optionalFields' => 'Optionele velden',
@@ -38,7 +45,7 @@ return [
'update_amount' => 'Bedrag bijwerken',
// bills:
- 'delete_bill' => 'Verwijder rekening ":name"',
+ 'delete_bill' => 'Verwijder contract ":name"',
// accounts:
'details_for_asset' => 'Overzicht voor betaalrekening ":name"',
@@ -121,8 +128,8 @@ return [
'newTransfer' => 'Nieuwe overschrijving',
'moneyIn' => 'Inkomsten',
'moneyOut' => 'Uitgaven',
- 'billsToPay' => 'Openstaande rekeningen',
- 'billsPaid' => 'Betaalde rekeningen',
+ 'billsToPay' => 'Openstaande contracten',
+ 'billsPaid' => 'Betaalde contracten',
'viewDetails' => 'Meer info',
'divided' => 'verdeeld',
'toDivide' => 'te verdelen',
@@ -154,7 +161,7 @@ return [
'transfers' => 'Overschrijvingen',
'moneyManagement' => 'Geldbeheer',
'piggyBanks' => 'Spaarpotjes',
- 'bills' => 'Rekeningen',
+ 'bills' => 'Contracten',
'createNew' => 'Nieuw',
'withdrawal' => 'Uitgave',
'deposit' => 'Inkomsten',
@@ -163,7 +170,7 @@ return [
'Withdrawal' => 'Uitgave',
'Deposit' => 'Inkomsten',
'Transfer' => 'Overschrijving',
- 'bill' => 'Rekening',
+ 'bill' => 'Contract',
'yes' => 'Ja',
'no' => 'Nee',
'amount' => 'Bedrag',
@@ -220,7 +227,7 @@ return [
'noBudget' => '(geen budget)',
'maxAmount' => 'Maximaal bedrag',
'minAmount' => 'Minimaal bedrag',
- 'billEntry' => 'Bedrag voor deze rekening',
+ 'billEntry' => 'Bedrag voor dit contract',
'name' => 'Naam',
'date' => 'Datum',
'paid' => 'Betaald',
@@ -235,6 +242,7 @@ return [
'balanceFor' => 'Saldo op :name',
// piggy banks:
+ 'piggy_bank' => 'Spaarpotje',
'new_piggy_bank' => 'Nieuw spaarpotje',
'account_status' => 'Rekeningoverzicht',
'left_for_piggy_banks' => 'Over voor spaarpotjes',
diff --git a/resources/lang/nl/form.php b/resources/lang/nl/form.php
index 239641c082..bcb086d5c2 100644
--- a/resources/lang/nl/form.php
+++ b/resources/lang/nl/form.php
@@ -1,5 +1,12 @@
'Banknaam',
+ 'bank_balance' => 'Saldo',
+ 'savings_balance' => 'Saldo van spaarrekening',
+ 'credit_card_limit' => 'Credit card limiet',
+
'name' => 'Naam',
'active' => 'Actief',
'amount_min' => 'Minimumbedrag',
@@ -51,7 +58,7 @@ return [
'noBudget' => '(geen budget)',
'delete_account' => 'Verwijder rekening ":name"',
- 'delete_bill' => 'Verwijder rekening ":name"',
+ 'delete_bill' => 'Verwijder contract ":name"',
'delete_budget' => 'Verwijder budget ":name"',
'delete_category' => 'Verwijder categorie ":name"',
'delete_currency' => 'Verwijder munteenheid ":name"',
@@ -59,7 +66,7 @@ return [
'delete_journal' => 'Verwijder transactie met omschrijving ":description"',
'account_areYouSure' => 'Weet je zeker dat je de rekening met naam ":name" wilt verwijderen?',
- 'bill_areYouSure' => 'Weet je zeker dat je de rekening met naam ":name" wilt verwijderen?',
+ 'bill_areYouSure' => 'Weet je zeker dat je het contract met naam ":name" wilt verwijderen?',
'budget_areYouSure' => 'Weet je zeker dat je het budget met naam ":name" wilt verwijderen?',
'category_areYouSure' => 'Weet je zeker dat je het category met naam ":name" wilt verwijderen?',
'currency_areYouSure' => 'Weet je zeker dat je de munteenheid met naam ":name" wilt verwijderen?',
@@ -71,8 +78,8 @@ return [
'|Ook alle :count transacties verbonden aan deze rekening worden verwijderd.',
'also_delete_piggyBanks' => 'Ook het spaarpotje verbonden aan deze rekening wordt verwijderd.' .
'|Ook alle :count spaarpotjes verbonden aan deze rekening worden verwijderd.',
- 'bill_keep_transactions' => 'De transactie verbonden aan deze rekening blijft bewaard.' .
- '|De :count transacties verbonden aan deze rekening blijven bewaard.',
+ 'bill_keep_transactions' => 'De transactie verbonden aan dit contract blijft bewaard.' .
+ '|De :count transacties verbonden aan dit contract blijven bewaard.',
'budget_keep_transactions' => 'De transactie verbonden aan dit budget blijft bewaard.' .
'|De :count transacties verbonden aan dit budget blijven bewaard.',
'category_keep_transactions' => 'De transactie verbonden aan deze categorie blijft bewaard.' .
diff --git a/resources/lang/nl/list.php b/resources/lang/nl/list.php
index 7ade859e8c..a9a8a30b02 100644
--- a/resources/lang/nl/list.php
+++ b/resources/lang/nl/list.php
@@ -23,7 +23,7 @@ return [
'to' => 'Naar',
'budget' => 'Budget',
'category' => 'Categorie',
- 'bill' => 'Rekening',
+ 'bill' => 'Contract',
'withdrawal' => 'Uitgave',
'deposit' => 'Inkomsten',
'transfer' => 'Overschrijving',
diff --git a/resources/twig/form/amount.twig b/resources/twig/form/amount.twig
index cc0ff82ae1..765b200feb 100644
--- a/resources/twig/form/amount.twig
+++ b/resources/twig/form/amount.twig
@@ -1,4 +1,4 @@
-
{{ 'welcome'|_ }}
- -- {{ 'createNewAsset'|_ }} - -
-+ {{ 'to_get_started'|_ }} +
+ +