diff --git a/.ci/php-cs-fixer/composer.lock b/.ci/php-cs-fixer/composer.lock
index d229353f9f..e6e7554c13 100644
--- a/.ci/php-cs-fixer/composer.lock
+++ b/.ci/php-cs-fixer/composer.lock
@@ -406,16 +406,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.68.5",
+ "version": "v3.69.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "7bedb718b633355272428c60736dc97fb96daf27"
+ "reference": "630a59448c00729bc235d5e95cfedefeaca37523"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/7bedb718b633355272428c60736dc97fb96daf27",
- "reference": "7bedb718b633355272428c60736dc97fb96daf27",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/630a59448c00729bc235d5e95cfedefeaca37523",
+ "reference": "630a59448c00729bc235d5e95cfedefeaca37523",
"shasum": ""
},
"require": {
@@ -432,7 +432,7 @@
"react/promise": "^2.0 || ^3.0",
"react/socket": "^1.0",
"react/stream": "^1.0",
- "sebastian/diff": "^4.0 || ^5.1 || ^6.0",
+ "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0",
"symfony/console": "^5.4 || ^6.4 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0",
"symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
@@ -445,18 +445,18 @@
"symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
},
"require-dev": {
- "facile-it/paraunit": "^1.3.1 || ^2.4",
- "infection/infection": "^0.29.8",
+ "facile-it/paraunit": "^1.3.1 || ^2.5",
+ "infection/infection": "^0.29.10",
"justinrainbow/json-schema": "^5.3 || ^6.0",
"keradus/cli-executor": "^2.1",
"mikey179/vfsstream": "^1.6.12",
"php-coveralls/php-coveralls": "^2.7",
"php-cs-fixer/accessible-object": "^1.1",
- "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
- "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
- "phpunit/phpunit": "^9.6.22 || ^10.5.40 || ^11.5.2",
- "symfony/var-dumper": "^5.4.48 || ^6.4.15 || ^7.2.0",
- "symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.2.0"
+ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
+ "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
+ "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7",
+ "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0",
+ "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.0"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -497,7 +497,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.5"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.69.0"
},
"funding": [
{
@@ -505,7 +505,7 @@
"type": "github"
}
],
- "time": "2025-01-30T17:00:50+00:00"
+ "time": "2025-02-14T16:19:23+00:00"
},
{
"name": "psr/container",
@@ -1188,29 +1188,29 @@
},
{
"name": "sebastian/diff",
- "version": "6.0.2",
+ "version": "7.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544"
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544",
- "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f",
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f",
"shasum": ""
},
"require": {
- "php": ">=8.2"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^11.0",
- "symfony/process": "^4.2 || ^5"
+ "phpunit/phpunit": "^12.0",
+ "symfony/process": "^7.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "6.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -1243,7 +1243,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2"
+ "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0"
},
"funding": [
{
@@ -1251,7 +1251,7 @@
"type": "github"
}
],
- "time": "2024-07-03T04:53:05+00:00"
+ "time": "2025-02-07T04:55:46+00:00"
},
{
"name": "symfony/console",
diff --git a/app/Api/V1/Controllers/Models/Account/ListController.php b/app/Api/V1/Controllers/Models/Account/ListController.php
index a450435f08..777698361b 100644
--- a/app/Api/V1/Controllers/Models/Account/ListController.php
+++ b/app/Api/V1/Controllers/Models/Account/ListController.php
@@ -141,18 +141,18 @@ class ListController extends Controller
*/
public function transactions(Request $request, Account $account): JsonResponse
{
- $pageSize = $this->parameters->get('limit');
- $type = $request->get('type') ?? 'default';
+ $pageSize = $this->parameters->get('limit');
+ $type = $request->get('type') ?? 'default';
$this->parameters->set('type', $type);
- $types = $this->mapTransactionTypes($this->parameters->get('type'));
- $manager = $this->getManager();
+ $types = $this->mapTransactionTypes($this->parameters->get('type'));
+ $manager = $this->getManager();
/** @var User $admin */
- $admin = auth()->user();
+ $admin = auth()->user();
// use new group collector:
/** @var GroupCollectorInterface $collector */
- $collector = app(GroupCollectorInterface::class);
+ $collector = app(GroupCollectorInterface::class);
$collector->setUser($admin)->setAccounts(new Collection([$account]))
->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types)
;
@@ -164,19 +164,19 @@ class ListController extends Controller
$collector->setEnd($this->parameters->get('end'));
}
- $paginator = $collector->getPaginatedGroups();
+ $paginator = $collector->getPaginatedGroups();
$paginator->setPath(route('api.v1.accounts.transactions', [$account->id]).$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
/** @var TransactionGroupTransformer $transformer */
- $transformer = app(TransactionGroupTransformer::class);
+ $transformer = app(TransactionGroupTransformer::class);
$transformer->setParameters($this->parameters);
- $resource = new FractalCollection($transactions, $transformer, 'transactions');
+ $resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
diff --git a/app/Api/V1/Controllers/Models/Account/ShowController.php b/app/Api/V1/Controllers/Models/Account/ShowController.php
index c5680f2976..acd960559b 100644
--- a/app/Api/V1/Controllers/Models/Account/ShowController.php
+++ b/app/Api/V1/Controllers/Models/Account/ShowController.php
@@ -94,12 +94,12 @@ class ShowController extends Controller
// enrich
/** @var User $admin */
- $admin = auth()->user();
- $enrichment = new AccountEnrichment();
+ $admin = auth()->user();
+ $enrichment = new AccountEnrichment();
$enrichment->setUser($admin);
$enrichment->setConvertToNative($this->convertToNative);
$enrichment->setNative($this->nativeCurrency);
- $accounts = $enrichment->enrich($accounts);
+ $accounts = $enrichment->enrich($accounts);
// make paginator:
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
@@ -130,12 +130,12 @@ class ShowController extends Controller
// enrich
/** @var User $admin */
- $admin = auth()->user();
- $enrichment = new AccountEnrichment();
+ $admin = auth()->user();
+ $enrichment = new AccountEnrichment();
$enrichment->setUser($admin);
$enrichment->setConvertToNative($this->convertToNative);
$enrichment->setNative($this->nativeCurrency);
- $account = $enrichment->enrichSingle($account);
+ $account = $enrichment->enrichSingle($account);
/** @var AccountTransformer $transformer */
diff --git a/app/Api/V1/Controllers/Models/Account/StoreController.php b/app/Api/V1/Controllers/Models/Account/StoreController.php
index ca327bda58..6dda3b0564 100644
--- a/app/Api/V1/Controllers/Models/Account/StoreController.php
+++ b/app/Api/V1/Controllers/Models/Account/StoreController.php
@@ -73,12 +73,12 @@ class StoreController extends Controller
// enrich
/** @var User $admin */
- $admin = auth()->user();
- $enrichment = new AccountEnrichment();
+ $admin = auth()->user();
+ $enrichment = new AccountEnrichment();
$enrichment->setUser($admin);
$enrichment->setConvertToNative($this->convertToNative);
$enrichment->setNative($this->nativeCurrency);
- $account = $enrichment->enrichSingle($account);
+ $account = $enrichment->enrichSingle($account);
/** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class);
diff --git a/app/Api/V1/Controllers/Models/Account/UpdateController.php b/app/Api/V1/Controllers/Models/Account/UpdateController.php
index 03df429637..fdbe785d0a 100644
--- a/app/Api/V1/Controllers/Models/Account/UpdateController.php
+++ b/app/Api/V1/Controllers/Models/Account/UpdateController.php
@@ -77,12 +77,12 @@ class UpdateController extends Controller
// enrich
/** @var User $admin */
- $admin = auth()->user();
- $enrichment = new AccountEnrichment();
+ $admin = auth()->user();
+ $enrichment = new AccountEnrichment();
$enrichment->setUser($admin);
$enrichment->setConvertToNative($this->convertToNative);
$enrichment->setNative($this->nativeCurrency);
- $account = $enrichment->enrichSingle($account);
+ $account = $enrichment->enrichSingle($account);
/** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class);
diff --git a/app/Api/V1/Controllers/Models/Bill/ListController.php b/app/Api/V1/Controllers/Models/Bill/ListController.php
index 088633618f..e0e21e01cc 100644
--- a/app/Api/V1/Controllers/Models/Bill/ListController.php
+++ b/app/Api/V1/Controllers/Models/Bill/ListController.php
@@ -179,7 +179,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.bills.transactions', [$bill->id]).$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Models/Budget/ListController.php b/app/Api/V1/Controllers/Models/Budget/ListController.php
index 3f6bc40df2..7c8eaad8b7 100644
--- a/app/Api/V1/Controllers/Models/Budget/ListController.php
+++ b/app/Api/V1/Controllers/Models/Budget/ListController.php
@@ -175,7 +175,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.budgets.transactions', [$budget->id]).$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
@@ -239,7 +239,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.budgets.without-budget').$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php b/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php
index 1b79478858..ee987eae8a 100644
--- a/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php
+++ b/app/Api/V1/Controllers/Models/BudgetLimit/ListController.php
@@ -87,7 +87,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.budgets.limits.transactions', [$budget->id, $budgetLimit->id]).$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Models/Category/ListController.php b/app/Api/V1/Controllers/Models/Category/ListController.php
index 0a743b8e42..04af2f2c6c 100644
--- a/app/Api/V1/Controllers/Models/Category/ListController.php
+++ b/app/Api/V1/Controllers/Models/Category/ListController.php
@@ -142,7 +142,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.categories.transactions', [$category->id]).$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Models/PiggyBank/ListController.php b/app/Api/V1/Controllers/Models/PiggyBank/ListController.php
index 03d89911d4..8149807d71 100644
--- a/app/Api/V1/Controllers/Models/PiggyBank/ListController.php
+++ b/app/Api/V1/Controllers/Models/PiggyBank/ListController.php
@@ -77,16 +77,16 @@ class ListController extends Controller
$collection = $piggyBank->accounts;
$count = $collection->count();
- $accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
+ $accounts = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
// enrich
/** @var User $admin */
- $admin = auth()->user();
- $enrichment = new AccountEnrichment();
+ $admin = auth()->user();
+ $enrichment = new AccountEnrichment();
$enrichment->setUser($admin);
$enrichment->setConvertToNative($this->convertToNative);
$enrichment->setNative($this->nativeCurrency);
- $accounts = $enrichment->enrich($accounts);
+ $accounts = $enrichment->enrich($accounts);
// make paginator:
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
diff --git a/app/Api/V1/Controllers/Models/Recurrence/ListController.php b/app/Api/V1/Controllers/Models/Recurrence/ListController.php
index b78c2defd9..867dc46e33 100644
--- a/app/Api/V1/Controllers/Models/Recurrence/ListController.php
+++ b/app/Api/V1/Controllers/Models/Recurrence/ListController.php
@@ -113,7 +113,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.transactions.index').$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Models/Rule/TriggerController.php b/app/Api/V1/Controllers/Models/Rule/TriggerController.php
index 1da162c513..42465d3c85 100644
--- a/app/Api/V1/Controllers/Models/Rule/TriggerController.php
+++ b/app/Api/V1/Controllers/Models/Rule/TriggerController.php
@@ -96,7 +96,7 @@ class TriggerController extends Controller
$count = $transactions->count();
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($rule->user);
$transactions = $enrichment->enrich($transactions);
diff --git a/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php b/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php
index 699f98fa74..14c480577a 100644
--- a/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php
+++ b/app/Api/V1/Controllers/Models/RuleGroup/TriggerController.php
@@ -102,7 +102,7 @@ class TriggerController extends Controller
$count = $transactions->count();
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($group->user);
$transactions = $enrichment->enrich($transactions);
diff --git a/app/Api/V1/Controllers/Models/Tag/ListController.php b/app/Api/V1/Controllers/Models/Tag/ListController.php
index f887fedc68..1fc4629b05 100644
--- a/app/Api/V1/Controllers/Models/Tag/ListController.php
+++ b/app/Api/V1/Controllers/Models/Tag/ListController.php
@@ -144,7 +144,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.tags.transactions', [$tag->id]).$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Models/Transaction/ShowController.php b/app/Api/V1/Controllers/Models/Transaction/ShowController.php
index 78d435f061..97b38ba78f 100644
--- a/app/Api/V1/Controllers/Models/Transaction/ShowController.php
+++ b/app/Api/V1/Controllers/Models/Transaction/ShowController.php
@@ -35,7 +35,6 @@ use FireflyIII\Transformers\TransactionGroupTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
-use Illuminate\Support\Collection;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
@@ -89,7 +88,7 @@ class ShowController extends Controller
$paginator->setPath(route('api.v1.transactions.index').$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
@@ -144,7 +143,7 @@ class ShowController extends Controller
}
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$selectedGroup = $enrichment->enrichSingle($selectedGroup);
diff --git a/app/Api/V1/Controllers/Models/Transaction/StoreController.php b/app/Api/V1/Controllers/Models/Transaction/StoreController.php
index 4704be91ed..b9148c2ee1 100644
--- a/app/Api/V1/Controllers/Models/Transaction/StoreController.php
+++ b/app/Api/V1/Controllers/Models/Transaction/StoreController.php
@@ -135,9 +135,9 @@ class StoreController extends Controller
}
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
- $selectedGroup = $enrichment->enrichSingle($selectedGroup);
+ $selectedGroup = $enrichment->enrichSingle($selectedGroup);
/** @var TransactionGroupTransformer $transformer */
$transformer = app(TransactionGroupTransformer::class);
diff --git a/app/Api/V1/Controllers/Models/Transaction/UpdateController.php b/app/Api/V1/Controllers/Models/Transaction/UpdateController.php
index 760d387f08..c309525526 100644
--- a/app/Api/V1/Controllers/Models/Transaction/UpdateController.php
+++ b/app/Api/V1/Controllers/Models/Transaction/UpdateController.php
@@ -101,9 +101,9 @@ class UpdateController extends Controller
}
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
- $selectedGroup = $enrichment->enrichSingle($selectedGroup);
+ $selectedGroup = $enrichment->enrichSingle($selectedGroup);
/** @var TransactionGroupTransformer $transformer */
$transformer = app(TransactionGroupTransformer::class);
diff --git a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php
index c2c7027132..dc035a4532 100644
--- a/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php
+++ b/app/Api/V1/Controllers/Models/TransactionCurrency/ListController.php
@@ -104,12 +104,12 @@ class ListController extends Controller
// enrich
/** @var User $admin */
- $admin = auth()->user();
- $enrichment = new AccountEnrichment();
+ $admin = auth()->user();
+ $enrichment = new AccountEnrichment();
$enrichment->setUser($admin);
$enrichment->setConvertToNative($this->convertToNative);
$enrichment->setNative($this->nativeCurrency);
- $accounts = $enrichment->enrich($accounts);
+ $accounts = $enrichment->enrich($accounts);
// make paginator:
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
@@ -373,7 +373,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.currencies.transactions', [$currency->code]).$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php b/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php
index d777fb8824..0cbaae2bea 100644
--- a/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php
+++ b/app/Api/V1/Controllers/Models/TransactionLinkType/ListController.php
@@ -112,7 +112,7 @@ class ListController extends Controller
$paginator->setPath(route('api.v1.transactions.index').$this->buildParams());
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser($admin);
$transactions = $enrichment->enrich($paginator->getCollection());
diff --git a/app/Api/V1/Controllers/Search/AccountController.php b/app/Api/V1/Controllers/Search/AccountController.php
index c7d292ffa9..f978f66855 100644
--- a/app/Api/V1/Controllers/Search/AccountController.php
+++ b/app/Api/V1/Controllers/Search/AccountController.php
@@ -85,12 +85,12 @@ class AccountController extends Controller
// enrich
/** @var User $admin */
- $admin = auth()->user();
- $enrichment = new AccountEnrichment();
+ $admin = auth()->user();
+ $enrichment = new AccountEnrichment();
$enrichment->setUser($admin);
$enrichment->setConvertToNative($this->convertToNative);
$enrichment->setNative($this->nativeCurrency);
- $accounts = $enrichment->enrich($accounts);
+ $accounts = $enrichment->enrich($accounts);
/** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class);
diff --git a/app/Api/V1/Controllers/Search/TransactionController.php b/app/Api/V1/Controllers/Search/TransactionController.php
index 9ab21f116b..a68f44d8a6 100644
--- a/app/Api/V1/Controllers/Search/TransactionController.php
+++ b/app/Api/V1/Controllers/Search/TransactionController.php
@@ -60,7 +60,7 @@ class TransactionController extends Controller
$groups->setPath($url);
// enrich
- $enrichment = new TransactionGroupEnrichment();
+ $enrichment = new TransactionGroupEnrichment();
$enrichment->setUser(auth()->user());
$transactions = $enrichment->enrich($groups->getCollection());
diff --git a/app/Api/V1/Controllers/Summary/BasicController.php b/app/Api/V1/Controllers/Summary/BasicController.php
index 17e2719921..addd31b8eb 100644
--- a/app/Api/V1/Controllers/Summary/BasicController.php
+++ b/app/Api/V1/Controllers/Summary/BasicController.php
@@ -322,6 +322,7 @@ class BasicController extends Controller
private function getNetWorthInfo(Carbon $end): array
{
$end->endOfDay();
+
/** @var User $user */
$user = auth()->user();
Log::debug(sprintf('getNetWorthInfo up until "%s".', $end->format('Y-m-d H:i:s')));
@@ -364,7 +365,7 @@ class BasicController extends Controller
'sub_title' => '',
];
}
- if(0 === count($return)) {
+ if (0 === count($return)) {
$return[] = [
'key' => sprintf('net-worth-in-%s', $this->nativeCurrency->code),
'title' => trans('firefly.box_net_worth_in_currency', ['currency' => $this->nativeCurrency->symbol]),
diff --git a/app/Console/Commands/Correction/CorrectsGroupInformation.php b/app/Console/Commands/Correction/CorrectsGroupInformation.php
index e4c5a87dfb..c55a3f0029 100644
--- a/app/Console/Commands/Correction/CorrectsGroupInformation.php
+++ b/app/Console/Commands/Correction/CorrectsGroupInformation.php
@@ -42,7 +42,6 @@ use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\UserGroup;
use FireflyIII\Models\Webhook;
-use FireflyIII\Support\Preferences;
use FireflyIII\User;
use Illuminate\Console\Command;
use Illuminate\Database\QueryException;
diff --git a/app/Console/Commands/Tools/Cron.php b/app/Console/Commands/Tools/Cron.php
index 7423984271..b7176894c0 100644
--- a/app/Console/Commands/Tools/Cron.php
+++ b/app/Console/Commands/Tools/Cron.php
@@ -26,7 +26,6 @@ namespace FireflyIII\Console\Commands\Tools;
use Carbon\Carbon;
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
-use FireflyIII\Events\RequestedVersionCheckStatus;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Support\Cronjobs\AutoBudgetCronjob;
use FireflyIII\Support\Cronjobs\BillWarningCronjob;
@@ -54,11 +53,11 @@ class Cron extends Command
public function handle(): int
{
- $doAll = !$this->option('download-cer') &&
- !$this->option('create-recurring') &&
- !$this->option('create-auto-budgets') &&
- !$this->option('send-bill-warnings') &&
- !$this->option('check-version');
+ $doAll = !$this->option('download-cer')
+ && !$this->option('create-recurring')
+ && !$this->option('create-auto-budgets')
+ && !$this->option('send-bill-warnings')
+ && !$this->option('check-version');
$date = null;
try {
@@ -223,7 +222,8 @@ class Cron extends Command
}
}
- private function checkForUpdates(bool $force): void {
+ private function checkForUpdates(bool $force): void
+ {
$updateCheck = new UpdateCheckCronjob();
$updateCheck->setForce($force);
$updateCheck->fire();
diff --git a/app/Factory/TransactionGroupFactory.php b/app/Factory/TransactionGroupFactory.php
index 766194d8fa..38eb4e095a 100644
--- a/app/Factory/TransactionGroupFactory.php
+++ b/app/Factory/TransactionGroupFactory.php
@@ -93,7 +93,7 @@ class TransactionGroupFactory
*/
public function setUser(User $user): void
{
- $this->user = $user;
+ $this->user = $user;
$this->userGroup = $user->userGroup;
}
diff --git a/app/Handlers/Observer/AccountObserver.php b/app/Handlers/Observer/AccountObserver.php
index cf7c6dceb0..781da99341 100644
--- a/app/Handlers/Observer/AccountObserver.php
+++ b/app/Handlers/Observer/AccountObserver.php
@@ -56,7 +56,7 @@ class AccountObserver
$repository = app(AccountRepositoryInterface::class);
$currency = $repository->getAccountCurrency($account);
if (null !== $currency && $currency->id !== $userCurrency->id && '' !== (string) $account->virtual_balance && 0 !== bccomp($account->virtual_balance, '0')) {
- $converter = new ExchangeRateConverter();
+ $converter = new ExchangeRateConverter();
$converter->setUserGroup($account->user->userGroup);
$converter->setIgnoreSettings(true);
$account->native_virtual_balance = $converter->convert($currency, $userCurrency, today(), $account->virtual_balance);
diff --git a/app/Jobs/CreateRecurringTransactions.php b/app/Jobs/CreateRecurringTransactions.php
index 5d70c216ee..aac62c76dc 100644
--- a/app/Jobs/CreateRecurringTransactions.php
+++ b/app/Jobs/CreateRecurringTransactions.php
@@ -380,10 +380,10 @@ class CreateRecurringTransactions implements ShouldQueue
}
$array = [
- 'user' => $recurrence->user,
+ 'user' => $recurrence->user,
'user_group' => $recurrence->user->userGroup,
- 'group_title' => $groupTitle,
- 'transactions' => $this->getTransactionData($recurrence, $repetition, $date),
+ 'group_title' => $groupTitle,
+ 'transactions' => $this->getTransactionData($recurrence, $repetition, $date),
];
/** @var TransactionGroup $group */
@@ -423,7 +423,7 @@ class CreateRecurringTransactions implements ShouldQueue
'type' => null === $transaction?->transactionType?->type ? strtolower($recurrence->transactionType->type) : strtolower($transaction->transactionType->type), // @phpstan-ignore-line
'date' => $date,
'user' => $recurrence->user,
- 'user_group' => $recurrence->user->userGroup,
+ 'user_group' => $recurrence->user->userGroup,
'currency_id' => $transaction->transaction_currency_id,
'currency_code' => null,
'description' => $transaction->description,
diff --git a/app/Models/Account.php b/app/Models/Account.php
index 657ac61c8a..fd99e855f4 100644
--- a/app/Models/Account.php
+++ b/app/Models/Account.php
@@ -48,15 +48,15 @@ class Account extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
- 'deleted_at' => 'datetime',
- 'active' => 'boolean',
- 'encrypted' => 'boolean',
- 'virtual_balance' => 'string',
- 'native_virtual_balance' => 'string',
+ 'deleted_at' => 'datetime',
+ 'active' => 'boolean',
+ 'encrypted' => 'boolean',
+ 'virtual_balance' => 'string',
+ 'native_virtual_balance' => 'string',
];
protected $fillable = ['user_id', 'user_group_id', 'account_type_id', 'name', 'active', 'virtual_balance', 'iban', 'native_virtual_balance'];
diff --git a/app/Models/Attachment.php b/app/Models/Attachment.php
index 602b0885aa..6630ffdf0b 100644
--- a/app/Models/Attachment.php
+++ b/app/Models/Attachment.php
@@ -42,15 +42,15 @@ class Attachment extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'uploaded' => 'boolean',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'uploaded' => 'boolean',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
- protected $fillable = ['attachable_id', 'attachable_type', 'user_id','user_group_id', 'md5', 'filename', 'mime', 'title', 'description', 'size', 'uploaded'];
+ protected $fillable = ['attachable_id', 'attachable_type', 'user_id', 'user_group_id', 'md5', 'filename', 'mime', 'title', 'description', 'size', 'uploaded'];
/**
* Route binder. Converts the key in the URL to the specified object (or throw 404).
diff --git a/app/Models/AvailableBudget.php b/app/Models/AvailableBudget.php
index da7bb1c7ea..55c16d3df5 100644
--- a/app/Models/AvailableBudget.php
+++ b/app/Models/AvailableBudget.php
@@ -41,15 +41,15 @@ class AvailableBudget extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'start_date' => 'date',
- 'end_date' => 'date',
- 'transaction_currency_id' => 'int',
- 'amount' => 'string',
- 'native_amount' => 'string',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'start_date' => 'date',
+ 'end_date' => 'date',
+ 'transaction_currency_id' => 'int',
+ 'amount' => 'string',
+ 'native_amount' => 'string',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/Budget.php b/app/Models/Budget.php
index f715d57f1a..42a42a39cf 100644
--- a/app/Models/Budget.php
+++ b/app/Models/Budget.php
@@ -43,16 +43,16 @@ class Budget extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'active' => 'boolean',
- 'encrypted' => 'boolean',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'active' => 'boolean',
+ 'encrypted' => 'boolean',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
- protected $fillable = ['user_id','user_group_id', 'name', 'active', 'order', 'user_group_id'];
+ protected $fillable = ['user_id', 'user_group_id', 'name', 'active', 'order', 'user_group_id'];
protected $hidden = ['encrypted'];
diff --git a/app/Models/Category.php b/app/Models/Category.php
index eb58b9894e..2b0ab99837 100644
--- a/app/Models/Category.php
+++ b/app/Models/Category.php
@@ -42,11 +42,11 @@ class Category extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'encrypted' => 'boolean',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'encrypted' => 'boolean',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/CurrencyExchangeRate.php b/app/Models/CurrencyExchangeRate.php
index 469e606e98..9d6fb264ba 100644
--- a/app/Models/CurrencyExchangeRate.php
+++ b/app/Models/CurrencyExchangeRate.php
@@ -40,15 +40,15 @@ class CurrencyExchangeRate extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
- 'from_currency_id' => 'integer',
- 'to_currency_id' => 'integer',
- 'date' => SeparateTimezoneCaster::class,
- 'rate' => 'string',
- 'user_rate' => 'string',
+ 'from_currency_id' => 'integer',
+ 'to_currency_id' => 'integer',
+ 'date' => SeparateTimezoneCaster::class,
+ 'rate' => 'string',
+ 'user_rate' => 'string',
];
protected $fillable = ['user_id', 'from_currency_id', 'to_currency_id', 'date', 'date_tz', 'rate'];
diff --git a/app/Models/GroupMembership.php b/app/Models/GroupMembership.php
index 734803fe93..ef8c189f75 100644
--- a/app/Models/GroupMembership.php
+++ b/app/Models/GroupMembership.php
@@ -36,10 +36,10 @@ class GroupMembership extends Model
use ReturnsIntegerIdTrait;
use ReturnsIntegerUserIdTrait;
- protected $casts = [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'user_id' => 'integer',
+ protected $casts = [
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/InvitedUser.php b/app/Models/InvitedUser.php
index d4398b6bab..67a8853a00 100644
--- a/app/Models/InvitedUser.php
+++ b/app/Models/InvitedUser.php
@@ -39,12 +39,12 @@ class InvitedUser extends Model
protected $casts
= [
- 'expires' => SeparateTimezoneCaster::class,
- 'redeemed' => 'boolean',
- 'user_id' => 'integer',
+ 'expires' => SeparateTimezoneCaster::class,
+ 'redeemed' => 'boolean',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
- protected $fillable = ['user_group_id','user_id', 'email', 'invite_code', 'expires', 'expires_tz', 'redeemed'];
+ protected $fillable = ['user_group_id', 'user_id', 'email', 'invite_code', 'expires', 'expires_tz', 'redeemed'];
/**
* Route binder. Converts the key in the URL to the specified object (or throw 404).
diff --git a/app/Models/ObjectGroup.php b/app/Models/ObjectGroup.php
index 0b41e81c10..6c37589ce6 100644
--- a/app/Models/ObjectGroup.php
+++ b/app/Models/ObjectGroup.php
@@ -40,11 +40,11 @@ class ObjectGroup extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
- 'deleted_at' => 'datetime',
+ 'deleted_at' => 'datetime',
];
protected $fillable = ['title', 'order', 'user_id', 'user_group_id'];
diff --git a/app/Models/Preference.php b/app/Models/Preference.php
index a6b5c722f3..529c6d6694 100644
--- a/app/Models/Preference.php
+++ b/app/Models/Preference.php
@@ -37,10 +37,10 @@ class Preference extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'data' => 'array',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'data' => 'array',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/Recurrence.php b/app/Models/Recurrence.php
index 6093c5d703..235501eb51 100644
--- a/app/Models/Recurrence.php
+++ b/app/Models/Recurrence.php
@@ -44,19 +44,19 @@ class Recurrence extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'title' => 'string',
- 'id' => 'int',
- 'description' => 'string',
- 'first_date' => SeparateTimezoneCaster::class,
- 'repeat_until' => SeparateTimezoneCaster::class,
- 'latest_date' => SeparateTimezoneCaster::class,
- 'repetitions' => 'int',
- 'active' => 'bool',
- 'apply_rules' => 'bool',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'title' => 'string',
+ 'id' => 'int',
+ 'description' => 'string',
+ 'first_date' => SeparateTimezoneCaster::class,
+ 'repeat_until' => SeparateTimezoneCaster::class,
+ 'latest_date' => SeparateTimezoneCaster::class,
+ 'repetitions' => 'int',
+ 'active' => 'bool',
+ 'apply_rules' => 'bool',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/Rule.php b/app/Models/Rule.php
index 5a27b8da44..9c4e2f9a45 100644
--- a/app/Models/Rule.php
+++ b/app/Models/Rule.php
@@ -41,19 +41,19 @@ class Rule extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'active' => 'boolean',
- 'order' => 'int',
- 'stop_processing' => 'boolean',
- 'id' => 'int',
- 'strict' => 'boolean',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'active' => 'boolean',
+ 'order' => 'int',
+ 'stop_processing' => 'boolean',
+ 'id' => 'int',
+ 'strict' => 'boolean',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
- protected $fillable = ['rule_group_id', 'order', 'active', 'title', 'description', 'user_id','user_group_id', 'strict'];
+ protected $fillable = ['rule_group_id', 'order', 'active', 'title', 'description', 'user_id', 'user_group_id', 'strict'];
/**
* Route binder. Converts the key in the URL to the specified object (or throw 404).
diff --git a/app/Models/RuleGroup.php b/app/Models/RuleGroup.php
index 5554da39e9..1f15b7fee6 100644
--- a/app/Models/RuleGroup.php
+++ b/app/Models/RuleGroup.php
@@ -41,13 +41,13 @@ class RuleGroup extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'active' => 'boolean',
- 'stop_processing' => 'boolean',
- 'order' => 'int',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'active' => 'boolean',
+ 'stop_processing' => 'boolean',
+ 'order' => 'int',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/Tag.php b/app/Models/Tag.php
index ea1cca6ad0..aa92e5e1b0 100644
--- a/app/Models/Tag.php
+++ b/app/Models/Tag.php
@@ -42,14 +42,14 @@ class Tag extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'date' => SeparateTimezoneCaster::class,
- 'zoomLevel' => 'int',
- 'latitude' => 'float',
- 'longitude' => 'float',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'date' => SeparateTimezoneCaster::class,
+ 'zoomLevel' => 'int',
+ 'latitude' => 'float',
+ 'longitude' => 'float',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/TransactionGroup.php b/app/Models/TransactionGroup.php
index 7d8761c545..dfddb2f66c 100644
--- a/app/Models/TransactionGroup.php
+++ b/app/Models/TransactionGroup.php
@@ -40,13 +40,13 @@ class TransactionGroup extends Model
protected $casts
= [
- 'id' => 'integer',
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'title' => 'string',
- 'date' => 'datetime',
- 'user_id' => 'integer',
+ 'id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'title' => 'string',
+ 'date' => 'datetime',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/TransactionJournal.php b/app/Models/TransactionJournal.php
index 139b20b21b..b777a87a0b 100644
--- a/app/Models/TransactionJournal.php
+++ b/app/Models/TransactionJournal.php
@@ -54,18 +54,18 @@ class TransactionJournal extends Model
protected $casts
= [
- 'created_at' => 'datetime',
- 'updated_at' => 'datetime',
- 'deleted_at' => 'datetime',
- 'date' => SeparateTimezoneCaster::class,
- 'interest_date' => 'date',
- 'book_date' => 'date',
- 'process_date' => 'date',
- 'order' => 'int',
- 'tag_count' => 'int',
- 'encrypted' => 'boolean',
- 'completed' => 'boolean',
- 'user_id' => 'integer',
+ 'created_at' => 'datetime',
+ 'updated_at' => 'datetime',
+ 'deleted_at' => 'datetime',
+ 'date' => SeparateTimezoneCaster::class,
+ 'interest_date' => 'date',
+ 'book_date' => 'date',
+ 'process_date' => 'date',
+ 'order' => 'int',
+ 'tag_count' => 'int',
+ 'encrypted' => 'boolean',
+ 'completed' => 'boolean',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php
index 0866286239..b70c509711 100644
--- a/app/Models/Webhook.php
+++ b/app/Models/Webhook.php
@@ -44,11 +44,11 @@ class Webhook extends Model
protected $casts
= [
- 'active' => 'boolean',
- 'trigger' => 'integer',
- 'response' => 'integer',
- 'delivery' => 'integer',
- 'user_id' => 'integer',
+ 'active' => 'boolean',
+ 'trigger' => 'integer',
+ 'response' => 'integer',
+ 'delivery' => 'integer',
+ 'user_id' => 'integer',
'user_group_id' => 'integer',
];
protected $fillable = ['active', 'trigger', 'response', 'delivery', 'user_id', 'user_group_id', 'url', 'title', 'secret'];
diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php
index 4f7749b64d..ca3c15e64c 100644
--- a/app/Repositories/Currency/CurrencyRepository.php
+++ b/app/Repositories/Currency/CurrencyRepository.php
@@ -111,12 +111,13 @@ class CurrencyRepository implements CurrencyRepositoryInterface
public function setUser(null|Authenticatable|User $user): void
{
if ($user instanceof User) {
- $this->user = $user;
+ $this->user = $user;
$this->userGroup = $user->userGroup;
}
}
- #[\Override] public function setUserGroup(UserGroup $userGroup): void
+ #[\Override]
+ public function setUserGroup(UserGroup $userGroup): void
{
$this->userGroup = $userGroup;
}
diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php
index 4b689542ac..30b889d299 100644
--- a/app/Repositories/Currency/CurrencyRepositoryInterface.php
+++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php
@@ -68,5 +68,6 @@ interface CurrencyRepositoryInterface
public function setExchangeRate(TransactionCurrency $fromCurrency, TransactionCurrency $toCurrency, Carbon $date, float $rate): CurrencyExchangeRate;
public function setUser(null|Authenticatable|User $user): void;
+
public function setUserGroup(UserGroup $userGroup): void;
}
diff --git a/app/Services/Internal/Support/AccountServiceTrait.php b/app/Services/Internal/Support/AccountServiceTrait.php
index bbf9052b01..b87cbaaec7 100644
--- a/app/Services/Internal/Support/AccountServiceTrait.php
+++ b/app/Services/Internal/Support/AccountServiceTrait.php
@@ -249,7 +249,7 @@ trait AccountServiceTrait
'destination_id' => $destId,
'destination_name' => $destName,
'user' => $account->user,
- 'user_group' => $account->user->userGroup,
+ 'user_group' => $account->user->userGroup,
'currency_id' => $currency->id,
'order' => 0,
'amount' => $amount,
@@ -474,7 +474,7 @@ trait AccountServiceTrait
'destination_id' => $destId,
'destination_name' => $destName,
'user' => $account->user,
- 'user_group' => $account->user->userGroup,
+ 'user_group' => $account->user->userGroup,
'currency_id' => $currency->id,
'order' => 0,
'amount' => $amount,
diff --git a/app/Support/Cronjobs/UpdateCheckCronjob.php b/app/Support/Cronjobs/UpdateCheckCronjob.php
index f4210eb808..9b9a08f5de 100644
--- a/app/Support/Cronjobs/UpdateCheckCronjob.php
+++ b/app/Support/Cronjobs/UpdateCheckCronjob.php
@@ -1,4 +1,5 @@
get('permission_update_check', -1);
- $value = (int) $permission->data;
+ $permission = app('fireflyconfig')->get('permission_update_check', -1);
+ $value = (int) $permission->data;
if (1 !== $value) {
Log::debug('Update check is not enabled.');
// get stuff from job:
@@ -52,9 +54,9 @@ class UpdateCheckCronjob extends AbstractCronjob
// TODO this is duplicate.
/** @var Configuration $lastCheckTime */
- $lastCheckTime = FireflyConfig::get('last_update_check', time());
- $now = time();
- $diff = $now - $lastCheckTime->data;
+ $lastCheckTime = FireflyConfig::get('last_update_check', time());
+ $now = time();
+ $diff = $now - $lastCheckTime->data;
Log::debug(sprintf('Last check time is %d, current time is %d, difference is %d', $lastCheckTime->data, $now, $diff));
if ($diff < 604800 && false === $this->force) {
// get stuff from job:
@@ -65,10 +67,10 @@ class UpdateCheckCronjob extends AbstractCronjob
return;
}
- // last check time was more than a week ago.
+ // last check time was more than a week ago.
Log::debug('Have not checked for a new version in a week!');
- $release = $this->getLatestRelease();
- if('error' === $release['level']) {
+ $release = $this->getLatestRelease();
+ if ('error' === $release['level']) {
// get stuff from job:
$this->jobFired = true;
$this->jobErrored = true;
diff --git a/app/Support/JsonApi/Enrichments/AccountEnrichment.php b/app/Support/JsonApi/Enrichments/AccountEnrichment.php
index 1206518494..6180c6f7ca 100644
--- a/app/Support/JsonApi/Enrichments/AccountEnrichment.php
+++ b/app/Support/JsonApi/Enrichments/AccountEnrichment.php
@@ -33,13 +33,10 @@ use FireflyIII\Models\AccountMeta;
use FireflyIII\Models\AccountType;
use FireflyIII\Models\Location;
use FireflyIII\Models\Note;
-use FireflyIII\Models\ObjectGroup;
use FireflyIII\Models\TransactionCurrency;
-use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\UserGroup;
use FireflyIII\Support\Facades\Balance;
use FireflyIII\Support\Facades\Steam;
-use FireflyIII\Support\Http\Api\ExchangeRateConverter;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
@@ -52,15 +49,15 @@ use Illuminate\Support\Facades\Log;
*/
class AccountEnrichment implements EnrichmentInterface
{
-// private array $balances;
-// private array $currencies;
-// private CurrencyRepositoryInterface $currencyRepository;
-// private TransactionCurrency $default;
-// private ?Carbon $end;
-// private array $grouped;
-// private array $objectGroups;
-// private AccountRepositoryInterface $repository;
-// private ?Carbon $start;
+ // private array $balances;
+ // private array $currencies;
+ // private CurrencyRepositoryInterface $currencyRepository;
+ // private TransactionCurrency $default;
+ // private ?Carbon $end;
+ // private array $grouped;
+ // private array $objectGroups;
+ // private AccountRepositoryInterface $repository;
+ // private ?Carbon $start;
private Collection $collection;
@@ -88,14 +85,14 @@ class AccountEnrichment implements EnrichmentInterface
$this->meta = [];
$this->notes = [];
$this->locations = [];
-// $this->repository = app(AccountRepositoryInterface::class);
-// $this->currencyRepository = app(CurrencyRepositoryInterface::class);
-// $this->start = null;
-// $this->end = null;
+ // $this->repository = app(AccountRepositoryInterface::class);
+ // $this->currencyRepository = app(CurrencyRepositoryInterface::class);
+ // $this->start = null;
+ // $this->end = null;
}
#[\Override]
- public function enrichSingle(Model | array $model): Account | array
+ public function enrichSingle(array|Model $model): Account|array
{
Log::debug(__METHOD__);
$collection = new Collection([$model]);
@@ -120,18 +117,18 @@ class AccountEnrichment implements EnrichmentInterface
$this->collectNotes();
$this->collectLocations();
$this->collectOpeningBalances();
-// $this->default = app('amount')->getNativeCurrency();
-// $this->currencies = [];
-// $this->balances = [];
-// $this->objectGroups = [];
-// $this->grouped = [];
-//
-// // do everything here:
-// $this->getLastActivity();
-// $this->collectAccountTypes();
-// $this->collectMetaData();
-// $this->getMetaBalances();
-// $this->getObjectGroups();
+ // $this->default = app('amount')->getNativeCurrency();
+ // $this->currencies = [];
+ // $this->balances = [];
+ // $this->objectGroups = [];
+ // $this->grouped = [];
+ //
+ // // do everything here:
+ // $this->getLastActivity();
+ // $this->collectAccountTypes();
+ // $this->collectMetaData();
+ // $this->getMetaBalances();
+ // $this->getObjectGroups();
// $this->collection->transform(function (Account $account) {
// $account->user_array = ['id' => 1, 'bla bla' => 'bla'];
@@ -152,6 +149,7 @@ class AccountEnrichment implements EnrichmentInterface
private function getAccountTypes(): void
{
$types = AccountType::whereIn('id', $this->accountTypeIds)->get();
+
/** @var AccountType $type */
foreach ($types as $type) {
$this->accountTypes[(int) $type->id] = $type->type;
@@ -212,7 +210,7 @@ class AccountEnrichment implements EnrichmentInterface
if (array_key_exists($item->id, $locations)) {
$accountMeta['location'] = $locations[$item->id];
}
- $item->meta = $accountMeta;
+ $item->meta = $accountMeta;
return $item;
});
@@ -224,43 +222,47 @@ class AccountEnrichment implements EnrichmentInterface
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setUser($this->user)->setAccounts($this->collection)
- ->withAccountInformation()
- ->setTypes([TransactionTypeEnum::OPENING_BALANCE->value]);
- $journals = $collector->getExtractedJournals();
+ ->withAccountInformation()
+ ->setTypes([TransactionTypeEnum::OPENING_BALANCE->value])
+ ;
+ $journals = $collector->getExtractedJournals();
foreach ($journals as $journal) {
$this->openingBalances[(int) $journal['source_account_id']]
= [
- 'amount' => Steam::negative($journal['amount']),
- 'date' => $journal['date'],
- ];
+ 'amount' => Steam::negative($journal['amount']),
+ 'date' => $journal['date'],
+ ];
$this->openingBalances[(int) $journal['destination_account_id']]
= [
- 'amount' => Steam::positive($journal['amount']),
- 'date' => $journal['date'],
- ];
+ 'amount' => Steam::positive($journal['amount']),
+ 'date' => $journal['date'],
+ ];
}
}
- private function collectLocations(): void {
+ private function collectLocations(): void
+ {
$locations = Location::query()->whereIn('locatable_id', $this->accountIds)
- ->where('locatable_type', Account::class)->get(['locations.locatable_id', 'locations.latitude', 'locations.longitude', 'locations.zoom_level'])->toArray();
+ ->where('locatable_type', Account::class)->get(['locations.locatable_id', 'locations.latitude', 'locations.longitude', 'locations.zoom_level'])->toArray()
+ ;
foreach ($locations as $location) {
$this->locations[(int) $location['locatable_id']]
= [
- 'latitude' => (float) $location['latitude'],
- 'longitude' => (float) $location['longitude'],
- 'zoom_level' => (int) $location['zoom_level'],
- ];
+ 'latitude' => (float) $location['latitude'],
+ 'longitude' => (float) $location['longitude'],
+ 'zoom_level' => (int) $location['zoom_level'],
+ ];
}
Log::debug(sprintf('Enrich with %d locations(s)', count($this->locations)));
}
private function collectMetaData(): void
{
- $set = AccountMeta
- ::whereIn('name', ['is_multi_currency', 'currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt'])
+ $set = AccountMeta::whereIn('name', ['is_multi_currency', 'currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt'])
->whereIn('account_id', $this->accountIds)
- ->get(['account_meta.id', 'account_meta.account_id', 'account_meta.name', 'account_meta.data'])->toArray();
+ ->get(['account_meta.id', 'account_meta.account_id', 'account_meta.name', 'account_meta.data'])->toArray()
+ ;
+
/** @var array $entry */
foreach ($set as $entry) {
$this->meta[(int) $entry['account_id']][$entry['name']] = (string) $entry['data'];
@@ -303,14 +305,13 @@ class AccountEnrichment implements EnrichmentInterface
private function collectNotes(): void
{
$notes = Note::query()->whereIn('noteable_id', $this->accountIds)
- ->whereNotNull('notes.text')
- ->where('notes.text', '!=', '')
- ->where('noteable_type', Account::class)->get(['notes.noteable_id', 'notes.text'])->toArray();
+ ->whereNotNull('notes.text')
+ ->where('notes.text', '!=', '')
+ ->where('noteable_type', Account::class)->get(['notes.noteable_id', 'notes.text'])->toArray()
+ ;
foreach ($notes as $note) {
$this->notes[(int) $note['noteable_id']] = (string) $note['text'];
}
Log::debug(sprintf('Enrich with %d note(s)', count($this->notes)));
}
-
-
}
diff --git a/app/Support/JsonApi/Enrichments/EnrichmentInterface.php b/app/Support/JsonApi/Enrichments/EnrichmentInterface.php
index 4f8c5f46ab..916ca3c058 100644
--- a/app/Support/JsonApi/Enrichments/EnrichmentInterface.php
+++ b/app/Support/JsonApi/Enrichments/EnrichmentInterface.php
@@ -33,12 +33,9 @@ interface EnrichmentInterface
{
public function enrich(Collection $collection): Collection;
- public function enrichSingle(Model|array $model): Model|array;
+ public function enrichSingle(array|Model $model): array|Model;
public function setUserGroup(UserGroup $userGroup): void;
public function setUser(User $user): void;
}
-
-
-
diff --git a/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php b/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php
index 4f3f6a1de8..0a74fd05db 100644
--- a/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php
+++ b/app/Support/JsonApi/Enrichments/TransactionGroupEnrichment.php
@@ -1,4 +1,5 @@
metaData = [];
$this->locations = [];
$this->attachmentCount = [];
- $this->dateFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date',];
+ $this->dateFields = ['interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date'];
}
- #[\Override] public function enrich(Collection $collection): Collection
+ #[\Override]
+ public function enrich(Collection $collection): Collection
{
Log::debug(sprintf('Now doing account enrichment for %d transaction group(s)', $collection->count()));
// prep local fields
@@ -81,14 +83,17 @@ class TransactionGroupEnrichment implements EnrichmentInterface
return $this->collection;
}
- #[\Override] public function enrichSingle(Model|array $model): TransactionGroup|array
+ #[\Override]
+ public function enrichSingle(array|Model $model): array|TransactionGroup
{
Log::debug(__METHOD__);
- if(is_array($model)) {
+ if (is_array($model)) {
$collection = new Collection([$model]);
$collection = $this->enrich($collection);
+
return $collection->first();
}
+
throw new FireflyException('Cannot enrich single model.');
}
@@ -117,9 +122,10 @@ class TransactionGroupEnrichment implements EnrichmentInterface
private function collectNotes(): void
{
$notes = Note::query()->whereIn('noteable_id', $this->journalIds)
- ->whereNotNull('notes.text')
- ->where('notes.text', '!=', '')
- ->where('noteable_type', TransactionJournal::class)->get(['notes.noteable_id', 'notes.text'])->toArray();
+ ->whereNotNull('notes.text')
+ ->where('notes.text', '!=', '')
+ ->where('noteable_type', TransactionJournal::class)->get(['notes.noteable_id', 'notes.text'])->toArray()
+ ;
foreach ($notes as $note) {
$this->notes[(int) $note['noteable_id']] = (string) $note['text'];
}
@@ -128,13 +134,13 @@ class TransactionGroupEnrichment implements EnrichmentInterface
private function collectTags(): void
{
- $set = Tag::
- leftJoin('tag_transaction_journal', 'tags.id', '=', 'tag_transaction_journal.tag_id')
- ->whereIn('tag_transaction_journal.transaction_journal_id', $this->journalIds)
- ->get(['tag_transaction_journal.transaction_journal_id', 'tags.tag'])->toArray();
+ $set = Tag::leftJoin('tag_transaction_journal', 'tags.id', '=', 'tag_transaction_journal.tag_id')
+ ->whereIn('tag_transaction_journal.transaction_journal_id', $this->journalIds)
+ ->get(['tag_transaction_journal.transaction_journal_id', 'tags.tag'])->toArray()
+ ;
foreach ($set as $item) {
$journalId = $item['transaction_journal_id'];
- $this->tags[$journalId] ??= [];
+ $this->tags[$journalId] ??= [];
$this->tags[$journalId][] = $item['tag'];
}
}
@@ -143,13 +149,14 @@ class TransactionGroupEnrichment implements EnrichmentInterface
{
$set = TransactionJournalMeta::whereIn('transaction_journal_id', $this->journalIds)->get(['transaction_journal_id', 'name', 'data'])->toArray();
foreach ($set as $entry) {
- $name = $entry['name'];
- $data = (string) $entry['data'];
+ $name = $entry['name'];
+ $data = (string) $entry['data'];
if ('' === $data) {
continue;
}
if (in_array($name, $this->dateFields, true)) {
$this->metaData[$entry['transaction_journal_id']][$name] = Carbon::parse($data);
+
continue;
}
$this->metaData[(int) $entry['transaction_journal_id']][$name] = $data;
@@ -159,14 +166,15 @@ class TransactionGroupEnrichment implements EnrichmentInterface
private function collectLocations(): void
{
$locations = Location::query()->whereIn('locatable_id', $this->journalIds)
- ->where('locatable_type', TransactionJournal::class)->get(['locations.locatable_id', 'locations.latitude', 'locations.longitude', 'locations.zoom_level'])->toArray();
+ ->where('locatable_type', TransactionJournal::class)->get(['locations.locatable_id', 'locations.latitude', 'locations.longitude', 'locations.zoom_level'])->toArray()
+ ;
foreach ($locations as $location) {
$this->locations[(int) $location['locatable_id']]
= [
- 'latitude' => (float) $location['latitude'],
- 'longitude' => (float) $location['longitude'],
- 'zoom_level' => (int) $location['zoom_level'],
- ];
+ 'latitude' => (float) $location['latitude'],
+ 'longitude' => (float) $location['longitude'],
+ 'zoom_level' => (int) $location['zoom_level'],
+ ];
}
Log::debug(sprintf('Enrich with %d locations(s)', count($this->locations)));
}
@@ -174,19 +182,21 @@ class TransactionGroupEnrichment implements EnrichmentInterface
private function collectAttachmentCount(): void
{
// select count(id) as nr_of_attachments, attachable_id from attachments
- //group by attachable_id
+ // group by attachable_id
$attachments = Attachment::query()
- ->whereIn('attachable_id', $this->journalIds)
- ->where('attachable_type', TransactionJournal::class)
- ->groupBy('attachable_id')
- ->get(['attachable_id', DB::raw('COUNT(id) as nr_of_attachments')]) // @phpstan-ignore-line
- ->toArray();
+ ->whereIn('attachable_id', $this->journalIds)
+ ->where('attachable_type', TransactionJournal::class)
+ ->groupBy('attachable_id')
+ ->get(['attachable_id', DB::raw('COUNT(id) as nr_of_attachments')]) // @phpstan-ignore-line
+ ->toArray()
+ ;
foreach ($attachments as $row) {
$this->attachmentCount[(int) $row['attachable_id']] = (int) $row['nr_of_attachments'];
}
}
- private function appendCollectedData(): void {
+ private function appendCollectedData(): void
+ {
$notes = $this->notes;
$tags = $this->tags;
$metaData = $this->metaData;
@@ -195,32 +205,33 @@ class TransactionGroupEnrichment implements EnrichmentInterface
$this->collection = $this->collection->map(function (array $item) use ($notes, $tags, $metaData, $locations, $attachmentCount) {
foreach ($item['transactions'] as $index => $transaction) {
- $journalId = (int) $transaction['transaction_journal_id'];
+ $journalId = (int) $transaction['transaction_journal_id'];
// attach notes if they exist:
- $item['transactions'][$index]['notes'] = array_key_exists($journalId, $notes) ? $notes[$journalId] : null;
+ $item['transactions'][$index]['notes'] = array_key_exists($journalId, $notes) ? $notes[$journalId] : null;
// attach tags if they exist:
- $item['transactions'][$index]['tags'] = array_key_exists($journalId, $tags) ? $tags[$journalId] : [];
+ $item['transactions'][$index]['tags'] = array_key_exists($journalId, $tags) ? $tags[$journalId] : [];
// attachment count
$item['transactions'][$index]['attachment_count'] = array_key_exists($journalId, $attachmentCount) ? $attachmentCount[$journalId] : 0;
// default location data
- $item['transactions'][$index]['location'] = [
+ $item['transactions'][$index]['location'] = [
'latitude' => null,
'longitude' => null,
'zoom_level' => null,
];
// append meta data
- $item['transactions'][$index]['meta'] = [];
- $item['transactions'][$index]['meta_date'] = [];
+ $item['transactions'][$index]['meta'] = [];
+ $item['transactions'][$index]['meta_date'] = [];
if (array_key_exists($journalId, $metaData)) {
// loop al meta data:
foreach ($metaData[$journalId] as $name => $value) {
if (in_array($name, $this->dateFields, true)) {
$item['transactions'][$index]['meta_date'][$name] = Carbon::parse($value);
+
continue;
}
$item['transactions'][$index]['meta'][$name] = $value;
@@ -232,9 +243,8 @@ class TransactionGroupEnrichment implements EnrichmentInterface
$item['transactions'][$index]['location'] = $locations[$journalId];
}
}
+
return $item;
});
}
-
-
}
diff --git a/app/Support/Report/Summarizer/TransactionSummarizer.php b/app/Support/Report/Summarizer/TransactionSummarizer.php
index 435ab4cd91..6c3a22fd6a 100644
--- a/app/Support/Report/Summarizer/TransactionSummarizer.php
+++ b/app/Support/Report/Summarizer/TransactionSummarizer.php
@@ -54,17 +54,17 @@ class TransactionSummarizer
Log::debug(sprintf('Now in groupByCurrencyId(array, "%s")', $method));
$array = [];
foreach ($journals as $journal) {
- $field = 'amount';
+ $field = 'amount';
// grab default currency information.
- $currencyId = (int) $journal['currency_id'];
- $currencyName = $journal['currency_name'];
- $currencySymbol = $journal['currency_symbol'];
- $currencyCode = $journal['currency_code'];
- $currencyDecimalPlaces = $journal['currency_decimal_places'];
+ $currencyId = (int) $journal['currency_id'];
+ $currencyName = $journal['currency_name'];
+ $currencySymbol = $journal['currency_symbol'];
+ $currencyCode = $journal['currency_code'];
+ $currencyDecimalPlaces = $journal['currency_decimal_places'];
// prepare foreign currency info:
- $foreignCurrencyId = 0;
+ $foreignCurrencyId = 0;
$foreignCurrencyName = null;
$foreignCurrencySymbol = null;
$foreignCurrencyCode = null;
@@ -106,7 +106,7 @@ class TransactionSummarizer
}
// first process normal amount
- $amount = (string) ($journal[$field] ?? '0');
+ $amount = (string) ($journal[$field] ?? '0');
$array[$currencyId] ??= [
'sum' => '0',
'currency_id' => $currencyId,
diff --git a/app/Support/Steam.php b/app/Support/Steam.php
index 33d3c12ac6..5aa6a8c917 100644
--- a/app/Support/Steam.php
+++ b/app/Support/Steam.php
@@ -41,8 +41,8 @@ class Steam
{
public function getAccountCurrency(Account $account): ?TransactionCurrency
{
- $type = $account->accountType->type;
- $list = config('firefly.valid_currency_account_types');
+ $type = $account->accountType->type;
+ $list = config('firefly.valid_currency_account_types');
// return null if not in this list.
if (!in_array($type, $list, true)) {
@@ -64,7 +64,7 @@ class Steam
Log::debug(sprintf('finalAccountBalanceInRange(#%d, %s, %s)', $account->id, $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
// set up cache
- $cache = new CacheProperties();
+ $cache = new CacheProperties();
$cache->addProperty($account->id);
$cache->addProperty('final-balance-in-range');
$cache->addProperty($start);
@@ -74,21 +74,21 @@ class Steam
return $cache->get();
}
- $balances = [];
- $formatted = $start->format('Y-m-d');
+ $balances = [];
+ $formatted = $start->format('Y-m-d');
/*
* To make sure the start balance is correct, we need to get the balance at the exact end of the previous day.
* Since we just did "startOfDay" we can do subDay()->endOfDay() to get the correct moment.
* THAT will be the start balance.
*/
- $request = clone $start;
+ $request = clone $start;
$request->subDay()->endOfDay();
Log::debug(sprintf('finalAccountBalanceInRange: Call finalAccountBalance with date/time "%s"', $request->toIso8601String()));
- $startBalance = $this->finalAccountBalance($account, $request);
- $nativeCurrency = app('amount')->getNativeCurrencyByUserGroup($account->user->userGroup);
- $accountCurrency = $this->getAccountCurrency($account);
- $hasCurrency = null !== $accountCurrency;
- $currency = $accountCurrency ?? $nativeCurrency;
+ $startBalance = $this->finalAccountBalance($account, $request);
+ $nativeCurrency = app('amount')->getNativeCurrencyByUserGroup($account->user->userGroup);
+ $accountCurrency = $this->getAccountCurrency($account);
+ $hasCurrency = null !== $accountCurrency;
+ $currency = $accountCurrency ?? $nativeCurrency;
Log::debug(sprintf('Currency is %s', $currency->code));
@@ -101,7 +101,7 @@ class Steam
Log::debug(sprintf('Also set start balance in %s', $nativeCurrency->code));
$startBalance[$nativeCurrency->code] ??= '0';
}
- $currencies = [
+ $currencies = [
$currency->id => $currency,
$nativeCurrency->id => $nativeCurrency,
];
@@ -111,45 +111,46 @@ class Steam
// sums up the balance changes per day.
Log::debug(sprintf('Date >= %s and <= %s', $start->format('Y-m-d H:i:s'), $end->format('Y-m-d H:i:s')));
- $set = $account->transactions()
- ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
- ->where('transaction_journals.date', '>=', $start->format('Y-m-d H:i:s'))
- ->where('transaction_journals.date', '<=', $end->format('Y-m-d H:i:s'))
- ->groupBy('transaction_journals.date')
- ->groupBy('transactions.transaction_currency_id')
- ->orderBy('transaction_journals.date', 'ASC')
- ->whereNull('transaction_journals.deleted_at')
- ->get(
- [ // @phpstan-ignore-line
- 'transaction_journals.date',
- 'transactions.transaction_currency_id',
- DB::raw('SUM(transactions.amount) AS sum_of_day'),
- ]
- );
+ $set = $account->transactions()
+ ->leftJoin('transaction_journals', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
+ ->where('transaction_journals.date', '>=', $start->format('Y-m-d H:i:s'))
+ ->where('transaction_journals.date', '<=', $end->format('Y-m-d H:i:s'))
+ ->groupBy('transaction_journals.date')
+ ->groupBy('transactions.transaction_currency_id')
+ ->orderBy('transaction_journals.date', 'ASC')
+ ->whereNull('transaction_journals.deleted_at')
+ ->get(
+ [ // @phpstan-ignore-line
+ 'transaction_journals.date',
+ 'transactions.transaction_currency_id',
+ DB::raw('SUM(transactions.amount) AS sum_of_day'),
+ ]
+ )
+ ;
- $currentBalance = $startBalance;
- $converter = new ExchangeRateConverter();
+ $currentBalance = $startBalance;
+ $converter = new ExchangeRateConverter();
/** @var Transaction $entry */
foreach ($set as $entry) {
// get date object
- $carbon = new Carbon($entry->date, $entry->date_tz);
- $carbonKey = $carbon->format('Y-m-d');
+ $carbon = new Carbon($entry->date, $entry->date_tz);
+ $carbonKey = $carbon->format('Y-m-d');
// make sure sum is a string:
- $sumOfDay = (string) (null === $entry->sum_of_day ? '0' : $entry->sum_of_day);
+ $sumOfDay = (string) (null === $entry->sum_of_day ? '0' : $entry->sum_of_day);
// find currency of this entry, does not have to exist.
$currencies[$entry->transaction_currency_id] ??= TransactionCurrency::find($entry->transaction_currency_id);
// make sure this $entry has its own $entryCurrency
/** @var TransactionCurrency $entryCurrency */
- $entryCurrency = $currencies[$entry->transaction_currency_id];
+ $entryCurrency = $currencies[$entry->transaction_currency_id];
Log::debug(sprintf('Processing transaction(s) on moment %s', $carbon->format('Y-m-d H:i:s')));
// add amount to current balance in currency code.
- $currentBalance[$entryCurrency->code] ??= '0';
+ $currentBalance[$entryCurrency->code] ??= '0';
$currentBalance[$entryCurrency->code] = bcadd($sumOfDay, $currentBalance[$entryCurrency->code]);
// if not convert to native, add the amount to "balance", do nothing else.
@@ -167,7 +168,7 @@ class Steam
}
// just set it.
- $balances[$carbonKey] = $currentBalance;
+ $balances[$carbonKey] = $currentBalance;
Log::debug(sprintf('Updated entry [%s]', $carbonKey), $currentBalance);
}
$cache->store($balances);
@@ -206,10 +207,10 @@ class Steam
// Log::debug(sprintf('Trying bcround("%s",%d)', $number, $precision));
if (str_contains($number, '.')) {
if ('-' !== $number[0]) {
- return bcadd($number, '0.' . str_repeat('0', $precision) . '5', $precision);
+ return bcadd($number, '0.'.str_repeat('0', $precision).'5', $precision);
}
- return bcsub($number, '0.' . str_repeat('0', $precision) . '5', $precision);
+ return bcsub($number, '0.'.str_repeat('0', $precision).'5', $precision);
}
return $number;
@@ -290,11 +291,12 @@ class Steam
public function finalAccountBalance(Account $account, Carbon $date, ?TransactionCurrency $native = null, ?bool $convertToNative = null): array
{
- $cache = new CacheProperties();
+ $cache = new CacheProperties();
$cache->addProperty($account->id);
$cache->addProperty($date);
if ($cache->has()) {
- Log::debug(sprintf('CACHED finalAccountBalance(#%d, %s)', $account->id, $date->format('Y-m-d H:i:s')));
+ Log::debug(sprintf('CACHED finalAccountBalance(#%d, %s)', $account->id, $date->format('Y-m-d H:i:s')));
+
return $cache->get();
}
Log::debug(sprintf('finalAccountBalance(#%d, %s)', $account->id, $date->format('Y-m-d H:i:s')));
@@ -305,27 +307,28 @@ class Steam
$native = Amount::getNativeCurrencyByUserGroup($account->user->userGroup);
}
// account balance thing.
- $currencyPresent = isset($account->meta) && array_key_exists('currency', $account->meta) && $account->meta['currency'] !== null;
- if($currencyPresent) {
+ $currencyPresent = isset($account->meta) && array_key_exists('currency', $account->meta) && null !== $account->meta['currency'];
+ if ($currencyPresent) {
$accountCurrency = $account->meta['currency'];
}
- if(!$currencyPresent) {
+ if (!$currencyPresent) {
$accountCurrency = $this->getAccountCurrency($account);
}
- $hasCurrency = null !== $accountCurrency;
- $currency = $hasCurrency ? $accountCurrency : $native;
- $return = [
+ $hasCurrency = null !== $accountCurrency;
+ $currency = $hasCurrency ? $accountCurrency : $native;
+ $return = [
'native_balance' => '0',
'balance' => '0', // this key is overwritten right away, but I must remember it is always created.
];
// balance(s) in all currencies.
- $array = $account->transactions()
- ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
- ->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
- ->where('transaction_journals.date', '<=', $date->format('Y-m-d H:i:s'))
- ->get(['transaction_currencies.code', 'transactions.amount'])->toArray();
- $others = $this->groupAndSumTransactions($array, 'code', 'amount');
+ $array = $account->transactions()
+ ->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
+ ->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
+ ->where('transaction_journals.date', '<=', $date->format('Y-m-d H:i:s'))
+ ->get(['transaction_currencies.code', 'transactions.amount'])->toArray()
+ ;
+ $others = $this->groupAndSumTransactions($array, 'code', 'amount');
// Log::debug('All balances are (joined)', $others);
// if there is no request to convert, take this as "balance" and "native_balance".
$return['balance'] = $others[$currency->code] ?? '0';
@@ -340,7 +343,7 @@ class Steam
}
// either way, the balance is always combined with the virtual balance:
- $virtualBalance = (string) ('' === (string) $account->virtual_balance ? '0' : $account->virtual_balance);
+ $virtualBalance = (string) ('' === (string) $account->virtual_balance ? '0' : $account->virtual_balance);
if ($convertToNative) {
// the native balance is combined with a converted virtual_balance:
@@ -354,7 +357,7 @@ class Steam
$return['balance'] = bcadd($return['balance'], $virtualBalance);
// Log::debug(sprintf('Virtual balance makes the (native) total %s', $return['balance']));
}
- $final = array_merge($return, $others);
+ $final = array_merge($return, $others);
Log::debug('Final balance is', $final);
$cache->store($final);
@@ -461,15 +464,15 @@ class Steam
{
$list = [];
- $set = auth()->user()->transactions()
- ->whereIn('transactions.account_id', $accounts)
- ->groupBy(['transactions.account_id', 'transaction_journals.user_id'])
- ->get(['transactions.account_id', \DB::raw('MAX(transaction_journals.date) AS max_date')]) // @phpstan-ignore-line
+ $set = auth()->user()->transactions()
+ ->whereIn('transactions.account_id', $accounts)
+ ->groupBy(['transactions.account_id', 'transaction_journals.user_id'])
+ ->get(['transactions.account_id', \DB::raw('MAX(transaction_journals.date) AS max_date')]) // @phpstan-ignore-line
;
/** @var Transaction $entry */
foreach ($set as $entry) {
- $date = new Carbon($entry->max_date, config('app.timezone'));
+ $date = new Carbon($entry->max_date, config('app.timezone'));
$date->setTimezone(config('app.timezone'));
$list[(int) $entry->account_id] = $date;
}
@@ -544,9 +547,9 @@ class Steam
public function getSafeUrl(string $unknownUrl, string $safeUrl): string
{
// Log::debug(sprintf('getSafeUrl(%s, %s)', $unknownUrl, $safeUrl));
- $returnUrl = $safeUrl;
- $unknownHost = parse_url($unknownUrl, PHP_URL_HOST);
- $safeHost = parse_url($safeUrl, PHP_URL_HOST);
+ $returnUrl = $safeUrl;
+ $unknownHost = parse_url($unknownUrl, PHP_URL_HOST);
+ $safeHost = parse_url($safeUrl, PHP_URL_HOST);
if (null !== $unknownHost && $unknownHost === $safeHost) {
$returnUrl = $unknownUrl;
@@ -583,7 +586,7 @@ class Steam
*/
public function floatalize(string $value): string
{
- $value = strtoupper($value);
+ $value = strtoupper($value);
if (!str_contains($value, 'E')) {
return $value;
}
@@ -671,9 +674,9 @@ class Steam
if (null === $currency) {
continue;
}
- $current = $converter->convert($currency, $native, $date, $amount);
+ $current = $converter->convert($currency, $native, $date, $amount);
Log::debug(sprintf('Convert %s %s to %s %s', $currency->code, $amount, $native->code, $current));
- $total = bcadd($current, $total);
+ $total = bcadd($current, $total);
}
return $total;
diff --git a/app/Transformers/AccountTransformer.php b/app/Transformers/AccountTransformer.php
index 6017a377fa..34d28b98f3 100644
--- a/app/Transformers/AccountTransformer.php
+++ b/app/Transformers/AccountTransformer.php
@@ -63,50 +63,50 @@ class AccountTransformer extends AbstractTransformer
public function transform(Account $account): array
{
// get account type:
- $accountType = (string) config(sprintf('firefly.shortNamesByFullName.%s', $account->full_account_type));
- $liabilityType = (string) config(sprintf('firefly.shortLiabilityNameByFullName.%s', $account->full_account_type));
- $liabilityType = '' === $liabilityType ? null : strtolower($liabilityType);
+ $accountType = (string) config(sprintf('firefly.shortNamesByFullName.%s', $account->full_account_type));
+ $liabilityType = (string) config(sprintf('firefly.shortLiabilityNameByFullName.%s', $account->full_account_type));
+ $liabilityType = '' === $liabilityType ? null : strtolower($liabilityType);
- $liabilityDirection = $account->meta['liability_direction'] ?? null;
+ $liabilityDirection = $account->meta['liability_direction'] ?? null;
// get account role (will only work if the type is asset).
- $accountRole = $this->getAccountRole($account, $accountType);
+ $accountRole = $this->getAccountRole($account, $accountType);
// date (for balance etc.)
- $date = $this->getDate();
+ $date = $this->getDate();
$date->endOfDay();
- [$creditCardType, $monthlyPaymentDate] = $this->getCCInfo($account, $accountRole, $accountType);
+ [$creditCardType, $monthlyPaymentDate] = $this->getCCInfo($account, $accountRole, $accountType);
[$openingBalance, $nativeOpeningBalance, $openingBalanceDate] = $this->getOpeningBalance($account, $accountType);
- [$interest, $interestPeriod] = $this->getInterest($account, $accountType);
+ [$interest, $interestPeriod] = $this->getInterest($account, $accountType);
- $native = $this->native;
+ $native = $this->native;
if (!$this->convertToNative) {
// reset native currency to NULL, not interesting.
$native = null;
}
-//
- $decimalPlaces = (int) $account->meta['currency']?->decimal_places;
- $decimalPlaces = 0 === $decimalPlaces ? 2 : $decimalPlaces;
- $openingBalance = Steam::bcround($openingBalance, $decimalPlaces);
- $includeNetWorth = '0' !== ($account->meta['include_net_worth'] ?? null);
- $longitude = $account->meta['location']['longitude'] ?? null;
- $latitude = $account->meta['location']['latitude'] ?? null;
- $zoomLevel = $account->meta['location']['zoom_level'] ?? null;
+
+ $decimalPlaces = (int) $account->meta['currency']?->decimal_places;
+ $decimalPlaces = 0 === $decimalPlaces ? 2 : $decimalPlaces;
+ $openingBalance = Steam::bcround($openingBalance, $decimalPlaces);
+ $includeNetWorth = '0' !== ($account->meta['include_net_worth'] ?? null);
+ $longitude = $account->meta['location']['longitude'] ?? null;
+ $latitude = $account->meta['location']['latitude'] ?? null;
+ $zoomLevel = $account->meta['location']['zoom_level'] ?? null;
// no order for some accounts:
- $order = $account->order;
+ $order = $account->order;
if (!in_array(strtolower($accountType), ['liability', 'liabilities', 'asset'], true)) {
$order = null;
}
// balance, native balance, virtual balance, native virtual balance?
Log::debug(sprintf('transform: Call finalAccountBalance with date/time "%s"', $date->toIso8601String()));
- $finalBalance = Steam::finalAccountBalance($account, $date, $this->native, $this->convertToNative);
+ $finalBalance = Steam::finalAccountBalance($account, $date, $this->native, $this->convertToNative);
if ($this->convertToNative) {
$finalBalance['balance'] = $finalBalance[$account->meta['currency']?->code] ?? '0';
}
- $currentBalance = Steam::bcround($finalBalance['balance'] ?? '0', $decimalPlaces);
- $nativeCurrentBalance = $this->convertToNative ? Steam::bcround($finalBalance['native_balance'] ?? '0', $native->decimal_places) : null;
+ $currentBalance = Steam::bcround($finalBalance['balance'] ?? '0', $decimalPlaces);
+ $nativeCurrentBalance = $this->convertToNative ? Steam::bcround($finalBalance['native_balance'] ?? '0', $native->decimal_places) : null;
return [
'id' => (string) $account->id,
@@ -191,7 +191,7 @@ class AccountTransformer extends AbstractTransformer
if (null !== $monthlyPaymentDate) {
// try classic date:
if (10 === strlen($monthlyPaymentDate)) {
- $object = Carbon::createFromFormat('!Y-m-d', $monthlyPaymentDate, config('app.timezone'));
+ $object = Carbon::createFromFormat('!Y-m-d', $monthlyPaymentDate, config('app.timezone'));
if (null === $object) {
$object = today(config('app.timezone'));
}
@@ -217,7 +217,7 @@ class AccountTransformer extends AbstractTransformer
$openingBalanceDate = $account->meta['opening_balance_date'] ?? null;
}
if (null !== $openingBalanceDate) {
- $object = Carbon::createFromFormat('Y-m-d H:i:s', $openingBalanceDate, config('app.timezone'));
+ $object = Carbon::createFromFormat('Y-m-d H:i:s', $openingBalanceDate, config('app.timezone'));
if (null === $object) {
$object = today(config('app.timezone'));
}
diff --git a/app/Transformers/TransactionGroupTransformer.php b/app/Transformers/TransactionGroupTransformer.php
index 0d1acf4700..11f992f00e 100644
--- a/app/Transformers/TransactionGroupTransformer.php
+++ b/app/Transformers/TransactionGroupTransformer.php
@@ -83,14 +83,14 @@ class TransactionGroupTransformer extends AbstractTransformer
$first = new NullArrayObject(reset($group['transactions']));
return [
- 'id' => (int) $first['transaction_group_id'],
- 'created_at' => $first['created_at']->toAtomString(),
- 'updated_at' => $first['updated_at']->toAtomString(),
- 'user' => (string) $data['user_id'],
+ 'id' => (int) $first['transaction_group_id'],
+ 'created_at' => $first['created_at']->toAtomString(),
+ 'updated_at' => $first['updated_at']->toAtomString(),
+ 'user' => (string) $data['user_id'],
'user_group' => (string) $data['user_group_id'],
- 'group_title' => $data['title'],
- 'transactions' => $this->transformTransactions($data),
- 'links' => [
+ 'group_title' => $data['title'],
+ 'transactions' => $this->transformTransactions($data),
+ 'links' => [
[
'rel' => 'self',
'uri' => '/transactions/'.$first['transaction_group_id'],
@@ -116,12 +116,12 @@ class TransactionGroupTransformer extends AbstractTransformer
private function transformTransaction(array $transaction): array
{
// amount:
- $amount = app('steam')->positive((string) ($transaction['amount'] ?? '0'));
- $foreignAmount = null;
+ $amount = app('steam')->positive((string) ($transaction['amount'] ?? '0'));
+ $foreignAmount = null;
if (null !== $transaction['foreign_amount'] && '' !== $transaction['foreign_amount'] && 0 !== bccomp('0', $transaction['foreign_amount'])) {
$foreignAmount = app('steam')->positive($transaction['foreign_amount']);
}
- $type = $this->stringFromArray($transaction, 'transaction_type_type', TransactionTypeEnum::WITHDRAWAL->value);
+ $type = $this->stringFromArray($transaction, 'transaction_type_type', TransactionTypeEnum::WITHDRAWAL->value);
// must be 0 (int) or NULL
$recurrenceTotal = $transaction['meta']['recurrence_total'] ?? null;
@@ -237,7 +237,6 @@ class TransactionGroupTransformer extends AbstractTransformer
return $journal->locations()->first();
}
-
/**
* @throws FireflyException
*/
diff --git a/composer.lock b/composer.lock
index 281fb87945..55c7111dc8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1874,16 +1874,16 @@
},
{
"name": "laravel/framework",
- "version": "v11.42.0",
+ "version": "v11.42.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "006375ba67e830e87daa7b52ab65163ba3508d26"
+ "reference": "ff392f42f6c55cc774ce75553a11c6b031da67f8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/006375ba67e830e87daa7b52ab65163ba3508d26",
- "reference": "006375ba67e830e87daa7b52ab65163ba3508d26",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/ff392f42f6c55cc774ce75553a11c6b031da67f8",
+ "reference": "ff392f42f6c55cc774ce75553a11c6b031da67f8",
"shasum": ""
},
"require": {
@@ -2085,7 +2085,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2025-02-11T17:17:56+00:00"
+ "time": "2025-02-12T20:58:18+00:00"
},
{
"name": "laravel/passport",
@@ -3076,16 +3076,16 @@
},
{
"name": "league/fractal",
- "version": "0.20.1",
+ "version": "0.20.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/fractal.git",
- "reference": "8b9d39b67624db9195c06f9c1ffd0355151eaf62"
+ "reference": "573ca2e0e348a7fe573a3e8fbc29a6588ece8c4e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/fractal/zipball/8b9d39b67624db9195c06f9c1ffd0355151eaf62",
- "reference": "8b9d39b67624db9195c06f9c1ffd0355151eaf62",
+ "url": "https://api.github.com/repos/thephpleague/fractal/zipball/573ca2e0e348a7fe573a3e8fbc29a6588ece8c4e",
+ "reference": "573ca2e0e348a7fe573a3e8fbc29a6588ece8c4e",
"shasum": ""
},
"require": {
@@ -3094,18 +3094,18 @@
"require-dev": {
"doctrine/orm": "^2.5",
"illuminate/contracts": "~5.0",
+ "laminas/laminas-paginator": "~2.12",
"mockery/mockery": "^1.3",
- "pagerfanta/pagerfanta": "~1.0.0",
+ "pagerfanta/pagerfanta": "~1.0.0|~4.0.0",
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^9.5",
"squizlabs/php_codesniffer": "~3.4",
- "vimeo/psalm": "^4.22",
- "zendframework/zend-paginator": "~2.3"
+ "vimeo/psalm": "^4.30"
},
"suggest": {
"illuminate/pagination": "The Illuminate Pagination component.",
- "pagerfanta/pagerfanta": "Pagerfanta Paginator",
- "zendframework/zend-paginator": "Zend Framework Paginator"
+ "laminas/laminas-paginator": "Laminas Framework Paginator",
+ "pagerfanta/pagerfanta": "Pagerfanta Paginator"
},
"type": "library",
"extra": {
@@ -3140,9 +3140,9 @@
],
"support": {
"issues": "https://github.com/thephpleague/fractal/issues",
- "source": "https://github.com/thephpleague/fractal/tree/0.20.1"
+ "source": "https://github.com/thephpleague/fractal/tree/0.20.2"
},
- "time": "2022-04-11T12:47:17+00:00"
+ "time": "2025-02-14T21:33:14+00:00"
},
{
"name": "league/mime-type-detection",
@@ -5970,30 +5970,30 @@
},
{
"name": "spatie/error-solutions",
- "version": "1.1.2",
+ "version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/spatie/error-solutions.git",
- "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541"
+ "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/error-solutions/zipball/d239a65235a1eb128dfa0a4e4c4ef032ea11b541",
- "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541",
+ "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936",
+ "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936",
"shasum": ""
},
"require": {
"php": "^8.0"
},
"require-dev": {
- "illuminate/broadcasting": "^10.0|^11.0",
- "illuminate/cache": "^10.0|^11.0",
- "illuminate/support": "^10.0|^11.0",
- "livewire/livewire": "^2.11|^3.3.5",
+ "illuminate/broadcasting": "^10.0|^11.0|^12.0",
+ "illuminate/cache": "^10.0|^11.0|^12.0",
+ "illuminate/support": "^10.0|^11.0|^12.0",
+ "livewire/livewire": "^2.11|^3.5.20",
"openai-php/client": "^0.10.1",
- "orchestra/testbench": "^7.0|8.22.3|^9.0",
- "pestphp/pest": "^2.20",
- "phpstan/phpstan": "^1.11",
+ "orchestra/testbench": "8.22.3|^9.0|^10.0",
+ "pestphp/pest": "^2.20|^3.0",
+ "phpstan/phpstan": "^2.1",
"psr/simple-cache": "^3.0",
"psr/simple-cache-implementation": "^3.0",
"spatie/ray": "^1.28",
@@ -6032,7 +6032,7 @@
],
"support": {
"issues": "https://github.com/spatie/error-solutions/issues",
- "source": "https://github.com/spatie/error-solutions/tree/1.1.2"
+ "source": "https://github.com/spatie/error-solutions/tree/1.1.3"
},
"funding": [
{
@@ -6040,24 +6040,24 @@
"type": "github"
}
],
- "time": "2024-12-11T09:51:56+00:00"
+ "time": "2025-02-14T12:29:50+00:00"
},
{
"name": "spatie/flare-client-php",
- "version": "1.10.0",
+ "version": "1.10.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272"
+ "reference": "bf1716eb98bd689451b071548ae9e70738dce62f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272",
- "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f",
+ "reference": "bf1716eb98bd689451b071548ae9e70738dce62f",
"shasum": ""
},
"require": {
- "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0",
+ "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0",
"php": "^8.0",
"spatie/backtrace": "^1.6.1",
"symfony/http-foundation": "^5.2|^6.0|^7.0",
@@ -6101,7 +6101,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.10.0"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.10.1"
},
"funding": [
{
@@ -6109,7 +6109,7 @@
"type": "github"
}
],
- "time": "2024-12-02T14:30:06+00:00"
+ "time": "2025-02-14T13:42:06+00:00"
},
{
"name": "spatie/ignition",
@@ -8455,82 +8455,6 @@
],
"time": "2024-09-09T11:45:10+00:00"
},
- {
- "name": "symfony/polyfill-php81",
- "version": "v1.31.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "type": "library",
- "extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
- },
{
"name": "symfony/polyfill-php83",
"version": "v1.31.0",
@@ -9683,24 +9607,23 @@
},
{
"name": "twig/twig",
- "version": "v3.19.0",
+ "version": "v3.20.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
- "reference": "d4f8c2b86374f08efc859323dbcd95c590f7124e"
+ "reference": "3468920399451a384bef53cf7996965f7cd40183"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/d4f8c2b86374f08efc859323dbcd95c590f7124e",
- "reference": "d4f8c2b86374f08efc859323dbcd95c590f7124e",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183",
+ "reference": "3468920399451a384bef53cf7996965f7cd40183",
"shasum": ""
},
"require": {
- "php": ">=8.0.2",
+ "php": ">=8.1.0",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php81": "^1.29"
+ "symfony/polyfill-mbstring": "^1.3"
},
"require-dev": {
"phpstan/phpstan": "^2.0",
@@ -9747,7 +9670,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.19.0"
+ "source": "https://github.com/twigphp/Twig/tree/v3.20.0"
},
"funding": [
{
@@ -9759,7 +9682,7 @@
"type": "tidelift"
}
],
- "time": "2025-01-29T07:06:14+00:00"
+ "time": "2025-02-13T08:34:43+00:00"
},
{
"name": "verifiedjoseph/ntfy-php-library",
@@ -10822,16 +10745,16 @@
},
{
"name": "maximebf/debugbar",
- "version": "v1.23.5",
+ "version": "v1.23.6",
"source": {
"type": "git",
"url": "https://github.com/php-debugbar/php-debugbar.git",
- "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25"
+ "reference": "4b3d5f1afe09a7db5a9d3282890f49f6176d6542"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/eeabd61a1f19ba5dcd5ac4585a477130ee03ce25",
- "reference": "eeabd61a1f19ba5dcd5ac4585a477130ee03ce25",
+ "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/4b3d5f1afe09a7db5a9d3282890f49f6176d6542",
+ "reference": "4b3d5f1afe09a7db5a9d3282890f49f6176d6542",
"shasum": ""
},
"require": {
@@ -10884,9 +10807,9 @@
],
"support": {
"issues": "https://github.com/php-debugbar/php-debugbar/issues",
- "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.5"
+ "source": "https://github.com/php-debugbar/php-debugbar/tree/v1.23.6"
},
- "time": "2024-12-15T19:20:42+00:00"
+ "time": "2025-02-13T12:22:36+00:00"
},
{
"name": "mockery/mockery",
@@ -11344,16 +11267,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "2.1.4",
+ "version": "2.1.5",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "8f99e18eb775dbaf6460c95fa0b65312da9c746a"
+ "reference": "451b17f9665481ee502adc39be987cb71067ece2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8f99e18eb775dbaf6460c95fa0b65312da9c746a",
- "reference": "8f99e18eb775dbaf6460c95fa0b65312da9c746a",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/451b17f9665481ee502adc39be987cb71067ece2",
+ "reference": "451b17f9665481ee502adc39be987cb71067ece2",
"shasum": ""
},
"require": {
@@ -11398,7 +11321,7 @@
"type": "github"
}
],
- "time": "2025-02-10T08:25:21+00:00"
+ "time": "2025-02-13T12:49:56+00:00"
},
{
"name": "phpstan/phpstan-deprecation-rules",
diff --git a/config/firefly.php b/config/firefly.php
index fc5cfd8198..864e452362 100644
--- a/config/firefly.php
+++ b/config/firefly.php
@@ -81,7 +81,7 @@ return [
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
// see cer.php for exchange rates feature flag.
],
- 'version' => 'develop/2025-02-12',
+ 'version' => 'develop/2025-02-17',
'api_version' => '2.1.0', // field is no longer used.
'db_version' => 25,
diff --git a/package-lock.json b/package-lock.json
index 022b1d6a65..5aa9a32bd5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -89,23 +89,22 @@
}
},
"node_modules/@babel/core": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.8.tgz",
- "integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz",
+ "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.8",
+ "@babel/generator": "^7.26.9",
"@babel/helper-compilation-targets": "^7.26.5",
"@babel/helper-module-transforms": "^7.26.0",
- "@babel/helpers": "^7.26.7",
- "@babel/parser": "^7.26.8",
- "@babel/template": "^7.26.8",
- "@babel/traverse": "^7.26.8",
- "@babel/types": "^7.26.8",
- "@types/gensync": "^1.0.0",
+ "@babel/helpers": "^7.26.9",
+ "@babel/parser": "^7.26.9",
+ "@babel/template": "^7.26.9",
+ "@babel/traverse": "^7.26.9",
+ "@babel/types": "^7.26.9",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -131,14 +130,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.8.tgz",
- "integrity": "sha512-ef383X5++iZHWAXX0SXQR6ZyQhw/0KtTkrTz61WXRhFM6dhpHulO/RJz79L8S6ugZHJkOOkUrUdxgdF2YiPFnA==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz",
+ "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.26.8",
- "@babel/types": "^7.26.8",
+ "@babel/parser": "^7.26.9",
+ "@babel/types": "^7.26.9",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@@ -188,18 +187,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
- "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz",
+ "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/helper-replace-supers": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.26.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/traverse": "^7.25.9",
+ "@babel/traverse": "^7.26.9",
"semver": "^6.3.1"
},
"engines": {
@@ -429,27 +428,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.26.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz",
- "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz",
+ "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.26.7"
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.8.tgz",
- "integrity": "sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz",
+ "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.8"
+ "@babel/types": "^7.26.9"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -922,13 +921,13 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz",
- "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz",
+ "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.26.5",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
},
"engines": {
@@ -1341,9 +1340,9 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.8.tgz",
- "integrity": "sha512-H0jlQxFMI0Q8SyGPsj9pO3ygVQRxPkIGytsL3m1Zqca8KrCPpMlvh+e2dxknqdfS8LFwBw+PpiYPD9qy/FPQpA==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz",
+ "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1520,9 +1519,9 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.8.tgz",
- "integrity": "sha512-um7Sy+2THd697S4zJEfv/U5MHGJzkN2xhtsR3T/SWRbVSic62nbISh51VVfU9JiO/L/Z97QczHTaFVkOU8IzNg==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz",
+ "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1555,7 +1554,7 @@
"@babel/plugin-transform-dynamic-import": "^7.25.9",
"@babel/plugin-transform-exponentiation-operator": "^7.26.3",
"@babel/plugin-transform-export-namespace-from": "^7.25.9",
- "@babel/plugin-transform-for-of": "^7.25.9",
+ "@babel/plugin-transform-for-of": "^7.26.9",
"@babel/plugin-transform-function-name": "^7.25.9",
"@babel/plugin-transform-json-strings": "^7.25.9",
"@babel/plugin-transform-literals": "^7.25.9",
@@ -1643,9 +1642,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.26.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz",
- "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz",
+ "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==",
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -1655,32 +1654,32 @@
}
},
"node_modules/@babel/template": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.8.tgz",
- "integrity": "sha512-iNKaX3ZebKIsCvJ+0jd6embf+Aulaa3vNBqZ41kM7iTWjx5qzWKXGHiJUW3+nTpQ18SG11hdF8OAzKrpXkb96Q==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
+ "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
- "@babel/parser": "^7.26.8",
- "@babel/types": "^7.26.8"
+ "@babel/parser": "^7.26.9",
+ "@babel/types": "^7.26.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.8.tgz",
- "integrity": "sha512-nic9tRkjYH0oB2dzr/JoGIm+4Q6SuYeLEiIiZDwBscRMYFJ+tMAz98fuel9ZnbXViA2I0HVSSRRK8DW5fjXStA==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz",
+ "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.8",
- "@babel/parser": "^7.26.8",
- "@babel/template": "^7.26.8",
- "@babel/types": "^7.26.8",
+ "@babel/generator": "^7.26.9",
+ "@babel/parser": "^7.26.9",
+ "@babel/template": "^7.26.9",
+ "@babel/types": "^7.26.9",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1689,9 +1688,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.8.tgz",
- "integrity": "sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==",
+ "version": "7.26.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz",
+ "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2606,9 +2605,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz",
- "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.7.tgz",
+ "integrity": "sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==",
"cpu": [
"arm"
],
@@ -2620,9 +2619,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz",
- "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.7.tgz",
+ "integrity": "sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==",
"cpu": [
"arm64"
],
@@ -2634,9 +2633,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz",
- "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.7.tgz",
+ "integrity": "sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==",
"cpu": [
"arm64"
],
@@ -2648,9 +2647,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz",
- "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.7.tgz",
+ "integrity": "sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==",
"cpu": [
"x64"
],
@@ -2662,9 +2661,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz",
- "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.7.tgz",
+ "integrity": "sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==",
"cpu": [
"arm64"
],
@@ -2676,9 +2675,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz",
- "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.7.tgz",
+ "integrity": "sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==",
"cpu": [
"x64"
],
@@ -2690,9 +2689,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz",
- "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.7.tgz",
+ "integrity": "sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==",
"cpu": [
"arm"
],
@@ -2704,9 +2703,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz",
- "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.7.tgz",
+ "integrity": "sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==",
"cpu": [
"arm"
],
@@ -2718,9 +2717,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz",
- "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.7.tgz",
+ "integrity": "sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==",
"cpu": [
"arm64"
],
@@ -2732,9 +2731,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz",
- "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.7.tgz",
+ "integrity": "sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==",
"cpu": [
"arm64"
],
@@ -2746,9 +2745,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz",
- "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.7.tgz",
+ "integrity": "sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==",
"cpu": [
"loong64"
],
@@ -2760,9 +2759,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz",
- "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.7.tgz",
+ "integrity": "sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==",
"cpu": [
"ppc64"
],
@@ -2774,9 +2773,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz",
- "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.7.tgz",
+ "integrity": "sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==",
"cpu": [
"riscv64"
],
@@ -2788,9 +2787,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz",
- "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.7.tgz",
+ "integrity": "sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==",
"cpu": [
"s390x"
],
@@ -2802,9 +2801,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz",
- "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.7.tgz",
+ "integrity": "sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==",
"cpu": [
"x64"
],
@@ -2816,9 +2815,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz",
- "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.7.tgz",
+ "integrity": "sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==",
"cpu": [
"x64"
],
@@ -2830,9 +2829,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz",
- "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.7.tgz",
+ "integrity": "sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==",
"cpu": [
"arm64"
],
@@ -2844,9 +2843,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz",
- "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.7.tgz",
+ "integrity": "sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==",
"cpu": [
"ia32"
],
@@ -2858,9 +2857,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz",
- "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.7.tgz",
+ "integrity": "sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==",
"cpu": [
"x64"
],
@@ -3047,13 +3046,6 @@
"@types/send": "*"
}
},
- "node_modules/@types/gensync": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@types/gensync/-/gensync-1.0.4.tgz",
- "integrity": "sha512-C3YYeRQWp2fmq9OryX+FoDy8nXS6scQ7dPptD8LnFDAUNcKWJjXQKDNJD3HVm+kOUsXhTOkpi69vI4EuAr95bA==",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/glob": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
@@ -3155,9 +3147,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.13.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.1.tgz",
- "integrity": "sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==",
+ "version": "22.13.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.4.tgz",
+ "integrity": "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4186,9 +4178,9 @@
"license": "MIT"
},
"node_modules/bootstrap5-tags": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/bootstrap5-tags/-/bootstrap5-tags-1.7.6.tgz",
- "integrity": "sha512-5bUMUN4I11n/MtrfmYOF41ebkMmy2s4AZZfp6C1oWm2dXZS3UUZqb7J9Qj9OJ1r053hix0pKtg3mNJcQvqa1EQ==",
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/bootstrap5-tags/-/bootstrap5-tags-1.7.7.tgz",
+ "integrity": "sha512-1rgN2OLM9PQlQxeKUFUN9Tay246Zn7rK0p6p+ZaG2Q2VXPkZaZ+3EDYh3LOofvlHS50mL/Uthk9AoOxtdz6drA==",
"license": "MIT"
},
"node_modules/brace-expansion": {
@@ -4405,9 +4397,9 @@
}
},
"node_modules/call-bind-apply-helpers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
- "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4470,9 +4462,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001699",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz",
- "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==",
+ "version": "1.0.30001700",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz",
+ "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==",
"dev": true,
"funding": [
{
@@ -5685,9 +5677,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.97",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz",
- "integrity": "sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==",
+ "version": "1.5.101",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.101.tgz",
+ "integrity": "sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA==",
"dev": true,
"license": "ISC"
},
@@ -5831,6 +5823,22 @@
"node": ">= 0.4"
}
},
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/esbuild": {
"version": "0.24.2",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
@@ -6359,14 +6367,15 @@
}
},
"node_modules/form-data": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
- "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
"dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
"mime-types": "^2.1.12"
},
"engines": {
@@ -6675,6 +6684,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/hash-base": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz",
@@ -10009,9 +10034,9 @@
}
},
"node_modules/rollup": {
- "version": "4.34.6",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.6.tgz",
- "integrity": "sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==",
+ "version": "4.34.7",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.7.tgz",
+ "integrity": "sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10025,25 +10050,25 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.34.6",
- "@rollup/rollup-android-arm64": "4.34.6",
- "@rollup/rollup-darwin-arm64": "4.34.6",
- "@rollup/rollup-darwin-x64": "4.34.6",
- "@rollup/rollup-freebsd-arm64": "4.34.6",
- "@rollup/rollup-freebsd-x64": "4.34.6",
- "@rollup/rollup-linux-arm-gnueabihf": "4.34.6",
- "@rollup/rollup-linux-arm-musleabihf": "4.34.6",
- "@rollup/rollup-linux-arm64-gnu": "4.34.6",
- "@rollup/rollup-linux-arm64-musl": "4.34.6",
- "@rollup/rollup-linux-loongarch64-gnu": "4.34.6",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.34.6",
- "@rollup/rollup-linux-riscv64-gnu": "4.34.6",
- "@rollup/rollup-linux-s390x-gnu": "4.34.6",
- "@rollup/rollup-linux-x64-gnu": "4.34.6",
- "@rollup/rollup-linux-x64-musl": "4.34.6",
- "@rollup/rollup-win32-arm64-msvc": "4.34.6",
- "@rollup/rollup-win32-ia32-msvc": "4.34.6",
- "@rollup/rollup-win32-x64-msvc": "4.34.6",
+ "@rollup/rollup-android-arm-eabi": "4.34.7",
+ "@rollup/rollup-android-arm64": "4.34.7",
+ "@rollup/rollup-darwin-arm64": "4.34.7",
+ "@rollup/rollup-darwin-x64": "4.34.7",
+ "@rollup/rollup-freebsd-arm64": "4.34.7",
+ "@rollup/rollup-freebsd-x64": "4.34.7",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.34.7",
+ "@rollup/rollup-linux-arm-musleabihf": "4.34.7",
+ "@rollup/rollup-linux-arm64-gnu": "4.34.7",
+ "@rollup/rollup-linux-arm64-musl": "4.34.7",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.34.7",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.34.7",
+ "@rollup/rollup-linux-riscv64-gnu": "4.34.7",
+ "@rollup/rollup-linux-s390x-gnu": "4.34.7",
+ "@rollup/rollup-linux-x64-gnu": "4.34.7",
+ "@rollup/rollup-linux-x64-musl": "4.34.7",
+ "@rollup/rollup-win32-arm64-msvc": "4.34.7",
+ "@rollup/rollup-win32-ia32-msvc": "4.34.7",
+ "@rollup/rollup-win32-x64-msvc": "4.34.7",
"fsevents": "~2.3.2"
}
},
@@ -10099,9 +10124,9 @@
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.84.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.84.0.tgz",
- "integrity": "sha512-XDAbhEPJRxi7H0SxrnOpiXFQoUJHwkR2u3Zc4el+fK/Tt5Hpzw5kkQ59qVDfvdaUq6gCrEZIbySFBM2T9DNKHg==",
+ "version": "1.85.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz",
+ "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10136,9 +10161,9 @@
}
},
"node_modules/sass/node_modules/readdirp": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
- "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10893,9 +10918,9 @@
}
},
"node_modules/terser": {
- "version": "5.38.2",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.38.2.tgz",
- "integrity": "sha512-w8CXxxbFA5zfNsR/i8HZq5bvn18AK0O9jj7hyo1YqkovLxEFa0uP0LCVGZRqiRaKRFxXhELBp8SteeAjEnfeJg==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
+ "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -11607,9 +11632,9 @@
"license": "BSD-2-Clause"
},
"node_modules/webpack": {
- "version": "5.97.1",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz",
- "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==",
+ "version": "5.98.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
+ "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11631,9 +11656,9 @@
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
+ "schema-utils": "^4.3.0",
"tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
+ "terser-webpack-plugin": "^5.3.11",
"watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
@@ -11979,16 +12004,54 @@
"source-map": "~0.6.1"
}
},
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "node_modules/webpack/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/webpack/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
+ "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
},
"engines": {
"node": ">= 10.13.0"
diff --git a/resources/assets/v1/src/locales/it.json b/resources/assets/v1/src/locales/it.json
index 5479b3e405..bd1457663d 100644
--- a/resources/assets/v1/src/locales/it.json
+++ b/resources/assets/v1/src/locales/it.json
@@ -30,7 +30,7 @@
"apply_rules_checkbox": "Applica le regole",
"fire_webhooks_checkbox": "Esegui webhook",
"no_budget_pointer": "Sembra che tu non abbia ancora dei budget. Dovresti crearne alcuni nella pagina dei budget<\/a>. I budget possono aiutarti a tenere traccia delle spese.",
- "no_bill_pointer": "You seem to have no subscription yet. You should create some on the subscription<\/a>-page. Subscriptions can help you keep track of expenses.",
+ "no_bill_pointer": "Sembra che tu non abbia ancora un abbonamento. Dovresti crearne alcuni sulla pagina abbonamento<\/a>. Gli abbonamenti possono aiutarti a tenere traccia delle spese.",
"source_account": "Conto di origine",
"hidden_fields_preferences": "Puoi abilitare maggiori opzioni per le transazioni nelle tue impostazioni<\/a>.",
"destination_account": "Conto destinazione",
diff --git a/resources/assets/v1/src/locales/nl.json b/resources/assets/v1/src/locales/nl.json
index 5d6db10250..f34cb79524 100644
--- a/resources/assets/v1/src/locales/nl.json
+++ b/resources/assets/v1/src/locales/nl.json
@@ -18,8 +18,8 @@
"is_reconciled": "Is afgestemd",
"split": "Splitsen",
"single_split": "Split",
- "not_enough_currencies": "Not enough currencies",
- "not_enough_currencies_enabled": "If you have just one currency enabled, there is no need to add exchange rates.",
+ "not_enough_currencies": "Niet genoeg valuta's",
+ "not_enough_currencies_enabled": "Als je slechts \u00e9\u00e9n valuta ingeschakeld hebt, gaan we geen wisselkoersen invoeren natuurlijk.",
"transaction_stored_link": "Transactie #{ID} (\"{title}\")<\/a> is opgeslagen.",
"webhook_stored_link": "Webhook #{ID} ({title})<\/a> is opgeslagen.",
"webhook_updated_link": "Webhook #{ID} ({title})<\/a> is ge\u00fcpdatet.",
@@ -140,7 +140,7 @@
"visit_webhook_url": "Bezoek URL van webhook",
"reset_webhook_secret": "Reset webhook-geheim",
"header_exchange_rates": "Wisselkoersen",
- "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.",
+ "exchange_rates_intro": "Firefly III kan wisselkoersen downloaden en gebruiken. Lees hier meer over in de documentatie<\/a>.",
"exchange_rates_from_to": "Tussen {from} en {to} (en andersom)",
"exchange_rates_intro_rates": "Firefly III gebruikt de volgende wisselkoersen. De inverse berekent zichzelf als deze niet is opgegeven. Als er geen wisselkoers bestaat voor de datum van de transactie, gaat Firefly III terug in de tijd om er een te vinden. Als er geen aanwezig is, zal de koers \"1\" gebruikt worden.",
"header_exchange_rates_rates": "Wisselkoersen",
diff --git a/resources/assets/v1/src/locales/ru.json b/resources/assets/v1/src/locales/ru.json
index dd3a5f3d8a..890bef8fe9 100644
--- a/resources/assets/v1/src/locales/ru.json
+++ b/resources/assets/v1/src/locales/ru.json
@@ -182,6 +182,6 @@
},
"config": {
"html_language": "ru",
- "date_time_fns": "d MMMM yyyy, @ HH:mm:ss"
+ "date_time_fns": "d MMMM yyyy @ HH:mm:ss"
}
}
\ No newline at end of file
diff --git a/resources/assets/v1/src/locales/uk.json b/resources/assets/v1/src/locales/uk.json
index 86550a35c9..1b3bca3b71 100644
--- a/resources/assets/v1/src/locales/uk.json
+++ b/resources/assets/v1/src/locales/uk.json
@@ -1,7 +1,7 @@
{
"firefly": {
- "administrations_page_title": "Financial administrations",
- "administrations_index_menu": "Financial administrations",
+ "administrations_page_title": "\u0424\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0456 \u0430\u0434\u043c\u0456\u043d\u0456\u0441\u0442\u0440\u0430\u0446\u0456\u0457",
+ "administrations_index_menu": "\u0424\u0456\u043d\u0430\u043d\u0441\u043e\u0432\u0456 \u0430\u0434\u043c\u0456\u043d\u0456\u0441\u0442\u0440\u0430\u0446\u0456\u0457",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
@@ -18,7 +18,7 @@
"is_reconciled": "Is reconciled",
"split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438",
"single_split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438",
- "not_enough_currencies": "Not enough currencies",
+ "not_enough_currencies": "\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043d\u044c\u043e \u0432\u0430\u043b\u044e\u0442",
"not_enough_currencies_enabled": "If you have just one currency enabled, there is no need to add exchange rates.",
"transaction_stored_link": "\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u044f #{ID} (\"{title}\")<\/a> \u0431\u0443\u043b\u0430 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0430.",
"webhook_stored_link": "\u0412\u0435\u0431\u0445\u0443\u043a #{ID} (\"{title}\")<\/a> \u0431\u0443\u0432 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439.",
@@ -45,7 +45,7 @@
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.",
"tags": "\u0422\u0435\u0433\u0438",
"no_budget": "(\u043f\u043e\u0437\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c)",
- "no_bill": "(no subscription)",
+ "no_bill": "(\u043d\u0435\u043c\u0430\u0454 \u043f\u0456\u0434\u043f\u0438\u0441\u043a\u0438)",
"category": "\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044f",
"attachments": "\u0412\u043a\u043b\u0430\u0434\u0435\u043d\u043d\u044f",
"notes": "\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0438",
@@ -61,7 +61,7 @@
"destination_account_reconciliation": "\u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u043f\u043e\u0433\u043e\u0434\u0436\u0435\u043d\u043d\u044f, \u0440\u0430\u0445\u0443\u043d\u043a\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f.",
"source_account_reconciliation": "\u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0456\u0457 \u0437\u0432\u0456\u0440\u043a\u0438, \u0440\u0430\u0445\u0443\u043d\u043a\u0430 \u0434\u0436\u0435\u0440\u0435\u043b\u0430.",
"budget": "\u0411\u044e\u0434\u0436\u0435\u0442",
- "bill": "Subscription",
+ "bill": "\u041f\u0456\u0434\u043f\u0438\u0441\u043a\u0430",
"you_create_withdrawal": "\u0412\u0438 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u0442\u0435 \u0432\u0456\u0434\u043a\u043b\u0438\u043a\u0430\u043d\u043d\u044f.",
"you_create_transfer": "\u0412\u0438 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u0430\u0437.",
"you_create_deposit": "\u0412\u0438 \u0441\u0442\u0432\u043e\u0440\u044e\u0454\u0442\u0435 \u0434\u0435\u043f\u043e\u0437\u0438\u0442.",
@@ -139,11 +139,11 @@
"response": "\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c",
"visit_webhook_url": "\u0412\u0456\u0434\u0432\u0456\u0434\u0430\u0439\u0442\u0435 URL-\u0430\u0434\u0440\u0435\u0441\u0443 \u0432\u0435\u0431-\u0445\u0443\u043a\u0443",
"reset_webhook_secret": "\u0412\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0441\u0456\u043a\u0440\u0435\u0442 \u0432\u0435\u0431-\u0445\u0443\u043a\u0430",
- "header_exchange_rates": "Exchange rates",
+ "header_exchange_rates": "\u041a\u0443\u0440\u0441\u0438 \u0432\u0430\u043b\u044e\u0442",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.",
- "header_exchange_rates_rates": "Exchange rates",
+ "header_exchange_rates_rates": "\u041a\u0443\u0440\u0441\u0438 \u0432\u0430\u043b\u044e\u0442",
"header_exchange_rates_table": "Table with exchange rates",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"add_new_rate": "Add a new exchange rate",
@@ -153,7 +153,7 @@
"url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430",
"active": "\u0410\u043a\u0442\u0438\u0432\u043d\u043e",
"interest_date": "\u0414\u0430\u0442\u0430 \u043d\u0430\u0440\u0430\u0445\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u0456\u0432",
- "administration_currency": "Native currency",
+ "administration_currency": "\u041d\u0430\u0446\u0456\u043e\u043d\u0430\u043b\u044c\u043d\u0430 \u0432\u0430\u043b\u044e\u0442\u0430",
"title": "\u041d\u0430\u0437\u0432\u0430",
"date": "\u0414\u0430\u0442\u0430",
"book_date": "\u0414\u0430\u0442\u0430 \u0431\u0440\u043e\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
@@ -173,7 +173,7 @@
"list": {
"title": "\u041d\u0430\u0437\u0432\u0430",
"active": "\u0427\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439?",
- "native_currency": "Native currency",
+ "native_currency": "\u0420\u0456\u0434\u043d\u0430 \u0432\u0430\u043b\u044e\u0442\u0430",
"trigger": "\u0422\u0440\u0438\u0433\u0435\u0440",
"response": "\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c",
"delivery": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430",
diff --git a/resources/assets/v1/src/locales/zh-cn.json b/resources/assets/v1/src/locales/zh-cn.json
index f8af66232f..faff2d7ae9 100644
--- a/resources/assets/v1/src/locales/zh-cn.json
+++ b/resources/assets/v1/src/locales/zh-cn.json
@@ -61,7 +61,7 @@
"destination_account_reconciliation": "\u60a8\u4e0d\u80fd\u7f16\u8f91\u5bf9\u8d26\u4ea4\u6613\u7684\u76ee\u6807\u8d26\u6237",
"source_account_reconciliation": "\u60a8\u4e0d\u80fd\u7f16\u8f91\u5bf9\u8d26\u4ea4\u6613\u7684\u6765\u6e90\u8d26\u6237\u3002",
"budget": "\u9884\u7b97",
- "bill": "Subscription",
+ "bill": "\u8d26\u5355",
"you_create_withdrawal": "\u60a8\u6b63\u5728\u521b\u5efa\u4e00\u7b14\u652f\u51fa",
"you_create_transfer": "\u60a8\u6b63\u5728\u521b\u5efa\u4e00\u7b14\u8f6c\u8d26",
"you_create_deposit": "\u60a8\u6b63\u5728\u521b\u5efa\u4e00\u7b14\u6536\u5165",
diff --git a/resources/assets/v1/src/locales/zh-tw.json b/resources/assets/v1/src/locales/zh-tw.json
index 990aaf387a..efe606e10f 100644
--- a/resources/assets/v1/src/locales/zh-tw.json
+++ b/resources/assets/v1/src/locales/zh-tw.json
@@ -1,159 +1,159 @@
{
"firefly": {
- "administrations_page_title": "Financial administrations",
- "administrations_index_menu": "Financial administrations",
- "temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
- "administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
- "administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
+ "administrations_page_title": "\u591a\u500b\u8ca1\u52d9\u7ba1\u7406",
+ "administrations_index_menu": "\u591a\u500b\u8ca1\u52d9\u7ba1\u7406",
+ "temp_administrations_introduction": "Firefly III \u5373\u5c07\u652f\u63f4\u540c\u6642\u7ba1\u7406\u591a\u500b\u8ca1\u52d9\u7ba1\u7406\u3002\u76ee\u524d\u60a8\u53ea\u6709\u4e00\u500b\u3002\u60a8\u53ef\u5728\u6b64\u8a2d\u5b9a\u5176\u6a19\u984c\u8207\u672c\u5e63\uff0c\u9019\u53d6\u4ee3\u4e86\u5148\u524d\u7684\u300c\u9810\u8a2d\u8ca8\u5e63\u300d\u8a2d\u5b9a\u3002\u6b64\u8a2d\u5b9a\u73fe\u5728\u7d81\u5b9a\u65bc\u8a72\u8ca1\u52d9\u7ba1\u7406\uff0c\u4e26\u53ef\u56e0\u4e0d\u540c\u8ca1\u52d9\u7ba1\u7406\u800c\u7570\u3002",
+ "administration_currency_form_help": "\u5982\u679c\u60a8\u66f4\u6539\u4e86\u672c\u5e63\uff0c\u53ef\u80fd\u9700\u8981\u4e00\u6bb5\u6642\u9593\u624d\u80fd\u8f09\u5165\u9801\u9762\uff0c\u56e0\u70ba\u4ea4\u6613\u53ef\u80fd\u9700\u8981\u8f49\u63db\u70ba\uff08\u65b0\uff09\u672c\u5e63\u3002",
+ "administrations_page_edit_sub_title_js": "\u7de8\u8f2f\u8ca1\u52d9\u7ba1\u7406\u300c{title}\u300d",
"table": "\u8868\u683c",
"welcome_back": "\u6b61\u8fce\u56de\u4f86\u7e7c\u7e8c\u7406\u8ca1\uff01",
"flash_error": "\u932f\u8aa4\uff01",
"flash_warning": "\u8b66\u544a\uff01",
"flash_success": "\u6210\u529f\uff01",
"close": "\u95dc\u9589",
- "select_dest_account": "Please select or type a valid destination account name",
- "select_source_account": "Please select or type a valid source account name",
+ "select_dest_account": "\u8acb\u9078\u64c7\u6216\u8f38\u5165\u6709\u6548\u7684\u76ee\u6a19\u5e33\u6236\u540d\u7a31",
+ "select_source_account": "\u8acb\u9078\u64c7\u6216\u8f38\u5165\u6709\u6548\u7684\u4f86\u6e90\u5e33\u6236\u540d\u7a31",
"split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0",
- "errors_submission": "There was something wrong with your submission. Please check out the errors below.",
- "is_reconciled": "Is reconciled",
+ "errors_submission": "\u9001\u51fa\u8cc7\u6599\u6642\u767c\u751f\u932f\u8aa4\uff0c\u8acb\u6aa2\u67e5\u4e0b\u5217\u8a0a\u606f\u3002",
+ "is_reconciled": "\u5df2\u5c0d\u5e33",
"split": "\u5206\u5272",
"single_split": "\u62c6\u5206",
- "not_enough_currencies": "Not enough currencies",
- "not_enough_currencies_enabled": "If you have just one currency enabled, there is no need to add exchange rates.",
- "transaction_stored_link": "Transaction #{ID} (\"{title}\")<\/a> has been stored.",
- "webhook_stored_link": "Webhook #{ID} (\"{title}\")<\/a> has been stored.",
- "webhook_updated_link": "Webhook #{ID}<\/a> (\"{title}\") has been updated.",
- "transaction_updated_link": "Transaction #{ID}<\/a> (\"{title}\") has been updated.",
- "transaction_new_stored_link": "Transaction #{ID}<\/a> has been stored.",
+ "not_enough_currencies": "\u8ca8\u5e63\u6578\u91cf\u4e0d\u8db3",
+ "not_enough_currencies_enabled": "\u82e5\u60a8\u50c5\u555f\u7528\u4e86\u55ae\u4e00\u8ca8\u5e63\uff0c\u5247\u7121\u9700\u4f7f\u7528\u532f\u7387\u3002",
+ "transaction_stored_link": "\u4ea4\u6613 #{ID}\uff08\u300c{title}\u300d\uff09<\/a> \u5df2\u5132\u5b58\u3002",
+ "webhook_stored_link": "Webhook #{ID}\uff08\u300c{title}\u300d\uff09<\/a> \u5df2\u5132\u5b58\u3002",
+ "webhook_updated_link": "Webhook #{ID}<\/a>\uff08\u300c{title}\u300d\uff09\u5df2\u66f4\u65b0\u3002",
+ "transaction_updated_link": "\u4ea4\u6613 #{ID}<\/a>\uff08\u300c{title}\u300d\uff09\u5df2\u66f4\u65b0\u3002",
+ "transaction_new_stored_link": "\u4ea4\u6613 #{ID}<\/a> \u5df2\u5132\u5b58\u3002",
"transaction_journal_information": "\u4ea4\u6613\u8cc7\u8a0a",
- "submission_options": "Submission options",
- "apply_rules_checkbox": "Apply rules",
- "fire_webhooks_checkbox": "Fire webhooks",
- "no_budget_pointer": "You seem to have no budgets yet. You should create some on the budgets<\/a>-page. Budgets can help you keep track of expenses.",
- "no_bill_pointer": "You seem to have no subscription yet. You should create some on the subscription<\/a>-page. Subscriptions can help you keep track of expenses.",
+ "submission_options": "\u9001\u51fa\u9078\u9805",
+ "apply_rules_checkbox": "\u5957\u7528\u898f\u5247",
+ "fire_webhooks_checkbox": "\u89f8\u767c Webhooks",
+ "no_budget_pointer": "\u770b\u8d77\u4f86\u60a8\u5c1a\u672a\u5efa\u7acb\u4efb\u4f55\u9810\u7b97\u3002\u60a8\u61c9\u8a72\u5728 \u9810\u7b97<\/a> \u9801\u9762\u5efa\u7acb\u4e00\u4e9b\u3002\u9810\u7b97\u80fd\u5354\u52a9\u60a8\u8ffd\u8e64\u652f\u51fa\u3002",
+ "no_bill_pointer": "\u770b\u8d77\u4f86\u60a8\u5c1a\u672a\u5efa\u7acb\u4efb\u4f55\u9031\u671f\u6027\u4ed8\u6b3e\u3002\u60a8\u61c9\u8a72\u5728 \u9031\u671f\u6027\u4ed8\u6b3e<\/a> \u9801\u9762\u5efa\u7acb\u4e00\u4e9b\u3002\u9031\u671f\u6027\u4ed8\u6b3e\u80fd\u5354\u52a9\u60a8\u8ffd\u8e64\u652f\u51fa\u3002",
"source_account": "\u4f86\u6e90\u5e33\u6236",
- "hidden_fields_preferences": "You can enable more transaction options in your preferences<\/a>.",
+ "hidden_fields_preferences": "\u60a8\u53ef\u5728 \u504f\u597d\u8a2d\u5b9a<\/a> \u4e2d\u555f\u7528\u66f4\u591a\u4ea4\u6613\u9078\u9805\u3002",
"destination_account": "\u76ee\u6a19\u5e33\u6236",
- "add_another_split": "\u589e\u52a0\u62c6\u5206",
- "submission": "Submission",
- "stored_journal": "\u5df2\u6210\u529f\u5efa\u7acb\u65b0\u4ea4\u6613 \u201c:description\u201d",
- "create_another": "After storing, return here to create another one.",
- "reset_after": "Reset form after submission",
+ "add_another_split": "\u65b0\u589e\u62c6\u5206",
+ "submission": "\u63d0\u4ea4",
+ "stored_journal": "\u5df2\u6210\u529f\u5efa\u7acb\u65b0\u4ea4\u6613\u300c:description\u300d",
+ "create_another": "\u5132\u5b58\u5f8c\u8fd4\u56de\u6b64\u9801\u4ee5\u5efa\u7acb\u65b0\u4ea4\u6613",
+ "reset_after": "\u9001\u51fa\u5f8c\u91cd\u8a2d\u8868\u55ae",
"submit": "\u9001\u51fa",
"amount": "\u91d1\u984d",
"date": "\u65e5\u671f",
- "is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.",
+ "is_reconciled_fields_dropped": "\u7531\u65bc\u6b64\u4ea4\u6613\u5df2\u5c0d\u5e33\uff0c\u9664\u975e\u60a8\u5148\u53d6\u6d88\u5c0d\u5e33\u72c0\u614b\uff0c\u5426\u5247\u7121\u6cd5\u66f4\u65b0\u5176\u5e33\u6236\u6216\u91d1\u984d\u3002",
"tags": "\u6a19\u7c64",
"no_budget": "(\u7121\u9810\u7b97)",
- "no_bill": "(no subscription)",
+ "no_bill": "(\u7121\u9031\u671f\u6027\u4ed8\u6b3e)",
"category": "\u5206\u985e",
"attachments": "\u9644\u52a0\u6a94\u6848",
"notes": "\u5099\u8a3b",
- "external_url": "External URL",
- "update_transaction": "Update transaction",
- "after_update_create_another": "After updating, return here to continue editing.",
- "store_as_new": "Store as a new transaction instead of updating.",
+ "external_url": "\u5916\u90e8 URL",
+ "update_transaction": "\u66f4\u65b0\u4ea4\u6613",
+ "after_update_create_another": "\u66f4\u65b0\u5f8c\u7e7c\u7e8c\u6b64\u9801\u4ee5\u6301\u7e8c\u7de8\u8f2f",
+ "store_as_new": "\u5132\u5b58\u70ba\u65b0\u4ea4\u6613\uff0c\u800c\u975e\u66f4\u65b0",
"split_title_help": "\u82e5\u60a8\u5efa\u7acb\u4e00\u7b46\u62c6\u5206\u4ea4\u6613\uff0c\u9808\u6709\u4e00\u500b\u6709\u95dc\u4ea4\u6613\u6240\u6709\u62c6\u5206\u7684\u6574\u9ad4\u63cf\u8ff0\u3002",
"none_in_select_list": "(\u7a7a)",
"no_piggy_bank": "(\u7121\u5c0f\u8c6c\u64b2\u6eff)",
"description": "\u63cf\u8ff0",
- "split_transaction_title_help": "If you create a split transaction, there must be a global description for all splits of the transaction.",
- "destination_account_reconciliation": "You can't edit the destination account of a reconciliation transaction.",
- "source_account_reconciliation": "You can't edit the source account of a reconciliation transaction.",
+ "split_transaction_title_help": "\u82e5\u60a8\u5efa\u7acb\u4e00\u7b46\u62c6\u5206\u4ea4\u6613\uff0c\u9700\u8981\u6574\u9ad4\u63cf\u8ff0\u4ee5\u8868\u793a\u9019\u4e9b\u62c6\u5206\u90fd\u5c6c\u65bc\u540c\u4e00\u7b46\u4ea4\u6613\u3002",
+ "destination_account_reconciliation": "\u60a8\u7121\u6cd5\u7de8\u8f2f\u5c0d\u5e33\u4ea4\u6613\u7684\u76ee\u6a19\u5e33\u6236\u3002",
+ "source_account_reconciliation": "\u60a8\u7121\u6cd5\u7de8\u8f2f\u5c0d\u5e33\u4ea4\u6613\u7684\u4f86\u6e90\u5e33\u6236\u3002",
"budget": "\u9810\u7b97",
- "bill": "Subscription",
- "you_create_withdrawal": "You're creating a withdrawal.",
- "you_create_transfer": "You're creating a transfer.",
- "you_create_deposit": "You're creating a deposit.",
+ "bill": "\u9031\u671f\u6027\u4ed8\u6b3e",
+ "you_create_withdrawal": "\u60a8\u6b63\u5728\u5efa\u7acb\u4e00\u7b46\u63d0\u6b3e\u3002",
+ "you_create_transfer": "\u60a8\u6b63\u5728\u5efa\u7acb\u4e00\u7b46\u8f49\u5e33\u3002",
+ "you_create_deposit": "\u60a8\u6b63\u5728\u5efa\u7acb\u4e00\u7b46\u5b58\u6b3e\u3002",
"edit": "\u7de8\u8f2f",
"delete": "\u522a\u9664",
"name": "\u540d\u7a31",
- "profile_whoops": "Whoops!",
- "profile_something_wrong": "Something went wrong!",
- "profile_try_again": "Something went wrong. Please try again.",
- "profile_oauth_clients": "OAuth Clients",
- "profile_oauth_no_clients": "You have not created any OAuth clients.",
- "profile_oauth_clients_header": "Clients",
- "profile_oauth_client_id": "Client ID",
- "profile_oauth_client_name": "Name",
- "profile_oauth_client_secret": "Secret",
- "profile_oauth_create_new_client": "Create New Client",
- "profile_oauth_create_client": "Create Client",
- "profile_oauth_edit_client": "Edit Client",
- "profile_oauth_name_help": "Something your users will recognize and trust.",
- "profile_oauth_redirect_url": "Redirect URL",
- "profile_oauth_clients_external_auth": "If you're using an external authentication provider like Authelia, OAuth Clients will not work. You can use Personal Access Tokens only.",
- "profile_oauth_redirect_url_help": "Your application's authorization callback URL.",
- "profile_authorized_apps": "Authorized applications",
- "profile_authorized_clients": "Authorized clients",
+ "profile_whoops": "\u7cdf\u7cd5\uff01",
+ "profile_something_wrong": "\u51fa\u4e86\u4e00\u4e9b\u554f\u984c\uff01",
+ "profile_try_again": "\u51fa\u4e86\u4e00\u4e9b\u554f\u984c\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002",
+ "profile_oauth_clients": "OAuth \u7528\u6236\u7aef",
+ "profile_oauth_no_clients": "\u60a8\u5c1a\u672a\u5efa\u7acb\u4efb\u4f55 OAuth \u7528\u6236\u7aef\u3002",
+ "profile_oauth_clients_header": "\u7528\u6236\u7aef",
+ "profile_oauth_client_id": "\u7528\u6236\u7aef ID",
+ "profile_oauth_client_name": "\u540d\u7a31",
+ "profile_oauth_client_secret": "\u7955\u5bc6 (Secret)",
+ "profile_oauth_create_new_client": "\u5efa\u7acb\u65b0\u7528\u6236\u7aef",
+ "profile_oauth_create_client": "\u5efa\u7acb\u7528\u6236\u7aef",
+ "profile_oauth_edit_client": "\u7de8\u8f2f\u7528\u6236\u7aef",
+ "profile_oauth_name_help": "\u4e00\u500b\u80fd\u8b93\u4f7f\u7528\u8005\u8a8d\u5f97\u4e14\u503c\u5f97\u4fe1\u8cf4\u7684\u540d\u7a31\u3002",
+ "profile_oauth_redirect_url": "\u91cd\u65b0\u5c0e\u5411 URL",
+ "profile_oauth_clients_external_auth": "\u5982\u679c\u60a8\u4f7f\u7528\u50cf Authelia \u4e4b\u985e\u7684\u5916\u90e8\u9a57\u8b49\u670d\u52d9\uff0cOAuth \u7528\u6236\u7aef\u5c07\u7121\u6cd5\u904b\u4f5c\u3002\u60a8\u53ea\u80fd\u4f7f\u7528\u500b\u4eba\u5b58\u53d6\u6b0a\u6756 (Personal Access Tokens)\u3002",
+ "profile_oauth_redirect_url_help": "\u60a8\u61c9\u7528\u7a0b\u5f0f\u7684\u6388\u6b0a\u56de\u547c (Callback) URL\u3002",
+ "profile_authorized_apps": "\u5df2\u6388\u6b0a\u7684\u61c9\u7528\u7a0b\u5f0f",
+ "profile_authorized_clients": "\u5df2\u6388\u6b0a\u7684\u7528\u6236\u7aef",
"profile_scopes": "Scopes",
- "profile_revoke": "Revoke",
- "profile_personal_access_tokens": "Personal Access Tokens",
- "profile_personal_access_token": "Personal Access Token",
- "profile_personal_access_token_explanation": "Here is your new personal access token. This is the only time it will be shown so don't lose it! You may now use this token to make API requests.",
- "profile_no_personal_access_token": "You have not created any personal access tokens.",
- "profile_create_new_token": "Create new token",
- "profile_create_token": "Create token",
- "profile_create": "Create",
- "profile_save_changes": "Save changes",
- "default_group_title_name": "(ungrouped)",
+ "profile_revoke": "\u64a4\u92b7",
+ "profile_personal_access_tokens": "\u500b\u4eba\u5b58\u53d6\u6b0a\u6756 (Personal Access Tokens)",
+ "profile_personal_access_token": "\u500b\u4eba\u5b58\u53d6\u6b0a\u6756",
+ "profile_personal_access_token_explanation": "\u4ee5\u4e0b\u70ba\u60a8\u65b0\u7684\u500b\u4eba\u5b58\u53d6\u6b0a\u6756\u3002\u6b64\u6b0a\u6756\u53ea\u986f\u793a\u4e00\u6b21\uff0c\u8acb\u52d9\u5fc5\u4fdd\u5b58\u597d\uff01\u60a8\u73fe\u5728\u53ef\u4f7f\u7528\u5b83\u4f86\u767c\u9001 API \u8acb\u6c42\u3002",
+ "profile_no_personal_access_token": "\u60a8\u5c1a\u672a\u5efa\u7acb\u4efb\u4f55\u500b\u4eba\u5b58\u53d6\u6b0a\u6756\u3002",
+ "profile_create_new_token": "\u5efa\u7acb\u65b0\u6b0a\u6756",
+ "profile_create_token": "\u5efa\u7acb\u6b0a\u6756",
+ "profile_create": "\u5efa\u7acb",
+ "profile_save_changes": "\u5132\u5b58\u8b8a\u66f4",
+ "default_group_title_name": "(\u672a\u5206\u7d44)",
"piggy_bank": "\u5c0f\u8c6c\u64b2\u6eff",
- "profile_oauth_client_secret_title": "Client Secret",
- "profile_oauth_client_secret_expl": "Here is your new client secret. This is the only time it will be shown so don't lose it! You may now use this secret to make API requests.",
- "profile_oauth_confidential": "Confidential",
- "profile_oauth_confidential_help": "Require the client to authenticate with a secret. Confidential clients can hold credentials in a secure way without exposing them to unauthorized parties. Public applications, such as native desktop or JavaScript SPA applications, are unable to hold secrets securely.",
- "multi_account_warning_unknown": "Depending on the type of transaction you create, the source and\/or destination account of subsequent splits may be overruled by whatever is defined in the first split of the transaction.",
- "multi_account_warning_withdrawal": "Keep in mind that the source account of subsequent splits will be overruled by whatever is defined in the first split of the withdrawal.",
- "multi_account_warning_deposit": "Keep in mind that the destination account of subsequent splits will be overruled by whatever is defined in the first split of the deposit.",
- "multi_account_warning_transfer": "Keep in mind that the source + destination account of subsequent splits will be overruled by whatever is defined in the first split of the transfer.",
+ "profile_oauth_client_secret_title": "\u7528\u6236\u7aef\u7955\u5bc6",
+ "profile_oauth_client_secret_expl": "\u4ee5\u4e0b\u70ba\u60a8\u65b0\u7684\u7528\u6236\u7aef\u7955\u5bc6\u3002\u6b64\u7955\u5bc6\u53ea\u6703\u986f\u793a\u4e00\u6b21\uff0c\u8acb\u8b39\u614e\u4fdd\u5b58\uff01\u60a8\u73fe\u5728\u53ef\u4f7f\u7528\u6b64\u7955\u5bc6\u4f86\u767c\u9001 API \u8acb\u6c42\u3002",
+ "profile_oauth_confidential": "\u6a5f\u5bc6 (Confidential)",
+ "profile_oauth_confidential_help": "\u6b64\u7528\u6236\u7aef\u5fc5\u9808\u4f7f\u7528\u7955\u5bc6\u9032\u884c\u9a57\u8b49\u3002\u6a5f\u5bc6 (Confidential) \u7528\u6236\u7aef\u53ef\u5728\u5b89\u5168\u74b0\u5883\u4fdd\u5b58\u6191\u8b49\uff0c\u4e0d\u6703\u66b4\u9732\u65bc\u672a\u6388\u6b0a\u65b9\u3002\u50cf\u684c\u9762\u61c9\u7528\u6216 JavaScript SPA (\u55ae\u9801\u61c9\u7528) \u5247\u7121\u6cd5\u5b89\u5168\u4fdd\u5b58\u7955\u5bc6\uff0c\u56e0\u6b64\u5c6c\u65bc\u516c\u5171\u61c9\u7528\u7a0b\u5f0f\u3002",
+ "multi_account_warning_unknown": "\u4f9d\u60a8\u5efa\u7acb\u4ea4\u6613\u7684\u985e\u578b\u4e0d\u540c\uff0c\u5f8c\u7e8c\u62c6\u5206\u7684\u4f86\u6e90\u5e33\u6236\u6216\u76ee\u6a19\u5e33\u6236\u53ef\u80fd\u6703\u88ab\u7b2c\u4e00\u7b46\u62c6\u5206\u4e2d\u8a2d\u5b9a\u7684\u5e33\u6236\u8986\u5beb\u3002",
+ "multi_account_warning_withdrawal": "\u8acb\u6ce8\u610f\uff0c\u82e5\u60a8\u5efa\u7acb\u7684\u662f\u63d0\u6b3e\u4ea4\u6613\uff0c\u5f8c\u7e8c\u62c6\u5206\u7684\u4f86\u6e90\u5e33\u6236\u5c07\u6703\u88ab\u7b2c\u4e00\u7b46\u62c6\u5206\u4e2d\u8a2d\u5b9a\u7684\u5e33\u6236\u8986\u5beb\u3002",
+ "multi_account_warning_deposit": "\u8acb\u6ce8\u610f\uff0c\u82e5\u60a8\u5efa\u7acb\u7684\u662f\u5b58\u6b3e\u4ea4\u6613\uff0c\u5f8c\u7e8c\u62c6\u5206\u7684\u76ee\u6a19\u5e33\u6236\u5c07\u6703\u88ab\u7b2c\u4e00\u7b46\u62c6\u5206\u4e2d\u8a2d\u5b9a\u7684\u5e33\u6236\u8986\u5beb\u3002",
+ "multi_account_warning_transfer": "\u8acb\u6ce8\u610f\uff0c\u82e5\u60a8\u5efa\u7acb\u7684\u662f\u8f49\u5e33\u4ea4\u6613\uff0c\u5f8c\u7e8c\u62c6\u5206\u7684\u4f86\u6e90\u8207\u76ee\u6a19\u5e33\u6236\u5c07\u6703\u88ab\u7b2c\u4e00\u7b46\u62c6\u5206\u4e2d\u8a2d\u5b9a\u7684\u5e33\u6236\u8986\u5beb\u3002",
"webhook_trigger_STORE_TRANSACTION": "\u5728\u4ea4\u6613\u5efa\u7acb\u5f8c",
"webhook_trigger_UPDATE_TRANSACTION": "\u5728\u4ea4\u6613\u66f4\u65b0\u5f8c",
"webhook_trigger_DESTROY_TRANSACTION": "\u5728\u4ea4\u6613\u522a\u9664\u5f8c",
"webhook_response_TRANSACTIONS": "\u4ea4\u6613\u8a73\u60c5",
"webhook_response_ACCOUNTS": "\u5e33\u865f\u8a73\u60c5",
- "webhook_response_none_NONE": "No details",
+ "webhook_response_none_NONE": "\u7121\u4efb\u4f55\u8a73\u60c5",
"webhook_delivery_JSON": "JSON",
"actions": "\u64cd\u4f5c",
"meta_data": "\u4e2d\u7e7c\u8cc7\u6599",
- "webhook_messages": "Webhook message",
- "inactive": "\u672a\u555f\u7528",
- "no_webhook_messages": "There are no webhook messages",
+ "webhook_messages": "Webhook \u8a0a\u606f",
+ "inactive": "\u505c\u7528",
+ "no_webhook_messages": "\u5c1a\u7121 webhook \u8a0a\u606f",
"inspect": "\u6aa2\u67e5",
- "create_new_webhook": "Create new webhook",
+ "create_new_webhook": "\u5efa\u7acb\u65b0\u7684 webhook",
"webhooks": "Webhooks",
- "webhook_trigger_form_help": "Indicate on what event the webhook will trigger",
- "webhook_response_form_help": "Indicate what the webhook must submit to the URL.",
- "webhook_delivery_form_help": "Which format the webhook must deliver data in.",
- "webhook_active_form_help": "The webhook must be active or it won't be called.",
- "edit_webhook_js": "Edit webhook \"{title}\"",
- "webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.",
+ "webhook_trigger_form_help": "\u6307\u793a\u6b64 webhook \u5728\u4f55\u7a2e\u4e8b\u4ef6\u6642\u89f8\u767c",
+ "webhook_response_form_help": "\u6307\u51fa\u6b64 webhook \u5fc5\u9808\u5411\u8a72 URL \u63d0\u4ea4\u4ec0\u9ebc\u8cc7\u6599\u3002",
+ "webhook_delivery_form_help": "\u6307\u793a\u6b64 webhook \u4ee5\u4f55\u7a2e\u683c\u5f0f\u50b3\u9001\u8cc7\u6599\u3002",
+ "webhook_active_form_help": "\u6b64 webhook \u5fc5\u9808\u8655\u65bc\u555f\u7528\u72c0\u614b\uff0c\u5426\u5247\u4e0d\u6703\u88ab\u547c\u53eb\u3002",
+ "edit_webhook_js": "\u7de8\u8f2f webhook\u300c{title}\u300d",
+ "webhook_was_triggered": "\u6b64 webhook \u5df2\u65bc\u6307\u5b9a\u7684\u4ea4\u6613\u4e2d\u88ab\u89f8\u767c\u3002\u8acb\u7a0d\u5019\u986f\u793a\u7d50\u679c\u3002",
"view_message": "\u67e5\u770b\u8a0a\u606f",
- "view_attempts": "View failed attempts",
- "message_content_title": "Webhook message content",
- "message_content_help": "This is the content of the message that was sent (or tried) using this webhook.",
- "attempt_content_title": "Webhook attempts",
- "attempt_content_help": "These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.",
- "no_attempts": "There are no unsuccessful attempts. That's a good thing!",
- "webhook_attempt_at": "Attempt at {moment}",
+ "view_attempts": "\u6aa2\u8996\u5931\u6557\u7684\u5617\u8a66",
+ "message_content_title": "Webhook \u8a0a\u606f\u5167\u5bb9",
+ "message_content_help": "\u9019\u662f\u900f\u904e\u6b64 webhook \u5df2\u9001\u51fa\uff08\u6216\u5617\u8a66\u9001\u51fa\uff09\u7684\u8a0a\u606f\u5167\u5bb9\u3002",
+ "attempt_content_title": "Webhook \u5617\u8a66",
+ "attempt_content_help": "\u4ee5\u4e0b\u70ba\u6b64 webhook \u8a0a\u606f\u63d0\u4ea4\u81f3\u8a2d\u5b9a\u4e4b URL \u6642\u6240\u6709\u672a\u6210\u529f\u7684\u5617\u8a66\u3002\u904e\u4e00\u6bb5\u6642\u9593\u5f8c\uff0cFirefly III \u5c07\u505c\u6b62\u5617\u8a66\u3002",
+ "no_attempts": "\u6c92\u6709\u672a\u6210\u529f\u7684\u5617\u8a66\u3002\u9019\u662f\u597d\u4e8b\uff01",
+ "webhook_attempt_at": "\u65bc {moment} \u7684\u5617\u8a66",
"logs": "\u7d00\u9304\u65e5\u8a8c",
"response": "\u56de\u8986",
- "visit_webhook_url": "Visit webhook URL",
- "reset_webhook_secret": "Reset webhook secret",
- "header_exchange_rates": "Exchange rates",
- "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.",
- "exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
- "exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.",
- "header_exchange_rates_rates": "Exchange rates",
- "header_exchange_rates_table": "Table with exchange rates",
- "help_rate_form": "On this day, how many {to} will you get for one {from}?",
- "add_new_rate": "Add a new exchange rate",
- "save_new_rate": "Save new rate"
+ "visit_webhook_url": "\u9020\u8a2a webhook URL",
+ "reset_webhook_secret": "\u91cd\u8a2d webhook \u5bc6\u9470",
+ "header_exchange_rates": "\u532f\u7387",
+ "exchange_rates_intro": "Firefly III \u652f\u63f4\u4e0b\u8f09\u4e26\u4f7f\u7528\u532f\u7387\u3002\u5982\u9700\u66f4\u591a\u8cc7\u8a0a\uff0c\u8acb\u53c3\u8003\u6587\u4ef6<\/a>\u3002",
+ "exchange_rates_from_to": "\u5728 {from} \u8207 {to} \u4e4b\u9593\uff08\u4ee5\u53ca\u53cd\u65b9\u5411\uff09",
+ "exchange_rates_intro_rates": "Firefly III \u6703\u4f7f\u7528\u4e0b\u5217\u532f\u7387\u3002\u82e5\u672a\u63d0\u4f9b\u53cd\u5411\u532f\u7387\uff0c\u7cfb\u7d71\u6703\u81ea\u52d5\u8a08\u7b97\u5176\u53cd\u5411\u503c\u3002\u82e5\u8a72\u4ea4\u6613\u65e5\u671f\u7121\u5c0d\u61c9\u532f\u7387\uff0cFirefly III \u6703\u56de\u6eaf\u8f03\u820a\u7684\u532f\u7387\uff1b\u82e5\u7686\u7121\u53ef\u7528\uff0c\u5247\u6703\u4f7f\u7528\u300c1\u300d\u3002",
+ "header_exchange_rates_rates": "\u532f\u7387\u6e05\u55ae",
+ "header_exchange_rates_table": "\u532f\u7387\u8868",
+ "help_rate_form": "\u5728\u9019\u4e00\u5929\uff0c\u4e00\u500b {from} \u53ef\u514c\u63db\u591a\u5c11 {to}\uff1f",
+ "add_new_rate": "\u65b0\u589e\u532f\u7387",
+ "save_new_rate": "\u5132\u5b58\u65b0\u532f\u7387"
},
"form": {
"url": "URL",
"active": "\u555f\u7528",
"interest_date": "\u5229\u7387\u65e5\u671f",
- "administration_currency": "Native currency",
+ "administration_currency": "\u539f\u751f\u8ca8\u5e63",
"title": "\u6a19\u984c",
"date": "\u65e5\u671f",
"book_date": "\u767b\u8a18\u65e5\u671f",
@@ -173,12 +173,12 @@
"list": {
"title": "\u6a19\u984c",
"active": "\u662f\u5426\u555f\u7528\uff1f",
- "native_currency": "Native currency",
+ "native_currency": "\u539f\u751f\u8ca8\u5e63",
"trigger": "\u89f8\u767c\u5668",
"response": "\u56de\u61c9",
- "delivery": "Delivery",
+ "delivery": "\u50b3\u905e",
"url": "URL",
- "secret": "Secret"
+ "secret": "\u5bc6\u9470"
},
"config": {
"html_language": "zh-tw",