Compare commits

..

30 Commits

Author SHA1 Message Date
github-actions
04d1e8fd59 Auto commit for release 'develop' on 2025-01-19 2025-01-19 11:46:08 +01:00
James Cole
9d2f57e40a Fix menu 2025-01-19 11:41:24 +01:00
James Cole
ae366341cc Rename default to native. 2025-01-19 11:40:07 +01:00
James Cole
3766128cb8 Add code for administrations. 2025-01-19 11:34:23 +01:00
James Cole
950c60d55c Fix https://github.com/firefly-iii/firefly-iii/issues/9667 2025-01-19 07:18:07 +01:00
James Cole
4b2807de48 rename admin to settings. 2025-01-18 17:26:31 +01:00
James Cole
649736cb31 Rename admin to settings. 2025-01-18 17:22:11 +01:00
James Cole
6a121a8a78 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop
# Conflicts:
#	app/Transformers/AccountTransformer.php
2025-01-18 17:21:34 +01:00
James Cole
f69b9ac9da Commit updated transformers. 2025-01-18 17:20:39 +01:00
James Cole
23d70a2fac Rename to settings 2025-01-18 17:20:21 +01:00
James Cole
d178ff9de0 Rename admin routes to settings. 2025-01-18 17:20:06 +01:00
James Cole
3ecad3457f Rename "administration" to "settings" 2025-01-18 17:10:47 +01:00
github-actions
fa6c621968 Auto commit for release 'develop' on 2025-01-15 2025-01-15 20:30:00 +01:00
James Cole
df863b6cff Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2025-01-15 18:54:56 +01:00
James Cole
9316ff3e51 Fix account api for new features. 2025-01-15 18:54:49 +01:00
James Cole
bfd91f8ee6 Update default.twig
Signed-off-by: James Cole <james@firefly-iii.org>
2025-01-13 11:32:54 +01:00
github-actions
13e5d25cfe Auto commit for release 'develop' on 2025-01-13 2025-01-13 04:14:18 +01:00
James Cole
b13030420b Merge branch 'main' into develop 2025-01-11 10:07:21 +01:00
github-actions
44d1e8181c Auto commit for release 'develop' on 2025-01-11 2025-01-11 10:06:32 +01:00
James Cole
63b34c1853 Remove unused step. 2025-01-11 10:05:51 +01:00
github-actions
facd0144cb Auto commit for release 'develop' on 2025-01-10 2025-01-10 17:56:21 +01:00
James Cole
115e3435af Fix https://github.com/orgs/firefly-iii/discussions/9576 2025-01-10 06:26:28 +01:00
github-actions
d44cd50768 Auto commit for release 'develop' on 2025-01-06 2025-01-06 07:37:27 +01:00
James Cole
1afcaea4c6 Trim quotes 2025-01-06 06:55:34 +01:00
James Cole
2bd1b37717 Move class to separate file. 2025-01-06 06:19:09 +01:00
github-actions
2d37177316 Auto commit for release 'develop' on 2025-01-06 2025-01-06 04:13:41 +01:00
James Cole
abb25e2015 Fix sql query error and upgrade error. 2025-01-05 14:33:33 +01:00
James Cole
d08d075e30 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2025-01-05 09:23:17 +01:00
James Cole
04fb6a953e This rule is no longer necessary. 2025-01-05 09:21:29 +01:00
James Cole
5dce0bec8e This is no longer necessary since translations are no longer stored in the repository. 2025-01-05 09:20:55 +01:00
130 changed files with 5138 additions and 3760 deletions

View File

@@ -406,16 +406,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.66.0",
"version": "v3.68.1",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "5f5f2a142ff36b93c41885bca29cc5f861c013e6"
"reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/5f5f2a142ff36b93c41885bca29cc5f861c013e6",
"reference": "5f5f2a142ff36b93c41885bca29cc5f861c013e6",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff",
"reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff",
"shasum": ""
},
"require": {
@@ -432,17 +432,17 @@
"react/promise": "^2.0 || ^3.0",
"react/socket": "^1.0",
"react/stream": "^1.0",
"sebastian/diff": "^4.0 || ^5.0 || ^6.0",
"symfony/console": "^5.4 || ^6.0 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
"symfony/finder": "^5.4 || ^6.0 || ^7.0",
"symfony/options-resolver": "^5.4 || ^6.0 || ^7.0",
"symfony/polyfill-mbstring": "^1.28",
"symfony/polyfill-php80": "^1.28",
"symfony/polyfill-php81": "^1.28",
"symfony/process": "^5.4 || ^6.0 || ^7.0 <7.2",
"symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
"sebastian/diff": "^4.0 || ^5.1 || ^6.0",
"symfony/console": "^5.4 || ^6.4 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0",
"symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
"symfony/finder": "^5.4 || ^6.4 || ^7.0",
"symfony/options-resolver": "^5.4 || ^6.4 || ^7.0",
"symfony/polyfill-mbstring": "^1.31",
"symfony/polyfill-php80": "^1.31",
"symfony/polyfill-php81": "^1.31",
"symfony/process": "^5.4 || ^6.4 || ^7.2",
"symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
},
"require-dev": {
"facile-it/paraunit": "^1.3.1 || ^2.4",
@@ -454,9 +454,9 @@
"php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
"phpunit/phpunit": "^9.6.21 || ^10.5.38 || ^11.4.3",
"symfony/var-dumper": "^5.4.47 || ^6.4.15 || ^7.1.8",
"symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.1.6"
"phpunit/phpunit": "^9.6.22 || ^10.5.40 || ^11.5.2",
"symfony/var-dumper": "^5.4.48 || ^6.4.15 || ^7.2.0",
"symfony/yaml": "^5.4.45 || ^6.4.13 || ^7.2.0"
},
"suggest": {
"ext-dom": "For handling output formats in XML",
@@ -497,7 +497,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.66.0"
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1"
},
"funding": [
{
@@ -505,7 +505,7 @@
"type": "github"
}
],
"time": "2024-12-29T13:46:23+00:00"
"time": "2025-01-17T09:20:36+00:00"
},
{
"name": "psr/container",
@@ -2242,16 +2242,16 @@
},
{
"name": "symfony/process",
"version": "v7.1.8",
"version": "v7.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892"
"reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892",
"reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892",
"url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
"reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
"shasum": ""
},
"require": {
@@ -2283,7 +2283,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v7.1.8"
"source": "https://github.com/symfony/process/tree/v7.2.0"
},
"funding": [
{
@@ -2299,7 +2299,7 @@
"type": "tidelift"
}
],
"time": "2024-11-06T14:23:19+00:00"
"time": "2024-11-06T14:24:19+00:00"
},
{
"name": "symfony/service-contracts",

53
.github/mergify.yml vendored
View File

@@ -8,56 +8,3 @@ pull_request_rules:
close:
message: Please do not open PR's on the `main` branch, but on the `develop`
branch only. Thank you!
- name: No translations
conditions:
- -author~=^dependabot(|-preview)\[bot\]$
- base=develop
- or:
- files~=^resources/lang/bg_BG
- files~=^resources/lang/ca_ES
- files~=^resources/lang/cs_CZ
- files~=^resources/lang/da_DK
- files~=^resources/lang/de_DE
- files~=^resources/lang/el_GR
- files~=^resources/lang/en_GB
- files~=^resources/lang/es_ES
- files~=^resources/lang/et_EE
- files~=^resources/lang/fa_IR
- files~=^resources/lang/fi_FI
- files~=^resources/lang/fr_FR
- files~=^resources/lang/he_IL
- files~=^resources/lang/hu_HU
- files~=^resources/lang/id_ID
- files~=^resources/lang/is_IS
- files~=^resources/lang/it_IT
- files~=^resources/lang/ja_JP
- files~=^resources/lang/ko_KR
- files~=^resources/lang/lt_LT
- files~=^resources/lang/nb_NO
- files~=^resources/lang/nl_NL
- files~=^resources/lang/pl_PL
- files~=^resources/lang/pt_BR
- files~=^resources/lang/pt_PT
- files~=^resources/lang/ro_RO
- files~=^resources/lang/ru_RU
- files~=^resources/lang/si_LK
- files~=^resources/lang/sk_SK
- files~=^resources/lang/sl_SI
- files~=^resources/lang/sr_CS
- files~=^resources/lang/sv_SE
- files~=^resources/lang/th_TH
- files~=^resources/lang/tlh_AA
- files~=^resources/lang/tr_TR
- files~=^resources/lang/uk_UA
- files~=^resources/lang/vi_VN
- files~=^resources/lang/zh_CN
- files~=^resources/lang/zh_TW
actions:
comment:
message: >
Please do not submit translated strings in your PR. If you need new
sentences to be translated, add them to the `en_US` language strings.
New or changed translations for other languages can be submitted at
https://crowdin.com/project/firefly-iii
Thank you!

View File

@@ -58,15 +58,6 @@ jobs:
GITHUB_TOKEN: ${{ github.token }}
CROWDIN_PROJECT_NR: ${{ secrets.CROWDIN_PROJECT_NR }}
CROWDIN_TOKEN: ${{ secrets.CROWDIN_TOKEN }}
- name: Cleanup translations
id: cleanup-transactions
uses: JC5/firefly-iii-dev@main
with:
action: 'ff3:crowdin-warning'
output: ''
env:
FIREFLY_III_ROOT: /github/workspace
GH_TOKEN: ''
- name: Cleanup changelog
id: cleanup-changelog
uses: JC5/firefly-iii-dev@main

View File

@@ -30,12 +30,19 @@ use FireflyIII\Models\Preference;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Transformers\V2\AbstractTransformer;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Collection;
use League\Fractal\Manager;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use Symfony\Component\HttpFoundation\Exception\BadRequestException;
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -223,4 +230,45 @@ abstract class Controller extends BaseController
return $manager;
}
final protected function jsonApiList(string $key, LengthAwarePaginator $paginator, AbstractTransformer $transformer): array
{
$manager = new Manager();
$baseUrl = sprintf('%s/api/v1/', request()->getSchemeAndHttpHost());
// TODO add stuff to path?
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$objects = $paginator->getCollection();
// the transformer, at this point, needs to collect information that ALL items in the collection
// require, like meta-data and stuff like that, and save it for later.
$objects = $transformer->collectMetaData($objects);
$paginator->setCollection($objects);
$resource = new FractalCollection($objects, $transformer, $key);
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return $manager->createData($resource)->toArray();
}
/**
* Returns a JSON API object and returns it.
*
* @param array<int, mixed>|Model $object
*/
final protected function jsonApiObject(string $key, array|Model $object, AbstractTransformer $transformer): array
{
// create some objects:
$manager = new Manager();
$baseUrl = sprintf('%s/api/v1', request()->getSchemeAndHttpHost());
$manager->setSerializer(new JsonApiSerializer($baseUrl));
$transformer->collectMetaData(new Collection([$object]));
$resource = new Item($object, $transformer, $key);
return $manager->createData($resource)->toArray();
}
}

View File

@@ -0,0 +1,71 @@
<?php
/*
* IndexController.php
* Copyright (c) 2024 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\UserGroup;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Data\DateRequest;
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
use FireflyIII\Transformers\UserGroupTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
class IndexController extends Controller
{
public const string RESOURCE_KEY = 'user_groups';
private UserGroupRepositoryInterface $repository;
/**
* AccountController constructor.
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
$this->repository = app(UserGroupRepositoryInterface::class);
return $next($request);
}
);
}
public function index(DateRequest $request): JsonResponse
{
$administrations = $this->repository->get();
$pageSize = $this->parameters->get('limit');
$count = $administrations->count();
$administrations = $administrations->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($administrations, $count, $pageSize, $this->parameters->get('page'));
$transformer = new UserGroupTransformer();
$transformer->setParameters($this->parameters); // give params to transformer
return response()
->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer))
->header('Content-Type', self::CONTENT_TYPE)
;
}
}

View File

@@ -0,0 +1,64 @@
<?php
/*
* ShowController.php
* Copyright (c) 2021 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\UserGroup;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Models\UserGroup;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Transformers\UserGroupTransformer;
use Illuminate\Http\JsonResponse;
/**
* Class ShowController
*/
class ShowController extends Controller
{
public const string RESOURCE_KEY = 'user_groups';
private WebhookRepositoryInterface $repository;
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
$this->repository = app(WebhookRepositoryInterface::class);
$this->repository->setUser(auth()->user());
return $next($request);
}
);
}
public function show(UserGroup $userGroup): JsonResponse
{
$transformer = new UserGroupTransformer();
$transformer->setParameters($this->parameters);
return response()
->api($this->jsonApiObject(self::RESOURCE_KEY, $userGroup, $transformer))
->header('Content-Type', self::CONTENT_TYPE)
;
}
}

View File

@@ -0,0 +1,71 @@
<?php
/*
* UpdateController.php
* Copyright (c) 2025 james@firefly-iii.org.
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers\Models\UserGroup;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Models\UserGroup\UpdateRequest;
use FireflyIII\Models\UserGroup;
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
use FireflyIII\Transformers\UserGroupTransformer;
use Illuminate\Http\JsonResponse;
class UpdateController extends Controller
{
public const string RESOURCE_KEY = 'user_groups';
private UserGroupRepositoryInterface $repository;
/**
* AccountController constructor.
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
$this->repository = app(UserGroupRepositoryInterface::class);
return $next($request);
}
);
}
public function update(UpdateRequest $request, UserGroup $userGroup): JsonResponse
{
app('log')->debug(sprintf('Now in %s', __METHOD__));
$data = $request->getData();
$userGroup = $this->repository->update($userGroup, $data);
$userGroup->refresh();
app('preferences')->mark();
$transformer = new UserGroupTransformer();
$transformer->setParameters($this->parameters);
return response()
->api($this->jsonApiObject(self::RESOURCE_KEY, $userGroup, $transformer))
->header('Content-Type', self::CONTENT_TYPE)
;
}
}

View File

@@ -55,6 +55,7 @@ class DateRequest extends FormRequest
return [
'start' => $start,
'end' => $end,
'date' => $this->getCarbonDate('date'),
];
}
@@ -64,8 +65,9 @@ class DateRequest extends FormRequest
public function rules(): array
{
return [
'start' => 'required|date',
'end' => 'required|date|after:start',
'date' => 'date|after:1900-01-01|before:2099-12-31',
'start' => 'date|after:1900-01-01|before:2099-12-31|before:end|required_with:end',
'end' => 'date|after:1900-01-01|before:2099-12-31|after:start|required_with:start',
];
}
}

View File

@@ -0,0 +1,65 @@
<?php
/*
* UpdateRequest.php
* Copyright (c) 2021 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests\Models\UserGroup;
use FireflyIII\Models\UserGroup;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class UpdateRequest
*/
class UpdateRequest extends FormRequest
{
use ChecksLogin;
use ConvertsDataTypes;
public function getData(): array
{
$fields = [
'title' => ['title', 'convertString'],
'native_currency_id' => ['native_currency_id', 'convertInteger'],
'native_currency_code' => ['native_currency_code', 'convertString'],
];
return $this->getAllData($fields);
}
/**
* Rules for this request.
*/
public function rules(): array
{
/** @var UserGroup $userGroup */
$userGroup = $this->route()->parameter('userGroup');
return [
'title' => ['required', 'min:1', 'max:255'],
'native_currency_id' => 'exists:transaction_currencies,id',
'native_currency_code' => 'exists:transaction_currencies,code',
];
}
}

View File

@@ -66,7 +66,7 @@ class ShowController extends Controller
$default = 1 === $group->pivot->group_default;
}
$currency->userGroupEnabled = $enabled;
$currency->userGroupDefault = $default;
$currency->userGroupNative = $default;
$transformer = new CurrencyTransformer();

View File

@@ -38,17 +38,17 @@ class CreatesDatabase extends Command
public function handle(): int
{
if ('mysql' !== config('database.default')) {
$this->friendlyInfo(sprintf('CreateDB does not apply to "%s", skipped.', config('database.default')));
if ('mysql' !== env('DB_CONNECTION')) {
$this->friendlyInfo(sprintf('CreateDB does not apply to "%s", skipped.', env('DB_CONNECTION')));
return 0;
}
// try to set up a raw connection:
$exists = false;
$dsn = sprintf('mysql:host=%s;port=%d;charset=utf8mb4', config('database.mysql.host'), config('database.mysql.port'));
$dsn = sprintf('mysql:host=%s;port=%d;charset=utf8mb4', env('DB_HOST'), env('DB_PORT'));
if ('' !== config('database.mysql.unix_socket')) {
$dsn = sprintf('mysql:unix_socket=%s;charset=utf8mb4', config('database.mysql.unix_socket'));
if ('' !== (string) env('DB_SOCKET')) {
$dsn = sprintf('mysql:unix_socket=%s;charset=utf8mb4', env('DB_SOCKET'));
}
$this->friendlyLine(sprintf('DSN is %s', $dsn));
@@ -60,7 +60,7 @@ class CreatesDatabase extends Command
// when it fails, display error
try {
$pdo = new \PDO($dsn, config('database.mysql.username'), config('database.mysql.password'), $options);
$pdo = new \PDO($dsn, env('DB_USERNAME'), env('DB_PASSWORD'), $options);
} catch (\PDOException $e) {
$this->friendlyError(sprintf('Error when connecting to DB: %s', $e->getMessage()));
@@ -74,19 +74,19 @@ class CreatesDatabase extends Command
// slightly more complex but less error-prone.
foreach ($stmt as $row) {
$name = $row['Database'] ?? false;
if ($name === config('database.mysql.database')) {
if ($name === env('DB_DATABASE')) {
$exists = true;
}
}
if (false === $exists) {
$this->friendlyError(sprintf('Database "%s" does not exist.', config('database.mysql.database')));
$this->friendlyError(sprintf('Database "%s" does not exist.', env('DB_DATABASE')));
// try to create it.
$pdo->exec(sprintf('CREATE DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;', config('database.mysql.database')));
$this->friendlyInfo(sprintf('Created database "%s"', config('database.mysql.database')));
$pdo->exec(sprintf('CREATE DATABASE `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;', env('DB_DATABASE')));
$this->friendlyInfo(sprintf('Created database "%s"', env('DB_DATABASE')));
}
if (true === $exists) {
$this->friendlyInfo(sprintf('Database "%s" exists.', config('database.mysql.database')));
$this->friendlyInfo(sprintf('Database "%s" exists.', env('DB_DATABASE')));
}
return 0;

View File

@@ -119,7 +119,7 @@ class EditController extends Controller
}
$request->session()->forget('accounts.edit.fromUpdate');
$openingBalanceAmount = (string) $repository->getOpeningBalanceAmount($account);
$openingBalanceAmount = (string) $repository->getOpeningBalanceAmount($account, false);
if ('0' === $openingBalanceAmount) {
$openingBalanceAmount = '';
}

View File

@@ -45,7 +45,7 @@ class ConfigurationController extends Controller
$this->middleware(
static function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
return $next($request);
@@ -73,7 +73,7 @@ class ConfigurationController extends Controller
$siteOwner = config('firefly.site_owner');
return view(
'admin.configuration.index',
'settings.configuration.index',
compact('subTitle', 'subTitleIcon', 'singleUserMode', 'isDemoSite', 'siteOwner')
);
}
@@ -96,6 +96,6 @@ class ConfigurationController extends Controller
session()->flash('success', (string) trans('firefly.configuration_updated'));
app('preferences')->mark();
return redirect()->route('admin.configuration.index');
return redirect()->route('settings.configuration.index');
}
}

View File

@@ -51,7 +51,7 @@ class HomeController extends Controller
public function index()
{
Log::channel('audit')->info('User visits admin index.');
$title = (string) trans('firefly.administration');
$title = (string) trans('firefly.system_settings');
$mainTitleIcon = 'fa-hand-spock-o';
$email = auth()->user()->email;
$pref = app('preferences')->get('remote_guard_alt_email');
@@ -59,6 +59,6 @@ class HomeController extends Controller
$email = $pref->data;
}
return view('admin.index', compact('title', 'mainTitleIcon', 'email'));
return view('settings.index', compact('title', 'mainTitleIcon', 'email'));
}
}

View File

