mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2026-01-08 03:21:20 +00:00
Compare commits
107 Commits
develop-20
...
develop-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc98d66ef4 | ||
|
|
f6642c075d | ||
|
|
458a337521 | ||
|
|
37d2299a1d | ||
|
|
f69cffc50b | ||
|
|
fd77a17ba5 | ||
|
|
b481cf53e7 | ||
|
|
a4a4590c45 | ||
|
|
9e398beb07 | ||
|
|
38ae3df423 | ||
|
|
2f17701b68 | ||
|
|
4c797c1d4c | ||
|
|
a8e1c22c93 | ||
|
|
b60021e0ce | ||
|
|
453ccd3271 | ||
|
|
08f13aebe3 | ||
|
|
26df1be871 | ||
|
|
fe2def9684 | ||
|
|
db2cab3cef | ||
|
|
d84405191f | ||
|
|
349d32a268 | ||
|
|
30b7e17b6f | ||
|
|
2d3d3bc0a4 | ||
|
|
a4f887921a | ||
|
|
710732d7f5 | ||
|
|
cd08c16dee | ||
|
|
a8f36a2490 | ||
|
|
7f12d06989 | ||
|
|
8eb0313841 | ||
|
|
113eb84461 | ||
|
|
cdf42e50f0 | ||
|
|
e59cf03d80 | ||
|
|
0bd0e6caeb | ||
|
|
605623a7af | ||
|
|
042d055d85 | ||
|
|
cc29d0a850 | ||
|
|
7dede49aee | ||
|
|
775282ae02 | ||
|
|
e49806078a | ||
|
|
71d8c0d219 | ||
|
|
0031c5a5ad | ||
|
|
3ce111550e | ||
|
|
58af83cc8c | ||
|
|
422a23e700 | ||
|
|
8c2672cdf8 | ||
|
|
764e49985b | ||
|
|
84251f8f10 | ||
|
|
3d878cb5dd | ||
|
|
8b4740d28c | ||
|
|
0845e265c2 | ||
|
|
b4455a3802 | ||
|
|
8d12d47691 | ||
|
|
3dc01b0d5c | ||
|
|
b442645280 | ||
|
|
eda2b5f822 | ||
|
|
d9593db5e2 | ||
|
|
9dcb8e2680 | ||
|
|
56bac9fc97 | ||
|
|
f7ad9c56c8 | ||
|
|
0086a0ddc8 | ||
|
|
25ebfd6978 | ||
|
|
de8149137a | ||
|
|
79ae110368 | ||
|
|
60aef0de1a | ||
|
|
8d464962a8 | ||
|
|
b93cfc5de2 | ||
|
|
d41f5b1090 | ||
|
|
40322813c9 | ||
|
|
4a98927e32 | ||
|
|
193e529803 | ||
|
|
fbf20ef2c2 | ||
|
|
54de829c8a | ||
|
|
131b987561 | ||
|
|
dce6754c62 | ||
|
|
f4bca90080 | ||
|
|
b2960b1ed9 | ||
|
|
33f87bce23 | ||
|
|
23aa45609b | ||
|
|
b098952f82 | ||
|
|
68c3e14b0c | ||
|
|
19d08137a5 | ||
|
|
73776e7869 | ||
|
|
bf04ca12c1 | ||
|
|
a4637debe9 | ||
|
|
48c1b525be | ||
|
|
56470bfbba | ||
|
|
0f732ca874 | ||
|
|
e452ba938d | ||
|
|
9921c5a925 | ||
|
|
58fab75681 | ||
|
|
54990308f6 | ||
|
|
f95758ff47 | ||
|
|
8d830e178f | ||
|
|
334a521ca1 | ||
|
|
12629a1955 | ||
|
|
2e3669a32f | ||
|
|
ea337607c4 | ||
|
|
f7f317a3b2 | ||
|
|
adbf6defe5 | ||
|
|
e0709f2975 | ||
|
|
30007b05cb | ||
|
|
13fc7f0d8d | ||
|
|
7c85138115 | ||
|
|
2c25f65f7f | ||
|
|
7eaba962e8 | ||
|
|
7c38393cde | ||
|
|
153fd2ae74 |
48
.ci/php-cs-fixer/composer.lock
generated
48
.ci/php-cs-fixer/composer.lock
generated
@@ -406,16 +406,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "friendsofphp/php-cs-fixer",
|
"name": "friendsofphp/php-cs-fixer",
|
||||||
"version": "v3.69.0",
|
"version": "v3.72.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||||
"reference": "630a59448c00729bc235d5e95cfedefeaca37523"
|
"reference": "900389362c43d116fee1ffc51f7878145fa61b57"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/630a59448c00729bc235d5e95cfedefeaca37523",
|
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/900389362c43d116fee1ffc51f7878145fa61b57",
|
||||||
"reference": "630a59448c00729bc235d5e95cfedefeaca37523",
|
"reference": "900389362c43d116fee1ffc51f7878145fa61b57",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -445,18 +445,18 @@
|
|||||||
"symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
|
"symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"facile-it/paraunit": "^1.3.1 || ^2.5",
|
"facile-it/paraunit": "^1.3.1 || ^2.6",
|
||||||
"infection/infection": "^0.29.10",
|
"infection/infection": "^0.29.14",
|
||||||
"justinrainbow/json-schema": "^5.3 || ^6.0",
|
"justinrainbow/json-schema": "^5.3 || ^6.2",
|
||||||
"keradus/cli-executor": "^2.1",
|
"keradus/cli-executor": "^2.1",
|
||||||
"mikey179/vfsstream": "^1.6.12",
|
"mikey179/vfsstream": "^1.6.12",
|
||||||
"php-coveralls/php-coveralls": "^2.7",
|
"php-coveralls/php-coveralls": "^2.7",
|
||||||
"php-cs-fixer/accessible-object": "^1.1",
|
"php-cs-fixer/accessible-object": "^1.1",
|
||||||
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
|
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
|
||||||
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
|
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
|
||||||
"phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7",
|
"phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12",
|
||||||
"symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0",
|
"symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3",
|
||||||
"symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.0"
|
"symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-dom": "For handling output formats in XML",
|
"ext-dom": "For handling output formats in XML",
|
||||||
@@ -497,7 +497,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
||||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.69.0"
|
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.72.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -505,7 +505,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-02-14T16:19:23+00:00"
|
"time": "2025-03-13T11:25:37+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
@@ -2242,16 +2242,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/process",
|
"name": "symfony/process",
|
||||||
"version": "v7.2.0",
|
"version": "v7.2.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/process.git",
|
"url": "https://github.com/symfony/process.git",
|
||||||
"reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e"
|
"reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
|
"url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf",
|
||||||
"reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e",
|
"reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -2283,7 +2283,7 @@
|
|||||||
"description": "Executes commands in sub-processes",
|
"description": "Executes commands in sub-processes",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/process/tree/v7.2.0"
|
"source": "https://github.com/symfony/process/tree/v7.2.4"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -2299,7 +2299,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-11-06T14:24:19+00:00"
|
"time": "2025-02-05T08:33:46+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/service-contracts",
|
"name": "symfony/service-contracts",
|
||||||
@@ -2386,16 +2386,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/stopwatch",
|
"name": "symfony/stopwatch",
|
||||||
"version": "v7.2.2",
|
"version": "v7.2.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/stopwatch.git",
|
"url": "https://github.com/symfony/stopwatch.git",
|
||||||
"reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df"
|
"reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df",
|
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
|
||||||
"reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df",
|
"reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -2428,7 +2428,7 @@
|
|||||||
"description": "Provides a way to profile code",
|
"description": "Provides a way to profile code",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/stopwatch/tree/v7.2.2"
|
"source": "https://github.com/symfony/stopwatch/tree/v7.2.4"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -2444,7 +2444,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2024-12-18T14:28:33+00:00"
|
"time": "2025-02-24T10:49:57+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/string",
|
"name": "symfony/string",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ SITE_OWNER=mail@example.com
|
|||||||
APP_KEY=SomeRandomStringOf32CharsExactly
|
APP_KEY=SomeRandomStringOf32CharsExactly
|
||||||
|
|
||||||
# Firefly III will launch using this language (for new users and unauthenticated visitors)
|
# Firefly III will launch using this language (for new users and unauthenticated visitors)
|
||||||
# For a list of available languages: https://github.com/firefly-iii/firefly-iii/tree/main/resources/lang
|
# For a list of available languages: https://github.com/firefly-iii/firefly-iii/blob/main/config/firefly.php#L123
|
||||||
#
|
#
|
||||||
# If text is still in English, remember that not everything may have been translated.
|
# If text is still in English, remember that not everything may have been translated.
|
||||||
DEFAULT_LANGUAGE=en_US
|
DEFAULT_LANGUAGE=en_US
|
||||||
@@ -326,7 +326,7 @@ USE_RUNNING_BALANCE=false
|
|||||||
FIREFLY_III_LAYOUT=v1
|
FIREFLY_III_LAYOUT=v1
|
||||||
|
|
||||||
#
|
#
|
||||||
# Which Query Parser implementation to use for the search rngine and rules
|
# Which Query Parser implementation to use for the search engine and rules
|
||||||
# 'new' is experimental, 'legacy' is the classic one
|
# 'new' is experimental, 'legacy' is the classic one
|
||||||
#
|
#
|
||||||
QUERY_PARSER_IMPLEMENTATION=legacy
|
QUERY_PARSER_IMPLEMENTATION=legacy
|
||||||
|
|||||||
8
.github/mergify.yml
vendored
8
.github/mergify.yml
vendored
@@ -1,5 +1,11 @@
|
|||||||
---
|
|
||||||
pull_request_rules:
|
pull_request_rules:
|
||||||
|
- name: Make sure PR are up to date before merging
|
||||||
|
description: This automatically updates PRs when they are out-of-date with the
|
||||||
|
base branch to avoid semantic conflicts (next step is using a merge
|
||||||
|
queue).
|
||||||
|
conditions: []
|
||||||
|
actions:
|
||||||
|
update:
|
||||||
- name: Close all on main
|
- name: Close all on main
|
||||||
conditions:
|
conditions:
|
||||||
- base=main
|
- base=main
|
||||||
|
|||||||
2
.github/workflows/close-duplicates.yml
vendored
2
.github/workflows/close-duplicates.yml
vendored
@@ -13,7 +13,7 @@ jobs:
|
|||||||
close_duplicates:
|
close_duplicates:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: github/command@v1.3.0
|
- uses: github/command@v2.0.0
|
||||||
id: command
|
id: command
|
||||||
with:
|
with:
|
||||||
allowed_contexts: "issue"
|
allowed_contexts: "issue"
|
||||||
|
|||||||
12
.github/workflows/release.yml
vendored
12
.github/workflows/release.yml
vendored
@@ -204,9 +204,9 @@ jobs:
|
|||||||
|
|
||||||
# zip and tar everything
|
# zip and tar everything
|
||||||
echo 'Zip and tar...'
|
echo 'Zip and tar...'
|
||||||
zip -rq $zipName . -x "*.git*" "*.ci*" "*.github*" "*node_modules*" "*output.txt*"
|
zip -rq $zipName . -x "*.git*" "*.ci*" "*.github*" "*node_modules*" "*output.txt*" "*Procfile*" "*crowdin.yml*" "*sonar-project.properties*"
|
||||||
touch $tarName
|
touch $tarName
|
||||||
tar --exclude=$tarName --exclude=$zipName --exclude='./.git' --exclude='./.ci' --exclude='./.github' --exclude='./node_modules' --exclude='./output.txt' -czf $tarName .
|
tar --exclude=$tarName --exclude=$zipName --exclude='./.git' --exclude='./.ci' --exclude='./.github' --exclude='./node_modules' --exclude='./output.txt' --exclude='./Procfile' --exclude='../crowdin.yml' --exclude='./sonar-project.properties' -czf $tarName .
|
||||||
|
|
||||||
# add sha256 sum
|
# add sha256 sum
|
||||||
echo 'Sha sum ...'
|
echo 'Sha sum ...'
|
||||||
@@ -225,7 +225,7 @@ jobs:
|
|||||||
sudo chown -R runner:docker output.txt
|
sudo chown -R runner:docker output.txt
|
||||||
echo "Weekly development release of Firefly III with the latest fixes, translations and features. Docker users can find this release under the \`develop\` tag." >> output.txt
|
echo "Weekly development release of Firefly III with the latest fixes, translations and features. Docker users can find this release under the \`develop\` tag." >> output.txt
|
||||||
echo "" >> output.txt
|
echo "" >> output.txt
|
||||||
echo "This release was created on **$(date +'%Y-%m-%d')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
echo "This release was created on **$(date +'%Y-%m-%d %H:%M')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
||||||
echo "" >> output.txt
|
echo "" >> output.txt
|
||||||
echo "* Please read the installation instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt
|
echo "* Please read the installation instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt
|
||||||
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/self-managed/)" >> output.txt
|
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/self-managed/)" >> output.txt
|
||||||
@@ -240,7 +240,7 @@ jobs:
|
|||||||
sudo chown -R runner:docker output.txt
|
sudo chown -R runner:docker output.txt
|
||||||
echo "Irregular BRANCH release of Firefly III. This release contains specific features or changes. Docker users can find this release under the \`$version\` tag." >> output.txt
|
echo "Irregular BRANCH release of Firefly III. This release contains specific features or changes. Docker users can find this release under the \`$version\` tag." >> output.txt
|
||||||
echo "" >> output.txt
|
echo "" >> output.txt
|
||||||
echo "This release was created on **$(date +'%Y-%m-%d')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
echo "This release was created on **$(date +'%Y-%m-%d %H:%M')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
||||||
echo "" >> output.txt
|
echo "" >> output.txt
|
||||||
echo "* Please read the installation instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt
|
echo "* Please read the installation instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/installation/docker/), [Portainer](https://docs.firefly-iii.org/how-to/firefly-iii/installation/portainer/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/installation/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/installation/self-managed/)" >> output.txt
|
||||||
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/self-managed/)" >> output.txt
|
echo "* Or read the upgrade instructions for [Docker](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/docker/), [Kubernetes](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/kubernetes/) or [self-managed servers](https://docs.firefly-iii.org/how-to/firefly-iii/upgrade/self-managed/)" >> output.txt
|
||||||
@@ -268,7 +268,7 @@ jobs:
|
|||||||
sudo chown -R runner:docker output.txt
|
sudo chown -R runner:docker output.txt
|
||||||
echo "Very early ALPHA release of Firefly III. This release contains specific features or changes. Docker users can find this release under the \`$version\` tag." >> output.txt
|
echo "Very early ALPHA release of Firefly III. This release contains specific features or changes. Docker users can find this release under the \`$version\` tag." >> output.txt
|
||||||
echo '' >> output.txt
|
echo '' >> output.txt
|
||||||
echo "This release was created on **$(date +'%Y-%m-%d')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
echo "This release was created on **$(date +'%Y-%m-%d %H:%M')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
||||||
echo '' >> output.txt
|
echo '' >> output.txt
|
||||||
echo '### Instructions' >> output.txt
|
echo '### Instructions' >> output.txt
|
||||||
echo '' >> output.txt
|
echo '' >> output.txt
|
||||||
@@ -286,7 +286,7 @@ jobs:
|
|||||||
sudo chown -R runner:docker output.txt
|
sudo chown -R runner:docker output.txt
|
||||||
echo "Very early BETA release of Firefly III. This release contains specific features or changes. Docker users can find this release under the \`$version\` tag." >> output.txt
|
echo "Very early BETA release of Firefly III. This release contains specific features or changes. Docker users can find this release under the \`$version\` tag." >> output.txt
|
||||||
echo '' >> output.txt
|
echo '' >> output.txt
|
||||||
echo "This release was created on **$(date +'%Y-%m-%d')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
echo "This release was created on **$(date +'%Y-%m-%d %H:%M')** and may contain unexpected bugs. Data loss is rare but is not impossible. The releases are signed, and you can verify them using the [Firefly III releases PGP key](https://docs.firefly-iii.org/explanation/more-information/signatures/)." >> output.txt
|
||||||
echo '' >> output.txt
|
echo '' >> output.txt
|
||||||
echo '### Instructions' >> output.txt
|
echo '### Instructions' >> output.txt
|
||||||
echo '' >> output.txt
|
echo '' >> output.txt
|
||||||
|
|||||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -14,7 +14,16 @@ public/build
|
|||||||
# ignore v1 build files
|
# ignore v1 build files
|
||||||
resources/assets/v1/node_modules
|
resources/assets/v1/node_modules
|
||||||
resources/assets/v1/build
|
resources/assets/v1/build
|
||||||
|
public/v1/js/app.js*
|
||||||
|
public/v1/js/app_vue.js*
|
||||||
|
public/v1/js/create*
|
||||||
|
public/v1/js/edit*
|
||||||
|
public/v1/js/profile*
|
||||||
|
public/v1/js/administrations
|
||||||
|
public/v1/js/exchange-rates
|
||||||
|
public/v1/js/webhooks
|
||||||
|
|
||||||
# ignore v2 build files
|
# ignore v2 build files
|
||||||
resources/assets/v2/node_modules
|
resources/assets/v2/node_modules
|
||||||
resources/assets/v2/build
|
resources/assets/v2/build
|
||||||
|
public/v2/i18n
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ Over time, many people have contributed to Firefly III. Their efforts are not al
|
|||||||
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
||||||
|
|
||||||
## 2025
|
## 2025
|
||||||
|
- Lompi
|
||||||
|
- Jose Diaz-Gonzalez
|
||||||
- SoftBrix
|
- SoftBrix
|
||||||
|
|
||||||
## 2024
|
## 2024
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ class AccountController extends Controller
|
|||||||
$result = $this->repository->searchAccount((string) $query, $types, $this->parameters->get('limit'));
|
$result = $this->repository->searchAccount((string) $query, $types, $this->parameters->get('limit'));
|
||||||
|
|
||||||
// set date to subday + end-of-day for account balance. so it is at $date 23:59:59
|
// set date to subday + end-of-day for account balance. so it is at $date 23:59:59
|
||||||
$date->subDay()->endOfDay();
|
$date->endOfDay();
|
||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($result as $account) {
|
foreach ($result as $account) {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,6 @@ class ShowController extends Controller
|
|||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
$enrichment->setUser($admin);
|
$enrichment->setUser($admin);
|
||||||
$enrichment->setConvertToNative($this->convertToNative);
|
|
||||||
$enrichment->setNative($this->nativeCurrency);
|
$enrichment->setNative($this->nativeCurrency);
|
||||||
$accounts = $enrichment->enrich($accounts);
|
$accounts = $enrichment->enrich($accounts);
|
||||||
|
|
||||||
@@ -133,7 +132,6 @@ class ShowController extends Controller
|
|||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
$enrichment->setUser($admin);
|
$enrichment->setUser($admin);
|
||||||
$enrichment->setConvertToNative($this->convertToNative);
|
|
||||||
$enrichment->setNative($this->nativeCurrency);
|
$enrichment->setNative($this->nativeCurrency);
|
||||||
$account = $enrichment->enrichSingle($account);
|
$account = $enrichment->enrichSingle($account);
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ class StoreController extends Controller
|
|||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
$enrichment->setUser($admin);
|
$enrichment->setUser($admin);
|
||||||
$enrichment->setConvertToNative($this->convertToNative);
|
|
||||||
$enrichment->setNative($this->nativeCurrency);
|
$enrichment->setNative($this->nativeCurrency);
|
||||||
$account = $enrichment->enrichSingle($account);
|
$account = $enrichment->enrichSingle($account);
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ class UpdateController extends Controller
|
|||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
$enrichment->setUser($admin);
|
$enrichment->setUser($admin);
|
||||||
$enrichment->setConvertToNative($this->convertToNative);
|
|
||||||
$enrichment->setNative($this->nativeCurrency);
|
$enrichment->setNative($this->nativeCurrency);
|
||||||
$account = $enrichment->enrichSingle($account);
|
$account = $enrichment->enrichSingle($account);
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ use FireflyIII\Enums\UserRoleEnum;
|
|||||||
use FireflyIII\Exceptions\ValidationException;
|
use FireflyIII\Exceptions\ValidationException;
|
||||||
use FireflyIII\Models\CurrencyExchangeRate;
|
use FireflyIII\Models\CurrencyExchangeRate;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\ExchangeRate\ExchangeRateRepositoryInterface;
|
use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Controllers\Models\CurrencyExchangeRate;
|
namespace FireflyIII\Api\V1\Controllers\Models\CurrencyExchangeRate;
|
||||||
|
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Repositories\UserGroups\ExchangeRate\ExchangeRateRepositoryInterface;
|
use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\CurrencyExchangeRate;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Models\CurrencyExchangeRate;
|
use FireflyIII\Models\CurrencyExchangeRate;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\ExchangeRate\ExchangeRateRepositoryInterface;
|
use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\CurrencyExchangeRate;
|
|||||||
|
|
||||||
use FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate\StoreRequest;
|
use FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate\StoreRequest;
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Repositories\UserGroups\ExchangeRate\ExchangeRateRepositoryInterface;
|
use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\CurrencyExchangeRate;
|
|||||||
use FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate\UpdateRequest;
|
use FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate\UpdateRequest;
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Models\CurrencyExchangeRate;
|
use FireflyIII\Models\CurrencyExchangeRate;
|
||||||
use FireflyIII\Repositories\UserGroups\ExchangeRate\ExchangeRateRepositoryInterface;
|
use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
use FireflyIII\Transformers\V2\ExchangeRateTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ class ListController extends Controller
|
|||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
$enrichment->setUser($admin);
|
$enrichment->setUser($admin);
|
||||||
$enrichment->setConvertToNative($this->convertToNative);
|
|
||||||
$enrichment->setNative($this->nativeCurrency);
|
$enrichment->setNative($this->nativeCurrency);
|
||||||
$accounts = $enrichment->enrich($accounts);
|
$accounts = $enrichment->enrich($accounts);
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ class StoreController extends Controller
|
|||||||
$data['user'] = auth()->user();
|
$data['user'] = auth()->user();
|
||||||
$data['user_group'] = $this->userGroup;
|
$data['user_group'] = $this->userGroup;
|
||||||
|
|
||||||
|
|
||||||
Log::channel('audit')->info('Store new transaction over API.', $data);
|
Log::channel('audit')->info('Store new transaction over API.', $data);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,6 @@ class ListController extends Controller
|
|||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
$enrichment->setUser($admin);
|
$enrichment->setUser($admin);
|
||||||
$enrichment->setConvertToNative($this->convertToNative);
|
|
||||||
$enrichment->setNative($this->nativeCurrency);
|
$enrichment->setNative($this->nativeCurrency);
|
||||||
$accounts = $enrichment->enrich($accounts);
|
$accounts = $enrichment->enrich($accounts);
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\Transformers\CurrencyTransformer;
|
use FireflyIII\Transformers\CurrencyTransformer;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency;
|
|||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\StoreRequest;
|
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\StoreRequest;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\Transformers\CurrencyTransformer;
|
use FireflyIII\Transformers\CurrencyTransformer;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller;
|
|||||||
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\UpdateRequest;
|
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\UpdateRequest;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\Transformers\CurrencyTransformer;
|
use FireflyIII\Transformers\CurrencyTransformer;
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ class AccountController extends Controller
|
|||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
$enrichment->setUser($admin);
|
$enrichment->setUser($admin);
|
||||||
$enrichment->setConvertToNative($this->convertToNative);
|
|
||||||
$enrichment->setNative($this->nativeCurrency);
|
$enrichment->setNative($this->nativeCurrency);
|
||||||
$accounts = $enrichment->enrich($accounts);
|
$accounts = $enrichment->enrich($accounts);
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
@@ -185,8 +185,8 @@ class BasicController extends Controller
|
|||||||
'currency_decimal_places' => $currency->decimal_places,
|
'currency_decimal_places' => $currency->decimal_places,
|
||||||
'value_parsed' => app('amount')->formatAnything($currency, $sums[$currencyId] ?? '0', false),
|
'value_parsed' => app('amount')->formatAnything($currency, $sums[$currencyId] ?? '0', false),
|
||||||
'local_icon' => 'balance-scale',
|
'local_icon' => 'balance-scale',
|
||||||
'sub_title' => app('amount')->formatAnything($currency, $expenses[$currencyId] ?? '0', false).
|
'sub_title' => app('amount')->formatAnything($currency, $expenses[$currencyId] ?? '0', false)
|
||||||
' + '.app('amount')->formatAnything($currency, $incomes[$currencyId] ?? '0', false),
|
.' + '.app('amount')->formatAnything($currency, $incomes[$currencyId] ?? '0', false),
|
||||||
];
|
];
|
||||||
$return[] = [
|
$return[] = [
|
||||||
'key' => sprintf('spent-in-%s', $currency->code),
|
'key' => sprintf('spent-in-%s', $currency->code),
|
||||||
@@ -213,6 +213,47 @@ class BasicController extends Controller
|
|||||||
'sub_title' => '',
|
'sub_title' => '',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
if (0 === count($return)) {
|
||||||
|
$currency = $this->nativeCurrency;
|
||||||
|
// create objects for big array.
|
||||||
|
$return[] = [
|
||||||
|
'key' => sprintf('balance-in-%s', $currency->code),
|
||||||
|
'title' => trans('firefly.box_balance_in_currency', ['currency' => $currency->symbol]),
|
||||||
|
'monetary_value' => '0',
|
||||||
|
'currency_id' => (string) $currency->id,
|
||||||
|
'currency_code' => $currency->code,
|
||||||
|
'currency_symbol' => $currency->symbol,
|
||||||
|
'currency_decimal_places' => $currency->decimal_places,
|
||||||
|
'value_parsed' => app('amount')->formatAnything($currency, '0', false),
|
||||||
|
'local_icon' => 'balance-scale',
|
||||||
|
'sub_title' => app('amount')->formatAnything($currency, '0', false)
|
||||||
|
.' + '.app('amount')->formatAnything($currency, '0', false),
|
||||||
|
];
|
||||||
|
$return[] = [
|
||||||
|
'key' => sprintf('spent-in-%s', $currency->code),
|
||||||
|
'title' => trans('firefly.box_spent_in_currency', ['currency' => $currency->symbol]),
|
||||||
|
'monetary_value' => '0',
|
||||||
|
'currency_id' => (string) $currency->id,
|
||||||
|
'currency_code' => $currency->code,
|
||||||
|
'currency_symbol' => $currency->symbol,
|
||||||
|
'currency_decimal_places' => $currency->decimal_places,
|
||||||
|
'value_parsed' => app('amount')->formatAnything($currency, '0', false),
|
||||||
|
'local_icon' => 'balance-scale',
|
||||||
|
'sub_title' => '',
|
||||||
|
];
|
||||||
|
$return[] = [
|
||||||
|
'key' => sprintf('earned-in-%s', $currency->code),
|
||||||
|
'title' => trans('firefly.box_earned_in_currency', ['currency' => $currency->symbol]),
|
||||||
|
'monetary_value' => '0',
|
||||||
|
'currency_id' => (string) $currency->id,
|
||||||
|
'currency_code' => $currency->code,
|
||||||
|
'currency_symbol' => $currency->symbol,
|
||||||
|
'currency_decimal_places' => $currency->decimal_places,
|
||||||
|
'value_parsed' => app('amount')->formatAnything($currency, '0', false),
|
||||||
|
'local_icon' => 'balance-scale',
|
||||||
|
'sub_title' => '',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
@@ -268,6 +309,37 @@ class BasicController extends Controller
|
|||||||
}
|
}
|
||||||
app('log')->debug(sprintf('Done with getBillInformation("%s", "%s")', $start->format('Y-m-d'), $end->format('Y-m-d-')));
|
app('log')->debug(sprintf('Done with getBillInformation("%s", "%s")', $start->format('Y-m-d'), $end->format('Y-m-d-')));
|
||||||
|
|
||||||
|
if (0 === count($return)) {
|
||||||
|
$currency = $this->nativeCurrency;
|
||||||
|
unset($info, $amount);
|
||||||
|
|
||||||
|
$return[] = [
|
||||||
|
'key' => sprintf('bills-paid-in-%s', $currency->code),
|
||||||
|
'title' => trans('firefly.box_bill_paid_in_currency', ['currency' => $currency->symbol]),
|
||||||
|
'monetary_value' => '0',
|
||||||
|
'currency_id' => (string) $currency->id,
|
||||||
|
'currency_code' => $currency->code,
|
||||||
|
'currency_symbol' => $currency->symbol,
|
||||||
|
'currency_decimal_places' => $currency->decimal_places,
|
||||||
|
'value_parsed' => app('amount')->formatFlat($currency->symbol, $currency->decimal_places, '0', false),
|
||||||
|
'local_icon' => 'check',
|
||||||
|
'sub_title' => '',
|
||||||
|
];
|
||||||
|
$return[] = [
|
||||||
|
'key' => sprintf('bills-unpaid-in-%s', $currency->code),
|
||||||
|
'title' => trans('firefly.box_bill_unpaid_in_currency', ['currency' => $currency->symbol]),
|
||||||
|
'monetary_value' => '0',
|
||||||
|
'currency_id' => (string) $currency->id,
|
||||||
|
'currency_code' => $currency->code,
|
||||||
|
'currency_symbol' => $currency->symbol,
|
||||||
|
'currency_decimal_places' => $currency->decimal_places,
|
||||||
|
'value_parsed' => app('amount')->formatFlat($currency->symbol, $currency->decimal_places, '0', false),
|
||||||
|
'local_icon' => 'calendar-o',
|
||||||
|
'sub_title' => '',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,6 +387,26 @@ class BasicController extends Controller
|
|||||||
),
|
),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
if (0 === count($return)) {
|
||||||
|
$currency = $this->nativeCurrency;
|
||||||
|
$return[] = [
|
||||||
|
'key' => sprintf('left-to-spend-in-%s', $currency->code),
|
||||||
|
'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $currency->symbol]),
|
||||||
|
'monetary_value' => '0',
|
||||||
|
'currency_id' => (string) $currency->id,
|
||||||
|
'currency_code' => $currency->code,
|
||||||
|
'currency_symbol' => $currency->symbol,
|
||||||
|
'currency_decimal_places' => $currency->decimal_places,
|
||||||
|
'value_parsed' => app('amount')->formatFlat($currency->symbol, $currency->decimal_places, '0', false),
|
||||||
|
'local_icon' => 'money',
|
||||||
|
'sub_title' => app('amount')->formatFlat(
|
||||||
|
$currency->symbol,
|
||||||
|
$currency->decimal_places,
|
||||||
|
'0',
|
||||||
|
false
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ class DestroyRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$valid = 'budgets,bills,piggy_banks,rules,recurring,categories,tags,object_groups'.
|
$valid = 'budgets,bills,piggy_banks,rules,recurring,categories,tags,object_groups'
|
||||||
',accounts,asset_accounts,expense_accounts,revenue_accounts,liabilities,transactions,withdrawals,deposits,transfers'.
|
.',accounts,asset_accounts,expense_accounts,revenue_accounts,liabilities,transactions,withdrawals,deposits,transfers'
|
||||||
',not_assets_liabilities';
|
.',not_assets_liabilities';
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'objects' => sprintf('required|max:255|min:1|string|in:%s', $valid),
|
'objects' => sprintf('required|max:255|min:1|string|in:%s', $valid),
|
||||||
|
|||||||
@@ -65,25 +65,6 @@ class StoreRequest extends FormRequest
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function parseAccounts(mixed $array): array
|
|
||||||
{
|
|
||||||
if (!is_array($array)) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
$return = [];
|
|
||||||
foreach ($array as $entry) {
|
|
||||||
if (!is_array($entry)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$return[] = [
|
|
||||||
'account_id' => $this->integerFromValue((string) ($entry['account_id'] ?? '0')),
|
|
||||||
'current_amount' => $this->clearString((string) ($entry['current_amount'] ?? '0')),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The rules that the incoming request must be matched against.
|
* The rules that the incoming request must be matched against.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V1\Requests\Models\PiggyBank;
|
namespace FireflyIII\Api\V1\Requests\Models\PiggyBank;
|
||||||
|
|
||||||
use FireflyIII\Models\PiggyBank;
|
use FireflyIII\Models\PiggyBank;
|
||||||
use FireflyIII\Rules\IsAssetAccountId;
|
|
||||||
use FireflyIII\Rules\IsValidPositiveAmount;
|
use FireflyIII\Rules\IsValidPositiveAmount;
|
||||||
|
use FireflyIII\Rules\IsValidZeroOrMoreAmount;
|
||||||
use FireflyIII\Rules\LessThanPiggyTarget;
|
use FireflyIII\Rules\LessThanPiggyTarget;
|
||||||
use FireflyIII\Support\Request\ChecksLogin;
|
use FireflyIII\Support\Request\ChecksLogin;
|
||||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
@@ -45,20 +45,23 @@ class UpdateRequest extends FormRequest
|
|||||||
*/
|
*/
|
||||||
public function getAll(): array
|
public function getAll(): array
|
||||||
{
|
{
|
||||||
$fields = [
|
$fields = [
|
||||||
'name' => ['name', 'convertString'],
|
'name' => ['name', 'convertString'],
|
||||||
'account_id' => ['account_id', 'convertInteger'],
|
'target_amount' => ['target_amount', 'convertString'],
|
||||||
'targetamount' => ['target_amount', 'convertString'],
|
'start_date' => ['start_date', 'convertDateTime'],
|
||||||
'current_amount' => ['current_amount', 'convertString'],
|
'target_date' => ['target_date', 'convertDateTime'],
|
||||||
'startdate' => ['start_date', 'convertDateTime'],
|
'notes' => ['notes', 'stringWithNewlines'],
|
||||||
'targetdate' => ['target_date', 'convertDateTime'],
|
'order' => ['order', 'convertInteger'],
|
||||||
'notes' => ['notes', 'stringWithNewlines'],
|
'object_group_title' => ['object_group_title', 'convertString'],
|
||||||
'order' => ['order', 'convertInteger'],
|
'object_group_id' => ['object_group_id', 'convertInteger'],
|
||||||
'object_group_title' => ['object_group_title', 'convertString'],
|
'transaction_currency_code' => ['transaction_currency_code', 'convertString'],
|
||||||
'object_group_id' => ['object_group_id', 'convertInteger'],
|
'transaction_currency_id' => ['transaction_currency_id', 'convertInteger'],
|
||||||
];
|
];
|
||||||
|
|
||||||
return $this->getAllData($fields);
|
$result = $this->getAllData($fields);
|
||||||
|
$result['accounts'] = $this->parseAccounts($this->get('accounts'));
|
||||||
|
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -70,13 +73,20 @@ class UpdateRequest extends FormRequest
|
|||||||
$piggyBank = $this->route()->parameter('piggyBank');
|
$piggyBank = $this->route()->parameter('piggyBank');
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'name' => 'min:1|max:255|uniquePiggyBankForUser:'.$piggyBank->id,
|
'name' => 'min:1|max:255|uniquePiggyBankForUser:'.$piggyBank->id,
|
||||||
'current_amount' => ['nullable', new LessThanPiggyTarget(), new IsValidPositiveAmount()],
|
'current_amount' => ['nullable', new LessThanPiggyTarget(), new IsValidPositiveAmount()],
|
||||||
'target_amount' => ['nullable', new IsValidPositiveAmount()],
|
'target_amount' => ['nullable', new IsValidZeroOrMoreAmount()],
|
||||||
'start_date' => 'date|nullable',
|
'start_date' => 'date|nullable',
|
||||||
'target_date' => 'date|nullable|after:start_date',
|
'target_date' => 'date|nullable|after:start_date',
|
||||||
'notes' => 'max:65000',
|
'notes' => 'max:65000',
|
||||||
'account_id' => ['belongsToUser:accounts', new IsAssetAccountId()],
|
'accounts' => 'required',
|
||||||
|
'accounts.*' => 'array|required',
|
||||||
|
'accounts.*.account_id' => ['required', 'numeric', 'belongsToUser:accounts,id'],
|
||||||
|
'accounts.*.current_amount' => ['numeric', 'nullable', new IsValidZeroOrMoreAmount(true)],
|
||||||
|
'object_group_id' => 'numeric|belongsToUser:object_groups,id',
|
||||||
|
'object_group_title' => ['min:1', 'max:255'],
|
||||||
|
'transaction_currency_id' => 'exists:transaction_currencies,id|nullable',
|
||||||
|
'transaction_currency_code' => 'exists:transaction_currencies,code|nullable',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\AccountBalance;
|
use FireflyIII\Models\AccountBalance;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -69,7 +69,7 @@ class AccountController extends Controller
|
|||||||
public function accounts(AutocompleteRequest $request): JsonResponse
|
public function accounts(AutocompleteRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$params = $request->getParameters();
|
$params = $request->getParameters();
|
||||||
$result = $this->repository->searchAccount($params['query'], $params['account_types'], $params['page'], $params['size']);
|
$result = $this->repository->searchAccount($params['query'], $params['account_types'], $params['size']);
|
||||||
$return = [];
|
$return = [];
|
||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Autocomplete;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest;
|
||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
use FireflyIII\Repositories\UserGroups\Category\CategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Autocomplete;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest;
|
||||||
use FireflyIII\Models\Tag;
|
use FireflyIII\Models\Tag;
|
||||||
use FireflyIII\Repositories\UserGroups\Tag\TagRepositoryInterface;
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,7 +59,7 @@ class TagController extends Controller
|
|||||||
public function tags(AutocompleteRequest $request): JsonResponse
|
public function tags(AutocompleteRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$queryParameters = $request->getParameters();
|
$queryParameters = $request->getParameters();
|
||||||
$result = $this->repository->searchTag($queryParameters['query'], $queryParameters['size']);
|
$result = $this->repository->searchTag($queryParameters['query']);
|
||||||
$filtered = $result->map(
|
$filtered = $result->map(
|
||||||
static function (Tag $item) {
|
static function (Tag $item) {
|
||||||
return [
|
return [
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Autocomplete;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest;
|
use FireflyIII\Api\V2\Request\Autocomplete\AutocompleteRequest;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Repositories\UserGroups\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ use FireflyIII\Api\V2\Request\Chart\ChartRequest;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\Chart\ChartData;
|
use FireflyIII\Support\Chart\ChartData;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\Support\Http\Api\CleansChartData;
|
use FireflyIII\Support\Http\Api\CleansChartData;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ use FireflyIII\Enums\TransactionTypeEnum;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\Chart\ChartData;
|
use FireflyIII\Support\Chart\ChartData;
|
||||||
use FireflyIII\Support\Http\Api\AccountBalanceGrouped;
|
use FireflyIII\Support\Http\Api\AccountBalanceGrouped;
|
||||||
use FireflyIII\Support\Http\Api\CleansChartData;
|
use FireflyIII\Support\Http\Api\CleansChartData;
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ use FireflyIII\Models\Budget;
|
|||||||
use FireflyIII\Models\BudgetLimit;
|
use FireflyIII\Models\BudgetLimit;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\CleansChartData;
|
use FireflyIII\Support\Http\Api\CleansChartData;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ use FireflyIII\Enums\AccountTypeEnum;
|
|||||||
use FireflyIII\Enums\TransactionTypeEnum;
|
use FireflyIII\Enums\TransactionTypeEnum;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\CleansChartData;
|
use FireflyIII\Support\Http\Api\CleansChartData;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Account;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Api\V2\Request\Model\Account\IndexRequest;
|
use FireflyIII\Api\V2\Request\Model\Account\IndexRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Transformers\V2\AccountTransformer;
|
use FireflyIII\Transformers\V2\AccountTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
@@ -67,7 +67,7 @@ class IndexController extends Controller
|
|||||||
$types = $request->getAccountTypes();
|
$types = $request->getAccountTypes();
|
||||||
$sorting = $request->getSortInstructions('accounts');
|
$sorting = $request->getSortInstructions('accounts');
|
||||||
$filters = $request->getFilterInstructions('accounts');
|
$filters = $request->getFilterInstructions('accounts');
|
||||||
$accounts = $this->repository->getAccountsByType($types, $sorting, $filters);
|
$accounts = $this->repository->getAccountsByType($types, $sorting);
|
||||||
$pageSize = $this->parameters->get('limit');
|
$pageSize = $this->parameters->get('limit');
|
||||||
$count = $accounts->count();
|
$count = $accounts->count();
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Account;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Transformers\V2\AccountTransformer;
|
use FireflyIII\Transformers\V2\AccountTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Account;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Api\V2\Request\Model\Account\UpdateRequest;
|
use FireflyIII\Api\V2\Request\Model\Account\UpdateRequest;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Transformers\V2\AccountTransformer;
|
use FireflyIII\Transformers\V2\AccountTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V2\Controllers\Model\Bill;
|
namespace FireflyIII\Api\V2\Controllers\Model\Bill;
|
||||||
|
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\V2\BillTransformer;
|
use FireflyIII\Transformers\V2\BillTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Bill;
|
|||||||
|
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Models\Bill;
|
use FireflyIII\Models\Bill;
|
||||||
use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\V2\BillTransformer;
|
use FireflyIII\Transformers\V2\BillTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\Bill;
|
|||||||
|
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Api\V2\Request\Generic\DateRequest;
|
use FireflyIII\Api\V2\Request\Generic\DateRequest;
|
||||||
use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V2\Controllers\Model\Currency;
|
namespace FireflyIII\Api\V2\Controllers\Model\Currency;
|
||||||
|
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Transformers\V2\CurrencyTransformer;
|
use FireflyIII\Transformers\V2\CurrencyTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Api\V2\Controllers\Model\PiggyBank;
|
namespace FireflyIII\Api\V2\Controllers\Model\PiggyBank;
|
||||||
|
|
||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use FireflyIII\Transformers\V2\PiggyBankTransformer;
|
use FireflyIII\Transformers\V2\PiggyBankTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ class StoreController extends Controller
|
|||||||
$userGroup = $request->getUserGroup();
|
$userGroup = $request->getUserGroup();
|
||||||
$data['user_group'] = $userGroup;
|
$data['user_group'] = $userGroup;
|
||||||
|
|
||||||
|
|
||||||
// overrule user group and see where we end up.
|
// overrule user group and see where we end up.
|
||||||
// what happens when we refer to a budget that is not in this user group?
|
// what happens when we refer to a budget that is not in this user group?
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\TransactionCurrency;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Api\V2\Request\Model\TransactionCurrency\IndexRequest;
|
use FireflyIII\Api\V2\Request\Model\TransactionCurrency\IndexRequest;
|
||||||
use FireflyIII\Enums\UserRoleEnum;
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Transformers\V2\CurrencyTransformer;
|
use FireflyIII\Transformers\V2\CurrencyTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Api\V2\Controllers\Model\TransactionCurrency;
|
|||||||
use FireflyIII\Api\V2\Controllers\Controller;
|
use FireflyIII\Api\V2\Controllers\Controller;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Models\UserGroup;
|
use FireflyIII\Models\UserGroup;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Transformers\V2\CurrencyTransformer;
|
use FireflyIII\Transformers\V2\CurrencyTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -34,12 +34,12 @@ use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
|||||||
use FireflyIII\Helpers\Report\NetWorthInterface;
|
use FireflyIII\Helpers\Report\NetWorthInterface;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\UserGroup;
|
use FireflyIII\Models\UserGroup;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\AvailableBudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use FireflyIII\Support\Http\Api\SummaryBalanceGrouped;
|
use FireflyIII\Support\Http\Api\SummaryBalanceGrouped;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ use FireflyIII\Api\V2\Request\Generic\SingleDateRequest;
|
|||||||
use FireflyIII\Enums\AccountTypeEnum;
|
use FireflyIII\Enums\AccountTypeEnum;
|
||||||
use FireflyIII\Helpers\Report\NetWorthInterface;
|
use FireflyIII\Helpers\Report\NetWorthInterface;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ use FireflyIII\Models\GroupMembership;
|
|||||||
use FireflyIII\Models\Transaction;
|
use FireflyIII\Models\Transaction;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Models\UserGroup;
|
use FireflyIII\Models\UserGroup;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use FireflyIII\Models\Transaction;
|
|||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Models\UserGroup;
|
use FireflyIII\Models\UserGroup;
|
||||||
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
|
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\Preferences;
|
use FireflyIII\Support\Facades\Preferences;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ class CorrectsUnevenAmount extends Command
|
|||||||
$journals = DB::table('transactions')
|
$journals = DB::table('transactions')
|
||||||
->groupBy('transaction_journal_id')
|
->groupBy('transaction_journal_id')
|
||||||
->whereNull('deleted_at')
|
->whereNull('deleted_at')
|
||||||
->get(['transaction_journal_id', DB::raw('SUM(amount) AS the_sum')]) // @phpstan-ignore-line
|
->get(['transaction_journal_id', DB::raw('SUM(amount) AS the_sum')])
|
||||||
;
|
;
|
||||||
|
|
||||||
/** @var \stdClass $entry */
|
/** @var \stdClass $entry */
|
||||||
|
|||||||
104
app/Console/Commands/Integrity/ValidatesEnvironmentVariables.php
Normal file
104
app/Console/Commands/Integrity/ValidatesEnvironmentVariables.php
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
/*
|
||||||
|
* ValidatesEnvironmentVariables.php
|
||||||
|
* Copyright (c) 2025 james@firefly-iii.org.
|
||||||
|
*
|
||||||
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see https://www.gnu.org/licenses/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FireflyIII\Console\Commands\Integrity;
|
||||||
|
|
||||||
|
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
|
class ValidatesEnvironmentVariables extends Command
|
||||||
|
{
|
||||||
|
use ShowsFriendlyMessages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'integrity:validates-environment-variables';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var null|string
|
||||||
|
*/
|
||||||
|
protected $description = 'Makes sure you use the correct variables.';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle(): int
|
||||||
|
{
|
||||||
|
$this->validateLanguage();
|
||||||
|
$this->validateGuard();
|
||||||
|
$this->validateStaticToken();
|
||||||
|
|
||||||
|
return Command::SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function validateLanguage(): void
|
||||||
|
{
|
||||||
|
$language = config('firefly.default_language');
|
||||||
|
$locale = config('firefly.default_locale');
|
||||||
|
$options = array_keys(config('firefly.languages'));
|
||||||
|
|
||||||
|
if (!in_array($language, $options, true)) {
|
||||||
|
$this->friendlyError(sprintf('DEFAULT_LANGUAGE "%s" is not a valid language for Firefly III.', $language));
|
||||||
|
$this->friendlyError('Please check your .env file and make sure you use a valid setting.');
|
||||||
|
$this->friendlyError(sprintf('Valid languages are: %s', implode(', ', $options)));
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
$options[] = 'equal';
|
||||||
|
if (!in_array($locale, $options, true)) {
|
||||||
|
$this->friendlyError(sprintf('DEFAULT_LOCALE "%s" is not a valid local for Firefly III.', $locale));
|
||||||
|
$this->friendlyError('Please check your .env file and make sure you use a valid setting.');
|
||||||
|
$this->friendlyError(sprintf('Valid locales are: %s', implode(', ', $options)));
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function validateGuard(): void
|
||||||
|
{
|
||||||
|
$guard = config('auth.defaults.guard');
|
||||||
|
if ('web' !== $guard && 'remote_user_guard' !== $guard) {
|
||||||
|
$this->friendlyError(sprintf('AUTHENTICATION_GUARD "%s" is not a valid guard for Firefly III.', $guard));
|
||||||
|
$this->friendlyError('Please check your .env file and make sure you use a valid setting.');
|
||||||
|
$this->friendlyError('Valid guards are: web, remote_user_guard');
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function validateStaticToken(): void
|
||||||
|
{
|
||||||
|
$token = (string) config('firefly.static_cron_token');
|
||||||
|
if ('' !== $token && 32 !== strlen($token)) {
|
||||||
|
$this->friendlyError('STATIC_CRON_TOKEN must be empty or a 32-character string.');
|
||||||
|
$this->friendlyError('Please check your .env file and make sure you use a valid setting.');
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -28,6 +28,7 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
|||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Facades\Hash;
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
class CreatesFirstUser extends Command
|
class CreatesFirstUser extends Command
|
||||||
{
|
{
|
||||||
@@ -61,11 +62,11 @@ class CreatesFirstUser extends Command
|
|||||||
'email' => $this->argument('email'),
|
'email' => $this->argument('email'),
|
||||||
'role' => 'owner',
|
'role' => 'owner',
|
||||||
];
|
];
|
||||||
$password = \Str::random(24);
|
$password = Str::random(24);
|
||||||
$user = $this->repository->store($data);
|
$user = $this->repository->store($data);
|
||||||
$user->password = Hash::make($password);
|
$user->password = Hash::make($password);
|
||||||
$user->save();
|
$user->save();
|
||||||
$user->setRememberToken(\Str::random(60));
|
$user->setRememberToken(Str::random(60));
|
||||||
|
|
||||||
$this->friendlyInfo(sprintf('Created new admin user (ID #%d) with email address "%s" and password "%s".', $user->id, $user->email, $password));
|
$this->friendlyInfo(sprintf('Created new admin user (ID #%d) with email address "%s" and password "%s".', $user->id, $user->email, $password));
|
||||||
$this->friendlyWarning('Change this password.');
|
$this->friendlyWarning('Change this password.');
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
|||||||
use FireflyIII\Models\Attachment;
|
use FireflyIII\Models\Attachment;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Contracts\Encryption\DecryptException;
|
use Illuminate\Contracts\Encryption\DecryptException;
|
||||||
|
use Illuminate\Support\Facades\Crypt;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class ScansAttachments extends Command
|
class ScansAttachments extends Command
|
||||||
{
|
{
|
||||||
@@ -43,7 +45,7 @@ class ScansAttachments extends Command
|
|||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
$attachments = Attachment::get();
|
$attachments = Attachment::get();
|
||||||
$disk = \Storage::disk('upload');
|
$disk = Storage::disk('upload');
|
||||||
|
|
||||||
/** @var Attachment $attachment */
|
/** @var Attachment $attachment */
|
||||||
foreach ($attachments as $attachment) {
|
foreach ($attachments as $attachment) {
|
||||||
@@ -56,7 +58,7 @@ class ScansAttachments extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$decryptedContent = \Crypt::decrypt($encryptedContent); // verified
|
$decryptedContent = Crypt::decrypt($encryptedContent); // verified
|
||||||
} catch (DecryptException $e) {
|
} catch (DecryptException $e) {
|
||||||
app('log')->error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage()));
|
app('log')->error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage()));
|
||||||
$decryptedContent = $encryptedContent;
|
$decryptedContent = $encryptedContent;
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace FireflyIII\Console\Commands\System;
|
|||||||
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Database\QueryException;
|
use Illuminate\Database\QueryException;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
use League\Flysystem\FilesystemException;
|
use League\Flysystem\FilesystemException;
|
||||||
|
|
||||||
class VerifySecurityAlerts extends Command
|
class VerifySecurityAlerts extends Command
|
||||||
@@ -48,7 +49,7 @@ class VerifySecurityAlerts extends Command
|
|||||||
|
|
||||||
// check for security advisories.
|
// check for security advisories.
|
||||||
$version = config('firefly.version');
|
$version = config('firefly.version');
|
||||||
$disk = \Storage::disk('resources');
|
$disk = Storage::disk('resources');
|
||||||
// Next line is ignored because it's a Laravel Facade.
|
// Next line is ignored because it's a Laravel Facade.
|
||||||
if (!$disk->has('alerts.json')) { // @phpstan-ignore-line
|
if (!$disk->has('alerts.json')) { // @phpstan-ignore-line
|
||||||
app('log')->debug('No alerts.json file present.');
|
app('log')->debug('No alerts.json file present.');
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\Preference;
|
use FireflyIII\Models\Preference;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Contracts\Encryption\DecryptException;
|
use Illuminate\Contracts\Encryption\DecryptException;
|
||||||
|
use Illuminate\Support\Facades\Crypt;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
class RemovesDatabaseDecryption extends Command
|
class RemovesDatabaseDecryption extends Command
|
||||||
@@ -152,7 +153,7 @@ class RemovesDatabaseDecryption extends Command
|
|||||||
private function tryDecrypt($value)
|
private function tryDecrypt($value)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$value = \Crypt::decrypt($value);
|
$value = Crypt::decrypt($value);
|
||||||
} catch (DecryptException $e) {
|
} catch (DecryptException $e) {
|
||||||
if ('The MAC is invalid.' === $e->getMessage()) {
|
if ('The MAC is invalid.' === $e->getMessage()) {
|
||||||
throw new FireflyException($e->getMessage(), 0, $e);
|
throw new FireflyException($e->getMessage(), 0, $e);
|
||||||
|
|||||||
@@ -238,7 +238,8 @@ class UpgradesToGroups extends Command
|
|||||||
return [
|
return [
|
||||||
'type' => strtolower($journal->transactionType->type),
|
'type' => strtolower($journal->transactionType->type),
|
||||||
'date' => $journal->date,
|
'date' => $journal->date,
|
||||||
'user' => $journal->user_id,
|
'user' => $journal->user,
|
||||||
|
'user_group' => $journal->user->userGroup,
|
||||||
'currency_id' => $transaction->transaction_currency_id,
|
'currency_id' => $transaction->transaction_currency_id,
|
||||||
'foreign_currency_id' => $transaction->foreign_currency_id,
|
'foreign_currency_id' => $transaction->foreign_currency_id,
|
||||||
'amount' => $transaction->amount,
|
'amount' => $transaction->amount,
|
||||||
|
|||||||
@@ -129,6 +129,11 @@ class GracefulNotFoundHandler extends ExceptionHandler
|
|||||||
|
|
||||||
return redirect(route('rules.index'));
|
return redirect(route('rules.index'));
|
||||||
|
|
||||||
|
case 'rule-groups.edit':
|
||||||
|
$request->session()->reflash();
|
||||||
|
|
||||||
|
return redirect(route('rules.index'));
|
||||||
|
|
||||||
case 'transactions.mass.edit':
|
case 'transactions.mass.edit':
|
||||||
case 'transactions.mass.delete':
|
case 'transactions.mass.delete':
|
||||||
case 'transactions.bulk.edit':
|
case 'transactions.bulk.edit':
|
||||||
|
|||||||
@@ -48,13 +48,16 @@ class BillFactory
|
|||||||
{
|
{
|
||||||
app('log')->debug(sprintf('Now in %s', __METHOD__), $data);
|
app('log')->debug(sprintf('Now in %s', __METHOD__), $data);
|
||||||
$factory = app(TransactionCurrencyFactory::class);
|
$factory = app(TransactionCurrencyFactory::class);
|
||||||
$currency = $factory->find((int) ($data['currency_id'] ?? null), (string) ($data['currency_code'] ?? null)) ??
|
$currency = $factory->find((int) ($data['currency_id'] ?? null), (string) ($data['currency_code'] ?? null))
|
||||||
app('amount')->getNativeCurrencyByUserGroup($this->user->userGroup);
|
?? app('amount')->getNativeCurrencyByUserGroup($this->user->userGroup);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$skip = array_key_exists('skip', $data) ? $data['skip'] : 0;
|
$skip = array_key_exists('skip', $data) ? $data['skip'] : 0;
|
||||||
$active = array_key_exists('active', $data) ? $data['active'] : 0;
|
$active = array_key_exists('active', $data) ? $data['active'] : 0;
|
||||||
|
|
||||||
|
$data['extension_date'] ??= null;
|
||||||
|
$data['end_date'] ??= null;
|
||||||
|
|
||||||
/** @var Bill $bill */
|
/** @var Bill $bill */
|
||||||
$bill = Bill::create(
|
$bill = Bill::create(
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -227,12 +227,12 @@ class PiggyBankFactory
|
|||||||
// TODO this is a tedious check. Feels like a hack.
|
// TODO this is a tedious check. Feels like a hack.
|
||||||
$toBeLinked = [];
|
$toBeLinked = [];
|
||||||
foreach ($piggyBank->accounts as $account) {
|
foreach ($piggyBank->accounts as $account) {
|
||||||
|
Log::debug(sprintf('Checking account #%d', $account->id));
|
||||||
foreach ($accounts as $info) {
|
foreach ($accounts as $info) {
|
||||||
if ($account->id === $info['account_id']) {
|
Log::debug(sprintf(' Checking other account #%d', $info['account_id']));
|
||||||
if (array_key_exists($account->id, $accounts)) {
|
if ((int) $account->id === (int) $info['account_id']) {
|
||||||
$toBeLinked[$account->id] = ['current_amount' => $account->pivot->current_amount ?? '0'];
|
$toBeLinked[$account->id] = ['current_amount' => $account->pivot->current_amount ?? '0'];
|
||||||
Log::debug(sprintf('Prefilled for account #%d with amount %s', $account->id, $account->pivot->current_amount ?? '0'));
|
Log::debug(sprintf('Prefilled for account #%d with amount %s', $account->id, $account->pivot->current_amount ?? '0'));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -244,9 +244,13 @@ class PiggyBankFactory
|
|||||||
if (null === $account) {
|
if (null === $account) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (array_key_exists('current_amount', $info)) {
|
if (array_key_exists('current_amount', $info) && null !== $info['current_amount']) {
|
||||||
$toBeLinked[$account->id] = ['current_amount' => $info['current_amount']];
|
$toBeLinked[$account->id] = ['current_amount' => $info['current_amount']];
|
||||||
Log::debug(sprintf('Will link account #%d with amount %s', $account->id, $account->pivot->current_amount ?? '0'));
|
Log::debug(sprintf('[a] Will link account #%d with amount %s', $account->id, $info['current_amount']));
|
||||||
|
}
|
||||||
|
if (array_key_exists('current_amount', $info) && null === $info['current_amount']) {
|
||||||
|
$toBeLinked[$account->id] = ['current_amount' => $toBeLinked[$account->id]['current_amount'] ?? '0'];
|
||||||
|
Log::debug(sprintf('[b] Will link account #%d with amount %s', $account->id, $toBeLinked[$account->id]['current_amount'] ?? '0'));
|
||||||
}
|
}
|
||||||
if (!array_key_exists('current_amount', $info)) {
|
if (!array_key_exists('current_amount', $info)) {
|
||||||
$toBeLinked[$account->id] ??= [];
|
$toBeLinked[$account->id] ??= [];
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
|
use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
use FireflyIII\Services\Internal\Destroy\JournalDestroyService;
|
||||||
use FireflyIII\Services\Internal\Support\JournalServiceTrait;
|
use FireflyIII\Services\Internal\Support\JournalServiceTrait;
|
||||||
use FireflyIII\Support\Facades\FireflyConfig;
|
use FireflyIII\Support\Facades\FireflyConfig;
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ use FireflyIII\Events\Preferences\UserGroupChangedDefaultCurrency;
|
|||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Models\PiggyBank;
|
use FireflyIII\Models\PiggyBank;
|
||||||
use FireflyIII\Models\UserGroup;
|
use FireflyIII\Models\UserGroup;
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use Illuminate\Database\Query\Builder;
|
use Illuminate\Database\Query\Builder;
|
||||||
use Illuminate\Support\Facades\Artisan;
|
use Illuminate\Support\Facades\Artisan;
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ use FireflyIII\Models\Transaction;
|
|||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
|
use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
@@ -88,7 +88,8 @@ class AccountObserver
|
|||||||
}
|
}
|
||||||
|
|
||||||
$journalIds = Transaction::where('account_id', $account->id)->get(['transactions.transaction_journal_id'])->pluck('transaction_journal_id')->toArray();
|
$journalIds = Transaction::where('account_id', $account->id)->get(['transactions.transaction_journal_id'])->pluck('transaction_journal_id')->toArray();
|
||||||
$groupIds = TransactionJournal::whereIn('id', $journalIds)->get(['transaction_journals.transaction_group_id'])->pluck('transaction_group_id')->toArray();
|
$groupIds = TransactionJournal::whereIn('id', $journalIds)->get(['transaction_journals.transaction_group_id'])->pluck('transaction_group_id')->toArray(); // @phpstan-ignore-line
|
||||||
|
|
||||||
if (count($journalIds) > 0) {
|
if (count($journalIds) > 0) {
|
||||||
Transaction::whereIn('transaction_journal_id', $journalIds)->delete();
|
Transaction::whereIn('transaction_journal_id', $journalIds)->delete();
|
||||||
TransactionJournal::whereIn('id', $journalIds)->delete();
|
TransactionJournal::whereIn('id', $journalIds)->delete();
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ use Illuminate\Contracts\Encryption\EncryptException;
|
|||||||
use Illuminate\Contracts\Filesystem\Filesystem;
|
use Illuminate\Contracts\Filesystem\Filesystem;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\Crypt;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\MessageBag;
|
use Illuminate\Support\MessageBag;
|
||||||
@@ -70,7 +71,7 @@ class AttachmentHelper implements AttachmentHelperInterface
|
|||||||
$encryptedData = (string) $this->uploadDisk->get(sprintf('at-%d.data', $attachment->id));
|
$encryptedData = (string) $this->uploadDisk->get(sprintf('at-%d.data', $attachment->id));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$unencryptedData = \Crypt::decrypt($encryptedData); // verified
|
$unencryptedData = Crypt::decrypt($encryptedData); // verified
|
||||||
} catch (DecryptException $e) {
|
} catch (DecryptException $e) {
|
||||||
Log::error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage()));
|
Log::error(sprintf('Could not decrypt data of attachment #%d: %s', $attachment->id, $e->getMessage()));
|
||||||
$unencryptedData = $encryptedData;
|
$unencryptedData = $encryptedData;
|
||||||
|
|||||||
@@ -30,8 +30,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\UserGroup;
|
use FireflyIII\Models\UserGroup;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface as AdminAccountRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
@@ -48,12 +47,10 @@ use Illuminate\Support\Facades\Log;
|
|||||||
*/
|
*/
|
||||||
class NetWorth implements NetWorthInterface
|
class NetWorth implements NetWorthInterface
|
||||||
{
|
{
|
||||||
private AccountRepositoryInterface $accountRepository;
|
private AccountRepositoryInterface $accountRepository;
|
||||||
private AdminAccountRepositoryInterface $adminAccountRepository;
|
|
||||||
|
|
||||||
private CurrencyRepositoryInterface $currencyRepos;
|
private CurrencyRepositoryInterface $currencyRepos;
|
||||||
private User $user;
|
private User $user; // @phpstan-ignore-line
|
||||||
private ?UserGroup $userGroup;
|
private ?UserGroup $userGroup; // @phpstan-ignore-line
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method collects the user's net worth in ALL the user's currencies
|
* This method collects the user's net worth in ALL the user's currencies
|
||||||
@@ -85,7 +82,7 @@ class NetWorth implements NetWorthInterface
|
|||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
Log::debug(sprintf('Now at account #%d ("%s")', $account->id, $account->name));
|
Log::debug(sprintf('Now at account #%d ("%s")', $account->id, $account->name));
|
||||||
$currency = $this->getRepository()->getAccountCurrency($account) ?? $default;
|
$currency = $this->accountRepository->getAccountCurrency($account) ?? $default;
|
||||||
$useNative = $convertToNative && $default->id !== $currency->id;
|
$useNative = $convertToNative && $default->id !== $currency->id;
|
||||||
$currency = $useNative ? $default : $currency;
|
$currency = $useNative ? $default : $currency;
|
||||||
$currencyCode = $currency->code;
|
$currencyCode = $currency->code;
|
||||||
@@ -118,36 +115,23 @@ class NetWorth implements NetWorthInterface
|
|||||||
return $netWorth;
|
return $netWorth;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getRepository(): AccountRepositoryInterface|AdminAccountRepositoryInterface
|
|
||||||
{
|
|
||||||
if (null === $this->userGroup) {
|
|
||||||
return $this->accountRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->adminAccountRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setUser(null|Authenticatable|User $user): void
|
public function setUser(null|Authenticatable|User $user): void
|
||||||
{
|
{
|
||||||
if (!$user instanceof User) {
|
if (!$user instanceof User) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
$this->userGroup = null;
|
$this->setUserGroup($user->userGroup);
|
||||||
|
|
||||||
// make repository:
|
|
||||||
$this->accountRepository = app(AccountRepositoryInterface::class);
|
|
||||||
$this->accountRepository->setUser($this->user);
|
|
||||||
|
|
||||||
$this->currencyRepos = app(CurrencyRepositoryInterface::class);
|
|
||||||
$this->currencyRepos->setUser($this->user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setUserGroup(UserGroup $userGroup): void
|
public function setUserGroup(UserGroup $userGroup): void
|
||||||
{
|
{
|
||||||
$this->userGroup = $userGroup;
|
$this->userGroup = $userGroup;
|
||||||
$this->adminAccountRepository = app(AdminAccountRepositoryInterface::class);
|
$this->accountRepository = app(AccountRepositoryInterface::class);
|
||||||
$this->adminAccountRepository->setUserGroup($userGroup);
|
$this->accountRepository->setUserGroup($userGroup);
|
||||||
|
|
||||||
|
$this->currencyRepos = app(CurrencyRepositoryInterface::class);
|
||||||
|
$this->currencyRepos->setUserGroup($this->userGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -163,7 +147,7 @@ class NetWorth implements NetWorthInterface
|
|||||||
Log::debug(sprintf('SumNetWorth: finalAccountsBalance("%s")', $date->format('Y-m-d H:i:s')));
|
Log::debug(sprintf('SumNetWorth: finalAccountsBalance("%s")', $date->format('Y-m-d H:i:s')));
|
||||||
$balances = Steam::finalAccountsBalance($accounts, $date);
|
$balances = Steam::finalAccountsBalance($accounts, $date);
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
$currency = $this->getRepository()->getAccountCurrency($account);
|
$currency = $this->accountRepository->getAccountCurrency($account);
|
||||||
$balance = $balances[$account->id]['balance'] ?? '0';
|
$balance = $balances[$account->id]['balance'] ?? '0';
|
||||||
|
|
||||||
// always subtract virtual balance.
|
// always subtract virtual balance.
|
||||||
@@ -188,14 +172,14 @@ class NetWorth implements NetWorthInterface
|
|||||||
|
|
||||||
private function getAccounts(): Collection
|
private function getAccounts(): Collection
|
||||||
{
|
{
|
||||||
$accounts = $this->getRepository()->getAccountsByType(
|
$accounts = $this->accountRepository->getAccountsByType(
|
||||||
[AccountTypeEnum::ASSET->value, AccountTypeEnum::DEFAULT->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::DEBT->value, AccountTypeEnum::MORTGAGE->value]
|
[AccountTypeEnum::ASSET->value, AccountTypeEnum::DEFAULT->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::DEBT->value, AccountTypeEnum::MORTGAGE->value]
|
||||||
);
|
);
|
||||||
$filtered = new Collection();
|
$filtered = new Collection();
|
||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
if (1 === (int) $this->getRepository()->getMetaValue($account, 'include_net_worth')) {
|
if (1 === (int) $this->accountRepository->getMetaValue($account, 'include_net_worth')) {
|
||||||
$filtered->push($account);
|
$filtered->push($account);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ use FireflyIII\Models\Budget;
|
|||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -225,11 +225,13 @@ class ReconcileController extends Controller
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
$submission = [
|
$submission = [
|
||||||
'user' => auth()->user()->id,
|
'user' => auth()->user(),
|
||||||
'group_title' => null,
|
'user_group' => auth()->user()->userGroup,
|
||||||
'transactions' => [
|
'group_title' => null,
|
||||||
|
'transactions' => [
|
||||||
[
|
[
|
||||||
'user' => auth()->user()->id,
|
'user' => auth()->user(),
|
||||||
|
'user_group' => auth()->user()->userGroup,
|
||||||
'type' => strtolower(TransactionTypeEnum::RECONCILIATION->value),
|
'type' => strtolower(TransactionTypeEnum::RECONCILIATION->value),
|
||||||
'date' => $end,
|
'date' => $end,
|
||||||
'order' => 0,
|
'order' => 0,
|
||||||
|
|||||||
@@ -29,10 +29,11 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\Transaction;
|
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
|
use FireflyIII\Support\Debug\Timer;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\Support\Http\Controllers\PeriodOverview;
|
use FireflyIII\Support\Http\Controllers\PeriodOverview;
|
||||||
|
use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -114,23 +115,47 @@ class ShowController extends Controller
|
|||||||
$subTitle = (string) trans('firefly.journals_in_period_for_account', ['name' => $account->name, 'start' => $fStart, 'end' => $fEnd]);
|
$subTitle = (string) trans('firefly.journals_in_period_for_account', ['name' => $account->name, 'start' => $fStart, 'end' => $fEnd]);
|
||||||
$chartUrl = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]);
|
$chartUrl = route('chart.account.period', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]);
|
||||||
$firstTransaction = $this->repository->oldestJournalDate($account) ?? $start;
|
$firstTransaction = $this->repository->oldestJournalDate($account) ?? $start;
|
||||||
|
|
||||||
|
Log::debug('Start period overview');
|
||||||
|
Timer::start('period-overview');
|
||||||
|
|
||||||
$periods = $this->getAccountPeriodOverview($account, $firstTransaction, $end);
|
$periods = $this->getAccountPeriodOverview($account, $firstTransaction, $end);
|
||||||
|
|
||||||
|
Log::debug('End period overview');
|
||||||
|
Timer::stop('period-overview');
|
||||||
|
|
||||||
// if layout = v2, overrule the page title.
|
// if layout = v2, overrule the page title.
|
||||||
if ('v1' !== config('view.layout')) {
|
if ('v1' !== config('view.layout')) {
|
||||||
$subTitle = (string) trans('firefly.all_journals_for_account', ['name' => $account->name]);
|
$subTitle = (string) trans('firefly.all_journals_for_account', ['name' => $account->name]);
|
||||||
}
|
}
|
||||||
|
Log::debug('Collect transactions');
|
||||||
|
Timer::start('collection');
|
||||||
|
|
||||||
/** @var GroupCollectorInterface $collector */
|
/** @var GroupCollectorInterface $collector */
|
||||||
$collector = app(GroupCollectorInterface::class);
|
$collector = app(GroupCollectorInterface::class);
|
||||||
$collector->setAccounts(new Collection([$account]))->setLimit($pageSize)->setPage($page)->withAccountInformation()->withCategoryInformation()->setRange($start, $end);
|
$collector
|
||||||
|
->setAccounts(new Collection([$account]))
|
||||||
|
->setLimit($pageSize)
|
||||||
|
->setPage($page)
|
||||||
|
->withAPIInformation()
|
||||||
|
->setRange($start, $end)
|
||||||
|
;
|
||||||
// this search will not include transaction groups where this asset account (or liability)
|
// this search will not include transaction groups where this asset account (or liability)
|
||||||
// is just part of ONE of the journals. To force this:
|
// is just part of ONE of the journals. To force this:
|
||||||
$collector->setExpandGroupSearch(true);
|
$collector->setExpandGroupSearch(true);
|
||||||
|
|
||||||
$groups = $collector->getPaginatedGroups();
|
$groups = $collector->getPaginatedGroups();
|
||||||
|
|
||||||
|
Log::debug('End collect transactions');
|
||||||
|
Timer::stop('collection');
|
||||||
|
|
||||||
|
// enrich data in arrays.
|
||||||
|
|
||||||
|
// enrich
|
||||||
|
// $enrichment = new TransactionGroupEnrichment();
|
||||||
|
// $enrichment->setUser(auth()->user());
|
||||||
|
// $groups->setCollection($enrichment->enrich($groups->getCollection()));
|
||||||
|
|
||||||
|
|
||||||
$groups->setPath(route('accounts.show', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]));
|
$groups->setPath(route('accounts.show', [$account->id, $start->format('Y-m-d'), $end->format('Y-m-d')]));
|
||||||
$showAll = false;
|
$showAll = false;
|
||||||
// correct
|
// correct
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ namespace FireflyIII\Http\Controllers\Admin;
|
|||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Http\Middleware\IsDemoUser;
|
use FireflyIII\Http\Middleware\IsDemoUser;
|
||||||
use FireflyIII\Http\Requests\ConfigurationRequest;
|
use FireflyIII\Http\Requests\ConfigurationRequest;
|
||||||
|
use FireflyIII\Support\Facades\FireflyConfig;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -68,8 +69,8 @@ class ConfigurationController extends Controller
|
|||||||
|
|
||||||
// all available configuration and their default value in case
|
// all available configuration and their default value in case
|
||||||
// they don't exist yet.
|
// they don't exist yet.
|
||||||
$singleUserMode = app('fireflyconfig')->get('single_user_mode', config('firefly.configuration.single_user_mode'))->data;
|
$singleUserMode = FireflyConfig::get('single_user_mode', config('firefly.configuration.single_user_mode'))->data;
|
||||||
$isDemoSite = app('fireflyconfig')->get('is_demo_site', config('firefly.configuration.is_demo_site'))->data;
|
$isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data;
|
||||||
$siteOwner = config('firefly.site_owner');
|
$siteOwner = config('firefly.site_owner');
|
||||||
|
|
||||||
return view(
|
return view(
|
||||||
@@ -89,8 +90,8 @@ class ConfigurationController extends Controller
|
|||||||
Log::channel('audit')->info('User updates global configuration.', $data);
|
Log::channel('audit')->info('User updates global configuration.', $data);
|
||||||
|
|
||||||
// store config values
|
// store config values
|
||||||
app('fireflyconfig')->set('single_user_mode', $data['single_user_mode']);
|
FireflyConfig::set('single_user_mode', $data['single_user_mode']);
|
||||||
app('fireflyconfig')->set('is_demo_site', $data['is_demo_site']);
|
FireflyConfig::set('is_demo_site', $data['is_demo_site']);
|
||||||
|
|
||||||
// flash message
|
// flash message
|
||||||
session()->flash('success', (string) trans('firefly.configuration_updated'));
|
session()->flash('success', (string) trans('firefly.configuration_updated'));
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ use FireflyIII\Events\Test\OwnerTestNotificationChannel;
|
|||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Http\Requests\NotificationRequest;
|
use FireflyIII\Http\Requests\NotificationRequest;
|
||||||
use FireflyIII\Notifications\Notifiables\OwnerNotifiable;
|
use FireflyIII\Notifications\Notifiables\OwnerNotifiable;
|
||||||
|
use FireflyIII\Support\Facades\FireflyConfig;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -44,14 +45,14 @@ class NotificationController extends Controller
|
|||||||
$subTitleIcon = 'envelope-o';
|
$subTitleIcon = 'envelope-o';
|
||||||
|
|
||||||
// notification settings:
|
// notification settings:
|
||||||
$slackUrl = app('fireflyconfig')->getEncrypted('slack_webhook_url', '')->data;
|
$slackUrl = FireflyConfig::getEncrypted('slack_webhook_url', '')->data;
|
||||||
$pushoverAppToken = app('fireflyconfig')->getEncrypted('pushover_app_token', '')->data;
|
$pushoverAppToken = FireflyConfig::getEncrypted('pushover_app_token', '')->data;
|
||||||
$pushoverUserToken = app('fireflyconfig')->getEncrypted('pushover_user_token', '')->data;
|
$pushoverUserToken = FireflyConfig::getEncrypted('pushover_user_token', '')->data;
|
||||||
$ntfyServer = app('fireflyconfig')->getEncrypted('ntfy_server', 'https://ntfy.sh')->data;
|
$ntfyServer = FireflyConfig::getEncrypted('ntfy_server', 'https://ntfy.sh')->data;
|
||||||
$ntfyTopic = app('fireflyconfig')->getEncrypted('ntfy_topic', '')->data;
|
$ntfyTopic = FireflyConfig::getEncrypted('ntfy_topic', '')->data;
|
||||||
$ntfyAuth = app('fireflyconfig')->get('ntfy_auth', false)->data;
|
$ntfyAuth = FireflyConfig::get('ntfy_auth', false)->data;
|
||||||
$ntfyUser = app('fireflyconfig')->getEncrypted('ntfy_user', '')->data;
|
$ntfyUser = FireflyConfig::getEncrypted('ntfy_user', '')->data;
|
||||||
$ntfyPass = app('fireflyconfig')->getEncrypted('ntfy_pass', '')->data;
|
$ntfyPass = FireflyConfig::getEncrypted('ntfy_pass', '')->data;
|
||||||
$channels = config('notifications.channels');
|
$channels = config('notifications.channels');
|
||||||
$forcedAvailability = [];
|
$forcedAvailability = [];
|
||||||
|
|
||||||
@@ -59,7 +60,7 @@ class NotificationController extends Controller
|
|||||||
$notifications = [];
|
$notifications = [];
|
||||||
foreach (config('notifications.notifications.owner') as $key => $info) {
|
foreach (config('notifications.notifications.owner') as $key => $info) {
|
||||||
if (true === $info['enabled']) {
|
if (true === $info['enabled']) {
|
||||||
$notifications[$key] = app('fireflyconfig')->get(sprintf('notification_%s', $key), true)->data;
|
$notifications[$key] = FireflyConfig::get(sprintf('notification_%s', $key), true)->data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,19 +99,19 @@ class NotificationController extends Controller
|
|||||||
|
|
||||||
foreach (config('notifications.notifications.owner') as $key => $info) {
|
foreach (config('notifications.notifications.owner') as $key => $info) {
|
||||||
if (array_key_exists($key, $all)) {
|
if (array_key_exists($key, $all)) {
|
||||||
app('fireflyconfig')->set(sprintf('notification_%s', $key), $all[$key]);
|
FireflyConfig::set(sprintf('notification_%s', $key), $all[$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$variables = ['slack_webhook_url', 'pushover_app_token', 'pushover_user_token', 'ntfy_server', 'ntfy_topic', 'ntfy_user', 'ntfy_pass'];
|
$variables = ['slack_webhook_url', 'pushover_app_token', 'pushover_user_token', 'ntfy_server', 'ntfy_topic', 'ntfy_user', 'ntfy_pass'];
|
||||||
foreach ($variables as $variable) {
|
foreach ($variables as $variable) {
|
||||||
if ('' === $all[$variable]) {
|
if ('' === $all[$variable]) {
|
||||||
app('fireflyconfig')->delete($variable);
|
FireflyConfig::delete($variable);
|
||||||
}
|
}
|
||||||
if ('' !== $all[$variable]) {
|
if ('' !== $all[$variable]) {
|
||||||
app('fireflyconfig')->setEncrypted($variable, $all[$variable]);
|
FireflyConfig::setEncrypted($variable, $all[$variable]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
app('fireflyconfig')->set('ntfy_auth', $all['ntfy_auth'] ?? false);
|
FireflyConfig::set('ntfy_auth', $all['ntfy_auth'] ?? false);
|
||||||
|
|
||||||
|
|
||||||
session()->flash('success', (string) trans('firefly.notification_settings_saved'));
|
session()->flash('success', (string) trans('firefly.notification_settings_saved'));
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ use FireflyIII\Models\TransactionCurrency;
|
|||||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
use FireflyIII\Support\Http\Api\ExchangeRateConverter;
|
||||||
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ use FireflyIII\Http\Controllers\Controller;
|
|||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Controllers\GetConfigurationData;
|
use FireflyIII\Support\Http\Controllers\GetConfigurationData;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ use FireflyIII\Helpers\Report\NetWorthInterface;
|
|||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\CacheProperties;
|
use FireflyIII\Support\CacheProperties;
|
||||||
use FireflyIII\Support\Facades\Amount;
|
use FireflyIII\Support\Facades\Amount;
|
||||||
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
use FireflyIII\Support\Http\Controllers\DateCalculation;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ use FireflyIII\Enums\AccountTypeEnum;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Http\Requests\NewUserFormRequest;
|
use FireflyIII\Http\Requests\NewUserFormRequest;
|
||||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Controllers\CreateStuff;
|
use FireflyIII\Support\Http\Controllers\CreateStuff;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
|||||||
@@ -147,7 +147,8 @@ class IndexController extends Controller
|
|||||||
|
|
||||||
// enrich each account.
|
// enrich each account.
|
||||||
$enrichment = new AccountEnrichment();
|
$enrichment = new AccountEnrichment();
|
||||||
|
$enrichment->setUser(auth()->user());
|
||||||
|
$enrichment->setNative($this->defaultCurrency);
|
||||||
$return = [];
|
$return = [];
|
||||||
|
|
||||||
/** @var PiggyBank $piggy */
|
/** @var PiggyBank $piggy */
|
||||||
@@ -156,6 +157,7 @@ class IndexController extends Controller
|
|||||||
|
|
||||||
/** @var Account $account */
|
/** @var Account $account */
|
||||||
foreach ($accounts as $account) {
|
foreach ($accounts as $account) {
|
||||||
|
/** @var Account $account */
|
||||||
$account = $enrichment->enrichSingle($account);
|
$account = $enrichment->enrichSingle($account);
|
||||||
$array = $accountTransformer->transform($account);
|
$array = $accountTransformer->transform($account);
|
||||||
$accountId = (int) $array['id'];
|
$accountId = (int) $array['id'];
|
||||||
|
|||||||
@@ -141,8 +141,8 @@ class MassController extends Controller
|
|||||||
// reverse amounts
|
// reverse amounts
|
||||||
foreach ($journals as $index => $journal) {
|
foreach ($journals as $index => $journal) {
|
||||||
$journals[$index]['amount'] = app('steam')->bcround(app('steam')->positive($journal['amount']), $journal['currency_decimal_places']);
|
$journals[$index]['amount'] = app('steam')->bcround(app('steam')->positive($journal['amount']), $journal['currency_decimal_places']);
|
||||||
$journals[$index]['foreign_amount'] = null === $journal['foreign_amount'] ?
|
$journals[$index]['foreign_amount'] = null === $journal['foreign_amount']
|
||||||
null : app('steam')->positive($journal['foreign_amount']);
|
? null : app('steam')->positive($journal['foreign_amount']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->rememberPreviousUrl('transactions.mass-edit.url');
|
$this->rememberPreviousUrl('transactions.mass-edit.url');
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class ShowController extends Controller
|
|||||||
|
|
||||||
foreach (array_keys($groupArray['transactions']) as $index) {
|
foreach (array_keys($groupArray['transactions']) as $index) {
|
||||||
$groupArray['transactions'][$index]['tags'] = $this->repository->getTagObjects(
|
$groupArray['transactions'][$index]['tags'] = $this->repository->getTagObjects(
|
||||||
$groupArray['transactions'][$index]['transaction_journal_id']
|
(int) $groupArray['transactions'][$index]['transaction_journal_id']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Http\Requests\CurrencyFormRequest;
|
use FireflyIII\Http\Requests\CurrencyFormRequest;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency;
|
|||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ use FireflyIII\Http\Controllers\Controller;
|
|||||||
use FireflyIII\Http\Requests\CurrencyFormRequest;
|
use FireflyIII\Http\Requests\CurrencyFormRequest;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace FireflyIII\Http\Controllers\TransactionCurrency;
|
|||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Contracts\View\Factory;
|
use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|||||||
@@ -50,13 +50,19 @@ class AcceptHeaders
|
|||||||
throw new BadHttpHeaderException(sprintf('Accept header "%s" is not something this server can provide.', $request->header('Accept')));
|
throw new BadHttpHeaderException(sprintf('Accept header "%s" is not something this server can provide.', $request->header('Accept')));
|
||||||
}
|
}
|
||||||
// if bad 'Content-Type' header, refuse service.
|
// if bad 'Content-Type' header, refuse service.
|
||||||
if (('POST' === $method || 'PUT' === $method) && !$request->hasHeader('Content-Type')) {
|
|
||||||
|
// some routes are exempt from this.
|
||||||
|
$exempt = [
|
||||||
|
'api.v1.data.bulk.transactions',
|
||||||
|
];
|
||||||
|
|
||||||
|
if (('POST' === $method || 'PUT' === $method) && !$request->hasHeader('Content-Type') && !in_array($request->route()->getName(), $exempt, true)) {
|
||||||
$error = new BadHttpHeaderException('Content-Type header cannot be empty.');
|
$error = new BadHttpHeaderException('Content-Type header cannot be empty.');
|
||||||
$error->statusCode = 415;
|
$error->statusCode = 415;
|
||||||
|
|
||||||
throw $error;
|
throw $error;
|
||||||
}
|
}
|
||||||
if (('POST' === $method || 'PUT' === $method) && !$this->acceptsHeader($submitted, $contentTypes)) {
|
if (('POST' === $method || 'PUT' === $method) && !$this->acceptsHeader($submitted, $contentTypes) && !in_array($request->route()->getName(), $exempt, true)) {
|
||||||
$error = new BadHttpHeaderException(sprintf('Content-Type cannot be "%s"', $submitted));
|
$error = new BadHttpHeaderException(sprintf('Content-Type cannot be "%s"', $submitted));
|
||||||
$error->statusCode = 415;
|
$error->statusCode = 415;
|
||||||
|
|
||||||
|
|||||||
@@ -33,11 +33,11 @@ class TrustProxies extends Middleware
|
|||||||
{
|
{
|
||||||
// After...
|
// After...
|
||||||
protected $headers
|
protected $headers
|
||||||
= Request::HEADER_X_FORWARDED_FOR |
|
= Request::HEADER_X_FORWARDED_FOR
|
||||||
Request::HEADER_X_FORWARDED_HOST |
|
| Request::HEADER_X_FORWARDED_HOST
|
||||||
Request::HEADER_X_FORWARDED_PORT |
|
| Request::HEADER_X_FORWARDED_PORT
|
||||||
Request::HEADER_X_FORWARDED_PROTO |
|
| Request::HEADER_X_FORWARDED_PROTO
|
||||||
Request::HEADER_X_FORWARDED_AWS_ELB;
|
| Request::HEADER_X_FORWARDED_AWS_ELB;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TrustProxies constructor.
|
* TrustProxies constructor.
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ class TagFormRequest extends FormRequest
|
|||||||
'tag' => $tagRule,
|
'tag' => $tagRule,
|
||||||
'id' => $idRule,
|
'id' => $idRule,
|
||||||
'description' => 'max:32768|min:1|nullable',
|
'description' => 'max:32768|min:1|nullable',
|
||||||
'date' => 'date|nullable',
|
'date' => 'date|nullable|after:1984-09-17',
|
||||||
];
|
];
|
||||||
|
|
||||||
return Location::requestRules($rules);
|
return Location::requestRules($rules);
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ class ReturnsSettings
|
|||||||
if ('user' === $type && null !== $user) {
|
if ('user' === $type && null !== $user) {
|
||||||
$settings['ntfy_server'] = Preferences::getEncryptedForUser($user, 'ntfy_server', 'https://ntfy.sh')->data;
|
$settings['ntfy_server'] = Preferences::getEncryptedForUser($user, 'ntfy_server', 'https://ntfy.sh')->data;
|
||||||
$settings['ntfy_topic'] = Preferences::getEncryptedForUser($user, 'ntfy_topic', '')->data;
|
$settings['ntfy_topic'] = Preferences::getEncryptedForUser($user, 'ntfy_topic', '')->data;
|
||||||
$settings['ntfy_auth'] = Preferences::getForUser($user, 'ntfy_auth', false)->data;
|
$settings['ntfy_auth'] = '1' === Preferences::getForUser($user, 'ntfy_auth', false)->data;
|
||||||
$settings['ntfy_user'] = Preferences::getEncryptedForUser($user, 'ntfy_user', '')->data;
|
$settings['ntfy_user'] = Preferences::getEncryptedForUser($user, 'ntfy_user', '')->data;
|
||||||
$settings['ntfy_pass'] = Preferences::getEncryptedForUser($user, 'ntfy_pass', '')->data;
|
$settings['ntfy_pass'] = Preferences::getEncryptedForUser($user, 'ntfy_pass', '')->data;
|
||||||
Log::debug(sprintf('Auth is %s, user = "%s"', var_export($settings['ntfy_auth'], true), $settings['ntfy_user']));
|
Log::debug(sprintf('Auth is %s, user = "%s"', var_export($settings['ntfy_auth'], true), $settings['ntfy_user']));
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ use FireflyIII\Repositories\Account\AccountTasker;
|
|||||||
use FireflyIII\Repositories\Account\AccountTaskerInterface;
|
use FireflyIII\Repositories\Account\AccountTaskerInterface;
|
||||||
use FireflyIII\Repositories\Account\OperationsRepository;
|
use FireflyIII\Repositories\Account\OperationsRepository;
|
||||||
use FireflyIII\Repositories\Account\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Account\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepository as AdminAccountRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Account\AccountRepositoryInterface as AdminAccountRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -73,21 +71,6 @@ class AccountServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->app->bind(
|
|
||||||
AdminAccountRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var AdminAccountRepositoryInterface $repository */
|
|
||||||
$repository = app(AdminAccountRepository::class);
|
|
||||||
|
|
||||||
// phpstan thinks auth does not exist.
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
OperationsRepositoryInterface::class,
|
OperationsRepositoryInterface::class,
|
||||||
static function (Application $app) {
|
static function (Application $app) {
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ namespace FireflyIII\Providers;
|
|||||||
|
|
||||||
use FireflyIII\Repositories\Bill\BillRepository;
|
use FireflyIII\Repositories\Bill\BillRepository;
|
||||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Bill\BillRepository as AdminBillRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Bill\BillRepositoryInterface as AdminBillRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -60,20 +58,5 @@ class BillServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// administration variant
|
|
||||||
$this->app->bind(
|
|
||||||
AdminBillRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var AdminBillRepositoryInterface $repository */
|
|
||||||
$repository = app(AdminBillRepository::class);
|
|
||||||
|
|
||||||
// reference to auth is not understood by phpstan.
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,12 +33,6 @@ use FireflyIII\Repositories\Budget\NoBudgetRepository;
|
|||||||
use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\OperationsRepository;
|
use FireflyIII\Repositories\Budget\OperationsRepository;
|
||||||
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\AvailableBudgetRepository as AdminAbRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\AvailableBudgetRepositoryInterface as AdminAbRepositoryInterface;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\BudgetRepository as AdminBudgetRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\BudgetRepositoryInterface as AdminBudgetRepositoryInterface;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\OperationsRepository as AdminOperationsRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Budget\OperationsRepositoryInterface as AdminOperationsRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -73,19 +67,6 @@ class BudgetServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->app->bind(
|
|
||||||
AdminBudgetRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var AdminBudgetRepositoryInterface $repository */
|
|
||||||
$repository = app(AdminBudgetRepository::class);
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// available budget repos
|
// available budget repos
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
AvailableBudgetRepositoryInterface::class,
|
AvailableBudgetRepositoryInterface::class,
|
||||||
@@ -100,20 +81,6 @@ class BudgetServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// available budget repos
|
|
||||||
$this->app->bind(
|
|
||||||
AdminAbRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var AdminAbRepositoryInterface $repository */
|
|
||||||
$repository = app(AdminAbRepository::class);
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// budget limit repository.
|
// budget limit repository.
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
BudgetLimitRepositoryInterface::class,
|
BudgetLimitRepositoryInterface::class,
|
||||||
@@ -152,18 +119,6 @@ class BudgetServiceProvider extends ServiceProvider
|
|||||||
$repository->setUser(auth()->user());
|
$repository->setUser(auth()->user());
|
||||||
}
|
}
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$this->app->bind(
|
|
||||||
AdminOperationsRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var AdminOperationsRepositoryInterface $repository */
|
|
||||||
$repository = app(AdminOperationsRepository::class);
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
return $repository;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ use FireflyIII\Repositories\Category\NoCategoryRepository;
|
|||||||
use FireflyIII\Repositories\Category\NoCategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\NoCategoryRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Category\OperationsRepository;
|
use FireflyIII\Repositories\Category\OperationsRepository;
|
||||||
use FireflyIII\Repositories\Category\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Category\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Category\CategoryRepository as UserGroupCategoryRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Category\CategoryRepositoryInterface as UserGroupCategoryRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -63,20 +61,6 @@ class CategoryServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// phpstan does not understand reference to 'auth'.
|
|
||||||
$this->app->bind(
|
|
||||||
UserGroupCategoryRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var UserGroupCategoryRepository $repository */
|
|
||||||
$repository = app(UserGroupCategoryRepository::class);
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
OperationsRepositoryInterface::class,
|
OperationsRepositoryInterface::class,
|
||||||
static function (Application $app) {
|
static function (Application $app) {
|
||||||
|
|||||||
@@ -25,10 +25,8 @@ namespace FireflyIII\Providers;
|
|||||||
|
|
||||||
use FireflyIII\Repositories\Currency\CurrencyRepository;
|
use FireflyIII\Repositories\Currency\CurrencyRepository;
|
||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepository as GroupCurrencyRepository;
|
use FireflyIII\Repositories\Currency\CurrencyRepository as GroupCurrencyRepository;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface as GroupCurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface as GroupCurrencyRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\ExchangeRate\ExchangeRateRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\ExchangeRate\ExchangeRateRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -74,12 +72,5 @@ class CurrencyServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->app->bind(
|
|
||||||
ExchangeRateRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var ExchangeRateRepository */
|
|
||||||
return app(ExchangeRateRepository::class);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ use FireflyIII\Repositories\Journal\JournalRepository;
|
|||||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository;
|
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository;
|
||||||
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
|
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Journal\JournalRepository as GroupJournalRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Journal\JournalRepositoryInterface as GroupJournalRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -76,19 +74,6 @@ class JournalServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->app->bind(
|
|
||||||
GroupJournalRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var GroupJournalRepositoryInterface $repository */
|
|
||||||
$repository = app(GroupJournalRepository::class);
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth)
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// also bind new API repository
|
// also bind new API repository
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
JournalAPIRepositoryInterface::class,
|
JournalAPIRepositoryInterface::class,
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ namespace FireflyIII\Providers;
|
|||||||
|
|
||||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepository;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepository;
|
||||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepository as AdminPiggyBankRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\PiggyBank\PiggyBankRepositoryInterface as AdminPiggyBankRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -57,18 +55,5 @@ class PiggyBankServiceProvider extends ServiceProvider
|
|||||||
return $repository;
|
return $repository;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->app->bind(
|
|
||||||
AdminPiggyBankRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var AdminPiggyBankRepository $repository */
|
|
||||||
$repository = app(AdminPiggyBankRepository::class);
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth)
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ use FireflyIII\Repositories\Tag\OperationsRepository;
|
|||||||
use FireflyIII\Repositories\Tag\OperationsRepositoryInterface;
|
use FireflyIII\Repositories\Tag\OperationsRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Tag\TagRepository;
|
use FireflyIII\Repositories\Tag\TagRepository;
|
||||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
use FireflyIII\Repositories\UserGroups\Tag\TagRepository as UserGroupTagRepository;
|
|
||||||
use FireflyIII\Repositories\UserGroups\Tag\TagRepositoryInterface as UserGroupTagRepositoryInterface;
|
|
||||||
use Illuminate\Foundation\Application;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
@@ -61,20 +59,6 @@ class TagServiceProvider extends ServiceProvider
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->app->bind(
|
|
||||||
UserGroupTagRepositoryInterface::class,
|
|
||||||
static function (Application $app) {
|
|
||||||
/** @var UserGroupTagRepository $repository */
|
|
||||||
$repository = app(UserGroupTagRepository::class);
|
|
||||||
|
|
||||||
if ($app->auth->check()) { // @phpstan-ignore-line (phpstan does not understand the reference to auth)
|
|
||||||
$repository->setUser(auth()->user());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->app->bind(
|
$this->app->bind(
|
||||||
OperationsRepositoryInterface::class,
|
OperationsRepositoryInterface::class,
|
||||||
static function (Application $app) {
|
static function (Application $app) {
|
||||||
|
|||||||
@@ -33,24 +33,23 @@ use FireflyIII\Models\AccountMeta;
|
|||||||
use FireflyIII\Models\AccountType;
|
use FireflyIII\Models\AccountType;
|
||||||
use FireflyIII\Models\Attachment;
|
use FireflyIII\Models\Attachment;
|
||||||
use FireflyIII\Models\Location;
|
use FireflyIII\Models\Location;
|
||||||
use FireflyIII\Models\Transaction;
|
|
||||||
use FireflyIII\Models\TransactionCurrency;
|
use FireflyIII\Models\TransactionCurrency;
|
||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
use FireflyIII\Services\Internal\Destroy\AccountDestroyService;
|
use FireflyIII\Services\Internal\Destroy\AccountDestroyService;
|
||||||
use FireflyIII\Services\Internal\Update\AccountUpdateService;
|
use FireflyIII\Services\Internal\Update\AccountUpdateService;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
|
use FireflyIII\Support\Repositories\UserGroup\UserGroupInterface;
|
||||||
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
|
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
|
||||||
use FireflyIII\User;
|
|
||||||
use Illuminate\Contracts\Auth\Authenticatable;
|
|
||||||
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AccountRepository.
|
* Class AccountRepository.
|
||||||
*/
|
*/
|
||||||
class AccountRepository implements AccountRepositoryInterface
|
class AccountRepository implements AccountRepositoryInterface, UserGroupInterface
|
||||||
{
|
{
|
||||||
use UserGroupTrait;
|
use UserGroupTrait;
|
||||||
|
|
||||||
@@ -163,6 +162,12 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
return $account;
|
return $account;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\Override]
|
||||||
|
public function getAccountBalances(Account $account): Collection
|
||||||
|
{
|
||||||
|
return $account->accountBalances;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return account type or null if not found.
|
* Return account type or null if not found.
|
||||||
*/
|
*/
|
||||||
@@ -210,8 +215,8 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
{
|
{
|
||||||
$set = $account->attachments()->get();
|
$set = $account->attachments()->get();
|
||||||
|
|
||||||
/** @var \Storage $disk */
|
/** @var Storage $disk */
|
||||||
$disk = \Storage::disk('upload');
|
$disk = Storage::disk('upload');
|
||||||
|
|
||||||
return $set->each(
|
return $set->each(
|
||||||
static function (Attachment $attachment) use ($disk) { // @phpstan-ignore-line
|
static function (Attachment $attachment) use ($disk) { // @phpstan-ignore-line
|
||||||
@@ -239,13 +244,6 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
return $factory->findOrCreate('Cash account', $type->type);
|
return $factory->findOrCreate('Cash account', $type->type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setUser(null|Authenticatable|User $user): void
|
|
||||||
{
|
|
||||||
if ($user instanceof User) {
|
|
||||||
$this->user = $user;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCreditTransactionGroup(Account $account): ?TransactionGroup
|
public function getCreditTransactionGroup(Account $account): ?TransactionGroup
|
||||||
{
|
{
|
||||||
$journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
$journal = TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
|
||||||
@@ -498,6 +496,8 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
}
|
}
|
||||||
$query->orderBy('accounts.active', 'DESC');
|
$query->orderBy('accounts.active', 'DESC');
|
||||||
$query->orderBy('accounts.name', 'ASC');
|
$query->orderBy('accounts.name', 'ASC');
|
||||||
|
$query->orderBy('accounts.account_type_id', 'ASC');
|
||||||
|
$query->orderBy('accounts.id', 'ASC');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $query->get(['accounts.*']);
|
return $query->get(['accounts.*']);
|
||||||
@@ -652,4 +652,35 @@ class AccountRepository implements AccountRepositoryInterface
|
|||||||
|
|
||||||
return $factory->create($data);
|
return $factory->create($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[\Override]
|
||||||
|
public function periodCollection(Account $account, Carbon $start, Carbon $end): array
|
||||||
|
{
|
||||||
|
return $account->transactions()
|
||||||
|
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||||
|
->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id')
|
||||||
|
->leftJoin('transaction_currencies', 'transaction_currencies.id', '=', 'transactions.transaction_currency_id')
|
||||||
|
->leftJoin('transaction_currencies as foreign_currencies', 'foreign_currencies.id', '=', 'transactions.foreign_currency_id')
|
||||||
|
->where('transaction_journals.date', '>=', $start)
|
||||||
|
->where('transaction_journals.date', '<=', $end)
|
||||||
|
->get([
|
||||||
|
// currencies
|
||||||
|
'transaction_currencies.id as currency_id',
|
||||||
|
'transaction_currencies.code as currency_code',
|
||||||
|
'transaction_currencies.name as currency_name',
|
||||||
|
'transaction_currencies.symbol as currency_symbol',
|
||||||
|
'transaction_currencies.decimal_places as currency_decimal_places',
|
||||||
|
|
||||||
|
// foreign
|
||||||
|
'foreign_currencies.id as foreign_currency_id',
|
||||||
|
'foreign_currencies.code as foreign_currency_code',
|
||||||
|
'foreign_currencies.name as foreign_currency_name',
|
||||||
|
'foreign_currencies.symbol as foreign_currency_symbol',
|
||||||
|
'foreign_currencies.decimal_places as foreign_decimal_places',
|
||||||
|
|
||||||
|
// fields
|
||||||
|
'transaction_journals.date', 'transaction_types.type', 'transaction_journals.transaction_currency_id', 'transactions.amount'])
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Repositories\Account;
|
namespace FireflyIII\Repositories\Account;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Enums\UserRoleEnum;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Models\AccountType;
|
use FireflyIII\Models\AccountType;
|
||||||
use FireflyIII\Models\Location;
|
use FireflyIII\Models\Location;
|
||||||
@@ -37,6 +38,13 @@ use Illuminate\Support\Collection;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface AccountRepositoryInterface.
|
* Interface AccountRepositoryInterface.
|
||||||
|
*
|
||||||
|
* @method setUserGroup(UserGroup $group)
|
||||||
|
* @method getUserGroup()
|
||||||
|
* @method getUser()
|
||||||
|
* @method checkUserGroupAccess(UserRoleEnum $role)
|
||||||
|
* @method setUser(null|Authenticatable|User $user)
|
||||||
|
* @method setUserGroupById(int $userGroupId)
|
||||||
*/
|
*/
|
||||||
interface AccountRepositoryInterface
|
interface AccountRepositoryInterface
|
||||||
{
|
{
|
||||||
@@ -63,6 +71,10 @@ interface AccountRepositoryInterface
|
|||||||
|
|
||||||
public function findByName(string $name, array $types): ?Account;
|
public function findByName(string $name, array $types): ?Account;
|
||||||
|
|
||||||
|
public function periodCollection(Account $account, Carbon $start, Carbon $end): array;
|
||||||
|
|
||||||
|
public function getAccountBalances(Account $account): Collection;
|
||||||
|
|
||||||
public function getAccountCurrency(Account $account): ?TransactionCurrency;
|
public function getAccountCurrency(Account $account): ?TransactionCurrency;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -148,10 +160,6 @@ interface AccountRepositoryInterface
|
|||||||
|
|
||||||
public function searchAccountNr(string $query, array $types, int $limit): Collection;
|
public function searchAccountNr(string $query, array $types, int $limit): Collection;
|
||||||
|
|
||||||
public function setUser(null|Authenticatable|User $user): void;
|
|
||||||
|
|
||||||
public function setUserGroup(UserGroup $userGroup): void;
|
|
||||||
|
|
||||||
public function store(array $data): Account;
|
public function store(array $data): Account;
|
||||||
|
|
||||||
public function update(Account $account, array $data): Account;
|
public function update(Account $account, array $data): Account;
|
||||||
|
|||||||
@@ -28,19 +28,19 @@ use FireflyIII\Enums\TransactionTypeEnum;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Models\Account;
|
||||||
use FireflyIII\Repositories\UserGroups\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\Steam;
|
use FireflyIII\Support\Facades\Steam;
|
||||||
use FireflyIII\User;
|
use FireflyIII\Support\Repositories\UserGroup\UserGroupInterface;
|
||||||
use Illuminate\Contracts\Auth\Authenticatable;
|
use FireflyIII\Support\Repositories\UserGroup\UserGroupTrait;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AccountTasker.
|
* Class AccountTasker.
|
||||||
*/
|
*/
|
||||||
class AccountTasker implements AccountTaskerInterface
|
class AccountTasker implements AccountTaskerInterface, UserGroupInterface
|
||||||
{
|
{
|
||||||
private User $user;
|
use UserGroupTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
@@ -49,7 +49,7 @@ class AccountTasker implements AccountTaskerInterface
|
|||||||
{
|
{
|
||||||
$yesterday = clone $start;
|
$yesterday = clone $start;
|
||||||
$yesterday->subDay()->endOfDay(); // exactly up until $start but NOT including.
|
$yesterday->subDay()->endOfDay(); // exactly up until $start but NOT including.
|
||||||
$end->endOfDay(); // needs to be end of day to be correct.
|
$end->endOfDay(); // needs to be end of day to be correct.
|
||||||
Log::debug(sprintf('getAccountReport: finalAccountsBalance("%s")', $yesterday->format('Y-m-d H:i:s')));
|
Log::debug(sprintf('getAccountReport: finalAccountsBalance("%s")', $yesterday->format('Y-m-d H:i:s')));
|
||||||
Log::debug(sprintf('getAccountReport: finalAccountsBalance("%s")', $end->format('Y-m-d H:i:s')));
|
Log::debug(sprintf('getAccountReport: finalAccountsBalance("%s")', $end->format('Y-m-d H:i:s')));
|
||||||
$startSet = Steam::finalAccountsBalance($accounts, $yesterday);
|
$startSet = Steam::finalAccountsBalance($accounts, $yesterday);
|
||||||
@@ -289,11 +289,4 @@ class AccountTasker implements AccountTaskerInterface
|
|||||||
|
|
||||||
return $report;
|
return $report;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setUser(null|Authenticatable|User $user): void
|
|
||||||
{
|
|
||||||
if ($user instanceof User) {
|
|
||||||
$this->user = $user;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user