mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-05 04:03:26 +00:00
Fix some stuff in account API calls. still need to solve location.
This commit is contained in:
@@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Services\Internal\Support;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Exception;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Factory\AccountMetaFactory;
|
||||
@@ -35,6 +36,7 @@ use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Models\TransactionGroup;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
|
||||
use Log;
|
||||
use Validator;
|
||||
@@ -45,6 +47,8 @@ use Validator;
|
||||
*/
|
||||
trait AccountServiceTrait
|
||||
{
|
||||
protected AccountRepositoryInterface $accountRepository;
|
||||
|
||||
/**
|
||||
* @param null|string $iban
|
||||
*
|
||||
@@ -84,6 +88,14 @@ trait AccountServiceTrait
|
||||
if ($account->accountType->type === AccountType::ASSET) {
|
||||
$fields = $this->validAssetFields;
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
if (null === $data['account_role']) {
|
||||
$data['account_role'] = $this->accountRepository->getMetaValue($account, 'account_role');
|
||||
}
|
||||
if ($account->accountType->type === AccountType::ASSET && isset($data['account_role']) && 'ccAsset' === $data['account_role']) {
|
||||
$fields = $this->validCCFields; // @codeCoverageIgnore
|
||||
}
|
||||
@@ -171,8 +183,8 @@ trait AccountServiceTrait
|
||||
*/
|
||||
public function isEmptyOBData(array $data): bool
|
||||
{
|
||||
if (!array_key_exists('opening_balance', $data) &&
|
||||
!array_key_exists('opening_balance_date', $data)
|
||||
if (!array_key_exists('opening_balance', $data)
|
||||
&& !array_key_exists('opening_balance_date', $data)
|
||||
) {
|
||||
// not set, so false.
|
||||
return false;
|
||||
@@ -180,8 +192,7 @@ trait AccountServiceTrait
|
||||
// if isset, but is empty:
|
||||
if (
|
||||
(array_key_exists('opening_balance', $data) && '' === $data['opening_balance'])
|
||||
||
|
||||
(array_key_exists('opening_balance_date', $data) && '' === $data['opening_balance_date'])
|
||||
|| (array_key_exists('opening_balance_date', $data) && '' === $data['opening_balance_date'])
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
@@ -266,6 +277,7 @@ trait AccountServiceTrait
|
||||
Log::error($e->getMessage());
|
||||
Log::error($e->getTraceAsString());
|
||||
}
|
||||
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
return $group;
|
||||
|
@@ -34,6 +34,7 @@ use Log;
|
||||
|
||||
/**
|
||||
* Class AccountUpdateService
|
||||
* TODO this is a mess.
|
||||
*/
|
||||
class AccountUpdateService
|
||||
{
|
||||
@@ -147,17 +148,25 @@ class AccountUpdateService
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $accountTypeId
|
||||
* @param string $type
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function isLiabilityTypeId(int $accountTypeId): bool
|
||||
private function isLiabilityType(string $type): bool
|
||||
{
|
||||
if (0 === $accountTypeId) {
|
||||
if ('' === $type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return 1 === AccountType::whereIn('type', [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE])->where('id', $accountTypeId)->count();
|
||||
return 1 === AccountType::whereIn('type', [AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE])->where('type', ucfirst($type))->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*/
|
||||
private function getAccountType(string $type): AccountType
|
||||
{
|
||||
return AccountType::whereType($type)->first();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,10 +182,11 @@ class AccountUpdateService
|
||||
$account->active = $data['active'] ?? $account->active;
|
||||
$account->iban = $data['iban'] ?? $account->iban;
|
||||
|
||||
// if account type is a liability, the liability type (account type)
|
||||
// can be updated to another one.
|
||||
if ($this->isLiability($account) && $this->isLiabilityTypeId((int)($data['account_type_id'] ?? 0))) {
|
||||
$account->account_type_id = (int)$data['account_type_id'];
|
||||
// liability stuff:
|
||||
$liabilityType = $data['liability_type'] ?? '';
|
||||
if ($this->isLiability($account) && $this->isLiabilityType($liabilityType)) {
|
||||
$type = $this->getAccountType($liabilityType);
|
||||
$account->account_type_id = $type->id;
|
||||
}
|
||||
|
||||
// update virtual balance (could be set to zero if empty string).
|
||||
|
Reference in New Issue
Block a user