mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Will update IBAN in existing account if necessary and/or possible.
This commit is contained in:
parent
38b88dce44
commit
e0577bddc5
@ -29,9 +29,12 @@ use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Rules\UniqueIban;
|
||||
use FireflyIII\Services\Internal\Update\AccountUpdateService;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Log;
|
||||
use Validator;
|
||||
|
||||
/**
|
||||
* Class TransactionFactory
|
||||
@ -43,6 +46,7 @@ class TransactionFactory
|
||||
private ?TransactionCurrency $foreignCurrency;
|
||||
private TransactionJournal $journal;
|
||||
private bool $reconciled;
|
||||
private array $accountInformation;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
@ -51,7 +55,8 @@ class TransactionFactory
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->reconciled = false;
|
||||
$this->reconciled = false;
|
||||
$this->accountInformation = [];
|
||||
}
|
||||
|
||||
/**
|
||||
@ -129,6 +134,9 @@ class TransactionFactory
|
||||
}
|
||||
$result->save();
|
||||
|
||||
// if present, update account with relevant account information from the array
|
||||
$this->updateAccountInformation();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@ -212,4 +220,45 @@ class TransactionFactory
|
||||
{
|
||||
// empty function.
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $accountInformation
|
||||
*/
|
||||
public function setAccountInformation(array $accountInformation): void
|
||||
{
|
||||
$this->accountInformation = $accountInformation;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function updateAccountInformation(): void
|
||||
{
|
||||
if (!array_key_exists('iban', $this->accountInformation)) {
|
||||
Log::debug('No IBAN information in array, will not update.');
|
||||
return;
|
||||
}
|
||||
if ('' !== (string)$this->account->iban) {
|
||||
Log::debug('Account already has IBAN information, will not update.');
|
||||
return;
|
||||
}
|
||||
if ($this->account->iban === $this->accountInformation['iban']) {
|
||||
Log::debug('Account already has this IBAN, will not update.');
|
||||
return;
|
||||
}
|
||||
// validate info:
|
||||
$validator = Validator::make(['iban' => $this->accountInformation['iban']], [
|
||||
'iban' => ['required', new UniqueIban($this->account, $this->account->accountType->type)],
|
||||
]);
|
||||
if ($validator->fails()) {
|
||||
Log::debug('Invalid or non-unique IBAN, will not update.');
|
||||
return;
|
||||
}
|
||||
|
||||
Log::debug('Will update account with IBAN information.');
|
||||
$service = app(AccountUpdateService::class);
|
||||
$service->update($this->account, ['iban' => $this->accountInformation['iban']]);
|
||||
}
|
||||
}
|
||||
|
@ -244,6 +244,7 @@ class TransactionJournalFactory
|
||||
$transactionFactory->setJournal($journal);
|
||||
$transactionFactory->setAccount($sourceAccount);
|
||||
$transactionFactory->setCurrency($currency);
|
||||
$transactionFactory->setAccountInformation($sourceInfo);
|
||||
$transactionFactory->setForeignCurrency($foreignCurrency);
|
||||
$transactionFactory->setReconciled($row['reconciled'] ?? false);
|
||||
try {
|
||||
@ -262,6 +263,7 @@ class TransactionJournalFactory
|
||||
$transactionFactory->setUser($this->user);
|
||||
$transactionFactory->setJournal($journal);
|
||||
$transactionFactory->setAccount($destinationAccount);
|
||||
$transactionFactory->setAccountInformation($destInfo);
|
||||
$transactionFactory->setCurrency($currency);
|
||||
$transactionFactory->setForeignCurrency($foreignCurrency);
|
||||
$transactionFactory->setReconciled($row['reconciled'] ?? false);
|
||||
@ -451,7 +453,7 @@ class TransactionJournalFactory
|
||||
*/
|
||||
private function getCurrencyByAccount(string $type, ?TransactionCurrency $currency, Account $source, Account $destination): TransactionCurrency
|
||||
{
|
||||
Log::debug('Now ingetCurrencyByAccount()');
|
||||
Log::debug('Now in getCurrencyByAccount()');
|
||||
|
||||
return match ($type) {
|
||||
default => $this->getCurrency($currency, $source),
|
||||
|
@ -125,7 +125,7 @@ trait AccountServiceTrait
|
||||
}
|
||||
}
|
||||
|
||||
// the account role may not be set in the data but we may have it already:
|
||||
// the account role may not be set in the data, but we may have it already:
|
||||
if (!array_key_exists('account_role', $data)) {
|
||||
$data['account_role'] = null;
|
||||
}
|
||||
|
@ -54,7 +54,6 @@ trait JournalServiceTrait
|
||||
* @param array $data
|
||||
*
|
||||
* @return Account|null
|
||||
|
||||
* @throws FireflyException
|
||||
*/
|
||||
protected function getAccount(string $transactionType, string $direction, array $data): ?Account
|
||||
@ -78,10 +77,11 @@ trait JournalServiceTrait
|
||||
$result = $this->findAccountByNumber($result, $data, $expectedTypes[$transactionType]);
|
||||
$numberResult = $result;
|
||||
$result = $this->findAccountByName($result, $data, $expectedTypes[$transactionType]);
|
||||
$nameResult =$result;
|
||||
|
||||
// if result is NULL but IBAN is set, any result of the search by NAME can't overrule
|
||||
// if $result (find by name) is NULL, but IBAN is set, any result of the search by NAME can't overrule
|
||||
// this account. In such a case, the name search must be retried with a new name.
|
||||
if (null !== $result && null === $numberResult && null === $ibanResult && '' !== (string) $data['iban']) {
|
||||
if (null !== $nameResult && null === $numberResult && null === $ibanResult && '' !== (string)$data['iban'] && '' !== (string) $nameResult->iban) {
|
||||
$data['name'] = sprintf('%s (%s)', $data['name'], $data['iban']);
|
||||
Log::debug(sprintf('Search again using the new name, "%s".', $data['name']));
|
||||
$result = $this->findAccountByName(null, $data, $expectedTypes[$transactionType]);
|
||||
@ -101,11 +101,15 @@ trait JournalServiceTrait
|
||||
$result = $this->createAccount(null, $tempData, $expectedTypes[$transactionType][0]);
|
||||
}
|
||||
}
|
||||
|
||||
Log::debug('If nothing is found, create it.');
|
||||
$result = $this->createAccount($result, $data, $expectedTypes[$transactionType][0]);
|
||||
Log::debug('If cant be created, return cash account.');
|
||||
return $this->getCashAccount($result, $data, $expectedTypes[$transactionType]);
|
||||
if (null === $result) {
|
||||
Log::debug('If nothing is found, create it.');
|
||||
$result = $this->createAccount($result, $data, $expectedTypes[$transactionType][0]);
|
||||
}
|
||||
if (null === $result) {
|
||||
Log::debug('If cant be created, return cash account.');
|
||||
$result = $this->getCashAccount($result, $data, $expectedTypes[$transactionType]);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -329,7 +333,6 @@ trait JournalServiceTrait
|
||||
*
|
||||
* @return string
|
||||
* @throws FireflyException
|
||||
|
||||
*/
|
||||
protected function getAmount(string $amount): string
|
||||
{
|
||||
@ -348,7 +351,6 @@ trait JournalServiceTrait
|
||||
* @param string|null $amount
|
||||
*
|
||||
* @return string|null
|
||||
|
||||
*/
|
||||
protected function getForeignAmount(?string $amount): ?string
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user