From 4e15717634ed566164ff53ee6b193f810d75ceea Mon Sep 17 00:00:00 2001 From: Jihad Date: Fri, 31 Oct 2025 19:51:55 +0300 Subject: [PATCH 1/7] Add Saudi Riyal (SAR) currency --- database/seeders/TransactionCurrencySeeder.php | 1 + 1 file changed, 1 insertion(+) diff --git a/database/seeders/TransactionCurrencySeeder.php b/database/seeders/TransactionCurrencySeeder.php index 5673362389..da378388c1 100644 --- a/database/seeders/TransactionCurrencySeeder.php +++ b/database/seeders/TransactionCurrencySeeder.php @@ -85,6 +85,7 @@ class TransactionCurrencySeeder extends Seeder $currencies[] = ['code' => 'NOK', 'name' => 'Norwegian krone', 'symbol' => 'kr.', 'decimal_places' => 2]; $currencies[] = ['code' => 'CZK', 'name' => 'Czech koruna', 'symbol' => 'Kč', 'decimal_places' => 2]; $currencies[] = ['code' => 'KZT', 'name' => 'Kazakhstani tenge', 'symbol' => '₸', 'decimal_places' => 2]; + $currencies[] = ['code' => 'SAR', 'name' => 'Saudi Riyal', 'symbol' => 'SAR', 'decimal_places' => 2]; foreach ($currencies as $currency) { if (null === TransactionCurrency::where('code', $currency['code'])->first()) { From b43f0ca4a80c7101985aef0fb903e3fa9b665d45 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 1 Nov 2025 18:07:54 +0100 Subject: [PATCH 2/7] Fix #11147 --- changelog.md | 6 ++++++ public/v1/js/ff/accounts/reconcile.js | 9 +++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 19fdba3fa6..41e04f1cbc 100644 --- a/changelog.md +++ b/changelog.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 6.4.4 - 2025-11-02 + +### Fixed + +- #11147 + ## 6.4.3 - 2025-11-01 ### Added diff --git a/public/v1/js/ff/accounts/reconcile.js b/public/v1/js/ff/accounts/reconcile.js index 2e161144e7..354d479deb 100644 --- a/public/v1/js/ff/accounts/reconcile.js +++ b/public/v1/js/ff/accounts/reconcile.js @@ -89,9 +89,9 @@ function selectAllReconcile(e) { console.log('in selectAllReconcile(' + journalId + ') with amount ' + amount + ' and selected amount ' + selectedAmount); // do nothing if line is already in target state - if (check.prop('checked') === doCheck ) + if (check.prop('checked') === doCheck) return; - + check.prop('checked', doCheck); // if checked, add to selected amount if (doCheck === true && check.data('younger') === false) { @@ -201,6 +201,7 @@ function getTransactionsForRange() { $.getJSON(url).done(placeTransactions).catch(exceptionHandling) } + function exceptionHandling() { $('#transactions_holder').empty().append($('

').addClass('text-center lead').html(selectRangeAndBalance)); $('.start_reconcile').show(); @@ -254,8 +255,8 @@ function placeTransactions(data) { selectedAmount = 0; // update start + end balance when user has not touched them. if (!changedBalances) { - $('input[name="start_balance"]').val(data.startBalance); - $('input[name="end_balance"]').val(data.endBalance); + $('input[name="start_balance"]').val(data.startBalance.balance); + $('input[name="end_balance"]').val(data.endBalance.balance); } // as long as the dates are equal, changing the balance does not matter. From 8ff40e22e0688d60c1ddc33dfb8645f8b8b7ce29 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 1 Nov 2025 18:44:32 +0100 Subject: [PATCH 3/7] Fix #11144 --- .../Controllers/Autocomplete/AccountController.php | 2 +- .../Autocomplete/AutocompleteApiRequest.php | 2 +- app/Api/V1/Requests/DateRangeRequest.php | 4 ---- .../Models/Account/AccountTypesApiRequest.php | 13 ++++++++----- app/Api/V1/Requests/PaginationRequest.php | 2 -- changelog.md | 1 + 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/app/Api/V1/Controllers/Autocomplete/AccountController.php b/app/Api/V1/Controllers/Autocomplete/AccountController.php index dfb16b0eef..01502a60e9 100644 --- a/app/Api/V1/Controllers/Autocomplete/AccountController.php +++ b/app/Api/V1/Controllers/Autocomplete/AccountController.php @@ -81,6 +81,7 @@ class AccountController extends Controller */ public function accounts(AutocompleteApiRequest $request): JsonResponse { + Log::debug('Before All.'); [ 'types' => $types, 'query' => $query, @@ -89,7 +90,6 @@ class AccountController extends Controller ] = $request->attributes->all(); - $date ??= today(config('app.timezone')); // set date to end-of-day for account balance. so it is at $date 23:59:59 diff --git a/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php b/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php index 751f9f580b..2d447d6c73 100644 --- a/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php +++ b/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php @@ -37,7 +37,7 @@ class AutocompleteApiRequest extends AggregateFormRequest protected function getRequests(): array { return [ - DateRequest::class, + DateRequest::class, [PaginationRequest::class, 'sort_class' => Account::class], AccountTypesApiRequest::class, QueryRequest::class, diff --git a/app/Api/V1/Requests/DateRangeRequest.php b/app/Api/V1/Requests/DateRangeRequest.php index bfefb467a6..19614e640b 100644 --- a/app/Api/V1/Requests/DateRangeRequest.php +++ b/app/Api/V1/Requests/DateRangeRequest.php @@ -40,10 +40,6 @@ class DateRangeRequest extends ApiRequest $validator->after( function (Validator $validator): void { if ($validator->failed()) { - // set null values - $this->attributes->set('start', null); - $this->attributes->set('end', null); - return; } $start = $this->getCarbonDate('start')?->startOfDay(); diff --git a/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php b/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php index e24a027974..e537f3f45f 100644 --- a/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php +++ b/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php @@ -47,11 +47,14 @@ class AccountTypesApiRequest extends ApiRequest if ($validator->failed()) { return; } - - $type = $this->convertString('types', 'all'); - $this->attributes->add([ - 'types' => $this->mapAccountTypes($type), - ]); + $types = explode(',', $this->convertString('types', 'all')); + $result = []; + // split and find all types: + foreach ($types as $type) { + $result = array_merge($result, $this->mapAccountTypes($type)); + } + $result = array_unique($result); + $this->attributes->set('types', $result); } ); } diff --git a/app/Api/V1/Requests/PaginationRequest.php b/app/Api/V1/Requests/PaginationRequest.php index 9b080007dc..d9a59c1969 100644 --- a/app/Api/V1/Requests/PaginationRequest.php +++ b/app/Api/V1/Requests/PaginationRequest.php @@ -68,12 +68,10 @@ class PaginationRequest extends ApiRequest $user = auth()->user(); $limit = (int)Preferences::getForUser($user, 'listPageSize', 50)->data; } - $page = $this->convertInteger('page'); $page = min(max(1, $page), 2 ** 16); $offset = ($page - 1) * $limit; $sort = $this->sortClass ? $this->convertSortParameters('sort', $this->sortClass) : $this->get('sort'); - $this->attributes->set('limit', $limit); $this->attributes->set('sort', $sort); $this->attributes->set('page', $page); diff --git a/changelog.md b/changelog.md index 41e04f1cbc..69d4ade29a 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +- #11144 - #11147 ## 6.4.3 - 2025-11-01 From e2b3e8492d44c7ed4384e3c5f7a9d8072c34b33c Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 1 Nov 2025 20:00:45 +0100 Subject: [PATCH 4/7] Fix issue with parsing URLs. --- app/Support/Steam.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/app/Support/Steam.php b/app/Support/Steam.php index e290941e87..083224520c 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -39,6 +39,7 @@ use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; +use Safe\Exceptions\UrlException; use ValueError; use function Safe\parse_url; @@ -671,8 +672,18 @@ class Steam { // Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl)); $returnUrl = $safeUrl; - $unknownHost = parse_url($unknownUrl, PHP_URL_HOST); - $safeHost = parse_url($safeUrl, PHP_URL_HOST); + try { + $unknownHost = parse_url($unknownUrl, PHP_URL_HOST); + } catch (UrlException $e) { + Log::error(sprintf('Could not parse "%s": %s', $unknownUrl, $e->getMessage())); + return $returnUrl; + } + try { + $safeHost = parse_url($safeUrl, PHP_URL_HOST); + } catch (UrlException $e) { + Log::error(sprintf('Could not parse "%s": %s', $unknownUrl, $e->getMessage())); + return $returnUrl; + } if (null !== $unknownHost && $unknownHost === $safeHost) { $returnUrl = $unknownUrl; From 18589f87b72022ef33051c1c4fd715fc2743f8ac Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 1 Nov 2025 20:35:36 +0100 Subject: [PATCH 5/7] Update changelog. --- changelog.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/changelog.md b/changelog.md index 69d4ade29a..bef141e468 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,10 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## 6.4.4 - 2025-11-02 +### Added + +- #11140 + ### Fixed - #11144 From 418150034b3d79a2b81d8a2773fd79c2f9ccc2a2 Mon Sep 17 00:00:00 2001 From: JC5 Date: Sat, 1 Nov 2025 20:39:32 +0100 Subject: [PATCH 6/7] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20releas?= =?UTF-8?q?e=20'develop'=20on=202025-11-01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- THANKS.md | 1 + app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php | 2 +- .../V1/Requests/Models/Account/AccountTypesApiRequest.php | 2 +- app/Support/Steam.php | 4 ++++ changelog.md | 6 +++--- config/firefly.php | 4 ++-- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/THANKS.md b/THANKS.md index 4b590fc92b..f046b17eb6 100755 --- a/THANKS.md +++ b/THANKS.md @@ -4,6 +4,7 @@ Over time, many people have contributed to Firefly III. Their efforts are not al Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution. ## 2025 +- Jihad - jreyesr - codearena-bot - Nicky De Maeyer diff --git a/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php b/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php index 2d447d6c73..751f9f580b 100644 --- a/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php +++ b/app/Api/V1/Requests/Autocomplete/AutocompleteApiRequest.php @@ -37,7 +37,7 @@ class AutocompleteApiRequest extends AggregateFormRequest protected function getRequests(): array { return [ - DateRequest::class, + DateRequest::class, [PaginationRequest::class, 'sort_class' => Account::class], AccountTypesApiRequest::class, QueryRequest::class, diff --git a/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php b/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php index e537f3f45f..5662ad207f 100644 --- a/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php +++ b/app/Api/V1/Requests/Models/Account/AccountTypesApiRequest.php @@ -47,7 +47,7 @@ class AccountTypesApiRequest extends ApiRequest if ($validator->failed()) { return; } - $types = explode(',', $this->convertString('types', 'all')); + $types = explode(',', $this->convertString('types', 'all')); $result = []; // split and find all types: foreach ($types as $type) { diff --git a/app/Support/Steam.php b/app/Support/Steam.php index 083224520c..ebab95b7ae 100644 --- a/app/Support/Steam.php +++ b/app/Support/Steam.php @@ -672,16 +672,20 @@ class Steam { // Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl)); $returnUrl = $safeUrl; + try { $unknownHost = parse_url($unknownUrl, PHP_URL_HOST); } catch (UrlException $e) { Log::error(sprintf('Could not parse "%s": %s', $unknownUrl, $e->getMessage())); + return $returnUrl; } + try { $safeHost = parse_url($safeUrl, PHP_URL_HOST); } catch (UrlException $e) { Log::error(sprintf('Could not parse "%s": %s', $unknownUrl, $e->getMessage())); + return $returnUrl; } diff --git a/changelog.md b/changelog.md index bef141e468..a46c12dadf 100644 --- a/changelog.md +++ b/changelog.md @@ -7,12 +7,12 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Added -- #11140 +- [PR 11140](https://github.com/firefly-iii/firefly-iii/pull/11140) (Add Saudi Riyal (SAR) currency) reported by @Jihad ### Fixed -- #11144 -- #11147 +- [Issue 11144](https://github.com/firefly-iii/firefly-iii/issues/11144) (Initial balance is auto suggested as an account) reported by @elliot-gh +- [Issue 11147](https://github.com/firefly-iii/firefly-iii/issues/11147) (Start and End Balance gets blanked out during reconciliation) reported by @lrdshaper ## 6.4.3 - 2025-11-01 diff --git a/config/firefly.php b/config/firefly.php index e6ce1400e3..588e15324b 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,8 +78,8 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => '6.4.3', - 'build_time' => 1762015997, + 'version' => 'develop/2025-11-01', + 'build_time' => 1762025863, 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 28, // field is no longer used. From ddd94276dbf5da4b93ae00ef2ee6bc8e74df134e Mon Sep 17 00:00:00 2001 From: JC5 Date: Sat, 1 Nov 2025 20:47:46 +0100 Subject: [PATCH 7/7] =?UTF-8?q?=F0=9F=A4=96=20Auto=20commit=20for=20releas?= =?UTF-8?q?e=20'v6.4.4'=20on=202025-11-01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/firefly.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/firefly.php b/config/firefly.php index 588e15324b..f1a4d387ae 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -78,8 +78,8 @@ return [ 'running_balance_column' => env('USE_RUNNING_BALANCE', false), // see cer.php for exchange rates feature flag. ], - 'version' => 'develop/2025-11-01', - 'build_time' => 1762025863, + 'version' => '6.4.4', + 'build_time' => 1762026349, 'api_version' => '2.1.0', // field is no longer used. 'db_version' => 28, // field is no longer used.