Large commit to get rid of a lot of static methods.

This commit is contained in:
James Cole
2017-03-04 07:18:35 +01:00
parent 33c20c8dc4
commit d9aa074330
25 changed files with 144 additions and 169 deletions

View File

@@ -140,7 +140,7 @@ class StoredJournalEventHandler
*/
private function getExactAmount(TransactionJournal $journal, PiggyBank $piggyBank, PiggyBankRepetition $repetition): string
{
$amount = TransactionJournal::amountPositive($journal);
$amount = $journal->amountPositive();
$sources = TransactionJournal::sourceAccountList($journal)->pluck('id')->toArray();
$room = bcsub(strval($piggyBank->targetamount), strval($repetition->currentamount));
$compare = bcmul($repetition->currentamount, '-1');

View File

@@ -275,7 +275,7 @@ class ReportController extends Controller
$journals = $journals->filter(
function (Transaction $transaction) use ($report) {
// get the destinations:
$destinations = TransactionJournal::destinationAccountList($transaction->transactionJournal)->pluck('id')->toArray();
$destinations = $transaction->transactionJournal->destinationAccountList()->pluck('id')->toArray();
// do these intersect with the current list?
return !empty(array_intersect($report, $destinations));

View File

@@ -159,8 +159,8 @@ class TagController extends Controller
/*
* Can this tag become another type?
*/
$allowAdvance = Tag::tagAllowAdvance($tag);
$allowToBalancingAct = Tag::tagAllowBalancing($tag);
$allowAdvance = $tag->tagAllowAdvance();
$allowToBalancingAct = $tag->tagAllowBalancing();
// edit tag options:
if ($allowAdvance === false) {

View File

@@ -64,11 +64,13 @@ class ConvertController extends Controller
*/
public function index(TransactionType $destinationType, TransactionJournal $journal)
{
// @codeCoverageIgnoreStart
if ($this->isOpeningBalance($journal)) {
return $this->redirectToAccount($journal);
}
// @codeCoverageIgnoreEnd
$positiveAmount = TransactionJournal::amountPositive($journal);
$positiveAmount = $journal->amountPositive();
$assetAccounts = ExpandedForm::makeSelectList($this->accounts->getActiveAccountsByType([AccountType::DEFAULT, AccountType::ASSET]));
$sourceType = $journal->transactionType;
$subTitle = trans('firefly.convert_to_' . $destinationType->type, ['description' => $journal->description]);
@@ -89,8 +91,8 @@ class ConvertController extends Controller
}
// get source and destination account:
$sourceAccount = TransactionJournal::sourceAccountList($journal)->first();
$destinationAccount = TransactionJournal::destinationAccountList($journal)->first();
$sourceAccount = $journal->sourceAccountList()->first();
$destinationAccount = $journal->destinationAccountList()->first();
return view(
'transactions.convert',
@@ -165,8 +167,8 @@ class ConvertController extends Controller
{
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
$sourceAccount = TransactionJournal::sourceAccountList($journal)->first();
$destinationAccount = TransactionJournal::destinationAccountList($journal)->first();
$sourceAccount = $journal->sourceAccountList()->first();
$destinationAccount = $journal->destinationAccountList()->first();
$sourceType = $journal->transactionType;
$joined = $sourceType->type . '-' . $destinationType->type;
switch ($joined) {
@@ -210,8 +212,8 @@ class ConvertController extends Controller
{
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
$sourceAccount = TransactionJournal::sourceAccountList($journal)->first();
$destinationAccount = TransactionJournal::destinationAccountList($journal)->first();
$sourceAccount = $journal->sourceAccountList()->first();
$destinationAccount = $journal->destinationAccountList()->first();
$sourceType = $journal->transactionType;
$joined = $sourceType->type . '-' . $destinationType->type;
switch ($joined) {

View File

@@ -130,8 +130,8 @@ class MassController extends Controller
* @var TransactionJournal $journal
*/
foreach ($journals as $index => $journal) {
$sources = TransactionJournal::sourceAccountList($journal);
$destinations = TransactionJournal::destinationAccountList($journal);
$sources = $journal->sourceAccountList($journal);
$destinations = $journal->destinationAccountList($journal);
if ($sources->count() > 1) {
$messages[] = trans('firefly.cannot_edit_multiple_source', ['description' => $journal->description, 'id' => $journal->id]);
continue;
@@ -156,9 +156,9 @@ class MassController extends Controller
// set some values to be used in the edit routine:
$filtered->each(
function (TransactionJournal $journal) {
$journal->amount = TransactionJournal::amountPositive($journal);
$sources = TransactionJournal::sourceAccountList($journal);
$destinations = TransactionJournal::destinationAccountList($journal);
$journal->amount = $journal->amountPositive();
$sources = $journal->sourceAccountList();
$destinations = $journal->destinationAccountList();
$journal->transaction_count = $journal->transactions()->count();
if (!is_null($sources->first())) {
$journal->source_account_id = $sources->first()->id;

View File

@@ -83,8 +83,8 @@ class SingleController extends Controller
public function cloneTransaction(TransactionJournal $journal)
{
$source = TransactionJournal::sourceAccountList($journal)->first();
$destination = TransactionJournal::destinationAccountList($journal)->first();
$source = $journal->sourceAccountList()->first();
$destination = $journal->destinationAccountList()->first();
$budget = $journal->budgets()->first();
$budgetId = is_null($budget) ? 0 : $budget->id;
$category = $journal->categories()->first();
@@ -98,7 +98,7 @@ class SingleController extends Controller
'source_account_name' => $source->name,
'destination_account_id' => $destination->id,
'destination_account_name' => $destination->name,
'amount' => TransactionJournal::amountPositive($journal),
'amount' => $journal->amountPositive(),
'date' => $journal->date->format('Y-m-d'),
'budget_id' => $budgetId,
'category' => $categoryName,
@@ -195,7 +195,7 @@ class SingleController extends Controller
return $this->redirectToAccount($transactionJournal);
}
// @codeCoverageIgnoreEnd
$type = TransactionJournal::transactionTypeStr($transactionJournal);
$type = $transactionJournal->transactionTypeStr();
Session::flash('success', strval(trans('firefly.deleted_' . strtolower($type), ['description' => e($transactionJournal->description)])));
$repository->delete($transactionJournal);
@@ -224,7 +224,7 @@ class SingleController extends Controller
return redirect(route('transactions.split.edit', [$journal->id]));
}
$what = strtolower(TransactionJournal::transactionTypeStr($journal));
$what = strtolower($journal->transactionTypeStr());
$assetAccounts = ExpandedForm::makeSelectList($this->accounts->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]));
$budgetList = ExpandedForm::makeSelectListWithEmpty($this->budgets->getBudgets());
@@ -233,27 +233,27 @@ class SingleController extends Controller
// journal related code
$sourceAccounts = TransactionJournal::sourceAccountList($journal);
$destinationAccounts = TransactionJournal::destinationAccountList($journal);
$sourceAccounts = $journal->sourceAccountList();
$destinationAccounts = $journal->destinationAccountList();
$optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data;
$preFilled = [
'date' => TransactionJournal::dateAsString($journal),
'interest_date' => TransactionJournal::dateAsString($journal, 'interest_date'),
'book_date' => TransactionJournal::dateAsString($journal, 'book_date'),
'process_date' => TransactionJournal::dateAsString($journal, 'process_date'),
'category' => TransactionJournal::categoryAsString($journal),
'budget_id' => TransactionJournal::budgetId($journal),
'date' => $journal->dateAsString(),
'interest_date' => $journal->dateAsString( 'interest_date'),
'book_date' => $journal->dateAsString('book_date'),
'process_date' => $journal->dateAsString('process_date'),
'category' => $journal->categoryAsString(),
'budget_id' => $journal->budgetId(),
'tags' => join(',', $journal->tags->pluck('tag')->toArray()),
'source_account_id' => $sourceAccounts->first()->id,
'source_account_name' => $sourceAccounts->first()->edit_name,
'destination_account_id' => $destinationAccounts->first()->id,
'destination_account_name' => $destinationAccounts->first()->edit_name,
'amount' => TransactionJournal::amountPositive($journal),
'amount' => $journal->amountPositive(),
// new custom fields:
'due_date' => TransactionJournal::dateAsString($journal, 'due_date'),
'payment_date' => TransactionJournal::dateAsString($journal, 'payment_date'),
'invoice_date' => TransactionJournal::dateAsString($journal, 'invoice_date'),
'due_date' => $journal->dateAsString('due_date'),
'payment_date' => $journal->dateAsString('payment_date'),
'invoice_date' => $journal->dateAsString('invoice_date'),
'interal_reference' => $journal->getMeta('internal_reference'),
'notes' => $journal->getMeta('notes'),
];
@@ -369,7 +369,7 @@ class SingleController extends Controller
event(new UpdatedTransactionJournal($journal));
// update, get events by date and sort DESC
$type = strtolower(TransactionJournal::transactionTypeStr($journal));
$type = strtolower($journal->transactionTypeStr());
Session::flash('success', strval(trans('firefly.updated_' . $type, ['description' => e($data['description'])])));
Preferences::mark();

View File

@@ -209,18 +209,18 @@ class SplitController extends Controller
*/
private function arrayFromJournal(Request $request, TransactionJournal $journal): array
{
$sourceAccounts = TransactionJournal::sourceAccountList($journal);
$destinationAccounts = TransactionJournal::destinationAccountList($journal);
$sourceAccounts = $journal->sourceAccountList();
$destinationAccounts = $journal->destinationAccountList();
$array = [
'journal_description' => $request->old('journal_description', $journal->description),
'journal_amount' => TransactionJournal::amountPositive($journal),
'journal_amount' => $journal->amountPositive(),
'sourceAccounts' => $sourceAccounts,
'journal_source_account_id' => $request->old('journal_source_account_id', $sourceAccounts->first()->id),
'journal_source_account_name' => $request->old('journal_source_account_name', $sourceAccounts->first()->name),
'journal_destination_account_id' => $request->old('journal_destination_account_id', $destinationAccounts->first()->id),
'currency_id' => $request->old('currency_id', $journal->transaction_currency_id),
'destinationAccounts' => $destinationAccounts,
'what' => strtolower(TransactionJournal::transactionTypeStr($journal)),
'what' => strtolower($journal->transactionTypeStr()),
'date' => $request->old('date', $journal->date),
'tags' => join(',', $journal->tags->pluck('tag')->toArray()),
@@ -265,8 +265,8 @@ class SplitController extends Controller
// set initial category and/or budget:
if (count($transactions) === 1 && $index === 0) {
$set['budget_id'] = TransactionJournal::budgetId($journal);
$set['category'] = TransactionJournal::categoryAsString($journal);
$set['budget_id'] = $journal->budgetId();
$set['category'] = $journal->categoryAsString();
}
$return[] = $set;

View File

@@ -14,7 +14,8 @@ declare(strict_types = 1);
namespace FireflyIII\Models;
use Crypt;
use FireflyIII\Support\Models\TagSupport;
use FireflyIII\Support\Models\TagTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Watson\Validating\ValidatingTrait;
@@ -24,8 +25,10 @@ use Watson\Validating\ValidatingTrait;
*
* @package FireflyIII\Models
*/
class Tag extends TagSupport
class Tag extends Model
{
use ValidatingTrait, SoftDeletes, TagTrait;
/**
* The attributes that should be casted to native types.
*
@@ -44,7 +47,6 @@ class Tag extends TagSupport
protected $fillable = ['user_id', 'tag', 'date', 'description', 'longitude', 'latitude', 'zoomLevel', 'tagMode'];
protected $rules = ['tag' => 'required|between:1,200',];
use ValidatingTrait, SoftDeletes;
/**
* @param array $fields
@@ -103,7 +105,7 @@ class Tag extends TagSupport
$sum = '0';
/** @var TransactionJournal $journal */
foreach ($tag->transactionjournals as $journal) {
bcadd($sum, TransactionJournal::amount($journal));
bcadd($sum, $journal->amount());
}
return $sum;

View File

@@ -16,8 +16,9 @@ namespace FireflyIII\Models;
use Carbon\Carbon;
use Crypt;
use FireflyIII\Support\CacheProperties;
use FireflyIII\Support\Models\TransactionJournalSupport;
use FireflyIII\Support\Models\TransactionJournalTrait;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Log;
@@ -30,9 +31,9 @@ use Watson\Validating\ValidatingTrait;
*
* @package FireflyIII\Models
*/
class TransactionJournal extends TransactionJournalSupport
class TransactionJournal extends Model
{
use SoftDeletes, ValidatingTrait;
use SoftDeletes, ValidatingTrait, TransactionJournalTrait;
/**
* The attributes that should be casted to native types.

View File

@@ -251,7 +251,7 @@ class BillRepository implements BillRepositoryInterface
$count = strval($journals->count());
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
$sum = bcadd($sum, TransactionJournal::amountPositive($journal));
$sum = bcadd($sum, $journal->amountPositive());
}
$avg = '0';
if ($journals->count() > 0) {
@@ -370,7 +370,7 @@ class BillRepository implements BillRepositoryInterface
$count = strval($journals->count());
/** @var TransactionJournal $journal */
foreach ($journals as $journal) {
$sum = bcadd($sum, TransactionJournal::amountPositive($journal));
$sum = bcadd($sum, $journal->amountPositive());
}
$avg = '0';
if ($journals->count() > 0) {
@@ -478,15 +478,15 @@ class BillRepository implements BillRepositoryInterface
if (false === $journal->isWithdrawal()) {
return false;
}
$destinationAccounts = TransactionJournal::destinationAccountList($journal);
$sourceAccounts = TransactionJournal::sourceAccountList($journal);
$destinationAccounts = $journal->destinationAccountList();
$sourceAccounts = $journal->sourceAccountList();
$matches = explode(',', $bill->match);
$description = strtolower($journal->description) . ' ';
$description .= strtolower(join(' ', $destinationAccounts->pluck('name')->toArray()));
$description .= strtolower(join(' ', $sourceAccounts->pluck('name')->toArray()));
$wordMatch = $this->doWordMatch($matches, $description);
$amountMatch = $this->doAmountMatch(TransactionJournal::amountPositive($journal), $bill->amount_min, $bill->amount_max);
$amountMatch = $this->doAmountMatch($journal->amountPositive(), $bill->amount_min, $bill->amount_max);
/*

View File

@@ -375,8 +375,8 @@ class TagRepository implements TagRepositoryInterface
*/
private function matchAll(TransactionJournal $journal, Tag $tag): bool
{
$journalSources = join(',', array_unique(TransactionJournal::sourceAccountList($journal)->pluck('id')->toArray()));
$journalDestinations = join(',', array_unique(TransactionJournal::destinationAccountList($journal)->pluck('id')->toArray()));
$journalSources = join(',', array_unique($journal->sourceAccountList()->pluck('id')->toArray()));
$journalDestinations = join(',', array_unique($journal->destinationAccountList()->pluck('id')->toArray()));
$match = true;
$journals = $tag->transactionJournals()->get(['transaction_journals.*']);
@@ -387,8 +387,8 @@ class TagRepository implements TagRepositoryInterface
Log::debug(sprintf('Now existingcomparing new journal #%d to existing journal #%d', $journal->id, $existing->id));
// $checkAccount is the source_account for a withdrawal
// $checkAccount is the destination_account for a deposit
$existingSources = join(',', array_unique(TransactionJournal::sourceAccountList($existing)->pluck('id')->toArray()));
$existingDestinations = join(',', array_unique(TransactionJournal::destinationAccountList($existing)->pluck('id')->toArray()));
$existingSources = join(',', array_unique($journal->sourceAccountList()->pluck('id')->toArray()));
$existingDestinations = join(',', array_unique($journal->destinationAccountList()->pluck('id')->toArray()));
if ($existing->isWithdrawal() && $existingSources !== $journalDestinations) {
/*

View File

@@ -58,7 +58,7 @@ final class AmountExactly extends AbstractTrigger implements TriggerInterface
*/
public function triggered(TransactionJournal $journal): bool
{
$amount = $journal->destination_amount ?? TransactionJournal::amountPositive($journal);
$amount = $journal->destination_amount ?? $journal->amountPositive();
$compare = $this->triggerValue;
$result = bccomp($amount, $compare);
if ($result === 0) {

View File

@@ -58,7 +58,7 @@ final class AmountLess extends AbstractTrigger implements TriggerInterface
*/
public function triggered(TransactionJournal $journal): bool
{
$amount = $journal->destination_amount ?? TransactionJournal::amountPositive($journal);
$amount = $journal->destination_amount ?? $journal->amountPositive();
$compare = $this->triggerValue;
$result = bccomp($amount, $compare);
if ($result === -1) {

View File

@@ -64,7 +64,7 @@ final class AmountMore extends AbstractTrigger implements TriggerInterface
*/
public function triggered(TransactionJournal $journal): bool
{
$amount = $journal->destination_amount ?? TransactionJournal::amountPositive($journal);
$amount = $journal->destination_amount ?? $journal->amountPositive();
$compare = $this->triggerValue;
$result = bccomp($amount, $compare);
if ($result === 1) {

View File

@@ -66,7 +66,7 @@ final class ToAccountContains extends AbstractTrigger implements TriggerInterfac
$toAccountName = '';
/** @var Account $account */
foreach (TransactionJournal::destinationAccountList($journal) as $account) {
foreach ($journal->destinationAccountList() as $account) {
$toAccountName .= strtolower($account->name);
}

View File

@@ -66,7 +66,7 @@ final class ToAccountEnds extends AbstractTrigger implements TriggerInterface
$toAccountName = '';
/** @var Account $account */
foreach (TransactionJournal::destinationAccountList($journal) as $account) {
foreach ($journal->destinationAccountList() as $account) {
$toAccountName .= strtolower($account->name);
}

View File

@@ -66,7 +66,7 @@ final class ToAccountIs extends AbstractTrigger implements TriggerInterface
$toAccountName = '';
/** @var Account $account */
foreach (TransactionJournal::destinationAccountList($journal) as $account) {
foreach ($journal->destinationAccountList() as $account) {
$toAccountName .= strtolower($account->name);
}

View File

@@ -66,7 +66,7 @@ final class ToAccountStarts extends AbstractTrigger implements TriggerInterface
$toAccountName = '';
/** @var Account $account */
foreach (TransactionJournal::destinationAccountList($journal) as $account) {
foreach ($journal->destinationAccountList() as $account) {
$toAccountName .= strtolower($account->name);
}

View File

@@ -187,7 +187,7 @@ class Amount
{
$currency = $journal->transactionCurrency;
return $this->formatAnything($currency, TransactionJournal::amount($journal), $coloured);
return $this->formatAnything($currency, $journal->amount(), $coloured);
}
/**

View File

@@ -39,7 +39,11 @@ class JournalList implements BinderInterface
$object = TransactionJournal::whereIn('transaction_journals.id', $ids)
->expanded()
->where('transaction_journals.user_id', auth()->user()->id)
->get(TransactionJournal::queryFields());
->get([
'transaction_journals.*',
'transaction_types.type AS transaction_type_type',
'transaction_currencies.code AS transaction_currency_code',
]);
if ($object->count() > 0) {
return $object;

View File

@@ -1,10 +1,8 @@
<?php
/**
* TagSupport.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International License.
* TagTrait.php
* Copyright (c) 2017 thegrumpydictator@gmail.com
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
*
* See the LICENSE file for details.
*/
@@ -17,28 +15,26 @@ use FireflyIII\Models\Tag;
use Illuminate\Database\Eloquent\Model;
/**
* FireflyIII\Support\Models\TagSupport
* Class TagSupport
*
* @mixin \Eloquent
* @package FireflyIII\Support\Models
*/
class TagSupport extends Model
trait TagTrait
{
/**
* Can a tag become an advance payment?
*
* @param Tag $tag
*
* @return bool
*/
public static function tagAllowAdvance(Tag $tag): bool
public function tagAllowAdvance(): bool
{
/*
* If this tag is a balancing act, and it contains transfers, it cannot be
* changes to an advancePayment.
*/
if ($tag->tagMode == 'balancingAct' || $tag->tagMode == 'nothing') {
foreach ($tag->transactionjournals as $journal) {
if ($this->tagMode == 'balancingAct' || $this->tagMode == 'nothing') {
foreach ($this->transactionjournals as $journal) {
if ($journal->isTransfer()) {
return false;
}
@@ -49,7 +45,7 @@ class TagSupport extends Model
* If this tag contains more than one expenses, it cannot become an advance payment.
*/
$count = 0;
foreach ($tag->transactionjournals as $journal) {
foreach ($this->transactionjournals as $journal) {
if ($journal->isWithdrawal()) {
$count++;
}
@@ -64,23 +60,21 @@ class TagSupport extends Model
/**
* Can a tag become a balancing act?
*
* @param Tag $tag
*
* @return bool
*/
public static function tagAllowBalancing(Tag $tag): bool
public function tagAllowBalancing(): bool
{
/*
* If has more than two transactions already, cannot become a balancing act:
*/
if ($tag->transactionjournals->count() > 2) {
if ($this->transactionjournals->count() > 2) {
return false;
}
/*
* If any transaction is a deposit, cannot become a balancing act.
*/
foreach ($tag->transactionjournals as $journal) {
foreach ($this->transactionjournals as $journal) {
if ($journal->isDeposit()) {
return false;
}

View File

@@ -1,10 +1,8 @@
<?php
/**
* TransactionJournalSupport.php
* Copyright (C) 2016 thegrumpydictator@gmail.com
*
* This software may be modified and distributed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International License.
* TransactionJournalTrait.php
* Copyright (c) 2017 thegrumpydictator@gmail.com
* This software may be modified and distributed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International License.
*
* See the LICENSE file for details.
*/
@@ -24,24 +22,21 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
/**
* Class TransactionJournalSupport
* Class TransactionJournalTrait
*
* @package FireflyIII\Support\Models
* @mixin \Eloquent
*/
class TransactionJournalSupport extends Model
trait TransactionJournalTrait
{
/**
* @param TransactionJournal $journal
*
* @return string
* @throws FireflyException
*/
public static function amount(TransactionJournal $journal): string
public function amount(): string
{
$cache = new CacheProperties;
$cache->addProperty($journal->id);
$cache->addProperty($this->id);
$cache->addProperty('transaction-journal');
$cache->addProperty('amount');
if ($cache->has()) {
@@ -49,9 +44,9 @@ class TransactionJournalSupport extends Model
}
// saves on queries:
$amount = $journal->transactions()->where('amount', '>', 0)->get()->sum('amount');
$amount = $this->transactions()->where('amount', '>', 0)->get()->sum('amount');
if ($journal->isWithdrawal()) {
if ($this->isWithdrawal()) {
$amount = $amount * -1;
}
$amount = strval($amount);
@@ -61,14 +56,12 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
*
* @return string
*/
public static function amountPositive(TransactionJournal $journal): string
public function amountPositive(): string
{
$cache = new CacheProperties;
$cache->addProperty($journal->id);
$cache->addProperty($this->id);
$cache->addProperty('transaction-journal');
$cache->addProperty('amount-positive');
if ($cache->has()) {
@@ -76,7 +69,7 @@ class TransactionJournalSupport extends Model
}
// saves on queries:
$amount = $journal->transactions()->where('amount', '>', 0)->get()->sum('amount');
$amount = $this->transactions()->where('amount', '>', 0)->get()->sum('amount');
$amount = strval($amount);
$cache->store($amount);
@@ -85,13 +78,11 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
*
* @return int
*/
public static function budgetId(TransactionJournal $journal): int
public function budgetId(): int
{
$budget = $journal->budgets()->first();
$budget = $this->budgets()->first();
if (!is_null($budget)) {
return $budget->id;
}
@@ -100,13 +91,11 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
*
* @return string
*/
public static function categoryAsString(TransactionJournal $journal): string
public function categoryAsString(): string
{
$category = $journal->categories()->first();
$category = $this->categories()->first();
if (!is_null($category)) {
return $category->name;
}
@@ -115,29 +104,28 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
* @param string $dateField
*
* @return string
*/
public static function dateAsString(TransactionJournal $journal, string $dateField = ''): string
public function dateAsString(string $dateField = ''): string
{
if ($dateField === '') {
return $journal->date->format('Y-m-d');
return $this->date->format('Y-m-d');
}
if (!is_null($journal->$dateField) && $journal->$dateField instanceof Carbon) {
if (!is_null($this->$dateField) && $this->$dateField instanceof Carbon) {
// make field NULL
$carbon = clone $journal->$dateField;
$journal->$dateField = null;
$journal->save();
$carbon = clone $this->$dateField;
$this->$dateField = null;
$this->save();
// create meta entry
$journal->setMeta($dateField, $carbon);
$this->setMeta($dateField, $carbon);
// return that one instead.
return $carbon->format('Y-m-d');
}
$metaField = $journal->getMeta($dateField);
$metaField = $this->getMeta($dateField);
if (!is_null($metaField)) {
$carbon = new Carbon($metaField);
@@ -150,20 +138,18 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
*
* @return Collection
*/
public static function destinationAccountList(TransactionJournal $journal): Collection
public function destinationAccountList(): Collection
{
$cache = new CacheProperties;
$cache->addProperty($journal->id);
$cache->addProperty($this->id);
$cache->addProperty('transaction-journal');
$cache->addProperty('destination-account-list');
if ($cache->has()) {
return $cache->get();
}
$transactions = $journal->transactions()->where('amount', '>', 0)->orderBy('transactions.account_id')->with('account')->get();
$transactions = $this->transactions()->where('amount', '>', 0)->orderBy('transactions.account_id')->with('account')->get();
$list = new Collection;
/** @var Transaction $t */
foreach ($transactions as $t) {
@@ -175,20 +161,18 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
*
* @return Collection
*/
public static function destinationTransactionList(TransactionJournal $journal): Collection
public function destinationTransactionList(): Collection
{
$cache = new CacheProperties;
$cache->addProperty($journal->id);
$cache->addProperty($this->id);
$cache->addProperty('transaction-journal');
$cache->addProperty('destination-transaction-list');
if ($cache->has()) {
return $cache->get();
}
$list = $journal->transactions()->where('amount', '>', 0)->with('account')->get();
$list = $this->transactions()->where('amount', '>', 0)->with('account')->get();
$cache->store($list);
return $list;
@@ -200,7 +184,7 @@ class TransactionJournalSupport extends Model
*
* @return bool
*/
public static function isJoined(Builder $query, string $table): bool
public function isJoined(Builder $query, string $table): bool
{
$joins = $query->getQuery()->joins;
if (is_null($joins)) {
@@ -216,46 +200,30 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
*
* @return int
*/
public static function piggyBankId(TransactionJournal $journal): int
public function piggyBankId(): int
{
if ($journal->piggyBankEvents()->count() > 0) {
return $journal->piggyBankEvents()->orderBy('date', 'DESC')->first()->piggy_bank_id;
if ($this->piggyBankEvents()->count() > 0) {
return $this->piggyBankEvents()->orderBy('date', 'DESC')->first()->piggy_bank_id;
}
return 0;
}
/**
* @return array
*/
public static function queryFields(): array
{
return [
'transaction_journals.*',
'transaction_types.type AS transaction_type_type', // the other field is called "transaction_type_id" so this is pretty consistent.
'transaction_currencies.code AS transaction_currency_code',
];
}
/**
* @param TransactionJournal $journal
*
* @return Collection
*/
public static function sourceAccountList(TransactionJournal $journal): Collection
public function sourceAccountList(): Collection
{
$cache = new CacheProperties;
$cache->addProperty($journal->id);
$cache->addProperty($this->id);
$cache->addProperty('transaction-journal');
$cache->addProperty('source-account-list');
if ($cache->has()) {
return $cache->get();
}
$transactions = $journal->transactions()->where('amount', '<', 0)->orderBy('transactions.account_id')->with('account')->get();
$transactions = $this->transactions()->where('amount', '<', 0)->orderBy('transactions.account_id')->with('account')->get();
$list = new Collection;
/** @var Transaction $t */
foreach ($transactions as $t) {
@@ -267,41 +235,37 @@ class TransactionJournalSupport extends Model
}
/**
* @param TransactionJournal $journal
*
* @return Collection
*/
public static function sourceTransactionList(TransactionJournal $journal): Collection
public function sourceTransactionList(): Collection
{
$cache = new CacheProperties;
$cache->addProperty($journal->id);
$cache->addProperty($this->id);
$cache->addProperty('transaction-journal');
$cache->addProperty('source-transaction-list');
if ($cache->has()) {
return $cache->get();
}
$list = $journal->transactions()->where('amount', '<', 0)->with('account')->get();
$list = $this->transactions()->where('amount', '<', 0)->with('account')->get();
$cache->store($list);
return $list;
}
/**
* @param TransactionJournal $journal
*
* @return string
*/
public static function transactionTypeStr(TransactionJournal $journal): string
public function transactionTypeStr(): string
{
$cache = new CacheProperties;
$cache->addProperty($journal->id);
$cache->addProperty($this->id);
$cache->addProperty('transaction-journal');
$cache->addProperty('type-string');
if ($cache->has()) {
return $cache->get();
}
$typeStr = $journal->transaction_type_type ?? $journal->transactionType->type;
$typeStr = $this->transaction_type_type ?? $this->transactionType->type;
$cache->store($typeStr);
return $typeStr;

View File

@@ -310,7 +310,7 @@ class General extends Twig_Extension
{
return new Twig_SimpleFunction(
'getAmount', function (TransactionJournal $journal): string {
return TransactionJournal::amount($journal);
return $journal->amount();
}
);
}

View File

@@ -47,7 +47,7 @@ class Journal extends Twig_Extension
return $cache->get();
}
$list = TransactionJournal::destinationAccountList($journal);
$list = $journal->destinationAccountList();
$array = [];
/** @var Account $entry */
foreach ($list as $entry) {

View File

@@ -12,7 +12,10 @@ declare(strict_types = 1);
namespace Tests\Feature\Controllers\Transaction;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use Illuminate\Support\Collection;
use Tests\TestCase;
/**
@@ -28,9 +31,12 @@ class ConvertControllerTest extends TestCase
*/
public function testIndexDepositTransfer()
{
$deposit = TransactionJournal::where('transaction_type_id', 2)->where('user_id', $this->user()->id)->first();
// mock stuff:
$repository = $this->mock(AccountRepositoryInterface::class);
$repository->shouldReceive('getActiveAccountsByType')->withArgs([[AccountType::DEFAULT, AccountType::ASSET]])->once()->andReturn(new Collection);
$this->be($this->user());
$deposit = TransactionJournal::where('transaction_type_id', 2)->where('user_id', $this->user()->id)->first();
$response = $this->get(route('transactions.convert.index', ['transfer', $deposit->id]));
$response->assertStatus(200);
$response->assertSee('Convert a deposit into a transfer');
@@ -77,7 +83,7 @@ class ConvertControllerTest extends TestCase
*/
public function testIndexWithdrawalDeposit()
{
$withdrawal= TransactionJournal::where('transaction_type_id', 1)->where('user_id', $this->user()->id)->first();
$withdrawal = TransactionJournal::where('transaction_type_id', 1)->where('user_id', $this->user()->id)->first();
$this->be($this->user());
$response = $this->get(route('transactions.convert.index', ['deposit', $withdrawal->id]));
$response->assertStatus(200);
@@ -89,7 +95,7 @@ class ConvertControllerTest extends TestCase
*/
public function testIndexWithdrawalTransfer()
{
$withdrawal= TransactionJournal::where('transaction_type_id', 1)->where('user_id', $this->user()->id)->first();
$withdrawal = TransactionJournal::where('transaction_type_id', 1)->where('user_id', $this->user()->id)->first();
$this->be($this->user());
$response = $this->get(route('transactions.convert.index', ['transfer', $withdrawal->id]));
$response->assertStatus(200);
@@ -98,10 +104,12 @@ class ConvertControllerTest extends TestCase
/**
* @covers \FireflyIII\Http\Controllers\Transaction\ConvertController::postIndex
* @covers \FireflyIII\Http\Controllers\Transaction\ConvertController::getSourceAccount
* @covers \FireflyIII\Http\Controllers\Transaction\ConvertController::getDestinationAccount
*/
public function testPostIndex()
{
$withdrawal= TransactionJournal::where('transaction_type_id', 1)->where('user_id', $this->user()->id)->first();
$withdrawal = TransactionJournal::where('transaction_type_id', 1)->where('user_id', $this->user()->id)->first();
// convert a withdrawal to a transfer. Requires the ID of another asset account.
$data = [
'destination_account_asset' => 2,