From 19f7027718b5ebe4695d2f0802a9a4d9bdfd56f0 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 9 Mar 2018 04:47:43 +0100 Subject: [PATCH] Fix #1198 --- app/Http/Requests/SplitJournalFormRequest.php | 5 ++-- .../Support/TransactionServiceTrait.php | 2 ++ .../Update/TransactionUpdateService.php | 4 ++-- app/Support/Twig/Extension/Transaction.php | 23 ++++++++++++------- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/app/Http/Requests/SplitJournalFormRequest.php b/app/Http/Requests/SplitJournalFormRequest.php index e53d4074df..51de56ceed 100644 --- a/app/Http/Requests/SplitJournalFormRequest.php +++ b/app/Http/Requests/SplitJournalFormRequest.php @@ -22,8 +22,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Requests; -use Steam; - /** * Class SplitJournalFormRequest. */ @@ -77,13 +75,14 @@ class SplitJournalFormRequest extends Request break; } $foreignAmount = $transaction['foreign_amount'] ?? null; + $foreignCurrencyId = intval($transaction['foreign_currency_id'] ?? 0); $set = [ 'source_id' => $sourceId, 'source_name' => $sourceName, 'destination_id' => $destinationId, 'destination_name' => $destinationName, 'foreign_amount' => $foreignAmount, - 'foreign_currency_id' => null, + 'foreign_currency_id' => $foreignCurrencyId, 'foreign_currency_code' => null, 'reconciled' => false, 'identifier' => $index, diff --git a/app/Services/Internal/Support/TransactionServiceTrait.php b/app/Services/Internal/Support/TransactionServiceTrait.php index 640ab43e12..975e3a9612 100644 --- a/app/Services/Internal/Support/TransactionServiceTrait.php +++ b/app/Services/Internal/Support/TransactionServiceTrait.php @@ -258,6 +258,8 @@ trait TransactionServiceTrait protected function setForeignCurrency(Transaction $transaction, ?TransactionCurrency $currency): void { if (is_null($currency)) { + $transaction->foreign_currency_id = null; + $transaction->save(); return; } $transaction->foreign_currency_id = $currency->id; diff --git a/app/Services/Internal/Update/TransactionUpdateService.php b/app/Services/Internal/Update/TransactionUpdateService.php index cc590af100..8578bd1675 100644 --- a/app/Services/Internal/Update/TransactionUpdateService.php +++ b/app/Services/Internal/Update/TransactionUpdateService.php @@ -107,11 +107,11 @@ class TransactionUpdateService // set foreign currency $foreign = $this->findCurrency($data['foreign_currency_id'], $data['foreign_currency_code']); // set foreign amount: - if (!is_null($data['foreign_amount'])) { + if (!is_null($data['foreign_amount']) && !is_null($foreign)) { $this->setForeignCurrency($transaction, $foreign); $this->setForeignAmount($transaction, $foreignAmount); } - if (is_null($data['foreign_amount'])) { + if (is_null($data['foreign_amount']) || is_null($foreign)) { $this->setForeignCurrency($transaction, null); $this->setForeignAmount($transaction, null); } diff --git a/app/Support/Twig/Extension/Transaction.php b/app/Support/Twig/Extension/Transaction.php index 8d4ca0e84d..b77117531b 100644 --- a/app/Support/Twig/Extension/Transaction.php +++ b/app/Support/Twig/Extension/Transaction.php @@ -28,6 +28,7 @@ use FireflyIII\Models\Transaction as TransactionModel; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use Lang; +use Log; use Twig_Extension; /** @@ -223,6 +224,7 @@ class Transaction extends Twig_Extension } /** + * TODO improve code * @param TransactionModel $transaction * * @return string @@ -249,14 +251,19 @@ class Transaction extends Twig_Extension // if the amount is negative, find the opposing account and use that one: $journalId = $transaction->journal_id; /** @var TransactionModel $other */ - $other = TransactionModel::where('transaction_journal_id', $journalId)->where('transactions.id', '!=', $transaction->id) - ->where('amount', '=', bcmul($transaction->transaction_amount, '-1'))->where( - 'identifier', - $transaction->identifier - ) - ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') - ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') - ->first(['transactions.account_id', 'accounts.encrypted', 'accounts.name', 'account_types.type']); + $other = TransactionModel + ::where('transaction_journal_id', $journalId) + ->where('transactions.id', '!=', $transaction->id) + ->where('amount', '=', bcmul($transaction->transaction_amount, '-1')) + ->where('identifier', $transaction->identifier) + ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') + ->leftJoin('account_types', 'account_types.id', '=', 'accounts.account_type_id') + ->first(['transactions.account_id', 'accounts.encrypted', 'accounts.name', 'account_types.type']); + if (is_null($other)) { + Log::error(sprintf('Cannot find other transaction for journal #%d', $journalId)); + + return ''; + } $name = app('steam')->tryDecrypt($other->name); $transactionId = $other->account_id; $type = $other->type;