Catch exceptions.

This commit is contained in:
James Cole
2025-09-07 14:54:44 +02:00
parent 4835b05304
commit 949691935f
8 changed files with 49 additions and 57 deletions

View File

@@ -100,9 +100,6 @@ class StoreController extends Controller
$collection = new Collection(); $collection = new Collection();
foreach ($data['rates'] as $key => $rate) { foreach ($data['rates'] as $key => $rate) {
$to = Amount::getTransactionCurrencyByCode($key); $to = Amount::getTransactionCurrencyByCode($key);
if (null === $to) {
continue; // should not happen.
}
$existing = $this->repository->getSpecificRateOnDate($from, $to, $date); $existing = $this->repository->getSpecificRateOnDate($from, $to, $date);
if (null !== $existing) { if (null !== $existing) {
// update existing rate. // update existing rate.

View File

@@ -24,12 +24,13 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate; namespace FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Validator;
class StoreByDateRequest extends FormRequest class StoreByDateRequest extends FormRequest
{ {
@@ -49,7 +50,7 @@ class StoreByDateRequest extends FormRequest
public function getFromCurrency(): TransactionCurrency 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; continue;
} }
$to = Amount::getTransactionCurrencyByCode((string) $key); try {
if (null === $to) { $to = Amount::getTransactionCurrencyByCode((string)$key);
} catch (FireflyException) {
$validator->errors()->add(sprintf('rates.%s', $key), trans('validation.invalid_currency_code', ['code' => $key])); $validator->errors()->add(sprintf('rates.%s', $key), trans('validation.invalid_currency_code', ['code' => $key]));
} }
} }

View File

@@ -136,16 +136,10 @@ class StoreRequest extends FormRequest
private function getCurrencyFromData(Validator $validator, array $data): ?TransactionCurrency private function getCurrencyFromData(Validator $validator, array $data): ?TransactionCurrency
{ {
if (array_key_exists('transaction_currency_code', $data) && '' !== (string) $data['transaction_currency_code']) { if (array_key_exists('transaction_currency_code', $data) && '' !== (string) $data['transaction_currency_code']) {
$currency = Amount::getTransactionCurrencyByCode((string) $data['transaction_currency_code']); return Amount::getTransactionCurrencyByCode((string) $data['transaction_currency_code']);
if (null !== $currency) {
return $currency;
}
} }
if (array_key_exists('transaction_currency_id', $data) && '' !== (string) $data['transaction_currency_id']) { if (array_key_exists('transaction_currency_id', $data) && '' !== (string) $data['transaction_currency_id']) {
$currency = Amount::getTransactionCurrencyById((int) $data['transaction_currency_id']); return Amount::getTransactionCurrencyById((int) $data['transaction_currency_id']);
if (null !== $currency) {
return $currency;
}
} }
$validator->errors()->add('transaction_currency_id', trans('validation.require_currency_id_code')); $validator->errors()->add('transaction_currency_id', trans('validation.require_currency_id_code'));

View File

@@ -288,10 +288,8 @@ trait ModifiesPiggyBanks
} }
if (array_key_exists('transaction_currency_id', $data) && is_int($data['transaction_currency_id'])) { if (array_key_exists('transaction_currency_id', $data) && is_int($data['transaction_currency_id'])) {
$currency = Amount::getTransactionCurrencyById($data['transaction_currency_id']); $currency = Amount::getTransactionCurrencyById($data['transaction_currency_id']);
if (null !== $currency) {
$piggyBank->transaction_currency_id = $currency->id; $piggyBank->transaction_currency_id = $currency->id;
} }
}
if (array_key_exists('target_amount', $data) && '' !== $data['target_amount']) { if (array_key_exists('target_amount', $data) && '' !== $data['target_amount']) {
$piggyBank->target_amount = $data['target_amount']; $piggyBank->target_amount = $data['target_amount'];

View File

@@ -33,6 +33,7 @@ use FireflyIII\Support\Facades\Steam;
use FireflyIII\Support\Singleton\PreferencesSingleton; use FireflyIII\Support\Singleton\PreferencesSingleton;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use NumberFormatter; use NumberFormatter;
/** /**
@@ -126,7 +127,9 @@ class Amount
} }
$currency = TransactionCurrency::find($currencyId); $currency = TransactionCurrency::find($currencyId);
if (null === $currency) { 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); $instance->setPreference($key, $currency);
return $currency; return $currency;
@@ -143,7 +146,9 @@ class Amount
} }
$currency = TransactionCurrency::whereCode($code)->first(); $currency = TransactionCurrency::whereCode($code)->first();
if (null === $currency) { 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); $instance->setPreference($key, $currency);
return $currency; return $currency;

View File

@@ -267,9 +267,6 @@ class ExchangeRateConverter
} }
$euro = Amount::getTransactionCurrencyByCode('EUR'); $euro = Amount::getTransactionCurrencyByCode('EUR');
++$this->queryCount; ++$this->queryCount;
if (null === $euro) {
throw new FireflyException('Cannot find EUR in system, cannot do currency conversion.');
}
$cache->store($euro->id); $cache->store($euro->id);
return $euro->id; return $euro->id;

View File

@@ -25,10 +25,10 @@ declare(strict_types=1);
namespace FireflyIII\Support\Models; namespace FireflyIII\Support\Models;
use Carbon\Carbon; use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountBalance; use FireflyIII\Models\AccountBalance;
use FireflyIII\Models\Transaction; use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Support\Facades\Amount; use FireflyIII\Support\Facades\Amount;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@@ -79,8 +79,7 @@ class AccountBalanceCalculator
->orderBy('transaction_journals.order', 'desc') ->orderBy('transaction_journals.order', 'desc')
->orderBy('transaction_journals.id', 'asc') ->orderBy('transaction_journals.id', 'asc')
->orderBy('transaction_journals.description', 'asc') ->orderBy('transaction_journals.description', 'asc')
->orderBy('transactions.amount', 'asc') ->orderBy('transactions.amount', 'asc');
;
if ($accounts->count() > 0) { if ($accounts->count() > 0) {
$query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray()); $query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray());
} }
@@ -103,7 +102,7 @@ class AccountBalanceCalculator
// before and after are easy: // before and after are easy:
$before = $balances[$entry->account_id][$entry->transaction_currency_id][0]; $before = $balances[$entry->account_id][$entry->transaction_currency_id][0];
$after = bcadd($before, (string) $entry->amount); $after = bcadd($before, (string)$entry->amount);
if (true === $entry->balance_dirty || $accounts->count() > 0) { if (true === $entry->balance_dirty || $accounts->count() > 0) {
// update the transaction: // update the transaction:
$entry->balance_before = $before; $entry->balance_before = $before;
@@ -139,13 +138,12 @@ class AccountBalanceCalculator
->orderBy('transaction_journals.id', 'DESC') ->orderBy('transaction_journals.id', 'DESC')
->orderBy('transaction_journals.description', 'DESC') ->orderBy('transaction_journals.description', 'DESC')
->orderBy('transactions.amount', 'DESC') ->orderBy('transactions.amount', 'DESC')
->where('transactions.account_id', $accountId) ->where('transactions.account_id', $accountId);
;
$notBefore->startOfDay(); $notBefore->startOfDay();
$query->where('transaction_journals.date', '<', $notBefore); $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']); $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)); Log::debug(sprintf('getLatestBalance: found balance: %s in transaction #%d', $balance, $first->id ?? 0));
return $balance; return $balance;
@@ -171,9 +169,9 @@ class AccountBalanceCalculator
* @var array $balance * @var array $balance
*/ */
foreach ($currencies as $currencyId => $balance) { foreach ($currencies as $currencyId => $balance) {
/** @var null|TransactionCurrency $currency */ try {
$currency = Amount::getTransactionCurrencyById($currencyId); $currency = Amount::getTransactionCurrencyById($currencyId);
if (null === $currency) { } catch (FireflyException) {
Log::error(sprintf('Could not find currency #%d, will not save account balance.', $currencyId)); Log::error(sprintf('Could not find currency #%d, will not save account balance.', $currencyId));
continue; continue;

View File

@@ -524,8 +524,9 @@ class Steam
$singleton = PreferencesSingleton::getInstance(); $singleton = PreferencesSingleton::getInstance();
foreach ($others as $key => $amount) { foreach ($others as $key => $amount) {
$preference = $singleton->getPreference($key); $preference = $singleton->getPreference($key);
try {
$currency = $preference ?? Amount::getTransactionCurrencyByCode($key); $currency = $preference ?? Amount::getTransactionCurrencyByCode($key);
if (null === $currency) { } catch (FireflyException) {
continue; continue;
} }
if (null === $preference) { if (null === $preference) {