mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Fix issue with opposing account creation
This commit is contained in:
parent
8ea32714f6
commit
259bad4487
@ -35,7 +35,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||||
use FireflyIII\Support\NullArrayObject;
|
use FireflyIII\Support\NullArrayObject;
|
||||||
use Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trait JournalServiceTrait
|
* Trait JournalServiceTrait
|
||||||
@ -86,9 +86,14 @@ trait JournalServiceTrait
|
|||||||
Log::debug(sprintf('Search again using the new name, "%s".', $data['name']));
|
Log::debug(sprintf('Search again using the new name, "%s".', $data['name']));
|
||||||
$result = $this->findAccountByName(null, $data, $expectedTypes[$transactionType]);
|
$result = $this->findAccountByName(null, $data, $expectedTypes[$transactionType]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the account that Firefly III creates must be "creatable", aka select the one we can create from the list just in case
|
||||||
|
$creatableType = $this->getCreatableType($expectedTypes[$transactionType]);
|
||||||
|
|
||||||
|
|
||||||
// if the result is NULL but the ID is set, an account could exist of the wrong type.
|
// if the result is NULL but the ID is set, an account could exist of the wrong type.
|
||||||
// that data can be used to create a new account of the right type.
|
// that data can be used to create a new account of the right type.
|
||||||
if (null === $result && null !== $data['id']) {
|
if (null === $result && null !== $data['id'] && null !== $creatableType) {
|
||||||
Log::debug(sprintf('Account #%d may exist and be of the wrong type, use data to create one of the right type.', $data['id']));
|
Log::debug(sprintf('Account #%d may exist and be of the wrong type, use data to create one of the right type.', $data['id']));
|
||||||
$temp = $this->findAccountById(['id' => $data['id']], []);
|
$temp = $this->findAccountById(['id' => $data['id']], []);
|
||||||
if (null !== $temp) {
|
if (null !== $temp) {
|
||||||
@ -98,12 +103,12 @@ trait JournalServiceTrait
|
|||||||
'number' => null,
|
'number' => null,
|
||||||
'bic' => null,
|
'bic' => null,
|
||||||
];
|
];
|
||||||
$result = $this->createAccount(null, $tempData, $expectedTypes[$transactionType][0]);
|
$result = $this->createAccount(null, $tempData, $creatableType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (null === $result) {
|
if (null === $result && null !== $creatableType) {
|
||||||
Log::debug('If nothing is found, create it.');
|
Log::debug('If nothing is found, create it.');
|
||||||
$result = $this->createAccount($result, $data, $expectedTypes[$transactionType][0]);
|
$result = $this->createAccount($result, $data, $creatableType);
|
||||||
}
|
}
|
||||||
if (null === $result) {
|
if (null === $result) {
|
||||||
Log::debug('If cant be created, return cash account.');
|
Log::debug('If cant be created, return cash account.');
|
||||||
@ -237,6 +242,24 @@ trait JournalServiceTrait
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $types
|
||||||
|
* @return null|string
|
||||||
|
*/
|
||||||
|
private function getCreatableType(array $types): ?string
|
||||||
|
{
|
||||||
|
$result = null;
|
||||||
|
$list = config('firefly.dynamic_creation_allowed');
|
||||||
|
/** @var string $type */
|
||||||
|
foreach ($types as $type) {
|
||||||
|
if (true === in_array($type, $list, true)) {
|
||||||
|
$result = $type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Account|null $account
|
* @param Account|null $account
|
||||||
* @param array $data
|
* @param array $data
|
||||||
|
@ -877,6 +877,7 @@ return [
|
|||||||
],
|
],
|
||||||
'can_have_virtual_amounts' => [AccountType::ASSET],
|
'can_have_virtual_amounts' => [AccountType::ASSET],
|
||||||
'can_have_opening_balance' => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE],
|
'can_have_opening_balance' => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE],
|
||||||
|
'dynamic_creation_allowed' => [AccountType::EXPENSE, AccountType::REVENUE, AccountType::INITIAL_BALANCE, AccountType::RECONCILIATION],
|
||||||
'valid_asset_fields' => ['account_role', 'account_number', 'currency_id', 'BIC', 'include_net_worth'],
|
'valid_asset_fields' => ['account_role', 'account_number', 'currency_id', 'BIC', 'include_net_worth'],
|
||||||
'valid_cc_fields' => ['account_role', 'cc_monthly_payment_date', 'cc_type', 'account_number', 'currency_id', 'BIC', 'include_net_worth'],
|
'valid_cc_fields' => ['account_role', 'cc_monthly_payment_date', 'cc_type', 'account_number', 'currency_id', 'BIC', 'include_net_worth'],
|
||||||
'valid_account_fields' => ['account_number', 'currency_id', 'BIC', 'interest', 'interest_period', 'include_net_worth', 'liability_direction'],
|
'valid_account_fields' => ['account_number', 'currency_id', 'BIC', 'interest', 'interest_period', 'include_net_worth', 'liability_direction'],
|
||||||
|
Loading…
Reference in New Issue
Block a user