diff --git a/app/Api/V1/Controllers/Models/CurrencyExchangeRate/StoreController.php b/app/Api/V1/Controllers/Models/CurrencyExchangeRate/StoreController.php index c52ffd1b9d..a2228832d7 100644 --- a/app/Api/V1/Controllers/Models/CurrencyExchangeRate/StoreController.php +++ b/app/Api/V1/Controllers/Models/CurrencyExchangeRate/StoreController.php @@ -100,9 +100,6 @@ class StoreController extends Controller $collection = new Collection(); foreach ($data['rates'] as $key => $rate) { $to = Amount::getTransactionCurrencyByCode($key); - if (null === $to) { - continue; // should not happen. - } $existing = $this->repository->getSpecificRateOnDate($from, $to, $date); if (null !== $existing) { // update existing rate. diff --git a/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreByDateRequest.php b/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreByDateRequest.php index 25dc0f14a2..48f28cb743 100644 --- a/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreByDateRequest.php +++ b/app/Api/V1/Requests/Models/CurrencyExchangeRate/StoreByDateRequest.php @@ -24,12 +24,13 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; -use Illuminate\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Validator; class StoreByDateRequest extends FormRequest { @@ -49,7 +50,7 @@ class StoreByDateRequest extends FormRequest public function getFromCurrency(): TransactionCurrency { - return Amount::getTransactionCurrencyByCode((string) $this->get('from')); + return Amount::getTransactionCurrencyByCode((string)$this->get('from')); } /** @@ -84,8 +85,9 @@ class StoreByDateRequest extends FormRequest continue; } - $to = Amount::getTransactionCurrencyByCode((string) $key); - if (null === $to) { + try { + $to = Amount::getTransactionCurrencyByCode((string)$key); + } catch (FireflyException) { $validator->errors()->add(sprintf('rates.%s', $key), trans('validation.invalid_currency_code', ['code' => $key])); } } diff --git a/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php b/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php index dc86d72e68..3ea6c1727b 100644 --- a/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php +++ b/app/Api/V1/Requests/Models/PiggyBank/StoreRequest.php @@ -136,16 +136,10 @@ class StoreRequest extends FormRequest private function getCurrencyFromData(Validator $validator, array $data): ?TransactionCurrency { if (array_key_exists('transaction_currency_code', $data) && '' !== (string) $data['transaction_currency_code']) { - $currency = Amount::getTransactionCurrencyByCode((string) $data['transaction_currency_code']); - if (null !== $currency) { - return $currency; - } + return Amount::getTransactionCurrencyByCode((string) $data['transaction_currency_code']); } if (array_key_exists('transaction_currency_id', $data) && '' !== (string) $data['transaction_currency_id']) { - $currency = Amount::getTransactionCurrencyById((int) $data['transaction_currency_id']); - if (null !== $currency) { - return $currency; - } + return Amount::getTransactionCurrencyById((int) $data['transaction_currency_id']); } $validator->errors()->add('transaction_currency_id', trans('validation.require_currency_id_code')); diff --git a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php index 34304e39db..a66ffab2c9 100644 --- a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php +++ b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php @@ -287,10 +287,8 @@ trait ModifiesPiggyBanks $piggyBank->name = $data['name']; } if (array_key_exists('transaction_currency_id', $data) && is_int($data['transaction_currency_id'])) { - $currency = Amount::getTransactionCurrencyById($data['transaction_currency_id']); - if (null !== $currency) { - $piggyBank->transaction_currency_id = $currency->id; - } + $currency = Amount::getTransactionCurrencyById($data['transaction_currency_id']); + $piggyBank->transaction_currency_id = $currency->id; } if (array_key_exists('target_amount', $data) && '' !== $data['target_amount']) { diff --git a/app/Support/Amount.php b/app/Support/Amount.php index a9b81392e1..f8669e558e 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -33,6 +33,7 @@ use FireflyIII\Support\Facades\Steam; use FireflyIII\Support\Singleton\PreferencesSingleton; use FireflyIII\User; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\Log; use NumberFormatter; /** @@ -126,7 +127,9 @@ class Amount } $currency = TransactionCurrency::find($currencyId); if (null === $currency) { - throw new FireflyException(sprintf('Could not find a transaction currency with ID #%d', $currencyId)); + $message = sprintf('Could not find a transaction currency with ID #%d', $currencyId); + Log::error($message); + throw new FireflyException($message); } $instance->setPreference($key, $currency); return $currency; @@ -143,7 +146,9 @@ class Amount } $currency = TransactionCurrency::whereCode($code)->first(); if (null === $currency) { - throw new FireflyException(sprintf('Could not find a transaction currency with code "%s"', $code)); + $message = sprintf('Could not find a transaction currency with code "%s"', $code); + Log::error($message); + throw new FireflyException($message); } $instance->setPreference($key, $currency); return $currency; diff --git a/app/Support/Http/Api/ExchangeRateConverter.php b/app/Support/Http/Api/ExchangeRateConverter.php index d992be48de..8abb75fe76 100644 --- a/app/Support/Http/Api/ExchangeRateConverter.php +++ b/app/Support/Http/Api/ExchangeRateConverter.php @@ -267,9 +267,6 @@ class ExchangeRateConverter } $euro = Amount::getTransactionCurrencyByCode('EUR'); ++$this->queryCount; - if (null === $euro) { - throw new FireflyException('Cannot find EUR in system, cannot do currency conversion.'); - } $cache->store($euro->id); return $euro->id; diff --git a/app/Support/Models/AccountBalanceCalculator.php b/app/Support/Models/AccountBalanceCalculator.php index 0fc8abd843..2a49ce3f71 100644 --- a/app/Support/Models/AccountBalanceCalculator.php +++ b/app/Support/Models/AccountBalanceCalculator.php @@ -25,10 +25,10 @@ declare(strict_types=1); namespace FireflyIII\Support\Models; use Carbon\Carbon; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Account; use FireflyIII\Models\AccountBalance; use FireflyIII\Models\Transaction; -use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionJournal; use FireflyIII\Support\Facades\Amount; use Illuminate\Support\Collection; @@ -72,15 +72,14 @@ class AccountBalanceCalculator $balances = []; $count = 0; $query = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->whereNull('transactions.deleted_at') - ->whereNull('transaction_journals.deleted_at') + ->whereNull('transactions.deleted_at') + ->whereNull('transaction_journals.deleted_at') // this order is the same as GroupCollector, but in the exact reverse. - ->orderBy('transaction_journals.date', 'asc') - ->orderBy('transaction_journals.order', 'desc') - ->orderBy('transaction_journals.id', 'asc') - ->orderBy('transaction_journals.description', 'asc') - ->orderBy('transactions.amount', 'asc') - ; + ->orderBy('transaction_journals.date', 'asc') + ->orderBy('transaction_journals.order', 'desc') + ->orderBy('transaction_journals.id', 'asc') + ->orderBy('transaction_journals.description', 'asc') + ->orderBy('transactions.amount', 'asc'); if ($accounts->count() > 0) { $query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray()); } @@ -89,7 +88,7 @@ class AccountBalanceCalculator $query->where('transaction_journals.date', '>=', $notBefore); } - $set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']); + $set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']); Log::debug(sprintf('Counted %d transaction(s)', $set->count())); // the balance value is an array. @@ -102,8 +101,8 @@ class AccountBalanceCalculator $balances[$entry->account_id][$entry->transaction_currency_id] ??= [$this->getLatestBalance($entry->account_id, $entry->transaction_currency_id, $notBefore), null]; // before and after are easy: - $before = $balances[$entry->account_id][$entry->transaction_currency_id][0]; - $after = bcadd($before, (string) $entry->amount); + $before = $balances[$entry->account_id][$entry->transaction_currency_id][0]; + $after = bcadd($before, (string)$entry->amount); if (true === $entry->balance_dirty || $accounts->count() > 0) { // update the transaction: $entry->balance_before = $before; @@ -129,23 +128,22 @@ class AccountBalanceCalculator return '0'; } Log::debug(sprintf('getLatestBalance: notBefore date is "%s", calculating', $notBefore->format('Y-m-d'))); - $query = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') - ->whereNull('transactions.deleted_at') - ->where('transaction_journals.transaction_currency_id', $currencyId) - ->whereNull('transaction_journals.deleted_at') + $query = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id') + ->whereNull('transactions.deleted_at') + ->where('transaction_journals.transaction_currency_id', $currencyId) + ->whereNull('transaction_journals.deleted_at') // this order is the same as GroupCollector - ->orderBy('transaction_journals.date', 'DESC') - ->orderBy('transaction_journals.order', 'ASC') - ->orderBy('transaction_journals.id', 'DESC') - ->orderBy('transaction_journals.description', 'DESC') - ->orderBy('transactions.amount', 'DESC') - ->where('transactions.account_id', $accountId) - ; + ->orderBy('transaction_journals.date', 'DESC') + ->orderBy('transaction_journals.order', 'ASC') + ->orderBy('transaction_journals.id', 'DESC') + ->orderBy('transaction_journals.description', 'DESC') + ->orderBy('transactions.amount', 'DESC') + ->where('transactions.account_id', $accountId); $notBefore->startOfDay(); $query->where('transaction_journals.date', '<', $notBefore); $first = $query->first(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount', 'transactions.balance_after']); - $balance = (string) ($first->balance_after ?? '0'); + $balance = (string)($first->balance_after ?? '0'); Log::debug(sprintf('getLatestBalance: found balance: %s in transaction #%d', $balance, $first->id ?? 0)); return $balance; @@ -154,7 +152,7 @@ class AccountBalanceCalculator private function storeAccountBalances(array $balances): void { /** - * @var int $accountId + * @var int $accountId * @var array $currencies */ foreach ($balances as $accountId => $currencies) { @@ -167,13 +165,13 @@ class AccountBalanceCalculator } /** - * @var int $currencyId + * @var int $currencyId * @var array $balance */ foreach ($currencies as $currencyId => $balance) { - /** @var null|TransactionCurrency $currency */ - $currency = Amount::getTransactionCurrencyById($currencyId); - if (null === $currency) { + try { + $currency = Amount::getTransactionCurrencyById($currencyId); + } catch (FireflyException) { Log::error(sprintf('Could not find currency #%d, will not save account balance.', $currencyId)); continue; @@ -200,9 +198,9 @@ class AccountBalanceCalculator public static function recalculateForJournal(TransactionJournal $transactionJournal): void { Log::debug(__METHOD__); - $object = new self(); + $object = new self(); - $set = []; + $set = []; foreach ($transactionJournal->transactions as $transaction) { $set[$transaction->account_id] = $transaction->account; } diff --git a/app/Support/Steam.php b/app/Support/Steam.php index ac09212308..f06b8451bb 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -524,8 +524,9 @@ class Steam $singleton = PreferencesSingleton::getInstance(); foreach ($others as $key => $amount) { $preference = $singleton->getPreference($key); - $currency = $preference ?? Amount::getTransactionCurrencyByCode($key); - if (null === $currency) { + try { + $currency = $preference ?? Amount::getTransactionCurrencyByCode($key); + } catch (FireflyException) { continue; } if (null === $preference) {