mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Merge pull request #127 from tonicospinelli/demeter-law
applying Demeter law for Transaction Type. Looking good!
This commit is contained in:
commit
d071f3947e
2
.gitignore
vendored
2
.gitignore
vendored
@ -5,7 +5,7 @@ Thumbs.db
|
|||||||
.idea/
|
.idea/
|
||||||
tests/_output/*
|
tests/_output/*
|
||||||
_ide_helper.php
|
_ide_helper.php
|
||||||
/build/logs/clover.xml
|
/build/logs
|
||||||
index.html*
|
index.html*
|
||||||
app/storage/firefly-export*
|
app/storage/firefly-export*
|
||||||
.vagrant
|
.vagrant
|
||||||
|
@ -10,6 +10,9 @@ install:
|
|||||||
- composer update
|
- composer update
|
||||||
- php artisan env
|
- php artisan env
|
||||||
- mv -v .env.testing .env
|
- mv -v .env.testing .env
|
||||||
|
- touch storage/database/testing.db
|
||||||
|
- php artisan migrate --env=testing
|
||||||
|
- php artisan migrate --seed --env=testing
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- phpunit
|
- phpunit
|
||||||
|
@ -296,7 +296,7 @@ class Importer
|
|||||||
|
|
||||||
// some debug info:
|
// some debug info:
|
||||||
$journalId = $journal->id;
|
$journalId = $journal->id;
|
||||||
$type = $journal->transactionType->type;
|
$type = $journal->getTransactionType();
|
||||||
/** @var Account $asset */
|
/** @var Account $asset */
|
||||||
$asset = $this->importData['asset-account-object'];
|
$asset = $this->importData['asset-account-object'];
|
||||||
/** @var Account $opposing */
|
/** @var Account $opposing */
|
||||||
@ -314,13 +314,13 @@ class Importer
|
|||||||
*/
|
*/
|
||||||
protected function getTransactionType()
|
protected function getTransactionType()
|
||||||
{
|
{
|
||||||
$transactionType = TransactionType::where('type', 'Deposit')->first();
|
$transactionType = TransactionType::where('type', TransactionType::DEPOSIT)->first();
|
||||||
if ($this->importData['amount'] < 0) {
|
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'])) {
|
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;
|
return $transactionType;
|
||||||
|
@ -8,6 +8,7 @@ use Crypt;
|
|||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Models\TransactionType;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Query\JoinClause;
|
use Illuminate\Database\Query\JoinClause;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@ -42,13 +43,13 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
function (Builder $query) {
|
function (Builder $query) {
|
||||||
$query->where(
|
$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('transaction_types.type', TransactionType::WITHDRAWAL);
|
||||||
$q->where('acm_from.data', '!=', '"sharedAsset"');
|
$q->where('acm_from.data', '!=', '"sharedAsset"');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$query->orWhere(
|
$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('transaction_types.type', TransactionType::TRANSFER);
|
||||||
$q->where('acm_to.data', '=', '"sharedAsset"');
|
$q->where('acm_to.data', '=', '"sharedAsset"');
|
||||||
$q->where('acm_from.data', '!=', '"sharedAsset"');
|
$q->where('acm_from.data', '!=', '"sharedAsset"');
|
||||||
}
|
}
|
||||||
@ -56,7 +57,7 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else {
|
} 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');
|
$query->orderBy('transaction_journals.date');
|
||||||
$data = $query->get( // get everything
|
$data = $query->get( // get everything
|
||||||
@ -132,13 +133,13 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
function (Builder $query) {
|
function (Builder $query) {
|
||||||
$query->where(
|
$query->where(
|
||||||
function (Builder $q) {
|
function (Builder $q) {
|
||||||
$q->where('transaction_types.type', 'Deposit');
|
$q->where('transaction_types.type', TransactionType::DEPOSIT);
|
||||||
$q->where('acm_to.data', '!=', '"sharedAsset"');
|
$q->where('acm_to.data', '!=', '"sharedAsset"');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$query->orWhere(
|
$query->orWhere(
|
||||||
function (Builder $q) {
|
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_from.data', '=', '"sharedAsset"');
|
||||||
$q->where('acm_to.data','!=','"sharedAsset"');
|
$q->where('acm_to.data','!=','"sharedAsset"');
|
||||||
}
|
}
|
||||||
@ -147,7 +148,7 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// any deposit is fine.
|
// any deposit is fine.
|
||||||
$query->where('transaction_types.type', 'Deposit');
|
$query->where('transaction_types.type', TransactionType::DEPOSIT);
|
||||||
}
|
}
|
||||||
$query->orderBy('transaction_journals.date');
|
$query->orderBy('transaction_journals.date');
|
||||||
|
|
||||||
@ -195,7 +196,7 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
Auth::user()->transactionjournals()
|
Auth::user()->transactionjournals()
|
||||||
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
->leftJoin('budget_transaction_journal', 'budget_transaction_journal.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)
|
->where('transactions.account_id', $account->id)
|
||||||
->before($end)
|
->before($end)
|
||||||
->after($start)
|
->after($start)
|
||||||
@ -217,7 +218,7 @@ class ReportQuery implements ReportQueryInterface
|
|||||||
Auth::user()->transactionjournals()
|
Auth::user()->transactionjournals()
|
||||||
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
->leftJoin('budget_transaction_journal', 'budget_transaction_journal.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)
|
->where('transactions.account_id', $account->id)
|
||||||
->before($end)
|
->before($end)
|
||||||
->after($start)
|
->after($start)
|
||||||
|
@ -12,6 +12,7 @@ use FireflyIII\Http\Requests\JournalFormRequest;
|
|||||||
use FireflyIII\Models\PiggyBank;
|
use FireflyIII\Models\PiggyBank;
|
||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
use Input;
|
use Input;
|
||||||
@ -45,8 +46,9 @@ class TransactionController extends Controller
|
|||||||
*
|
*
|
||||||
* @return \Illuminate\View\View
|
* @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'));
|
$maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize'));
|
||||||
$maxPostSize = Steam::phpBytes(ini_get('post_max_size'));
|
$maxPostSize = Steam::phpBytes(ini_get('post_max_size'));
|
||||||
$uploadSize = min($maxFileSize, $maxPostSize);
|
$uploadSize = min($maxFileSize, $maxPostSize);
|
||||||
@ -95,7 +97,7 @@ class TransactionController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function delete(TransactionJournal $journal)
|
public function delete(TransactionJournal $journal)
|
||||||
{
|
{
|
||||||
$what = strtolower($journal->transactionType->type);
|
$what = strtolower($journal->getTransactionType());
|
||||||
$subTitle = trans('firefly.delete_' . $what, ['description' => $journal->description]);
|
$subTitle = trans('firefly.delete_' . $what, ['description' => $journal->description]);
|
||||||
|
|
||||||
// put previous url in session
|
// put previous url in session
|
||||||
@ -137,7 +139,7 @@ class TransactionController extends Controller
|
|||||||
public function edit(AccountRepositoryInterface $repository, TransactionJournal $journal)
|
public function edit(AccountRepositoryInterface $repository, TransactionJournal $journal)
|
||||||
{
|
{
|
||||||
// cannot edit opening balance
|
// 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!');
|
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'));
|
$maxFileSize = Steam::phpBytes(ini_get('upload_max_filesize'));
|
||||||
$maxPostSize = Steam::phpBytes(ini_get('post_max_size'));
|
$maxPostSize = Steam::phpBytes(ini_get('post_max_size'));
|
||||||
$uploadSize = min($maxFileSize, $maxPostSize);
|
$uploadSize = min($maxFileSize, $maxPostSize);
|
||||||
$what = strtolower($journal->transactionType->type);
|
$what = strtolower($journal->getTransactionType());
|
||||||
$accounts = ExpandedForm::makeSelectList($repository->getAccounts(['Default account', 'Asset account']));
|
$accounts = ExpandedForm::makeSelectList($repository->getAccounts(['Default account', 'Asset account']));
|
||||||
$budgets = ExpandedForm::makeSelectList(Auth::user()->budgets()->get());
|
$budgets = ExpandedForm::makeSelectList(Auth::user()->budgets()->get());
|
||||||
$budgets[0] = trans('form.noBudget');
|
$budgets[0] = trans('form.noBudget');
|
||||||
@ -181,7 +183,7 @@ class TransactionController extends Controller
|
|||||||
|
|
||||||
$preFilled['amount'] = $journal->amount_positive;
|
$preFilled['amount'] = $journal->amount_positive;
|
||||||
|
|
||||||
if ($journal->transactionType->type == 'Withdrawal') {
|
if ($journal->isWithdrawal()) {
|
||||||
$preFilled['account_id'] = $journal->source_account->id;
|
$preFilled['account_id'] = $journal->source_account->id;
|
||||||
$preFilled['expense_account'] = $journal->destination_account->name_for_editform;
|
$preFilled['expense_account'] = $journal->destination_account->name_for_editform;
|
||||||
} else {
|
} else {
|
||||||
@ -269,8 +271,8 @@ class TransactionController extends Controller
|
|||||||
$t->after = bcadd($t->before, $t->amount);
|
$t->after = bcadd($t->before, $t->amount);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$what = strtolower($journal->transactionType->type);
|
$what = strtolower($journal->getTransactionType());
|
||||||
$subTitle = trans('firefly.' . $journal->transactionType->type) . ' "' . e($journal->description) . '"';
|
$subTitle = trans('firefly.' . $journal->getTransactionType()) . ' "' . e($journal->description) . '"';
|
||||||
|
|
||||||
return view('transactions.show', compact('journal', 'subTitle', 'what'));
|
return view('transactions.show', compact('journal', 'subTitle', 'what'));
|
||||||
}
|
}
|
||||||
@ -287,7 +289,7 @@ class TransactionController extends Controller
|
|||||||
$journalData = $request->getJournalData();
|
$journalData = $request->getJournalData();
|
||||||
|
|
||||||
// if not withdrawal, unset budgetid.
|
// if not withdrawal, unset budgetid.
|
||||||
if ($journalData['what'] != 'withdrawal') {
|
if ($journalData['what'] != strtolower(TransactionType::WITHDRAWAL)) {
|
||||||
$journalData['budget_id'] = 0;
|
$journalData['budget_id'] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,7 +310,7 @@ class TransactionController extends Controller
|
|||||||
// rescan journal, UpdateJournalConnection
|
// rescan journal, UpdateJournalConnection
|
||||||
event(new JournalSaved($journal));
|
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'))));
|
event(new JournalCreated($journal, intval($request->get('piggy_bank_id'))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +342,7 @@ class TransactionController extends Controller
|
|||||||
{
|
{
|
||||||
|
|
||||||
// cannot edit opening balance
|
// 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!');
|
return view('error')->with('message', 'Cannot edit this transaction. Edit the account instead!');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ namespace FireflyIII\Http\Requests;
|
|||||||
use Auth;
|
use Auth;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use FireflyIII\Models\TransactionType;
|
||||||
use Input;
|
use Input;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,7 +66,7 @@ class JournalFormRequest extends Request
|
|||||||
];
|
];
|
||||||
|
|
||||||
switch ($what) {
|
switch ($what) {
|
||||||
case 'withdrawal':
|
case strtolower(TransactionType::WITHDRAWAL):
|
||||||
$rules['account_id'] = 'required|exists:accounts,id|belongsToUser:accounts';
|
$rules['account_id'] = 'required|exists:accounts,id|belongsToUser:accounts';
|
||||||
$rules['expense_account'] = 'between:1,255';
|
$rules['expense_account'] = 'between:1,255';
|
||||||
$rules['category'] = 'between:1,255';
|
$rules['category'] = 'between:1,255';
|
||||||
@ -73,12 +74,12 @@ class JournalFormRequest extends Request
|
|||||||
$rules['budget_id'] = 'exists:budgets,id|belongsToUser:budgets';
|
$rules['budget_id'] = 'exists:budgets,id|belongsToUser:budgets';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'deposit':
|
case strtolower(TransactionType::DEPOSIT):
|
||||||
$rules['category'] = 'between:1,255';
|
$rules['category'] = 'between:1,255';
|
||||||
$rules['account_id'] = 'required|exists:accounts,id|belongsToUser:accounts';
|
$rules['account_id'] = 'required|exists:accounts,id|belongsToUser:accounts';
|
||||||
$rules['revenue_account'] = 'between:1,255';
|
$rules['revenue_account'] = 'between:1,255';
|
||||||
break;
|
break;
|
||||||
case 'transfer':
|
case strtolower(TransactionType::TRANSFER):
|
||||||
$rules['account_from_id'] = 'required|exists:accounts,id|belongsToUser:accounts|different:account_to_id';
|
$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['account_to_id'] = 'required|exists:accounts,id|belongsToUser:accounts|different:account_from_id';
|
||||||
$rules['category'] = 'between:1,255';
|
$rules['category'] = 'between:1,255';
|
||||||
|
@ -416,7 +416,7 @@ Breadcrumbs::register(
|
|||||||
Breadcrumbs::register(
|
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->parent('transactions.index', strtolower($journal->getTransactionType()));
|
||||||
$breadcrumbs->push($journal->description, route('transactions.show', [$journal->id]));
|
$breadcrumbs->push($journal->description, route('transactions.show', [$journal->id]));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -147,10 +147,9 @@ class TransactionJournal extends Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
bcscale(2);
|
bcscale(2);
|
||||||
$type = $this->transactionType->type;
|
|
||||||
$transaction = $this->transactions->sortByDesc('amount')->first();
|
$transaction = $this->transactions->sortByDesc('amount')->first();
|
||||||
$amount = $transaction->amount;
|
$amount = $transaction->amount;
|
||||||
if ($type == 'Withdrawal') {
|
if ($this->isWithdrawal()) {
|
||||||
$amount = $amount * -1;
|
$amount = $amount * -1;
|
||||||
}
|
}
|
||||||
$cache->store($amount);
|
$cache->store($amount);
|
||||||
@ -167,15 +166,15 @@ class TransactionJournal extends Model
|
|||||||
*/
|
*/
|
||||||
protected function amountByTagAdvancePayment(Tag $tag, $amount)
|
protected function amountByTagAdvancePayment(Tag $tag, $amount)
|
||||||
{
|
{
|
||||||
if ($this->transactionType->type == 'Withdrawal') {
|
if ($this->isWithdrawal()) {
|
||||||
$others = $tag->transactionJournals()->transactionTypes(['Deposit'])->get();
|
$others = $tag->transactionJournals()->transactionTypes([TransactionType::DEPOSIT])->get();
|
||||||
foreach ($others as $other) {
|
foreach ($others as $other) {
|
||||||
$amount = bcsub($amount, $other->amount_positive);
|
$amount = bcsub($amount, $other->amount_positive);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $amount;
|
return $amount;
|
||||||
}
|
}
|
||||||
if ($this->transactionType->type == 'Deposit') {
|
if ($this->isDeposit()) {
|
||||||
return '0';
|
return '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,8 +189,8 @@ class TransactionJournal extends Model
|
|||||||
*/
|
*/
|
||||||
protected function amountByTagBalancingAct($tag, $amount)
|
protected function amountByTagBalancingAct($tag, $amount)
|
||||||
{
|
{
|
||||||
if ($this->transactionType->type == 'Withdrawal') {
|
if ($this->isWithdrawal()) {
|
||||||
$transfer = $tag->transactionJournals()->transactionTypes(['Transfer'])->first();
|
$transfer = $tag->transactionJournals()->transactionTypes([TransactionType::TRANSFER])->first();
|
||||||
if ($transfer) {
|
if ($transfer) {
|
||||||
$amount = bcsub($amount, $transfer->amount_positive);
|
$amount = bcsub($amount, $transfer->amount_positive);
|
||||||
|
|
||||||
@ -491,4 +490,43 @@ class TransactionJournal extends Model
|
|||||||
return $this->belongsTo('FireflyIII\User');
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,11 @@ class TransactionType extends Model
|
|||||||
{
|
{
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
|
const WITHDRAWAL = 'Withdrawal';
|
||||||
|
const DEPOSIT = 'Deposit';
|
||||||
|
const TRANSFER = 'Transfer';
|
||||||
|
const OPENING_BALANCE = 'Opening balance';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
@ -38,4 +43,36 @@ class TransactionType extends Model
|
|||||||
{
|
{
|
||||||
return $this->hasMany('FireflyIII\Models\TransactionJournal');
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -330,7 +330,7 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
->where('transaction_journals.user_id', Auth::user()->id)
|
->where('transaction_journals.user_id', Auth::user()->id)
|
||||||
->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
|
->where('transaction_journals.date', '>=', $start->format('Y-m-d'))
|
||||||
->where('transaction_journals.date', '<=', $end->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();
|
)->get();
|
||||||
@ -376,7 +376,7 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
return TransactionJournal
|
return TransactionJournal
|
||||||
::orderBy('transaction_journals.date', 'ASC')
|
::orderBy('transaction_journals.date', 'ASC')
|
||||||
->accountIs($account)
|
->accountIs($account)
|
||||||
->transactionTypes(['Opening balance'])
|
->transactionTypes([TransactionType::OPENING_BALANCE])
|
||||||
->orderBy('created_at', 'ASC')
|
->orderBy('created_at', 'ASC')
|
||||||
->first(['transaction_journals.*']);
|
->first(['transaction_journals.*']);
|
||||||
}
|
}
|
||||||
@ -549,7 +549,7 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
protected function storeInitialBalance(Account $account, Account $opposing, array $data)
|
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(
|
$journal = TransactionJournal::create(
|
||||||
[
|
[
|
||||||
'user_id' => $data['user'],
|
'user_id' => $data['user'],
|
||||||
|
@ -154,7 +154,7 @@ class BillRepository implements BillRepositoryInterface
|
|||||||
}
|
}
|
||||||
$journals = new Collection;
|
$journals = new Collection;
|
||||||
if (count($ids) > 0) {
|
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.*']
|
['transaction_journals.*']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -280,7 +280,7 @@ class BillRepository implements BillRepositoryInterface
|
|||||||
/*
|
/*
|
||||||
* Can only support withdrawals.
|
* Can only support withdrawals.
|
||||||
*/
|
*/
|
||||||
if ($journal->transactionType->type !== 'Withdrawal') {
|
if (false === $journal->isWithdrawal()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ use Carbon\Carbon;
|
|||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Models\BudgetLimit;
|
use FireflyIII\Models\BudgetLimit;
|
||||||
use FireflyIII\Models\LimitRepetition;
|
use FireflyIII\Models\LimitRepetition;
|
||||||
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Shared\ComponentRepository;
|
use FireflyIII\Repositories\Shared\ComponentRepository;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use Illuminate\Database\Query\Builder as QueryBuilder;
|
use Illuminate\Database\Query\Builder as QueryBuilder;
|
||||||
@ -54,7 +55,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn
|
|||||||
public function expensesOnDayCorrected(Budget $budget, Carbon $date)
|
public function expensesOnDayCorrected(Budget $budget, Carbon $date)
|
||||||
{
|
{
|
||||||
bcscale(2);
|
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;
|
return $sum;
|
||||||
}
|
}
|
||||||
@ -306,7 +307,7 @@ class BudgetRepository extends ComponentRepository implements BudgetRepositoryIn
|
|||||||
)
|
)
|
||||||
->after($start)
|
->after($start)
|
||||||
->before($end)
|
->before($end)
|
||||||
->transactionTypes(['Withdrawal'])
|
->transactionTypes([TransactionType::WITHDRAWAL])
|
||||||
->get(['transaction_journals.*'])->sum('amount');
|
->get(['transaction_journals.*'])->sum('amount');
|
||||||
|
|
||||||
bcscale(2);
|
bcscale(2);
|
||||||
|
@ -7,6 +7,7 @@ use Carbon\Carbon;
|
|||||||
use Crypt;
|
use Crypt;
|
||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Repositories\Shared\ComponentRepository;
|
use FireflyIII\Repositories\Shared\ComponentRepository;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
@ -76,7 +77,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito
|
|||||||
->before($end)
|
->before($end)
|
||||||
->where('categories.user_id', Auth::user()->id)
|
->where('categories.user_id', Auth::user()->id)
|
||||||
->after($start)
|
->after($start)
|
||||||
->transactionTypes(['Withdrawal'])
|
->transactionTypes([TransactionType::WITHDRAWAL])
|
||||||
->get(['categories.id as category_id', 'categories.encrypted as category_encrypted', 'categories.name', 'transaction_journals.*']);
|
->get(['categories.id as category_id', 'categories.encrypted as category_encrypted', 'categories.name', 'transaction_journals.*']);
|
||||||
|
|
||||||
bcscale(2);
|
bcscale(2);
|
||||||
@ -200,7 +201,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito
|
|||||||
*/
|
*/
|
||||||
public function spentOnDaySumCorrected(Category $category, Carbon $date)
|
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
|
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'
|
'amount'
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -315,7 +316,7 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito
|
|||||||
return $cache->get(); // @codeCoverageIgnore
|
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'
|
'amount'
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -367,6 +368,6 @@ class CategoryRepository extends ComponentRepository implements CategoryReposito
|
|||||||
*/
|
*/
|
||||||
public function earnedOnDaySumCorrected(Category $category, Carbon $date)
|
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');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,15 +327,15 @@ class JournalRepository implements JournalRepositoryInterface
|
|||||||
$fromAccount = null;
|
$fromAccount = null;
|
||||||
$toAccount = null;
|
$toAccount = null;
|
||||||
switch ($type->type) {
|
switch ($type->type) {
|
||||||
case 'Withdrawal':
|
case TransactionType::WITHDRAWAL:
|
||||||
list($fromAccount, $toAccount) = $this->storeWithdrawalAccounts($data);
|
list($fromAccount, $toAccount) = $this->storeWithdrawalAccounts($data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'Deposit':
|
case TransactionType::DEPOSIT:
|
||||||
list($fromAccount, $toAccount) = $this->storeDepositAccounts($data);
|
list($fromAccount, $toAccount) = $this->storeDepositAccounts($data);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 'Transfer':
|
case TransactionType::TRANSFER:
|
||||||
$fromAccount = Account::find($data['account_from_id']);
|
$fromAccount = Account::find($data['account_from_id']);
|
||||||
$toAccount = Account::find($data['account_to_id']);
|
$toAccount = Account::find($data['account_to_id']);
|
||||||
break;
|
break;
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace FireflyIII\Repositories\Shared;
|
namespace FireflyIII\Repositories\Shared;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Models\TransactionType;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use Illuminate\Database\Query\JoinClause;
|
use Illuminate\Database\Query\JoinClause;
|
||||||
|
|
||||||
@ -39,7 +40,10 @@ class ComponentRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($shared === true) { // shared is true: always ignore transfers between accounts!
|
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');
|
->get(['transaction_journals.*'])->sum('amount');
|
||||||
} else {
|
} else {
|
||||||
// do something else, SEE budgets.
|
// do something else, SEE budgets.
|
||||||
@ -47,7 +51,7 @@ class ComponentRepository
|
|||||||
$sum = $object->transactionjournals()->before($end)->after($start)
|
$sum = $object->transactionjournals()->before($end)->after($start)
|
||||||
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
|
->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id')
|
||||||
->transactionTypes(['Withdrawal', 'Deposit', 'Opening balance'])
|
->transactionTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::OPENING_BALANCE])
|
||||||
->leftJoin(
|
->leftJoin(
|
||||||
'account_meta', function (JoinClause $join) {
|
'account_meta', function (JoinClause $join) {
|
||||||
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
|
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
|
||||||
|
@ -77,7 +77,7 @@ class TagRepository implements TagRepositoryInterface
|
|||||||
|
|
||||||
/** @var Tag $tag */
|
/** @var Tag $tag */
|
||||||
foreach ($tags as $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 */
|
/** @var TransactionJournal $journal */
|
||||||
foreach ($journals as $journal) {
|
foreach ($journals as $journal) {
|
||||||
@ -158,7 +158,7 @@ class TagRepository implements TagRepositoryInterface
|
|||||||
|
|
||||||
if ($tag->tagMode == 'balancingAct' || $tag->tagMode == 'nothing') {
|
if ($tag->tagMode == 'balancingAct' || $tag->tagMode == 'nothing') {
|
||||||
foreach ($tag->transactionjournals as $journal) {
|
foreach ($tag->transactionjournals as $journal) {
|
||||||
if ($journal->transactionType->type == 'Transfer') {
|
if ($journal->isTransfer()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ class TagRepository implements TagRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
$count = 0;
|
$count = 0;
|
||||||
foreach ($tag->transactionjournals as $journal) {
|
foreach ($tag->transactionjournals as $journal) {
|
||||||
if ($journal->transactionType->type == 'Withdrawal') {
|
if ($journal->isWithdrawal()) {
|
||||||
$count++;
|
$count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -201,7 +201,7 @@ class TagRepository implements TagRepositoryInterface
|
|||||||
* If any transaction is a deposit, cannot become a balancing act.
|
* If any transaction is a deposit, cannot become a balancing act.
|
||||||
*/
|
*/
|
||||||
foreach ($tag->transactionjournals as $journal) {
|
foreach ($tag->transactionjournals as $journal) {
|
||||||
if ($journal->transactionType->type == 'Deposit') {
|
if ($journal->isDeposit()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -239,10 +239,10 @@ class TagRepository implements TagRepositoryInterface
|
|||||||
protected function connectBalancingAct(TransactionJournal $journal, Tag $tag)
|
protected function connectBalancingAct(TransactionJournal $journal, Tag $tag)
|
||||||
{
|
{
|
||||||
/** @var TransactionType $withdrawal */
|
/** @var TransactionType $withdrawal */
|
||||||
$withdrawal = TransactionType::whereType('Withdrawal')->first();
|
$withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first();
|
||||||
$withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count();
|
$withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count();
|
||||||
/** @var TransactionType $transfer */
|
/** @var TransactionType $transfer */
|
||||||
$transfer = TransactionType::whereType('Transfer')->first();
|
$transfer = TransactionType::whereType(TransactionType::TRANSFER)->first();
|
||||||
$transfers = $tag->transactionjournals()->where('transaction_type_id', $transfer->id)->count();
|
$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)
|
protected function connectAdvancePayment(TransactionJournal $journal, Tag $tag)
|
||||||
{
|
{
|
||||||
/** @var TransactionType $transfer */
|
/** @var TransactionType $transfer */
|
||||||
$transfer = TransactionType::whereType('Transfer')->first();
|
$transfer = TransactionType::whereType(TransactionType::TRANSFER)->first();
|
||||||
/** @var TransactionType $withdrawal */
|
/** @var TransactionType $withdrawal */
|
||||||
$withdrawal = TransactionType::whereType('Withdrawal')->first();
|
$withdrawal = TransactionType::whereType(TransactionType::WITHDRAWAL)->first();
|
||||||
/** @var TransactionType $deposit */
|
/** @var TransactionType $deposit */
|
||||||
$deposit = TransactionType::whereType('Deposit')->first();
|
$deposit = TransactionType::whereType(TransactionType::DEPOSIT)->first();
|
||||||
|
|
||||||
$withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count();
|
$withdrawals = $tag->transactionjournals()->where('transaction_type_id', $withdrawal->id)->count();
|
||||||
$deposits = $tag->transactionjournals()->where('transaction_type_id', $deposit->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) {
|
foreach ($tag->transactionjournals as $check) {
|
||||||
// $checkAccount is the source_account for a withdrawal
|
// $checkAccount is the source_account for a withdrawal
|
||||||
// $checkAccount is the destination_account for a deposit
|
// $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;
|
$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;
|
$match = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,13 +100,13 @@ class Amount
|
|||||||
$symbol = $journal->symbol;
|
$symbol = $journal->symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($journal->transactionType->type == 'Transfer' && $coloured) {
|
if ($journal->isTransfer() && $coloured) {
|
||||||
$txt = '<span class="text-info">' . $this->formatWithSymbol($symbol, $journal->amount_positive, false) . '</span>';
|
$txt = '<span class="text-info">' . $this->formatWithSymbol($symbol, $journal->amount_positive, false) . '</span>';
|
||||||
$cache->store($txt);
|
$cache->store($txt);
|
||||||
|
|
||||||
return $txt;
|
return $txt;
|
||||||
}
|
}
|
||||||
if ($journal->transactionType->type == 'Transfer' && !$coloured) {
|
if ($journal->isTransfer() && !$coloured) {
|
||||||
$txt = $this->formatWithSymbol($symbol, $journal->amount_positive, false);
|
$txt = $this->formatWithSymbol($symbol, $journal->amount_positive, false);
|
||||||
$cache->store($txt);
|
$cache->store($txt);
|
||||||
|
|
||||||
|
@ -68,19 +68,17 @@ class Journal extends Twig_Extension
|
|||||||
return $cache->get(); // @codeCoverageIgnore
|
return $cache->get(); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
$type = $journal->transactionType->type;
|
switch (true) {
|
||||||
|
case $journal->isWithdrawal():
|
||||||
switch ($type) {
|
|
||||||
case 'Withdrawal':
|
|
||||||
$txt = '<i class="fa fa-long-arrow-left fa-fw" title="' . trans('firefly.withdrawal') . '"></i>';
|
$txt = '<i class="fa fa-long-arrow-left fa-fw" title="' . trans('firefly.withdrawal') . '"></i>';
|
||||||
break;
|
break;
|
||||||
case 'Deposit':
|
case $journal->isDeposit():
|
||||||
$txt = '<i class="fa fa-long-arrow-right fa-fw" title="' . trans('firefly.deposit') . '"></i>';
|
$txt = '<i class="fa fa-long-arrow-right fa-fw" title="' . trans('firefly.deposit') . '"></i>';
|
||||||
break;
|
break;
|
||||||
case 'Transfer':
|
case $journal->isTransfer():
|
||||||
$txt = '<i class="fa fa-fw fa-exchange" title="' . trans('firefly.transfer') . '"></i>';
|
$txt = '<i class="fa fa-fw fa-exchange" title="' . trans('firefly.transfer') . '"></i>';
|
||||||
break;
|
break;
|
||||||
case 'Opening balance':
|
case $journal->isOpeningBalance():
|
||||||
$txt = '<i class="fa-fw fa fa-ban" title="' . trans('firefly.openingBalance') . '"></i>';
|
$txt = '<i class="fa-fw fa fa-ban" title="' . trans('firefly.openingBalance') . '"></i>';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -189,7 +187,7 @@ class Journal extends Twig_Extension
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($tag->tagMode == 'advancePayment') {
|
if ($tag->tagMode == 'advancePayment') {
|
||||||
if ($journal->transactionType->type == 'Deposit') {
|
if ($journal->isDeposit()) {
|
||||||
$amount = app('amount')->formatJournal($journal, false);
|
$amount = app('amount')->formatJournal($journal, false);
|
||||||
$string = '<a href="' . route('tags.show', [$tag->id]) . '" class="label label-success" title="' . $amount
|
$string = '<a href="' . route('tags.show', [$tag->id]) . '" class="label label-success" title="' . $amount
|
||||||
. '"><i class="fa fa-fw fa-sort-numeric-desc"></i> ' . $tag->tag . '</a>';
|
. '"><i class="fa fa-fw fa-sort-numeric-desc"></i> ' . $tag->tag . '</a>';
|
||||||
@ -201,7 +199,7 @@ class Journal extends Twig_Extension
|
|||||||
* AdvancePayment with a withdrawal will show the amount with a link to
|
* AdvancePayment with a withdrawal will show the amount with a link to
|
||||||
* the tag. The TransactionJournal should properly calculate the amount.
|
* the tag. The TransactionJournal should properly calculate the amount.
|
||||||
*/
|
*/
|
||||||
if ($journal->transactionType->type == 'Withdrawal') {
|
if ($journal->isWithdrawal()) {
|
||||||
$amount = app('amount')->formatJournal($journal);
|
$amount = app('amount')->formatJournal($journal);
|
||||||
|
|
||||||
$string = '<a href="' . route('tags.show', [$tag->id]) . '">' . $amount . '</a>';
|
$string = '<a href="' . route('tags.show', [$tag->id]) . '">' . $amount . '</a>';
|
||||||
|
@ -49,7 +49,7 @@ return [
|
|||||||
|
|
||||||
'sqlite' => [
|
'sqlite' => [
|
||||||
'driver' => 'sqlite',
|
'driver' => 'sqlite',
|
||||||
'database' => __DIR__ . '/../storage/database/testing.db',
|
'database' => storage_path('database/testing.db'),
|
||||||
'prefix' => '',
|
'prefix' => '',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -12,10 +12,10 @@ class TransactionTypeSeeder extends Seeder
|
|||||||
|
|
||||||
DB::table('transaction_types')->delete();
|
DB::table('transaction_types')->delete();
|
||||||
|
|
||||||
TransactionType::create(['type' => 'Withdrawal']);
|
TransactionType::create(['type' => TransactionType::WITHDRAWAL]);
|
||||||
TransactionType::create(['type' => 'Deposit']);
|
TransactionType::create(['type' => TransactionType::DEPOSIT]);
|
||||||
TransactionType::create(['type' => 'Transfer']);
|
TransactionType::create(['type' => TransactionType::TRANSFER]);
|
||||||
TransactionType::create(['type' => 'Opening balance']);
|
TransactionType::create(['type' => TransactionType::OPENING_BALANCE]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Carbon\Carbon;
|
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
|
||||||
use League\FactoryMuffin\Facade as FactoryMuffin;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class TestCase
|
* Class TestCase
|
||||||
*/
|
*/
|
||||||
@ -52,20 +48,4 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
{
|
{
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $class
|
|
||||||
*
|
|
||||||
* @return Mockery\MockInterface
|
|
||||||
*/
|
|
||||||
public function mock($class)
|
|
||||||
{
|
|
||||||
$mock = Mockery::mock($class);
|
|
||||||
|
|
||||||
$this->app->instance($class, $mock);
|
|
||||||
|
|
||||||
return $mock;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class ExampleTest
|
|
||||||
*/
|
|
||||||
class ExampleTest extends \PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
protected function setUp()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function tearDown()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// tests
|
|
||||||
public function testMe()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
32
tests/unit/Models/TransactionTypeTest.php
Normal file
32
tests/unit/Models/TransactionTypeTest.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace FireflyIII\Models;
|
||||||
|
|
||||||
|
use TestCase;
|
||||||
|
|
||||||
|
class TransactionTypeTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testIsWithdrawal()
|
||||||
|
{
|
||||||
|
$transactionType = TransactionType::whereType(TransactionType::WITHDRAWAL)->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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user