@@ -51,7 +51,7 @@ class LinkController extends Controller
$this->middleware(
function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
$this->repository = app(LinkTypeRepositoryInterface::class);
@@ -78,7 +78,7 @@ class LinkController extends Controller
$this->rememberPreviousUrl('link-types.create.url');
}
return view('admin.link.create', compact('subTitle', 'subTitleIcon'));
return view('settings.link.create', compact('subTitle', 'subTitleIcon'));
}
/**
@@ -91,7 +91,7 @@ class LinkController extends Controller
if (false === $linkType->editable) {
$request->session()->flash('error', (string) trans('firefly.cannot_edit_link_type', ['name' => e($linkType->name)]));
return redirect(route('admin.links.index'));
return redirect(route('settings.links.index'));
}
Log::channel('audit')->info(sprintf('User wants to delete link type #%d', $linkType->id));
@@ -111,7 +111,7 @@ class LinkController extends Controller
// put previous url in session
$this->rememberPreviousUrl('link-types.delete.url');
return view('admin.link.delete', compact('linkType', 'subTitle', 'moveTo', 'count'));
return view('settings.link.delete', compact('linkType', 'subTitle', 'moveTo', 'count'));
}
/**
@@ -142,7 +142,7 @@ class LinkController extends Controller
if (false === $linkType->editable) {
$request->session()->flash('error', (string) trans('firefly.cannot_edit_link_type', ['name' => e($linkType->name)]));
return redirect(route('admin.links.index'));
return redirect(route('settings.links.index'));
}
$subTitle = (string) trans('firefly.edit_link_type', ['name' => $linkType->name]);
$subTitleIcon = 'fa-link';
@@ -155,7 +155,7 @@ class LinkController extends Controller
}
$request->session()->forget('link-types.edit.fromUpdate');
return view('admin.link.edit', compact('subTitle', 'subTitleIcon', 'linkType'));
return view('settings.link.edit', compact('subTitle', 'subTitleIcon', 'linkType'));
}
/**
@@ -176,7 +176,7 @@ class LinkController extends Controller
}
);
return view('admin.link.index', compact('subTitle', 'subTitleIcon', 'linkTypes'));
return view('settings.link.index', compact('subTitle', 'subTitleIcon', 'linkTypes'));
}
/**
@@ -192,7 +192,7 @@ class LinkController extends Controller
Log::channel('audit')->info(sprintf('User viewing link type #%d', $linkType->id));
return view('admin.link.show', compact('subTitle', 'subTitleIcon', 'linkType', 'links'));
return view('settings.link.show', compact('subTitle', 'subTitleIcon', 'linkType', 'links'));
}
/**
@@ -217,7 +217,7 @@ class LinkController extends Controller
// set value so create routine will not overwrite URL:
$request->session()->put('link-types.create.fromStore', true);
$redirect = redirect(route('admin.links.create'))->withInput();
$redirect = redirect(route('settings.links.create'))->withInput();
}
// redirect to previous URL.
@@ -234,7 +234,7 @@ class LinkController extends Controller
if (false === $linkType->editable) {
$request->session()->flash('error', (string) trans('firefly.cannot_edit_link_type', ['name' => e($linkType->name)]));
return redirect(route('admin.links.index'));
return redirect(route('settings.links.index'));
}
$data = [
@@ -253,7 +253,7 @@ class LinkController extends Controller
// set value so edit routine will not overwrite URL:
$request->session()->put('link-types.edit.fromUpdate', true);
$redirect = redirect(route('admin.links.edit', [$linkType->id]))->withInput(['return_to_edit' => 1]);
$redirect = redirect(route('settings.links.edit', [$linkType->id]))->withInput(['return_to_edit' => 1]);
}
// redirect to previous URL.

View File

@@ -38,7 +38,7 @@ class NotificationController extends Controller
public function index(): View
{
Log::channel('audit')->info('User visits notifications index.');
$title = (string) trans('firefly.administration');
$title = (string) trans('firefly.system_settings');
$mainTitleIcon = 'fa-hand-spock-o';
$subTitle = (string) trans('firefly.title_owner_notifications');
$subTitleIcon = 'envelope-o';
@@ -71,7 +71,7 @@ class NotificationController extends Controller
$forcedAvailability['pushover'] = '' !== $pushoverAppToken && '' !== $pushoverUserToken;
return view(
'admin.notifications.index',
'settings.notifications.index',
compact(
'title',
'subTitle',
@@ -115,7 +115,7 @@ class NotificationController extends Controller
session()->flash('success', (string) trans('firefly.notification_settings_saved'));
return redirect(route('admin.notification.index'));
return redirect(route('settings.notification.index'));
}
public function testNotification(Request $request): RedirectResponse
@@ -140,6 +140,6 @@ class NotificationController extends Controller
session()->flash('success', (string) trans('firefly.notification_test_executed', ['channel' => $channel]));
}
return redirect(route('admin.notification.index'));
return redirect(route('settings.notification.index'));
}
}

View File

@@ -47,7 +47,7 @@ class UpdateController extends Controller
parent::__construct();
$this->middleware(
static function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
return $next($request);
@@ -81,7 +81,7 @@ class UpdateController extends Controller
'alpha' => (string) trans('firefly.update_channel_alpha'),
];
return view('admin.update.index', compact('subTitle', 'subTitleIcon', 'selected', 'options', 'channelSelected', 'channelOptions'));
return view('settings.update.index', compact('subTitle', 'subTitleIcon', 'selected', 'options', 'channelSelected', 'channelOptions'));
}
/**
@@ -100,7 +100,7 @@ class UpdateController extends Controller
app('fireflyconfig')->set('update_channel', $channel);
session()->flash('success', (string) trans('firefly.configuration_updated'));
return redirect(route('admin.update-check'));
return redirect(route('settings.update-check'));
}
/**
@@ -112,6 +112,6 @@ class UpdateController extends Controller
session()->flash($release['level'], $release['message']);
return redirect(route('admin.update-check'));
return redirect(route('settings.update-check'));
}
}

View File

@@ -55,7 +55,7 @@ class UserController extends Controller
$this->middleware(
function ($request, $next) {
app('view')->share('title', (string) trans('firefly.administration'));
app('view')->share('title', (string) trans('firefly.system_settings'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
$this->repository = app(UserRepositoryInterface::class);
@@ -74,12 +74,12 @@ class UserController extends Controller
if ($this->externalIdentity) {
request()->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
$subTitle = (string) trans('firefly.delete_user', ['email' => $user->email]);
return view('admin.users.delete', compact('user', 'subTitle'));
return view('settings.users.delete', compact('user', 'subTitle'));
}
public function deleteInvite(InvitedUser $invitedUser): JsonResponse
@@ -108,12 +108,12 @@ class UserController extends Controller
if ($this->externalIdentity) {
request()->session()->flash('error', trans('firefly.external_user_mgt_disabled'));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
$this->repository->destroy($user);
session()->flash('success', (string) trans('firefly.user_deleted'));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
/**
@@ -144,7 +144,7 @@ class UserController extends Controller
'email_changed' => (string) trans('firefly.block_code_email_changed'),
];
return view('admin.users.edit', compact('user', 'canEditDetails', 'subTitle', 'subTitleIcon', 'codes', 'currentUser', 'isAdmin'));
return view('settings.users.edit', compact('user', 'canEditDetails', 'subTitle', 'subTitleIcon', 'codes', 'currentUser', 'isAdmin'));
}
/**
@@ -174,7 +174,7 @@ class UserController extends Controller
}
);
return view('admin.users.index', compact('subTitle', 'subTitleIcon', 'users', 'allowInvites', 'invitedUsers'));
return view('settings.users.index', compact('subTitle', 'subTitleIcon', 'users', 'allowInvites', 'invitedUsers'));
}
public function invite(InviteUserFormRequest $request): RedirectResponse
@@ -186,7 +186,7 @@ class UserController extends Controller
// event!
event(new InvitationCreated($invitee));
return redirect(route('admin.users'));
return redirect(route('settings.users'));
}
/**
@@ -196,14 +196,14 @@ class UserController extends Controller
*/
public function show(User $user)
{
$title = (string) trans('firefly.administration');
$title = (string) trans('firefly.system_settings');
$mainTitleIcon = 'fa-hand-spock-o';
$subTitle = (string) trans('firefly.single_user_administration', ['email' => $user->email]);
$subTitleIcon = 'fa-user';
$information = $this->repository->getUserData($user);
return view(
'admin.users.show',
'settings.users.show',
compact(
'title',
'mainTitleIcon',
@@ -248,7 +248,7 @@ class UserController extends Controller
if (1 === (int) $request->get('return_to_edit')) {
session()->put('users.edit.fromUpdate', true);
$redirect = redirect(route('admin.users.edit', [$user->id]))->withInput(['return_to_edit' => 1]);
$redirect = redirect(route('settings.users.edit', [$user->id]))->withInput(['return_to_edit' => 1]);
}
// redirect to previous URL.

View File

@@ -74,10 +74,10 @@ class IndexController extends Controller
// order so default and enabled are on top:
$collection = $collection->sortBy(
static function (TransactionCurrency $currency) {
$default = true === $currency->userGroupDefault ? 0 : 1;
$native = true === $currency->userGroupNative ? 0 : 1;
$enabled = true === $currency->userGroupEnabled ? 0 : 1;
return sprintf('%s-%s-%s', $default, $enabled, $currency->code);
return sprintf('%s-%s-%s', $native, $enabled, $currency->code);
}
);
$total = $collection->count();

View File

@@ -26,9 +26,11 @@ namespace FireflyIII\Http\Middleware;
use FireflyIII\Models\Account;
use FireflyIII\Models\Bill;
use FireflyIII\Models\GroupMembership;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\UserGroup;
use FireflyIII\Models\Webhook;
use FireflyIII\User;
use Illuminate\Http\Request;
@@ -53,6 +55,10 @@ class InterestingMessage
app('preferences')->mark();
$this->handleGroupMessage($request);
}
if ($this->userGroupMessage($request)) {
app('preferences')->mark();
$this->handleUserGroupMessage($request);
}
if ($this->accountMessage($request)) {
app('preferences')->mark();
$this->handleAccountMessage($request);
@@ -88,6 +94,15 @@ class InterestingMessage
return null !== $transactionGroupId && null !== $message;
}
private function userGroupMessage(Request $request): bool
{
// get parameters from request.
$transactionGroupId = $request->get('user_group_id');
$message = $request->get('message');
return null !== $transactionGroupId && null !== $message;
}
private function handleGroupMessage(Request $request): void
{
// get parameters from request.
@@ -135,6 +150,43 @@ class InterestingMessage
return null !== $accountId && null !== $message;
}
private function handleUserGroupMessage(Request $request): void
{
// get parameters from request.
$userGroupId = $request->get('user_group_id');
$message = $request->get('message');
/** @var User $user */
$user = auth()->user();
$userGroup = UserGroup::find($userGroupId);
$valid = false;
$memberships = $user->groupMemberships()->get();
/** @var GroupMembership $membership */
foreach ($memberships as $membership) {
if ($membership->userGroup->id === $userGroup->id) {
$valid = true;
break;
}
}
if (false === $valid) {
return;
}
if ('deleted' === $message) {
session()->flash('success', (string) trans('firefly.flash_administration_deleted', ['title' => $userGroup->title]));
}
if ('created' === $message) {
session()->flash('success', (string) trans('firefly.flash_administration_created', ['title' => $userGroup->title]));
}
if ('updated' === $message) {
session()->flash('success', (string) trans('firefly.flash_administration_updated', ['title' => $userGroup->title]));
}
}
private function handleAccountMessage(Request $request): void
{
// get parameters from request.

View File

@@ -37,7 +37,7 @@ class TransactionCurrency extends Model
use ReturnsIntegerIdTrait;
use SoftDeletes;
public ?bool $userGroupDefault = null;
public ?bool $userGroupNative = null;
public ?bool $userGroupEnabled = null;
protected $casts
= [
@@ -73,8 +73,8 @@ class TransactionCurrency extends Model
public function refreshForUser(User $user): void
{
$current = $user->userGroup->currencies()->where('transaction_currencies.id', $this->id)->first();
$default = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup);
$this->userGroupDefault = $default->id === $this->id;
$native = app('amount')->getDefaultCurrencyByUserGroup($user->userGroup);
$this->userGroupNative = $native->id === $this->id;
$this->userGroupEnabled = null !== $current;
}

View File

@@ -293,7 +293,7 @@ class AccountRepository implements AccountRepositoryInterface
/**
* Returns the amount of the opening balance for this account.
*/
public function getOpeningBalanceAmount(Account $account): ?string
public function getOpeningBalanceAmount(Account $account, bool $convertToNative): ?string
{
$journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->where('transactions.account_id', $account->id)
@@ -307,6 +307,9 @@ class AccountRepository implements AccountRepositoryInterface
if (null === $transaction) {
return null;
}
if ($convertToNative) {
return $transaction->native_amount ?? '0';
}
return $transaction->amount;
}

View File

@@ -106,7 +106,7 @@ interface AccountRepositoryInterface
/**
* Returns the amount of the opening balance for this account.
*/
public function getOpeningBalanceAmount(Account $account): ?string;
public function getOpeningBalanceAmount(Account $account, bool $convertToNative): ?string;
/**
* Return date of opening balance as string or null.

View File

@@ -30,6 +30,7 @@ use FireflyIII\Factory\UserGroupFactory;
use FireflyIII\Models\GroupMembership;
use FireflyIII\Models\UserGroup;
use FireflyIII\Models\UserRole;
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
use FireflyIII\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Support\Collection;
@@ -198,6 +199,24 @@ class UserGroupRepository implements UserGroupRepositoryInterface
{
$userGroup->title = $data['title'];
$userGroup->save();
$currency = null;
/** @var CurrencyRepositoryInterface $repository */
$repository = app(CurrencyRepositoryInterface::class);
if (array_key_exists('native_currency_code', $data)) {
$repository->setUser($this->user);
$currency = $repository->findByCode($data['native_currency_code']);
}
if (array_key_exists('native_currency_id', $data) && null === $currency) {
$repository->setUser($this->user);
$currency = $repository->find((int) $data['native_currency_id']);
}
if (null !== $currency) {
$repository->makeDefault($currency);
}
return $userGroup;
}

View File

@@ -180,11 +180,11 @@ class CurrencyRepository implements CurrencyRepositoryInterface
$hasId = $local->contains(static function (TransactionCurrency $entry) use ($current) {
return $entry->id === $current->id;
});
$isDefault = $local->contains(static function (TransactionCurrency $entry) use ($current) {
$isNative = $local->contains(static function (TransactionCurrency $entry) use ($current) {
return 1 === (int) $entry->pivot->group_default && $entry->id === $current->id;
});
$current->userGroupEnabled = $hasId;
$current->userGroupDefault = $isDefault;
$current->userGroupNative = $isNative;
return $current;
});
@@ -195,7 +195,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface
$all = $this->userGroup->currencies()->orderBy('code', 'ASC')->withPivot(['group_default'])->get();
$all->map(static function (TransactionCurrency $current) { // @phpstan-ignore-line
$current->userGroupEnabled = true;
$current->userGroupDefault = 1 === (int) $current->pivot->group_default;
$current->userGroupNative = 1 === (int) $current->pivot->group_default;
return $current;
});

View File

@@ -170,7 +170,7 @@ class CreditRecalculateService
$this->validateOpeningBalance($account, $openingBalance);
}
}
$startOfDebt = $this->repository->getOpeningBalanceAmount($account) ?? '0';
$startOfDebt = $this->repository->getOpeningBalanceAmount($account, false) ?? '0';
$leftOfDebt = app('steam')->positive($startOfDebt);
// Log::debug(sprintf('Start of debt is "%s", so initial left of debt is "%s"', app('steam')->bcround($startOfDebt, 2), app('steam')->bcround($leftOfDebt, 2)));

View File

@@ -51,7 +51,7 @@ class CurrencyUpdateService
$currency->decimal_places = $data['decimal_places'];
}
$currency->userGroupEnabled = null;
$currency->userGroupDefault = null;
$currency->userGroupNative = null;
$currency->save();
return $currency;

View File

