Compare commits

..

27 Commits

Author SHA1 Message Date
github-actions
36d9e5c3fe Auto commit for release 'develop' on 2024-05-09 2024-05-09 05:10:13 +02:00
James Cole
8d614de67f Possible fix for https://github.com/firefly-iii/firefly-iii/issues/8867 2024-05-08 21:55:14 +02:00
James Cole
d17da670ab Fix connect exception, add some debug logs. 2024-05-06 06:33:12 +02:00
github-actions
5bf4df9ad8 Auto commit for release 'develop' on 2024-05-06 2024-05-06 05:10:30 +02:00
James Cole
07db6b59ce Fix webhooks overview. 2024-05-02 06:15:41 +02:00
github-actions
e16f1cf4ee Auto commit for release 'develop' on 2024-05-02 2024-05-02 05:10:23 +02:00
James Cole
4c80d929ca Possible division by zero? 2024-05-01 06:29:28 +02:00
github-actions
16364d9859 Auto commit for release 'develop' on 2024-04-30 2024-04-30 20:33:00 +02:00
James Cole
c24f6acb2c Fix styles 2024-04-30 20:26:05 +02:00
James Cole
4bd19e0627 Expand and fix sort columns 2024-04-30 20:22:31 +02:00
James Cole
69d839997a Fix sorting and order for account lists. 2024-04-29 20:20:11 +02:00
github-actions
c02c027f4f Auto commit for release 'develop' on 2024-04-29 2024-04-29 06:36:36 +02:00
James Cole
b14606625e Upload corrected file 2024-04-29 06:31:18 +02:00
James Cole
222d7b56c7 Merge pull request #8835 from firefly-iii/dependabot/npm_and_yarn/develop/chartjs-chart-sankey-0.12.1 2024-04-29 06:07:17 +02:00
James Cole
b7f7bf42b2 Merge pull request #8834 from firefly-iii/dependabot/composer/develop/ramsey/uuid-4.7.6 2024-04-29 06:07:09 +02:00
dependabot[bot]
0cbd64d31a Bump chartjs-chart-sankey from 0.12.0 to 0.12.1
Bumps [chartjs-chart-sankey](https://github.com/kurkle/chartjs-chart-sankey) from 0.12.0 to 0.12.1.
- [Release notes](https://github.com/kurkle/chartjs-chart-sankey/releases)
- [Commits](https://github.com/kurkle/chartjs-chart-sankey/compare/v0.12.0...v0.12.1)

---
updated-dependencies:
- dependency-name: chartjs-chart-sankey
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 03:55:28 +00:00
dependabot[bot]
60bdae47c4 Bump ramsey/uuid from 4.7.5 to 4.7.6
Bumps [ramsey/uuid](https://github.com/ramsey/uuid) from 4.7.5 to 4.7.6.
- [Release notes](https://github.com/ramsey/uuid/releases)
- [Changelog](https://github.com/ramsey/uuid/blob/4.x/CHANGELOG.md)
- [Commits](https://github.com/ramsey/uuid/compare/4.7.5...4.7.6)

---
updated-dependencies:
- dependency-name: ramsey/uuid
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-29 03:34:37 +00:00
James Cole
ca4b38d905 Add debug thing for tables. 2024-04-28 20:20:18 +02:00
James Cole
3674465f53 Translate stuff 2024-04-28 14:43:23 +02:00
James Cole
b951d4130c Allow account grouping 2024-04-28 14:40:22 +02:00
James Cole
7992b810fd Expand view with several new options. Move cache to api endpoints. 2024-04-28 13:30:42 +02:00
James Cole
c1c0afa40b Expand account index overview. 2024-04-28 09:54:28 +02:00
github-actions
56c9026299 Auto commit for release 'develop' on 2024-04-26 2024-04-26 06:18:27 +02:00
James Cole
021ddfc36b Clear out file to see if develop action picks it up correctly. 2024-04-26 06:13:03 +02:00
James Cole
feabfe54f0 First attempt at comma based preference collector 2024-04-26 05:31:02 +02:00
James Cole
565409b486 Remove address 2024-04-25 19:51:15 +02:00
James Cole
f57366da5f Add thanks file. 2024-04-25 19:49:58 +02:00
215 changed files with 3094 additions and 1238 deletions

View File

@@ -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
View 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!

View File

@@ -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

View File

@@ -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();

View File

@@ -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()

View File

@@ -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

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;
/**

View 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;
}
}

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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'],
],
],
];

View File

@@ -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',

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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}}",

View File

@@ -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;

View File

@@ -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"
}

View File

@@ -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",

View File

@@ -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')

View File

@@ -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",

View File

@@ -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});
});
}
/**

View File

@@ -43,6 +43,7 @@ store.addPlugin(observePlugin);
window.bootstrapped = false;
window.store = store;
window.bootstrap = bootstrap;

View File

@@ -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;
});
},
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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];

View File

@@ -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();

View File

@@ -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');

View File

@@ -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);

View 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;
}

View File

@@ -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};

View 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