diff --git a/.gitignore b/.gitignore index 411ae437cd..5cb379f496 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ Thumbs.db .idea/ tests/_output/* _ide_helper.php -/build/logs/clover.xml +/build/logs index.html* app/storage/firefly-export* .vagrant diff --git a/.travis.yml b/.travis.yml index da826954ea..820282fa3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,9 @@ install: - composer update - php artisan env - mv -v .env.testing .env + - touch storage/database/testing.db + - php artisan migrate --env=testing + - php artisan migrate --seed --env=testing script: - phpunit diff --git a/app/Helpers/Csv/Importer.php b/app/Helpers/Csv/Importer.php index 73286efa38..936cee2956 100644 --- a/app/Helpers/Csv/Importer.php +++ b/app/Helpers/Csv/Importer.php @@ -296,7 +296,7 @@ class Importer // some debug info: $journalId = $journal->id; - $type = $journal->transactionType->type; + $type = $journal->getTransactionType(); /** @var Account $asset */ $asset = $this->importData['asset-account-object']; /** @var Account $opposing */ @@ -314,13 +314,13 @@ class Importer */ protected function getTransactionType() { - $transactionType = TransactionType::where('type', 'Deposit')->first(); + $transactionType = TransactionType::where('type', TransactionType::DEPOSIT)->first(); if ($this->importData['amount'] < 0) { - $transactionType = TransactionType::where('type', 'Withdrawal')->first(); + $transactionType = TransactionType::where('type', TransactionType::WITHDRAWAL)->first(); } if (in_array($this->importData['opposing-account-object']->accountType->type, ['Asset account', 'Default account'])) { - $transactionType = TransactionType::where('type', 'Transfer')->first(); + $transactionType = TransactionType::where('type', TransactionType::TRANSFER)->first(); } return $transactionType; diff --git a/app/Helpers/Report/ReportQuery.php b/app/Helpers/Report/ReportQuery.php index 2db0edcb43..ce942b696b 100644 --- a/app/Helpers/Report/ReportQuery.php +++ b/app/Helpers/Report/ReportQuery.php @@ -8,6 +8,7 @@ use Crypt; use FireflyIII\Models\Account; use FireflyIII\Models\Budget; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\TransactionType; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Collection; @@ -42,13 +43,13 @@ class ReportQuery implements ReportQueryInterface function (Builder $query) { $query->where( function (Builder $q) { // only get withdrawals not from a shared account - $q->where('transaction_types.type', 'Withdrawal'); + $q->where('transaction_types.type', TransactionType::WITHDRAWAL); $q->where('acm_from.data', '!=', '"sharedAsset"'); } ); $query->orWhere( function (Builder $q) { // and transfers from a shared account. - $q->where('transaction_types.type', 'Transfer'); + $q->where('transaction_types.type', TransactionType::TRANSFER); $q->where('acm_to.data', '=', '"sharedAsset"'); $q->where('acm_from.data', '!=', '"sharedAsset"'); } @@ -56,7 +57,7 @@ class ReportQuery implements ReportQueryInterface } ); } else { - $query->where('transaction_types.type', 'Withdrawal'); // any withdrawal is fine. + $query->where('transaction_types.type', TransactionType::WITHDRAWAL); // any withdrawal is fine. } $query->orderBy('transaction_journals.date'); $data = $query->get( // get everything @@ -132,13 +133,13 @@ class ReportQuery implements ReportQueryInterface function (Builder $query) { $query->where( function (Builder $q) { - $q->where('transaction_types.type', 'Deposit'); + $q->where('transaction_types.type', TransactionType::DEPOSIT); $q->where('acm_to.data', '!=', '"sharedAsset"'); } ); $query->orWhere( function (Builder $q) { - $q->where('transaction_types.type', 'Transfer'); + $q->where('transaction_types.type', TransactionType::TRANSFER); $q->where('acm_from.data', '=', '"sharedAsset"'); $q->where('acm_to.data','!=','"sharedAsset"'); } @@ -147,7 +148,7 @@ class ReportQuery implements ReportQueryInterface ); } else { // any deposit is fine. - $query->where('transaction_types.type', 'Deposit'); + $query->where('transaction_types.type', TransactionType::DEPOSIT); } $query->orderBy('transaction_journals.date'); @@ -195,7 +196,7 @@ class ReportQuery implements ReportQueryInterface 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']) + ->transactionTypes([TransactionType::WITHDRAWAL]) ->where('transactions.account_id', $account->id) ->before($end) ->after($start) @@ -217,7 +218,7 @@ class ReportQuery implements ReportQueryInterface 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']) + ->transactionTypes([TransactionType::WITHDRAWAL]) ->where('transactions.account_id', $account->id) ->before($end) ->after($start) diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index ef8c33d0dc..8b9e7d92bd 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -12,6 +12,7 @@ use FireflyIII\Http\Requests\JournalFormRequest; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Input; @@ -45,8 +46,9 @@ class TransactionController extends Controller * * @return \Illuminate\View\View */ - public function create(AccountRepositoryInterface $repository, $what = 'deposit') + public function create(AccountRepositoryInterface $repository, $what = TransactionType::DEPOSIT) { + $what = strtolower($what); $maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize')); $maxPostSize = Steam::phpBytes(ini_get('post_max_size')); $uploadSize = min($maxFileSize, $maxPostSize); @@ -95,7 +97,7 @@ class TransactionController extends Controller */ public function delete(TransactionJournal $journal) { - $what = strtolower($journal->transactionType->type); + $what = strtolower($journal->getTransactionType()); $subTitle = trans('firefly.delete_' . $what, ['description' => $journal->description]); // put previous url in session @@ -137,7 +139,7 @@ class TransactionController extends Controller public function edit(AccountRepositoryInterface $repository, TransactionJournal $journal) { // cannot edit opening balance - if ($journal->transactionType->type == 'Opening balance') { + if ($journal->isOpeningBalance()) { return view('error')->with('message', 'Cannot edit this transaction. Edit the account instead!'); } @@ -145,7 +147,7 @@ class TransactionController extends Controller $maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize')); $maxPostSize = Steam::phpBytes(ini_get('post_max_size')); $uploadSize = min($maxFileSize, $maxPostSize); - $what = strtolower($journal->transactionType->type); + $what = strtolower($journal->getTransactionType()); $accounts = ExpandedForm::makeSelectList($repository->getAccounts(['Default account', 'Asset account'])); $budgets = ExpandedForm::makeSelectList(Auth::user()->budgets()->get()); $budgets[0] = trans('form.noBudget'); @@ -181,7 +183,7 @@ class TransactionController extends Controller $preFilled['amount'] = $journal->amount_positive; - if ($journal->transactionType->type == 'Withdrawal') { + if ($journal->isWithdrawal()) { $preFilled['account_id'] = $journal->source_account->id; $preFilled['expense_account'] = $journal->destination_account->name_for_editform; } else { @@ -269,8 +271,8 @@ class TransactionController extends Controller $t->after = bcadd($t->before, $t->amount); } ); - $what = strtolower($journal->transactionType->type); - $subTitle = trans('firefly.' . $journal->transactionType->type) . ' "' . e($journal->description) . '"'; + $what = strtolower($journal->getTransactionType()); + $subTitle = trans('firefly.' . $journal->getTransactionType()) . ' "' . e($journal->description) . '"'; return view('transactions.show', compact('journal', 'subTitle', 'what')); } @@ -287,7 +289,7 @@ class TransactionController extends Controller $journalData = $request->getJournalData(); // if not withdrawal, unset budgetid. - if ($journalData['what'] != 'withdrawal') { + if ($journalData['what'] != strtolower(TransactionType::WITHDRAWAL)) { $journalData['budget_id'] = 0; } @@ -308,7 +310,7 @@ class TransactionController extends Controller // rescan journal, UpdateJournalConnection event(new JournalSaved($journal)); - if ($journal->transactionType->type == 'Transfer' && intval($request->get('piggy_bank_id')) > 0) { + if ($journal->isTransfer() && intval($request->get('piggy_bank_id')) > 0) { event(new JournalCreated($journal, intval($request->get('piggy_bank_id')))); } @@ -340,7 +342,7 @@ class TransactionController extends Controller { // cannot edit opening balance - if ($journal->transactionType->type == 'Opening balance') { + if ($journal->isOpeningBalance()) { return view('error')->with('message', 'Cannot edit this transaction. Edit the account instead!'); } diff --git a/app/Http/Requests/JournalFormRequest.php b/app/Http/Requests/JournalFormRequest.php index ba7dc0dc19..7744c26fdc 100644 --- a/app/Http/Requests/JournalFormRequest.php +++ b/app/Http/Requests/JournalFormRequest.php @@ -5,6 +5,7 @@ namespace FireflyIII\Http\Requests; use Auth; use Carbon\Carbon; use Exception; +use FireflyIII\Models\TransactionType; use Input; /** @@ -65,7 +66,7 @@ class JournalFormRequest extends Request ]; switch ($what) { - case 'withdrawal': + case strtolower(TransactionType::WITHDRAWAL): $rules['account_id'] = 'required|exists:accounts,id|belongsToUser:accounts'; $rules['expense_account'] = 'between:1,255'; $rules['category'] = 'between:1,255'; @@ -73,12 +74,12 @@ class JournalFormRequest extends Request $rules['budget_id'] = 'exists:budgets,id|belongsToUser:budgets'; } break; - case 'deposit': + case strtolower(TransactionType::DEPOSIT): $rules['category'] = 'between:1,255'; $rules['account_id'] = 'required|exists:accounts,id|belongsToUser:accounts'; $rules['revenue_account'] = 'between:1,255'; break; - case 'transfer': + case strtolower(TransactionType::TRANSFER): $rules['account_from_id'] = 'required|exists:accounts,id|belongsToUser:accounts|different:account_to_id'; $rules['account_to_id'] = 'required|exists:accounts,id|belongsToUser:accounts|different:account_from_id'; $rules['category'] = 'between:1,255'; diff --git a/app/Http/breadcrumbs.php b/app/Http/breadcrumbs.php index 5d360aaf4c..37a49237b9 100644 --- a/app/Http/breadcrumbs.php +++ b/app/Http/breadcrumbs.php @@ -416,7 +416,7 @@ Breadcrumbs::register( Breadcrumbs::register( 'transactions.show', function (Generator $breadcrumbs, TransactionJournal $journal) { - $breadcrumbs->parent('transactions.index', strtolower($journal->transactionType->type)); + $breadcrumbs->parent('transactions.index', strtolower($journal->getTransactionType())); $breadcrumbs->push($journal->description, route('transactions.show', [$journal->id])); } diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php index 52e026805c..aee80cdfc4 100644 --- a/app/Models/TransactionJournal.php +++ b/app/Models/TransactionJournal.php @@ -147,10 +147,9 @@ class TransactionJournal extends Model } bcscale(2); - $type = $this->transactionType->type; $transaction = $this->transactions->sortByDesc('amount')->first(); $amount = $transaction->amount; - if ($type == 'Withdrawal') { + if ($this->isWithdrawal()) { $amount = $amount * -1; } $cache->store($amount); @@ -167,15 +166,15 @@ class TransactionJournal extends Model */ protected function amountByTagAdvancePayment(Tag $tag, $amount) { - if ($this->transactionType->type == 'Withdrawal') { - $others = $tag->transactionJournals()->transactionTypes(['Deposit'])->get(); + if ($this->isWithdrawal()) { + $others = $tag->transactionJournals()->transactionTypes([TransactionType::DEPOSIT])->get(); foreach ($others as $other) { $amount = bcsub($amount, $other->amount_positive); } return $amount; } - if ($this->transactionType->type == 'Deposit') { + if ($this->isDeposit()) { return '0'; } @@ -190,8 +189,8 @@ class TransactionJournal extends Model */ protected function amountByTagBalancingAct($tag, $amount) { - if ($this->transactionType->type == 'Withdrawal') { - $transfer = $tag->transactionJournals()->transactionTypes(['Transfer'])->first(); + if ($this->isWithdrawal()) { + $transfer = $tag->transactionJournals()->transactionTypes([TransactionType::TRANSFER])->first(); if ($transfer) { $amount = bcsub($amount, $transfer->amount_positive); @@ -491,4 +490,43 @@ class TransactionJournal extends Model return $this->belongsTo('FireflyIII\User'); } + /** + * @return string + */ + public function getTransactionType() + { + return $this->transactionType->type; + } + + /** + * @return bool + */ + public function isWithdrawal() + { + return $this->transactionType->isWithdrawal(); + } + + /** + * @return bool + */ + public function isDeposit() + { + return $this->transactionType->isDeposit(); + } + + /** + * @return bool + */ + public function isTransfer() + { + return $this->transactionType->isTransfer(); + } + + /** + * @return bool + */ + public function isOpeningBalance() + { + return $this->transactionType->isOpeningBalance(); + } } diff --git a/app/Models/TransactionType.php b/app/Models/TransactionType.php index 3b00323459..1a07dd91d8 100644 --- a/app/Models/TransactionType.php +++ b/app/Models/TransactionType.php @@ -23,6 +23,11 @@ class TransactionType extends Model { use SoftDeletes; + const WITHDRAWAL = 'Withdrawal'; + const DEPOSIT = 'Deposit'; + const TRANSFER = 'Transfer'; + const OPENING_BALANCE = 'Opening balance'; + /** * @return array */ @@ -38,4 +43,36 @@ class TransactionType extends Model { return $this->hasMany('FireflyIII\Models\TransactionJournal'); } + + /** + * @return bool + */ + public function isWithdrawal() + { + return $this->type === TransactionType::WITHDRAWAL; + } + + /** + * @return bool + */ + public function isDeposit() + { + return $this->type === TransactionType::DEPOSIT; + } + + /** + * @return bool + */ + public function isTransfer() + { + return $this->type === TransactionType::TRANSFER; + } + + /** + * @return bool + */ + public function isOpeningBalance() + { + return $this->type === TransactionType::OPENING_BALANCE; + } } diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index b0c921b214..516be1fa6e 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -330,7 +330,7 @@ class AccountRepository implements AccountRepositoryInterface ->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'); + ->where('transaction_types.type', TransactionType::TRANSFER); } )->get(); @@ -376,7 +376,7 @@ class AccountRepository implements AccountRepositoryInterface return TransactionJournal ::orderBy('transaction_journals.date', 'ASC') ->accountIs($account) - ->transactionTypes(['Opening balance']) + ->transactionTypes([TransactionType::OPENING_BALANCE]) ->orderBy('created_at', 'ASC') ->first(['transaction_journals.*']); } @@ -549,7 +549,7 @@ class AccountRepository implements AccountRepositoryInterface */ protected function storeInitialBalance(Account $account, Account $opposing, array $data) { - $transactionType = TransactionType::whereType('Opening balance')->first(); + $transactionType = TransactionType::whereType(TransactionType::OPENING_BALANCE)->first(); $journal = TransactionJournal::create( [ 'user_id' => $data['user'], diff --git a/app/Repositories/Bill/BillRepository.php b/app/Repositories/Bill/BillRepository.php index 3b8215729e..3bc0326ffc 100644 --- a/app/Repositories/Bill/BillRepository.php +++ b/app/Repositories/Bill/BillRepository.php @@ -154,7 +154,7 @@ class BillRepository implements BillRepositoryInterface } $journals = new Collection; if (count($ids) > 0) { - $journals = Auth::user()->transactionjournals()->transactionTypes(['Withdrawal'])->whereIn('transaction_journals.id', $ids)->get( + $journals = Auth::user()->transactionjournals()->transactionTypes([TransactionType::WITHDRAWAL])->whereIn('transaction_journals.id', $ids)->get( ['transaction_journals.*'] ); } @@ -280,7 +280,7 @@ class BillRepository implements BillRepositoryInterface /* * Can only support withdrawals. */ - if ($journal->transactionType->type !== 'Withdrawal') { + if (false === $journal->isWithdrawal()) { return false; } diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index d360d835e0..019e407f1f 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -7,6 +7,7 @@ use Carbon\Carbon; use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\LimitRepetition; +use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Shared\ComponentRepository; use FireflyIII\Support\CacheProperties; use Illuminate\Database\Query\Builder as QueryBuilder; @@ -54,7 +55,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn public function expensesOnDayCorrected(Budget $budget, Carbon $date) { bcscale(2); - $sum = $budget->transactionjournals()->transactionTypes(['Withdrawal'])->onDate($date)->get(['transaction_journals.*'])->sum('amount'); + $sum = $budget->transactionjournals()->transactionTypes([TransactionType::WITHDRAWAL])->onDate($date)->get(['transaction_journals.*'])->sum('amount'); return $sum; } @@ -306,7 +307,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn ) ->after($start) ->before($end) - ->transactionTypes(['Withdrawal']) + ->transactionTypes([TransactionType::WITHDRAWAL]) ->get(['transaction_journals.*'])->sum('amount'); bcscale(2); diff --git a/app/Repositories/Category/CategoryRepository.php b/app/Repositories/Category/CategoryRepository.php index 035f1079ed..0055789a4a 100644 --- a/app/Repositories/Category/CategoryRepository.php +++ b/app/Repositories/Category/CategoryRepository.php @@ -7,6 +7,7 @@ use Carbon\Carbon; use Crypt; use FireflyIII\Models\Category; use FireflyIII\Models\TransactionJournal; +use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Shared\ComponentRepository; use FireflyIII\Support\CacheProperties; use Illuminate\Support\Collection; @@ -76,7 +77,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito ->before($end) ->where('categories.user_id', Auth::user()->id) ->after($start) - ->transactionTypes(['Withdrawal']) + ->transactionTypes([TransactionType::WITHDRAWAL]) ->get(['categories.id as category_id', 'categories.encrypted as category_encrypted', 'categories.name', 'transaction_journals.*']); bcscale(2); @@ -200,7 +201,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito */ public function spentOnDaySumCorrected(Category $category, Carbon $date) { - return $category->transactionjournals()->transactionTypes(['Withdrawal'])->onDate($date)->get(['transaction_journals.*'])->sum('amount'); + return $category->transactionjournals()->transactionTypes([TransactionType::WITHDRAWAL])->onDate($date)->get(['transaction_journals.*'])->sum('amount'); } /** @@ -285,7 +286,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito return $cache->get(); // @codeCoverageIgnore } - $sum = $category->transactionjournals()->transactionTypes(['Withdrawal'])->before($end)->after($start)->get(['transaction_journals.*'])->sum( + $sum = $category->transactionjournals()->transactionTypes([TransactionType::WITHDRAWAL])->before($end)->after($start)->get(['transaction_journals.*'])->sum( 'amount' ); @@ -315,7 +316,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito return $cache->get(); // @codeCoverageIgnore } - $sum = $category->transactionjournals()->transactionTypes(['Deposit'])->before($end)->after($start)->get(['transaction_journals.*'])->sum( + $sum = $category->transactionjournals()->transactionTypes([TransactionType::DEPOSIT])->before($end)->after($start)->get(['transaction_journals.*'])->sum( 'amount' ); @@ -367,6 +368,6 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito */ public function earnedOnDaySumCorrected(Category $category, Carbon $date) { - return $category->transactionjournals()->transactionTypes(['Deposit'])->onDate($date)->get(['transaction_journals.*'])->sum('amount'); + return $category->transactionjournals()->transactionTypes([TransactionType::DEPOSIT])->onDate($date)->get(['transaction_journals.*'])->sum('amount'); } } diff --git a/app/Repositories/Journal/JournalRepository.php b/app/Repositories/Journal/JournalRepository.php index eebbbf205a..3fd766b1a5 100644 --- a/app/Repositories/Journal/JournalRepository.php +++ b/app/Repositories/Journal/JournalRepository.php @@ -327,15 +327,15 @@ class JournalRepository implements JournalRepositoryInterface $fromAccount = null; $toAccount = null; switch ($type->type) { - case 'Withdrawal': + case TransactionType::WITHDRAWAL: list($fromAccount, $toAccount) = $this->storeWithdrawalAccounts($data); break; - case 'Deposit': + case TransactionType::DEPOSIT: list($fromAccount, $toAccount) = $this->storeDepositAccounts($data); break; - case 'Transfer': + case TransactionType::TRANSFER: $fromAccount = Account::find($data['account_from_id']); $toAccount = Account::find($data['account_to_id']); break; diff --git a/app/Repositories/Shared/ComponentRepository.php b/app/Repositories/Shared/ComponentRepository.php index 7edbb7bfb3..4ddb7c9b7d 100644 --- a/app/Repositories/Shared/ComponentRepository.php +++ b/app/Repositories/Shared/ComponentRepository.php @@ -3,6 +3,7 @@ namespace FireflyIII\Repositories\Shared; use Carbon\Carbon; +use FireflyIII\Models\TransactionType; use FireflyIII\Support\CacheProperties; use Illuminate\Database\Query\JoinClause; @@ -39,7 +40,10 @@ class ComponentRepository } if ($shared === true) { // shared is true: always ignore transfers between accounts! - $sum = $object->transactionjournals()->transactionTypes(['Withdrawal', 'Deposit', 'Opening balance'])->before($end)->after($start) + $sum = $object->transactionjournals() + ->transactionTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::OPENING_BALANCE]) + ->before($end) + ->after($start) ->get(['transaction_journals.*'])->sum('amount'); } else { // do something else, SEE budgets. @@ -47,7 +51,7 @@ class ComponentRepository $sum = $object->transactionjournals()->before($end)->after($start) ->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id') ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') - ->transactionTypes(['Withdrawal', 'Deposit', 'Opening balance']) + ->transactionTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::OPENING_BALANCE]) ->leftJoin( 'account_meta', function (JoinClause $join) { $join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole'); diff --git a/app/Repositories/Tag/TagRepository.php b/app/Repositories/Tag/TagRepository.php index 1d8f848f51..8f395b4218 100644 --- a/app/Repositories/Tag/TagRepository.php +++ b/app/Repositories/Tag/TagRepository.php @@ -77,7 +77,7 @@ class TagRepository implements TagRepositoryInterface /** @var Tag $tag */ foreach ($tags as $tag) { - $journals = $tag->transactionjournals()->after($start)->before($end)->transactionTypes(['Transfer'])->get(['transaction_journals.*']); + $journals = $tag->transactionjournals()->after($start)->before($end)->transactionTypes([TransactionType::TRANSFER])->get(['transaction_journals.*']); /** @var TransactionJournal $journal */ foreach ($journals as $journal) { @@ -158,7 +158,7 @@ class TagRepository implements TagRepositoryInterface if ($tag->tagMode == 'balancingAct' || $tag->tagMode == 'nothing') { foreach ($tag->transactionjournals as $journal) { - if ($journal->transactionType->type == 'Transfer') { + if ($journal->isTransfer()) { return false; } } @@ -169,7 +169,7 @@ class TagRepository implements TagRepositoryInterface */ $count = 0; foreach ($tag->transactionjournals as $journal) { - if ($journal->transactionType->type == 'Withdrawal') { + if ($journal->isWithdrawal()) { $count++; } } @@ -201,7 +201,7 @@ class TagRepository implements TagRepositoryInterface * If any transaction is a deposit, cannot become a balancing act. */ foreach ($tag->transactionjournals as $journal) { - if ($journal->transactionType->type == 'Deposit') { + if ($journal->isDeposit()) { return false; } } @@ -239,10 +239,10 @@ class TagRepository implements TagRepositoryInterface protected function connectBalancingAct(TransactionJournal $journal, Tag $tag) { /** @var TransactionType $withdrawal */ - $withdrawal = TransactionType::whereType('Withdrawal')->first(); + $withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); $withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count(); /** @var TransactionType $transfer */ - $transfer = TransactionType::whereType('Transfer')->first(); + $transfer = TransactionType::whereType(TransactionType::TRANSFER)->first(); $transfers = $tag->transactionjournals()->where('transaction_type_id', $transfer->id)->count(); @@ -275,11 +275,11 @@ class TagRepository implements TagRepositoryInterface protected function connectAdvancePayment(TransactionJournal $journal, Tag $tag) { /** @var TransactionType $transfer */ - $transfer = TransactionType::whereType('Transfer')->first(); + $transfer = TransactionType::whereType(TransactionType::TRANSFER)->first(); /** @var TransactionType $withdrawal */ - $withdrawal = TransactionType::whereType('Withdrawal')->first(); + $withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first(); /** @var TransactionType $deposit */ - $deposit = TransactionType::whereType('Deposit')->first(); + $deposit = TransactionType::whereType(TransactionType::DEPOSIT)->first(); $withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count(); $deposits = $tag->transactionjournals()->where('transaction_type_id', $deposit->id)->count(); @@ -326,10 +326,10 @@ class TagRepository implements TagRepositoryInterface foreach ($tag->transactionjournals as $check) { // $checkAccount is the source_account for a withdrawal // $checkAccount is the destination_account for a deposit - if ($check->transactionType->type == 'Withdrawal' && $check->source_account->id != $journal->destination_account->id) { + if ($check->isWithdrawal() && $check->source_account->id != $journal->destination_account->id) { $match = false; } - if ($check->transactionType->type == 'Deposit' && $check->destination_account->id != $journal->destination_account->id) { + if ($check->isDeposit() && $check->destination_account->id != $journal->destination_account->id) { $match = false; } diff --git a/app/Support/Amount.php b/app/Support/Amount.php index 50e72c37b3..86cac1185b 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -100,13 +100,13 @@ class Amount $symbol = $journal->symbol; } - if ($journal->transactionType->type == 'Transfer' && $coloured) { + if ($journal->isTransfer() && $coloured) { $txt = '' . $this->formatWithSymbol($symbol, $journal->amount_positive, false) . ''; $cache->store($txt); return $txt; } - if ($journal->transactionType->type == 'Transfer' && !$coloured) { + if ($journal->isTransfer() && !$coloured) { $txt = $this->formatWithSymbol($symbol, $journal->amount_positive, false); $cache->store($txt); diff --git a/app/Support/Twig/Journal.php b/app/Support/Twig/Journal.php index 62c07048de..628745d1f8 100644 --- a/app/Support/Twig/Journal.php +++ b/app/Support/Twig/Journal.php @@ -68,19 +68,17 @@ class Journal extends Twig_Extension return $cache->get(); // @codeCoverageIgnore } - $type = $journal->transactionType->type; - - switch ($type) { - case 'Withdrawal': + switch (true) { + case $journal->isWithdrawal(): $txt = ''; break; - case 'Deposit': + case $journal->isDeposit(): $txt = ''; break; - case 'Transfer': + case $journal->isTransfer(): $txt = ''; break; - case 'Opening balance': + case $journal->isOpeningBalance(): $txt = ''; break; default: @@ -189,7 +187,7 @@ class Journal extends Twig_Extension } if ($tag->tagMode == 'advancePayment') { - if ($journal->transactionType->type == 'Deposit') { + if ($journal->isDeposit()) { $amount = app('amount')->formatJournal($journal, false); $string = ' ' . $tag->tag . ''; @@ -201,7 +199,7 @@ class Journal extends Twig_Extension * 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') { + if ($journal->isWithdrawal()) { $amount = app('amount')->formatJournal($journal); $string = '' . $amount . ''; diff --git a/config/database.php b/config/database.php index 6d6387980a..f1a98b129b 100644 --- a/config/database.php +++ b/config/database.php @@ -49,7 +49,7 @@ return [ 'sqlite' => [ 'driver' => 'sqlite', - 'database' => __DIR__ . '/../storage/database/testing.db', + 'database' => storage_path('database/testing.db'), 'prefix' => '', ], diff --git a/database/seeds/TransactionTypeSeeder.php b/database/seeds/TransactionTypeSeeder.php index ecdff20b05..4f7a6e13d6 100644 --- a/database/seeds/TransactionTypeSeeder.php +++ b/database/seeds/TransactionTypeSeeder.php @@ -12,10 +12,10 @@ class TransactionTypeSeeder extends Seeder DB::table('transaction_types')->delete(); - TransactionType::create(['type' => 'Withdrawal']); - TransactionType::create(['type' => 'Deposit']); - TransactionType::create(['type' => 'Transfer']); - TransactionType::create(['type' => 'Opening balance']); + TransactionType::create(['type' => TransactionType::WITHDRAWAL]); + TransactionType::create(['type' => TransactionType::DEPOSIT]); + TransactionType::create(['type' => TransactionType::TRANSFER]); + TransactionType::create(['type' => TransactionType::OPENING_BALANCE]); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index dc5d0dda48..c5a49310ed 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -1,9 +1,5 @@ app->instance($class, $mock); - - return $mock; - } - - } diff --git a/tests/unit/ExampleTest.php b/tests/unit/ExampleTest.php deleted file mode 100644 index 05b642ccaf..0000000000 --- a/tests/unit/ExampleTest.php +++ /dev/null @@ -1,20 +0,0 @@ -first(); + $this->assertTrue($transactionType->isWithdrawal()); + } + + public function testIsDeposit() + { + $transactionType = TransactionType::whereType(TransactionType::DEPOSIT)->first(); + $this->assertTrue($transactionType->isDeposit()); + } + + public function testIsTransfer() + { + $transactionType = TransactionType::whereType(TransactionType::TRANSFER)->first(); + $this->assertTrue($transactionType->isTransfer()); + } + + public function testIsOpeningBalance() + { + $transactionType = TransactionType::whereType(TransactionType::OPENING_BALANCE)->first(); + $this->assertTrue($transactionType->isOpeningBalance()); + } +}