@@ -168,25 +168,33 @@ class Amount
return $this->getSystemCurrency();
}
/**
* @deprecated
*/
public function getDefaultCurrencyByUserGroup(UserGroup $userGroup): TransactionCurrency
{
$cache = new CacheProperties();
$cache->addProperty('getDefaultCurrencyByGroup');
return $this->getNativeCurrencyByUserGroup($userGroup);
}
public function getNativeCurrencyByUserGroup(UserGroup $userGroup): TransactionCurrency
{
$cache = new CacheProperties();
$cache->addProperty('getNativeCurrencyByGroup');
$cache->addProperty($userGroup->id);
if ($cache->has()) {
return $cache->get();
}
/** @var null|TransactionCurrency $default */
$default = $userGroup->currencies()->where('group_default', true)->first();
if (null === $default) {
$default = $this->getSystemCurrency();
$native = $userGroup->currencies()->where('group_default', true)->first();
if (null === $native) {
$native = $this->getSystemCurrency();
// could be the user group has no default right now.
$userGroup->currencies()->sync([$default->id => ['group_default' => true]]);
$userGroup->currencies()->sync([$native->id => ['group_default' => true]]);
}
$cache->store($default);
$cache->store($native);
return $default;
return $native;
}
public function getSystemCurrency(): TransactionCurrency

View File

@@ -25,6 +25,8 @@ declare(strict_types=1);
namespace FireflyIII\Support\Export;
use Carbon\Carbon;
use FireflyIII\Enums\AccountTypeEnum;
use FireflyIII\Enums\TransactionTypeEnum;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Account;
@@ -50,6 +52,8 @@ use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\User;
use Illuminate\Support\Collection;
@@ -728,16 +732,15 @@ class ExportDataGenerator
private function exportTransactions(): string
{
// TODO better place for keys?
$header = ['user_id', 'group_id', 'journal_id', 'created_at', 'updated_at', 'group_title', 'type', 'amount', 'foreign_amount', 'currency_code', 'foreign_currency_code', 'description', 'date', 'source_name', 'source_iban', 'source_type', 'destination_name', 'destination_iban', 'destination_type', 'reconciled', 'category', 'budget', 'bill', 'tags', 'notes'];
$header = ['user_id', 'group_id', 'journal_id', 'created_at', 'updated_at', 'group_title', 'type', 'currency_code', 'amount', 'foreign_currency_code', 'foreign_amount', 'native_currency_code', 'native_amount', 'native_foreign_amount', 'description', 'date', 'source_name', 'source_iban', 'source_type', 'destination_name', 'destination_iban', 'destination_type', 'reconciled', 'category', 'budget', 'bill', 'tags', 'notes'];
$metaFields = config('firefly.journal_meta_fields');
$header = array_merge($header, $metaFields);
$default = Amount::getDefaultCurrency();
$collector = app(GroupCollectorInterface::class);
$collector->setUser($this->user);
$collector->setRange($this->start, $this->end)->withAccountInformation()->withCategoryInformation()->withBillInformation()
->withBudgetInformation()->withTagInformation()->withNotes()
;
$collector->setRange($this->start, $this->end)->withAccountInformation()->withCategoryInformation()->withBillInformation()->withBudgetInformation()->withTagInformation()->withNotes();
if (0 !== $this->accounts->count()) {
$collector->setAccounts($this->accounts);
}
@@ -752,9 +755,34 @@ class ExportDataGenerator
/** @var array $journal */
foreach ($journals as $journal) {
$metaData = $repository->getMetaFields($journal['transaction_journal_id'], $metaFields);
$records[] = [
$journal['user_id'], $journal['transaction_group_id'], $journal['transaction_journal_id'], $journal['created_at']->toAtomString(), $journal['updated_at']->toAtomString(), $journal['transaction_group_title'], $journal['transaction_type_type'], $journal['amount'], $journal['foreign_amount'], $journal['currency_code'], $journal['foreign_currency_code'], $journal['description'], $journal['date']->toAtomString(), $journal['source_account_name'], $journal['source_account_iban'], $journal['source_account_type'], $journal['destination_account_name'], $journal['destination_account_iban'], $journal['destination_account_type'], $journal['reconciled'], $journal['category_name'], $journal['budget_name'], $journal['bill_name'],
$metaData = $repository->getMetaFields($journal['transaction_journal_id'], $metaFields);
$amount = Steam::bcround(Steam::negative($journal['amount']), $journal['currency_decimal_places']);
$foreignAmount = null === $journal['foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['foreign_amount']), $journal['foreign_currency_decimal_places']);
$nativeAmount = null === $journal['native_amount'] ? null : Steam::bcround(Steam::negative($journal['native_amount'], $default->decimal_places));
$nativeForeignAmount = null === $journal['native_foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['native_foreign_amount'], $default->decimal_places));
if (TransactionTypeEnum::WITHDRAWAL->value !== $journal['transaction_type_type']) {
$amount = Steam::bcround(Steam::positive($journal['amount']), $journal['currency_decimal_places']);
$foreignAmount = null === $journal['foreign_amount'] ? null : Steam::bcround(Steam::positive($journal['foreign_amount']), $journal['foreign_currency_decimal_places']);
$nativeAmount = null === $journal['native_amount'] ? null : Steam::bcround(Steam::positive($journal['native_amount'], $default->decimal_places));
$nativeForeignAmount = null === $journal['native_foreign_amount'] ? null : Steam::bcround(Steam::positive($journal['native_foreign_amount'], $default->decimal_places));
}
// opening balance depends on source account type.
if (TransactionTypeEnum::OPENING_BALANCE->value === $journal['transaction_type_type'] && AccountTypeEnum::ASSET->value === $journal['source_account_type']) {
$amount = Steam::bcround(Steam::negative($journal['amount']), $journal['currency_decimal_places']);
$foreignAmount = null === $journal['foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['foreign_amount']), $journal['foreign_currency_decimal_places']);
$nativeAmount = null === $journal['native_amount'] ? null : Steam::bcround(Steam::negative($journal['native_amount'], $default->decimal_places));
$nativeForeignAmount = null === $journal['native_foreign_amount'] ? null : Steam::bcround(Steam::negative($journal['native_foreign_amount'], $default->decimal_places));
}
$records[] = [
$journal['user_id'], $journal['transaction_group_id'], $journal['transaction_journal_id'], $journal['created_at']->toAtomString(), $journal['updated_at']->toAtomString(), $journal['transaction_group_title'], $journal['transaction_type_type'],
// amounts and currencies
$journal['currency_code'], $amount, $journal['foreign_currency_code'], $foreignAmount, $default->code, $nativeAmount, $nativeForeignAmount,
// more fields
$journal['description'], $journal['date']->toAtomString(), $journal['source_account_name'], $journal['source_account_iban'], $journal['source_account_type'], $journal['destination_account_name'], $journal['destination_account_iban'], $journal['destination_account_type'], $journal['reconciled'], $journal['category_name'], $journal['budget_name'], $journal['bill_name'],
$this->mergeTags($journal['tags']),
$this->clearStringKeepNewlines($journal['notes']),

View File

@@ -0,0 +1,39 @@
<?php
/*
* NodeResult.php
* Copyright (c) 2025 https://github.com/Sobuno
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
declare(strict_types=1);
namespace FireflyIII\Support\Search\QueryParser;
/**
* Represents a result from parsing a query node
*
* Contains the parsed node and a flag indicating if this is the end of the query.
* Used to handle subquery parsing and termination.
*/
class NodeResult
{
public function __construct(
public readonly ?Node $node,
public readonly bool $isSubqueryEnd
) {}
}

View File

@@ -27,21 +27,6 @@ namespace FireflyIII\Support\Search\QueryParser;
use Illuminate\Support\Facades\Log;
/**
* Represents a result from parsing a query node
*
* Contains the parsed node and a flag indicating if this is the end of the query.
* Used to handle subquery parsing and termination.
*/
class NodeResult
{
public function __construct(
public readonly ?Node $node,
public readonly bool $isSubqueryEnd
) {}
}
/**
* Single-pass parser that processes query strings into structured nodes.
* Scans each character once (O(n)) to build field searches, quoted strings,
@@ -108,7 +93,7 @@ class QueryParser implements QueryParserInterface
case '-':
if ('' === $tokenUnderConstruction) {
// A minus sign at the beginning of a token indicates prohibition
Log::debug('Indicate prohibition');
// Log::debug('Indicate prohibition');
$prohibited = true;
}
if ('' !== $tokenUnderConstruction) {
@@ -208,6 +193,8 @@ class QueryParser implements QueryParserInterface
{
if ('' !== $fieldName) {
Log::debug(sprintf('Create FieldNode %s:%s (%s)', $fieldName, $token, var_export($prohibited, true)));
$token = ltrim($token, ':"');
$token = rtrim($token, '"');
return new FieldNode(trim($fieldName), trim($token), $prohibited);
}

View File

@@ -27,7 +27,9 @@ namespace FireflyIII\Transformers;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Facades\Steam;
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -37,14 +39,18 @@ use Symfony\Component\HttpFoundation\ParameterBag;
class AccountTransformer extends AbstractTransformer
{
protected AccountRepositoryInterface $repository;
protected bool $convertToNative;
protected TransactionCurrency $default;
/**
* AccountTransformer constructor.
*/
public function __construct()
{
$this->parameters = new ParameterBag();
$this->repository = app(AccountRepositoryInterface::class);
$this->parameters = new ParameterBag();
$this->repository = app(AccountRepositoryInterface::class);
$this->convertToNative = Amount::convertToNative();
$this->default = Amount::getDefaultCurrency();
}
/**
@@ -57,22 +63,31 @@ class AccountTransformer extends AbstractTransformer
$this->repository->setUser($account->user);
// get account type:
$fullType = $account->accountType->type;
$accountType = (string) config(sprintf('firefly.shortNamesByFullName.%s', $fullType));
$liabilityType = (string) config(sprintf('firefly.shortLiabilityNameByFullName.%s', $fullType));
$liabilityType = '' === $liabilityType ? null : strtolower($liabilityType);
$liabilityDirection = $this->repository->getMetaValue($account, 'liability_direction');
$convertToNative = Amount::convertToNative();
// get account role (will only work if the type is asset.
// get account role (will only work if the type is asset).
$default = Amount::getDefaultCurrency();
$accountRole = $this->getAccountRole($account, $accountType);
$date = $this->getDate();
$date->endOfDay();
[$currencyId, $currencyCode, $currencySymbol, $decimalPlaces] = $this->getCurrency($account);
[$currencyId, $currencyCode, $currencySymbol, $decimalPlaces] = $this->getCurrency($account, $default);
[$creditCardType, $monthlyPaymentDate] = $this->getCCInfo($account, $accountRole, $accountType);
[$openingBalance, $openingBalanceDate] = $this->getOpeningBalance($account, $accountType);
[$openingBalance, $nativeOpeningBalance, $openingBalanceDate] = $this->getOpeningBalance($account, $accountType, $convertToNative);
[$interest, $interestPeriod] = $this->getInterest($account, $accountType);
$default = $this->default;
if (!$this->convertToNative) {
// reset default currency to NULL, not interesting.
$default = null;
}
$openingBalance = app('steam')->bcround($openingBalance, $decimalPlaces);
$includeNetWorth = '0' !== $this->repository->getMetaValue($account, 'include_net_worth');
$longitude = null;
@@ -90,41 +105,56 @@ class AccountTransformer extends AbstractTransformer
if (!in_array(strtolower($accountType), ['liability', 'liabilities', 'asset'], true)) {
$order = null;
}
// balance, native balance, virtual balance, native virtual balance?
$finalBalance = Steam::finalAccountBalance($account, $date);
if ($convertToNative) {
$finalBalance['balance'] = $finalBalance[$currencyCode] ?? '0';
}
$currentBalance = app('steam')->bcround($finalBalance['balance'] ?? '0', $decimalPlaces);
$nativeCurrentBalance = $convertToNative ? app('steam')->bcround($finalBalance['native_balance'] ?? '0', $default->decimal_places) : null;
return [
'id' => (string) $account->id,
'created_at' => $account->created_at->toAtomString(),
'updated_at' => $account->updated_at->toAtomString(),
'active' => $account->active,
'order' => $order,
'name' => $account->name,
'type' => strtolower($accountType),
'account_role' => $accountRole,
'currency_id' => $currencyId,
'currency_code' => $currencyCode,
'currency_symbol' => $currencySymbol,
'currency_decimal_places' => $decimalPlaces,
'current_balance' => app('steam')->bcround(Steam::finalAccountBalance($account, $date)['balance'] ?? '0', $decimalPlaces),
'current_balance_date' => $date->toAtomString(),
'notes' => $this->repository->getNoteText($account),
'monthly_payment_date' => $monthlyPaymentDate,
'credit_card_type' => $creditCardType,
'account_number' => $this->repository->getMetaValue($account, 'account_number'),
'iban' => '' === $account->iban ? null : $account->iban,
'bic' => $this->repository->getMetaValue($account, 'BIC'),
'virtual_balance' => app('steam')->bcround($account->virtual_balance, $decimalPlaces),
'opening_balance' => $openingBalance,
'opening_balance_date' => $openingBalanceDate,
'liability_type' => $liabilityType,
'liability_direction' => $liabilityDirection,
'interest' => $interest,
'interest_period' => $interestPeriod,
'current_debt' => $this->repository->getMetaValue($account, 'current_debt'),
'include_net_worth' => $includeNetWorth,
'longitude' => $longitude,
'latitude' => $latitude,
'zoom_level' => $zoomLevel,
'links' => [
'id' => (string) $account->id,
'created_at' => $account->created_at->toAtomString(),
'updated_at' => $account->updated_at->toAtomString(),
'active' => $account->active,
'order' => $order,
'name' => $account->name,
'type' => strtolower($accountType),
'account_role' => $accountRole,
'currency_id' => $currencyId,
'currency_code' => $currencyCode,
'currency_symbol' => $currencySymbol,
'currency_decimal_places' => $decimalPlaces,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'current_balance' => $currentBalance,
'native_current_balance' => $nativeCurrentBalance,
'current_balance_date' => $date->toAtomString(),
'notes' => $this->repository->getNoteText($account),
'monthly_payment_date' => $monthlyPaymentDate,
'credit_card_type' => $creditCardType,
'account_number' => $this->repository->getMetaValue($account, 'account_number'),
'iban' => '' === $account->iban ? null : $account->iban,
'bic' => $this->repository->getMetaValue($account, 'BIC'),
'virtual_balance' => app('steam')->bcround($account->virtual_balance, $decimalPlaces),
'native_virtual_balance' => $this->convertToNative ? app('steam')->bcround($account->native_virtual_balance, $default->decimal_places) : null,
'opening_balance' => $openingBalance,
'native_opening_balance' => $nativeOpeningBalance,
'opening_balance_date' => $openingBalanceDate,
'liability_type' => $liabilityType,
'liability_direction' => $liabilityDirection,
'interest' => $interest,
'interest_period' => $interestPeriod,
'current_debt' => $this->repository->getMetaValue($account, 'current_debt'),
'include_net_worth' => $includeNetWorth,
'longitude' => $longitude,
'latitude' => $latitude,
'zoom_level' => $zoomLevel,
'links' => [
[
'rel' => 'self',
'uri' => '/accounts/'.$account->id,
@@ -156,16 +186,13 @@ class AccountTransformer extends AbstractTransformer
return $date;
}
/**
* @throws FireflyException
*/
private function getCurrency(Account $account): array
{
$currency = $this->repository->getAccountCurrency($account);
// only grab default when result is null:
if (null === $currency) {
$currency = app('amount')->getDefaultCurrencyByUserGroup($account->user->userGroup);
$currency = $this->default;
}
$currencyId = (string) $currency->id;
$currencyCode = $currency->code;
@@ -203,14 +230,15 @@ class AccountTransformer extends AbstractTransformer
/**
* TODO refactor call to get~OpeningBalanceAmount / Date because it is a lot of queries
*/
private function getOpeningBalance(Account $account, string $accountType): array
private function getOpeningBalance(Account $account, string $accountType, bool $convertToNative): array
{
$openingBalance = null;
$openingBalanceDate = null;
$openingBalance = null;
$openingBalanceDate = null;
$nativeOpeningBalance = null;
if (in_array($accountType, ['asset', 'liabilities'], true)) {
$amount = $this->repository->getOpeningBalanceAmount($account);
$openingBalance = $amount;
$openingBalanceDate = $this->repository->getOpeningBalanceDate($account);
$openingBalance = $this->repository->getOpeningBalanceAmount($account, false);
$nativeOpeningBalance = $this->repository->getOpeningBalanceAmount($account, true);
$openingBalanceDate = $this->repository->getOpeningBalanceDate($account);
}
if (null !== $openingBalanceDate) {
$object = Carbon::createFromFormat('Y-m-d H:i:s', $openingBalanceDate, config('app.timezone'));
@@ -220,7 +248,7 @@ class AccountTransformer extends AbstractTransformer
$openingBalanceDate = $object->toAtomString();
}
return [$openingBalance, $openingBalanceDate];
return [$openingBalance, $nativeOpeningBalance, $openingBalanceDate];
}
private function getInterest(Account $account, string $accountType): array

View File

@@ -25,9 +25,11 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Models\AvailableBudget;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
/**
* Class AvailableBudgetTransformer
@@ -37,6 +39,8 @@ class AvailableBudgetTransformer extends AbstractTransformer
private NoBudgetRepositoryInterface $noBudgetRepository;
private OperationsRepositoryInterface $opsRepository;
private BudgetRepositoryInterface $repository;
private TransactionCurrency $default;
private bool $convertToNative;
/**
* CurrencyTransformer constructor.
@@ -46,6 +50,8 @@ class AvailableBudgetTransformer extends AbstractTransformer
$this->repository = app(BudgetRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->noBudgetRepository = app(NoBudgetRepositoryInterface::class);
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -56,20 +62,29 @@ class AvailableBudgetTransformer extends AbstractTransformer
$this->repository->setUser($availableBudget->user);
$currency = $availableBudget->transactionCurrency;
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
$data = [
'id' => (string) $availableBudget->id,
'created_at' => $availableBudget->created_at->toAtomString(),
'updated_at' => $availableBudget->updated_at->toAtomString(),
'currency_id' => (string) $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'amount' => app('steam')->bcround($availableBudget->amount, $currency->decimal_places),
'start' => $availableBudget->start_date->toAtomString(),
'end' => $availableBudget->end_date->endOfDay()->toAtomString(),
'spent_in_budgets' => [],
'spent_no_budget' => [],
'links' => [
'id' => (string) $availableBudget->id,
'created_at' => $availableBudget->created_at->toAtomString(),
'updated_at' => $availableBudget->updated_at->toAtomString(),
'currency_id' => (string) $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'amount' => app('steam')->bcround($availableBudget->amount, $currency->decimal_places),
'native_amount' => $this->convertToNative ? app('steam')->bcround($availableBudget->native_amount, $currency->decimal_places) : null,
'start' => $availableBudget->start_date->toAtomString(),
'end' => $availableBudget->end_date->endOfDay()->toAtomString(),
'spent_in_budgets' => [],
'spent_no_budget' => [],
'links' => [
[
'rel' => 'self',
'uri' => '/available_budgets/'.$availableBudget->id,

View File

@@ -28,8 +28,10 @@ use Carbon\Carbon;
use Carbon\CarbonInterface;
use FireflyIII\Models\Bill;
use FireflyIII\Models\ObjectGroup;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Support\Models\BillDateCalculator;
use Illuminate\Support\Collection;
@@ -40,14 +42,18 @@ class BillTransformer extends AbstractTransformer
{
private BillDateCalculator $calculator;
private BillRepositoryInterface $repository;
private TransactionCurrency $default;
private bool $convertToNative;
/**
* BillTransformer constructor.
*/
public function __construct()
{
$this->repository = app(BillRepositoryInterface::class);
$this->calculator = app(BillDateCalculator::class);
$this->repository = app(BillRepositoryInterface::class);
$this->calculator = app(BillDateCalculator::class);
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -58,7 +64,7 @@ class BillTransformer extends AbstractTransformer
*/
public function transform(Bill $bill): array
{
$defaultCurrency = $this->parameters->get('defaultCurrency') ?? app('amount')->getDefaultCurrency();
$default = $this->parameters->get('defaultCurrency') ?? $this->default;
$paidData = $this->paidData($bill);
$lastPaidDate = $this->getLastPaidDate($paidData);
@@ -141,36 +147,40 @@ class BillTransformer extends AbstractTransformer
}
return [
'id' => $bill->id,
'created_at' => $bill->created_at->toAtomString(),
'updated_at' => $bill->updated_at->toAtomString(),
'currency_id' => (string) $bill->transaction_currency_id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'name' => $bill->name,
'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places),
'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places),
'native_amount_min' => app('steam')->bcround($bill->native_amount_min, $defaultCurrency->decimal_places),
'native_amount_max' => app('steam')->bcround($bill->native_amount_max, $defaultCurrency->decimal_places),
'date' => $bill->date->toAtomString(),
'end_date' => $bill->end_date?->toAtomString(),
'extension_date' => $bill->extension_date?->toAtomString(),
'repeat_freq' => $bill->repeat_freq,
'skip' => $bill->skip,
'active' => $bill->active,
'order' => $bill->order,
'notes' => $notes,
'object_group_id' => null !== $objectGroupId ? (string) $objectGroupId : null,
'object_group_order' => $objectGroupOrder,
'object_group_title' => $objectGroupTitle,
'id' => $bill->id,
'created_at' => $bill->created_at->toAtomString(),
'updated_at' => $bill->updated_at->toAtomString(),
'currency_id' => (string) $bill->transaction_currency_id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'name' => $bill->name,
'amount_min' => app('steam')->bcround($bill->amount_min, $currency->decimal_places),
'amount_max' => app('steam')->bcround($bill->amount_max, $currency->decimal_places),
'native_amount_min' => $this->convertToNative ? app('steam')->bcround($bill->native_amount_min, $default->decimal_places) : null,
'native_amount_max' => $this->convertToNative ? app('steam')->bcround($bill->native_amount_max, $default->decimal_places) : null,
'date' => $bill->date->toAtomString(),
'end_date' => $bill->end_date?->toAtomString(),
'extension_date' => $bill->extension_date?->toAtomString(),
'repeat_freq' => $bill->repeat_freq,
'skip' => $bill->skip,
'active' => $bill->active,
'order' => $bill->order,
'notes' => $notes,
'object_group_id' => null !== $objectGroupId ? (string) $objectGroupId : null,
'object_group_order' => $objectGroupOrder,
'object_group_title' => $objectGroupTitle,
// these fields need work:
'next_expected_match' => $nem,
'next_expected_match_diff' => $nemDiff,
'pay_dates' => $payDatesFormatted,
'paid_dates' => $paidDataFormatted,
'links' => [
'next_expected_match' => $nem,
'next_expected_match_diff' => $nemDiff,
'pay_dates' => $payDatesFormatted,
'paid_dates' => $paidDataFormatted,
'links' => [
[
'rel' => 'self',
'uri' => '/bills/'.$bill->id,

View File

@@ -25,8 +25,10 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepository;
use FireflyIII\Support\Facades\Amount;
use Illuminate\Support\Collection;
use League\Fractal\Resource\Item;
@@ -40,6 +42,15 @@ class BudgetLimitTransformer extends AbstractTransformer
'budget',
];
protected TransactionCurrency $default;
protected bool $convertToNative;
public function __construct()
{
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
* Include Budget
*
@@ -83,24 +94,34 @@ class BudgetLimitTransformer extends AbstractTransformer
$currencyDecimalPlaces = $currency->decimal_places;
}
$amount = app('steam')->bcround($amount, $currencyDecimalPlaces);
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
return [
'id' => (string) $budgetLimit->id,
'created_at' => $budgetLimit->created_at->toAtomString(),
'updated_at' => $budgetLimit->updated_at->toAtomString(),
'start' => $budgetLimit->start_date->toAtomString(),
'end' => $budgetLimit->end_date->endOfDay()->toAtomString(),
'budget_id' => (string) $budgetLimit->budget_id,
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
'currency_name' => $currencyName,
'currency_decimal_places' => $currencyDecimalPlaces,
'currency_symbol' => $currencySymbol,
'amount' => $amount,
'period' => $budgetLimit->period,
'spent' => $expenses[$currencyId]['sum'] ?? '0',
'notes' => '' === $notes ? null : $notes,
'links' => [
'id' => (string) $budgetLimit->id,
'created_at' => $budgetLimit->created_at->toAtomString(),
'updated_at' => $budgetLimit->updated_at->toAtomString(),
'start' => $budgetLimit->start_date->toAtomString(),
'end' => $budgetLimit->end_date->endOfDay()->toAtomString(),
'budget_id' => (string) $budgetLimit->budget_id,
'currency_id' => (string) $currencyId,
'currency_code' => $currencyCode,
'currency_name' => $currencyName,
'currency_decimal_places' => $currencyDecimalPlaces,
'currency_symbol' => $currencySymbol,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'amount' => $amount,
'native_amount' => $this->convertToNative ? app('steam')->bcround($budgetLimit->native_amount, $default->decimal_places) : null,
'period' => $budgetLimit->period,
'spent' => $expenses[$currencyId]['sum'] ?? '0', // will be in native if convertToNative.
'notes' => '' === $notes ? null : $notes,
'links' => [
[
'rel' => 'self',
'uri' => '/budgets/limits/'.$budgetLimit->id,

View File

@@ -26,8 +26,10 @@ namespace FireflyIII\Transformers;
use FireflyIII\Enums\AutoBudgetType;
use FireflyIII\Models\Budget;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use Illuminate\Support\Collection;
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -38,15 +40,19 @@ class BudgetTransformer extends AbstractTransformer
{
private OperationsRepositoryInterface $opsRepository;
private BudgetRepositoryInterface $repository;
private bool $convertToNative;
private TransactionCurrency $default;
/**
* BudgetTransformer constructor.
*/
public function __construct()
{
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(BudgetRepositoryInterface::class);
$this->parameters = new ParameterBag();
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(BudgetRepositoryInterface::class);
$this->parameters = new ParameterBag();
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -55,50 +61,68 @@ class BudgetTransformer extends AbstractTransformer
public function transform(Budget $budget): array
{
$this->opsRepository->setUser($budget->user);
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
$autoBudget = $this->repository->getAutoBudget($budget);
$spent = [];
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
$autoBudget = $this->repository->getAutoBudget($budget);
$spent = [];
if (null !== $start && null !== $end) {
$spent = $this->beautify($this->opsRepository->sumExpenses($start, $end, null, new Collection([$budget])));
}
$abCurrencyId = null;
$abCurrencyCode = null;
$abType = null;
$abAmount = null;
$abPeriod = null;
$notes = $this->repository->getNoteText($budget);
// info for auto budget.
$abType = null;
$abAmount = null;
$abNative = null;
$abPeriod = null;
$notes = $this->repository->getNoteText($budget);
$types = [
$types = [
AutoBudgetType::AUTO_BUDGET_RESET->value => 'reset',
AutoBudgetType::AUTO_BUDGET_ROLLOVER->value => 'rollover',
AutoBudgetType::AUTO_BUDGET_ADJUSTED->value => 'adjusted',
];
$currency = $autoBudget?->transactionCurrency;
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
if (null === $autoBudget) {
$currency = $default;
}
if (null !== $autoBudget) {
$abCurrencyId = (string) $autoBudget->transactionCurrency->id;
$abCurrencyCode = $autoBudget->transactionCurrency->code;
$abType = $types[$autoBudget->auto_budget_type];
$abAmount = app('steam')->bcround($autoBudget->amount, $autoBudget->transactionCurrency->decimal_places);
$abPeriod = $autoBudget->period;
$abType = $types[$autoBudget->auto_budget_type];
$abAmount = app('steam')->bcround($autoBudget->amount, $currency->decimal_places);
$abNative = $this->convertToNative ? app('steam')->bcround($autoBudget->native_amount, $default->decimal_places) : null;
$abPeriod = $autoBudget->period;
}
return [
'id' => (string) $budget->id,
'created_at' => $budget->created_at->toAtomString(),
'updated_at' => $budget->updated_at->toAtomString(),
'active' => $budget->active,
'name' => $budget->name,
'order' => $budget->order,
'notes' => $notes,
'auto_budget_type' => $abType,
'auto_budget_period' => $abPeriod,
'auto_budget_currency_id' => $abCurrencyId,
'auto_budget_currency_code' => $abCurrencyCode,
'auto_budget_amount' => $abAmount,
'spent' => $spent,
'links' => [
'id' => (string) $budget->id,
'created_at' => $budget->created_at->toAtomString(),
'updated_at' => $budget->updated_at->toAtomString(),
'active' => $budget->active,
'name' => $budget->name,
'order' => $budget->order,
'notes' => $notes,
'auto_budget_type' => $abType,
'auto_budget_period' => $abPeriod,
'currency_id' => null === $autoBudget ? null : (string) $autoBudget->transactionCurrency->id,
'currency_code' => $autoBudget?->transactionCurrency->code,
'currency_name' => $autoBudget?->transactionCurrency->name,
'currency_decimal_places' => $autoBudget?->transactionCurrency->decimal_places,
'currency_symbol' => $autoBudget?->transactionCurrency->symbol,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
// amount and native amount if present.
'auto_budget_amount' => $abAmount,
'native_auto_budget_amount' => $abNative,
'spent' => $spent, // always in native.
'links' => [
[
'rel' => 'self',
'uri' => '/budgets/'.$budget->id,

View File

@@ -25,8 +25,10 @@ declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Models\Category;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use FireflyIII\Repositories\Category\OperationsRepositoryInterface;
use FireflyIII\Support\Facades\Amount;
use Illuminate\Support\Collection;
/**
@@ -36,14 +38,18 @@ class CategoryTransformer extends AbstractTransformer
{
private OperationsRepositoryInterface $opsRepository;
private CategoryRepositoryInterface $repository;
private TransactionCurrency $default;
private bool $convertToNative;
/**
* CategoryTransformer constructor.
*/
public function __construct()
{
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(CategoryRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->repository = app(CategoryRepositoryInterface::class);
$this->default = Amount::getDefaultCurrency();
$this->convertToNative = Amount::convertToNative();
}
/**
@@ -54,25 +60,33 @@ class CategoryTransformer extends AbstractTransformer
$this->opsRepository->setUser($category->user);
$this->repository->setUser($category->user);
$spent = [];
$earned = [];
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
$spent = [];
$earned = [];
$start = $this->parameters->get('start');
$end = $this->parameters->get('end');
if (null !== $start && null !== $end) {
$earned = $this->beautify($this->opsRepository->sumIncome($start, $end, null, new Collection([$category])));
$spent = $this->beautify($this->opsRepository->sumExpenses($start, $end, null, new Collection([$category])));
}
$notes = $this->repository->getNoteText($category);
$default = $this->default;
if (!$this->convertToNative) {
$default = null;
}
$notes = $this->repository->getNoteText($category);
return [
'id' => $category->id,
'created_at' => $category->created_at->toAtomString(),
'updated_at' => $category->updated_at->toAtomString(),
'name' => $category->name,
'notes' => $notes,
'spent' => $spent,
'earned' => $earned,
'links' => [
'id' => $category->id,
'created_at' => $category->created_at->toAtomString(),
'updated_at' => $category->updated_at->toAtomString(),
'name' => $category->name,
'notes' => $notes,
'native_currency_id' => null === $default ? null : (string) $default->id,
'native_currency_code' => $default?->code,
'native_currency_symbol' => $default?->symbol,
'native_currency_decimal_places' => $default?->decimal_places,
'spent' => $spent,
'earned' => $earned,
'links' => [
[
'rel' => 'self',
'uri' => '/categories/'.$category->id,

View File

@@ -40,7 +40,7 @@ class CurrencyTransformer extends AbstractTransformer
'id' => $currency->id,
'created_at' => $currency->created_at->toAtomString(),
'updated_at' => $currency->updated_at->toAtomString(),
'default' => $currency->userGroupDefault,
'native' => $currency->userGroupNative,
'enabled' => $currency->userGroupEnabled,
'name' => $currency->name,
'code' => $currency->code,

View File

@@ -0,0 +1,127 @@
<?php
/*
* UserGroupTransformer.php
* Copyright (c) 2023 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Transformers;
use FireflyIII\Enums\UserRoleEnum;
use FireflyIII\Models\GroupMembership;
use FireflyIII\Models\UserGroup;
use FireflyIII\Support\Facades\Amount;
use FireflyIII\Transformers\V2\AbstractTransformer;
use FireflyIII\User;
use Illuminate\Support\Collection;
/**
* Class UserGroupTransformer
*/
class UserGroupTransformer extends AbstractTransformer
{
private array $inUse;
private array $memberships;
private array $membershipsVisible;
public function __construct()
{
$this->memberships = [];
$this->membershipsVisible = [];
$this->inUse = [];
}
public function collectMetaData(Collection $objects): Collection
{
if (auth()->check()) {
// collect memberships so they can be listed in the group.
/** @var User $user */
$user = auth()->user();
/** @var UserGroup $userGroup */
foreach ($objects as $userGroup) {
$userGroupId = $userGroup->id;
$this->inUse[$userGroupId] = $user->user_group_id === $userGroupId;
$access = $user->hasRoleInGroupOrOwner($userGroup, UserRoleEnum::VIEW_MEMBERSHIPS) || $user->hasRole('owner');
$this->membershipsVisible[$userGroupId] = $access;
if ($access) {
$groupMemberships = $userGroup->groupMemberships()->get();
/** @var GroupMembership $groupMembership */
foreach ($groupMemberships as $groupMembership) {
$this->memberships[$userGroupId][] = [
'user_id' => (string) $groupMembership->user_id,
'user_email' => $groupMembership->user->email,
'role' => $groupMembership->userRole->title,
'you' => $groupMembership->user_id === $user->id,
];
}
}
}
$this->mergeMemberships();
}
return $objects;
}
private function mergeMemberships(): void
{
$new = [];
foreach ($this->memberships as $groupId => $members) {
$new[$groupId] ??= [];
foreach ($members as $member) {
$mail = $member['user_email'];
$new[$groupId][$mail] ??= [
'user_id' => $member['user_id'],
'user_email' => $member['user_email'],
'you' => $member['you'],
'roles' => [],
];
$new[$groupId][$mail]['roles'][] = $member['role'];
}
}
$this->memberships = $new;
}
/**
* Transform the user group.
*/
public function transform(UserGroup $userGroup): array
{
$currency = Amount::getDefaultCurrencyByUserGroup($userGroup);
return [
'id' => $userGroup->id,
'created_at' => $userGroup->created_at->toAtomString(),
'updated_at' => $userGroup->updated_at->toAtomString(),
'in_use' => $this->inUse[$userGroup->id] ?? false,
'title' => $userGroup->title,
'can_see_members' => $this->membershipsVisible[$userGroup->id] ?? false,
'members' => array_values($this->memberships[$userGroup->id] ?? []),
'native_currency_id' => (string) $currency->id,
'native_currency_name' => $currency->name,
'native_currency_code' => $currency->code,
'native_currency_symbol' => $currency->symbol,
'native_currency_decimal_places' => $currency->decimal_places,
];
// if the user has a specific role in this group, then collect the memberships.
}
}

View File

@@ -46,7 +46,7 @@ class CurrencyTransformer extends AbstractTransformer
'id' => $currency->id,
'created_at' => $currency->created_at->toAtomString(),
'updated_at' => $currency->updated_at->toAtomString(),
'default' => $currency->userGroupDefault,
'native' => $currency->userGroupNative,
'enabled' => $currency->userGroupEnabled,
'name' => $currency->name,
'code' => $currency->code,

View File

@@ -820,7 +820,7 @@ class FireflyValidator extends Validator
}
$query->where('piggy_banks.name', $value);
return 0 === $query->count('piggy_banks.*');
return 0 === $query->count();
}
/**

324
composer.lock generated
View File

@@ -1874,16 +1874,16 @@
},
{
"name": "laravel/framework",
"version": "v11.37.0",
"version": "v11.38.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "6cb103d2024b087eae207654b3f4b26646119ba5"
"reference": "9d290aa90fcad44048bedca5219d2b872e98772a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/6cb103d2024b087eae207654b3f4b26646119ba5",
"reference": "6cb103d2024b087eae207654b3f4b26646119ba5",
"url": "https://api.github.com/repos/laravel/framework/zipball/9d290aa90fcad44048bedca5219d2b872e98772a",
"reference": "9d290aa90fcad44048bedca5219d2b872e98772a",
"shasum": ""
},
"require": {
@@ -2084,20 +2084,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2025-01-02T20:10:21+00:00"
"time": "2025-01-15T00:06:46+00:00"
},
{
"name": "laravel/passport",
"version": "v12.3.1",
"version": "v12.4.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/passport.git",
"reference": "0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c"
"reference": "b06a413cb18d07123ced88ba8caa432d40e3bb8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/passport/zipball/0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c",
"reference": "0d95ca9cc9c80bdf64d04dcf04542720e3d5d55c",
"url": "https://api.github.com/repos/laravel/passport/zipball/b06a413cb18d07123ced88ba8caa432d40e3bb8c",
"reference": "b06a413cb18d07123ced88ba8caa432d40e3bb8c",
"shasum": ""
},
"require": {
@@ -2160,20 +2160,20 @@
"issues": "https://github.com/laravel/passport/issues",
"source": "https://github.com/laravel/passport"
},
"time": "2024-11-11T20:15:28+00:00"
"time": "2025-01-13T17:40:20+00:00"
},
{
"name": "laravel/prompts",
"version": "v0.3.2",
"version": "v0.3.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
"reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f"
"reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f",
"reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f",
"url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea",
"reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea",
"shasum": ""
},
"require": {
@@ -2217,9 +2217,9 @@
"description": "Add beautiful and user-friendly forms to your command-line applications.",
"support": {
"issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.3.2"
"source": "https://github.com/laravel/prompts/tree/v0.3.3"
},
"time": "2024-11-12T14:59:47+00:00"
"time": "2024-12-30T15:53:31+00:00"
},
{
"name": "laravel/sanctum",
@@ -2802,16 +2802,16 @@
},
{
"name": "league/csv",
"version": "9.20.1",
"version": "9.21.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
"reference": "491d1e79e973a7370c7571dc0fe4a7241f4936ee"
"reference": "72196d11ebba22d868954cb39c0c7346207430cc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/491d1e79e973a7370c7571dc0fe4a7241f4936ee",
"reference": "491d1e79e973a7370c7571dc0fe4a7241f4936ee",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/72196d11ebba22d868954cb39c0c7346207430cc",
"reference": "72196d11ebba22d868954cb39c0c7346207430cc",
"shasum": ""
},
"require": {
@@ -2885,7 +2885,7 @@
"type": "github"
}
],
"time": "2024-12-18T10:11:15+00:00"
"time": "2025-01-08T19:27:58+00:00"
},
{
"name": "league/event",
@@ -3705,12 +3705,12 @@
"version": "3.8.4",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"url": "https://github.com/CarbonPHP/carbon.git",
"reference": "129700ed449b1f02d70272d2ac802357c8c30c58"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/129700ed449b1f02d70272d2ac802357c8c30c58",
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/129700ed449b1f02d70272d2ac802357c8c30c58",
"reference": "129700ed449b1f02d70272d2ac802357c8c30c58",
"shasum": ""
},
@@ -10192,29 +10192,27 @@
},
{
"name": "barryvdh/laravel-ide-helper",
"version": "v3.4.0",
"version": "v3.5.4",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
"reference": "2a41415f01bf3c409d200f6cdd940c1e7d86cfd3"
"reference": "980a87e250fc2a7558bc46e07f61c7594500ea53"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/2a41415f01bf3c409d200f6cdd940c1e7d86cfd3",
"reference": "2a41415f01bf3c409d200f6cdd940c1e7d86cfd3",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/980a87e250fc2a7558bc46e07f61c7594500ea53",
"reference": "980a87e250fc2a7558bc46e07f61c7594500ea53",
"shasum": ""
},
"require": {
"barryvdh/reflection-docblock": "^2.2",
"barryvdh/reflection-docblock": "^2.3",
"composer/class-map-generator": "^1.0",
"ext-json": "*",
"illuminate/console": "^11.15",
"illuminate/database": "^11.15",
"illuminate/filesystem": "^11.15",
"illuminate/support": "^11.15",
"nikic/php-parser": "^4.18 || ^5",
"php": "^8.2",
"phpdocumentor/type-resolver": "^1.1.0"
"php": "^8.2"
},
"require-dev": {
"ext-pdo_sqlite": "*",
@@ -10225,7 +10223,8 @@
"orchestra/testbench": "^9.2",
"phpunit/phpunit": "^10.5",
"spatie/phpunit-snapshot-assertions": "^4 || ^5",
"vimeo/psalm": "^5.4"
"vimeo/psalm": "^5.4",
"vlucas/phpdotenv": "^5"
},
"suggest": {
"illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10|^11)."
@@ -10238,7 +10237,7 @@
]
},
"branch-alias": {
"dev-master": "3.4-dev"
"dev-master": "3.5-dev"
}
},
"autoload": {
@@ -10260,6 +10259,7 @@
"keywords": [
"autocomplete",
"codeintel",
"dev",
"helper",
"ide",
"laravel",
@@ -10270,7 +10270,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-ide-helper/issues",
"source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.4.0"
"source": "https://github.com/barryvdh/laravel-ide-helper/tree/v3.5.4"
},
"funding": [
{
@@ -10282,20 +10282,20 @@
"type": "github"
}
],
"time": "2024-12-29T12:10:58+00:00"
"time": "2025-01-14T09:07:00+00:00"
},
{
"name": "barryvdh/reflection-docblock",
"version": "v2.3.0",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
"reference": "818be8de6af4d16ef3ad51ea9234b3d37026ee5f"
"reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/818be8de6af4d16ef3ad51ea9234b3d37026ee5f",
"reference": "818be8de6af4d16ef3ad51ea9234b3d37026ee5f",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/b6ff9f93603561f50e53b64310495d20b8dff5d8",
"reference": "b6ff9f93603561f50e53b64310495d20b8dff5d8",
"shasum": ""
},
"require": {
@@ -10332,9 +10332,9 @@
}
],
"support": {
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.0"
"source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.3.1"
},
"time": "2024-12-30T10:35:04+00:00"
"time": "2025-01-18T19:26:32+00:00"
},
{
"name": "cloudcreativity/json-api-testing",
@@ -10546,51 +10546,6 @@
],
"time": "2024-11-12T16:29:46+00:00"
},
{
"name": "doctrine/deprecations",
"version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9",
"reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9 || ^12",
"phpstan/phpstan": "1.4.10 || 2.0.3",
"phpstan/phpstan-phpunit": "^1.0 || ^2",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psr/log": "^1 || ^2 || ^3"
},
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Deprecations\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
"homepage": "https://www.doctrine-project.org/",
"support": {
"issues": "https://github.com/doctrine/deprecations/issues",
"source": "https://github.com/doctrine/deprecations/tree/1.1.4"
},
"time": "2024-12-07T21:18:45+00:00"
},
{
"name": "fakerphp/faker",
"version": "v1.24.1",
@@ -11250,117 +11205,6 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
{
"name": "phpdocumentor/reflection-common",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-2.x": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jaap van Otterdijk",
"email": "opensource@ijaap.nl"
}
],
"description": "Common reflection classes used by phpdocumentor to reflect the code structure",
"homepage": "http://www.phpdoc.org",
"keywords": [
"FQSEN",
"phpDocumentor",
"phpdoc",
"reflection",
"static analysis"
],
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
"source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
},
"time": "2020-06-27T09:03:43+00:00"
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.10.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
"reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
"php": "^7.3 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
"phpstan/phpdoc-parser": "^1.18|^2.0"
},
"require-dev": {
"ext-tokenizer": "*",
"phpbench/phpbench": "^1.2",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.1",
"phpunit/phpunit": "^9.5",
"rector/rector": "^0.13.9",
"vimeo/psalm": "^4.25"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-1.x": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
}
],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
},
"time": "2024-11-09T15:12:26+00:00"
},
{
"name": "phpmyadmin/sql-parser",
"version": "5.10.2",
@@ -11496,65 +11340,18 @@
},
"time": "2024-09-04T20:21:43+00:00"
},
{
"name": "phpstan/phpdoc-parser",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "c00d78fb6b29658347f9d37ebe104bffadf36299"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299",
"reference": "c00d78fb6b29658347f9d37ebe104bffadf36299",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"require-dev": {
"doctrine/annotations": "^2.0",
"nikic/php-parser": "^5.3.0",
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpstan/phpstan-strict-rules": "^2.0",
"phpunit/phpunit": "^9.6",
"symfony/process": "^5.2"
},
"type": "library",
"autoload": {
"psr-4": {
"PHPStan\\PhpDocParser\\": [
"src/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0"
},
"time": "2024-10-13T11:29:49+00:00"
},
{
"name": "phpstan/phpstan",
"version": "2.1.0",
"version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "2392d360fdf54ea253aa6c68cad1d4ba2e54e927"
"reference": "cd6e973e04b4c2b94c86e8612b5a65f0da0e08e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/2392d360fdf54ea253aa6c68cad1d4ba2e54e927",
"reference": "2392d360fdf54ea253aa6c68cad1d4ba2e54e927",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/cd6e973e04b4c2b94c86e8612b5a65f0da0e08e7",
"reference": "cd6e973e04b4c2b94c86e8612b5a65f0da0e08e7",
"shasum": ""
},
"require": {
@@ -11599,7 +11396,7 @@
"type": "github"
}
],
"time": "2024-12-31T07:30:03+00:00"
"time": "2025-01-05T16:43:48+00:00"
},
{
"name": "phpstan/phpstan-deprecation-rules",
@@ -12021,16 +11818,16 @@
},
{
"name": "phpunit/phpunit",
"version": "11.5.2",
"version": "11.5.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "153d0531b9f7e883c5053160cad6dd5ac28140b3"
"reference": "30e319e578a7b5da3543073e30002bf82042f701"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/153d0531b9f7e883c5053160cad6dd5ac28140b3",
"reference": "153d0531b9f7e883c5053160cad6dd5ac28140b3",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/30e319e578a7b5da3543073e30002bf82042f701",
"reference": "30e319e578a7b5da3543073e30002bf82042f701",
"shasum": ""
},
"require": {
@@ -12051,7 +11848,7 @@
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
"sebastian/code-unit": "^3.0.2",
"sebastian/comparator": "^6.2.1",
"sebastian/comparator": "^6.3.0",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.0",
"sebastian/exporter": "^6.3.0",
@@ -12102,7 +11899,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.2"
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.3"
},
"funding": [
{
@@ -12118,7 +11915,7 @@
"type": "tidelift"
}
],
"time": "2024-12-21T05:51:08+00:00"
"time": "2025-01-13T09:36:00+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -12292,16 +12089,16 @@
},
{
"name": "sebastian/comparator",
"version": "6.2.1",
"version": "6.3.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "43d129d6a0f81c78bee378b46688293eb7ea3739"
"reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/43d129d6a0f81c78bee378b46688293eb7ea3739",
"reference": "43d129d6a0f81c78bee378b46688293eb7ea3739",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115",
"reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115",
"shasum": ""
},
"require": {
@@ -12314,6 +12111,9 @@
"require-dev": {
"phpunit/phpunit": "^11.4"
},
"suggest": {
"ext-bcmath": "For comparing BcMath\\Number objects"
},
"type": "library",
"extra": {
"branch-alias": {
@@ -12357,7 +12157,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
"source": "https://github.com/sebastianbergmann/comparator/tree/6.2.1"
"source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0"
},
"funding": [
{
@@ -12365,7 +12165,7 @@
"type": "github"
}
],
"time": "2024-10-31T05:30:08+00:00"
"time": "2025-01-06T10:28:19+00:00"
},
{
"name": "sebastian/complexity",

View File

@@ -81,7 +81,7 @@ return [
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
// see cer.php for exchange rates feature flag.
],
'version' => 'develop/2025-01-05',
'version' => 'develop/2025-01-19',
'api_version' => '2.1.0', // field is no longer used.
'db_version' => 25,

View File

@@ -137,6 +137,12 @@ return [
],
'v1' => [
'firefly' => [
'administrations_page_title',
'administrations_index_menu',
'temp_administrations_introduction',
'administration_currency_form_help',
'administrations_page_edit_sub_title_js',
'table',
'welcome_back',
'flash_error',
'flash_warning',
@@ -146,6 +152,7 @@ return [
'select_source_account',
'split_transaction_title',
'errors_submission',
'is_reconciled',
'split',
'single_split',
'transaction_stored_link',
@@ -284,6 +291,7 @@ return [
'url',
'active',
'interest_date',
'administration_currency',
'title',
'date',
'book_date',
@@ -301,7 +309,9 @@ return [
'rate',
],
'list' => [
'title',
'active',
'native_currency',
'trigger',
'response',
'delivery',

374
package-lock.json generated
View File

@@ -79,9 +79,9 @@
}
},
"node_modules/@babel/compat-data": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz",
"integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
"integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -130,14 +130,14 @@
}
},
"node_modules/@babel/generator": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz",
"integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
"integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.26.3",
"@babel/types": "^7.26.3",
"@babel/parser": "^7.26.5",
"@babel/types": "^7.26.5",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@@ -160,13 +160,13 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
"integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
"integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.25.9",
"@babel/compat-data": "^7.26.5",
"@babel/helper-validator-option": "^7.25.9",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
@@ -323,9 +323,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
"integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
"integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -351,15 +351,15 @@
}
},
"node_modules/@babel/helper-replace-supers": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz",
"integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
"integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/traverse": "^7.25.9"
"@babel/traverse": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -442,13 +442,13 @@
}
},
"node_modules/@babel/parser": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz",
"integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz",
"integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.26.3"
"@babel/types": "^7.26.5"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -703,13 +703,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz",
"integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
"integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
"@babel/helper-plugin-utils": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1123,13 +1123,13 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
"version": "7.25.9",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz",
"integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==",
"version": "7.26.6",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
"integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
"@babel/helper-plugin-utils": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1655,17 +1655,17 @@
}
},
"node_modules/@babel/traverse": {
"version": "7.26.4",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz",
"integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz",
"integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.26.2",
"@babel/generator": "^7.26.3",
"@babel/parser": "^7.26.3",
"@babel/generator": "^7.26.5",
"@babel/parser": "^7.26.5",
"@babel/template": "^7.25.9",
"@babel/types": "^7.26.3",
"@babel/types": "^7.26.5",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1674,9 +1674,9 @@
}
},
"node_modules/@babel/types": {
"version": "7.26.3",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz",
"integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==",
"version": "7.26.5",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz",
"integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2591,9 +2591,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz",
"integrity": "sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz",
"integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==",
"cpu": [
"arm"
],
@@ -2605,9 +2605,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz",
"integrity": "sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz",
"integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==",
"cpu": [
"arm64"
],
@@ -2619,9 +2619,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz",
"integrity": "sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz",
"integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==",
"cpu": [
"arm64"
],
@@ -2633,9 +2633,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz",
"integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz",
"integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==",
"cpu": [
"x64"
],
@@ -2647,9 +2647,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz",
"integrity": "sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz",
"integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==",
"cpu": [
"arm64"
],
@@ -2661,9 +2661,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz",
"integrity": "sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz",
"integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==",
"cpu": [
"x64"
],
@@ -2675,9 +2675,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz",
"integrity": "sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz",
"integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==",
"cpu": [
"arm"
],
@@ -2689,9 +2689,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz",
"integrity": "sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz",
"integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==",
"cpu": [
"arm"
],
@@ -2703,9 +2703,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz",
"integrity": "sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz",
"integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==",
"cpu": [
"arm64"
],
@@ -2717,9 +2717,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz",
"integrity": "sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz",
"integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==",
"cpu": [
"arm64"
],
@@ -2731,9 +2731,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz",
"integrity": "sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz",
"integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==",
"cpu": [
"loong64"
],
@@ -2745,9 +2745,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz",
"integrity": "sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz",
"integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==",
"cpu": [
"ppc64"
],
@@ -2759,9 +2759,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz",
"integrity": "sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz",
"integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==",
"cpu": [
"riscv64"
],
@@ -2773,9 +2773,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz",
"integrity": "sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz",
"integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==",
"cpu": [
"s390x"
],
@@ -2787,9 +2787,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz",
"integrity": "sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz",
"integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==",
"cpu": [
"x64"
],
@@ -2801,9 +2801,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz",
"integrity": "sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz",
"integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==",
"cpu": [
"x64"
],
@@ -2815,9 +2815,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz",
"integrity": "sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz",
"integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==",
"cpu": [
"arm64"
],
@@ -2829,9 +2829,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz",
"integrity": "sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz",
"integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==",
"cpu": [
"ia32"
],
@@ -2843,9 +2843,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz",
"integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz",
"integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==",
"cpu": [
"x64"
],
@@ -3007,9 +3007,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.3.tgz",
"integrity": "sha512-JEhMNwUJt7bw728CydvYzntD0XJeTmDnvwLlbfbAhE7Tbslm/ax6bdIiUwTgeVlZTsJQPwZwKpAkyDtIjsvx3g==",
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.5.tgz",
"integrity": "sha512-GLZPrd9ckqEBFMcVM/qRFAP0Hg3qiVEojgEFsx/N/zKXsBzbGF6z5FBDpZ0+Xhp1xr+qRZYjfGr1cWHB9oFHSA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3061,9 +3061,9 @@
}
},
"node_modules/@types/imagemin": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-9.0.0.tgz",
"integrity": "sha512-4IaT+BdPUAFf/AAy3XlFAbqGk4RawhdidxWO5XTe+PJAYAr4d7m2FHiqyEPXbDpwS+IaLIJq5AIjLE9HcwMGBg==",
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-9.0.1.tgz",
"integrity": "sha512-xMWpvrUhtYxl6EeW+UhVH3rwUKhCRx21XddcoWByjDAasXZT5pQaCn0YVnXoTijX5hlTrGqV4TGQL/Htpp00+w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3133,9 +3133,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.10.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz",
"integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
"version": "22.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.7.tgz",
"integrity": "sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3160,9 +3160,9 @@
"license": "MIT"
},
"node_modules/@types/qs": {
"version": "6.9.17",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz",
"integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==",
"version": "6.9.18",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz",
"integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==",
"dev": true,
"license": "MIT"
},
@@ -4158,9 +4158,9 @@
"license": "MIT"
},
"node_modules/bootstrap5-autocomplete": {
"version": "1.1.34",
"resolved": "https://registry.npmjs.org/bootstrap5-autocomplete/-/bootstrap5-autocomplete-1.1.34.tgz",
"integrity": "sha512-Z7+ig9sL5e8PiApQ2JA7BizevVLcsdpTpJboEwcFELg1IBDEU+LdbH6YnYFA2dgRxFkclCttCR8UPC9CbBpZiQ==",
"version": "1.1.35",
"resolved": "https://registry.npmjs.org/bootstrap5-autocomplete/-/bootstrap5-autocomplete-1.1.35.tgz",
"integrity": "sha512-vZAOef3lGrpGGnnIKTJlqiqv6wsx0Wr31/mc010mJmHF1eXJd28jzfGn7ol8eOI/7FiDcm3wd/1VTWku40vLbQ==",
"license": "MIT"
},
"node_modules/bootstrap5-tags": {
@@ -4288,9 +4288,9 @@
}
},
"node_modules/browserslist": {
"version": "4.24.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz",
"integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==",
"version": "4.24.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
"integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
"dev": true,
"funding": [
{
@@ -4448,9 +4448,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001690",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz",
"integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==",
"version": "1.0.30001695",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz",
"integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==",
"dev": true,
"funding": [
{
@@ -4892,13 +4892,13 @@
"license": "MIT"
},
"node_modules/core-js-compat": {
"version": "3.39.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz",
"integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==",
"version": "3.40.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz",
"integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.24.2"
"browserslist": "^4.24.3"
},
"funding": {
"type": "opencollective",
@@ -5663,9 +5663,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
"version": "1.5.76",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz",
"integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==",
"version": "1.5.83",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz",
"integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==",
"dev": true,
"license": "ISC"
},
@@ -5797,9 +5797,9 @@
"license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
"integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6081,9 +6081,9 @@
"license": "MIT"
},
"node_modules/fast-glob": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6091,7 +6091,7 @@
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
"micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
@@ -6105,10 +6105,20 @@
"license": "MIT"
},
"node_modules/fast-uri": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz",
"integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==",
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz",
"integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fastify"
},
{
"type": "opencollective",
"url": "https://opencollective.com/fastify"
}
],
"license": "BSD-3-Clause"
},
"node_modules/fastest-levenshtein": {
@@ -6900,9 +6910,9 @@
}
},
"node_modules/http-parser-js": {
"version": "0.5.8",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
"integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
"version": "0.5.9",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz",
"integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==",
"dev": true,
"license": "MIT"
},
@@ -6964,9 +6974,9 @@
}
},
"node_modules/i18next": {
"version": "24.2.0",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.0.tgz",
"integrity": "sha512-ArJJTS1lV6lgKH7yEf4EpgNZ7+THl7bsGxxougPYiXRTJ/Fe1j08/TBpV9QsXCIYVfdE/HWG/xLezJ5DOlfBOA==",
"version": "24.2.1",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.1.tgz",
"integrity": "sha512-Q2wC1TjWcSikn1VAJg13UGIjc+okpFxQTxjVAymOnSA3RpttBQNMPf2ovcgoFVsV4QNxTfNZMAxorXZXsk4fBA==",
"funding": [
{
"type": "individual",
@@ -8844,9 +8854,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.49",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
"integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"version": "8.5.1",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
"integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
"dev": true,
"funding": [
{
@@ -8864,7 +8874,7 @@
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
"nanoid": "^3.3.8",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -9591,13 +9601,13 @@
"license": "MIT"
},
"node_modules/qs": {
"version": "6.13.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz",
"integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==",
"version": "6.14.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.6"
"side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
@@ -9977,9 +9987,9 @@
}
},
"node_modules/rollup": {
"version": "4.29.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.29.1.tgz",
"integrity": "sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==",
"version": "4.30.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz",
"integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9993,25 +10003,25 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.29.1",
"@rollup/rollup-android-arm64": "4.29.1",
"@rollup/rollup-darwin-arm64": "4.29.1",
"@rollup/rollup-darwin-x64": "4.29.1",
"@rollup/rollup-freebsd-arm64": "4.29.1",
"@rollup/rollup-freebsd-x64": "4.29.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.29.1",
"@rollup/rollup-linux-arm-musleabihf": "4.29.1",
"@rollup/rollup-linux-arm64-gnu": "4.29.1",
"@rollup/rollup-linux-arm64-musl": "4.29.1",
"@rollup/rollup-linux-loongarch64-gnu": "4.29.1",
"@rollup/rollup-linux-powerpc64le-gnu": "4.29.1",
"@rollup/rollup-linux-riscv64-gnu": "4.29.1",
"@rollup/rollup-linux-s390x-gnu": "4.29.1",
"@rollup/rollup-linux-x64-gnu": "4.29.1",
"@rollup/rollup-linux-x64-musl": "4.29.1",
"@rollup/rollup-win32-arm64-msvc": "4.29.1",
"@rollup/rollup-win32-ia32-msvc": "4.29.1",
"@rollup/rollup-win32-x64-msvc": "4.29.1",
"@rollup/rollup-android-arm-eabi": "4.30.1",
"@rollup/rollup-android-arm64": "4.30.1",
"@rollup/rollup-darwin-arm64": "4.30.1",
"@rollup/rollup-darwin-x64": "4.30.1",
"@rollup/rollup-freebsd-arm64": "4.30.1",
"@rollup/rollup-freebsd-x64": "4.30.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.30.1",
"@rollup/rollup-linux-arm-musleabihf": "4.30.1",
"@rollup/rollup-linux-arm64-gnu": "4.30.1",
"@rollup/rollup-linux-arm64-musl": "4.30.1",
"@rollup/rollup-linux-loongarch64-gnu": "4.30.1",
"@rollup/rollup-linux-powerpc64le-gnu": "4.30.1",
"@rollup/rollup-linux-riscv64-gnu": "4.30.1",
"@rollup/rollup-linux-s390x-gnu": "4.30.1",
"@rollup/rollup-linux-x64-gnu": "4.30.1",
"@rollup/rollup-linux-x64-musl": "4.30.1",
"@rollup/rollup-win32-arm64-msvc": "4.30.1",
"@rollup/rollup-win32-ia32-msvc": "4.30.1",
"@rollup/rollup-win32-x64-msvc": "4.30.1",
"fsevents": "~2.3.2"
}
},
@@ -10067,9 +10077,9 @@
"license": "MIT"
},
"node_modules/sass": {
"version": "1.83.1",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz",
"integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==",
"version": "1.83.4",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.83.4.tgz",
"integrity": "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10104,13 +10114,13 @@
}
},
"node_modules/sass/node_modules/readdirp": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz",
"integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz",
"integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 14.16.0"
"node": ">= 14.18.0"
},
"funding": {
"type": "individual",
@@ -11161,9 +11171,9 @@
}
},
"node_modules/update-browserslist-db": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
"integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
"integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
"dev": true,
"funding": [
{
@@ -11182,7 +11192,7 @@
"license": "MIT",
"dependencies": {
"escalade": "^3.2.0",
"picocolors": "^1.1.0"
"picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"

View File

@@ -10,6 +10,12 @@
"/build/webhooks/show.js": "/build/webhooks/show.js",
"/build/exchange-rates/index.js": "/build/exchange-rates/index.js",
"/build/exchange-rates/rates.js": "/build/exchange-rates/rates.js",
"/build/administrations/index.js": "/build/administrations/index.js",
"/build/administrations/edit.js": "/build/administrations/edit.js",
"/public/v1/js/administrations/edit.js": "/public/v1/js/administrations/edit.js",
"/public/v1/js/administrations/edit.js.LICENSE.txt": "/public/v1/js/administrations/edit.js.LICENSE.txt",
"/public/v1/js/administrations/index.js": "/public/v1/js/administrations/index.js",
"/public/v1/js/administrations/index.js.LICENSE.txt": "/public/v1/js/administrations/index.js.LICENSE.txt",
"/public/v1/js/app.js": "/public/v1/js/app.js",
"/public/v1/js/app.js.LICENSE.txt": "/public/v1/js/app.js.LICENSE.txt",
"/public/v1/js/app_vue.js": "/public/v1/js/app_vue.js",

View File

@@ -0,0 +1,39 @@
/*
* edit_transactions.js
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import Edit from "../components/administrations/Edit";
/**
* First we will load Axios via bootstrap.js
* jquery and bootstrap-sass preloaded in app.js
* vue, uiv and vuei18n are in app_vue.js
*/
require('../bootstrap');
const i18n = require('../i18n');
let props = {};
const app = new Vue({
i18n,
el: "#administrations_edit",
render: (createElement) => {
return createElement(Edit, {props: props})
},
});

View File

@@ -0,0 +1,39 @@
/*
* edit_transactions.js
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import Index from "../components/administrations/Index";
/**
* First we will load Axios via bootstrap.js
* jquery and bootstrap-sass preloaded in app.js
* vue, uiv and vuei18n are in app_vue.js
*/
require('../bootstrap');
const i18n = require('../i18n');
let props = {};
const app = new Vue({
i18n,
el: "#administrations_index",
render: (createElement) => {
return createElement(Index, {props: props})
},
});

View File

@@ -0,0 +1,173 @@
<!--
- Index.vue
- Copyright (c) 2022 james@firefly-iii.org
-
- This file is part of Firefly III (https://github.com/firefly-iii).
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<template>
<div>
<form accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data">
<input name="_token" type="hidden" value="xxx">
<div v-if="error_message !== ''" class="row">
<div class="col-lg-12">
<div class="alert alert-danger alert-dismissible" role="alert">
<button class="close" data-dismiss="alert" type="button" v-bind:aria-label="$t('firefly.close')"><span
aria-hidden="true">&times;</span></button>
<strong>{{ $t("firefly.flash_error") }}</strong> {{ error_message }}
</div>
</div>
</div>
<div v-if="success_message !== ''" class="row">
<div class="col-lg-12">
<div class="alert alert-success alert-dismissible" role="alert">
<button class="close" data-dismiss="alert" type="button" v-bind:aria-label="$t('firefly.close')"><span
aria-hidden="true">&times;</span></button>
<strong>{{ $t("firefly.flash_success") }}</strong> <span v-html="success_message"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.administrations_page_edit_sub_title_js', {title: this.pageTitle}) }}
</h3>
</div>
<div class="box-body">
{{ $t('firefly.temp_administrations_introduction') }}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.administrations_page_edit_sub_title_js', {title: this.pageTitle}) }}
</h3>
</div>
<div class="box-body">
<Title :value=administration.title :error="errors.title" v-on:input="administration.title = $event"></Title>
<UserGroupCurrency :value=administration.currency_id :error="errors.currency_id"
v-on:input="administration.currency_id = $event"></UserGroupCurrency>
</div>
<div class="box-footer">
<div class="btn-group">
<button id="submitButton" ref="submitButton" class="btn btn-success" @click="submit">
{{ $t('firefly.submit') }}
</button>
</div>
<p class="text-success" v-html="success_message"></p>
<p class="text-danger" v-html="error_message"></p>
</div>
</div>
</div>
</div>
</form>
</div>
</template>
<script>
import Title from "../form/Title.vue";
import WebhookTrigger from "../form/WebhookTrigger.vue";
import UserGroupCurrency from "../form/UserGroupCurrency.vue";
export default {
name: "Edit",
components: {UserGroupCurrency, WebhookTrigger, Title},
data() {
return {
pageTitle: '',
administration: {
title: '',
currency_id: 0,
},
errors: {
title: [],
currency_id: [],
},
error_message: '',
success_message: '',
};
},
mounted() {
const page = window.location.href.split('/');
const administrationId = parseInt(page[page.length - 1]);
this.downloadAdministration(administrationId);
},
methods: {
downloadAdministration: function (id) {
axios.get("./api/v1/user-groups/" + id).then((response) => {
let current = response.data.data;
this.administration = {
id: current.id,
title: current.attributes.title,
currency_id: parseInt(current.attributes.native_currency_id),
currency_code: current.attributes.native_currency_code,
currency_name: current.attributes.native_currency_name,
};
this.pageTitle = this.administration.title;
});
},
submit: function (e) {
// reset messages
this.error_message = '';
this.success_message = '';
this.errors = {
title: [],
currency_id: [],
};
// disable button
$('#submitButton').prop("disabled", true);
// collect data
let data = {
title: this.administration.title,
native_currency_id: parseInt(this.administration.currency_id),
};
// post!
axios.put('./api/v1/user-groups/' + this.administration.id, data).then((response) => {
let administrationId = parseInt(response.data.data.id);
window.location.href = './administrations?user_group_id=' + administrationId + '&message=updated';
}).catch((error) => {
this.error_message = error.response.data.message;
this.errors.title = error.response.data.errors.title;
this.errors.native_currency_id = error.response.data.errors.native_currency_id;
// enable button again
$('#submitButton').prop("disabled", false);
});
if (e) {
e.preventDefault();
}
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,127 @@
<!--
- Index.vue
- Copyright (c) 2022 james@firefly-iii.org
-
- This file is part of Firefly III (https://github.com/firefly-iii).
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<template>
<div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.administrations_index_menu') }}
</h3>
</div>
<div class="box-body">
{{ $t('firefly.temp_administrations_introduction') }}
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12">
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">
{{ $t('firefly.table') }}
</h3>
</div>
<div class="box-body no-padding">
<table class="table table-responsive table-hover" v-if="administrations.length > 0"
aria-label="A table.">
<thead>
<tr>
<th>{{ $t('list.title') }}</th>
<th>{{ $t('list.native_currency') }}</th>
<th class="hidden-sm hidden-xs">&nbsp;</th>
</tr>
</thead>
<tbody>
<tr v-for="administration in administrations" :key="administration.id">
<td>
<span v-text="administration.title"></span>
</td>
<td>
<span v-text="administration.currency_name"></span> (<span v-text="administration.currency_code"></span>)
</td>
<td class="hidden-sm hidden-xs">
<div class="btn-group btn-group-xs pull-right">
<button type="button" class="btn btn-default dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ $t('firefly.actions') }} <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right" role="menu">
<li><a :href="'./administrations/edit/' + administration.id"><span class="fa fa-fw fa-pencil"></span>
{{ $t('firefly.edit') }}</a></li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "Index",
data() {
return {
administrations: [],
};
},
mounted() {
this.getAdministrations();
},
methods: {
getAdministrations: function () {
this.administrations = [];
this.downloadAdministrations(1);
},
downloadAdministrations: function (page) {
axios.get("./api/v1/user-groups?page=" + page).then((response) => {
for (let i in response.data.data) {
if (response.data.data.hasOwnProperty(i)) {
let current = response.data.data[i];
let administration = {
id: current.id,
title: current.attributes.title,
currency_code: current.attributes.native_currency_code,
currency_name: current.attributes.native_currency_name,
};
this.administrations.push(administration);
}
}
if (response.data.meta.pagination.current_page < response.data.meta.pagination.total_pages) {
this.downloadAdministrations(response.data.meta.pagination.current_page + 1);
}
});
},
}
}
</script>
<style scoped>
</style>

View File

@@ -203,16 +203,16 @@ export default {
return ('' === this.rates[index].rate && '' === this.rates[index].inverse) || this.updating;
},
updateRate: function (index) {
console.log('Update!');
console.log(this.rates[index].key);
// console.log('Update!');
// console.log(this.rates[index].key);
let parts = this.spliceKey(this.rates[index].key);
if (0 === parts.length) {
return;
}
if ('' !== this.rates[index].rate) {
// update rate
console.log('Rate is ' + this.rates[index].rate);
console.log('ID is ' + this.rates[index].rate_id);
// console.log('Rate is ' + this.rates[index].rate);
// console.log('ID is ' + this.rates[index].rate_id);
this.updating = true;
axios.put("./api/v2/exchange-rates/" + this.rates[index].rate_id, {rate: this.rates[index].rate})
.then(() => {
@@ -221,8 +221,8 @@ export default {
}
if ('' !== this.rates[index].inverse) {
// update inverse
console.log('Inverse is ' + this.rates[index].inverse);
console.log('Inverse ID is ' + this.rates[index].inverse_id);
// console.log('Inverse is ' + this.rates[index].inverse);
// console.log('Inverse ID is ' + this.rates[index].inverse_id);
this.updating = true;
axios.put("./api/v2/exchange-rates/" + this.rates[index].inverse_id, {rate: this.rates[index].inverse})
.then(() => {
@@ -231,12 +231,12 @@ export default {
}
},
deleteRate: function (index) {
console.log(this.rates[index].key);
// console.log(this.rates[index].key);
let parts = this.spliceKey(this.rates[index].key);
if (0 === parts.length) {
return;
}
console.log(parts);
// console.log(parts);
// delete A to B
axios.delete("./api/v2/exchange-rates/rates/" + parts.from + '/' + parts.to + '?date=' + format(parts.date, 'yyyy-MM-dd'));
@@ -271,7 +271,7 @@ export default {
}
});
axios.get("./api/v2/currencies/" + this.to_code).then((response) => {
console.log(response.data.data);
// console.log(response.data.data);
this.to = {
id: response.data.data.id,
code: response.data.data.attributes.code,
@@ -295,16 +295,16 @@ export default {
let rate_id = current.id;
let inverse_id = '0';
let key = from_code + '_' + to_code + '_' + format(date, 'yyyy-MM-dd');
console.log('Key is now "' + key + '"');
// console.log('Key is now "' + key + '"');
// perhaps the returned rate is actually the inverse rate.
if (from_code === this.to_code && to_code === this.from_code) {
console.log('Inverse rate found!');
// console.log('Inverse rate found!');
key = to_code + '_' + from_code + '_' + format(date, 'yyyy-MM-dd');
rate = '';
inverse = current.attributes.rate;
inverse_id = current.id;
console.log('Key updated to "' + key + '"');
// console.log('Key updated to "' + key + '"');
}
if (!this.tempRates.hasOwnProperty(key)) {

View File

@@ -59,7 +59,7 @@ export default {
},
methods: {
handleInput() {
console.log(this.active);
// console.log(this.active);
this.$emit('input', this.active);
},
},

View File

@@ -0,0 +1,107 @@
<!--
- WebhookDelivery.vue
- Copyright (c) 2022 james@firefly-iii.org
-
- This file is part of Firefly III (https://github.com/firefly-iii).
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<template>
<div class="form-group" v-bind:class="{ 'has-error': hasError()}">
<label class="col-sm-4 control-label">
{{ $t('form.administration_currency') }}
</label>
<div class="col-sm-8">
<select
v-model="currency"
:title="$t('form.administration_currency')"
class="form-control"
name="user_group_currency"
>
<option v-for="currency in this.currencies"
:label="currency.name"
:value="currency.id">{{ currency.name }}
</option>
</select>
<p class="help-block" v-text="$t('firefly.administration_currency_form_help')"></p>
<ul v-for="error in this.error" class="list-unstyled">
<li class="text-danger">{{ error }}</li>
</ul>
</div>
</div>
</template>
<script>
export default {
name: "UserGroupCurrency",
data() {
return {
currency : 0,
currencies: [
],
};
},
props: {
error: {
type: Array,
required: true,
default() {
return []
}
},
value: {
type: Number,
required: true,
}
},
mounted() {
this.currency = this.value;
this.downloadCurrencies(1);
},
watch: {
value() {
this.currency = this.value;
},
currency(newValue) {
this.$emit('input', newValue);
}
},
methods: {
downloadCurrencies: function (page) {
axios.get("./api/v1/currencies?enabled=1&page=" + page).then((response) => {
for (let i in response.data.data) {
if (response.data.data.hasOwnProperty(i)) {
let current = response.data.data[i];
let currency = {
id: current.id,
name: current.attributes.name,
code: current.attributes.code,
};
this.currencies.push(currency);
}
}
if (response.data.meta.pagination.current_page < response.data.meta.pagination.total_pages) {
this.downloadCurrencies(parseInt(response.data.meta.pagination.current_page) + 1);
}
});
},
hasError() {
return this.error?.length > 0;
}
},
}
</script>

View File

@@ -887,7 +887,7 @@ export default {
deleteTransaction: function (index, event) {
event.preventDefault();
console.log('Remove transaction.');
// console.log('Remove transaction.');
this.transactions.splice(index, 1);
},
limitSourceType: function (type) {

View File

@@ -154,6 +154,10 @@
:transactionType="transactionType"
v-bind:title="$t('form.foreign_amount')"
></foreign-amount>
<reconciled v-show="isReconciled"
v-model="transaction.reconciled"
:error="transaction.errors.reconciled"
></reconciled>
</div>
<div class="col-lg-4">
<budget
@@ -455,6 +459,7 @@ export default {
transaction_journal_id: transaction.transaction_journal_id,
description: transaction.description,
date: transaction.date.substring(0, 16),
reconciled: transaction.reconciled,
amount: this.roundNumber(this.positiveAmount(transaction.amount), transaction.currency_decimal_places),
category: transaction.category_name,
errors: {
@@ -464,6 +469,7 @@ export default {
amount: [],
date: [],
budget_id: [],
reconciled: [],
bill_id: [],
foreign_amount: [],
category: [],
@@ -540,7 +546,7 @@ export default {
// }
},
convertData: function () {
console.log('start of convertData');
// console.log('start of convertData');
let data = {
'apply_rules': this.applyRules,
'fire_webhooks': this.fireWebhooks,
@@ -578,7 +584,7 @@ export default {
if ('deposit' === transactionType) {
currencyId = this.transactions[0].destination_account.currency_id;
}
console.log('Overruled currency ID to ' + currencyId);
// console.log('Overruled currency ID to ' + currencyId);
for (let key in this.transactions) {
if (this.transactions.hasOwnProperty(key) && /^0$|^[1-9]\d*$/.test(key) && key <= 4294967294) {
@@ -586,7 +592,7 @@ export default {
}
}
//console.log(data);
console.log('end of convertData');
// console.log('end of convertData');
return data;
},
convertDataRow(row, index, transactionType, currencyId) {
@@ -615,7 +621,7 @@ export default {
// }
row.currency_id = currencyId;
console.log('Final currency ID = ' + currencyId);
// console.log('Final currency ID = ' + currencyId);
date = row.date;
if (index > 0) {
@@ -676,6 +682,8 @@ export default {
row.amount = String(row.amount).replace(',', '.');
}
// console.log('Reconciled is ' + row.reconciled);
currentArray =
{
transaction_journal_id: row.transaction_journal_id,
@@ -688,6 +696,8 @@ export default {
source_id: sourceId,
source_name: sourceName,
reconciled: row.reconciled,
destination_id: destId,
destination_name: destName,
@@ -726,7 +736,7 @@ export default {
if (parseInt(row.piggy_bank) > 0) {
currentArray.piggy_bank_id = parseInt(row.piggy_bank);
}
if(this.isReconciled && !this.storeAsNew) {
if(this.isReconciled && !this.storeAsNew && true === row.reconciled) {
// drop content from array:
delete currentArray.source_id;
delete currentArray.source_name;
@@ -738,11 +748,14 @@ export default {
delete currentArray.currency_id;
currentArray.reconciled = true;
}
if(true === row.isReconciled) {
this.isReconciled = false;
}
return currentArray;
},
submit: function (e) {
console.log('Submit!');
// console.log('Submit!');
let button = $(e.currentTarget);
button.prop("disabled", true);
@@ -751,26 +764,26 @@ export default {
let uri = './api/v1/transactions/' + groupId + '?_token=' + document.head.querySelector('meta[name="csrf-token"]').content;
let method = 'PUT';
if (this.storeAsNew) {
console.log('storeAsNew');
// console.log('storeAsNew');
// other links.
uri = './api/v1/transactions?_token=' + document.head.querySelector('meta[name="csrf-token"]').content;
method = 'POST';
}
const data = this.convertData();
console.log('POST!');
// console.log('POST!');
axios({
method: method,
url: uri,
data: data,
}).then(response => {
console.log('Response!');
// console.log('Response!');
if (0 === this.collectAttachmentData(response)) {
const title = response.data.data.attributes.group_title ?? response.data.data.attributes.transactions[0].description;
this.redirectUser(response.data.data.id, title);
}
button.removeAttr('disabled');
}).catch(error => {
console.log('Error :(');
// console.log('Error :(');
// give user errors things back.
// something something render errors.
this.parseErrors(error.response.data);
@@ -779,11 +792,11 @@ export default {
if (e) {
e.preventDefault();
}
console.log('DONE with method.');
// console.log('DONE with method.');
},
redirectUser(groupId, title) {
console.log('Now in redirectUser');
// console.log('Now in redirectUser');
if (this.returnAfter) {
this.setDefaultErrors();
// do message if update or new:
@@ -801,11 +814,11 @@ export default {
window.location.href = window.previousUrl + '?transaction_group_id=' + groupId + '&message=updated';
}
}
console.log('End of redirectUser');
// console.log('End of redirectUser');
},
collectAttachmentData(response) {
console.log('Now incollectAttachmentData()');
// console.log('Now incollectAttachmentData()');
let groupId = response.data.data.id;
// array of all files to be uploaded:
@@ -837,7 +850,7 @@ export default {
}
}
let count = toBeUploaded.length;
console.log('Found ' + toBeUploaded.length + ' attachments.');
// console.log('Found ' + toBeUploaded.length + ' attachments.');
// loop all uploads.
for (const key in toBeUploaded) {
@@ -863,7 +876,7 @@ export default {
})(toBeUploaded[key], key, this);
}
}
console.log('Done with collectAttachmentData()');
// console.log('Done with collectAttachmentData()');
return count;
},
@@ -963,6 +976,7 @@ export default {
foreign_amount: [],
category: [],
piggy_bank: [],
reconciled: [],
tags: [],
// custom fields:
custom_errors: {
@@ -1060,6 +1074,7 @@ export default {
case 'budget_id':
case 'bill_id':
case 'description':
case 'reconciled':
case 'tags':
this.transactions[transactionIndex].errors[fieldName] = errors.errors[key];
break;
@@ -1106,6 +1121,7 @@ export default {
bill_id: [],
foreign_amount: [],
category: [],
reconciled: [],
piggy_bank: [],
tags: [],
// custom fields:

View File

@@ -0,0 +1,75 @@
<!--
- Reconciled.vue
- Copyright (c) 2025 james@firefly-iii.org.
-
- This file is part of Firefly III (https://github.com/firefly-iii).
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see https://www.gnu.org/licenses/.
-->
<template>
<div class="form-group" v-bind:class="{ 'has-error': hasError()}">
<div class="col-sm-8 col-sm-offset-4 text-sm">
</div>
<label ref="cur" class="col-sm-4 control-label">
{{ $t('firefly.is_reconciled') }}
</label>
<div class="col-sm-8">
<div class="checkbox">
<label>
<input name="create_another" @input="handleInput" type="checkbox" v-model="reconciled">
</label>
</div>
</div>
<ul v-for="error in this.error" class="list-unstyled">
<li class="text-danger">{{ error }}</li>
</ul>
</div>
</template>
<script>
export default {
name: "Reconciled",
props: {
value: Boolean,
error: Array
},
data() {
return {
reconciled: this.value
}
},
watch: {
reconciled: function () {
// console.log('reconciled is ' + this.reconciled);
this.$emit('input', this.reconciled);
},
},
methods: {
handleInput(e) {
},
hasError: function () {
return this.error.length > 0;
},
}
}
</script>
<style scoped>
</style>

View File

@@ -74,13 +74,13 @@ export default {
},
methods: {
update(newTags) {
console.log('update', newTags);
// console.log('update', newTags);
this.autocompleteItems = [];
this.tags = newTags;
this.$emit('input', this.tags);
},
clearTags() {
console.log('clearTags');
// console.log('clearTags');
this.tags = [];
this.$emit('input', this.tags);
@@ -89,7 +89,7 @@ export default {
return this.error.length > 0;
},
initItems() {
console.log('Now in initItems');
// console.log('Now in initItems');
if (this.tag.length < 2) {
return;
}

View File

@@ -124,7 +124,7 @@ export default {
},
downloadWebhook: function (id) {
axios.get('./api/v1/webhooks/' + id).then(response => {
console.log(response.data.data.attributes);
// console.log(response.data.data.attributes);
this.title = response.data.data.attributes.title;
this.id = parseInt(response.data.data.id);
@@ -187,7 +187,7 @@ export default {
// post!
axios.put('./api/v1/webhooks/' + this.id, data).then((response) => {
let webhookId = response.data.data.id;
let webhookId = parseInt(response.data.data.id);
window.location.href = window.previousUrl + '?webhook_id=' + webhookId + '&message=updated';
}).catch((error) => {

View File

@@ -290,7 +290,7 @@ export default {
}
let journalId = parseInt(prompt('Enter a transaction ID'));
if (journalId !== null && journalId > 0 && journalId <= 16777216) {
console.log('OK 1');
// console.log('OK 1');
this.disabledTrigger = true;
// disable button. Add informative message.
//let button = $('#triggerButton');
@@ -300,7 +300,7 @@ export default {
// TODO actually trigger the webhook.
axios.post('./api/v1/webhooks/' + this.id + '/trigger-transaction/' + journalId, {});
//button.prop('disabled', false).removeClass('disabled');
console.log('OK 2');
// console.log('OK 2');
// set a time-outs.
this.loading = true;
@@ -308,7 +308,7 @@ export default {
this.getWebhook();
this.disabledTrigger = false;
}, 2000);
console.log('OK 3');
// console.log('OK 3');
}
@@ -363,7 +363,7 @@ export default {
},
downloadWebhook: function () {
axios.get('./api/v1/webhooks/' + this.id).then(response => {
console.log(response.data.data.attributes);
// console.log(response.data.data.attributes);
this.edit_url = './webhooks/edit/' + this.id;
this.delete_url = './webhooks/delete/' + this.id;
this.title = response.data.data.attributes.title;

View File

@@ -31,6 +31,7 @@ import PiggyBank from "./components/transactions/PiggyBank";
import Tags from "./components/transactions/Tags";
import Category from "./components/transactions/Category";
import Amount from "./components/transactions/Amount";
import Reconciled from "./components/transactions/Reconciled";
import ForeignAmountSelect from "./components/transactions/ForeignAmountSelect";
import TransactionType from "./components/transactions/TransactionType";
import AccountSelect from "./components/transactions/AccountSelect";
@@ -63,6 +64,7 @@ Vue.component('tags', Tags);
Vue.component('category', Category);
Vue.component('amount', Amount);
Vue.component('foreign-amount', ForeignAmountSelect);
Vue.component('reconciled', Reconciled);
Vue.component('transaction-type', TransactionType);
Vue.component('account-select', AccountSelect);

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"welcome_back": "\u041a\u0430\u043a\u0432\u043e \u0441\u0435 \u0441\u043b\u0443\u0447\u0432\u0430?",
"flash_error": "\u0413\u0440\u0435\u0448\u043a\u0430!",
"flash_warning": "\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0438",
"single_split": "\u0420\u0430\u0437\u0434\u0435\u043b",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f #{ID}(\"{title}\")<\/a> \u0431\u0435\u0448\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430.",
@@ -33,7 +40,7 @@
"submit": "\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0438",
"amount": "\u0421\u0443\u043c\u0430",
"date": "\u0414\u0430\u0442\u0430",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "\u0415\u0442\u0438\u043a\u0435\u0442\u0438",
"no_budget": "(\u0431\u0435\u0437 \u0431\u044e\u0434\u0436\u0435\u0442)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d",
"interest_date": "\u041f\u0430\u0434\u0435\u0436 \u043d\u0430 \u043b\u0438\u0445\u0432\u0430",
"administration_currency": "Native currency",
"title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",
"date": "\u0414\u0430\u0442\u0430",
"book_date": "\u0414\u0430\u0442\u0430 \u043d\u0430 \u043e\u0441\u0447\u0435\u0442\u043e\u0432\u043e\u0434\u044f\u0432\u0430\u043d\u0435",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",
"active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d \u043b\u0438 \u0435?",
"native_currency": "Native currency",
"trigger": "\u0417\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0430\u043d\u0435",
"response": "\u041e\u0442\u0433\u043e\u0432\u043e\u0440",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Taula",
"welcome_back": "Qu\u00e8 est\u00e0 passant?",
"flash_error": "Error!",
"flash_warning": "Atenci\u00f3!",
@@ -9,6 +15,7 @@
"select_source_account": "Per favor, selecciona o escriu un nom de compte d'origen v\u00e0lid",
"split_transaction_title": "Descripci\u00f3 de la transacci\u00f3 dividida",
"errors_submission": "Hi ha hagut un error amb el teu enviament. Per favor, revisa els errors de sota.",
"is_reconciled": "Is reconciled",
"split": "Dividir",
"single_split": "Divisi\u00f3",
"transaction_stored_link": "La <a href=\"transactions\/show\/{ID}\">Transacci\u00f3 #{ID} (\"{title}\")<\/a> s'ha desat.",
@@ -33,7 +40,7 @@
"submit": "Enviar",
"amount": "Import",
"date": "Data",
"is_reconciled_fields_dropped": "Com aquesta transacci\u00f3 est\u00e0 reconciliada, no podr\u00e0s actualitzar els comptes, ni les quantitats.",
"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": "Etiquetes",
"no_budget": "(cap pressupost)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Actiu",
"interest_date": "Data d'inter\u00e8s",
"administration_currency": "Native currency",
"title": "T\u00edtol",
"date": "Data",
"book_date": "Data de registre",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtol",
"active": "Est\u00e0 actiu?",
"native_currency": "Native currency",
"trigger": "Activador",
"response": "Resposta",
"delivery": "Lliurament",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabulka",
"welcome_back": "Jak to jde?",
"flash_error": "Chyba!",
"flash_warning": "Varov\u00e1n\u00ed!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Popis roz\u00fa\u010dtov\u00e1n\u00ed",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Rozd\u011blit",
"single_split": "Rozd\u011blit",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaction #{ID} (\"{title}\")<\/a> has been stored.",
@@ -33,7 +40,7 @@
"submit": "Odeslat",
"amount": "\u010c\u00e1stka",
"date": "Datum",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "\u0160t\u00edtky",
"no_budget": "(\u017e\u00e1dn\u00fd rozpo\u010det)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Aktivn\u00ed",
"interest_date": "\u00darokov\u00e9 datum",
"administration_currency": "Native currency",
"title": "N\u00e1zev",
"date": "Datum",
"book_date": "Datum rezervace",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "N\u00e1zev",
"active": "Aktivn\u00ed?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabel",
"welcome_back": "Hvad spiller?",
"flash_error": "Fejl!",
"flash_warning": "Advarsel!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Description of the split transaction",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Opdel",
"single_split": "Opdel",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaction #{ID} (\"{title}\")<\/a> has been stored.",
@@ -33,7 +40,7 @@
"submit": "Submit",
"amount": "Bel\u00f8b",
"date": "Date",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Etiketter",
"no_budget": "(no budget)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Aktiv",
"interest_date": "Rentedato",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Dato",
"book_date": "Bogf\u00f8ringsdato",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titel",
"active": "Aktiv?",
"native_currency": "Native currency",
"trigger": "Udl\u00f8ser",
"response": "Svar",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Finanzverwaltungen",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabelle",
"welcome_back": "\u00dcberblick",
"flash_error": "Fehler!",
"flash_warning": "Achtung!",
@@ -9,6 +15,7 @@
"select_source_account": "Bitte einen g\u00fcltigen Quellkontonamen ausw\u00e4hlen oder eingeben",
"split_transaction_title": "Beschreibung der Splittbuchung",
"errors_submission": "Bei Ihren Eingaben stimmt etwas nicht. Bitte \u00fcberpr\u00fcfen Sie die unten stehenden Fehler.",
"is_reconciled": "Ist abgestimmt",
"split": "Teilen",
"single_split": "Teilen",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Buchung #{ID} (\"{title}\")<\/a> wurde gespeichert.",
@@ -33,7 +40,7 @@
"submit": "Absenden",
"amount": "Betrag",
"date": "Datum",
"is_reconciled_fields_dropped": "Da diese Buchung abgeglichen ist, k\u00f6nnen Sie weder die Konten noch den\/die Betrag\/Betr\u00e4ge aktualisieren.",
"is_reconciled_fields_dropped": "Da diese Buchung abgestimmt ist, k\u00f6nnen Sie weder die Konten noch den\/die Betrag\/Betr\u00e4ge aktualisieren, es sei denn, Sie entfernen das Abstimmungskennzeichen.",
"tags": "Schlagw\u00f6rter",
"no_budget": "(kein Budget)",
"no_bill": "(kein Abonnement)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Aktiv",
"interest_date": "Zinstermin",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Datum",
"book_date": "Buchungsdatum",
@@ -161,7 +169,9 @@
"rate": "Kurs"
},
"list": {
"title": "Titel",
"active": "Aktiv?",
"native_currency": "Native currency",
"trigger": "Ausl\u00f6ser",
"response": "Antwort",
"delivery": "Zustellung",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2",
"welcome_back": "\u03a4\u03b9 \u03c0\u03b1\u03af\u03b6\u03b5\u03b9;",
"flash_error": "\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1!",
"flash_warning": "\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03bc\u03b5 \u03b4\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",
"single_split": "\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\u0397 \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae #{ID} (\"{title}\")<\/a> \u03ad\u03c7\u03b5\u03b9 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03c4\u03b5\u03af.",
@@ -33,7 +40,7 @@
"submit": "\u03a5\u03c0\u03bf\u03b2\u03bf\u03bb\u03ae",
"amount": "\u03a0\u03bf\u03c3\u03cc",
"date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "\u0395\u03c4\u03b9\u03ba\u03ad\u03c4\u03b5\u03c2",
"no_budget": "(\u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03cb\u03c0\u03bf\u03bb\u03bf\u03b3\u03b9\u03c3\u03bc\u03cc)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL",
"active": "\u0395\u03bd\u03b5\u03c1\u03b3\u03cc",
"interest_date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03c4\u03bf\u03ba\u03b9\u03c3\u03bc\u03bf\u03cd",
"administration_currency": "Native currency",
"title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",
"date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1",
"book_date": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u03b5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",
"active": "\u0395\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03cc;",
"native_currency": "Native currency",
"trigger": "\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
"response": "\u0391\u03c0\u03cc\u03ba\u03c1\u03b9\u03c3\u03b7",
"delivery": "\u03a0\u03b1\u03c1\u03ac\u03b4\u03bf\u03c3\u03b7",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Table",
"welcome_back": "What's playing?",
"flash_error": "Error!",
"flash_warning": "Warning!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Description of the split transaction",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Split",
"single_split": "Split",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaction #{ID} (\"{title}\")<\/a> has been stored.",
@@ -33,7 +40,7 @@
"submit": "Submit",
"amount": "Amount",
"date": "Date",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Tags",
"no_budget": "(no budget)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Active",
"interest_date": "Interest date",
"administration_currency": "Native currency",
"title": "Title",
"date": "Date",
"book_date": "Book date",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Title",
"active": "Is active?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Table",
"welcome_back": "What's playing?",
"flash_error": "Error!",
"flash_warning": "Warning!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Description of the split transaction",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Split",
"single_split": "Split",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaction #{ID} (\"{title}\")<\/a> has been stored.",
@@ -33,7 +40,7 @@
"submit": "Submit",
"amount": "Amount",
"date": "Date",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Tags",
"no_budget": "(no budget)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Active",
"interest_date": "Interest date",
"administration_currency": "Native currency",
"title": "Title",
"date": "Date",
"book_date": "Book date",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Title",
"active": "Is active?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Mesa",
"welcome_back": "\u00bfQu\u00e9 est\u00e1 pasando?",
"flash_error": "\u00a1Error!",
"flash_warning": "\u00a1Advertencia!",
@@ -9,6 +15,7 @@
"select_source_account": "Por favor, seleccione o escriba un nombre de cuenta de origen v\u00e1lido",
"split_transaction_title": "Descripci\u00f3n de la transacci\u00f3n dividida",
"errors_submission": "Hubo un problema con su env\u00edo. Por favor, compruebe los siguientes errores.",
"is_reconciled": "Is reconciled",
"split": "Separar",
"single_split": "Divisi\u00f3n",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">La transacci\u00f3n #{ID} (\"{title}\")<\/a> ha sido almacenada.",
@@ -33,7 +40,7 @@
"submit": "Enviar",
"amount": "Cantidad",
"date": "Fecha",
"is_reconciled_fields_dropped": "Debido a que esta transacci\u00f3n est\u00e1 reconciliada, no podr\u00e1 actualizar las cuentas, ni las cantidades.",
"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": "Etiquetas",
"no_budget": "(sin presupuesto)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Activo",
"interest_date": "Fecha de inter\u00e9s",
"administration_currency": "Native currency",
"title": "T\u00edtulo",
"date": "Fecha",
"book_date": "Fecha de registro",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtulo",
"active": "\u00bfEst\u00e1 Activo?",
"native_currency": "Native currency",
"trigger": "Disparador",
"response": "Respuesta",
"delivery": "Entrega",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Taulukko",
"welcome_back": "Mit\u00e4 kuuluu?",
"flash_error": "Virhe!",
"flash_warning": "Varoitus!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Jaetun tapahtuman kuvaus",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Jaa",
"single_split": "Jako",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Tapahtuma #{ID} (\"{title}\")<\/a> on tallennettu.",
@@ -33,7 +40,7 @@
"submit": "Vahvista",
"amount": "Summa",
"date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "T\u00e4git",
"no_budget": "(ei budjettia)",
"no_bill": "(no subscription)",
@@ -108,7 +115,7 @@
"meta_data": "Metatieto",
"webhook_messages": "Webhook message",
"inactive": "Ei aktiivinen",
"no_webhook_messages": "There are no webhook messages",
"no_webhook_messages": "Verkkotoimintokutsuviestej\u00e4 ei ole",
"inspect": "Inspect",
"create_new_webhook": "Create new webhook",
"webhooks": "Webhookit",
@@ -126,7 +133,7 @@
"attempt_content_help": "These are all the unsuccessful attempts of this webhook message to submit to the configured URL. After some time, Firefly III will stop trying.",
"no_attempts": "There are no unsuccessful attempts. That's a good thing!",
"webhook_attempt_at": "Attempt at {moment}",
"logs": "Logs",
"logs": "Lokitiedot",
"response": "Response",
"visit_webhook_url": "Visit webhook URL",
"reset_webhook_secret": "Reset webhook secret",
@@ -144,6 +151,7 @@
"url": "URL-osoite",
"active": "Aktiivinen",
"interest_date": "Korkop\u00e4iv\u00e4",
"administration_currency": "Native currency",
"title": "Otsikko",
"date": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4",
"book_date": "Kirjausp\u00e4iv\u00e4",
@@ -153,15 +161,17 @@
"payment_date": "Maksup\u00e4iv\u00e4",
"invoice_date": "Laskun p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4",
"internal_reference": "Sis\u00e4inen viite",
"webhook_response": "Response",
"webhook_trigger": "Trigger",
"webhook_delivery": "Delivery",
"webhook_response": "Vastaus",
"webhook_trigger": "Ehto",
"webhook_delivery": "Toimitus",
"from_currency_to_currency": "{from} &rarr; {to}",
"to_currency_from_currency": "{to} &rarr; {from}",
"rate": "Rate"
"rate": "Kurssi"
},
"list": {
"title": "Otsikko",
"active": "Aktiivinen?",
"native_currency": "Native currency",
"trigger": "Ehto",
"response": "Vastaus",
"delivery": "Toimitus",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Administrations financi\u00e8res",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tableau",
"welcome_back": "Quoi de neuf ?",
"flash_error": "Erreur !",
"flash_warning": "Attention !",
@@ -9,6 +15,7 @@
"select_source_account": "Veuillez s\u00e9lectionner ou saisir un nom de compte source valide",
"split_transaction_title": "Description de l'op\u00e9ration s\u00e9par\u00e9e",
"errors_submission": "Certaines informations ne sont pas correctes dans votre formulaire. Veuillez v\u00e9rifier les erreurs ci-dessous.",
"is_reconciled": "Est rapproch\u00e9",
"split": "S\u00e9paration",
"single_split": "S\u00e9paration unique",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">L'op\u00e9ration n\u00b0{ID} (\"{title}\")<\/a> a \u00e9t\u00e9 enregistr\u00e9e.",
@@ -33,7 +40,7 @@
"submit": "Soumettre",
"amount": "Montant",
"date": "Date",
"is_reconciled_fields_dropped": "Comme cette op\u00e9ration est rapproch\u00e9e, vous ne pourrez pas modifier les comptes, ni le(s) montant(s).",
"is_reconciled_fields_dropped": "Comme cette op\u00e9ration est rapproch\u00e9e, vous ne pourrez pas modifier les comptes, ni le(s) montant(s) \u00e0 moins de retirer l'indicateur de r\u00e9conciliation.",
"tags": "Tags",
"no_budget": "(pas de budget)",
"no_bill": "(no subscription)",
@@ -52,7 +59,7 @@
"destination_account_reconciliation": "Vous ne pouvez pas modifier le compte de destination d'une op\u00e9ration de rapprochement.",
"source_account_reconciliation": "Vous ne pouvez pas modifier le compte source d'une op\u00e9ration de rapprochement.",
"budget": "Budget",
"bill": "Subscription",
"bill": "Abonnement",
"you_create_withdrawal": "Vous saisissez une d\u00e9pense.",
"you_create_transfer": "Vous saisissez un transfert.",
"you_create_deposit": "Vous saisissez un d\u00e9p\u00f4t.",
@@ -130,20 +137,21 @@
"response": "R\u00e9ponse",
"visit_webhook_url": "Visiter l'URL du webhook",
"reset_webhook_secret": "R\u00e9initialiser le secret du webhook",
"header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.",
"header_exchange_rates_rates": "Exchange rates",
"header_exchange_rates_table": "Table with exchange rates",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"add_new_rate": "Add a new exchange rate",
"save_new_rate": "Save new rate"
"header_exchange_rates": "Taux de change",
"exchange_rates_intro": "Firefly III prend en charge le chargement et l'utilisation des taux de change. En savoir plus \u00e0 ce sujet dans <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">la documentation<\/a>.",
"exchange_rates_from_to": "Entre {from} et {to} (et l'inverse)",
"exchange_rates_intro_rates": "Firefly III utilise les taux de change suivants. L'inverse est calcul\u00e9 automatiquement lorsqu'il n'est pas fourni. Si aucun taux de change n'existe pour la date de la transaction, Firefly III reviendra dans le temps pour en trouver un. Si aucun n'est pr\u00e9sent, le taux \"1\" sera utilis\u00e9.",
"header_exchange_rates_rates": "Taux de change",
"header_exchange_rates_table": "Table avec taux de change",
"help_rate_form": "Aujourd'hui, combien de {to} obtiendrez-vous pour un {from} ?",
"add_new_rate": "Ajouter un nouveau taux de change",
"save_new_rate": "Enregistrer le nouveau taux"
},
"form": {
"url": "Liens",
"active": "Actif",
"interest_date": "Date de valeur (int\u00e9r\u00eats)",
"administration_currency": "Native currency",
"title": "Titre",
"date": "Date",
"book_date": "Date d'enregistrement",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titre",
"active": "Actif ?",
"native_currency": "Native currency",
"trigger": "D\u00e9clencheur",
"response": "R\u00e9ponse",
"delivery": "Distribution",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "T\u00e1bl\u00e1zat",
"welcome_back": "Mi a helyzet?",
"flash_error": "Hiba!",
"flash_warning": "Figyelmeztet\u00e9s!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Felosztott tranzakci\u00f3 le\u00edr\u00e1sa",
"errors_submission": "Hiba t\u00f6rt\u00e9nt a bek\u00fcld\u00e9s sor\u00e1n. K\u00e9rlek jav\u00edtsd az al\u00e1bbi hib\u00e1kat.",
"is_reconciled": "Is reconciled",
"split": "Feloszt\u00e1s",
"single_split": "Feloszt\u00e1s",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaction #{ID} (\"{title}\")<\/a> mentve.",
@@ -33,7 +40,7 @@
"submit": "Bek\u00fcld\u00e9s",
"amount": "\u00d6sszeg",
"date": "D\u00e1tum",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "C\u00edmk\u00e9k",
"no_budget": "(nincs k\u00f6lts\u00e9gkeret)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Akt\u00edv",
"interest_date": "Kamatfizet\u00e9si id\u0151pont",
"administration_currency": "Native currency",
"title": "C\u00edm",
"date": "D\u00e1tum",
"book_date": "K\u00f6nyvel\u00e9s d\u00e1tuma",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "C\u00edm",
"active": "Akt\u00edv?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Meja",
"welcome_back": "Apa yang sedang dimainkan?",
"flash_error": "Kesalahan!",
"flash_warning": "PERINGATAN!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Description of the split transaction",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Pisah",
"single_split": "Pisah",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaction #{ID} (\"{title}\")<\/a> has been stored.",
@@ -33,7 +40,7 @@
"submit": "Menyerahkan",
"amount": "Jumlah",
"date": "Tanggal",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Tag",
"no_budget": "(no budget)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Aktif",
"interest_date": "Tanggal bunga",
"administration_currency": "Native currency",
"title": "Judul",
"date": "Tanggal",
"book_date": "Tanggal buku",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Judul",
"active": "Aktif?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabella",
"welcome_back": "La tua situazione finanziaria",
"flash_error": "Errore!",
"flash_warning": "Avviso!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Descrizione della transazione suddivisa",
"errors_submission": "Errore durante l'invio. Controlla gli errori segnalati qui sotto.",
"is_reconciled": "Is reconciled",
"split": "Dividi",
"single_split": "Divisione",
"transaction_stored_link": "La <a href=\"transactions\/show\/{ID}\">transazione #{ID} (\"{title}\")<\/a> \u00e8 stata salvata.",
@@ -33,7 +40,7 @@
"submit": "Invia",
"amount": "Importo",
"date": "Data",
"is_reconciled_fields_dropped": "Poich\u00e9 questa transazione \u00e8 riconciliata, non potrai aggiornare i conti, n\u00e9 gli importi.",
"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": "Etichette",
"no_budget": "(nessun budget)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Attivo",
"interest_date": "Data di valuta",
"administration_currency": "Native currency",
"title": "Titolo",
"date": "Data",
"book_date": "Data contabile",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titolo",
"active": "Attivo",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Risposta",
"delivery": "Consegna",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u8868",
"welcome_back": "\u6982\u8981",
"flash_error": "\u30a8\u30e9\u30fc\uff01",
"flash_warning": "\u8b66\u544a\uff01",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "\u5206\u5272\u53d6\u5f15\u306e\u6982\u8981",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "\u5206\u5272",
"single_split": "\u5206\u5272",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\u53d6\u5f15 #{ID}\u300c{title}\u300d<\/a> \u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002",
@@ -33,7 +40,7 @@
"submit": "\u9001\u4fe1",
"amount": "\u91d1\u984d",
"date": "\u65e5\u4ed8",
"is_reconciled_fields_dropped": "\u3053\u306e\u53d6\u5f15\u306f\u7167\u5408\u6e08\u307f\u306e\u305f\u3081\u3001\u53e3\u5ea7\u3084\u91d1\u984d\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002",
"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": "\u30bf\u30b0",
"no_budget": "(\u4e88\u7b97\u306a\u3057)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "\u6709\u52b9",
"interest_date": "\u5229\u606f\u65e5",
"administration_currency": "Native currency",
"title": "\u30bf\u30a4\u30c8\u30eb",
"date": "\u65e5\u4ed8",
"book_date": "\u8a18\u5e33\u65e5",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u30bf\u30a4\u30c8\u30eb",
"active": "\u6709\u52b9",
"native_currency": "Native currency",
"trigger": "\u30c8\u30ea\u30ac\u30fc",
"response": "\u30ec\u30b9\u30dd\u30f3\u30b9",
"delivery": "\u914d\u4fe1",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\ud45c",
"welcome_back": "\ubb34\uc2a8 \uc77c\uc774\uc8e0?",
"flash_error": "\uc624\ub958!",
"flash_warning": "\uacbd\uace0!",
@@ -9,6 +15,7 @@
"select_source_account": "\uc720\ud6a8\ud55c \uc18c\uc2a4 \uacc4\uc815 \ub0b4\uc5ed\uc744 \uc120\ud0dd \ub610\ub294 \ud0c0\uc785\uc744 \uc120\ud0dd\ud558\uc2ed\uc2dc\uc624.",
"split_transaction_title": "\ubd84\ud560 \uac70\ub798\uc5d0 \ub300\ud55c \uc124\uba85",
"errors_submission": "\uc81c\ucd9c\ud55c \ub0b4\uc6a9\uc5d0 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798 \uc624\ub958\ub97c \ud655\uc778\ud574 \uc8fc\uc138\uc694.",
"is_reconciled": "Is reconciled",
"split": "\ub098\ub204\uae30",
"single_split": "\ub098\ub204\uae30",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\uac70\ub798 #{ID} (\"{title}\")<\/a>\uac00 \uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",
@@ -33,7 +40,7 @@
"submit": "\uc81c\ucd9c",
"amount": "\uae08\uc561",
"date": "\ub0a0\uc9dc",
"is_reconciled_fields_dropped": "\uc774 \uac70\ub798\uac00 \uc218\uc815\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0, \uacc4\uc88c\ub098 \uae08\uc561\uc744 \uc5c5\ub370\uc774\ud2b8 \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.",
"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": "\ud0dc\uadf8",
"no_budget": "(\uc608\uc0b0 \uc5c6\uc74c)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "\ud65c\uc131",
"interest_date": "\uc774\uc790 \ub0a0\uc9dc",
"administration_currency": "Native currency",
"title": "\uc81c\ubaa9",
"date": "\ub0a0\uc9dc",
"book_date": "\uc608\uc57d\uc77c",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\uc81c\ubaa9",
"active": "\ud65c\uc131 \uc0c1\ud0dc\uc785\ub2c8\uae4c?",
"native_currency": "Native currency",
"trigger": "\ud2b8\ub9ac\uac70",
"response": "\uc751\ub2f5",
"delivery": "\uc804\ub2ec",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabell",
"welcome_back": "Hvordan g\u00e5r det?",
"flash_error": "Feil!",
"flash_warning": "Advarsel!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Beskrivelse av den splittende transaksjon",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Del opp",
"single_split": "Del opp",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaksjon #{ID} (\"{title}\")<\/a> har blitt lagret.",
@@ -33,7 +40,7 @@
"submit": "Send inn",
"amount": "Bel\u00f8p",
"date": "Dato",
"is_reconciled_fields_dropped": "Fordi denne transaksjonen er avstemt, vil du ikke kunne oppdatere kontoene eller bel\u00f8pene.",
"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": "Tagger",
"no_budget": "(ingen budsjett)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "Nettadresse",
"active": "Aktiv",
"interest_date": "Rentedato",
"administration_currency": "Native currency",
"title": "Tittel",
"date": "Dato",
"book_date": "Bokf\u00f8ringsdato",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Tittel",
"active": "Er aktiv?",
"native_currency": "Native currency",
"trigger": "Utl\u00f8ser",
"response": "Respons",
"delivery": "Levering",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Grootboeken",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabel",
"welcome_back": "Hoe staat het er voor?",
"flash_error": "Fout!",
"flash_warning": "Waarschuwing!",
@@ -7,8 +13,9 @@
"close": "Sluiten",
"select_dest_account": "Selecteer of type een geldige doelrekeningnaam",
"select_source_account": "Selecteer of type een geldige bronrekeningnaam",
"split_transaction_title": "Beschrijving van de gesplitste transactie",
"split_transaction_title": "Omschrijving van de gesplitste transactie",
"errors_submission": "Er ging iets mis. Check de errors.",
"is_reconciled": "Is afgestemd",
"split": "Splitsen",
"single_split": "Split",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transactie #{ID} (\"{title}\")<\/a> is opgeslagen.",
@@ -33,7 +40,7 @@
"submit": "Invoeren",
"amount": "Bedrag",
"date": "Datum",
"is_reconciled_fields_dropped": "Omdat deze transactie al is afgestemd, kan je het bedrag noch de rekeningen wijzigen.",
"is_reconciled_fields_dropped": "Omdat deze transactie al is afgestemd, kan je het bedrag noch de rekeningen wijzigen. Tenzij je het vinkje weghaalt.",
"tags": "Tags",
"no_budget": "(geen budget)",
"no_bill": "(geen abonnement)",
@@ -44,11 +51,11 @@
"update_transaction": "Update transactie",
"after_update_create_another": "Na het opslaan terug om door te gaan met wijzigen.",
"store_as_new": "Opslaan als nieuwe transactie ipv de huidige bij te werken.",
"split_title_help": "Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.",
"split_title_help": "Als je een gesplitste transactie maakt, moet er een algemene omschrijving zijn voor alle splitsingen van de transactie.",
"none_in_select_list": "(geen)",
"no_piggy_bank": "(geen spaarpotje)",
"description": "Omschrijving",
"split_transaction_title_help": "Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.",
"split_transaction_title_help": "Als je een gesplitste transactie maakt, moet er een algemene omschrijving zijn voor alle splitsingen van de transactie.",
"destination_account_reconciliation": "Je kan de doelrekening van een afstemming niet wijzigen.",
"source_account_reconciliation": "Je kan de bronrekening van een afstemming niet wijzigen.",
"budget": "Budget",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Actief",
"interest_date": "Rentedatum",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Datum",
"book_date": "Boekdatum",
@@ -161,7 +169,9 @@
"rate": "Wisselkoers"
},
"list": {
"title": "Titel",
"active": "Actief?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Reactie",
"delivery": "Bericht",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabell",
"welcome_back": "Korleis g\u00e5r det?",
"flash_error": "Feil!",
"flash_warning": "Advarsel!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Beskrivinga av den splitta transaksjonen",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Del opp",
"single_split": "Del opp",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaksjon #{ID} (\"{title}\")<\/a> har vorte lagra.",
@@ -33,7 +40,7 @@
"submit": "Send inn",
"amount": "Bel\u00f8p",
"date": "Dato",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "N\u00f8kkelord",
"no_budget": "(ingen budsjett)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "Nettadresse",
"active": "Aktiv",
"interest_date": "Rentedato",
"administration_currency": "Native currency",
"title": "Tittel",
"date": "Dato",
"book_date": "Bokf\u00f8ringsdato",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Tittel",
"active": "Er aktiv?",
"native_currency": "Native currency",
"trigger": "Utl\u00f8ser",
"response": "Respons",
"delivery": "Levering",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "Co jest grane?",
"flash_error": "B\u0142\u0105d!",
"flash_warning": "Ostrze\u017cenie!",
@@ -9,6 +15,7 @@
"select_source_account": "Wybierz lub wpisz prawid\u0142ow\u0105 nazw\u0119 konta \u017ar\u00f3d\u0142owego",
"split_transaction_title": "Opis podzielonej transakcji",
"errors_submission": "Co\u015b posz\u0142o nie tak w czasie zapisu. Prosz\u0119, sprawd\u017a b\u0142\u0119dy poni\u017cej.",
"is_reconciled": "Is reconciled",
"split": "Podziel",
"single_split": "Podzia\u0142",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transakcja #{ID} (\"{title}\")<\/a> zosta\u0142a zapisana.",
@@ -33,7 +40,7 @@
"submit": "Prze\u015blij",
"amount": "Kwota",
"date": "Data",
"is_reconciled_fields_dropped": "Poniewa\u017c ta transakcja jest uzgodniona, nie b\u0119dziesz w stanie zaktualizowa\u0107 ani kont, ani kwot.",
"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": "Tagi",
"no_budget": "(brak bud\u017cetu)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Aktywny",
"interest_date": "Data odsetek",
"administration_currency": "Native currency",
"title": "Tytu\u0142",
"date": "Data",
"book_date": "Data ksi\u0119gowania",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Tytu\u0142",
"active": "Jest aktywny?",
"native_currency": "Native currency",
"trigger": "Wyzwalacz",
"response": "Odpowied\u017a",
"delivery": "Dor\u0119czenie",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "O que est\u00e1 acontecendo?",
"flash_error": "Erro!",
"flash_warning": "Aten\u00e7\u00e3o!",
@@ -9,6 +15,7 @@
"select_source_account": "Por favor, selecione ou digite um nome de conta de origem v\u00e1lido",
"split_transaction_title": "Descri\u00e7\u00e3o da transa\u00e7\u00e3o dividida",
"errors_submission": "Algo deu errado com seu envio. Por favor, verifique os erros abaixo.",
"is_reconciled": "Is reconciled",
"split": "Dividir",
"single_split": "Divis\u00e3o",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transa\u00e7\u00e3o #{ID} (\"{title}\")<\/a> foi salva.",
@@ -33,7 +40,7 @@
"submit": "Enviar",
"amount": "Valor",
"date": "Data",
"is_reconciled_fields_dropped": "Como a transa\u00e7\u00e3o est\u00e1 reconciliada, voc\u00ea n\u00e3o pode atualizar as contas, nem o(s) valor(es).",
"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": "Tags",
"no_budget": "(sem or\u00e7amento)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Ativo",
"interest_date": "Data do juros",
"administration_currency": "Native currency",
"title": "T\u00edtulo",
"date": "Data",
"book_date": "Data de lan\u00e7amento",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtulo",
"active": "Est\u00e1 ativo?",
"native_currency": "Native currency",
"trigger": "Gatilho",
"response": "Resposta",
"delivery": "Entrega",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "Painel de controlo",
"flash_error": "Erro!",
"flash_warning": "Aviso!",
@@ -9,6 +15,7 @@
"select_source_account": "Por favor, selecione ou digite um nome de conta v\u00e1lido",
"split_transaction_title": "Descri\u00e7\u00e3o da transa\u00e7\u00e3o dividida",
"errors_submission": "Algo correu mal com o envio dos dados. Por favor verifique e corrija os erros abaixo.",
"is_reconciled": "Is reconciled",
"split": "Dividir",
"single_split": "Divis\u00e3o",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">A transa\u00e7\u00e3o #{ID} (\"{title}\")<\/a> foi guardada.",
@@ -33,7 +40,7 @@
"submit": "Guardar",
"amount": "Montante",
"date": "Data",
"is_reconciled_fields_dropped": "Como esta transa\u00e7\u00e3o est\u00e1 reconciliada, n\u00e3o pode atualizar as contas, nem os montantes.",
"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": "Etiquetas",
"no_budget": "(sem or\u00e7amento)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Ativo",
"interest_date": "Data de juros",
"administration_currency": "Native currency",
"title": "T\u00edtulo",
"date": "Data",
"book_date": "Data de registo",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "T\u00edtulo",
"active": "Esta ativo?",
"native_currency": "Native currency",
"trigger": "Gatilho",
"response": "Resposta",
"delivery": "Entrega",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabel",
"welcome_back": "Ce se red\u0103?",
"flash_error": "Eroare!",
"flash_warning": "Avertizare!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Descrierea tranzac\u021biei divizate",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "\u00cemparte",
"single_split": "\u00cemparte",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Tranzac\u021bia #{ID} (\"{title}\")<\/a> a fost stocat\u0103.",
@@ -33,7 +40,7 @@
"submit": "Trimite",
"amount": "Sum\u0103",
"date": "Dat\u0103",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Etichete",
"no_budget": "(nici un buget)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Activ",
"interest_date": "Data de interes",
"administration_currency": "Native currency",
"title": "Titlu",
"date": "Dat\u0103",
"book_date": "Rezerv\u0103 dat\u0103",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titlu",
"active": "Este activ?",
"native_currency": "Native currency",
"trigger": "Declan\u0219ator",
"response": "R\u0103spuns",
"delivery": "Livrare",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430",
"welcome_back": "\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u043e\u0438\u043c\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438?",
"flash_error": "\u041e\u0448\u0438\u0431\u043a\u0430!",
"flash_warning": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435!",
@@ -9,6 +15,7 @@
"select_source_account": "\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0438\u043c\u044f \u0441\u0447\u0435\u0442\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430",
"split_transaction_title": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438",
"errors_submission": "\u0421 \u0432\u0430\u0448\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u0436\u0435.",
"is_reconciled": "\u0421\u0432\u0435\u0440\u0435\u043d\u043e",
"split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c",
"single_split": "\u0420\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f #{ID} (\"{title}\")<\/a> \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430.",
@@ -21,7 +28,7 @@
"apply_rules_checkbox": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430",
"fire_webhooks_checkbox": "Fire webhooks",
"no_budget_pointer": "\u041f\u043e\u0445\u043e\u0436\u0435, \u0443 \u0432\u0430\u0441 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u0432. \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0445 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"budgets\">\u0411\u044e\u0434\u0436\u0435\u0442\u044b<\/a>. \u0411\u044e\u0434\u0436\u0435\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b.",
"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": "\u041f\u043e\u0445\u043e\u0436\u0435, \u0443 \u0432\u0430\u0441 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438. \u0412\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"subscriptions\">\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438<\/a>. \u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b.",
"source_account": "\u0421\u0447\u0451\u0442-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a",
"hidden_fields_preferences": "\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0432 <a href=\"preferences\">\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445<\/a>.",
"destination_account": "\u0421\u0447\u0451\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f",
@@ -33,7 +40,7 @@
"submit": "\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c",
"amount": "\u0421\u0443\u043c\u043c\u0430",
"date": "\u0414\u0430\u0442\u0430",
"is_reconciled_fields_dropped": "\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0441\u0432\u0435\u0440\u0435\u043d\u0430, \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0447\u0435\u0442\u0430, \u043d\u0438 \u0441\u0443\u043c\u043c\u0443(\u044b).",
"is_reconciled_fields_dropped": "\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0441\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u043b\u0430\u0433 \u0441\u0432\u0435\u0440\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0430 \u0438\u043b\u0438 \u0441\u0443\u043c\u043c\u044b.",
"tags": "\u041c\u0435\u0442\u043a\u0438",
"no_budget": "(\u0432\u043d\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u0430)",
"no_bill": "(\u043d\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438)",
@@ -131,12 +138,12 @@
"visit_webhook_url": "\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u044c URL \u0432\u0435\u0431\u0445\u0443\u043a\u0430",
"reset_webhook_secret": "",
"header_exchange_rates": "\u041a\u0443\u0440\u0441\u044b \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\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_intro": "Firefly III \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0443\u0440\u0441\u043e\u0432 \u043e\u0431\u043c\u0435\u043d\u0430. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.",
"exchange_rates_from_to": "\u041c\u0435\u0436\u0434\u0443 {from} \u0438 {to} (\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442)",
"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 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u044b. \u041e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u0443\u0440\u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d. \u0415\u0441\u043b\u0438 \u043d\u0430 \u0434\u0430\u0442\u0443 \u0441\u0434\u0435\u043b\u043a\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430, \u0442\u043e Firefly III \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0415\u0441\u043b\u0438 \u0438\u0445 \u043d\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043a\u0443\u0440\u0441 \"1\".",
"header_exchange_rates_rates": "\u041a\u0443\u0440\u0441\u044b \u0432\u0430\u043b\u044e\u0442",
"header_exchange_rates_table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043e\u0431\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u0443\u0440\u0441\u0430\u043c\u0438",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"help_rate_form": "\u0412 \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e {to} \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0437\u0430 \u043e\u0434\u043d\u043e\u0433\u043e {from}?",
"add_new_rate": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u0443\u0440\u0441",
"save_new_rate": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0430\u0440\u0438\u0444"
},
@@ -144,6 +151,7 @@
"url": "\u0421\u0441\u044b\u043b\u043a\u0430",
"active": "\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439",
"interest_date": "\u0414\u0430\u0442\u0430 \u043d\u0430\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432",
"administration_currency": "Native currency",
"title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",
"date": "\u0414\u0430\u0442\u0430",
"book_date": "\u0414\u0430\u0442\u0430 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f",
@@ -161,7 +169,9 @@
"rate": "\u041e\u0446\u0435\u043d\u0438\u0442\u044c"
},
"list": {
"title": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",
"active": "\u0410\u043a\u0442\u0438\u0432\u0435\u043d?",
"native_currency": "Native currency",
"trigger": "\u0421\u043e\u0431\u044b\u0442\u0438\u0435",
"response": "\u041e\u0442\u0432\u0435\u0442",
"delivery": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430",
@@ -170,6 +180,6 @@
},
"config": {
"html_language": "ru",
"date_time_fns": "Do MMMM yyyy, @ HH:mm:ss"
"date_time_fns": "D MMMM yyyy, @ HH:mm:ss"
}
}

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabu\u013eka",
"welcome_back": "Ako to ide?",
"flash_error": "Chyba!",
"flash_warning": "Varovanie!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Popis roz\u00fa\u010dtovania",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Roz\u00fa\u010dtova\u0165",
"single_split": "Roz\u00fa\u010dtova\u0165",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transakcia #{ID} (\"{title}\")<\/a> bola ulo\u017een\u00e1.",
@@ -33,7 +40,7 @@
"submit": "Odosla\u0165",
"amount": "Suma",
"date": "D\u00e1tum",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "\u0160t\u00edtky",
"no_budget": "(\u017eiadny rozpo\u010det)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Akt\u00edvne",
"interest_date": "\u00darokov\u00fd d\u00e1tum",
"administration_currency": "Native currency",
"title": "N\u00e1zov",
"date": "D\u00e1tum",
"book_date": "D\u00e1tum rezerv\u00e1cie",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "N\u00e1zov",
"active": "Akt\u00edvne?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Finan\u010dne administracije",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabela",
"welcome_back": "Kaj vse se dogaja?",
"flash_error": "Napaka!",
"flash_warning": "Opozorilo!",
@@ -9,6 +15,7 @@
"select_source_account": "Izberite ali vnesite veljavno ime izvornega ra\u010duna",
"split_transaction_title": "Opis razdeljene transakcije",
"errors_submission": "Nekaj je bilo narobe z va\u0161o oddajo. Preverite spodnje napake.",
"is_reconciled": "Je usklajena",
"split": "Razdeli",
"single_split": "Razdeli",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transakcija \u0161t. #{ID} (\"{title}\")<\/a> je bila shranjena.",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Aktivno",
"interest_date": "Datum obresti",
"administration_currency": "Native currency",
"title": "Naslov",
"date": "Datum",
"book_date": "Datum knji\u017eenja",
@@ -161,7 +169,9 @@
"rate": "Te\u010daj"
},
"list": {
"title": "Naslov",
"active": "Aktiviran?",
"native_currency": "Native currency",
"trigger": "Spro\u017eilec",
"response": "Odziv",
"delivery": "Dostava",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tabell",
"welcome_back": "Vad spelas?",
"flash_error": "Fel!",
"flash_warning": "Varning!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Beskrivning av delad transaktion",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Dela",
"single_split": "Dela",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaktion #{ID} (\"{title}\")<\/a> sparades.",
@@ -33,7 +40,7 @@
"submit": "Skicka",
"amount": "Belopp",
"date": "Datum",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Etiketter",
"no_budget": "(ingen budget)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "L\u00e4nk",
"active": "Aktiv",
"interest_date": "R\u00e4ntedatum",
"administration_currency": "Native currency",
"title": "Titel",
"date": "Datum",
"book_date": "Bokf\u00f6ringsdatum",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Titel",
"active": "\u00c4r aktiv?",
"native_currency": "Native currency",
"trigger": "Utl\u00f6sare",
"response": "Svar",
"delivery": "Leverans",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "Tablo",
"welcome_back": "Neler oluyor?",
"flash_error": "Hata!",
"flash_warning": "Uyar\u0131!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "Description of the split transaction",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "B\u00f6l",
"single_split": "B\u00f6l",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\u0130\u015flem #{ID} (\"{title}\")<\/a> sakl\u0131 olmu\u015ftur.",
@@ -33,7 +40,7 @@
"submit": "G\u00f6nder",
"amount": "Miktar",
"date": "Tarih",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Etiketler",
"no_budget": "(b\u00fct\u00e7e yok)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "Aktif",
"interest_date": "Faiz tarihi",
"administration_currency": "Native currency",
"title": "Ba\u015fl\u0131k",
"date": "Tarih",
"book_date": "Kitap Tarihi",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Ba\u015fl\u0131k",
"active": "Aktif mi?",
"native_currency": "Native currency",
"trigger": "Trigger",
"response": "Response",
"delivery": "Delivery",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u0422\u0430\u0431\u043b\u0438\u0446\u044f",
"welcome_back": "\u0429\u043e \u0432 \u0433\u0430\u043c\u0430\u043d\u0446\u0456?",
"flash_error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430!",
"flash_warning": "\u0423\u0432\u0430\u0433\u0430!",
@@ -9,6 +15,7 @@
"select_source_account": "\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0430\u0431\u043e \u0432\u0432\u0435\u0434\u0456\u0442\u044c \u0434\u0456\u0439\u0441\u043d\u0435 \u0456\u043c'\u044f \u0432\u0438\u0445\u0456\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u043b\u0456\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0443",
"split_transaction_title": "\u041e\u043f\u0438\u0441 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u0457 \u0440\u043e\u0437\u0434\u0456\u043b\u0435\u043d\u043d\u044f",
"errors_submission": "\u0429\u043e\u0441\u044c \u043d\u0435 \u0442\u0430\u043a \u0437 \u0432\u0430\u0448\u043e\u044e \u043f\u0440\u043e\u043f\u043e\u0437\u0438\u0446\u0456\u0454\u044e. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u043f\u043e\u043c\u0438\u043b\u043a\u0438 \u043d\u0438\u0436\u0447\u0435.",
"is_reconciled": "Is reconciled",
"split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438",
"single_split": "\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438",
"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.",
@@ -33,7 +40,7 @@
"submit": "\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438",
"amount": "\u0421\u0443\u043c\u0430",
"date": "\u0414\u0430\u0442\u0430",
"is_reconciled_fields_dropped": "\u0427\u0435\u0440\u0435\u0437 \u0442\u0435, \u0449\u043e \u0446\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0456\u044f \u0431\u0443\u043b\u0430 \u0432\u0438\u043a\u043e\u043d\u0430\u043d\u0430, \u0432\u0438 \u043d\u0435 \u0437\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u043e\u0431\u043b\u0456\u043a\u043e\u0432\u0456 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430 \u0442\u0430\u043a\u043e\u0436 \u0441\u0443\u043c\u0438(\u0457).",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s) unless you remove the reconciliation flag.",
"tags": "\u0422\u0435\u0433\u0438",
"no_budget": "(\u043f\u043e\u0437\u0430 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL-\u0430\u0434\u0440\u0435\u0441\u0430",
"active": "\u0410\u043a\u0442\u0438\u0432\u043d\u043e",
"interest_date": "\u0414\u0430\u0442\u0430 \u043d\u0430\u0440\u0430\u0445\u0443\u0432\u0430\u043d\u043d\u044f \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u0456\u0432",
"administration_currency": "Native currency",
"title": "\u041d\u0430\u0437\u0432\u0430",
"date": "\u0414\u0430\u0442\u0430",
"book_date": "\u0414\u0430\u0442\u0430 \u0431\u0440\u043e\u043d\u044e\u0432\u0430\u043d\u043d\u044f",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u041d\u0430\u0437\u0432\u0430",
"active": "\u0427\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0438\u0439?",
"native_currency": "Native currency",
"trigger": "\u0422\u0440\u0438\u0433\u0435\u0440",
"response": "\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c",
"delivery": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "B\u00e0n",
"welcome_back": "Ch\u00e0o m\u1eebng tr\u1edf l\u1ea1i?",
"flash_error": "L\u1ed7i!",
"flash_warning": "C\u1ea3nh b\u00e1o!",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "M\u00f4 t\u1ea3 giao d\u1ecbch t\u00e1ch",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "Chia ra",
"single_split": "Chia ra",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Giao d\u1ecbch #{ID} (\"{title}\")<\/a> \u0111\u00e3 \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef.",
@@ -33,7 +40,7 @@
"submit": "G\u1eedi",
"amount": "S\u1ed1 ti\u1ec1n",
"date": "Ng\u00e0y",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "Nh\u00e3n",
"no_budget": "(kh\u00f4ng c\u00f3 ng\u00e2n s\u00e1ch)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "H\u00e0nh \u0111\u1ed9ng",
"interest_date": "Ng\u00e0y l\u00e3i",
"administration_currency": "Native currency",
"title": "Ti\u00eau \u0111\u1ec1",
"date": "Ng\u00e0y",
"book_date": "Ng\u00e0y \u0111\u1eb7t s\u00e1ch",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "Ti\u00eau \u0111\u1ec1",
"active": "\u0110ang ho\u1ea1t \u0111\u1ed9ng?",
"native_currency": "Native currency",
"trigger": "K\u00edch ho\u1ea1t",
"response": "\u0110\u00e1p l\u1ea1i",
"delivery": "Ph\u00e2n ph\u1ed1i",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u8868\u683c",
"welcome_back": "\u4eca\u5929\u7406\u8d22\u4e86\u5417\uff1f",
"flash_error": "\u9519\u8bef\uff01",
"flash_warning": "\u8b66\u544a\uff01",
@@ -9,6 +15,7 @@
"select_source_account": "\u8bf7\u9009\u62e9\u6216\u8f93\u5165\u4e00\u4e2a\u6709\u6548\u7684\u6e90\u5e10\u6237\u540d\u79f0",
"split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0",
"errors_submission": "\u60a8\u7684\u63d0\u4ea4\u6709\u8bef\uff0c\u8bf7\u67e5\u770b\u4e0b\u9762\u8f93\u51fa\u7684\u9519\u8bef\u4fe1\u606f\u3002",
"is_reconciled": "\u5df2\u6838\u9500",
"split": "\u62c6\u5206",
"single_split": "\u62c6\u5206",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">\u4ea4\u6613 #{ID} (\u201c{title}\u201d)<\/a> \u5df2\u4fdd\u5b58\u3002",
@@ -33,7 +40,7 @@
"submit": "\u63d0\u4ea4",
"amount": "\u91d1\u989d",
"date": "\u65e5\u671f",
"is_reconciled_fields_dropped": "\u8fd9\u7b14\u4ea4\u6613\u5df2\u7ecf\u5bf9\u8d26\uff0c\u60a8\u65e0\u6cd5\u66f4\u65b0\u8d26\u6237\uff0c\u4e5f\u65e0\u6cd5\u66f4\u65b0\u91d1\u989d\u3002",
"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": "\u6807\u7b7e",
"no_budget": "(\u65e0\u9884\u7b97)",
"no_bill": "(no subscription)",
@@ -130,11 +137,11 @@
"response": "\u54cd\u5e94",
"visit_webhook_url": "\u8bbf\u95ee webhook URL",
"reset_webhook_secret": "\u91cd\u7f6e webhook \u5bc6\u94a5",
"header_exchange_rates": "Exchange rates",
"header_exchange_rates": "\u6c47\u7387",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III uses the following exchange rates. The inverse is automatically calculated when it is not provided. If no exchange rate exists for the date of the transaction, Firefly III will go back in time to find one. If none are present, the rate \"1\" will be used.",
"header_exchange_rates_rates": "Exchange rates",
"header_exchange_rates_rates": "\u6c47\u7387",
"header_exchange_rates_table": "Table with exchange rates",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"add_new_rate": "Add a new exchange rate",
@@ -144,6 +151,7 @@
"url": "\u7f51\u5740",
"active": "\u542f\u7528",
"interest_date": "\u5229\u606f\u65e5\u671f",
"administration_currency": "Native currency",
"title": "\u6807\u9898",
"date": "\u65e5\u671f",
"book_date": "\u767b\u8bb0\u65e5\u671f",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u6807\u9898",
"active": "\u662f\u5426\u542f\u7528\uff1f",
"native_currency": "Native currency",
"trigger": "\u89e6\u53d1\u6761\u4ef6",
"response": "\u7b54\u590d",
"delivery": "\u4ea4\u4ed8",

View File

@@ -1,5 +1,11 @@
{
"firefly": {
"administrations_page_title": "Financial administrations",
"administrations_index_menu": "Financial administrations",
"temp_administrations_introduction": "Firefly III will soon get the ability to manage multiple financial administrations. Right now, you only have the one. You can set the title of this administration and its native currency. This replaces the previous setting where you would set your \"default currency\". This setting is now tied to the financial administration and can be different per administration.",
"administration_currency_form_help": "It may take a long time for the page to load if you change the native currency because transaction may need to be converted to your (new) native currency.",
"administrations_page_edit_sub_title_js": "Edit financial administration \"{title}\"",
"table": "\u8868\u683c",
"welcome_back": "What's playing?",
"flash_error": "\u932f\u8aa4\uff01",
"flash_warning": "\u8b66\u544a\uff01",
@@ -9,6 +15,7 @@
"select_source_account": "Please select or type a valid source account name",
"split_transaction_title": "\u62c6\u5206\u4ea4\u6613\u7684\u63cf\u8ff0",
"errors_submission": "There was something wrong with your submission. Please check out the errors below.",
"is_reconciled": "Is reconciled",
"split": "\u5206\u5272",
"single_split": "\u62c6\u5206",
"transaction_stored_link": "<a href=\"transactions\/show\/{ID}\">Transaction #{ID} (\"{title}\")<\/a> has been stored.",
@@ -33,7 +40,7 @@
"submit": "\u9001\u51fa",
"amount": "\u91d1\u984d",
"date": "\u65e5\u671f",
"is_reconciled_fields_dropped": "Because this transaction is reconciled, you will not be able to update the accounts, nor the amount(s).",
"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": "\u6a19\u7c64",
"no_budget": "(\u7121\u9810\u7b97)",
"no_bill": "(no subscription)",
@@ -144,6 +151,7 @@
"url": "URL",
"active": "\u555f\u7528",
"interest_date": "\u5229\u7387\u65e5\u671f",
"administration_currency": "Native currency",
"title": "\u6a19\u984c",
"date": "\u65e5\u671f",
"book_date": "\u767b\u8a18\u65e5\u671f",
@@ -161,7 +169,9 @@
"rate": "Rate"
},
"list": {
"title": "\u6a19\u984c",
"active": "\u662f\u5426\u555f\u7528\uff1f",
"native_currency": "Native currency",
"trigger": "\u89f8\u767c\u5668",
"response": "\u56de\u61c9",
"delivery": "Delivery",

View File

@@ -50,3 +50,7 @@ mix.js('src/webhooks/show.js', 'build/webhooks').vue({version: 2}).copy('build',
// exchange rates
mix.js('src/exchange-rates/index.js', 'build/exchange-rates').vue({version: 2});
mix.js('src/exchange-rates/rates.js', 'build/exchange-rates').vue({version: 2});
// administrations
mix.js('src/administrations/index.js', 'build/administrations').vue({version: 2});
mix.js('src/administrations/edit.js', 'build/administrations').vue({version: 2});

View File

@@ -22,7 +22,7 @@
declare(strict_types=1);
// Ignore this comment
return [
];

View File

@@ -20,7 +20,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Ignore this comment
declare(strict_types=1);

View File

@@ -20,7 +20,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Ignore this comment
declare(strict_types=1);
@@ -56,7 +56,7 @@ return [
'transfer_list' => 'Transfers',
'transfers_list' => 'Transfers',
// Ignore this comment
'reconciliation_list' => 'Reconciliations',
'create_withdrawal' => 'Create new withdrawal',

View File

@@ -20,7 +20,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Ignore this comment
declare(strict_types=1);

View File

@@ -20,7 +20,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Ignore this comment
declare(strict_types=1);
@@ -41,7 +41,7 @@ return [
// 'month_and_day_no_year' => '%B %e',
'month_and_day_no_year_js' => 'MMMM Do',
// Ignore this comment
// 'date_time' => '%B %e, %Y, @ %T',
'date_time_js' => 'MMMM Do, YYYY, @ HH:mm:ss',
@@ -71,5 +71,3 @@ return [
'dow_6' => 'Saturday',
'dow_7' => 'Sunday',
];
// Ignore this comment

View File

@@ -20,7 +20,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Ignore this comment
declare(strict_types=1);
@@ -37,5 +37,3 @@ return [
'piggy-banks-index' => 'As you can see, there are three piggy banks. Use the plus and minus buttons to influence the amount of money in each piggy bank. Click the name of the piggy bank to see the administration for each piggy bank.',
'profile-index' => 'Keep in mind that the demo site resets every four hours. Your access may be revoked at any time. This happens automatically and is not a bug.',
];
// Ignore this comment

View File

@@ -20,7 +20,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// Ignore this comment
declare(strict_types=1);
@@ -36,7 +36,7 @@ return [
'admin_test_body' => 'This is a test message from your Firefly III instance. It was sent to :email.',
'admin_test_message' => 'This is a test message from your Firefly III instance over channel ":channel".',
// Ignore this comment
// invite
'invitation_created_subject' => 'An invitation has been created',
@@ -85,7 +85,7 @@ return [
'registered_pw_reset_link' => 'Password reset:',
'registered_doc_link' => 'Documentation:',
// Ignore this comment
// new version
'new_version_email_subject' => 'A new Firefly III version is available',
@@ -132,7 +132,7 @@ return [
'error_headers' => 'The following headers may also be relevant:',
'error_post' => 'This was submitted by the user:',
// Ignore this comment
// report new journals
'new_journals_subject' => 'Firefly III has created a new transaction|Firefly III has created :count new transactions',
@@ -190,4 +190,3 @@ return [
'mfa_many_failed_attempts_warning' => 'If you did not do this, please contact your administrator immediately or check out the Firefly III documentation.',
];
// Ignore this comment

Some files were not shown because too many files have changed in this diff Show More