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