From 78de8007772029743dd3fc25d072f823586fe397 Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 12 Nov 2025 18:02:24 +0100 Subject: [PATCH] Fix #11228 --- .../V1/Requests/Generic/ObjectTypeApiRequest.php | 15 ++++++++++----- app/Rules/Account/IsValidAccountTypeList.php | 2 +- app/Support/Http/Api/AccountFilter.php | 2 ++ resources/lang/en_US/validation.php | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/Api/V1/Requests/Generic/ObjectTypeApiRequest.php b/app/Api/V1/Requests/Generic/ObjectTypeApiRequest.php index 2e8a793747..0cb60c67fc 100644 --- a/app/Api/V1/Requests/Generic/ObjectTypeApiRequest.php +++ b/app/Api/V1/Requests/Generic/ObjectTypeApiRequest.php @@ -23,15 +23,16 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests\Generic; -use Override; -use Illuminate\Contracts\Validation\Validator; use FireflyIII\Api\V1\Requests\ApiRequest; +use FireflyIII\Enums\AccountTypeEnum; use FireflyIII\Models\Account; use FireflyIII\Models\Transaction; use FireflyIII\Rules\Account\IsValidAccountTypeList; use FireflyIII\Rules\TransactionType\IsValidTransactionTypeList; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\TransactionFilter; +use Illuminate\Contracts\Validation\Validator; +use Override; use RuntimeException; class ObjectTypeApiRequest extends ApiRequest @@ -55,7 +56,7 @@ class ObjectTypeApiRequest extends ApiRequest public function rules(): array { - $rule = null; + $rule = null; if (Account::class === $this->objectType) { $rule = new IsValidAccountTypeList(); } @@ -86,9 +87,13 @@ class ObjectTypeApiRequest extends ApiRequest default: $this->attributes->set('types', []); - // no break + // no break case Account::class: - $this->attributes->set('types', $this->mapAccountTypes($type)); + $types = $this->mapAccountTypes($type); + + // remove system account types because autocomplete doesn't need them. + $types = array_values(array_diff($types, [AccountTypeEnum::INITIAL_BALANCE->value, AccountTypeEnum::RECONCILIATION->value, AccountTypeEnum::LIABILITY_CREDIT->value])); + $this->attributes->set('types', $types); break; diff --git a/app/Rules/Account/IsValidAccountTypeList.php b/app/Rules/Account/IsValidAccountTypeList.php index 9cb71bf44c..08c2c25894 100644 --- a/app/Rules/Account/IsValidAccountTypeList.php +++ b/app/Rules/Account/IsValidAccountTypeList.php @@ -48,7 +48,7 @@ class IsValidAccountTypeList implements ValidationRule $keys = array_keys($this->types); foreach ($values as $entry) { if (!in_array($entry, $keys, true)) { - $fail('validation.invalid_account_list')->translate(); + $fail('validation.invalid_account_list')->translate(['value'=> $entry]); } } } diff --git a/app/Support/Http/Api/AccountFilter.php b/app/Support/Http/Api/AccountFilter.php index 00033ec5e1..25d9c08907 100644 --- a/app/Support/Http/Api/AccountFilter.php +++ b/app/Support/Http/Api/AccountFilter.php @@ -76,6 +76,7 @@ trait AccountFilter AccountTypeEnum::MORTGAGE->value => [AccountTypeEnum::MORTGAGE->value], AccountTypeEnum::DEBT->value => [AccountTypeEnum::DEBT->value], AccountTypeEnum::CREDITCARD->value => [AccountTypeEnum::CREDITCARD->value], + AccountTypeEnum::LIABILITY_CREDIT->value => [AccountTypeEnum::LIABILITY_CREDIT->value], 'default account' => [AccountTypeEnum::DEFAULT->value], 'cash account' => [AccountTypeEnum::CASH->value], 'asset account' => [AccountTypeEnum::ASSET->value], @@ -104,6 +105,7 @@ trait AccountFilter $return = array_merge($return, $this->types[$part]); } } + if (0 === count($return)) { $return = $this->types['normal']; } diff --git a/resources/lang/en_US/validation.php b/resources/lang/en_US/validation.php index 833154b1e1..7236f38e29 100644 --- a/resources/lang/en_US/validation.php +++ b/resources/lang/en_US/validation.php @@ -24,7 +24,7 @@ declare(strict_types=1); return [ - 'invalid_account_list' => 'Invalid account type list', + 'invalid_account_list' => 'Invalid account type list entry ":value"', 'invalid_transaction_type_list' => 'Invalid transaction type list', 'limit_exists' => 'There is already a budget limit (amount) for this budget and currency in the given period.', 'invalid_sort_instruction' => 'The sort instruction is invalid for an object of type ":object".',