mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-12-25 12:41:20 +00:00
Compare commits
27 Commits
develop-20
...
develop-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36d9e5c3fe | ||
|
|
8d614de67f | ||
|
|
d17da670ab | ||
|
|
5bf4df9ad8 | ||
|
|
07db6b59ce | ||
|
|
e16f1cf4ee | ||
|
|
4c80d929ca | ||
|
|
16364d9859 | ||
|
|
c24f6acb2c | ||
|
|
4bd19e0627 | ||
|
|
69d839997a | ||
|
|
c02c027f4f | ||
|
|
b14606625e | ||
|
|
222d7b56c7 | ||
|
|
b7f7bf42b2 | ||
|
|
0cbd64d31a | ||
|
|
60bdae47c4 | ||
|
|
ca4b38d905 | ||
|
|
3674465f53 | ||
|
|
b951d4130c | ||
|
|
7992b810fd | ||
|
|
c1c0afa40b | ||
|
|
56c9026299 | ||
|
|
021ddfc36b | ||
|
|
feabfe54f0 | ||
|
|
565409b486 | ||
|
|
f57366da5f |
168
.ci/php-cs-fixer/composer.lock
generated
168
.ci/php-cs-fixer/composer.lock
generated
@@ -160,16 +160,16 @@
|
||||
},
|
||||
{
|
||||
"name": "composer/xdebug-handler",
|
||||
"version": "3.0.4",
|
||||
"version": "3.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/xdebug-handler.git",
|
||||
"reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255"
|
||||
"reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
|
||||
"reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
|
||||
"reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -206,7 +206,7 @@
|
||||
"support": {
|
||||
"irc": "ircs://irc.libera.chat:6697/composer",
|
||||
"issues": "https://github.com/composer/xdebug-handler/issues",
|
||||
"source": "https://github.com/composer/xdebug-handler/tree/3.0.4"
|
||||
"source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -222,20 +222,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-26T18:29:49+00:00"
|
||||
"time": "2024-05-06T16:37:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "friendsofphp/php-cs-fixer",
|
||||
"version": "v3.54.0",
|
||||
"version": "v3.56.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||
"reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08"
|
||||
"reference": "4429303e62a4ce583ddfe64ff5c34c76bcf74931"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2aecbc8640d7906c38777b3dcab6f4ca79004d08",
|
||||
"reference": "2aecbc8640d7906c38777b3dcab6f4ca79004d08",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/4429303e62a4ce583ddfe64ff5c34c76bcf74931",
|
||||
"reference": "4429303e62a4ce583ddfe64ff5c34c76bcf74931",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -307,7 +307,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.54.0"
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.56.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -315,7 +315,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-17T08:12:13+00:00"
|
||||
"time": "2024-05-07T15:50:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
@@ -539,16 +539,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v7.0.6",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5"
|
||||
"reference": "c981e0e9380ce9f146416bde3150c79197ce9986"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
|
||||
"reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/c981e0e9380ce9f146416bde3150c79197ce9986",
|
||||
"reference": "c981e0e9380ce9f146416bde3150c79197ce9986",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -612,7 +612,7 @@
|
||||
"terminal"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/console/tree/v7.0.6"
|
||||
"source": "https://github.com/symfony/console/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -628,20 +628,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-04-01T11:04:53+00:00"
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
"version": "v3.4.0",
|
||||
"version": "v3.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -650,7 +650,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.4-dev"
|
||||
"dev-main": "3.5-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
@@ -679,7 +679,7 @@
|
||||
"description": "A generic function and convention to trigger deprecation notices",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
|
||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -695,20 +695,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-05-23T14:45:45+00:00"
|
||||
"time": "2024-04-18T09:32:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v7.0.3",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "834c28d533dd0636f910909d01b9ff45cc094b5e"
|
||||
"reference": "db2a7fab994d67d92356bb39c367db115d9d30f9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e",
|
||||
"reference": "834c28d533dd0636f910909d01b9ff45cc094b5e",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db2a7fab994d67d92356bb39c367db115d9d30f9",
|
||||
"reference": "db2a7fab994d67d92356bb39c367db115d9d30f9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -759,7 +759,7 @@
|
||||
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3"
|
||||
"source": "https://github.com/symfony/event-dispatcher/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -775,20 +775,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-23T15:02:46+00:00"
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher-contracts",
|
||||
"version": "v3.4.2",
|
||||
"version": "v3.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
|
||||
"reference": "4e64b49bf370ade88e567de29465762e316e4224"
|
||||
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/4e64b49bf370ade88e567de29465762e316e4224",
|
||||
"reference": "4e64b49bf370ade88e567de29465762e316e4224",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50",
|
||||
"reference": "8f93aec25d41b72493c6ddff14e916177c9efc50",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -798,7 +798,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.4-dev"
|
||||
"dev-main": "3.5-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
@@ -835,7 +835,7 @@
|
||||
"standards"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.2"
|
||||
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -851,26 +851,27 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-23T14:51:35+00:00"
|
||||
"time": "2024-04-18T09:32:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v7.0.6",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/filesystem.git",
|
||||
"reference": "408105dff4c104454100730bdfd1a9cdd993f04d"
|
||||
"reference": "cc168be6fbdcdf3401f50ae863ee3818ed4338f5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/408105dff4c104454100730bdfd1a9cdd993f04d",
|
||||
"reference": "408105dff4c104454100730bdfd1a9cdd993f04d",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/cc168be6fbdcdf3401f50ae863ee3818ed4338f5",
|
||||
"reference": "cc168be6fbdcdf3401f50ae863ee3818ed4338f5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/polyfill-ctype": "~1.8",
|
||||
"symfony/polyfill-mbstring": "~1.8"
|
||||
"symfony/polyfill-mbstring": "~1.8",
|
||||
"symfony/process": "^6.4|^7.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -898,7 +899,7 @@
|
||||
"description": "Provides basic utilities for the filesystem",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/filesystem/tree/v7.0.6"
|
||||
"source": "https://github.com/symfony/filesystem/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -914,20 +915,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-21T19:37:36+00:00"
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v7.0.0",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56"
|
||||
"reference": "4d58f0f4fe95a30d7b538d71197135483560b97c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
|
||||
"reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/4d58f0f4fe95a30d7b538d71197135483560b97c",
|
||||
"reference": "4d58f0f4fe95a30d7b538d71197135483560b97c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -962,7 +963,7 @@
|
||||
"description": "Finds files and directories via an intuitive fluent interface",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/finder/tree/v7.0.0"
|
||||
"source": "https://github.com/symfony/finder/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -978,20 +979,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-10-31T17:59:56+00:00"
|
||||
"time": "2024-04-28T11:44:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/options-resolver",
|
||||
"version": "v7.0.0",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/options-resolver.git",
|
||||
"reference": "700ff4096e346f54cb628ea650767c8130f1001f"
|
||||
"reference": "23cc173858776ad451e31f053b1c9f47840b2cfa"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/700ff4096e346f54cb628ea650767c8130f1001f",
|
||||
"reference": "700ff4096e346f54cb628ea650767c8130f1001f",
|
||||
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/23cc173858776ad451e31f053b1c9f47840b2cfa",
|
||||
"reference": "23cc173858776ad451e31f053b1c9f47840b2cfa",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1029,7 +1030,7 @@
|
||||
"options"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/options-resolver/tree/v7.0.0"
|
||||
"source": "https://github.com/symfony/options-resolver/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1045,7 +1046,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-08-08T10:20:21+00:00"
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
@@ -1523,16 +1524,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v7.0.4",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9"
|
||||
"reference": "3839e56b94dd1dbd13235d27504e66baf23faba0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9",
|
||||
"reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/3839e56b94dd1dbd13235d27504e66baf23faba0",
|
||||
"reference": "3839e56b94dd1dbd13235d27504e66baf23faba0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1564,7 +1565,7 @@
|
||||
"description": "Executes commands in sub-processes",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/process/tree/v7.0.4"
|
||||
"source": "https://github.com/symfony/process/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1580,25 +1581,26 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-22T20:27:20+00:00"
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
"version": "v3.4.2",
|
||||
"version": "v3.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/service-contracts.git",
|
||||
"reference": "11bbf19a0fb7b36345861e85c5768844c552906e"
|
||||
"reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e",
|
||||
"reference": "11bbf19a0fb7b36345861e85c5768844c552906e",
|
||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
|
||||
"reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"psr/container": "^1.1|^2.0"
|
||||
"psr/container": "^1.1|^2.0",
|
||||
"symfony/deprecation-contracts": "^2.5|^3"
|
||||
},
|
||||
"conflict": {
|
||||
"ext-psr": "<1.1|>=2"
|
||||
@@ -1606,7 +1608,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "3.4-dev"
|
||||
"dev-main": "3.5-dev"
|
||||
},
|
||||
"thanks": {
|
||||
"name": "symfony/contracts",
|
||||
@@ -1646,7 +1648,7 @@
|
||||
"standards"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/service-contracts/tree/v3.4.2"
|
||||
"source": "https://github.com/symfony/service-contracts/tree/v3.5.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1662,20 +1664,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-12-19T21:51:00+00:00"
|
||||
"time": "2024-04-18T09:32:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/stopwatch",
|
||||
"version": "v7.0.3",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/stopwatch.git",
|
||||
"reference": "983900d6fddf2b0cbaacacbbad07610854bd8112"
|
||||
"reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112",
|
||||
"reference": "983900d6fddf2b0cbaacacbbad07610854bd8112",
|
||||
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/41a7a24aa1dc82adf46a06bc292d1923acfe6b84",
|
||||
"reference": "41a7a24aa1dc82adf46a06bc292d1923acfe6b84",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1708,7 +1710,7 @@
|
||||
"description": "Provides a way to profile code",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/stopwatch/tree/v7.0.3"
|
||||
"source": "https://github.com/symfony/stopwatch/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1724,20 +1726,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-01-23T15:02:46+00:00"
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/string",
|
||||
"version": "v7.0.4",
|
||||
"version": "v7.0.7",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "f5832521b998b0bec40bee688ad5de98d4cf111b"
|
||||
"reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b",
|
||||
"reference": "f5832521b998b0bec40bee688ad5de98d4cf111b",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/e405b5424dc2528e02e31ba26b83a79fd4eb8f63",
|
||||
"reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1794,7 +1796,7 @@
|
||||
"utf8"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/string/tree/v7.0.4"
|
||||
"source": "https://github.com/symfony/string/tree/v7.0.7"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1810,7 +1812,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-02-01T13:17:36+00:00"
|
||||
"time": "2024-04-18T09:29:19+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
||||
193
THANKS.md
Executable file
193
THANKS.md
Executable file
@@ -0,0 +1,193 @@
|
||||
# Thank you! :tada: :heart: :tada:
|
||||
|
||||
Over time, many people have contributed to Firefly III. Their efforts are not always visible, but always remembered and appreciated.
|
||||
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
||||
|
||||
## 2024
|
||||
- imlonghao
|
||||
- Rahman Yusuf
|
||||
- Michael Thomas
|
||||
- WardenJakx
|
||||
- kuilin
|
||||
- Stevie Robinson
|
||||
- luzpaz
|
||||
- Lemuel Roberto Bonifácio
|
||||
- maureenferreira
|
||||
|
||||
## 2023
|
||||
- tieu1991
|
||||
- Maxco10
|
||||
- zqye
|
||||
- Mateus Pereira
|
||||
- josephbadow
|
||||
- Christian Desktop
|
||||
- Edgars
|
||||
- Hannah K
|
||||
- noxonad
|
||||
- Kaijia Feng
|
||||
- Marc Ordinas i Llopis
|
||||
- Kuba Turek
|
||||
- Julien Stébenne
|
||||
|
||||
## 2022
|
||||
- Johannes Zellner
|
||||
- Janne Heß
|
||||
- charlesteets
|
||||
- Nathan PERIER
|
||||
- Jan Willhaus
|
||||
- canoine
|
||||
- Rick Cuddy
|
||||
- James
|
||||
- Hugo Meyronneinc
|
||||
- naveen
|
||||
- neilnaveen
|
||||
- naveensrinivasan
|
||||
- Federico Micelli
|
||||
- George Hahn
|
||||
|
||||
## 2021
|
||||
- StillLoading
|
||||
- Igor Rzegocki
|
||||
- Lorenzo Breda
|
||||
- Hosh
|
||||
- Flightkick
|
||||
- alex6480
|
||||
- VREEdom
|
||||
- Hamza FADIL
|
||||
- Kasper Læssø Sørensen
|
||||
- Alex
|
||||
- Jeroen De Meerleer
|
||||
- Ruben van Erk
|
||||
- Fabian Zimmermann
|
||||
- Mirko Berger
|
||||
- KaihatsuOnline
|
||||
- MihataBG
|
||||
|
||||
## 2020
|
||||
- Hannes Körber
|
||||
- Julien Cassagne
|
||||
- bu4ak
|
||||
- Viktor Yakovlev
|
||||
- Oliver Kaufmann
|
||||
- Arvind Chembarpu
|
||||
- GrayStrider
|
||||
- psychowood
|
||||
- Hosh Sadiq
|
||||
- emansih
|
||||
- Aniruddha Maru
|
||||
- johnny
|
||||
- sephrat
|
||||
- bpatath
|
||||
- Florian Dupret
|
||||
- Maxim Kurbatov
|
||||
- Lucas Guima
|
||||
- Sandro
|
||||
- Ruben Verhoef
|
||||
- Daniel Idzerda
|
||||
- Calum Smith
|
||||
- Agraphie
|
||||
- Tomer Shvueli
|
||||
- Tomer S
|
||||
|
||||
## 2019
|
||||
- Pascal Jungblut
|
||||
- Justyn Shull
|
||||
- Timendum
|
||||
- Nicolas Lœuillet
|
||||
- Dominic Guhl
|
||||
- Melroy van den Berg
|
||||
- Henning Stein
|
||||
- Jan Klepek
|
||||
- Jonathan
|
||||
- Geoffrey “Frogeye” Preud'homme
|
||||
- Michael Fix
|
||||
- Juraj Mlich
|
||||
- Eddybrando Vásquez
|
||||
- hulloanson
|
||||
- Will Rouesnel
|
||||
- lastlink
|
||||
- Mr. Funk
|
||||
- Simon Taddiken
|
||||
- Joris
|
||||
- Bastiaan Nijkamp
|
||||
|
||||
## 2018
|
||||
- a1ex4
|
||||
- Daniel Quah
|
||||
- Marco Lourenço
|
||||
- Dennis Enderink
|
||||
- Luca Bognolo
|
||||
- Mike Conway
|
||||
- Ben
|
||||
- Mathieu Post
|
||||
- George Hertz
|
||||
- HamuZ HamuZ
|
||||
- David Meiseles
|
||||
- Erik Gelderblom
|
||||
- Luca Vallerini
|
||||
- Clemens Wijnekus
|
||||
- Jacob Weisz
|
||||
- Mateusz Gozdek
|
||||
- anmol26s
|
||||
- Kevin Hellemun
|
||||
- Shashank M Chakravarthy
|
||||
- Nico Schreiner
|
||||
- Paul Sohier
|
||||
- Brenden Conte
|
||||
- Ben Yanke
|
||||
- Andrew Prokhorenkov
|
||||
- devlearner
|
||||
- Kelvin
|
||||
- J'informatique
|
||||
|
||||
## 2017
|
||||
- Victor Mosin
|
||||
- Justin
|
||||
- Hugo van Duijn
|
||||
- Lukas Winkler
|
||||
- Marcin Szymanski
|
||||
- Jens Kat
|
||||
- koziolek
|
||||
- jleeong
|
||||
- Simon Hanna
|
||||
- richard & xeli.eu
|
||||
- Sergey Besedin
|
||||
- Welbert Serra
|
||||
- Joris de Vries
|
||||
- Patrick Kostjens
|
||||
- Enrico Lamperti
|
||||
- Christian Musa
|
||||
- Enno Lohmeier
|
||||
|
||||
## 2016
|
||||
- Sander
|
||||
- Toon Schoenmakers
|
||||
- Telyn
|
||||
- Sander Kleykens
|
||||
- Tom van der Werf
|
||||
- Matthew Peck
|
||||
- Sander Mulders
|
||||
- Bonno Nachtegaal-Karels
|
||||
- Niek Haarman
|
||||
- Edwin
|
||||
- Thijs Alkemade
|
||||
- zjean
|
||||
- Graham Miller
|
||||
- Robert Horlings
|
||||
- leander091
|
||||
|
||||
## 2015
|
||||
- Antonio Spinelli
|
||||
- Colin O'Dell
|
||||
- RonaldvanMeer
|
||||
- Richard Ebbers
|
||||
- Balazs Varkonyi
|
||||
- Niek van der Kooy
|
||||
- Ilya Kil
|
||||
|
||||
## 2014
|
||||
- Stewart Malik
|
||||
- Graham Campbell
|
||||
|
||||
|
||||
Thank you for all your support!
|
||||
@@ -32,6 +32,7 @@ use FireflyIII\Models\Preference;
|
||||
use FireflyIII\Transformers\PreferenceTransformer;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Collection;
|
||||
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
||||
use League\Fractal\Resource\Collection as FractalCollection;
|
||||
use League\Fractal\Resource\Item;
|
||||
@@ -97,6 +98,32 @@ class PreferencesController extends Controller
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO This endpoint is not documented.
|
||||
*
|
||||
* Return a single preference by name.
|
||||
*/
|
||||
public function showList(Collection $collection): JsonResponse
|
||||
{
|
||||
$manager = $this->getManager();
|
||||
$count = $collection->count();
|
||||
$pageSize = $this->parameters->get('limit');
|
||||
$preferences = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||
|
||||
// make paginator:
|
||||
$paginator = new LengthAwarePaginator($preferences, $count, $pageSize, $this->parameters->get('page'));
|
||||
$paginator->setPath(route('api.v1.preferences.show-list').$this->buildParams());
|
||||
|
||||
/** @var PreferenceTransformer $transformer */
|
||||
$transformer = app(PreferenceTransformer::class);
|
||||
$transformer->setParameters($this->parameters);
|
||||
|
||||
$resource = new FractalCollection($preferences, $transformer, self::RESOURCE_KEY);
|
||||
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||
|
||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* This endpoint is documented at:
|
||||
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/preferences/storePreference
|
||||
|
||||
@@ -157,6 +157,9 @@ class Controller extends BaseController
|
||||
{
|
||||
$manager = new Manager();
|
||||
$baseUrl = request()->getSchemeAndHttpHost().'/api/v2';
|
||||
|
||||
// TODO add stuff to path?
|
||||
|
||||
$manager->setSerializer(new JsonApiSerializer($baseUrl));
|
||||
|
||||
$objects = $paginator->getCollection();
|
||||
|
||||
@@ -30,6 +30,7 @@ use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
||||
use FireflyIII\Transformers\V2\AccountTransformer;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class IndexController extends Controller
|
||||
{
|
||||
@@ -57,21 +58,35 @@ class IndexController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO the sort instructions need proper repeatable documentation.
|
||||
* TODO see autocomplete/account controller for list.
|
||||
*/
|
||||
public function index(IndexRequest $request): JsonResponse
|
||||
{
|
||||
$this->repository->resetAccountOrder();
|
||||
$types = $request->getAccountTypes();
|
||||
$instructions = $request->getSortInstructions('accounts');
|
||||
$accounts = $this->repository->getAccountsByType($types, $instructions);
|
||||
$pageSize = $this->parameters->get('limit');
|
||||
$count = $accounts->count();
|
||||
$accounts = $accounts->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
|
||||
$transformer = new AccountTransformer();
|
||||
$types = $request->getAccountTypes();
|
||||
$sorting = $request->getSortInstructions('accounts');
|
||||
$filters = $request->getFilterInstructions('accounts');
|
||||
$accounts = $this->repository->getAccountsByType($types, $sorting, $filters);
|
||||
$pageSize = $this->parameters->get('limit');
|
||||
$count = $accounts->count();
|
||||
|
||||
$this->parameters->set('sort', $instructions);
|
||||
// depending on the sort parameters, this list must not be split, because the
|
||||
// order is calculated in the account transformer and by that time it's too late.
|
||||
$first = array_key_first($sorting);
|
||||
$disablePagination = in_array($first, ['last_activity', 'balance', 'balance_difference'], true);
|
||||
Log::debug(sprintf('Will disable pagination in account index v2? %s', var_export($disablePagination, true)));
|
||||
if (!$disablePagination) {
|
||||
$accounts = $accounts->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||
}
|
||||
$paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
|
||||
$transformer = new AccountTransformer();
|
||||
|
||||
$this->parameters->set('disablePagination', $disablePagination);
|
||||
$this->parameters->set('pageSize', $pageSize);
|
||||
$this->parameters->set('sort', $sorting);
|
||||
|
||||
$this->parameters->set('filters', $filters);
|
||||
$transformer->setParameters($this->parameters); // give params to transformer
|
||||
|
||||
return response()
|
||||
|
||||
@@ -27,6 +27,7 @@ use Carbon\Carbon;
|
||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||
use FireflyIII\Support\Request\ChecksLogin;
|
||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||
use FireflyIII\Support\Request\GetFilterInstructions;
|
||||
use FireflyIII\Support\Request\GetSortInstructions;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
@@ -40,6 +41,7 @@ class IndexRequest extends FormRequest
|
||||
use AccountFilter;
|
||||
use ChecksLogin;
|
||||
use ConvertsDataTypes;
|
||||
use GetFilterInstructions;
|
||||
use GetSortInstructions;
|
||||
|
||||
public function getAccountTypes(): array
|
||||
|
||||
@@ -29,6 +29,7 @@ use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\ConnectException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use GuzzleHttp\Exception\RequestException;
|
||||
use Illuminate\Bus\Queueable;
|
||||
@@ -100,7 +101,7 @@ class DownloadExchangeRates implements ShouldQueue
|
||||
|
||||
try {
|
||||
$res = $client->get($url);
|
||||
} catch (RequestException $e) {
|
||||
} catch (ConnectException|RequestException $e) {
|
||||
app('log')->warning(sprintf('Trying to grab "%s" resulted in error "%d".', $url, $e->getMessage()));
|
||||
|
||||
return;
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Repositories\UserGroups\Account;
|
||||
use FireflyIII\Models\Account;
|
||||
use FireflyIII\Models\AccountMeta;
|
||||
use FireflyIII\Models\AccountType;
|
||||
use FireflyIII\Models\ObjectGroup;
|
||||
use FireflyIII\Models\Transaction;
|
||||
use FireflyIII\Models\TransactionCurrency;
|
||||
use FireflyIII\Services\Internal\Update\AccountUpdateService;
|
||||
@@ -240,7 +241,7 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
}
|
||||
}
|
||||
|
||||
public function getAccountsByType(array $types, ?array $sort = []): Collection
|
||||
public function getAccountsByType(array $types, ?array $sort = [], ?array $filters = []): Collection
|
||||
{
|
||||
$sortable = ['name', 'active']; // TODO yes this is a duplicate array.
|
||||
$res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types);
|
||||
@@ -249,6 +250,22 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
$query->accountTypeIn($types);
|
||||
}
|
||||
|
||||
// process filters
|
||||
// TODO this should be repeatable, it feels like a hack when you do it here.
|
||||
// TODO some fields cannot be filtered using the query, and a second filter must be applied on the collection.
|
||||
foreach ($filters as $column => $value) {
|
||||
// filter on NULL values
|
||||
if (null === $value) {
|
||||
continue;
|
||||
}
|
||||
if ('active' === $column) {
|
||||
$query->where('accounts.active', $value);
|
||||
}
|
||||
if ('name' === $column) {
|
||||
$query->where('accounts.name', 'LIKE', sprintf('%%%s%%', $value));
|
||||
}
|
||||
}
|
||||
|
||||
// add sort parameters. At this point they're filtered to allowed fields to sort by:
|
||||
$hasActiveColumn = array_key_exists('active', $sort);
|
||||
if (count($sort) > 0) {
|
||||
@@ -337,4 +354,34 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
->get(['transactions.account_id', DB::raw('MAX(transaction_journals.date) as date_max')])->toArray() // @phpstan-ignore-line
|
||||
;
|
||||
}
|
||||
|
||||
#[\Override]
|
||||
public function getObjectGroups(Collection $accounts): array
|
||||
{
|
||||
$groupIds = [];
|
||||
$return = [];
|
||||
$set = DB::table('object_groupables')->where('object_groupable_type', Account::class)
|
||||
->whereIn('object_groupable_id', $accounts->pluck('id')->toArray())->get()
|
||||
;
|
||||
|
||||
/** @var \stdClass $row */
|
||||
foreach ($set as $row) {
|
||||
$groupIds[] = $row->object_group_id;
|
||||
}
|
||||
$groupIds = array_unique($groupIds);
|
||||
$groups = ObjectGroup::whereIn('id', $groupIds)->get();
|
||||
|
||||
/** @var \stdClass $row */
|
||||
foreach ($set as $row) {
|
||||
if (!array_key_exists($row->object_groupable_id, $return)) {
|
||||
/** @var null|ObjectGroup $group */
|
||||
$group = $groups->firstWhere('id', '=', $row->object_group_id);
|
||||
if (null !== $group) {
|
||||
$return[$row->object_groupable_id] = ['title' => $group->title, 'order' => $group->order, 'id' => $group->id];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ interface AccountRepositoryInterface
|
||||
|
||||
public function getAccountsById(array $accountIds): Collection;
|
||||
|
||||
public function getAccountsByType(array $types, ?array $sort = []): Collection;
|
||||
public function getAccountsByType(array $types, ?array $sort = [], ?array $filters = []): Collection;
|
||||
|
||||
/**
|
||||
* Used in the infinite accounts list.
|
||||
@@ -69,6 +69,8 @@ interface AccountRepositoryInterface
|
||||
*/
|
||||
public function getMetaValue(Account $account, string $field): ?string;
|
||||
|
||||
public function getObjectGroups(Collection $accounts): array;
|
||||
|
||||
public function getUserGroup(): UserGroup;
|
||||
|
||||
/**
|
||||
|
||||
77
app/Support/Request/GetFilterInstructions.php
Normal file
77
app/Support/Request/GetFilterInstructions.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/*
|
||||
* GetFilterInstructions.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\Support\Request;
|
||||
|
||||
trait GetFilterInstructions
|
||||
{
|
||||
private const string INVALID_FILTER = '%INVALID_JAMES_%';
|
||||
|
||||
final public function getFilterInstructions(string $key): array
|
||||
{
|
||||
$config = config(sprintf('firefly.filters.allowed.%s', $key));
|
||||
$allowed = array_keys($config);
|
||||
$set = $this->get('filters', []);
|
||||
$result = [];
|
||||
if (0 === count($set)) {
|
||||
return [];
|
||||
}
|
||||
foreach ($set as $info) {
|
||||
$column = $info['column'] ?? 'NOPE';
|
||||
$filterValue = (string) ($info['filter'] ?? self::INVALID_FILTER);
|
||||
if (false === in_array($column, $allowed, true)) {
|
||||
// skip invalid column
|
||||
continue;
|
||||
}
|
||||
$filterType = $config[$column] ?? false;
|
||||
|
||||
switch ($filterType) {
|
||||
default:
|
||||
exit(sprintf('Do not support filter type "%s"', $filterType));
|
||||
|
||||
case 'boolean':
|
||||
$filterValue = $this->booleanInstruction($filterValue);
|
||||
|
||||
break;
|
||||
|
||||
case 'string':
|
||||
break;
|
||||
}
|
||||
$result[$column] = $filterValue;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function booleanInstruction(string $filterValue): ?bool
|
||||
{
|
||||
if ('true' === $filterValue) {
|
||||
return true;
|
||||
}
|
||||
if ('false' === $filterValue) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -41,11 +41,13 @@ class AccountTransformer extends AbstractTransformer
|
||||
{
|
||||
private array $accountMeta;
|
||||
private array $accountTypes;
|
||||
private array $fullTypes;
|
||||
private array $balanceDifferences;
|
||||
private array $convertedBalances;
|
||||
private array $currencies;
|
||||
private TransactionCurrency $default;
|
||||
private array $lastActivity;
|
||||
private array $objectGroups;
|
||||
|
||||
/**
|
||||
* This method collects meta-data for one or all accounts in the transformer's collection.
|
||||
@@ -55,10 +57,18 @@ class AccountTransformer extends AbstractTransformer
|
||||
$this->currencies = [];
|
||||
$this->accountMeta = [];
|
||||
$this->accountTypes = [];
|
||||
$this->fullTypes = [];
|
||||
$this->lastActivity = [];
|
||||
$this->objectGroups = [];
|
||||
$this->convertedBalances = [];
|
||||
$this->balanceDifferences = [];
|
||||
|
||||
Log::debug(sprintf('collectMetaData on %d object(s)', $objects->count()));
|
||||
|
||||
// first collect all the "heavy" stuff that relies on ALL data to be present.
|
||||
// get last activity:
|
||||
$this->getLastActivity($objects);
|
||||
|
||||
// get balances of all accounts
|
||||
$this->getMetaBalances($objects);
|
||||
|
||||
@@ -71,15 +81,25 @@ class AccountTransformer extends AbstractTransformer
|
||||
// get account types:
|
||||
$this->collectAccountTypes($objects);
|
||||
|
||||
// get last activity:
|
||||
$this->getLastActivity($objects);
|
||||
|
||||
// TODO add balance difference
|
||||
// add balance difference
|
||||
if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) {
|
||||
$this->getBalanceDifference($objects, $this->parameters->get('start'), $this->parameters->get('end'));
|
||||
}
|
||||
|
||||
return $this->sortAccounts($objects);
|
||||
// get object groups
|
||||
$this->getObjectGroups($objects);
|
||||
|
||||
// sort:
|
||||
$objects = $this->sortAccounts($objects);
|
||||
|
||||
// if pagination is disabled, do it now:
|
||||
if (true === $this->parameters->get('disablePagination')) {
|
||||
$page = (int) $this->parameters->get('page');
|
||||
$size = (int) $this->parameters->get('pageSize');
|
||||
$objects = $objects->slice(($page - 1) * $size, $size);
|
||||
}
|
||||
|
||||
return $objects;
|
||||
}
|
||||
|
||||
private function getDate(): Carbon
|
||||
@@ -97,32 +117,44 @@ class AccountTransformer extends AbstractTransformer
|
||||
*/
|
||||
public function transform(Account $account): array
|
||||
{
|
||||
$id = $account->id;
|
||||
$id = $account->id;
|
||||
|
||||
// various meta
|
||||
$accountRole = $this->accountMeta[$id]['account_role'] ?? null;
|
||||
$accountType = $this->accountTypes[$id];
|
||||
$order = $account->order;
|
||||
$accountRole = $this->accountMeta[$id]['account_role'] ?? null;
|
||||
$accountType = $this->accountTypes[$id];
|
||||
$order = $account->order;
|
||||
|
||||
// liability type
|
||||
$liabilityType = 'liabilities' === $accountType ? $this->fullTypes[$id] : null;
|
||||
$liabilityDirection = $this->accountMeta[$id]['liability_direction'] ?? null;
|
||||
$interest = $this->accountMeta[$id]['interest'] ?? null;
|
||||
$interestPeriod = $this->accountMeta[$id]['interest_period'] ?? null;
|
||||
$currentDebt = $this->accountMeta[$id]['current_debt'] ?? null;
|
||||
|
||||
// no currency? use default
|
||||
$currency = $this->default;
|
||||
$currency = $this->default;
|
||||
if (array_key_exists($id, $this->accountMeta) && 0 !== (int) ($this->accountMeta[$id]['currency_id'] ?? 0)) {
|
||||
$currency = $this->currencies[(int) $this->accountMeta[$id]['currency_id']];
|
||||
}
|
||||
// amounts and calculation.
|
||||
$balance = $this->balances[$id]['balance'] ?? null;
|
||||
$nativeBalance = $this->convertedBalances[$id]['native_balance'] ?? null;
|
||||
$balance = $this->balances[$id]['balance'] ?? null;
|
||||
$nativeBalance = $this->convertedBalances[$id]['native_balance'] ?? null;
|
||||
|
||||
// no order for some accounts:
|
||||
if (!in_array(strtolower($accountType), ['liability', 'liabilities', 'asset'], true)) {
|
||||
$order = null;
|
||||
}
|
||||
|
||||
// object group
|
||||
$objectGroupId = $this->objectGroups[$id]['id'] ?? null;
|
||||
$objectGroupOrder = $this->objectGroups[$id]['order'] ?? null;
|
||||
$objectGroupTitle = $this->objectGroups[$id]['title'] ?? null;
|
||||
|
||||
// balance difference
|
||||
$diffStart = null;
|
||||
$diffEnd = null;
|
||||
$balanceDiff = null;
|
||||
$nativeBalanceDiff = null;
|
||||
$diffStart = null;
|
||||
$diffEnd = null;
|
||||
$balanceDiff = null;
|
||||
$nativeBalanceDiff = null;
|
||||
if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) {
|
||||
$diffStart = $this->parameters->get('start')->toAtomString();
|
||||
$diffEnd = $this->parameters->get('end')->toAtomString();
|
||||
@@ -165,19 +197,25 @@ class AccountTransformer extends AbstractTransformer
|
||||
// more meta
|
||||
'last_activity' => array_key_exists($id, $this->lastActivity) ? $this->lastActivity[$id]->toAtomString() : null,
|
||||
|
||||
// liability stuff
|
||||
'liability_type' => $liabilityType,
|
||||
'liability_direction' => $liabilityDirection,
|
||||
'interest' => $interest,
|
||||
'interest_period' => $interestPeriod,
|
||||
'current_debt' => $currentDebt,
|
||||
|
||||
// object group
|
||||
'object_group_id' => null !== $objectGroupId ? (string) $objectGroupId : null,
|
||||
'object_group_order' => $objectGroupOrder,
|
||||
'object_group_title' => $objectGroupTitle,
|
||||
|
||||
// 'notes' => $this->repository->getNoteText($account),
|
||||
// 'monthly_payment_date' => $monthlyPaymentDate,
|
||||
// 'credit_card_type' => $creditCardType,
|
||||
// 'account_number' => $this->repository->getMetaValue($account, 'account_number'),
|
||||
// 'bic' => $this->repository->getMetaValue($account, 'BIC'),
|
||||
// 'virtual_balance' => number_format((float) $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,
|
||||
@@ -212,7 +250,7 @@ class AccountTransformer extends AbstractTransformer
|
||||
|
||||
/** @var AccountRepositoryInterface $accountRepository */
|
||||
$accountRepository = app(AccountRepositoryInterface::class);
|
||||
$metaFields = $accountRepository->getMetaValues($accounts, ['currency_id', 'account_role', 'account_number']);
|
||||
$metaFields = $accountRepository->getMetaValues($accounts, ['currency_id', 'account_role', 'account_number', 'liability_direction', 'interest', 'interest_period', 'current_debt']);
|
||||
$currencyIds = $metaFields->where('name', 'currency_id')->pluck('data')->toArray();
|
||||
|
||||
$currencies = $repository->getByIds($currencyIds);
|
||||
@@ -235,6 +273,7 @@ class AccountTransformer extends AbstractTransformer
|
||||
/** @var AccountType $row */
|
||||
foreach ($accountTypes as $row) {
|
||||
$this->accountTypes[$row->id] = (string) config(sprintf('firefly.shortNamesByFullName.%s', $row->type));
|
||||
$this->fullTypes[$row->id] = $row->type;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,6 +314,9 @@ class AccountTransformer extends AbstractTransformer
|
||||
if ('balance_difference' === $column) {
|
||||
$accounts = $this->sortByBalanceDifference($accounts, $direction);
|
||||
}
|
||||
if ('current_debt' === $column) {
|
||||
$accounts = $this->sortByCurrentDebt($accounts, $direction);
|
||||
}
|
||||
}
|
||||
|
||||
return $accounts;
|
||||
@@ -365,4 +407,26 @@ class AccountTransformer extends AbstractTransformer
|
||||
return $rightBalance <=> $leftBalance;
|
||||
});
|
||||
}
|
||||
|
||||
private function sortByCurrentDebt(Collection $accounts, string $direction): Collection
|
||||
{
|
||||
$amounts = $this->accountMeta;
|
||||
|
||||
return $accounts->sort(function (Account $left, Account $right) use ($amounts, $direction) {
|
||||
$leftCurrent = (float) ($amounts[$left->id]['current_debt'] ?? 0);
|
||||
$rightCurrent = (float) ($amounts[$right->id]['current_debt'] ?? 0);
|
||||
if ('asc' === $direction) {
|
||||
return $leftCurrent <=> $rightCurrent;
|
||||
}
|
||||
|
||||
return $rightCurrent <=> $leftCurrent;
|
||||
});
|
||||
}
|
||||
|
||||
private function getObjectGroups(Collection $accounts): void
|
||||
{
|
||||
/** @var AccountRepositoryInterface $accountRepository */
|
||||
$accountRepository = app(AccountRepositoryInterface::class);
|
||||
$this->objectGroups = $accountRepository->getObjectGroups($accounts);
|
||||
}
|
||||
}
|
||||
|
||||
516
composer.lock
generated
516
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -117,7 +117,7 @@ return [
|
||||
'expression_engine' => false,
|
||||
// see cer.php for exchange rates feature flag.
|
||||
],
|
||||
'version' => 'develop/2024-04-25',
|
||||
'version' => 'develop/2024-05-09',
|
||||
'api_version' => '2.0.14',
|
||||
'db_version' => 24,
|
||||
|
||||
@@ -920,11 +920,25 @@ return [
|
||||
// preselected account lists possibilities:
|
||||
'preselected_accounts' => ['all', 'assets', 'liabilities'],
|
||||
|
||||
// allowed sort columns for API's
|
||||
// allowed filters (search) for APIs
|
||||
'filters' => [
|
||||
'allowed' => [
|
||||
'accounts' => [
|
||||
'name' => 'string',
|
||||
'active' => 'boolean',
|
||||
'iban' => 'iban',
|
||||
'balance' => 'numeric',
|
||||
'last_activity' => 'date',
|
||||
'balance_difference' => 'numeric',
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
// allowed sort columns for APIs
|
||||
'sorting' => [
|
||||
'allowed' => [
|
||||
'transactions' => ['description', 'amount'],
|
||||
'accounts' => ['name', 'active', 'iban', 'balance', 'last_activity', 'balance_difference'],
|
||||
'accounts' => ['name', 'active', 'iban', 'balance', 'last_activity', 'balance_difference', 'current_debt'],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -52,6 +52,15 @@ return [
|
||||
'bad_type_destination',
|
||||
],
|
||||
'firefly' => [
|
||||
'liability_direction_debit_short',
|
||||
'liability_direction_credit_short',
|
||||
'interest_calc_yearly',
|
||||
'interest_calc_',
|
||||
'interest_calc_daily',
|
||||
'interest_calc_monthly',
|
||||
'interest_calc_weekly',
|
||||
'interest_calc_half-year',
|
||||
'interest_calc_quarterly',
|
||||
'spent',
|
||||
'administration_owner',
|
||||
'administration_you',
|
||||
|
||||
@@ -284,7 +284,7 @@ class CreateMainTables extends Migration
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->date('startdate');
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('repeat_freq', 30);
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
$table->boolean('repeats')->default(0);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
}
|
||||
|
||||
619
package-lock.json
generated
619
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u0414\u044a\u043b\u0436\u0430 \u0434\u044a\u043b\u0433",
|
||||
"liability_direction_credit_short": "\u0414\u044a\u043b\u0436\u044a\u0442 \u043c\u0438 \u0434\u044a\u043b\u0433",
|
||||
"interest_calc_yearly": "\u0413\u043e\u0434\u0438\u0448\u043d\u043e",
|
||||
"interest_calc_": "\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430",
|
||||
"interest_calc_daily": "\u041d\u0430 \u0434\u0435\u043d",
|
||||
"interest_calc_monthly": "\u041d\u0430 \u043c\u0435\u0441\u0435\u0446",
|
||||
"interest_calc_weekly": "\u0421\u0435\u0434\u043c\u0438\u0447\u043d\u043e",
|
||||
"interest_calc_half-year": "\u0417\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d \u0433\u043e\u0434\u0438\u043d\u0430",
|
||||
"interest_calc_quarterly": "\u0417\u0430 \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
|
||||
"spent": "\u041f\u043e\u0445\u0430\u0440\u0447\u0435\u043d\u0438",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u0414\u044a\u043b\u0436\u0430 \u0434\u044a\u043b\u0433",
|
||||
"liability_direction_credit_short": "\u0414\u044a\u043b\u0436\u044a\u0442 \u043c\u0438 \u0434\u044a\u043b\u0433",
|
||||
"interest_calc_yearly": "\u0413\u043e\u0434\u0438\u0448\u043d\u043e",
|
||||
"interest_calc_": "\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430",
|
||||
"interest_calc_daily": "\u041d\u0430 \u0434\u0435\u043d",
|
||||
"interest_calc_monthly": "\u041d\u0430 \u043c\u0435\u0441\u0435\u0446",
|
||||
"interest_calc_weekly": "\u0421\u0435\u0434\u043c\u0438\u0447\u043d\u043e",
|
||||
"interest_calc_half-year": "\u0417\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d \u0433\u043e\u0434\u0438\u043d\u0430",
|
||||
"interest_calc_quarterly": "\u0417\u0430 \u0442\u0440\u0438\u043c\u0435\u0441\u0435\u0447\u0438\u0435",
|
||||
"spent": "\u041f\u043e\u0445\u0430\u0440\u0447\u0435\u043d\u0438",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -10,23 +10,32 @@
|
||||
"title": "T\u00edtol"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Arrossega i deixa anar",
|
||||
"active": "Est\u00e0 actiu?",
|
||||
"name": "Nom",
|
||||
"type": "Tipus",
|
||||
"number": "Account number",
|
||||
"number": "N\u00famero de compte",
|
||||
"liability_type": "Tipus de passiu",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"menu": "Menu"
|
||||
"current_balance": "Balan\u00e7 actual",
|
||||
"last_activity": "Darrera activitat",
|
||||
"amount_due": "Import pendent",
|
||||
"balance_difference": "Difer\u00e8ncia de saldo",
|
||||
"menu": "Men\u00fa"
|
||||
},
|
||||
"validation": {
|
||||
"bad_type_source": "Firefly III no pot determinar el tipus de transacci\u00f3 a partir d'aquest compte font.",
|
||||
"bad_type_destination": "Firefly III no pot determinar el tipus de transacci\u00f3 a partir d'aquest compte de dest\u00ed."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Ho dec",
|
||||
"liability_direction_credit_short": "Se'm deu",
|
||||
"interest_calc_yearly": "Per any",
|
||||
"interest_calc_": "desconegut",
|
||||
"interest_calc_daily": "Per dia",
|
||||
"interest_calc_monthly": "Per mes",
|
||||
"interest_calc_weekly": "Per setmana",
|
||||
"interest_calc_half-year": "Cada mig any",
|
||||
"interest_calc_quarterly": "Per quadrimestre",
|
||||
"spent": "Gastat",
|
||||
"administration_owner": "Propietari de l'administraci\u00f3: {{email}}",
|
||||
"administration_you": "El teu rol: {{role}}",
|
||||
|
||||
@@ -10,23 +10,32 @@
|
||||
"title": "T\u00edtol"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Arrossega i deixa anar",
|
||||
"active": "Est\u00e0 actiu?",
|
||||
"name": "Nom",
|
||||
"type": "Tipus",
|
||||
"number": "Account number",
|
||||
"number": "N\u00famero de compte",
|
||||
"liability_type": "Tipus de passiu",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"menu": "Menu"
|
||||
"current_balance": "Balan\u00e7 actual",
|
||||
"last_activity": "Darrera activitat",
|
||||
"amount_due": "Import pendent",
|
||||
"balance_difference": "Difer\u00e8ncia de saldo",
|
||||
"menu": "Men\u00fa"
|
||||
},
|
||||
"validation": {
|
||||
"bad_type_source": "Firefly III no pot determinar el tipus de transacci\u00f3 a partir d'aquest compte font.",
|
||||
"bad_type_destination": "Firefly III no pot determinar el tipus de transacci\u00f3 a partir d'aquest compte de dest\u00ed."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Ho dec",
|
||||
"liability_direction_credit_short": "Se'm deu",
|
||||
"interest_calc_yearly": "Per any",
|
||||
"interest_calc_": "desconegut",
|
||||
"interest_calc_daily": "Per dia",
|
||||
"interest_calc_monthly": "Per mes",
|
||||
"interest_calc_weekly": "Per setmana",
|
||||
"interest_calc_half-year": "Cada mig any",
|
||||
"interest_calc_quarterly": "Per quadrimestre",
|
||||
"spent": "Gastat",
|
||||
"administration_owner": "Propietari de l'administraci\u00f3: {{email}}",
|
||||
"administration_you": "El teu rol: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Za rok",
|
||||
"interest_calc_": "nezn\u00e1m\u00e9",
|
||||
"interest_calc_daily": "Za den",
|
||||
"interest_calc_monthly": "Za m\u011bs\u00edc",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Utraceno",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Za rok",
|
||||
"interest_calc_": "nezn\u00e1m\u00e9",
|
||||
"interest_calc_daily": "Za den",
|
||||
"interest_calc_monthly": "Za m\u011bs\u00edc",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Utraceno",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III kan ikke bestemme transaktionstypen baseret p\u00e5 denne destinationskonto."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Ejer denne g\u00e6ld",
|
||||
"liability_direction_credit_short": "Ejer denne g\u00e6ld",
|
||||
"interest_calc_yearly": "Pr. \u00e5r",
|
||||
"interest_calc_": "ukendt",
|
||||
"interest_calc_daily": "Pr. dag",
|
||||
"interest_calc_monthly": "Pr. m\u00e5ned",
|
||||
"interest_calc_weekly": "Pr. uge",
|
||||
"interest_calc_half-year": "Hvert halve \u00e5r",
|
||||
"interest_calc_quarterly": "Pr. kvartal",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III kan ikke bestemme transaktionstypen baseret p\u00e5 denne destinationskonto."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Ejer denne g\u00e6ld",
|
||||
"liability_direction_credit_short": "Ejer denne g\u00e6ld",
|
||||
"interest_calc_yearly": "Pr. \u00e5r",
|
||||
"interest_calc_": "ukendt",
|
||||
"interest_calc_daily": "Pr. dag",
|
||||
"interest_calc_monthly": "Pr. m\u00e5ned",
|
||||
"interest_calc_weekly": "Pr. uge",
|
||||
"interest_calc_half-year": "Hvert halve \u00e5r",
|
||||
"interest_calc_quarterly": "Pr. kvartal",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III kann die Buchungsart anhand dieses Zielkontos nicht ermitteln."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Schuldiger Betrag",
|
||||
"liability_direction_credit_short": "Geschuldeter Betrag",
|
||||
"interest_calc_yearly": "J\u00e4hrlich",
|
||||
"interest_calc_": "Unbekannt",
|
||||
"interest_calc_daily": "T\u00e4glich",
|
||||
"interest_calc_monthly": "Monatlich",
|
||||
"interest_calc_weekly": "Pro Woche",
|
||||
"interest_calc_half-year": "Halbj\u00e4hrlich",
|
||||
"interest_calc_quarterly": "Viertelj\u00e4hrlich",
|
||||
"spent": "Ausgegeben",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Ihre Funktion: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III kann die Buchungsart anhand dieses Zielkontos nicht ermitteln."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Schuldiger Betrag",
|
||||
"liability_direction_credit_short": "Geschuldeter Betrag",
|
||||
"interest_calc_yearly": "J\u00e4hrlich",
|
||||
"interest_calc_": "Unbekannt",
|
||||
"interest_calc_daily": "T\u00e4glich",
|
||||
"interest_calc_monthly": "Monatlich",
|
||||
"interest_calc_weekly": "Pro Woche",
|
||||
"interest_calc_half-year": "Halbj\u00e4hrlich",
|
||||
"interest_calc_quarterly": "Viertelj\u00e4hrlich",
|
||||
"spent": "Ausgegeben",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Ihre Funktion: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "\u03a4\u03bf Firefly III \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03ba\u03b1\u03b8\u03bf\u03c1\u03af\u03c3\u03b5\u03b9 \u03c4\u03bf\u03bd \u03c4\u03cd\u03c0\u03bf \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03bc\u03b5 \u03b2\u03ac\u03c3\u03b7 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u039f\u03c6\u03b5\u03af\u03bb\u03c9 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c7\u03c1\u03ad\u03bf\u03c2",
|
||||
"liability_direction_credit_short": "\u039c\u03bf\u03c5 \u03bf\u03c6\u03b5\u03af\u03bb\u03bf\u03c5\u03bd \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c7\u03c1\u03ad\u03bf\u03c2",
|
||||
"interest_calc_yearly": "\u0391\u03bd\u03ac \u03ad\u03c4\u03bf\u03c2",
|
||||
"interest_calc_": "\u03ac\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf",
|
||||
"interest_calc_daily": "\u0391\u03bd\u03ac \u03b7\u03bc\u03ad\u03c1\u03b1",
|
||||
"interest_calc_monthly": "\u0391\u03bd\u03ac \u03bc\u03ae\u03bd\u03b1",
|
||||
"interest_calc_weekly": "\u0391\u03bd\u03ac \u03b5\u03b2\u03b4\u03bf\u03bc\u03ac\u03b4\u03b1",
|
||||
"interest_calc_half-year": "\u0391\u03bd\u03ac \u03b5\u03be\u03ac\u03bc\u03b7\u03bd\u03bf",
|
||||
"interest_calc_quarterly": "\u0391\u03bd\u03ac \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
|
||||
"spent": "\u0394\u03b1\u03c0\u03b1\u03bd\u03ae\u03b8\u03b7\u03ba\u03b1\u03bd",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "\u03a4\u03bf Firefly III \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03ba\u03b1\u03b8\u03bf\u03c1\u03af\u03c3\u03b5\u03b9 \u03c4\u03bf\u03bd \u03c4\u03cd\u03c0\u03bf \u03c3\u03c5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03bc\u03b5 \u03b2\u03ac\u03c3\u03b7 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03bb\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03cc \u03c0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u039f\u03c6\u03b5\u03af\u03bb\u03c9 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c7\u03c1\u03ad\u03bf\u03c2",
|
||||
"liability_direction_credit_short": "\u039c\u03bf\u03c5 \u03bf\u03c6\u03b5\u03af\u03bb\u03bf\u03c5\u03bd \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c7\u03c1\u03ad\u03bf\u03c2",
|
||||
"interest_calc_yearly": "\u0391\u03bd\u03ac \u03ad\u03c4\u03bf\u03c2",
|
||||
"interest_calc_": "\u03ac\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf",
|
||||
"interest_calc_daily": "\u0391\u03bd\u03ac \u03b7\u03bc\u03ad\u03c1\u03b1",
|
||||
"interest_calc_monthly": "\u0391\u03bd\u03ac \u03bc\u03ae\u03bd\u03b1",
|
||||
"interest_calc_weekly": "\u0391\u03bd\u03ac \u03b5\u03b2\u03b4\u03bf\u03bc\u03ac\u03b4\u03b1",
|
||||
"interest_calc_half-year": "\u0391\u03bd\u03ac \u03b5\u03be\u03ac\u03bc\u03b7\u03bd\u03bf",
|
||||
"interest_calc_quarterly": "\u0391\u03bd\u03ac \u03c4\u03c1\u03af\u03bc\u03b7\u03bd\u03bf",
|
||||
"spent": "\u0394\u03b1\u03c0\u03b1\u03bd\u03ae\u03b8\u03b7\u03ba\u03b1\u03bd",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III no puede determinar el tipo de transacci\u00f3n basado en esta cuenta de destino."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Tiene esta deuda",
|
||||
"liability_direction_credit_short": "Ten\u00eda esta deuda",
|
||||
"interest_calc_yearly": "Por a\u00f1o",
|
||||
"interest_calc_": "desconocido",
|
||||
"interest_calc_daily": "Por dia",
|
||||
"interest_calc_monthly": "Por mes",
|
||||
"interest_calc_weekly": "Por semana",
|
||||
"interest_calc_half-year": "Por semestre",
|
||||
"interest_calc_quarterly": "Por trimestre",
|
||||
"spent": "Gastado",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III no puede determinar el tipo de transacci\u00f3n basado en esta cuenta de destino."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Tiene esta deuda",
|
||||
"liability_direction_credit_short": "Ten\u00eda esta deuda",
|
||||
"interest_calc_yearly": "Por a\u00f1o",
|
||||
"interest_calc_": "desconocido",
|
||||
"interest_calc_daily": "Por dia",
|
||||
"interest_calc_monthly": "Por mes",
|
||||
"interest_calc_weekly": "Por semana",
|
||||
"interest_calc_half-year": "Por semestre",
|
||||
"interest_calc_quarterly": "Por trimestre",
|
||||
"spent": "Gastado",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Olen velkaa",
|
||||
"liability_direction_credit_short": "Minulle ollaan velkaa",
|
||||
"interest_calc_yearly": "Vuodessa",
|
||||
"interest_calc_": "tuntematon",
|
||||
"interest_calc_daily": "P\u00e4iv\u00e4ss\u00e4",
|
||||
"interest_calc_monthly": "Kuukaudessa",
|
||||
"interest_calc_weekly": "Viikossa",
|
||||
"interest_calc_half-year": "Puolessa vuodessa",
|
||||
"interest_calc_quarterly": "Nelj\u00e4nnest\u00e4 kohden",
|
||||
"spent": "K\u00e4ytetty",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Olen velkaa",
|
||||
"liability_direction_credit_short": "Minulle ollaan velkaa",
|
||||
"interest_calc_yearly": "Vuodessa",
|
||||
"interest_calc_": "tuntematon",
|
||||
"interest_calc_daily": "P\u00e4iv\u00e4ss\u00e4",
|
||||
"interest_calc_monthly": "Kuukaudessa",
|
||||
"interest_calc_weekly": "Viikossa",
|
||||
"interest_calc_half-year": "Puolessa vuodessa",
|
||||
"interest_calc_quarterly": "Nelj\u00e4nnest\u00e4 kohden",
|
||||
"spent": "K\u00e4ytetty",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III ne peut pas d\u00e9terminer le type de transaction bas\u00e9 sur ce compte de destination."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Pr\u00eateur",
|
||||
"liability_direction_credit_short": "Emprunteur",
|
||||
"interest_calc_yearly": "Par an",
|
||||
"interest_calc_": "inconnu",
|
||||
"interest_calc_daily": "Par jour",
|
||||
"interest_calc_monthly": "Par mois",
|
||||
"interest_calc_weekly": "Par semaine",
|
||||
"interest_calc_half-year": "Par semestre",
|
||||
"interest_calc_quarterly": "Par trimestre",
|
||||
"spent": "D\u00e9pens\u00e9",
|
||||
"administration_owner": "Propri\u00e9taire de l'administration : {{email}}",
|
||||
"administration_you": "Votre r\u00f4le : {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III ne peut pas d\u00e9terminer le type de transaction bas\u00e9 sur ce compte de destination."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Pr\u00eateur",
|
||||
"liability_direction_credit_short": "Emprunteur",
|
||||
"interest_calc_yearly": "Par an",
|
||||
"interest_calc_": "inconnu",
|
||||
"interest_calc_daily": "Par jour",
|
||||
"interest_calc_monthly": "Par mois",
|
||||
"interest_calc_weekly": "Par semaine",
|
||||
"interest_calc_half-year": "Par semestre",
|
||||
"interest_calc_quarterly": "Par trimestre",
|
||||
"spent": "D\u00e9pens\u00e9",
|
||||
"administration_owner": "Propri\u00e9taire de l'administration : {{email}}",
|
||||
"administration_you": "Votre r\u00f4le : {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "A Firefly III nem tudja eld\u00f6nteni a tranzakci\u00f3 t\u00edpus\u00e1t a c\u00e9lsz\u00e1mla alapj\u00e1n."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "\u00c9vente",
|
||||
"interest_calc_": "ismeretlen",
|
||||
"interest_calc_daily": "Naponta",
|
||||
"interest_calc_monthly": "Havonta",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Elk\u00f6lt\u00f6tt",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "A Firefly III nem tudja eld\u00f6nteni a tranzakci\u00f3 t\u00edpus\u00e1t a c\u00e9lsz\u00e1mla alapj\u00e1n."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "\u00c9vente",
|
||||
"interest_calc_": "ismeretlen",
|
||||
"interest_calc_daily": "Naponta",
|
||||
"interest_calc_monthly": "Havonta",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Elk\u00f6lt\u00f6tt",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Menghabiskan",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Menghabiskan",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III non pu\u00f2 determinare il tipo di transazione in base a questo account di destinazione."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Devo questo debito",
|
||||
"liability_direction_credit_short": "Mi devono questo debito",
|
||||
"interest_calc_yearly": "All'anno",
|
||||
"interest_calc_": "sconosciuto",
|
||||
"interest_calc_daily": "Al giorno",
|
||||
"interest_calc_monthly": "Al mese",
|
||||
"interest_calc_weekly": "Settimanale",
|
||||
"interest_calc_half-year": "Semestrale",
|
||||
"interest_calc_quarterly": "Trimestrale",
|
||||
"spent": "Speso",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III non pu\u00f2 determinare il tipo di transazione in base a questo account di destinazione."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Devo questo debito",
|
||||
"liability_direction_credit_short": "Mi devono questo debito",
|
||||
"interest_calc_yearly": "All'anno",
|
||||
"interest_calc_": "sconosciuto",
|
||||
"interest_calc_daily": "Al giorno",
|
||||
"interest_calc_monthly": "Al mese",
|
||||
"interest_calc_weekly": "Settimanale",
|
||||
"interest_calc_half-year": "Semestrale",
|
||||
"interest_calc_quarterly": "Trimestrale",
|
||||
"spent": "Speso",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u3053\u306e\u8ca0\u50b5\u3092\u8ca0\u3046",
|
||||
"liability_direction_credit_short": "\u3053\u306e\u8ca0\u50b5\u3092\u8ca0\u3063\u3066\u3044\u308b",
|
||||
"interest_calc_yearly": "1\u5e74\u3042\u305f\u308a",
|
||||
"interest_calc_": "\u4e0d\u660e",
|
||||
"interest_calc_daily": "1\u65e5\u3042\u305f\u308a",
|
||||
"interest_calc_monthly": "1\u30f6\u6708\u3042\u305f\u308a",
|
||||
"interest_calc_weekly": "1\u9031\u3042\u305f\u308a",
|
||||
"interest_calc_half-year": "\u534a\u5e74\u3042\u305f\u308a",
|
||||
"interest_calc_quarterly": "\u56db\u534a\u671f\u3042\u305f\u308a",
|
||||
"spent": "\u652f\u51fa",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u3053\u306e\u8ca0\u50b5\u3092\u8ca0\u3046",
|
||||
"liability_direction_credit_short": "\u3053\u306e\u8ca0\u50b5\u3092\u8ca0\u3063\u3066\u3044\u308b",
|
||||
"interest_calc_yearly": "1\u5e74\u3042\u305f\u308a",
|
||||
"interest_calc_": "\u4e0d\u660e",
|
||||
"interest_calc_daily": "1\u65e5\u3042\u305f\u308a",
|
||||
"interest_calc_monthly": "1\u30f6\u6708\u3042\u305f\u308a",
|
||||
"interest_calc_weekly": "1\u9031\u3042\u305f\u308a",
|
||||
"interest_calc_half-year": "\u534a\u5e74\u3042\u305f\u308a",
|
||||
"interest_calc_quarterly": "\u56db\u534a\u671f\u3042\u305f\u308a",
|
||||
"spent": "\u652f\u51fa",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\uc774 \ube5a\uc744 \uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4",
|
||||
"liability_direction_credit_short": "\uc774 \ube5a\uc744 \uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4",
|
||||
"interest_calc_yearly": "\uc5f0\uac04",
|
||||
"interest_calc_": "\uc54c \uc218 \uc5c6\uc74c",
|
||||
"interest_calc_daily": "\uc77c\ubcc4",
|
||||
"interest_calc_monthly": "\uc6d4\ubcc4",
|
||||
"interest_calc_weekly": "\uc8fc\ub2f9",
|
||||
"interest_calc_half-year": "\ubc18\uae30\ub2f9",
|
||||
"interest_calc_quarterly": "\ubd84\uae30\ub2f9",
|
||||
"spent": "\uc9c0\ucd9c",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\uc774 \ube5a\uc744 \uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4",
|
||||
"liability_direction_credit_short": "\uc774 \ube5a\uc744 \uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4",
|
||||
"interest_calc_yearly": "\uc5f0\uac04",
|
||||
"interest_calc_": "\uc54c \uc218 \uc5c6\uc74c",
|
||||
"interest_calc_daily": "\uc77c\ubcc4",
|
||||
"interest_calc_monthly": "\uc6d4\ubcc4",
|
||||
"interest_calc_weekly": "\uc8fc\ub2f9",
|
||||
"interest_calc_half-year": "\ubc18\uae30\ub2f9",
|
||||
"interest_calc_quarterly": "\ubd84\uae30\ub2f9",
|
||||
"spent": "\uc9c0\ucd9c",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Skylder denne gjelden",
|
||||
"liability_direction_credit_short": "Jeg skuldet denne gjelden",
|
||||
"interest_calc_yearly": "Per \u00e5r",
|
||||
"interest_calc_": "ukjent",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per m\u00e5ned",
|
||||
"interest_calc_weekly": "Per uke",
|
||||
"interest_calc_half-year": "Per halv\u00e5r",
|
||||
"interest_calc_quarterly": "Per kvartal",
|
||||
"spent": "Brukt",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Skylder denne gjelden",
|
||||
"liability_direction_credit_short": "Jeg skuldet denne gjelden",
|
||||
"interest_calc_yearly": "Per \u00e5r",
|
||||
"interest_calc_": "ukjent",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per m\u00e5ned",
|
||||
"interest_calc_weekly": "Per uke",
|
||||
"interest_calc_half-year": "Per halv\u00e5r",
|
||||
"interest_calc_quarterly": "Per kvartal",
|
||||
"spent": "Brukt",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III kan het transactietype niet bepalen op basis van deze doelrekening."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Schuldenaar",
|
||||
"liability_direction_credit_short": "Schuldeiser",
|
||||
"interest_calc_yearly": "Per jaar",
|
||||
"interest_calc_": "onbekend",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per maand",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half jaar",
|
||||
"interest_calc_quarterly": "Per kwartaal",
|
||||
"spent": "Uitgegeven",
|
||||
"administration_owner": "Grootboekeigenaar: {{email}}",
|
||||
"administration_you": "Jouw rol: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III kan het transactietype niet bepalen op basis van deze doelrekening."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Schuldenaar",
|
||||
"liability_direction_credit_short": "Schuldeiser",
|
||||
"interest_calc_yearly": "Per jaar",
|
||||
"interest_calc_": "onbekend",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per maand",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half jaar",
|
||||
"interest_calc_quarterly": "Per kwartaal",
|
||||
"spent": "Uitgegeven",
|
||||
"administration_owner": "Grootboekeigenaar: {{email}}",
|
||||
"administration_you": "Jouw rol: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Jeg skuldet denne gjelda",
|
||||
"interest_calc_yearly": "Per \u00e5r",
|
||||
"interest_calc_": "ukjent",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per m\u00e5nad",
|
||||
"interest_calc_weekly": "Per veke",
|
||||
"interest_calc_half-year": "Per halv\u00e5r",
|
||||
"interest_calc_quarterly": "Per kvartal",
|
||||
"spent": "Brukt",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Jeg skuldet denne gjelda",
|
||||
"interest_calc_yearly": "Per \u00e5r",
|
||||
"interest_calc_": "ukjent",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per m\u00e5nad",
|
||||
"interest_calc_weekly": "Per veke",
|
||||
"interest_calc_half-year": "Per halv\u00e5r",
|
||||
"interest_calc_quarterly": "Per kvartal",
|
||||
"spent": "Brukt",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -4,22 +4,22 @@
|
||||
"date_time_fns": "do MMMM yyyy @ HH:mm:ss",
|
||||
"month_and_day_fns": "d MMMM y",
|
||||
"does_not_exist": "(config.does_not_exist)",
|
||||
"date_time_fns_short": "MMMM do, yyyy @ HH:mm"
|
||||
"date_time_fns_short": "D MMMM yyyy [o] HH:mm"
|
||||
},
|
||||
"form": {
|
||||
"title": "Tytu\u0142"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Przeci\u0105gnij i upu\u015b\u0107",
|
||||
"active": "Jest aktywny?",
|
||||
"name": "Nazwa",
|
||||
"type": "Typ",
|
||||
"number": "Account number",
|
||||
"number": "Numer konta",
|
||||
"liability_type": "Rodzaj zobowi\u0105zania",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"current_balance": "Bie\u017c\u0105ce saldo",
|
||||
"last_activity": "Ostatnia aktywno\u015b\u0107",
|
||||
"amount_due": "Do zap\u0142aty",
|
||||
"balance_difference": "R\u00f3\u017cnica salda",
|
||||
"menu": "Menu"
|
||||
},
|
||||
"validation": {
|
||||
@@ -27,22 +27,31 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Jeste\u015b d\u0142u\u017cny",
|
||||
"liability_direction_credit_short": "D\u0142ug wobec Ciebie",
|
||||
"interest_calc_yearly": "Co rok",
|
||||
"interest_calc_": "nieznany",
|
||||
"interest_calc_daily": "Co dzie\u0144",
|
||||
"interest_calc_monthly": "Co miesi\u0105c",
|
||||
"interest_calc_weekly": "Tygodniowo",
|
||||
"interest_calc_half-year": "Co p\u00f3\u0142 roku",
|
||||
"interest_calc_quarterly": "Kwartalnie",
|
||||
"spent": "Wydano",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
"administration_role_owner": "Owner",
|
||||
"administration_role_ro": "Read-only",
|
||||
"administration_role_mng_trx": "Manage transactions",
|
||||
"administration_role_mng_meta": "Manage classification and meta-data",
|
||||
"administration_role_mng_budgets": "Manage budgets",
|
||||
"administration_role_mng_piggies": "Manage piggy banks",
|
||||
"administration_role_mng_subscriptions": "Manage subscriptions",
|
||||
"administration_role_mng_rules": "Manage rules",
|
||||
"administration_role_mng_recurring": "Manage recurring transactions ",
|
||||
"administration_you": "Twoja rola: {{role}}",
|
||||
"administration_role_owner": "W\u0142a\u015bciciel",
|
||||
"administration_role_ro": "Tylko odczyt",
|
||||
"administration_role_mng_trx": "Zarz\u0105dzanie transakcjami",
|
||||
"administration_role_mng_meta": "Zarz\u0105dzanie klasyfikacj\u0105 i meta-danymi",
|
||||
"administration_role_mng_budgets": "Zarz\u0105dzanie bud\u017cetami",
|
||||
"administration_role_mng_piggies": "Zarz\u0105dzanie skarbonkami",
|
||||
"administration_role_mng_subscriptions": "Zarz\u0105dzanie subskrypcjami",
|
||||
"administration_role_mng_rules": "Zarz\u0105dzanie regu\u0142ami",
|
||||
"administration_role_mng_recurring": "Zarz\u0105dzanie transakcjami cyklicznymi ",
|
||||
"administration_role_mng_webhooks": "Manage webhooks",
|
||||
"administration_role_mng_currencies": "Manage currencies",
|
||||
"administration_role_view_reports": "View reports",
|
||||
"administration_role_full": "Full access",
|
||||
"administration_role_mng_currencies": "Zarz\u0105dzanie walutami",
|
||||
"administration_role_view_reports": "Przegl\u0105danie raport\u00f3w",
|
||||
"administration_role_full": "Pe\u0142ny dost\u0119p",
|
||||
"new_administration_created": "New financial administration \"{{title}}\" has been created",
|
||||
"left": "Pozosta\u0142o",
|
||||
"paid": "Zap\u0142acone",
|
||||
@@ -61,10 +70,10 @@
|
||||
"unknown_dest_plain": "Nieznane konto docelowe",
|
||||
"unknown_any_plain": "Nieznane konto",
|
||||
"unknown_budget_plain": "Brak bud\u017cetu",
|
||||
"stored_journal_js": "Successfully created new transaction \"{{description}}\"",
|
||||
"stored_journal_js": "Pomy\u015blnie utworzono now\u0105 transakcj\u0119 \"{{description}}\"",
|
||||
"wait_loading_transaction": "Poczekaj na za\u0142adowanie formularza",
|
||||
"nothing_found": "(nic nie znaleziono)",
|
||||
"wait_loading_data": "Please wait for your information to load...",
|
||||
"wait_loading_data": "Prosz\u0119 poczeka\u0107 na za\u0142adowanie informacji...",
|
||||
"Transfer": "Transfer",
|
||||
"Withdrawal": "Wyp\u0142ata",
|
||||
"Deposit": "Wp\u0142ata",
|
||||
|
||||
@@ -4,22 +4,22 @@
|
||||
"date_time_fns": "do MMMM yyyy @ HH:mm:ss",
|
||||
"month_and_day_fns": "d MMMM y",
|
||||
"does_not_exist": "(config.does_not_exist)",
|
||||
"date_time_fns_short": "MMMM do, yyyy @ HH:mm"
|
||||
"date_time_fns_short": "D MMMM yyyy [o] HH:mm"
|
||||
},
|
||||
"form": {
|
||||
"title": "Tytu\u0142"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Przeci\u0105gnij i upu\u015b\u0107",
|
||||
"active": "Jest aktywny?",
|
||||
"name": "Nazwa",
|
||||
"type": "Typ",
|
||||
"number": "Account number",
|
||||
"number": "Numer konta",
|
||||
"liability_type": "Rodzaj zobowi\u0105zania",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"current_balance": "Bie\u017c\u0105ce saldo",
|
||||
"last_activity": "Ostatnia aktywno\u015b\u0107",
|
||||
"amount_due": "Do zap\u0142aty",
|
||||
"balance_difference": "R\u00f3\u017cnica salda",
|
||||
"menu": "Menu"
|
||||
},
|
||||
"validation": {
|
||||
@@ -27,22 +27,31 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Jeste\u015b d\u0142u\u017cny",
|
||||
"liability_direction_credit_short": "D\u0142ug wobec Ciebie",
|
||||
"interest_calc_yearly": "Co rok",
|
||||
"interest_calc_": "nieznany",
|
||||
"interest_calc_daily": "Co dzie\u0144",
|
||||
"interest_calc_monthly": "Co miesi\u0105c",
|
||||
"interest_calc_weekly": "Tygodniowo",
|
||||
"interest_calc_half-year": "Co p\u00f3\u0142 roku",
|
||||
"interest_calc_quarterly": "Kwartalnie",
|
||||
"spent": "Wydano",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
"administration_role_owner": "Owner",
|
||||
"administration_role_ro": "Read-only",
|
||||
"administration_role_mng_trx": "Manage transactions",
|
||||
"administration_role_mng_meta": "Manage classification and meta-data",
|
||||
"administration_role_mng_budgets": "Manage budgets",
|
||||
"administration_role_mng_piggies": "Manage piggy banks",
|
||||
"administration_role_mng_subscriptions": "Manage subscriptions",
|
||||
"administration_role_mng_rules": "Manage rules",
|
||||
"administration_role_mng_recurring": "Manage recurring transactions ",
|
||||
"administration_you": "Twoja rola: {{role}}",
|
||||
"administration_role_owner": "W\u0142a\u015bciciel",
|
||||
"administration_role_ro": "Tylko odczyt",
|
||||
"administration_role_mng_trx": "Zarz\u0105dzanie transakcjami",
|
||||
"administration_role_mng_meta": "Zarz\u0105dzanie klasyfikacj\u0105 i meta-danymi",
|
||||
"administration_role_mng_budgets": "Zarz\u0105dzanie bud\u017cetami",
|
||||
"administration_role_mng_piggies": "Zarz\u0105dzanie skarbonkami",
|
||||
"administration_role_mng_subscriptions": "Zarz\u0105dzanie subskrypcjami",
|
||||
"administration_role_mng_rules": "Zarz\u0105dzanie regu\u0142ami",
|
||||
"administration_role_mng_recurring": "Zarz\u0105dzanie transakcjami cyklicznymi ",
|
||||
"administration_role_mng_webhooks": "Manage webhooks",
|
||||
"administration_role_mng_currencies": "Manage currencies",
|
||||
"administration_role_view_reports": "View reports",
|
||||
"administration_role_full": "Full access",
|
||||
"administration_role_mng_currencies": "Zarz\u0105dzanie walutami",
|
||||
"administration_role_view_reports": "Przegl\u0105danie raport\u00f3w",
|
||||
"administration_role_full": "Pe\u0142ny dost\u0119p",
|
||||
"new_administration_created": "New financial administration \"{{title}}\" has been created",
|
||||
"left": "Pozosta\u0142o",
|
||||
"paid": "Zap\u0142acone",
|
||||
@@ -61,10 +70,10 @@
|
||||
"unknown_dest_plain": "Nieznane konto docelowe",
|
||||
"unknown_any_plain": "Nieznane konto",
|
||||
"unknown_budget_plain": "Brak bud\u017cetu",
|
||||
"stored_journal_js": "Successfully created new transaction \"{{description}}\"",
|
||||
"stored_journal_js": "Pomy\u015blnie utworzono now\u0105 transakcj\u0119 \"{{description}}\"",
|
||||
"wait_loading_transaction": "Poczekaj na za\u0142adowanie formularza",
|
||||
"nothing_found": "(nic nie znaleziono)",
|
||||
"wait_loading_data": "Please wait for your information to load...",
|
||||
"wait_loading_data": "Prosz\u0119 poczeka\u0107 na za\u0142adowanie informacji...",
|
||||
"Transfer": "Transfer",
|
||||
"Withdrawal": "Wyp\u0142ata",
|
||||
"Deposit": "Wp\u0142ata",
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
"title": "T\u00edtulo"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Arrastar e soltar",
|
||||
"active": "Est\u00e1 ativo?",
|
||||
"name": "Nome",
|
||||
"type": "Tipo",
|
||||
"number": "Account number",
|
||||
"number": "N\u00famero da conta",
|
||||
"liability_type": "Tipo de passivo",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"current_balance": "Saldo atual",
|
||||
"last_activity": "\u00daltima atividade",
|
||||
"amount_due": "Valor devido",
|
||||
"balance_difference": "Diferen\u00e7a de saldo",
|
||||
"menu": "Menu"
|
||||
},
|
||||
"validation": {
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III n\u00e3o conseguiu determinar o tipo de transa\u00e7\u00e3o baseado nesta conta destino."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Devo essa d\u00edvida",
|
||||
"liability_direction_credit_short": "Devo receber essa d\u00edvida",
|
||||
"interest_calc_yearly": "Por ano",
|
||||
"interest_calc_": "desconhecido",
|
||||
"interest_calc_daily": "Por dia",
|
||||
"interest_calc_monthly": "Por m\u00eas",
|
||||
"interest_calc_weekly": "Por semana",
|
||||
"interest_calc_half-year": "Por semestre",
|
||||
"interest_calc_quarterly": "Por trimestre",
|
||||
"spent": "Gasto",
|
||||
"administration_owner": "Propriet\u00e1rio da administra\u00e7\u00e3o: {{email}}",
|
||||
"administration_you": "Sua fun\u00e7\u00e3o: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "O Firefly III n\u00e3o consegue determinar o tipo de transa\u00e7\u00e3o baseado nesta conta de destino."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Devo esta d\u00edvida",
|
||||
"liability_direction_credit_short": "Devem-me esta d\u00edvida",
|
||||
"interest_calc_yearly": "Por ano",
|
||||
"interest_calc_": "desconhecido",
|
||||
"interest_calc_daily": "Por dia",
|
||||
"interest_calc_monthly": "Por m\u00eas",
|
||||
"interest_calc_weekly": "Por semana",
|
||||
"interest_calc_half-year": "Por semestre",
|
||||
"interest_calc_quarterly": "Por trimestre",
|
||||
"spent": "Gasto",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
"title": "T\u00edtulo"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Arrastar e soltar",
|
||||
"active": "Est\u00e1 ativo?",
|
||||
"name": "Nome",
|
||||
"type": "Tipo",
|
||||
"number": "Account number",
|
||||
"number": "N\u00famero da conta",
|
||||
"liability_type": "Tipo de passivo",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"current_balance": "Saldo atual",
|
||||
"last_activity": "\u00daltima atividade",
|
||||
"amount_due": "Valor devido",
|
||||
"balance_difference": "Diferen\u00e7a de saldo",
|
||||
"menu": "Menu"
|
||||
},
|
||||
"validation": {
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III n\u00e3o conseguiu determinar o tipo de transa\u00e7\u00e3o baseado nesta conta destino."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Devo essa d\u00edvida",
|
||||
"liability_direction_credit_short": "Devo receber essa d\u00edvida",
|
||||
"interest_calc_yearly": "Por ano",
|
||||
"interest_calc_": "desconhecido",
|
||||
"interest_calc_daily": "Por dia",
|
||||
"interest_calc_monthly": "Por m\u00eas",
|
||||
"interest_calc_weekly": "Por semana",
|
||||
"interest_calc_half-year": "Por semestre",
|
||||
"interest_calc_quarterly": "Por trimestre",
|
||||
"spent": "Gasto",
|
||||
"administration_owner": "Propriet\u00e1rio da administra\u00e7\u00e3o: {{email}}",
|
||||
"administration_you": "Sua fun\u00e7\u00e3o: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "O Firefly III n\u00e3o consegue determinar o tipo de transa\u00e7\u00e3o baseado nesta conta de destino."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Devo esta d\u00edvida",
|
||||
"liability_direction_credit_short": "Devem-me esta d\u00edvida",
|
||||
"interest_calc_yearly": "Por ano",
|
||||
"interest_calc_": "desconhecido",
|
||||
"interest_calc_daily": "Por dia",
|
||||
"interest_calc_monthly": "Por m\u00eas",
|
||||
"interest_calc_weekly": "Por semana",
|
||||
"interest_calc_half-year": "Por semestre",
|
||||
"interest_calc_quarterly": "Por trimestre",
|
||||
"spent": "Gasto",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III nu poate determina tipul de tranzac\u021bie bazat pe acest cont de destina\u021bie."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Creditor",
|
||||
"liability_direction_credit_short": "\u00cendatorat",
|
||||
"interest_calc_yearly": "Pe an",
|
||||
"interest_calc_": "necunoscut",
|
||||
"interest_calc_daily": "Pe zi",
|
||||
"interest_calc_monthly": "Pe lun\u0103",
|
||||
"interest_calc_weekly": "Pe s\u0103pt\u0103m\u00e2n\u0103",
|
||||
"interest_calc_half-year": "Pe jum\u0103tate de an",
|
||||
"interest_calc_quarterly": "Pe trimestru",
|
||||
"spent": "Cheltuit",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III nu poate determina tipul de tranzac\u021bie bazat pe acest cont de destina\u021bie."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Creditor",
|
||||
"liability_direction_credit_short": "\u00cendatorat",
|
||||
"interest_calc_yearly": "Pe an",
|
||||
"interest_calc_": "necunoscut",
|
||||
"interest_calc_daily": "Pe zi",
|
||||
"interest_calc_monthly": "Pe lun\u0103",
|
||||
"interest_calc_weekly": "Pe s\u0103pt\u0103m\u00e2n\u0103",
|
||||
"interest_calc_half-year": "Pe jum\u0103tate de an",
|
||||
"interest_calc_quarterly": "Pe trimestru",
|
||||
"spent": "Cheltuit",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0438\u043f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u042f \u0434\u043e\u043b\u0436\u0435\u043d",
|
||||
"liability_direction_credit_short": "\u041c\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b",
|
||||
"interest_calc_yearly": "\u0412 \u0433\u043e\u0434",
|
||||
"interest_calc_": "\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e",
|
||||
"interest_calc_daily": "\u0412 \u0434\u0435\u043d\u044c",
|
||||
"interest_calc_monthly": "\u0412 \u043c\u0435\u0441\u044f\u0446",
|
||||
"interest_calc_weekly": "\u0417\u0430 \u043d\u0435\u0434\u0435\u043b\u044e",
|
||||
"interest_calc_half-year": "\u0417\u0430 \u043f\u043e\u043b\u0433\u043e\u0434\u0430",
|
||||
"interest_calc_quarterly": "\u0417\u0430 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
|
||||
"spent": "\u0420\u0430\u0441\u0445\u043e\u0434",
|
||||
"administration_owner": "\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f: {{email}}",
|
||||
"administration_you": "\u0412\u0430\u0448\u0430 \u0440\u043e\u043b\u044c: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0438\u043f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u042f \u0434\u043e\u043b\u0436\u0435\u043d",
|
||||
"liability_direction_credit_short": "\u041c\u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b",
|
||||
"interest_calc_yearly": "\u0412 \u0433\u043e\u0434",
|
||||
"interest_calc_": "\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e",
|
||||
"interest_calc_daily": "\u0412 \u0434\u0435\u043d\u044c",
|
||||
"interest_calc_monthly": "\u0412 \u043c\u0435\u0441\u044f\u0446",
|
||||
"interest_calc_weekly": "\u0417\u0430 \u043d\u0435\u0434\u0435\u043b\u044e",
|
||||
"interest_calc_half-year": "\u0417\u0430 \u043f\u043e\u043b\u0433\u043e\u0434\u0430",
|
||||
"interest_calc_quarterly": "\u0417\u0430 \u043a\u0432\u0430\u0440\u0442\u0430\u043b",
|
||||
"spent": "\u0420\u0430\u0441\u0445\u043e\u0434",
|
||||
"administration_owner": "\u0412\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f: {{email}}",
|
||||
"administration_you": "\u0412\u0430\u0448\u0430 \u0440\u043e\u043b\u044c: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Za rok",
|
||||
"interest_calc_": "nezn\u00e1me",
|
||||
"interest_calc_daily": "Za de\u0148",
|
||||
"interest_calc_monthly": "Za mesiac",
|
||||
"interest_calc_weekly": "Za t\u00fd\u017ede\u0148",
|
||||
"interest_calc_half-year": "Za polrok",
|
||||
"interest_calc_quarterly": "Za \u0161tvr\u0165rok",
|
||||
"spent": "Utraten\u00e9",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Za rok",
|
||||
"interest_calc_": "nezn\u00e1me",
|
||||
"interest_calc_daily": "Za de\u0148",
|
||||
"interest_calc_monthly": "Za mesiac",
|
||||
"interest_calc_weekly": "Za t\u00fd\u017ede\u0148",
|
||||
"interest_calc_half-year": "Za polrok",
|
||||
"interest_calc_quarterly": "Za \u0161tvr\u0165rok",
|
||||
"spent": "Utraten\u00e9",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -10,23 +10,32 @@
|
||||
"title": "Naslov"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Povleci in spusti",
|
||||
"active": "Aktiviran?",
|
||||
"name": "ime",
|
||||
"type": "Vrsta",
|
||||
"number": "Account number",
|
||||
"number": "\u0160tevilka ra\u010duna",
|
||||
"liability_type": "Vrsta obveznost",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"menu": "Menu"
|
||||
"current_balance": "Trenutno stanje",
|
||||
"last_activity": "Zadnja aktivnost",
|
||||
"amount_due": "Dolgovani znesek",
|
||||
"balance_difference": "Bilan\u010dna razlika",
|
||||
"menu": "Meni"
|
||||
},
|
||||
"validation": {
|
||||
"bad_type_source": "Na podlagi tega izvornega ra\u010duna Firefly III ne more dolo\u010diti vrste transakcije.",
|
||||
"bad_type_destination": "Na podlagi tega ciljnega ra\u010duna Firefly III ne more dolo\u010diti vrste transakcije."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Dolgujem",
|
||||
"liability_direction_credit_short": "Ta dolg je bil dolgovan",
|
||||
"interest_calc_yearly": "Na leto",
|
||||
"interest_calc_": "neznano",
|
||||
"interest_calc_daily": "Na dan",
|
||||
"interest_calc_monthly": "Na mesec",
|
||||
"interest_calc_weekly": "Tedensko",
|
||||
"interest_calc_half-year": "Na pol leta",
|
||||
"interest_calc_quarterly": "Na \u010detrtletje",
|
||||
"spent": "Porabljeno",
|
||||
"administration_owner": "Lastnik administracije: {{email}}",
|
||||
"administration_you": "Va\u0161a vloga: {{role}}",
|
||||
|
||||
@@ -10,23 +10,32 @@
|
||||
"title": "Naslov"
|
||||
},
|
||||
"list": {
|
||||
"drag_and_drop": "Drag and drop",
|
||||
"drag_and_drop": "Povleci in spusti",
|
||||
"active": "Aktiviran?",
|
||||
"name": "ime",
|
||||
"type": "Vrsta",
|
||||
"number": "Account number",
|
||||
"number": "\u0160tevilka ra\u010duna",
|
||||
"liability_type": "Vrsta obveznost",
|
||||
"current_balance": "Current balance",
|
||||
"last_activity": "Last activity",
|
||||
"amount_due": "Amount due",
|
||||
"balance_difference": "Balance difference",
|
||||
"menu": "Menu"
|
||||
"current_balance": "Trenutno stanje",
|
||||
"last_activity": "Zadnja aktivnost",
|
||||
"amount_due": "Dolgovani znesek",
|
||||
"balance_difference": "Bilan\u010dna razlika",
|
||||
"menu": "Meni"
|
||||
},
|
||||
"validation": {
|
||||
"bad_type_source": "Na podlagi tega izvornega ra\u010duna Firefly III ne more dolo\u010diti vrste transakcije.",
|
||||
"bad_type_destination": "Na podlagi tega ciljnega ra\u010duna Firefly III ne more dolo\u010diti vrste transakcije."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Dolgujem",
|
||||
"liability_direction_credit_short": "Ta dolg je bil dolgovan",
|
||||
"interest_calc_yearly": "Na leto",
|
||||
"interest_calc_": "neznano",
|
||||
"interest_calc_daily": "Na dan",
|
||||
"interest_calc_monthly": "Na mesec",
|
||||
"interest_calc_weekly": "Tedensko",
|
||||
"interest_calc_half-year": "Na pol leta",
|
||||
"interest_calc_quarterly": "Na \u010detrtletje",
|
||||
"spent": "Porabljeno",
|
||||
"administration_owner": "Lastnik administracije: {{email}}",
|
||||
"administration_you": "Va\u0161a vloga: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u00c4ger denna skuld",
|
||||
"liability_direction_credit_short": "\u00c4gde denna skuld",
|
||||
"interest_calc_yearly": "Per \u00e5r",
|
||||
"interest_calc_": "ok\u00e4nd",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per m\u00e5nad",
|
||||
"interest_calc_weekly": "Per vecka",
|
||||
"interest_calc_half-year": "Per halv\u00e5r",
|
||||
"interest_calc_quarterly": "Per kvartal",
|
||||
"spent": "Spenderat",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Din roll: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u00c4ger denna skuld",
|
||||
"liability_direction_credit_short": "\u00c4gde denna skuld",
|
||||
"interest_calc_yearly": "Per \u00e5r",
|
||||
"interest_calc_": "ok\u00e4nd",
|
||||
"interest_calc_daily": "Per dag",
|
||||
"interest_calc_monthly": "Per m\u00e5nad",
|
||||
"interest_calc_weekly": "Per vecka",
|
||||
"interest_calc_half-year": "Per halv\u00e5r",
|
||||
"interest_calc_quarterly": "Per kvartal",
|
||||
"spent": "Spenderat",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Din roll: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Harcanan",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "Per day",
|
||||
"interest_calc_monthly": "Per month",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Harcanan",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "\u0417\u0430 \u0434\u0435\u043d\u044c",
|
||||
"interest_calc_monthly": "\u0417\u0430 \u043c\u0456\u0441\u044f\u0446\u044c",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "Per year",
|
||||
"interest_calc_": "unknown",
|
||||
"interest_calc_daily": "\u0417\u0430 \u0434\u0435\u043d\u044c",
|
||||
"interest_calc_monthly": "\u0417\u0430 \u043c\u0456\u0441\u044f\u0446\u044c",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "Spent",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "M\u1ed7i n\u0103m",
|
||||
"interest_calc_": "kh\u00f4ng x\u00e1c \u0111\u1ecbnh",
|
||||
"interest_calc_daily": "M\u1ed7i ng\u00e0y",
|
||||
"interest_calc_monthly": "M\u1ed7i th\u00e1ng",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "\u0110\u00e3 chi",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "M\u1ed7i n\u0103m",
|
||||
"interest_calc_": "kh\u00f4ng x\u00e1c \u0111\u1ecbnh",
|
||||
"interest_calc_daily": "M\u1ed7i ng\u00e0y",
|
||||
"interest_calc_monthly": "M\u1ed7i th\u00e1ng",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "\u0110\u00e3 chi",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III \u65e0\u6cd5\u786e\u5b9a\u57fa\u4e8e\u6b64\u76ee\u6807\u5e10\u6237\u7684\u4ea4\u6613\u7c7b\u578b\u3002"
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u6b20\u6b3e",
|
||||
"liability_direction_credit_short": "\u501f\u6b3e",
|
||||
"interest_calc_yearly": "\u6bcf\u5e74",
|
||||
"interest_calc_": "\u672a\u77e5",
|
||||
"interest_calc_daily": "\u6bcf\u65e5",
|
||||
"interest_calc_monthly": "\u6bcf\u6708",
|
||||
"interest_calc_weekly": "\u6bcf\u5468",
|
||||
"interest_calc_half-year": "\u6bcf\u534a\u5e74",
|
||||
"interest_calc_quarterly": "\u6bcf\u5b63\u5ea6",
|
||||
"spent": "\u652f\u51fa",
|
||||
"administration_owner": "\u7ba1\u7406\u5458\u5f52\u5c5e: {{email}}",
|
||||
"administration_you": "\u4f60\u7684\u89d2\u8272: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "\u6bcf\u5e74",
|
||||
"interest_calc_": "\u672a\u77e5",
|
||||
"interest_calc_daily": "\u6bcf\u65e5",
|
||||
"interest_calc_monthly": "\u6bcf\u6708",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "\u652f\u51fa",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III \u65e0\u6cd5\u786e\u5b9a\u57fa\u4e8e\u6b64\u76ee\u6807\u5e10\u6237\u7684\u4ea4\u6613\u7c7b\u578b\u3002"
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "\u6b20\u6b3e",
|
||||
"liability_direction_credit_short": "\u501f\u6b3e",
|
||||
"interest_calc_yearly": "\u6bcf\u5e74",
|
||||
"interest_calc_": "\u672a\u77e5",
|
||||
"interest_calc_daily": "\u6bcf\u65e5",
|
||||
"interest_calc_monthly": "\u6bcf\u6708",
|
||||
"interest_calc_weekly": "\u6bcf\u5468",
|
||||
"interest_calc_half-year": "\u6bcf\u534a\u5e74",
|
||||
"interest_calc_quarterly": "\u6bcf\u5b63\u5ea6",
|
||||
"spent": "\u652f\u51fa",
|
||||
"administration_owner": "\u7ba1\u7406\u5458\u5f52\u5c5e: {{email}}",
|
||||
"administration_you": "\u4f60\u7684\u89d2\u8272: {{role}}",
|
||||
|
||||
@@ -27,6 +27,15 @@
|
||||
"bad_type_destination": "Firefly III can't determine the transaction type based on this destination account."
|
||||
},
|
||||
"firefly": {
|
||||
"liability_direction_debit_short": "Owe this debt",
|
||||
"liability_direction_credit_short": "Owed this debt",
|
||||
"interest_calc_yearly": "\u6bcf\u5e74",
|
||||
"interest_calc_": "\u672a\u77e5",
|
||||
"interest_calc_daily": "\u6bcf\u65e5",
|
||||
"interest_calc_monthly": "\u6bcf\u6708",
|
||||
"interest_calc_weekly": "Per week",
|
||||
"interest_calc_half-year": "Per half year",
|
||||
"interest_calc_quarterly": "Per quarter",
|
||||
"spent": "\u652f\u51fa",
|
||||
"administration_owner": "Administration owner: {{email}}",
|
||||
"administration_you": "Your role: {{role}}",
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
/*!
|
||||
* _variables.scss
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/* TODO REMOVE ME */
|
||||
// Body
|
||||
$body-bg: #f5f8fa;
|
||||
|
||||
// Borders
|
||||
$laravel-border-color: darken($body-bg, 10%);
|
||||
$list-group-border: $laravel-border-color;
|
||||
$navbar-default-border: $laravel-border-color;
|
||||
$panel-default-border: $laravel-border-color;
|
||||
$panel-inner-border: $laravel-border-color;
|
||||
|
||||
// Brands
|
||||
$brand-primary: #3097D1;
|
||||
$brand-info: #8eb4cb;
|
||||
$brand-success: #2ab27b;
|
||||
$brand-warning: #cbb956;
|
||||
$brand-danger: #bf5329;
|
||||
|
||||
// Typography
|
||||
$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
|
||||
$font-family-sans-serif: "Raleway", sans-serif;
|
||||
$font-size-base: 14px;
|
||||
$line-height-base: 1.6;
|
||||
$text-color: #636b6f;
|
||||
|
||||
// Navbar
|
||||
$navbar-default-bg: #fff;
|
||||
|
||||
// Buttons
|
||||
$btn-default-color: $text-color;
|
||||
|
||||
// Inputs
|
||||
$input-border: lighten($text-color, 40%);
|
||||
$input-border-focus: lighten($brand-primary, 25%);
|
||||
$input-color-placeholder: lighten($text-color, 30%);
|
||||
|
||||
// Panels
|
||||
$panel-default-heading-bg: #fff;
|
||||
@@ -4,20 +4,16 @@
|
||||
"/build/create_transaction.js": "/build/create_transaction.js",
|
||||
"/build/edit_transaction.js": "/build/edit_transaction.js",
|
||||
"/build/profile.js": "/build/profile.js",
|
||||
"/build/index.js": "/build/index.js",
|
||||
"/build/create.js": "/build/create.js",
|
||||
"/build/edit.js": "/build/edit.js",
|
||||
"/build/show.js": "/build/show.js",
|
||||
"/build/webhooks/index.js": "/build/webhooks/index.js",
|
||||
"/build/webhooks/create.js": "/build/webhooks/create.js",
|
||||
"/build/webhooks/edit.js": "/build/webhooks/edit.js",
|
||||
"/build/webhooks/show.js": "/build/webhooks/show.js",
|
||||
"/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",
|
||||
"/public/v1/js/app_vue.js.LICENSE.txt": "/public/v1/js/app_vue.js.LICENSE.txt",
|
||||
"/public/v1/js/create.js": "/public/v1/js/create.js",
|
||||
"/public/v1/js/create.js.LICENSE.txt": "/public/v1/js/create.js.LICENSE.txt",
|
||||
"/public/v1/js/create_transaction.js": "/public/v1/js/create_transaction.js",
|
||||
"/public/v1/js/create_transaction.js.LICENSE.txt": "/public/v1/js/create_transaction.js.LICENSE.txt",
|
||||
"/public/v1/js/edit.js": "/public/v1/js/edit.js",
|
||||
"/public/v1/js/edit.js.LICENSE.txt": "/public/v1/js/edit.js.LICENSE.txt",
|
||||
"/public/v1/js/edit_transaction.js": "/public/v1/js/edit_transaction.js",
|
||||
"/public/v1/js/edit_transaction.js.LICENSE.txt": "/public/v1/js/edit_transaction.js.LICENSE.txt",
|
||||
"/public/v1/js/ff/accounts/create.js": "/public/v1/js/ff/accounts/create.js",
|
||||
@@ -88,8 +84,6 @@
|
||||
"/public/v1/js/ff/transactions/mass/edit-bulk.js": "/public/v1/js/ff/transactions/mass/edit-bulk.js",
|
||||
"/public/v1/js/ff/transactions/mass/edit.js": "/public/v1/js/ff/transactions/mass/edit.js",
|
||||
"/public/v1/js/ff/transactions/show.js": "/public/v1/js/ff/transactions/show.js",
|
||||
"/public/v1/js/index.js": "/public/v1/js/index.js",
|
||||
"/public/v1/js/index.js.LICENSE.txt": "/public/v1/js/index.js.LICENSE.txt",
|
||||
"/public/v1/js/lib/Chart.bundle.min.js": "/public/v1/js/lib/Chart.bundle.min.js",
|
||||
"/public/v1/js/lib/accounting.min.js": "/public/v1/js/lib/accounting.min.js",
|
||||
"/public/v1/js/lib/bootstrap-multiselect.js": "/public/v1/js/lib/bootstrap-multiselect.js",
|
||||
@@ -148,6 +142,12 @@
|
||||
"/public/v1/js/lib/vue.js": "/public/v1/js/lib/vue.js",
|
||||
"/public/v1/js/profile.js": "/public/v1/js/profile.js",
|
||||
"/public/v1/js/profile.js.LICENSE.txt": "/public/v1/js/profile.js.LICENSE.txt",
|
||||
"/public/v1/js/show.js": "/public/v1/js/show.js",
|
||||
"/public/v1/js/show.js.LICENSE.txt": "/public/v1/js/show.js.LICENSE.txt"
|
||||
"/public/v1/js/webhooks/create.js": "/public/v1/js/webhooks/create.js",
|
||||
"/public/v1/js/webhooks/create.js.LICENSE.txt": "/public/v1/js/webhooks/create.js.LICENSE.txt",
|
||||
"/public/v1/js/webhooks/edit.js": "/public/v1/js/webhooks/edit.js",
|
||||
"/public/v1/js/webhooks/edit.js.LICENSE.txt": "/public/v1/js/webhooks/edit.js.LICENSE.txt",
|
||||
"/public/v1/js/webhooks/index.js": "/public/v1/js/webhooks/index.js",
|
||||
"/public/v1/js/webhooks/index.js.LICENSE.txt": "/public/v1/js/webhooks/index.js.LICENSE.txt",
|
||||
"/public/v1/js/webhooks/show.js": "/public/v1/js/webhooks/show.js",
|
||||
"/public/v1/js/webhooks/show.js.LICENSE.txt": "/public/v1/js/webhooks/show.js.LICENSE.txt"
|
||||
}
|
||||
|
||||
@@ -97,25 +97,25 @@
|
||||
"multi_account_warning_withdrawal": "Sonraki b\u00f6l\u00fcnmelerin kaynak hesab\u0131n\u0131n, geri \u00e7ekilmenin ilk b\u00f6l\u00fcnmesinde tan\u0131mlanan herhangi bir \u015fey taraf\u0131ndan reddedilece\u011fini unutmay\u0131n.",
|
||||
"multi_account_warning_deposit": "Sonraki b\u00f6l\u00fcnmelerin hedef hesab\u0131n\u0131n, mevduat\u0131n ilk b\u00f6l\u00fcnmesinde tan\u0131mlanan herhangi bir \u015fey taraf\u0131ndan iptal edilece\u011fini unutmay\u0131n.",
|
||||
"multi_account_warning_transfer": "Sonraki b\u00f6l\u00fcnmelerin kaynak + hedef hesab\u0131n\u0131n, aktar\u0131m\u0131n ilk b\u00f6l\u00fcnmesinde tan\u0131mlanan her \u015fey taraf\u0131ndan ge\u00e7ersiz k\u0131l\u0131naca\u011f\u0131n\u0131 unutmay\u0131n.",
|
||||
"webhook_trigger_STORE_TRANSACTION": "After transaction creation",
|
||||
"webhook_trigger_UPDATE_TRANSACTION": "After transaction update",
|
||||
"webhook_trigger_DESTROY_TRANSACTION": "After transaction delete",
|
||||
"webhook_response_TRANSACTIONS": "Transaction details",
|
||||
"webhook_response_ACCOUNTS": "Account details",
|
||||
"webhook_response_none_NONE": "No details",
|
||||
"webhook_trigger_STORE_TRANSACTION": "\u0130\u015flem olu\u015fturma sonras\u0131",
|
||||
"webhook_trigger_UPDATE_TRANSACTION": "\u0130\u015flem g\u00fcncelleme sonras\u0131",
|
||||
"webhook_trigger_DESTROY_TRANSACTION": "\u0130\u015flem silme sonras\u0131",
|
||||
"webhook_response_TRANSACTIONS": "\u0130\u015flem detaylar\u0131",
|
||||
"webhook_response_ACCOUNTS": "Hesap detaylar\u0131",
|
||||
"webhook_response_none_NONE": "Detay yok",
|
||||
"webhook_delivery_JSON": "JSON",
|
||||
"actions": "Eylemler",
|
||||
"meta_data": "Meta veri",
|
||||
"webhook_messages": "Webhook message",
|
||||
"inactive": "Etkisiz",
|
||||
"no_webhook_messages": "There are no webhook messages",
|
||||
"inspect": "Inspect",
|
||||
"create_new_webhook": "Create new webhook",
|
||||
"no_webhook_messages": "Webhook mesaj\u0131 yok",
|
||||
"inspect": "\u0130ncele",
|
||||
"create_new_webhook": "Yeni webhook olu\u015ftur",
|
||||
"webhooks": "Web kancalar\u0131",
|
||||
"webhook_trigger_form_help": "Indicate on what event the webhook will trigger",
|
||||
"webhook_response_form_help": "Indicate what the webhook must submit to the URL.",
|
||||
"webhook_delivery_form_help": "Which format the webhook must deliver data in.",
|
||||
"webhook_active_form_help": "The webhook must be active or it won't be called.",
|
||||
"webhook_trigger_form_help": "Webhook'un hangi olay\u0131 tetikleyece\u011fini belirtin",
|
||||
"webhook_response_form_help": "Webhook'un URL'ye ne g\u00f6ndermesi gerekti\u011fini belirleyin.",
|
||||
"webhook_delivery_form_help": "Webhook'un verileri hangi formatta iletmesi gerek.",
|
||||
"webhook_active_form_help": "Webhook'un etkin olmas\u0131 gerekir, aksi takdirde \u00e7a\u011fr\u0131lmaz.",
|
||||
"edit_webhook_js": "Edit webhook \"{title}\"",
|
||||
"webhook_was_triggered": "The webhook was triggered on the indicated transaction. Please wait for results to appear.",
|
||||
"view_message": "View message",
|
||||
|
||||
@@ -42,7 +42,7 @@ mix.js('src/edit_transaction.js', 'build').vue({version: 2});
|
||||
mix.js('src/profile.js', 'build').vue({version: 2});
|
||||
//
|
||||
// // webhooks
|
||||
mix.js('src/webhooks/index.js', 'build').vue({version: 2});
|
||||
mix.js('src/webhooks/create.js', 'build').vue({version: 2});
|
||||
mix.js('src/webhooks/edit.js', 'build').vue({version: 2});
|
||||
mix.js('src/webhooks/show.js', 'build').vue({version: 2}).copy('build','../../../public/v1/js')
|
||||
mix.js('src/webhooks/index.js', 'build/webhooks').vue({version: 2});
|
||||
mix.js('src/webhooks/create.js', 'build/webhooks').vue({version: 2});
|
||||
mix.js('src/webhooks/edit.js', 'build/webhooks').vue({version: 2});
|
||||
mix.js('src/webhooks/show.js', 'build/webhooks').vue({version: 2}).copy('build','../../../public/v1/js')
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"bootstrap5-tags": "^1.6.15",
|
||||
"chart.js": "^4.4.0",
|
||||
"chartjs-adapter-date-fns": "^3.0.0",
|
||||
"chartjs-chart-sankey": "^0.12.0",
|
||||
"chartjs-chart-sankey": "^0.12.1",
|
||||
"date-fns": "^3.6.0",
|
||||
"i18next": "^23.11.2",
|
||||
"i18next-chained-backend": "^4.6.2",
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
import {api} from "../../../../boot/axios";
|
||||
import format from "date-fns/format";
|
||||
import {getCacheKey} from "../../../../support/get-cache-key.js";
|
||||
|
||||
export default class Get {
|
||||
|
||||
@@ -39,7 +40,24 @@ export default class Get {
|
||||
* @returns {Promise<AxiosResponse<any>>}
|
||||
*/
|
||||
index(params) {
|
||||
return api.get('/api/v2/accounts', {params: params});
|
||||
// first, check API in some consistent manner.
|
||||
// then, load if necessary.
|
||||
const cacheKey = getCacheKey('/api/v2/accounts', params);
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(cacheKey);
|
||||
|
||||
if (cacheValid && typeof cachedData !== 'undefined') {
|
||||
console.log('Cache is valid, return cache.');
|
||||
return Promise.resolve(cachedData);
|
||||
}
|
||||
|
||||
// if not, store in cache and then return res.
|
||||
|
||||
return api.get('/api/v2/accounts', {params: params}).then(response => {
|
||||
console.log('Cache is invalid, return fresh.');
|
||||
window.store.set(cacheKey, response.data);
|
||||
return Promise.resolve({data: response.data.data, meta: response.data.meta});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
1
resources/assets/v2/src/boot/bootstrap.js
vendored
1
resources/assets/v2/src/boot/bootstrap.js
vendored
@@ -43,6 +43,7 @@ store.addPlugin(observePlugin);
|
||||
|
||||
window.bootstrapped = false;
|
||||
window.store = store;
|
||||
window.bootstrap = bootstrap;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -24,16 +24,14 @@ import i18next from "i18next";
|
||||
import {format} from "date-fns";
|
||||
import formatMoney from "../../util/format-money.js";
|
||||
|
||||
import '@ag-grid-community/styles/ag-grid.css';
|
||||
import '@ag-grid-community/styles/ag-theme-alpine.css';
|
||||
import '../../css/grid-ff3-theme.css';
|
||||
import Get from "../../api/v2/model/account/get.js";
|
||||
import Put from "../../api/v2/model/account/put.js";
|
||||
import AccountRenderer from "../../support/renderers/AccountRenderer.js";
|
||||
import {showInternalsButton} from "../../support/page-settings/show-internals-button.js";
|
||||
import {showWizardButton} from "../../support/page-settings/show-wizard-button.js";
|
||||
import {getVariable} from "../../store/get-variable.js";
|
||||
import {setVariable} from "../../store/set-variable.js";
|
||||
import {getVariables} from "../../store/get-variables.js";
|
||||
import pageNavigation from "../../support/page-navigation.js";
|
||||
|
||||
|
||||
// set type from URL
|
||||
@@ -43,6 +41,7 @@ const type = urlParts[urlParts.length - 1];
|
||||
|
||||
let sortingColumn = '';
|
||||
let sortDirection = '';
|
||||
let page = 1;
|
||||
|
||||
// get sort parameters
|
||||
const params = new Proxy(new URLSearchParams(window.location.search), {
|
||||
@@ -50,11 +49,15 @@ const params = new Proxy(new URLSearchParams(window.location.search), {
|
||||
});
|
||||
sortingColumn = params.column ?? '';
|
||||
sortDirection = params.direction ?? '';
|
||||
page = parseInt(params.page ?? 1);
|
||||
|
||||
|
||||
showInternalsButton();
|
||||
showWizardButton();
|
||||
|
||||
// TODO currency conversion
|
||||
// TODO page cleanup and recycle for transaction lists.
|
||||
|
||||
let index = function () {
|
||||
return {
|
||||
// notifications
|
||||
@@ -70,8 +73,16 @@ let index = function () {
|
||||
},
|
||||
totalPages: 1,
|
||||
page: 1,
|
||||
pageUrl: '',
|
||||
filters: {
|
||||
active: 'both',
|
||||
active: null,
|
||||
name: null,
|
||||
},
|
||||
pageOptions: {
|
||||
isLoading: true,
|
||||
groupedAccounts: true,
|
||||
sortingColumn: sortingColumn,
|
||||
sortDirection: sortDirection,
|
||||
},
|
||||
|
||||
// available columns:
|
||||
@@ -131,24 +142,77 @@ let index = function () {
|
||||
},
|
||||
},
|
||||
editors: {},
|
||||
sortingColumn: sortingColumn,
|
||||
sortDirection: sortDirection,
|
||||
accounts: [],
|
||||
lastClickedFilter: '',
|
||||
lastFilterInput: '',
|
||||
goToPage(page) {
|
||||
this.page = page;
|
||||
this.loadAccounts();
|
||||
},
|
||||
applyFilter() {
|
||||
this.filters[this.lastClickedFilter] = this.lastFilterInput;
|
||||
this.page = 1;
|
||||
setVariable(this.getPreferenceKey('filters'), this.filters);
|
||||
|
||||
// hide modal
|
||||
window.bootstrap.Modal.getInstance(document.getElementById('filterModal')).hide();
|
||||
this.loadAccounts();
|
||||
},
|
||||
saveGroupedAccounts() {
|
||||
setVariable(this.getPreferenceKey('grouped'), this.pageOptions.groupedAccounts);
|
||||
this.page = 1;
|
||||
this.loadAccounts();
|
||||
},
|
||||
removeFilter(field) {
|
||||
this.filters[field] = null;
|
||||
this.page = 1;
|
||||
setVariable(this.getPreferenceKey('filters'), this.filters);
|
||||
this.loadAccounts();
|
||||
},
|
||||
hasFilters() {
|
||||
return this.filters.name !== null;
|
||||
},
|
||||
showFilterDialog(field) {
|
||||
this.lastFilterInput = this.filters[field] ?? '';
|
||||
this.lastClickedFilter = field;
|
||||
document.getElementById('filterInput').focus();
|
||||
},
|
||||
accountRole(roleName) {
|
||||
return i18next.t('firefly.account_role_' + roleName);
|
||||
},
|
||||
getPreferenceKey(name) {
|
||||
return 'acc_index_' + type + '_' + name;
|
||||
},
|
||||
pageNavigation() {
|
||||
return pageNavigation(this.totalPages, this.page, this.generatePageUrl(false));
|
||||
},
|
||||
|
||||
sort(column) {
|
||||
this.sortingColumn = column;
|
||||
this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
|
||||
const url = './accounts/' + type + '?column=' + column + '&direction=' + this.sortDirection;
|
||||
this.page = 1;
|
||||
this.pageOptions.sortingColumn = column;
|
||||
this.pageOptions.sortDirection = this.pageOptions.sortDirection === 'asc' ? 'desc' : 'asc';
|
||||
|
||||
window.history.pushState({}, "", url);
|
||||
this.updatePageUrl();
|
||||
|
||||
// get sort column
|
||||
setVariable(this.getPreferenceKey('sc'), this.pageOptions.sortingColumn);
|
||||
setVariable(this.getPreferenceKey('sd'), this.pageOptions.sortDirection);
|
||||
|
||||
this.loadAccounts();
|
||||
return false;
|
||||
},
|
||||
updatePageUrl() {
|
||||
this.pageUrl = this.generatePageUrl(true);
|
||||
|
||||
window.history.pushState({}, "", this.pageUrl);
|
||||
},
|
||||
generatePageUrl(includePageNr) {
|
||||
let url = './accounts/' + type + '?column=' + this.pageOptions.sortingColumn + '&direction=' + this.pageOptions.sortDirection + '&page=';
|
||||
if (includePageNr) {
|
||||
return url + this.page
|
||||
}
|
||||
return url;
|
||||
},
|
||||
|
||||
formatMoney(amount, currencyCode) {
|
||||
return formatMoney(amount, currencyCode);
|
||||
@@ -165,26 +229,70 @@ let index = function () {
|
||||
}
|
||||
}
|
||||
console.log('New settings', newSettings);
|
||||
setVariable('accts_columns_' + type, newSettings);
|
||||
setVariable(this.getPreferenceKey('columns'), newSettings);
|
||||
},
|
||||
|
||||
init() {
|
||||
// modal filter thing
|
||||
const myModalEl = document.getElementById('filterModal')
|
||||
myModalEl.addEventListener('shown.bs.modal', event => {
|
||||
document.getElementById('filterInput').focus();
|
||||
})
|
||||
|
||||
|
||||
// some opts
|
||||
this.pageOptions.isLoading = true;
|
||||
this.notifications.wait.show = true;
|
||||
this.notifications.wait.text = i18next.t('firefly.wait_loading_data')
|
||||
this.page = page;
|
||||
this.notifications.wait.text = i18next.t('firefly.wait_loading_data');
|
||||
|
||||
const key = 'accts_columns_' + type;
|
||||
const defaultValue = {"drag_and_drop": false};
|
||||
|
||||
getVariable(key, defaultValue).then((response) => {
|
||||
for (let k in response) {
|
||||
if (response.hasOwnProperty(k) && this.tableColumns.hasOwnProperty(k)) {
|
||||
this.tableColumns[k].enabled = response[k] ?? true;
|
||||
// start by collecting all preferences, create + put in the local store.
|
||||
getVariables([
|
||||
{name: this.getPreferenceKey('columns'), default: {"drag_and_drop": false}},
|
||||
{name: this.getPreferenceKey('sc'), default: ''},
|
||||
{name: this.getPreferenceKey('sd'), default: ''},
|
||||
{name: this.getPreferenceKey('filters'), default: this.filters},
|
||||
{name: this.getPreferenceKey('grouped'), default: true},
|
||||
]).then((res) => {
|
||||
// process columns:
|
||||
for (let k in res[0]) {
|
||||
if (res[0].hasOwnProperty(k) && this.tableColumns.hasOwnProperty(k)) {
|
||||
this.tableColumns[k].enabled = res[0][k] ?? true;
|
||||
}
|
||||
}
|
||||
}).then(() => {
|
||||
|
||||
// process sorting column:
|
||||
this.pageOptions.sortingColumn = '' === this.pageOptions.sortingColumn ? res[1] : this.pageOptions.sortingColumn;
|
||||
|
||||
// process sort direction
|
||||
this.pageOptions.sortDirection = '' === this.pageOptions.sortDirection ? res[2] : this.pageOptions.sortDirection;
|
||||
|
||||
// filters
|
||||
for (let k in res[3]) {
|
||||
if (res[3].hasOwnProperty(k) && this.filters.hasOwnProperty(k)) {
|
||||
this.filters[k] = res[3][k];
|
||||
}
|
||||
}
|
||||
|
||||
// group accounts
|
||||
this.pageOptions.groupedAccounts = res[4];
|
||||
|
||||
this.loadAccounts();
|
||||
});
|
||||
|
||||
},
|
||||
saveActiveFilter(e) {
|
||||
this.page = 1;
|
||||
if ('both' === e.currentTarget.value) {
|
||||
this.filters.active = null;
|
||||
}
|
||||
if ('active' === e.currentTarget.value) {
|
||||
this.filters.active = true;
|
||||
}
|
||||
if ('inactive' === e.currentTarget.value) {
|
||||
this.filters.active = false;
|
||||
}
|
||||
setVariable(this.getPreferenceKey('filters'), this.filters);
|
||||
this.loadAccounts();
|
||||
},
|
||||
renderObjectValue(field, account) {
|
||||
let renderer = new AccountRenderer();
|
||||
@@ -228,36 +336,45 @@ let index = function () {
|
||||
this.accounts[index].nameEditorVisible = true;
|
||||
},
|
||||
loadAccounts() {
|
||||
|
||||
this.pageOptions.isLoading = true;
|
||||
// sort instructions
|
||||
const sorting = [{column: this.sortingColumn, direction: this.sortDirection}];
|
||||
const sorting = [{column: this.pageOptions.sortingColumn, direction: this.pageOptions.sortDirection}];
|
||||
|
||||
// filter instructions
|
||||
let filters = [];
|
||||
for (let k in this.filters) {
|
||||
if (this.filters.hasOwnProperty(k) && null !== this.filters[k]) {
|
||||
filters.push({column: k, filter: this.filters[k]});
|
||||
}
|
||||
}
|
||||
|
||||
// get start and end from the store:
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const today = new Date();
|
||||
|
||||
let params = {
|
||||
sorting: sorting,
|
||||
filters: filters,
|
||||
today: today,
|
||||
type: type,
|
||||
page: this.page,
|
||||
start: start,
|
||||
end: end
|
||||
};
|
||||
|
||||
if(!this.tableColumns.balance_difference.enabled){
|
||||
if (!this.tableColumns.balance_difference.enabled) {
|
||||
delete params.start;
|
||||
delete params.end;
|
||||
}
|
||||
|
||||
this.notifications.wait.show = true;
|
||||
this.notifications.wait.text = i18next.t('firefly.wait_loading_data')
|
||||
this.accounts = [];
|
||||
|
||||
let groupedAccounts = {};
|
||||
// one page only.o
|
||||
(new Get()).index(params).then(response => {
|
||||
for (let i = 0; i < response.data.data.length; i++) {
|
||||
if (response.data.data.hasOwnProperty(i)) {
|
||||
let current = response.data.data[i];
|
||||
this.totalPages = response.meta.pagination.total_pages;
|
||||
for (let i = 0; i < response.data.length; i++) {
|
||||
if (response.data.hasOwnProperty(i)) {
|
||||
let current = response.data[i];
|
||||
let account = {
|
||||
id: parseInt(current.id),
|
||||
active: current.attributes.active,
|
||||
@@ -273,14 +390,45 @@ let index = function () {
|
||||
native_currency_code: current.attributes.native_currency_code,
|
||||
last_activity: null === current.attributes.last_activity ? '' : format(new Date(current.attributes.last_activity), i18next.t('config.month_and_day_fns')),
|
||||
balance_difference: current.attributes.balance_difference,
|
||||
native_balance_difference: current.attributes.native_balance_difference
|
||||
native_balance_difference: current.attributes.native_balance_difference,
|
||||
liability_type: current.attributes.liability_type,
|
||||
liability_direction: current.attributes.liability_direction,
|
||||
interest: current.attributes.interest,
|
||||
interest_period: current.attributes.interest_period,
|
||||
current_debt: current.attributes.current_debt,
|
||||
};
|
||||
console.log(current.attributes.balance_difference);
|
||||
this.accounts.push(account);
|
||||
|
||||
// get group info:
|
||||
let groupId = current.attributes.object_group_id;
|
||||
if(!this.pageOptions.groupedAccounts) {
|
||||
groupId = '0';
|
||||
}
|
||||
if (!groupedAccounts.hasOwnProperty(groupId)) {
|
||||
groupedAccounts[groupId] = {
|
||||
group: {
|
||||
id: '0' === groupId || null === groupId ? null : parseInt(groupId),
|
||||
title: current.attributes.object_group_title, // are ignored if group id is null.
|
||||
order: current.attributes.object_group_order,
|
||||
},
|
||||
accounts: [],
|
||||
}
|
||||
}
|
||||
groupedAccounts[groupId].accounts.push(account);
|
||||
|
||||
//this.accounts.push(account);
|
||||
}
|
||||
}
|
||||
// order grouped accounts by order.
|
||||
let sortable = [];
|
||||
for (let set in groupedAccounts) {
|
||||
sortable.push(groupedAccounts[set]);
|
||||
}
|
||||
sortable.sort(function(a, b) {
|
||||
return a.group.order - b.group.order;
|
||||
});
|
||||
this.accounts = sortable;
|
||||
this.notifications.wait.show = false;
|
||||
// add click trigger thing.
|
||||
this.pageOptions.isLoading = false;
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
@@ -63,7 +63,6 @@ let administrations = function () {
|
||||
|
||||
pageProperties: {},
|
||||
submitForm() {
|
||||
console.log('submitForm');
|
||||
(new Put()).put({title: this.title}, {id: this.id}).then(response => {
|
||||
if (this.formStates.returnHereButton) {
|
||||
this.notifications.success.show = true;
|
||||
|
||||
@@ -46,16 +46,18 @@ export default () => ({
|
||||
this.autoConversion = !this.autoConversion;
|
||||
setVariable('autoConversion', this.autoConversion);
|
||||
},
|
||||
localCacheKey(type) {
|
||||
return 'ds_accounts_' + type;
|
||||
},
|
||||
getFreshData() {
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const chartCacheKey = getCacheKey('dashboard-accounts-chart', start, end)
|
||||
const chartCacheKey = getCacheKey(this.localCacheKey('chart'), {start: start, end: end})
|
||||
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(chartCacheKey);
|
||||
|
||||
if (cacheValid && typeof cachedData !== 'undefined') {
|
||||
console.log(cachedData);
|
||||
this.drawChart(this.generateOptions(cachedData));
|
||||
this.loading = false;
|
||||
return;
|
||||
@@ -65,7 +67,6 @@ export default () => ({
|
||||
this.chartData = response.data;
|
||||
// cache generated options:
|
||||
window.store.set(chartCacheKey, response.data);
|
||||
console.log(response.data);
|
||||
this.drawChart(this.generateOptions(this.chartData));
|
||||
this.loading = false;
|
||||
});
|
||||
@@ -168,7 +169,7 @@ export default () => ({
|
||||
}
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const accountCacheKey = getCacheKey('dashboard-accounts-data', start, end);
|
||||
const accountCacheKey = getCacheKey(this.localCacheKey('data'), {start: start, end: end});
|
||||
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(accountCacheKey);
|
||||
@@ -221,7 +222,6 @@ export default () => ({
|
||||
|
||||
// if transfer and source is this account, multiply again
|
||||
if('transfer' === currentTransaction.type && parseInt(currentTransaction.source_id) === accountId) { //
|
||||
console.log('transfer', parseInt(currentTransaction.source_id), accountId);
|
||||
nativeAmountRaw = nativeAmountRaw * -1;
|
||||
amountRaw = amountRaw * -1;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,8 @@ export default () => ({
|
||||
getFreshData() {
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const boxesCacheKey = getCacheKey('dashboard-boxes-data', start, end);
|
||||
// TODO cache key is hard coded, problem?
|
||||
const boxesCacheKey = getCacheKey('ds_boxes_data', {start: start, end: end});
|
||||
cleanupCache();
|
||||
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
@@ -208,6 +209,7 @@ export default () => ({
|
||||
// Getter
|
||||
init() {
|
||||
// console.log('boxes init');
|
||||
// TODO can be replaced by "getVariables"
|
||||
Promise.all([getVariable('viewRange'), getVariable('autoConversion', false)]).then((values) => {
|
||||
// console.log('boxes after promises');
|
||||
afterPromises = true;
|
||||
|
||||
@@ -59,7 +59,7 @@ export default () => ({
|
||||
getFreshData() {
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const cacheKey = getCacheKey('dashboard-budgets-chart', start, end);
|
||||
const cacheKey = getCacheKey('ds_bdg_chart', {start: start, end: end});
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(cacheKey);
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ export default () => ({
|
||||
getFreshData() {
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const cacheKey = getCacheKey('dashboard-categories-chart', start, end);
|
||||
const cacheKey = getCacheKey('ds_ct_chart', {start: start, end: end});
|
||||
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(cacheKey);
|
||||
|
||||
@@ -25,7 +25,7 @@ import i18next from "i18next";
|
||||
|
||||
let apiData = {};
|
||||
let afterPromises = false;
|
||||
const PIGGY_CACHE_KEY = 'dashboard-piggies-data';
|
||||
const PIGGY_CACHE_KEY = 'ds_pg_data';
|
||||
|
||||
export default () => ({
|
||||
loading: false,
|
||||
@@ -36,7 +36,7 @@ export default () => ({
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
// needs user data.
|
||||
const cacheKey = getCacheKey(PIGGY_CACHE_KEY, start, end);
|
||||
const cacheKey = getCacheKey(PIGGY_CACHE_KEY, {start: start, end: end});
|
||||
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(cacheKey);
|
||||
@@ -58,7 +58,7 @@ export default () => ({
|
||||
downloadPiggyBanks(params) {
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const cacheKey = getCacheKey(PIGGY_CACHE_KEY, start, end);
|
||||
const cacheKey = getCacheKey(PIGGY_CACHE_KEY, {start: start, end: end});
|
||||
const getter = new Get();
|
||||
getter.list(params).then((response) => {
|
||||
apiData = [...apiData, ...response.data.data];
|
||||
|
||||
@@ -28,7 +28,7 @@ import i18next from "i18next";
|
||||
|
||||
Chart.register({SankeyController, Flow});
|
||||
|
||||
const SANKEY_CACHE_KEY = 'dashboard-sankey-data';
|
||||
const SANKEY_CACHE_KEY = 'ds_sankey_data';
|
||||
let currencies = [];
|
||||
let afterPromises = false;
|
||||
let chart = null;
|
||||
@@ -288,7 +288,7 @@ export default () => ({
|
||||
getFreshData() {
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const cacheKey = getCacheKey(SANKEY_CACHE_KEY, start, end);
|
||||
const cacheKey = getCacheKey(SANKEY_CACHE_KEY, {start: start, end: end});
|
||||
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(cacheKey);
|
||||
@@ -312,7 +312,7 @@ export default () => ({
|
||||
downloadTransactions(params) {
|
||||
const start = new Date(window.store.get('start'));
|
||||
const end = new Date(window.store.get('end'));
|
||||
const cacheKey = getCacheKey(SANKEY_CACHE_KEY, start, end);
|
||||
const cacheKey = getCacheKey(SANKEY_CACHE_KEY, {start: start, end: end});
|
||||
|
||||
//console.log('Downloading page ' + params.page + '...');
|
||||
const getter = new Get();
|
||||
|
||||
@@ -186,7 +186,7 @@ export default () => ({
|
||||
let end = new Date(window.store.get('end'));
|
||||
|
||||
const cacheValid = window.store.get('cacheValid');
|
||||
let cachedData = window.store.get(getCacheKey('subscriptions-data-dashboard', start, end));
|
||||
let cachedData = window.store.get(getCacheKey('ds_sub_data', {start: start, end: end}));
|
||||
|
||||
if (cacheValid && typeof cachedData !== 'undefined' && false) {
|
||||
console.error('cannot handle yet');
|
||||
|
||||
@@ -39,6 +39,10 @@ export function getVariable(name, defaultValue = null) {
|
||||
return getter.getByName(name).then((response) => {
|
||||
return Promise.resolve(parseResponse(name, response));
|
||||
}).catch((error) => {
|
||||
if('' === defaultValue) {
|
||||
// do not try to store empty strings.
|
||||
return Promise.resolve(defaultValue);
|
||||
}
|
||||
// preference does not exist (yet).
|
||||
// POST it and then return it anyway.
|
||||
let poster = (new Post);
|
||||
|
||||
47
resources/assets/v2/src/store/get-variables.js
Normal file
47
resources/assets/v2/src/store/get-variables.js
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* get-variable.js
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
import {getVariable} from "./get-variable.js";
|
||||
|
||||
export function getVariables(preferences) {
|
||||
let chain = Promise.resolve();
|
||||
let allVariables = [];
|
||||
for (let i = 0; i < preferences.length; i++) {
|
||||
|
||||
let current = preferences[i];
|
||||
let name = current.name;
|
||||
let defaultValue = current.default;
|
||||
chain = chain.then(() => {
|
||||
return getVariable(name, defaultValue).then((value) => {
|
||||
allVariables.push(value);
|
||||
return Promise.resolve(allVariables);
|
||||
});
|
||||
});
|
||||
}
|
||||
return chain;
|
||||
|
||||
}
|
||||
|
||||
export function parseResponse(name, response) {
|
||||
let value = response.data.data.attributes.data;
|
||||
window.store.set(name, value);
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -20,12 +20,77 @@
|
||||
|
||||
import {format} from "date-fns";
|
||||
import store from "store";
|
||||
//const { createHash } = require('crypto');
|
||||
|
||||
function getCacheKey(string, start, end) {
|
||||
const localValue = store.get('lastActivity');
|
||||
const cacheKey = 'dcx' + format(start, 'yMMdd')+ format(end, 'yMMdd') + string + localValue;
|
||||
console.log('getCacheKey: ' + cacheKey);
|
||||
return String(cacheKey);
|
||||
|
||||
|
||||
function getCacheKey(string, params) {
|
||||
const lastActivity = store.get('lastActivity')
|
||||
let newParams = {lastActivity: lastActivity, key: string};
|
||||
|
||||
for (const key in params) {
|
||||
if (params.hasOwnProperty(key)) {
|
||||
if(params[key] === null || params[key] === undefined) {
|
||||
newParams[key] = '';
|
||||
continue;
|
||||
}
|
||||
if(params[key] instanceof Date) {
|
||||
newParams[key] = format(params[key], 'yMMdd');
|
||||
continue;
|
||||
}
|
||||
newParams[key] = params[key];
|
||||
}
|
||||
}
|
||||
return 'dcx_' + md5(JSON.stringify(newParams)).substring(0,12) + lastActivity;
|
||||
}
|
||||
|
||||
// Formatted version of a popular md5 implementation
|
||||
// Original copyright (c) Paul Johnston & Greg Holt.
|
||||
// The function itself is now 42 lines long.
|
||||
|
||||
function md5(inputString) {
|
||||
var hc="0123456789abcdef";
|
||||
function rh(n) {var j,s="";for(j=0;j<=3;j++) s+=hc.charAt((n>>(j*8+4))&0x0F)+hc.charAt((n>>(j*8))&0x0F);return s;}
|
||||
function ad(x,y) {var l=(x&0xFFFF)+(y&0xFFFF);var m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF);}
|
||||
function rl(n,c) {return (n<<c)|(n>>>(32-c));}
|
||||
function cm(q,a,b,x,s,t) {return ad(rl(ad(ad(a,q),ad(x,t)),s),b);}
|
||||
function ff(a,b,c,d,x,s,t) {return cm((b&c)|((~b)&d),a,b,x,s,t);}
|
||||
function gg(a,b,c,d,x,s,t) {return cm((b&d)|(c&(~d)),a,b,x,s,t);}
|
||||
function hh(a,b,c,d,x,s,t) {return cm(b^c^d,a,b,x,s,t);}
|
||||
function ii(a,b,c,d,x,s,t) {return cm(c^(b|(~d)),a,b,x,s,t);}
|
||||
function sb(x) {
|
||||
var i;var nblk=((x.length+8)>>6)+1;var blks=new Array(nblk*16);for(i=0;i<nblk*16;i++) blks[i]=0;
|
||||
for(i=0;i<x.length;i++) blks[i>>2]|=x.charCodeAt(i)<<((i%4)*8);
|
||||
blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=x.length*8;return blks;
|
||||
}
|
||||
var i,x=sb(""+inputString),a=1732584193,b=-271733879,c=-1732584194,d=271733878,olda,oldb,oldc,oldd;
|
||||
for(i=0;i<x.length;i+=16) {olda=a;oldb=b;oldc=c;oldd=d;
|
||||
a=ff(a,b,c,d,x[i+ 0], 7, -680876936);d=ff(d,a,b,c,x[i+ 1],12, -389564586);c=ff(c,d,a,b,x[i+ 2],17, 606105819);
|
||||
b=ff(b,c,d,a,x[i+ 3],22,-1044525330);a=ff(a,b,c,d,x[i+ 4], 7, -176418897);d=ff(d,a,b,c,x[i+ 5],12, 1200080426);
|
||||
c=ff(c,d,a,b,x[i+ 6],17,-1473231341);b=ff(b,c,d,a,x[i+ 7],22, -45705983);a=ff(a,b,c,d,x[i+ 8], 7, 1770035416);
|
||||
d=ff(d,a,b,c,x[i+ 9],12,-1958414417);c=ff(c,d,a,b,x[i+10],17, -42063);b=ff(b,c,d,a,x[i+11],22,-1990404162);
|
||||
a=ff(a,b,c,d,x[i+12], 7, 1804603682);d=ff(d,a,b,c,x[i+13],12, -40341101);c=ff(c,d,a,b,x[i+14],17,-1502002290);
|
||||
b=ff(b,c,d,a,x[i+15],22, 1236535329);a=gg(a,b,c,d,x[i+ 1], 5, -165796510);d=gg(d,a,b,c,x[i+ 6], 9,-1069501632);
|
||||
c=gg(c,d,a,b,x[i+11],14, 643717713);b=gg(b,c,d,a,x[i+ 0],20, -373897302);a=gg(a,b,c,d,x[i+ 5], 5, -701558691);
|
||||
d=gg(d,a,b,c,x[i+10], 9, 38016083);c=gg(c,d,a,b,x[i+15],14, -660478335);b=gg(b,c,d,a,x[i+ 4],20, -405537848);
|
||||
a=gg(a,b,c,d,x[i+ 9], 5, 568446438);d=gg(d,a,b,c,x[i+14], 9,-1019803690);c=gg(c,d,a,b,x[i+ 3],14, -187363961);
|
||||
b=gg(b,c,d,a,x[i+ 8],20, 1163531501);a=gg(a,b,c,d,x[i+13], 5,-1444681467);d=gg(d,a,b,c,x[i+ 2], 9, -51403784);
|
||||
c=gg(c,d,a,b,x[i+ 7],14, 1735328473);b=gg(b,c,d,a,x[i+12],20,-1926607734);a=hh(a,b,c,d,x[i+ 5], 4, -378558);
|
||||
d=hh(d,a,b,c,x[i+ 8],11,-2022574463);c=hh(c,d,a,b,x[i+11],16, 1839030562);b=hh(b,c,d,a,x[i+14],23, -35309556);
|
||||
a=hh(a,b,c,d,x[i+ 1], 4,-1530992060);d=hh(d,a,b,c,x[i+ 4],11, 1272893353);c=hh(c,d,a,b,x[i+ 7],16, -155497632);
|
||||
b=hh(b,c,d,a,x[i+10],23,-1094730640);a=hh(a,b,c,d,x[i+13], 4, 681279174);d=hh(d,a,b,c,x[i+ 0],11, -358537222);
|
||||
c=hh(c,d,a,b,x[i+ 3],16, -722521979);b=hh(b,c,d,a,x[i+ 6],23, 76029189);a=hh(a,b,c,d,x[i+ 9], 4, -640364487);
|
||||
d=hh(d,a,b,c,x[i+12],11, -421815835);c=hh(c,d,a,b,x[i+15],16, 530742520);b=hh(b,c,d,a,x[i+ 2],23, -995338651);
|
||||
a=ii(a,b,c,d,x[i+ 0], 6, -198630844);d=ii(d,a,b,c,x[i+ 7],10, 1126891415);c=ii(c,d,a,b,x[i+14],15,-1416354905);
|
||||
b=ii(b,c,d,a,x[i+ 5],21, -57434055);a=ii(a,b,c,d,x[i+12], 6, 1700485571);d=ii(d,a,b,c,x[i+ 3],10,-1894986606);
|
||||
c=ii(c,d,a,b,x[i+10],15, -1051523);b=ii(b,c,d,a,x[i+ 1],21,-2054922799);a=ii(a,b,c,d,x[i+ 8], 6, 1873313359);
|
||||
d=ii(d,a,b,c,x[i+15],10, -30611744);c=ii(c,d,a,b,x[i+ 6],15,-1560198380);b=ii(b,c,d,a,x[i+13],21, 1309151649);
|
||||
a=ii(a,b,c,d,x[i+ 4], 6, -145523070);d=ii(d,a,b,c,x[i+11],10,-1120210379);c=ii(c,d,a,b,x[i+ 2],15, 718787259);
|
||||
b=ii(b,c,d,a,x[i+ 9],21, -343485551);a=ad(a,olda);b=ad(b,oldb);c=ad(c,oldc);d=ad(d,oldd);
|
||||
}
|
||||
return rh(a)+rh(b)+rh(c)+rh(d);
|
||||
}
|
||||
|
||||
|
||||
|
||||
export {getCacheKey};
|
||||
|
||||
95
resources/assets/v2/src/support/page-navigation.js
Normal file
95
resources/assets/v2/src/support/page-navigation.js
Normal file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* page-navigation.js
|
||||
* 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/.
|
||||
*/
|
||||
|
||||
function logarithmicPaginationLinks(lastPage, matchPage, linkURL) {
|
||||
function pageLink(p, page) {
|
||||
if(p === page) {
|
||||
// href="'+ linkURL+ p + '"
|
||||
return '<li class="page-item active" aria-current="page"><a class="page-link" href="#" @click.prevent="goToPage('+p+')">'+p+'</a></li>';
|
||||
}
|
||||
// href="'+ linkURL+ p + '"
|
||||
return '<li class="page-item"><a class="page-link" href="#" @click.prevent="goToPage('+p+')">'+p+'</a></li>';
|
||||
|
||||
// return ((p === page) ? "<b>" + p + "</b>" : '<a href="' + linkURL + p + '">' + p + "</a>");
|
||||
}
|
||||
|
||||
let page = (matchPage ? matchPage : 1), LINKS_PER_STEP = 5, lastp1 = 1, lastp2 = page, p1 = 1, p2 = page,
|
||||
c1 = LINKS_PER_STEP + 1, c2 = LINKS_PER_STEP + 1, s1 = "", s2 = "", step = 1, linkHTML = "";
|
||||
|
||||
while (true) {
|
||||
if (c1 >= c2) {
|
||||
s1 += pageLink(p1, matchPage);
|
||||
lastp1 = p1;
|
||||
p1 += step;
|
||||
c1--;
|
||||
} else {
|
||||
s2 = pageLink(p2, matchPage) + s2;
|
||||
lastp2 = p2;
|
||||
p2 -= step;
|
||||
c2--;
|
||||
}
|
||||
if (c2 === 0) {
|
||||
step *= 25;
|
||||
p1 += step - 1; // Round UP to nearest multiple of step
|
||||
p1 -= (p1 % step);
|
||||
p2 -= (p2 % step); // Round DOWN to nearest multiple of step
|
||||
c1 = LINKS_PER_STEP;
|
||||
c2 = LINKS_PER_STEP;
|
||||
}
|
||||
if (p1 > p2) {
|
||||
linkHTML += s1 + s2;
|
||||
if ((lastp2 > page) || (page >= lastPage)) break;
|
||||
lastp1 = page;
|
||||
lastp2 = lastPage;
|
||||
p1 = page + 1;
|
||||
p2 = lastPage;
|
||||
c1 = LINKS_PER_STEP;
|
||||
c2 = LINKS_PER_STEP + 1;
|
||||
s1 = '';
|
||||
s2 = '';
|
||||
step = 1;
|
||||
}
|
||||
}
|
||||
return linkHTML;
|
||||
}
|
||||
|
||||
export default function pageNavigation(totalPages, currentPage, navigationURL) {
|
||||
|
||||
totalPages = parseInt(totalPages);
|
||||
currentPage = parseInt(currentPage);
|
||||
let html = '<nav aria-label="Page navigation">';
|
||||
html += '<ul class="pagination">';
|
||||
if(currentPage > 1) {
|
||||
html += '<li class="page-item"><a class="page-link" href="#">Previous</a></li>';
|
||||
}
|
||||
if(1 === currentPage) {
|
||||
html += '<li class="page-item disabled"><a class="page-link">Previous</a></li>';
|
||||
}
|
||||
html += logarithmicPaginationLinks(totalPages, currentPage, navigationURL);
|
||||
if(currentPage !== totalPages) {
|
||||
html += '<li class="page-item"><a class="page-link" href="#">Next</a></li>';
|
||||
}
|
||||
if(currentPage === totalPages) {
|
||||
html += '<li class="page-item disabled"><a class="page-link">Next</a></li>';
|
||||
}
|
||||
html += '</ul></nav>';
|
||||
|
||||
return html;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user