mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-11-03 20:55:05 +00:00 
			
		
		
		
	Compare commits
	
		
			167 Commits
		
	
	
		
			develop-20
			...
			a3bf845851
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a3bf845851 | ||
| 
						 | 
					78e832cdba | ||
| 
						 | 
					d47e4c4f24 | ||
| 
						 | 
					056329291f | ||
| 
						 | 
					977946064d | ||
| 
						 | 
					1870345ddf | ||
| 
						 | 
					6980717075 | ||
| 
						 | 
					1fe0aebacb | ||
| 
						 | 
					cbf7aef0c1 | ||
| 
						 | 
					8c3e6c0189 | ||
| 
						 | 
					cf7ee79c1c | ||
| 
						 | 
					7e344e4332 | ||
| 
						 | 
					0a55e9fb4e | ||
| 
						 | 
					ed2e0e86dc | ||
| 
						 | 
					9d1fb2cd6a | ||
| 
						 | 
					57617b750f | ||
| 
						 | 
					f6411fdc5a | ||
| 
						 | 
					02e24fc919 | ||
| 
						 | 
					dbc0210304 | ||
| 
						 | 
					a709e224d4 | ||
| 
						 | 
					83f3eddf44 | ||
| 
						 | 
					7cfc4c2671 | ||
| 
						 | 
					1c6055cb2d | ||
| 
						 | 
					4f4576e458 | ||
| 
						 | 
					84d3bcbb37 | ||
| 
						 | 
					c91c87d646 | ||
| 
						 | 
					e09b6034f7 | ||
| 
						 | 
					ad67bb80f3 | ||
| 
						 | 
					a88d0de34d | ||
| 
						 | 
					ecf498cc81 | ||
| 
						 | 
					569f553d26 | ||
| 
						 | 
					7d45bc46b8 | ||
| 
						 | 
					08553fcfb2 | ||
| 
						 | 
					58c76bee94 | ||
| 
						 | 
					3fa1b6dd27 | ||
| 
						 | 
					63aa8adab7 | ||
| 
						 | 
					70b8ea0acb | ||
| 
						 | 
					d800a01e33 | ||
| 
						 | 
					52f3ec7d3d | ||
| 
						 | 
					d4978a09ee | ||
| 
						 | 
					77095276e2 | ||
| 
						 | 
					b77a8591dc | ||
| 
						 | 
					132d7d9ff8 | ||
| 
						 | 
					a981e2c5cb | ||
| 
						 | 
					77b88b7758 | ||
| 
						 | 
					b9894eea57 | ||
| 
						 | 
					469319a240 | ||
| 
						 | 
					5a55593e34 | ||
| 
						 | 
					8979e5ad5a | ||
| 
						 | 
					3ab65c27ac | ||
| 
						 | 
					a3cac6fd0f | ||
| 
						 | 
					1acb5d8681 | ||
| 
						 | 
					f24cdc7897 | ||
| 
						 | 
					a2b611253b | ||
| 
						 | 
					252459c29b | ||
| 
						 | 
					3582baf9f7 | ||
| 
						 | 
					b03ecab035 | ||
| 
						 | 
					547a4e9dbb | ||
| 
						 | 
					62e33a51bd | ||
| 
						 | 
					8b0ee7e20a | ||
| 
						 | 
					0e0ec89b26 | ||
| 
						 | 
					ec08485c2b | ||
| 
						 | 
					d91d30c8f0 | ||
| 
						 | 
					634a43c361 | ||
| 
						 | 
					f2f86e1139 | ||
| 
						 | 
					a1c870c962 | ||
| 
						 | 
					98be3a1414 | ||
| 
						 | 
					e3c3a0a84b | ||
| 
						 | 
					b254074867 | ||
| 
						 | 
					f21a5b3000 | ||
| 
						 | 
					6029fe2e84 | ||
| 
						 | 
					651e11ed1c | ||
| 
						 | 
					5ba29cdacd | ||
| 
						 | 
					f948cc95b4 | ||
| 
						 | 
					11e721c6c9 | ||
| 
						 | 
					4bc77b2707 | ||
| 
						 | 
					6639309935 | ||
| 
						 | 
					52e08bb9eb | ||
| 
						 | 
					435ca994cf | ||
| 
						 | 
					b29c35864c | ||
| 
						 | 
					2ddc012549 | ||
| 
						 | 
					22c88383ad | ||
| 
						 | 
					9593f1b44e | ||
| 
						 | 
					22f67be0b5 | ||
| 
						 | 
					0e1633b52b | ||
| 
						 | 
					0070e000b6 | ||
| 
						 | 
					c525a18263 | ||
| 
						 | 
					68fbd8d5f4 | ||
| 
						 | 
					0724c005cf | ||
| 
						 | 
					e662275400 | ||
| 
						 | 
					def2dd77ab | ||
| 
						 | 
					36e87f3383 | ||
| 
						 | 
					e420752991 | ||
| 
						 | 
					c541cf48c3 | ||
| 
						 | 
					521db984ab | ||
| 
						 | 
					b2b3c3f135 | ||
| 
						 | 
					b0033cf9ed | ||
| 
						 | 
					50279d623c | ||
| 
						 | 
					6341743cf9 | ||
| 
						 | 
					072212c112 | ||
| 
						 | 
					362705ec71 | ||
| 
						 | 
					6ce926e7d2 | ||
| 
						 | 
					1652c3af72 | ||
| 
						 | 
					012172b0b5 | ||
| 
						 | 
					957bc00847 | ||
| 
						 | 
					7f827fb277 | ||
| 
						 | 
					8e700944fd | ||
| 
						 | 
					037a128942 | ||
| 
						 | 
					ca364dc877 | ||
| 
						 | 
					e55af7186c | ||
| 
						 | 
					354bbebbee | ||
| 
						 | 
					a70fab1e87 | ||
| 
						 | 
					b9c93091cd | ||
| 
						 | 
					4349f8f303 | ||
| 
						 | 
					5088e20f25 | ||
| 
						 | 
					3f81aa7403 | ||
| 
						 | 
					8885d1dbeb | ||
| 
						 | 
					a6ba75d528 | ||
| 
						 | 
					667cbb1332 | ||
| 
						 | 
					d1bae875f7 | ||
| 
						 | 
					c5cf529413 | ||
| 
						 | 
					62b9f2785f | ||
| 
						 | 
					3b85f87502 | ||
| 
						 | 
					87d3d14504 | ||
| 
						 | 
					5637573fd0 | ||
| 
						 | 
					48255ae6ee | ||
| 
						 | 
					ea02986170 | ||
| 
						 | 
					f4fbc15ac6 | ||
| 
						 | 
					a02c4b42a4 | ||
| 
						 | 
					1ff47441ce | ||
| 
						 | 
					2cc8568077 | ||
| 
						 | 
					408687ec6b | ||
| 
						 | 
					308abffb0b | ||
| 
						 | 
					6743b3fe83 | ||
| 
						 | 
					ac0113e445 | ||
| 
						 | 
					0f0a28c3d9 | ||
| 
						 | 
					79f2d70211 | ||
| 
						 | 
					8a06c0f7ec | ||
| 
						 | 
					c54da62005 | ||
| 
						 | 
					e5923202af | ||
| 
						 | 
					eb6f78406e | ||
| 
						 | 
					d61f87f649 | ||
| 
						 | 
					33dcce7525 | ||
| 
						 | 
					b1d86c3a37 | ||
| 
						 | 
					822dee6e70 | ||
| 
						 | 
					f6dac83777 | ||
| 
						 | 
					d3c557ca22 | ||
| 
						 | 
					853a99852e | ||
| 
						 | 
					8f24ac4fcd | ||
| 
						 | 
					8b09cfb8c9 | ||
| 
						 | 
					18ae950d2e | ||
| 
						 | 
					69dfbda847 | ||
| 
						 | 
					4ec2fcdb8a | ||
| 
						 | 
					08879d31ba | ||
| 
						 | 
					66d09450d3 | ||
| 
						 | 
					74f7c07a76 | ||
| 
						 | 
					ae3d0a3e49 | ||
| 
						 | 
					61e8d7d7a2 | ||
| 
						 | 
					62c5440605 | ||
| 
						 | 
					0aa90b9453 | ||
| 
						 | 
					855bc2f8e7 | ||
| 
						 | 
					d8f05492c3 | ||
| 
						 | 
					4a264f34fa | ||
| 
						 | 
					5a1413e758 | ||
| 
						 | 
					84dbeeb0ce | ||
| 
						 | 
					d868dc0945 | ||
| 
						 | 
					beecf9c229 | 
							
								
								
									
										137
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										137
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							@@ -402,16 +402,16 @@
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "friendsofphp/php-cs-fixer",
 | 
			
		||||
            "version": "v3.87.2",
 | 
			
		||||
            "version": "v3.88.2",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
 | 
			
		||||
                "reference": "da5f0a7858c79b56fc0b8c36d3efcfe5f37f0992"
 | 
			
		||||
                "reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/da5f0a7858c79b56fc0b8c36d3efcfe5f37f0992",
 | 
			
		||||
                "reference": "da5f0a7858c79b56fc0b8c36d3efcfe5f37f0992",
 | 
			
		||||
                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a8d15584bafb0f0d9d938827840060fd4a3ebc99",
 | 
			
		||||
                "reference": "a8d15584bafb0f0d9d938827840060fd4a3ebc99",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
@@ -438,12 +438,13 @@
 | 
			
		||||
                "symfony/polyfill-mbstring": "^1.33",
 | 
			
		||||
                "symfony/polyfill-php80": "^1.33",
 | 
			
		||||
                "symfony/polyfill-php81": "^1.33",
 | 
			
		||||
                "symfony/polyfill-php84": "^1.33",
 | 
			
		||||
                "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2",
 | 
			
		||||
                "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0"
 | 
			
		||||
            },
 | 
			
		||||
            "require-dev": {
 | 
			
		||||
                "facile-it/paraunit": "^1.3.1 || ^2.7",
 | 
			
		||||
                "infection/infection": "^0.29.14",
 | 
			
		||||
                "infection/infection": "^0.31.0",
 | 
			
		||||
                "justinrainbow/json-schema": "^6.5",
 | 
			
		||||
                "keradus/cli-executor": "^2.2",
 | 
			
		||||
                "mikey179/vfsstream": "^1.6.12",
 | 
			
		||||
@@ -451,7 +452,6 @@
 | 
			
		||||
                "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
 | 
			
		||||
                "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
 | 
			
		||||
                "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
 | 
			
		||||
                "symfony/polyfill-php84": "^1.33",
 | 
			
		||||
                "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2",
 | 
			
		||||
                "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2"
 | 
			
		||||
            },
 | 
			
		||||
@@ -494,7 +494,7 @@
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
 | 
			
		||||
                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.87.2"
 | 
			
		||||
                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.88.2"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
@@ -502,7 +502,7 @@
 | 
			
		||||
                    "type": "github"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2025-09-10T09:51:40+00:00"
 | 
			
		||||
            "time": "2025-09-27T00:24:15+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "psr/container",
 | 
			
		||||
@@ -1252,16 +1252,16 @@
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/console",
 | 
			
		||||
            "version": "v7.3.3",
 | 
			
		||||
            "version": "v7.3.4",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/symfony/console.git",
 | 
			
		||||
                "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7"
 | 
			
		||||
                "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
 | 
			
		||||
                "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
 | 
			
		||||
                "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
@@ -1326,7 +1326,7 @@
 | 
			
		||||
                "terminal"
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "source": "https://github.com/symfony/console/tree/v7.3.3"
 | 
			
		||||
                "source": "https://github.com/symfony/console/tree/v7.3.4"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
@@ -1346,7 +1346,7 @@
 | 
			
		||||
                    "type": "tidelift"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2025-08-25T06:35:40+00:00"
 | 
			
		||||
            "time": "2025-09-22T15:31:00+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/deprecation-contracts",
 | 
			
		||||
@@ -2284,17 +2284,97 @@
 | 
			
		||||
            "time": "2024-09-09T11:45:10+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/process",
 | 
			
		||||
            "version": "v7.3.3",
 | 
			
		||||
            "name": "symfony/polyfill-php84",
 | 
			
		||||
            "version": "v1.33.0",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/symfony/process.git",
 | 
			
		||||
                "reference": "32241012d521e2e8a9d713adb0812bb773b907f1"
 | 
			
		||||
                "url": "https://github.com/symfony/polyfill-php84.git",
 | 
			
		||||
                "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1",
 | 
			
		||||
                "reference": "32241012d521e2e8a9d713adb0812bb773b907f1",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
 | 
			
		||||
                "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
                "php": ">=7.2"
 | 
			
		||||
            },
 | 
			
		||||
            "type": "library",
 | 
			
		||||
            "extra": {
 | 
			
		||||
                "thanks": {
 | 
			
		||||
                    "url": "https://github.com/symfony/polyfill",
 | 
			
		||||
                    "name": "symfony/polyfill"
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "autoload": {
 | 
			
		||||
                "files": [
 | 
			
		||||
                    "bootstrap.php"
 | 
			
		||||
                ],
 | 
			
		||||
                "psr-4": {
 | 
			
		||||
                    "Symfony\\Polyfill\\Php84\\": ""
 | 
			
		||||
                },
 | 
			
		||||
                "classmap": [
 | 
			
		||||
                    "Resources/stubs"
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "notification-url": "https://packagist.org/downloads/",
 | 
			
		||||
            "license": [
 | 
			
		||||
                "MIT"
 | 
			
		||||
            ],
 | 
			
		||||
            "authors": [
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "Nicolas Grekas",
 | 
			
		||||
                    "email": "p@tchwork.com"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "Symfony Community",
 | 
			
		||||
                    "homepage": "https://symfony.com/contributors"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
 | 
			
		||||
            "homepage": "https://symfony.com",
 | 
			
		||||
            "keywords": [
 | 
			
		||||
                "compatibility",
 | 
			
		||||
                "polyfill",
 | 
			
		||||
                "portable",
 | 
			
		||||
                "shim"
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
                    "url": "https://symfony.com/sponsor",
 | 
			
		||||
                    "type": "custom"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "url": "https://github.com/fabpot",
 | 
			
		||||
                    "type": "github"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "url": "https://github.com/nicolas-grekas",
 | 
			
		||||
                    "type": "github"
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
 | 
			
		||||
                    "type": "tidelift"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2025-06-24T13:30:11+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/process",
 | 
			
		||||
            "version": "v7.3.4",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/symfony/process.git",
 | 
			
		||||
                "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b",
 | 
			
		||||
                "reference": "f24f8f316367b30810810d4eb30c543d7003ff3b",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
@@ -2326,7 +2406,7 @@
 | 
			
		||||
            "description": "Executes commands in sub-processes",
 | 
			
		||||
            "homepage": "https://symfony.com",
 | 
			
		||||
            "support": {
 | 
			
		||||
                "source": "https://github.com/symfony/process/tree/v7.3.3"
 | 
			
		||||
                "source": "https://github.com/symfony/process/tree/v7.3.4"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
@@ -2346,7 +2426,7 @@
 | 
			
		||||
                    "type": "tidelift"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2025-08-18T09:42:54+00:00"
 | 
			
		||||
            "time": "2025-09-11T10:12:26+00:00"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/service-contracts",
 | 
			
		||||
@@ -2495,16 +2575,16 @@
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "symfony/string",
 | 
			
		||||
            "version": "v7.3.3",
 | 
			
		||||
            "version": "v7.3.4",
 | 
			
		||||
            "source": {
 | 
			
		||||
                "type": "git",
 | 
			
		||||
                "url": "https://github.com/symfony/string.git",
 | 
			
		||||
                "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c"
 | 
			
		||||
                "reference": "f96476035142921000338bad71e5247fbc138872"
 | 
			
		||||
            },
 | 
			
		||||
            "dist": {
 | 
			
		||||
                "type": "zip",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
 | 
			
		||||
                "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
 | 
			
		||||
                "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872",
 | 
			
		||||
                "reference": "f96476035142921000338bad71e5247fbc138872",
 | 
			
		||||
                "shasum": ""
 | 
			
		||||
            },
 | 
			
		||||
            "require": {
 | 
			
		||||
@@ -2519,7 +2599,6 @@
 | 
			
		||||
            },
 | 
			
		||||
            "require-dev": {
 | 
			
		||||
                "symfony/emoji": "^7.1",
 | 
			
		||||
                "symfony/error-handler": "^6.4|^7.0",
 | 
			
		||||
                "symfony/http-client": "^6.4|^7.0",
 | 
			
		||||
                "symfony/intl": "^6.4|^7.0",
 | 
			
		||||
                "symfony/translation-contracts": "^2.5|^3.0",
 | 
			
		||||
@@ -2562,7 +2641,7 @@
 | 
			
		||||
                "utf8"
 | 
			
		||||
            ],
 | 
			
		||||
            "support": {
 | 
			
		||||
                "source": "https://github.com/symfony/string/tree/v7.3.3"
 | 
			
		||||
                "source": "https://github.com/symfony/string/tree/v7.3.4"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": [
 | 
			
		||||
                {
 | 
			
		||||
@@ -2582,7 +2661,7 @@
 | 
			
		||||
                    "type": "tidelift"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "time": "2025-08-25T06:35:40+00:00"
 | 
			
		||||
            "time": "2025-09-11T14:36:48+00:00"
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "packages-dev": [],
 | 
			
		||||
 
 | 
			
		||||
@@ -28,5 +28,5 @@ parameters:
 | 
			
		||||
 | 
			
		||||
  # The level 8 is the highest level. original was 5
 | 
			
		||||
  # 7 is more than enough, higher just leaves NULL things.
 | 
			
		||||
  level: 7
 | 
			
		||||
  level: 6
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,10 @@ 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.
 | 
			
		||||
 | 
			
		||||
## 2025
 | 
			
		||||
- jreyesr
 | 
			
		||||
- codearena-bot
 | 
			
		||||
- Nicky De Maeyer
 | 
			
		||||
- Denis Iskandarov
 | 
			
		||||
- =
 | 
			
		||||
- Lompi
 | 
			
		||||
- Jose Diaz-Gonzalez
 | 
			
		||||
- SoftBrix
 | 
			
		||||
 
 | 
			
		||||
@@ -84,13 +84,13 @@ class AccountController extends Controller
 | 
			
		||||
        $data        = $request->getData();
 | 
			
		||||
        $types       = $data['types'];
 | 
			
		||||
        $query       = $data['query'];
 | 
			
		||||
        $date        = $data['date'] ?? today(config('app.timezone'));
 | 
			
		||||
        $date        = $data['date'];
 | 
			
		||||
        $return      = [];
 | 
			
		||||
        $timer       = Timer::getInstance();
 | 
			
		||||
        $timer->start(sprintf('AC accounts "%s"', $query));
 | 
			
		||||
        $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 end-of-day for account balance. so it is at $date 23:59:59
 | 
			
		||||
        $date->endOfDay();
 | 
			
		||||
 | 
			
		||||
        $allBalances = Steam::accountsBalancesOptimized($result, $date, $this->primaryCurrency, $this->convertToPrimary);
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,10 @@ use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
 | 
			
		||||
use FireflyIII\Enums\UserRoleEnum;
 | 
			
		||||
use FireflyIII\Models\PiggyBank;
 | 
			
		||||
use FireflyIII\Models\TransactionCurrency;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Facades\Amount;
 | 
			
		||||
use Illuminate\Http\JsonResponse;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -96,6 +98,7 @@ class PiggyBankController extends Controller
 | 
			
		||||
 | 
			
		||||
        /** @var PiggyBank $piggy */
 | 
			
		||||
        foreach ($piggies as $piggy) {
 | 
			
		||||
            /** @var TransactionCurrency $currency */
 | 
			
		||||
            $currency      = $piggy->transactionCurrency;
 | 
			
		||||
            $currentAmount = $this->piggyRepository->getCurrentAmount($piggy);
 | 
			
		||||
            $objectGroup   = $piggy->objectGroups()->first();
 | 
			
		||||
@@ -105,8 +108,8 @@ class PiggyBankController extends Controller
 | 
			
		||||
                'name_with_balance'       => sprintf(
 | 
			
		||||
                    '%s (%s / %s)',
 | 
			
		||||
                    $piggy->name,
 | 
			
		||||
                    app('amount')->formatAnything($currency, $currentAmount, false),
 | 
			
		||||
                    app('amount')->formatAnything($currency, $piggy->target_amount, false),
 | 
			
		||||
                    Amount::formatAnything($currency, $currentAmount, false),
 | 
			
		||||
                    Amount::formatAnything($currency, $piggy->target_amount, false),
 | 
			
		||||
                ),
 | 
			
		||||
                'currency_id'             => (string) $currency->id,
 | 
			
		||||
                'currency_name'           => $currency->name,
 | 
			
		||||
 
 | 
			
		||||
@@ -24,10 +24,10 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Autocomplete;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Models\TransactionGroup;
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
 | 
			
		||||
use FireflyIII\Enums\UserRoleEnum;
 | 
			
		||||
use FireflyIII\Models\TransactionGroup;
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
 | 
			
		||||
 
 | 
			
		||||
@@ -259,60 +259,6 @@ class BudgetController extends Controller
 | 
			
		||||
        return $return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //    /**
 | 
			
		||||
    //     * Function that processes each budget limit (per budget).
 | 
			
		||||
    //     *
 | 
			
		||||
    //     * If you have a budget limit in EUR, only transactions in EUR will be considered.
 | 
			
		||||
    //     * If you have a budget limit in GBP, only transactions in GBP will be considered.
 | 
			
		||||
    //     *
 | 
			
		||||
    //     * If you have a budget limit in EUR, and a transaction in GBP, it will not be considered for the EUR budget limit.
 | 
			
		||||
    //     *
 | 
			
		||||
    //     * @throws FireflyException
 | 
			
		||||
    //     */
 | 
			
		||||
    //    private function budgetLimits(Budget $budget, Collection $limits): array
 | 
			
		||||
    //    {
 | 
			
		||||
    //        Log::debug(sprintf('Now in budgetLimits(#%d)', $budget->id));
 | 
			
		||||
    //        $data = [];
 | 
			
		||||
    //
 | 
			
		||||
    //        /** @var BudgetLimit $limit */
 | 
			
		||||
    //        foreach ($limits as $limit) {
 | 
			
		||||
    //            $data = array_merge($data, $this->processLimit($budget, $limit));
 | 
			
		||||
    //        }
 | 
			
		||||
    //
 | 
			
		||||
    //        return $data;
 | 
			
		||||
    //    }
 | 
			
		||||
 | 
			
		||||
    //    /**
 | 
			
		||||
    //     * @throws FireflyException
 | 
			
		||||
    //     */
 | 
			
		||||
    //    private function processLimit(Budget $budget, BudgetLimit $limit): array
 | 
			
		||||
    //    {
 | 
			
		||||
    //        Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__));
 | 
			
		||||
    //        $end             = clone $limit->end_date;
 | 
			
		||||
    //        $end->endOfDay();
 | 
			
		||||
    //        $spent           = $this->opsRepository->listExpenses($limit->start_date, $end, null, new Collection()->push($budget));
 | 
			
		||||
    //        $limitCurrencyId = $limit->transaction_currency_id;
 | 
			
		||||
    //
 | 
			
		||||
    //        /** @var array $entry */
 | 
			
		||||
    //        // only spent the entry where the entry's currency matches the budget limit's currency
 | 
			
		||||
    //        // so $filtered will only have 1 or 0 entries
 | 
			
		||||
    //        $filtered        = array_filter($spent, fn ($entry) => $entry['currency_id'] === $limitCurrencyId);
 | 
			
		||||
    //        $result          = $this->processExpenses($budget->id, $filtered, $limit->start_date, $end);
 | 
			
		||||
    //        if (1 === count($result)) {
 | 
			
		||||
    //            $compare                              = bccomp($limit->amount, (string)app('steam')->positive($result[$limitCurrencyId]['spent']));
 | 
			
		||||
    //            $result[$limitCurrencyId]['budgeted'] = $limit->amount;
 | 
			
		||||
    //            if (1 === $compare) {
 | 
			
		||||
    //                // convert this amount into the primary currency:
 | 
			
		||||
    //                $result[$limitCurrencyId]['left'] = bcadd($limit->amount, (string)$result[$limitCurrencyId]['spent']);
 | 
			
		||||
    //            }
 | 
			
		||||
    //            if ($compare <= 0) {
 | 
			
		||||
    //                $result[$limitCurrencyId]['overspent'] = app('steam')->positive(bcadd($limit->amount, (string)$result[$limitCurrencyId]['spent']));
 | 
			
		||||
    //            }
 | 
			
		||||
    //        }
 | 
			
		||||
    //
 | 
			
		||||
    //        return $result;
 | 
			
		||||
    //    }
 | 
			
		||||
 | 
			
		||||
    private function filterLimit(int $currencyId, Collection $limits): ?BudgetLimit
 | 
			
		||||
    {
 | 
			
		||||
        $amount    = '0';
 | 
			
		||||
 
 | 
			
		||||
@@ -107,11 +107,11 @@ class CategoryController extends Controller
 | 
			
		||||
            $type                           = $journal['transaction_type_type'];
 | 
			
		||||
            $currency                       = $currencies[$journalCurrencyId] ?? $this->currencyRepos->find($journalCurrencyId);
 | 
			
		||||
            $currencies[$journalCurrencyId] = $currency;
 | 
			
		||||
            $currencyId                     = (int)$currency->id;
 | 
			
		||||
            $currencyName                   = (string)$currency->name;
 | 
			
		||||
            $currencyCode                   = (string)$currency->code;
 | 
			
		||||
            $currencySymbol                 = (string)$currency->symbol;
 | 
			
		||||
            $currencyDecimalPlaces          = (int)$currency->decimal_places;
 | 
			
		||||
            $currencyId                     = $currency->id;
 | 
			
		||||
            $currencyName                   = $currency->name;
 | 
			
		||||
            $currencyCode                   = $currency->code;
 | 
			
		||||
            $currencySymbol                 = $currency->symbol;
 | 
			
		||||
            $currencyDecimalPlaces          = $currency->decimal_places;
 | 
			
		||||
            $amount                         = Steam::positive((string)$journal['amount']);
 | 
			
		||||
            $pcAmount                       = null;
 | 
			
		||||
 | 
			
		||||
@@ -120,11 +120,11 @@ class CategoryController extends Controller
 | 
			
		||||
                $pcAmount = $amount;
 | 
			
		||||
            }
 | 
			
		||||
            if ($this->convertToPrimary && $journalCurrencyId !== $this->primaryCurrency->id) {
 | 
			
		||||
                $currencyId            = (int)$this->primaryCurrency->id;
 | 
			
		||||
                $currencyName          = (string)$this->primaryCurrency->name;
 | 
			
		||||
                $currencyCode          = (string)$this->primaryCurrency->code;
 | 
			
		||||
                $currencySymbol        = (string)$this->primaryCurrency->symbol;
 | 
			
		||||
                $currencyDecimalPlaces = (int)$this->primaryCurrency->decimal_places;
 | 
			
		||||
                $currencyId            = $this->primaryCurrency->id;
 | 
			
		||||
                $currencyName          = $this->primaryCurrency->name;
 | 
			
		||||
                $currencyCode          = $this->primaryCurrency->code;
 | 
			
		||||
                $currencySymbol        = $this->primaryCurrency->symbol;
 | 
			
		||||
                $currencyDecimalPlaces = $this->primaryCurrency->decimal_places;
 | 
			
		||||
                $pcAmount              = $converter->convert($currency, $this->primaryCurrency, $journal['date'], $amount);
 | 
			
		||||
                Log::debug(sprintf('Converted %s %s to %s %s', $journal['currency_code'], $amount, $this->primaryCurrency->code, $pcAmount));
 | 
			
		||||
            }
 | 
			
		||||
@@ -141,10 +141,10 @@ class CategoryController extends Controller
 | 
			
		||||
                'currency_symbol'                 => $currencySymbol,
 | 
			
		||||
                'currency_decimal_places'         => $currencyDecimalPlaces,
 | 
			
		||||
                'primary_currency_id'             => (string)$this->primaryCurrency->id,
 | 
			
		||||
                'primary_currency_name'           => (string)$this->primaryCurrency->name,
 | 
			
		||||
                'primary_currency_code'           => (string)$this->primaryCurrency->code,
 | 
			
		||||
                'primary_currency_symbol'         => (string)$this->primaryCurrency->symbol,
 | 
			
		||||
                'primary_currency_decimal_places' => (int)$this->primaryCurrency->decimal_places,
 | 
			
		||||
                'primary_currency_name'           => $this->primaryCurrency->name,
 | 
			
		||||
                'primary_currency_code'           => $this->primaryCurrency->code,
 | 
			
		||||
                'primary_currency_symbol'         => $this->primaryCurrency->symbol,
 | 
			
		||||
                'primary_currency_decimal_places' => $this->primaryCurrency->decimal_places,
 | 
			
		||||
                'period'                          => null,
 | 
			
		||||
                'start_date'                      => $start->toAtomString(),
 | 
			
		||||
                'end_date'                        => $end->toAtomString(),
 | 
			
		||||
 
 | 
			
		||||
@@ -67,6 +67,8 @@ abstract class Controller extends BaseController
 | 
			
		||||
 | 
			
		||||
    protected bool                $convertToPrimary = false;
 | 
			
		||||
    protected TransactionCurrency $primaryCurrency;
 | 
			
		||||
 | 
			
		||||
    /** @deprecated use Request classes */
 | 
			
		||||
    protected ParameterBag        $parameters;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -98,7 +100,8 @@ abstract class Controller extends BaseController
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Method to grab all parameters from the URL.
 | 
			
		||||
     * @deprecated use Request classes
 | 
			
		||||
     * Method to grab all parameters from the URL
 | 
			
		||||
     */
 | 
			
		||||
    private function getParameters(): ParameterBag
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -61,6 +61,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -100,6 +101,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -112,6 +114,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -124,6 +127,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -136,6 +140,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -148,6 +153,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -160,6 +166,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -172,6 +179,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings("PHPMD.UnusedFormalParameter")
 | 
			
		||||
@@ -184,6 +192,7 @@ class ExportController extends Controller
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws DatetimeException
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(ExportRequest $request): LaravelResponse
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Account;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Account;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
@@ -70,9 +69,6 @@ class ListController extends Controller
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function attachments(Account $account): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        $manager     = $this->getManager();
 | 
			
		||||
@@ -96,9 +92,6 @@ class ListController extends Controller
 | 
			
		||||
        return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function piggyBanks(Account $account): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        // create some objects:
 | 
			
		||||
@@ -135,8 +128,6 @@ class ListController extends Controller
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Show all transaction groups related to the account.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, Account $account): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,6 @@ namespace FireflyIII\Api\V1\Controllers\Models\Account;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Models\Account\ShowRequest;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Account;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Http\Api\AccountFilter;
 | 
			
		||||
@@ -68,46 +67,49 @@ class ShowController extends Controller
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(ShowRequest $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        $manager     = $this->getManager();
 | 
			
		||||
        $params      = $request->getParameters();
 | 
			
		||||
        $this->parameters->set('type', $params['type']);
 | 
			
		||||
 | 
			
		||||
        // types to get, page size:
 | 
			
		||||
        $types       = $this->mapAccountTypes($params['type']);
 | 
			
		||||
        [
 | 
			
		||||
            'types'  => $types,
 | 
			
		||||
            'page'   => $page,
 | 
			
		||||
            'limit'  => $limit,
 | 
			
		||||
            'offset' => $offset,
 | 
			
		||||
            'sort'   => $sort,
 | 
			
		||||
            'start'  => $start,
 | 
			
		||||
            'end'    => $end,
 | 
			
		||||
            'date'   => $date,
 | 
			
		||||
        ]
 | 
			
		||||
                     = $request->attributes->all();
 | 
			
		||||
 | 
			
		||||
        // get list of accounts. Count it and split it.
 | 
			
		||||
        $this->repository->resetAccountOrder();
 | 
			
		||||
        $collection  = $this->repository->getAccountsByType($types, $params['sort']);
 | 
			
		||||
        $collection  = $this->repository->getAccountsByType($types, $sort);
 | 
			
		||||
        $count       = $collection->count();
 | 
			
		||||
 | 
			
		||||
        // continue sort:
 | 
			
		||||
        // TODO if the user sorts on DB dependent field there must be no slice before enrichment, only after.
 | 
			
		||||
        // TODO still need to figure out how to do this easily.
 | 
			
		||||
        $accounts    = $collection->slice(($this->parameters->get('page') - 1) * $params['limit'], $params['limit']);
 | 
			
		||||
        $accounts    = $collection->slice($offset, $limit);
 | 
			
		||||
 | 
			
		||||
        // enrich
 | 
			
		||||
        /** @var User $admin */
 | 
			
		||||
        $admin       = auth()->user();
 | 
			
		||||
        $enrichment  = new AccountEnrichment();
 | 
			
		||||
        $enrichment->setSort($params['sort']);
 | 
			
		||||
        $enrichment->setDate($this->parameters->get('date'));
 | 
			
		||||
        $enrichment->setStart($this->parameters->get('start'));
 | 
			
		||||
        $enrichment->setEnd($this->parameters->get('end'));
 | 
			
		||||
        $enrichment->setSort($sort);
 | 
			
		||||
        $enrichment->setDate($date);
 | 
			
		||||
        $enrichment->setStart($start);
 | 
			
		||||
        $enrichment->setEnd($end);
 | 
			
		||||
        $enrichment->setUser($admin);
 | 
			
		||||
        $accounts    = $enrichment->enrich($accounts);
 | 
			
		||||
 | 
			
		||||
        // make paginator:
 | 
			
		||||
        $paginator   = new LengthAwarePaginator($accounts, $count, $params['limit'], $this->parameters->get('page'));
 | 
			
		||||
        $paginator   = new LengthAwarePaginator($accounts, $count, $limit, $page);
 | 
			
		||||
        $paginator->setPath(route('api.v1.accounts.index').$this->buildParams());
 | 
			
		||||
 | 
			
		||||
        /** @var AccountTransformer $transformer */
 | 
			
		||||
        $transformer = app(AccountTransformer::class);
 | 
			
		||||
        $transformer->setParameters($this->parameters);
 | 
			
		||||
 | 
			
		||||
        $resource    = new FractalCollection($accounts, $transformer, self::RESOURCE_KEY);
 | 
			
		||||
        $resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
 | 
			
		||||
@@ -126,23 +128,25 @@ class ShowController extends Controller
 | 
			
		||||
        // get list of accounts. Count it and split it.
 | 
			
		||||
        $this->repository->resetAccountOrder();
 | 
			
		||||
        $account->refresh();
 | 
			
		||||
        $manager     = $this->getManager();
 | 
			
		||||
        $manager                = $this->getManager();
 | 
			
		||||
        ['start'     => $start,
 | 
			
		||||
            'end'    => $end,
 | 
			
		||||
            'date'   => $date,] = $request->attributes->all();
 | 
			
		||||
 | 
			
		||||
        // enrich
 | 
			
		||||
        /** @var User $admin */
 | 
			
		||||
        $admin       = auth()->user();
 | 
			
		||||
        $enrichment  = new AccountEnrichment();
 | 
			
		||||
        $enrichment->setDate($this->parameters->get('date'));
 | 
			
		||||
        $enrichment->setStart($this->parameters->get('start'));
 | 
			
		||||
        $enrichment->setEnd($this->parameters->get('end'));
 | 
			
		||||
        $admin                  = auth()->user();
 | 
			
		||||
        $enrichment             = new AccountEnrichment();
 | 
			
		||||
        $enrichment->setDate($date);
 | 
			
		||||
        $enrichment->setStart($start);
 | 
			
		||||
        $enrichment->setEnd($end);
 | 
			
		||||
        $enrichment->setUser($admin);
 | 
			
		||||
        $account     = $enrichment->enrichSingle($account);
 | 
			
		||||
        $account                = $enrichment->enrichSingle($account);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /** @var AccountTransformer $transformer */
 | 
			
		||||
        $transformer = app(AccountTransformer::class);
 | 
			
		||||
        $transformer->setParameters($this->parameters);
 | 
			
		||||
        $resource    = new Item($account, $transformer, self::RESOURCE_KEY);
 | 
			
		||||
        $transformer            = app(AccountTransformer::class);
 | 
			
		||||
        $resource               = new Item($account, $transformer, self::RESOURCE_KEY);
 | 
			
		||||
 | 
			
		||||
        return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -119,8 +119,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/attachments/listAttachment
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\AvailableBudget;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\AvailableBudget;
 | 
			
		||||
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\AvailableBudgetEnrichment;
 | 
			
		||||
@@ -67,8 +66,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/available_budgets/getAvailableBudget
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Bill;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Bill;
 | 
			
		||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
 | 
			
		||||
@@ -71,8 +70,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listAttachmentByBill
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function attachments(Bill $bill): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -102,8 +99,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listRuleByBill
 | 
			
		||||
     *
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function rules(Bill $bill): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -135,8 +130,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listTransactionByBill
 | 
			
		||||
     *
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, Bill $bill): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Bill;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Bill;
 | 
			
		||||
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\SubscriptionEnrichment;
 | 
			
		||||
@@ -65,8 +64,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/bills/listBill
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,6 @@ namespace FireflyIII\Api\V1\Controllers\Models\Budget;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Enums\TransactionTypeEnum;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Budget;
 | 
			
		||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
 | 
			
		||||
@@ -73,8 +72,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listAttachmentByBudget
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function attachments(Budget $budget): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -104,8 +101,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listBudgetLimitByBudget
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function budgetLimits(Budget $budget): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -140,8 +135,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listTransactionByBudget
 | 
			
		||||
     *
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, Budget $budget): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -202,8 +195,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listTransactionWithoutBudget
 | 
			
		||||
     *
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function withoutBudget(Request $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Budget;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Budget;
 | 
			
		||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
 | 
			
		||||
@@ -69,8 +68,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listBudget
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\BudgetLimit;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Budget;
 | 
			
		||||
use FireflyIII\Models\BudgetLimit;
 | 
			
		||||
@@ -49,8 +48,6 @@ class ListController extends Controller
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/listTransactionByBudgetLimit
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, Budget $budget, BudgetLimit $budgetLimit): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Category;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Category;
 | 
			
		||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
 | 
			
		||||
@@ -68,8 +67,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/listAttachmentByCategory
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function attachments(Category $category): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -99,8 +96,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/listTransactionByCategory
 | 
			
		||||
     *
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, Category $category): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Category;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Category;
 | 
			
		||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\CategoryEnrichment;
 | 
			
		||||
@@ -65,8 +64,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/categories/listCategory
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -72,7 +72,7 @@ class DestroyController extends Controller
 | 
			
		||||
    public function destroySingleByDate(TransactionCurrency $from, TransactionCurrency $to, Carbon $date): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        $exchangeRate = $this->repository->getSpecificRateOnDate($from, $to, $date);
 | 
			
		||||
        if (null !== $exchangeRate) {
 | 
			
		||||
        if ($exchangeRate instanceof CurrencyExchangeRate) {
 | 
			
		||||
            $this->repository->deleteRate($exchangeRate);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,7 @@ class ShowController extends Controller
 | 
			
		||||
        $transformer->setParameters($this->parameters);
 | 
			
		||||
 | 
			
		||||
        $exchangeRate = $this->repository->getSpecificRateOnDate($from, $to, $date);
 | 
			
		||||
        if (null === $exchangeRate) {
 | 
			
		||||
        if (!$exchangeRate instanceof CurrencyExchangeRate) {
 | 
			
		||||
            throw new NotFoundHttpException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ class UpdateController extends Controller
 | 
			
		||||
    public function updateByDate(UpdateRequest $request, TransactionCurrency $from, TransactionCurrency $to, Carbon $date): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        $exchangeRate = $this->repository->getSpecificRateOnDate($from, $to, $date);
 | 
			
		||||
        if (null === $exchangeRate) {
 | 
			
		||||
        if (!$exchangeRate instanceof CurrencyExchangeRate) {
 | 
			
		||||
            throw new NotFoundHttpException();
 | 
			
		||||
        }
 | 
			
		||||
        $date         = $request->getDate();
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\ObjectGroup;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\ObjectGroup;
 | 
			
		||||
use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\PiggyBankEnrichment;
 | 
			
		||||
@@ -68,8 +67,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/listBillByObjectGroup
 | 
			
		||||
     *
 | 
			
		||||
     * List all bills in this object group
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function bills(ObjectGroup $objectGroup): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -109,8 +106,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/object_groups/listPiggyBankByObjectGroup
 | 
			
		||||
     *
 | 
			
		||||
     * List all piggies under the object group.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function piggyBanks(ObjectGroup $objectGroup): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\PiggyBank;
 | 
			
		||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment;
 | 
			
		||||
@@ -67,8 +66,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/listAccountByPiggyBank
 | 
			
		||||
     *
 | 
			
		||||
     * List single resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function accounts(PiggyBank $piggyBank): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -105,8 +102,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/listAttachmentByPiggyBank
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function attachments(PiggyBank $piggyBank): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -136,8 +131,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/listEventByPiggyBank
 | 
			
		||||
     *
 | 
			
		||||
     * List single resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\PiggyBank;
 | 
			
		||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\PiggyBankEnrichment;
 | 
			
		||||
@@ -65,8 +64,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/piggy_banks/listPiggyBank
 | 
			
		||||
     *
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -68,10 +68,6 @@ class UpdateController extends Controller
 | 
			
		||||
        $data        = $request->getAll();
 | 
			
		||||
        $piggyBank   = $this->repository->update($piggyBank, $data);
 | 
			
		||||
 | 
			
		||||
        if (array_key_exists('current_amount', $data) && '' !== $data['current_amount']) {
 | 
			
		||||
            $this->repository->setCurrentAmount($piggyBank, $data['current_amount']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // enrich
 | 
			
		||||
        /** @var User $admin */
 | 
			
		||||
        $admin       = auth()->user();
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Recurrence;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Recurrence;
 | 
			
		||||
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
 | 
			
		||||
@@ -68,8 +67,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/recurrences/listTransactionByRecurrence
 | 
			
		||||
     *
 | 
			
		||||
     * Show transactions for this recurrence.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, Recurrence $recurrence): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Recurrence;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Recurrence;
 | 
			
		||||
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\RecurringEnrichment;
 | 
			
		||||
@@ -65,8 +64,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/recurrences/listRecurrence
 | 
			
		||||
     *
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -87,9 +87,7 @@ class TriggerController extends Controller
 | 
			
		||||
 | 
			
		||||
        // enrich groups and return them:
 | 
			
		||||
 | 
			
		||||
        if (0 === $groups->count()) {
 | 
			
		||||
            $paginator = new LengthAwarePaginator(new Collection(), 0, 1);
 | 
			
		||||
        }
 | 
			
		||||
        $paginator                  = new LengthAwarePaginator(new Collection(), 0, 1);
 | 
			
		||||
        if ($groups->count() > 0) {
 | 
			
		||||
            /** @var User $admin */
 | 
			
		||||
            $admin     = auth()->user();
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Rule;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Rule;
 | 
			
		||||
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
 | 
			
		||||
use FireflyIII\Transformers\RuleTransformer;
 | 
			
		||||
@@ -67,8 +66,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rules/listRule
 | 
			
		||||
     *
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\RuleGroup;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\RuleGroup;
 | 
			
		||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
 | 
			
		||||
use FireflyIII\Transformers\RuleTransformer;
 | 
			
		||||
@@ -64,8 +63,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/listRuleByGroup
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function rules(RuleGroup $group): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\RuleGroup;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\RuleGroup;
 | 
			
		||||
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
 | 
			
		||||
use FireflyIII\Transformers\RuleGroupTransformer;
 | 
			
		||||
@@ -66,8 +65,6 @@ class ShowController extends Controller
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/rule_groups/listRuleGroup
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Tag;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Tag;
 | 
			
		||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
 | 
			
		||||
@@ -71,8 +70,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/listAttachmentByTag
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function attachments(Tag $tag): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -102,8 +99,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/listTransactionByTag
 | 
			
		||||
     *
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, Tag $tag): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Tag;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Tag;
 | 
			
		||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
 | 
			
		||||
use FireflyIII\Transformers\TagTransformer;
 | 
			
		||||
@@ -67,8 +66,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/tags/listTag
 | 
			
		||||
     *
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Transaction;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\TransactionGroup;
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use FireflyIII\Repositories\Journal\JournalAPIRepositoryInterface;
 | 
			
		||||
@@ -69,8 +68,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/listAttachmentByTransaction
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function attachments(TransactionGroup $transactionGroup): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -101,8 +98,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/listEventByTransaction
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function piggyBankEvents(TransactionGroup $transactionGroup): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -144,8 +139,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/listLinksByJournal
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactionLinks(TransactionJournal $transactionJournal): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\Transaction;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\TransactionGroup;
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
@@ -52,8 +51,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/transactions/listTransaction
 | 
			
		||||
     *
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(Request $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\Validator;
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\TransactionCurrency;
 | 
			
		||||
@@ -32,6 +31,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Http\JsonResponse;
 | 
			
		||||
use Illuminate\Support\Facades\Validator;
 | 
			
		||||
use Illuminate\Validation\ValidationException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\Account;
 | 
			
		||||
use FireflyIII\Models\Bill;
 | 
			
		||||
@@ -71,8 +70,6 @@ class ListController extends Controller
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listAccountByCurrency
 | 
			
		||||
     * Display a list of accounts.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function accounts(Request $request, TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -103,11 +100,18 @@ class ListController extends Controller
 | 
			
		||||
        $count             = $collection->count();
 | 
			
		||||
        $accounts          = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
 | 
			
		||||
 | 
			
		||||
        // #11007 go to the end of the previous day.
 | 
			
		||||
        $this->parameters->set('start', $this->parameters->get('start')?->subSecond());
 | 
			
		||||
        // #11018 also end of the day.
 | 
			
		||||
        $this->parameters->set('end', $this->parameters->get('end')?->endOfDay());
 | 
			
		||||
 | 
			
		||||
        // enrich
 | 
			
		||||
        /** @var User $admin */
 | 
			
		||||
        $admin             = auth()->user();
 | 
			
		||||
        $enrichment        = new AccountEnrichment();
 | 
			
		||||
        $enrichment->setDate($this->parameters->get('date'));
 | 
			
		||||
        $enrichment->setStart($this->parameters->get('start'));
 | 
			
		||||
        $enrichment->setEnd($this->parameters->get('end'));
 | 
			
		||||
        $enrichment->setUser($admin);
 | 
			
		||||
        $accounts          = $enrichment->enrich($accounts);
 | 
			
		||||
 | 
			
		||||
@@ -129,8 +133,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listAvailableBudgetByCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function availableBudgets(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -164,8 +166,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listBillByCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * List all bills
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function bills(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -211,8 +211,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listBudgetLimitByCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * List all budget limits
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function budgetLimits(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -249,8 +247,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listRecurrenceByCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * List all recurring transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function recurrences(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -302,8 +298,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listRuleByCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function rules(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -347,8 +341,6 @@ class ListController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listTransactionByCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * Show all transactions.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\TransactionCurrency;
 | 
			
		||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Http\Api\AccountFilter;
 | 
			
		||||
@@ -69,8 +68,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/listCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -99,8 +96,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/getCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * Show a currency.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function show(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -123,8 +118,6 @@ class ShowController extends Controller
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Show a currency.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function showPrimary(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,6 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionCurrency;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\StoreRequest;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Http\Api\AccountFilter;
 | 
			
		||||
use FireflyIII\Support\Http\Api\TransactionFilter;
 | 
			
		||||
@@ -66,8 +65,6 @@ class StoreController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/storeCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * Store new currency.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function store(StoreRequest $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -98,9 +98,6 @@ class UpdateController extends Controller
 | 
			
		||||
        return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function makePrimary(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        /** @var User $user */
 | 
			
		||||
@@ -127,8 +124,6 @@ class UpdateController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/currencies/enableCurrency
 | 
			
		||||
     *
 | 
			
		||||
     * Enable a currency.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function enable(TransactionCurrency $currency): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionLink;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\TransactionJournalLink;
 | 
			
		||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
 | 
			
		||||
use FireflyIII\Transformers\TransactionLinkTransformer;
 | 
			
		||||
@@ -69,8 +68,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/listTransactionLink
 | 
			
		||||
     *
 | 
			
		||||
     * List all transaction links there are.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(Request $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,10 +24,10 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionLink;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Models\TransactionLink\StoreRequest;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Http\Api\TransactionFilter;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionLinkType;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
use FireflyIII\Models\LinkType;
 | 
			
		||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
 | 
			
		||||
@@ -68,8 +67,6 @@ class ListController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/listTransactionByLinkType
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function transactions(Request $request, LinkType $linkType): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionLinkType;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\LinkType;
 | 
			
		||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Http\Api\TransactionFilter;
 | 
			
		||||
@@ -67,8 +66,6 @@ class ShowController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/links/listLinkType
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionLinkType;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\Validator;
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Models\TransactionLinkType\StoreRequest;
 | 
			
		||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
 | 
			
		||||
@@ -33,6 +32,7 @@ use FireflyIII\Support\Http\Api\TransactionFilter;
 | 
			
		||||
use FireflyIII\Transformers\LinkTypeTransformer;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Http\JsonResponse;
 | 
			
		||||
use Illuminate\Support\Facades\Validator;
 | 
			
		||||
use Illuminate\Validation\ValidationException;
 | 
			
		||||
use League\Fractal\Resource\Item;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\TransactionLinkType;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Facades\Validator;
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Models\TransactionLinkType\UpdateRequest;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
@@ -35,6 +34,7 @@ use FireflyIII\Support\Http\Api\TransactionFilter;
 | 
			
		||||
use FireflyIII\Transformers\LinkTypeTransformer;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Http\JsonResponse;
 | 
			
		||||
use Illuminate\Support\Facades\Validator;
 | 
			
		||||
use Illuminate\Validation\ValidationException;
 | 
			
		||||
use League\Fractal\Resource\Item;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Models\UserGroup;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Data\DateRequest;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\PaginationRequest;
 | 
			
		||||
use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface;
 | 
			
		||||
use FireflyIII\Transformers\UserGroupTransformer;
 | 
			
		||||
use Illuminate\Http\JsonResponse;
 | 
			
		||||
@@ -52,17 +52,19 @@ class IndexController extends Controller
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function index(DateRequest $request): JsonResponse
 | 
			
		||||
    public function index(PaginationRequest $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        $administrations = $this->repository->get();
 | 
			
		||||
        $pageSize        = $this->parameters->get('limit');
 | 
			
		||||
        [
 | 
			
		||||
            'page'   => $page,
 | 
			
		||||
            'limit'  => $limit,
 | 
			
		||||
            'offset' => $offset,
 | 
			
		||||
        ]                = $request->attributes->all();
 | 
			
		||||
        $count           = $administrations->count();
 | 
			
		||||
        $administrations = $administrations->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
 | 
			
		||||
        $paginator       = new LengthAwarePaginator($administrations, $count, $pageSize, $this->parameters->get('page'));
 | 
			
		||||
        $administrations = $administrations->slice($offset, $limit);
 | 
			
		||||
        $paginator       = new LengthAwarePaginator($administrations, $count, $limit, $page);
 | 
			
		||||
        $transformer     = new UserGroupTransformer();
 | 
			
		||||
 | 
			
		||||
        $transformer->setParameters($this->parameters); // give params to transformer
 | 
			
		||||
 | 
			
		||||
        return response()
 | 
			
		||||
            ->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer))
 | 
			
		||||
            ->header('Content-Type', self::CONTENT_TYPE)
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ declare(strict_types=1);
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Search;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment;
 | 
			
		||||
use FireflyIII\Support\Search\SearchInterface;
 | 
			
		||||
use FireflyIII\Transformers\TransactionGroupTransformer;
 | 
			
		||||
@@ -42,8 +41,6 @@ class TransactionController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/search/searchTransactions
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function search(Request $request, SearchInterface $searcher): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,10 +24,10 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Controllers\Summary;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use Exception;
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Data\DateRequest;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Summary\BasicRequest;
 | 
			
		||||
use FireflyIII\Enums\AccountTypeEnum;
 | 
			
		||||
use FireflyIII\Enums\TransactionTypeEnum;
 | 
			
		||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
 | 
			
		||||
@@ -88,34 +88,25 @@ class BasicController extends Controller
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/summary/getBasicSummary
 | 
			
		||||
     *
 | 
			
		||||
     * @throws Exception
 | 
			
		||||
     */
 | 
			
		||||
    public function basic(DateRequest $request): JsonResponse
 | 
			
		||||
    public function basic(BasicRequest $request): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
        // parameters for boxes:
 | 
			
		||||
        $dates        = $request->getAll();
 | 
			
		||||
        $start        = $dates['start'];
 | 
			
		||||
        $end          = $dates['end'];
 | 
			
		||||
        $code         = $request->get('currency_code');
 | 
			
		||||
        ['start' => $start, 'end' => $end, 'code' => $code] = $request->attributes->all();
 | 
			
		||||
        // balance information:
 | 
			
		||||
        $balanceData  = $this->getBalanceInformation($start, $end);
 | 
			
		||||
        $billData     = $this->getSubscriptionInformation($start, $end);
 | 
			
		||||
        $spentData    = $this->getLeftToSpendInfo($start, $end);
 | 
			
		||||
        $netWorthData = $this->getNetWorthInfo($end);
 | 
			
		||||
        $balanceData                                        = $this->getBalanceInformation($start, $end);
 | 
			
		||||
        $billData                                           = $this->getSubscriptionInformation($start, $end);
 | 
			
		||||
        $spentData                                          = $this->getLeftToSpendInfo($start, $end);
 | 
			
		||||
        $netWorthData                                       = $this->getNetWorthInfo($end);
 | 
			
		||||
        //                        $balanceData  = [];
 | 
			
		||||
        //                        $billData     = [];
 | 
			
		||||
        //                $spentData    = [];
 | 
			
		||||
        //                        $netWorthData = [];
 | 
			
		||||
        $total        = array_merge($balanceData, $billData, $spentData, $netWorthData);
 | 
			
		||||
        $total                                              = array_merge($balanceData, $billData, $spentData, $netWorthData);
 | 
			
		||||
 | 
			
		||||
        // give new keys
 | 
			
		||||
        $return       = [];
 | 
			
		||||
        $return                                             = [];
 | 
			
		||||
        foreach ($total as $entry) {
 | 
			
		||||
            if (null === $code || ($code === $entry['currency_code'])) {
 | 
			
		||||
            if ('' === $code || ($code === $entry['currency_code'])) {
 | 
			
		||||
                $return[$entry['key']] = $entry;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -589,8 +580,6 @@ class BasicController extends Controller
 | 
			
		||||
 | 
			
		||||
    private function getNetWorthInfo(Carbon $end): array
 | 
			
		||||
    {
 | 
			
		||||
        $end->endOfDay();
 | 
			
		||||
 | 
			
		||||
        /** @var User $user */
 | 
			
		||||
        $user           = auth()->user();
 | 
			
		||||
        Log::debug(sprintf('getNetWorthInfo up until "%s".', $end->format('Y-m-d H:i:s')));
 | 
			
		||||
 
 | 
			
		||||
@@ -90,8 +90,6 @@ class UserController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/users/listUser
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the resource.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -49,8 +49,6 @@ class PreferencesController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/preferences/listPreference
 | 
			
		||||
     *
 | 
			
		||||
     * List all of them.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -62,8 +62,6 @@ class MessageController extends Controller
 | 
			
		||||
    /**
 | 
			
		||||
     * This endpoint is documented at:
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/getWebhookMessages
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(Webhook $webhook): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,6 @@ namespace FireflyIII\Api\V1\Controllers\Webhook;
 | 
			
		||||
use FireflyIII\Api\V1\Controllers\Controller;
 | 
			
		||||
use FireflyIII\Enums\WebhookTrigger;
 | 
			
		||||
use FireflyIII\Events\RequestedSendWebhookMessages;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Generator\Webhook\MessageGeneratorInterface;
 | 
			
		||||
use FireflyIII\Models\TransactionGroup;
 | 
			
		||||
use FireflyIII\Models\Webhook;
 | 
			
		||||
@@ -70,8 +69,6 @@ class ShowController extends Controller
 | 
			
		||||
     * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/webhooks/listWebhook
 | 
			
		||||
     *
 | 
			
		||||
     * Display a listing of the webhooks of the user.
 | 
			
		||||
     *
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     */
 | 
			
		||||
    public function index(): JsonResponse
 | 
			
		||||
    {
 | 
			
		||||
@@ -158,18 +155,23 @@ class ShowController extends Controller
 | 
			
		||||
        Log::debug(sprintf('Now in triggerTransaction(%d, %d)', $webhook->id, $group->id));
 | 
			
		||||
        Log::channel('audit')->info(sprintf('User triggers webhook #%d on transaction group #%d.', $webhook->id, $group->id));
 | 
			
		||||
 | 
			
		||||
        /** @var MessageGeneratorInterface $engine */
 | 
			
		||||
        $engine = app(MessageGeneratorInterface::class);
 | 
			
		||||
        $engine->setUser(auth()->user());
 | 
			
		||||
 | 
			
		||||
        // tell the generator which trigger it should look for
 | 
			
		||||
        $engine->setTrigger(WebhookTrigger::tryFrom($webhook->trigger));
 | 
			
		||||
        // tell the generator which objects to process
 | 
			
		||||
        $engine->setObjects(new Collection()->push($group));
 | 
			
		||||
        // set the webhook to trigger
 | 
			
		||||
        $engine->setWebhooks(new Collection()->push($webhook));
 | 
			
		||||
        // tell the generator to generate the messages
 | 
			
		||||
        $engine->generateMessages();
 | 
			
		||||
        /** @var \FireflyIII\Models\WebhookTrigger $trigger */
 | 
			
		||||
        foreach ($webhook->webhookTriggers as $trigger) {
 | 
			
		||||
            /** @var MessageGeneratorInterface $engine */
 | 
			
		||||
            $engine = app(MessageGeneratorInterface::class);
 | 
			
		||||
            $engine->setUser(auth()->user());
 | 
			
		||||
 | 
			
		||||
            // tell the generator which trigger it should look for
 | 
			
		||||
            $engine->setTrigger(WebhookTrigger::tryFrom((int)$trigger->key));
 | 
			
		||||
            // tell the generator which objects to process
 | 
			
		||||
            $engine->setObjects(new Collection()->push($group));
 | 
			
		||||
            // set the webhook to trigger
 | 
			
		||||
            $engine->setWebhooks(new Collection()->push($webhook));
 | 
			
		||||
            // tell the generator to generate the messages
 | 
			
		||||
            $engine->generateMessages();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // trigger event to send them:
 | 
			
		||||
        Log::debug('send event RequestedSendWebhookMessages from ShowController::triggerTransaction()');
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										97
									
								
								app/Api/V1/Requests/AggregateFormRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								app/Api/V1/Requests/AggregateFormRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2025 https://github.com/ctrl-f5
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of Firefly III (https://github.com/firefly-iii).
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as
 | 
			
		||||
 * published by the Free Software Foundation, either version 3 of the
 | 
			
		||||
 * License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use RuntimeException;
 | 
			
		||||
 | 
			
		||||
abstract class AggregateFormRequest extends ApiRequest
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var ApiRequest[]
 | 
			
		||||
     */
 | 
			
		||||
    protected array $requests = [];
 | 
			
		||||
 | 
			
		||||
    /** @return class-string[] */
 | 
			
		||||
    abstract protected function getRequests(): array;
 | 
			
		||||
 | 
			
		||||
    public function initialize(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], $content = null): void
 | 
			
		||||
    {
 | 
			
		||||
        parent::initialize($query, $request, $attributes, $cookies, $files, $server, $content);
 | 
			
		||||
 | 
			
		||||
        // instantiate all subrequests and share current requests' bags with them
 | 
			
		||||
        Log::debug('Initializing AggregateFormRequest.');
 | 
			
		||||
        foreach ($this->getRequests() as $config) {
 | 
			
		||||
            $requestClass         = is_array($config) ? array_shift($config) : $config;
 | 
			
		||||
 | 
			
		||||
            if (!is_a($requestClass, Request::class, true)) {
 | 
			
		||||
                throw new RuntimeException('getRequests() must return class-strings of subclasses of Request');
 | 
			
		||||
            }
 | 
			
		||||
            Log::debug(sprintf('Initializing subrequest %s', $requestClass));
 | 
			
		||||
 | 
			
		||||
            $instance             = $this->requests[] = new $requestClass();
 | 
			
		||||
            $instance->request    = $this->request;
 | 
			
		||||
            $instance->query      = $this->query;
 | 
			
		||||
            $instance->attributes = $this->attributes;
 | 
			
		||||
            $instance->cookies    = $this->cookies;
 | 
			
		||||
            $instance->files      = $this->files;
 | 
			
		||||
            $instance->server     = $this->server;
 | 
			
		||||
            $instance->headers    = $this->headers;
 | 
			
		||||
 | 
			
		||||
            if ($instance instanceof ApiRequest) {
 | 
			
		||||
                $instance->handleConfig(is_array($config) ? $config : []);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Log::debug('Done initializing AggregateFormRequest.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        // check all subrequests for rules and combine them
 | 
			
		||||
        return array_reduce(
 | 
			
		||||
            $this->requests,
 | 
			
		||||
            static fn (array $rules, FormRequest $request) => $rules
 | 
			
		||||
                + (
 | 
			
		||||
                    method_exists($request, 'rules')
 | 
			
		||||
                    ? $request->rules()
 | 
			
		||||
                    : []
 | 
			
		||||
                ),
 | 
			
		||||
            [],
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        // register all subrequests' validators
 | 
			
		||||
        foreach ($this->requests as $request) {
 | 
			
		||||
            if (method_exists($request, 'withValidator')) {
 | 
			
		||||
                Log::debug(sprintf('Process withValidator from class %s', get_class($request)));
 | 
			
		||||
                $request->withValidator($validator);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										43
									
								
								app/Api/V1/Requests/ApiRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								app/Api/V1/Requests/ApiRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2025 https://github.com/ctrl-f5
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of Firefly III (https://github.com/firefly-iii).
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as
 | 
			
		||||
 * published by the Free Software Foundation, either version 3 of the
 | 
			
		||||
 * License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
 | 
			
		||||
class ApiRequest extends FormRequest
 | 
			
		||||
{
 | 
			
		||||
    use ChecksLogin;
 | 
			
		||||
    use ConvertsDataTypes;
 | 
			
		||||
 | 
			
		||||
    protected string $required = '';
 | 
			
		||||
 | 
			
		||||
    public function handleConfig(array $config): void
 | 
			
		||||
    {
 | 
			
		||||
        if (in_array('required', $config, true)) {
 | 
			
		||||
            $this->required = 'required';
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -48,10 +48,12 @@ class AutocompleteRequest extends FormRequest
 | 
			
		||||
        // remove 'initial balance' from allowed types. its internal
 | 
			
		||||
        $array = array_diff($array, [AccountTypeEnum::INITIAL_BALANCE->value, AccountTypeEnum::RECONCILIATION->value]);
 | 
			
		||||
 | 
			
		||||
        $date  = $this->getCarbonDate('date') ?? today(config('app.timezone'));
 | 
			
		||||
 | 
			
		||||
        return [
 | 
			
		||||
            'types' => $array,
 | 
			
		||||
            'query' => $this->convertString('query'),
 | 
			
		||||
            'date'  => $this->getCarbonDate('date'),
 | 
			
		||||
            'date'  => $date->endOfDay(),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,13 +24,13 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Chart;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Enums\UserRoleEnum;
 | 
			
		||||
use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class ChartRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,12 +24,12 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Data\Bulk;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class MoveTransactionsRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Data\Bulk;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use JsonException;
 | 
			
		||||
use FireflyIII\Enums\ClauseType;
 | 
			
		||||
use FireflyIII\Rules\IsValidBulkClause;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
@@ -33,6 +31,8 @@ use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\Validation\Api\Data\Bulk\ValidatesBulkTransactionQuery;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use JsonException;
 | 
			
		||||
 | 
			
		||||
use function Safe\json_decode;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,73 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * DateRequest.php
 | 
			
		||||
 * Copyright (c) 2021 james@firefly-iii.org
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of Firefly III (https://github.com/firefly-iii).
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as
 | 
			
		||||
 * published by the Free Software Foundation, either version 3 of the
 | 
			
		||||
 * License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Data;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Exceptions\ValidationException;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Request class for end points that require date parameters.
 | 
			
		||||
 *
 | 
			
		||||
 * Class DateRequest
 | 
			
		||||
 */
 | 
			
		||||
class DateRequest extends FormRequest
 | 
			
		||||
{
 | 
			
		||||
    use ChecksLogin;
 | 
			
		||||
    use ConvertsDataTypes;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get all data from the request.
 | 
			
		||||
     */
 | 
			
		||||
    public function getAll(): array
 | 
			
		||||
    {
 | 
			
		||||
        $start = $this->getCarbonDate('start');
 | 
			
		||||
        $end   = $this->getCarbonDate('end');
 | 
			
		||||
        $start->startOfDay();
 | 
			
		||||
        $end->endOfDay();
 | 
			
		||||
        if ($start->diffInYears($end, true) > 5) {
 | 
			
		||||
            throw new ValidationException('Date range out of range.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return [
 | 
			
		||||
            'start' => $start,
 | 
			
		||||
            'end'   => $end,
 | 
			
		||||
            'date'  => $this->getCarbonDate('date'),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The rules that the incoming request must be matched against.
 | 
			
		||||
     */
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'date'  => 'date|after:1970-01-02|before:2038-01-17',
 | 
			
		||||
            'start' => 'date|after:1970-01-02|before:2038-01-17|before:end|required_with:end',
 | 
			
		||||
            'end'   => 'date|after:1970-01-02|before:2038-01-17|after:start|required_with:start',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								app/Api/V1/Requests/DateRangeRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								app/Api/V1/Requests/DateRangeRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2025 https://github.com/ctrl-f5
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of Firefly III (https://github.com/firefly-iii).
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as
 | 
			
		||||
 * published by the Free Software Foundation, either version 3 of the
 | 
			
		||||
 * License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
class DateRangeRequest extends ApiRequest
 | 
			
		||||
{
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'start' => sprintf('date|after:1970-01-02|before:2038-01-17|before:end|required_with:end|%s', $this->required),
 | 
			
		||||
            'end'   => sprintf('date|after:1970-01-02|before:2038-01-17|after:start|required_with:start|%s', $this->required),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        $validator->after(
 | 
			
		||||
            function (Validator $validator): void {
 | 
			
		||||
                if (!$validator->valid()) {
 | 
			
		||||
                    // set null values
 | 
			
		||||
                    $this->attributes->set('start', null);
 | 
			
		||||
                    $this->attributes->set('end', null);
 | 
			
		||||
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                $start = $this->getCarbonDate('start')?->startOfDay();
 | 
			
		||||
                $end   = $this->getCarbonDate('end')?->endOfDay();
 | 
			
		||||
 | 
			
		||||
                $this->attributes->set('start', $start);
 | 
			
		||||
                $this->attributes->set('end', $end);
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								app/Api/V1/Requests/DateRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								app/Api/V1/Requests/DateRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2025 https://github.com/ctrl-f5
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of Firefly III (https://github.com/firefly-iii).
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as
 | 
			
		||||
 * published by the Free Software Foundation, either version 3 of the
 | 
			
		||||
 * License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests;
 | 
			
		||||
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
class DateRequest extends ApiRequest
 | 
			
		||||
{
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'date'  => 'date|after:1970-01-02|before:2038-01-17|'.$this->required,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        $validator->after(
 | 
			
		||||
            function (Validator $validator): void {
 | 
			
		||||
                $this->attributes->set('date', null);
 | 
			
		||||
                if (!$validator->valid()) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                $date  = $this->getCarbonDate('date')?->endOfDay();
 | 
			
		||||
 | 
			
		||||
                // if we also have a range, date must be in that range
 | 
			
		||||
                $start = $this->attributes->get('start');
 | 
			
		||||
                $end   = $this->attributes->get('end');
 | 
			
		||||
                if ($date instanceof Carbon && $start instanceof Carbon && $end instanceof Carbon && !$date->between($start, $end)) {
 | 
			
		||||
                    $validator->errors()->add('date', (string)trans('validation.between_date'));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $this->attributes->set('date', $date);
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								app/Api/V1/Requests/Models/Account/AccountTypeApiRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								app/Api/V1/Requests/Models/Account/AccountTypeApiRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
/*
 | 
			
		||||
 * AccountTypeApiRequest.php
 | 
			
		||||
 * Copyright (c) 2025 https://github.com/ctrl-f5
 | 
			
		||||
 *
 | 
			
		||||
 * 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\Api\V1\Requests\Models\Account;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Requests\ApiRequest;
 | 
			
		||||
use FireflyIII\Support\Http\Api\AccountFilter;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
class AccountTypeApiRequest extends ApiRequest
 | 
			
		||||
{
 | 
			
		||||
    use AccountFilter;
 | 
			
		||||
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'type'  => sprintf('in:%s', implode(',', array_keys($this->types))),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        $validator->after(
 | 
			
		||||
            function (Validator $validator): void {
 | 
			
		||||
                if (!$validator->valid()) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $type = $this->convertString('type', 'all');
 | 
			
		||||
                $this->attributes->add([
 | 
			
		||||
                    'type'  => $type,
 | 
			
		||||
                    'types' => $this->mapAccountTypes($type),
 | 
			
		||||
                ]);
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -23,77 +23,21 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Account;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\AggregateFormRequest;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\DateRangeRequest;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\DateRequest;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\PaginationRequest;
 | 
			
		||||
use FireflyIII\Models\Account;
 | 
			
		||||
use FireflyIII\Rules\IsValidSortInstruction;
 | 
			
		||||
use FireflyIII\Support\Facades\Preferences;
 | 
			
		||||
use FireflyIII\Support\Http\Api\AccountFilter;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
 | 
			
		||||
class ShowRequest extends FormRequest
 | 
			
		||||
class ShowRequest extends AggregateFormRequest
 | 
			
		||||
{
 | 
			
		||||
    use AccountFilter;
 | 
			
		||||
    use ConvertsDataTypes;
 | 
			
		||||
 | 
			
		||||
    public function getParameters(): array
 | 
			
		||||
    protected function getRequests(): array
 | 
			
		||||
    {
 | 
			
		||||
        $limit = $this->convertInteger('limit');
 | 
			
		||||
        if (0 === $limit) {
 | 
			
		||||
            // get default for user:
 | 
			
		||||
            /** @var User $user */
 | 
			
		||||
            $user  = auth()->user();
 | 
			
		||||
            $limit = (int)Preferences::getForUser($user, 'listPageSize', 50)->data;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $page  = $this->convertInteger('page');
 | 
			
		||||
        $page  = min(max(1, $page), 2 ** 16);
 | 
			
		||||
 | 
			
		||||
        return [
 | 
			
		||||
            'type'  => $this->convertString('type', 'all'),
 | 
			
		||||
            'limit' => $limit,
 | 
			
		||||
            'sort'  => $this->convertSortParameters('sort', Account::class),
 | 
			
		||||
            'page'  => $page,
 | 
			
		||||
            [PaginationRequest::class, 'sort_class' => Account::class],
 | 
			
		||||
            DateRangeRequest::class,
 | 
			
		||||
            DateRequest::class,
 | 
			
		||||
            AccountTypeApiRequest::class,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        $keys = implode(',', array_keys($this->types));
 | 
			
		||||
 | 
			
		||||
        return [
 | 
			
		||||
            'date'  => 'date',
 | 
			
		||||
            'start' => 'date|present_with:end|before_or_equal:end|before:2038-01-17|after:1970-01-02',
 | 
			
		||||
            'end'   => 'date|present_with:start|after_or_equal:start|before:2038-01-17|after:1970-01-02',
 | 
			
		||||
            'sort'  => ['nullable', new IsValidSortInstruction(Account::class)],
 | 
			
		||||
            'type'  => sprintf('in:%s', $keys),
 | 
			
		||||
            'limit' => 'numeric|min:1|max:131337',
 | 
			
		||||
            'page'  => 'numeric|min:1|max:131337',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        $validator->after(
 | 
			
		||||
            function (Validator $validator): void {
 | 
			
		||||
                if (count($validator->failed()) > 0) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                $data = $validator->getData();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                if (array_key_exists('date', $data) && array_key_exists('start', $data) && array_key_exists('end', $data)) {
 | 
			
		||||
                    // assume valid dates, before we got here.
 | 
			
		||||
                    $start = Carbon::parse($data['start'], config('app.timezone'))->startOfDay();
 | 
			
		||||
                    $end   = Carbon::parse($data['end'], config('app.timezone'))->endOfDay();
 | 
			
		||||
                    $date  = Carbon::parse($data['date'], config('app.timezone'));
 | 
			
		||||
                    if (!$date->between($start, $end)) {
 | 
			
		||||
                        $validator->errors()->add('date', (string)trans('validation.between_date'));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Account;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Models\Account;
 | 
			
		||||
use FireflyIII\Models\Location;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
@@ -36,6 +35,7 @@ use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,13 +24,13 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\AvailableBudget;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use FireflyIII\Rules\IsValidPositiveAmount;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class Request
 | 
			
		||||
 
 | 
			
		||||
@@ -24,15 +24,15 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Bill;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use ValueError;
 | 
			
		||||
use TypeError;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidPositiveAmount;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use TypeError;
 | 
			
		||||
use ValueError;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StoreRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Bill;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Models\Bill;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidPositiveAmount;
 | 
			
		||||
@@ -32,6 +31,7 @@ use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Budget;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidPositiveAmount;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
@@ -32,6 +31,7 @@ use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StoreRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Budget;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Models\Budget;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidPositiveAmount;
 | 
			
		||||
@@ -33,6 +32,7 @@ use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,14 +24,14 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\BudgetLimit;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidPositiveAmount;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,8 @@ use Carbon\Carbon;
 | 
			
		||||
use Carbon\Exceptions\InvalidFormatException;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
class StoreByCurrenciesRequest extends FormRequest
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -24,13 +24,13 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\TransactionCurrency;
 | 
			
		||||
use FireflyIII\Support\Facades\Amount;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
class StoreByDateRequest extends FormRequest
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -24,15 +24,15 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\PiggyBank;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Support\Facades\Amount;
 | 
			
		||||
use FireflyIII\Models\TransactionCurrency;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
use FireflyIII\Rules\IsValidZeroOrMoreAmount;
 | 
			
		||||
use FireflyIII\Support\Facades\Amount;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StoreRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Recurrence;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Rules\BelongsUser;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidPositiveAmount;
 | 
			
		||||
@@ -36,6 +35,7 @@ use FireflyIII\Validation\RecurrenceValidation;
 | 
			
		||||
use FireflyIII\Validation\TransactionValidation;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StoreRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Recurrence;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Models\Recurrence;
 | 
			
		||||
use FireflyIII\Rules\BelongsUser;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
@@ -37,6 +36,7 @@ use FireflyIII\Validation\RecurrenceValidation;
 | 
			
		||||
use FireflyIII\Validation\TransactionValidation;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Rule;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidActionExpression;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
@@ -32,6 +31,7 @@ use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\Support\Request\GetRuleConfiguration;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StoreRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Rule;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Models\Rule;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Rules\IsValidActionExpression;
 | 
			
		||||
@@ -33,6 +32,7 @@ use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\Support\Request\GetRuleConfiguration;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Transaction;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Models\Location;
 | 
			
		||||
use FireflyIII\Rules\BelongsUser;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
@@ -40,6 +39,7 @@ use FireflyIII\Validation\GroupValidation;
 | 
			
		||||
use FireflyIII\Validation\TransactionValidation;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StoreRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\Transaction;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\TransactionGroup;
 | 
			
		||||
use FireflyIII\Rules\BelongsUser;
 | 
			
		||||
@@ -38,6 +37,7 @@ use FireflyIII\Validation\GroupValidation;
 | 
			
		||||
use FireflyIII\Validation\TransactionValidation;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
@@ -64,7 +64,7 @@ class UpdateRequest extends FormRequest
 | 
			
		||||
     */
 | 
			
		||||
    public function getAll(): array
 | 
			
		||||
    {
 | 
			
		||||
        app('log')->debug(sprintf('Now in %s', __METHOD__));
 | 
			
		||||
        Log::debug(sprintf('Now in %s', __METHOD__));
 | 
			
		||||
        $this->integerFields  = ['order', 'currency_id', 'foreign_currency_id', 'transaction_journal_id', 'source_id', 'destination_id', 'budget_id', 'category_id', 'bill_id', 'recurrence_id'];
 | 
			
		||||
        $this->dateFields     = ['date', 'interest_date', 'book_date', 'process_date', 'due_date', 'payment_date', 'invoice_date'];
 | 
			
		||||
        $this->textareaFields = ['notes'];
 | 
			
		||||
@@ -97,7 +97,7 @@ class UpdateRequest extends FormRequest
 | 
			
		||||
     */
 | 
			
		||||
    private function getTransactionData(): array
 | 
			
		||||
    {
 | 
			
		||||
        app('log')->debug(sprintf('Now in %s', __METHOD__));
 | 
			
		||||
        Log::debug(sprintf('Now in %s', __METHOD__));
 | 
			
		||||
        $return       = [];
 | 
			
		||||
 | 
			
		||||
        /** @var null|array $transactions */
 | 
			
		||||
@@ -181,7 +181,7 @@ class UpdateRequest extends FormRequest
 | 
			
		||||
    private function getDateData(array $current, array $transaction): array
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($this->dateFields as $fieldName) {
 | 
			
		||||
            app('log')->debug(sprintf('Now at date field %s', $fieldName));
 | 
			
		||||
            Log::debug(sprintf('Now at date field %s', $fieldName));
 | 
			
		||||
            if (array_key_exists($fieldName, $transaction)) {
 | 
			
		||||
                Log::debug(sprintf('New value: "%s"', $transaction[$fieldName]));
 | 
			
		||||
                $current[$fieldName] = $this->dateFromValue((string) $transaction[$fieldName]);
 | 
			
		||||
@@ -247,7 +247,7 @@ class UpdateRequest extends FormRequest
 | 
			
		||||
     */
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        app('log')->debug(sprintf('Now in %s', __METHOD__));
 | 
			
		||||
        Log::debug(sprintf('Now in %s', __METHOD__));
 | 
			
		||||
        $validProtocols = config('firefly.valid_url_protocols');
 | 
			
		||||
 | 
			
		||||
        return [
 | 
			
		||||
@@ -330,7 +330,7 @@ class UpdateRequest extends FormRequest
 | 
			
		||||
     */
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        app('log')->debug('Now in withValidator');
 | 
			
		||||
        Log::debug('Now in withValidator');
 | 
			
		||||
 | 
			
		||||
        /** @var TransactionGroup $transactionGroup */
 | 
			
		||||
        $transactionGroup = $this->route()->parameter('transactionGroup');
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,50 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
/*
 | 
			
		||||
 * CurrencyCodeRequest.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\Api\V1\Requests\Models\TransactionCurrency;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Requests\ApiRequest;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
class CurrencyCodeRequest extends ApiRequest
 | 
			
		||||
{
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'code' => sprintf('exists:transaction_currencies,code|%s', $this->required),
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        $validator->after(
 | 
			
		||||
            function (Validator $validator): void {
 | 
			
		||||
                if (!$validator->valid()) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                $code = $this->convertString('code', '');
 | 
			
		||||
                $this->attributes->set('code', $code);
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\TransactionLink;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
@@ -32,6 +31,7 @@ use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StoreRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\Models\TransactionLink;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Models\TransactionJournalLink;
 | 
			
		||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
 | 
			
		||||
@@ -32,6 +31,7 @@ use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UpdateRequest
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										84
									
								
								app/Api/V1/Requests/PaginationRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								app/Api/V1/Requests/PaginationRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2025 https://github.com/ctrl-f5
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of Firefly III (https://github.com/firefly-iii).
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU Affero General Public License as
 | 
			
		||||
 * published by the Free Software Foundation, either version 3 of the
 | 
			
		||||
 * License, or (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU Affero General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU Affero General Public License
 | 
			
		||||
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Rules\IsValidSortInstruction;
 | 
			
		||||
use FireflyIII\Support\Facades\Preferences;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use RuntimeException;
 | 
			
		||||
 | 
			
		||||
class PaginationRequest extends ApiRequest
 | 
			
		||||
{
 | 
			
		||||
    private ?string $sortClass = null;
 | 
			
		||||
 | 
			
		||||
    public function handleConfig(array $config): void
 | 
			
		||||
    {
 | 
			
		||||
        parent::handleConfig($config);
 | 
			
		||||
 | 
			
		||||
        $this->sortClass = $config['sort_class'] ?? null;
 | 
			
		||||
 | 
			
		||||
        if (!$this->sortClass) {
 | 
			
		||||
            throw new RuntimeException('PaginationRequest requires a sort_class config');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function rules(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            'sort'  => ['nullable', new IsValidSortInstruction((string)$this->sortClass)],
 | 
			
		||||
            'limit' => 'numeric|min:1|max:131337',
 | 
			
		||||
            'page'  => 'numeric|min:1|max:131337',
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function withValidator(Validator $validator): void
 | 
			
		||||
    {
 | 
			
		||||
        $validator->after(
 | 
			
		||||
            function (Validator $validator): void {
 | 
			
		||||
                if (!$validator->valid()) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $limit  = $this->convertInteger('limit');
 | 
			
		||||
                if (0 === $limit) {
 | 
			
		||||
                    // get default for user:
 | 
			
		||||
                    /** @var User $user */
 | 
			
		||||
                    $user  = auth()->user();
 | 
			
		||||
                    $limit = (int)Preferences::getForUser($user, 'listPageSize', 50)->data;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $page   = $this->convertInteger('page');
 | 
			
		||||
                $page   = min(max(1, $page), 2 ** 16);
 | 
			
		||||
                $offset = ($page - 1) * $limit;
 | 
			
		||||
                $sort   = $this->sortClass ? $this->convertSortParameters('sort', $this->sortClass) : $this->get('sort');
 | 
			
		||||
 | 
			
		||||
                $this->attributes->set('limit', $limit);
 | 
			
		||||
                $this->attributes->set('sort', $sort);
 | 
			
		||||
                $this->attributes->set('page', $page);
 | 
			
		||||
                $this->attributes->set('offset', $offset);
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								app/Api/V1/Requests/Summary/BasicRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								app/Api/V1/Requests/Summary/BasicRequest.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
declare(strict_types=1);
 | 
			
		||||
/*
 | 
			
		||||
 * BasicRequest.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\Api\V1\Requests\Summary;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Api\V1\Requests\AggregateFormRequest;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\DateRangeRequest;
 | 
			
		||||
use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\CurrencyCodeRequest;
 | 
			
		||||
 | 
			
		||||
class BasicRequest extends AggregateFormRequest
 | 
			
		||||
{
 | 
			
		||||
    protected function getRequests(): array
 | 
			
		||||
    {
 | 
			
		||||
        return [
 | 
			
		||||
            [DateRangeRequest::class, 'required'],
 | 
			
		||||
            CurrencyCodeRequest::class,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -24,13 +24,13 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Api\V1\Requests\System;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
use FireflyIII\Rules\IsBoolean;
 | 
			
		||||
use FireflyIII\Support\Request\ChecksLogin;
 | 
			
		||||
use FireflyIII\Support\Request\ConvertsDataTypes;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Foundation\Http\FormRequest;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use Illuminate\Validation\Validator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class UserUpdateRequest
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,6 @@ namespace FireflyIII\Casts;
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
 | 
			
		||||
use Illuminate\Database\Eloquent\Model;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class SeparateTimezoneCaster
 | 
			
		||||
 
 | 
			
		||||
@@ -92,7 +92,6 @@ class ConvertsDatesToUTC extends Command
 | 
			
		||||
        $this->friendlyInfo(sprintf('Converting field "%s" of model "%s" to UTC.', $field, $shortModel));
 | 
			
		||||
        $items->each(
 | 
			
		||||
            function ($item) use ($field, $timezoneField): void {
 | 
			
		||||
                /** @var Carbon $date */
 | 
			
		||||
                $date                   = Carbon::parse($item->{$field}, $item->{$timezoneField}); // @phpstan-ignore-line
 | 
			
		||||
                $date->setTimezone('UTC');
 | 
			
		||||
                $item->{$field}         = $date->format('Y-m-d H:i:s'); // @phpstan-ignore-line
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
 | 
			
		||||
class CorrectsOpeningBalanceCurrencies extends Command
 | 
			
		||||
{
 | 
			
		||||
@@ -78,7 +79,7 @@ class CorrectsOpeningBalanceCurrencies extends Command
 | 
			
		||||
        $account = $this->getAccount($journal);
 | 
			
		||||
        if (!$account instanceof Account) {
 | 
			
		||||
            $message = sprintf('Transaction journal #%d has no valid account. Can\'t fix this line.', $journal->id);
 | 
			
		||||
            app('log')->warning($message);
 | 
			
		||||
            Log::warning($message);
 | 
			
		||||
            $this->friendlyError($message);
 | 
			
		||||
 | 
			
		||||
            return 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ use FireflyIII\Console\Commands\ShowsFriendlyMessages;
 | 
			
		||||
use FireflyIII\Enums\TransactionTypeEnum;
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
 | 
			
		||||
class CorrectsTransferBudgets extends Command
 | 
			
		||||
{
 | 
			
		||||
@@ -53,13 +54,13 @@ class CorrectsTransferBudgets extends Command
 | 
			
		||||
        foreach ($set as $entry) {
 | 
			
		||||
            $message = sprintf('Transaction journal #%d is a %s, so has no longer a budget.', $entry->id, $entry->transactionType->type);
 | 
			
		||||
            $this->friendlyInfo($message);
 | 
			
		||||
            app('log')->debug($message);
 | 
			
		||||
            Log::debug($message);
 | 
			
		||||
            $entry->budgets()->sync([]);
 | 
			
		||||
            ++$count;
 | 
			
		||||
        }
 | 
			
		||||
        if (0 !== $count) {
 | 
			
		||||
            $message = sprintf('Corrected %d invalid budget/journal entries (entry).', $count);
 | 
			
		||||
            app('log')->debug($message);
 | 
			
		||||
            Log::debug($message);
 | 
			
		||||
            $this->friendlyInfo($message);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,8 +35,8 @@ use FireflyIII\Support\Models\AccountBalanceCalculator;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Illuminate\Support\Facades\DB;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use ValueError;
 | 
			
		||||
use stdClass;
 | 
			
		||||
use ValueError;
 | 
			
		||||
 | 
			
		||||
class CorrectsUnevenAmount extends Command
 | 
			
		||||
{
 | 
			
		||||
@@ -152,7 +152,7 @@ class CorrectsUnevenAmount extends Command
 | 
			
		||||
                    $entry->the_sum
 | 
			
		||||
                );
 | 
			
		||||
                $this->friendlyWarning($message);
 | 
			
		||||
                app('log')->warning($message);
 | 
			
		||||
                Log::warning($message);
 | 
			
		||||
                ++$this->count;
 | 
			
		||||
 | 
			
		||||
                continue;
 | 
			
		||||
@@ -230,7 +230,7 @@ class CorrectsUnevenAmount extends Command
 | 
			
		||||
        $message             = sprintf('Sum of journal #%d is not zero, journal is broken and now fixed.', $journal->id);
 | 
			
		||||
 | 
			
		||||
        $this->friendlyWarning($message);
 | 
			
		||||
        app('log')->warning($message);
 | 
			
		||||
        Log::warning($message);
 | 
			
		||||
 | 
			
		||||
        $destination->amount = $amount;
 | 
			
		||||
        $destination->save();
 | 
			
		||||
 
 | 
			
		||||
@@ -24,11 +24,11 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Console\Commands\Correction;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
 | 
			
		||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
 | 
			
		||||
use FireflyIII\User;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
class CreatesAccessTokens extends Command
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -24,10 +24,10 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Console\Commands\Correction;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
 | 
			
		||||
use FireflyIII\Models\TransactionGroup;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
class RemovesEmptyGroups extends Command
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,7 @@ use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Illuminate\Database\QueryException;
 | 
			
		||||
use Illuminate\Support\Facades\DB;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
 | 
			
		||||
class RemovesEmptyJournals extends Command
 | 
			
		||||
{
 | 
			
		||||
@@ -68,8 +69,8 @@ class RemovesEmptyJournals extends Command
 | 
			
		||||
                    $journal = TransactionJournal::find($row->transaction_journal_id);
 | 
			
		||||
                    $journal?->delete();
 | 
			
		||||
                } catch (QueryException $e) {
 | 
			
		||||
                    app('log')->info(sprintf('Could not delete journal: %s', $e->getMessage()));
 | 
			
		||||
                    app('log')->error($e->getTraceAsString());
 | 
			
		||||
                    Log::info(sprintf('Could not delete journal: %s', $e->getMessage()));
 | 
			
		||||
                    Log::error($e->getTraceAsString());
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                Transaction::where('transaction_journal_id', $row->transaction_journal_id)->delete();
 | 
			
		||||
@@ -96,8 +97,8 @@ class RemovesEmptyJournals extends Command
 | 
			
		||||
                $journal = TransactionJournal::find($entry->id);
 | 
			
		||||
                $journal?->delete();
 | 
			
		||||
            } catch (QueryException $e) {
 | 
			
		||||
                app('log')->info(sprintf('Could not delete entry: %s', $e->getMessage()));
 | 
			
		||||
                app('log')->error($e->getTraceAsString());
 | 
			
		||||
                Log::info(sprintf('Could not delete entry: %s', $e->getMessage()));
 | 
			
		||||
                Log::error($e->getTraceAsString());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $this->friendlyInfo(sprintf('Deleted empty transaction journal #%d', $entry->id));
 | 
			
		||||
 
 | 
			
		||||
@@ -24,11 +24,11 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Console\Commands\Correction;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
 | 
			
		||||
use FireflyIII\Models\Transaction;
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Exception;
 | 
			
		||||
use stdClass;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -135,9 +135,7 @@ class RemovesOrphanedTransactions extends Command
 | 
			
		||||
            // delete journals
 | 
			
		||||
            /** @var null|TransactionJournal $journal */
 | 
			
		||||
            $journal = TransactionJournal::find($transaction->transaction_journal_id);
 | 
			
		||||
            if (null !== $journal) {
 | 
			
		||||
                $journal->delete();
 | 
			
		||||
            }
 | 
			
		||||
            $journal?->delete();
 | 
			
		||||
            Transaction::where('transaction_journal_id', $transaction->transaction_journal_id)->delete();
 | 
			
		||||
            $this->friendlyWarning(
 | 
			
		||||
                sprintf(
 | 
			
		||||
 
 | 
			
		||||
@@ -24,20 +24,22 @@ declare(strict_types=1);
 | 
			
		||||
 | 
			
		||||
namespace FireflyIII\Console\Commands\Export;
 | 
			
		||||
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use Carbon\Carbon;
 | 
			
		||||
use Exception;
 | 
			
		||||
use FireflyIII\Console\Commands\ShowsFriendlyMessages;
 | 
			
		||||
use FireflyIII\Console\Commands\VerifiesAccessToken;
 | 
			
		||||
use FireflyIII\Enums\AccountTypeEnum;
 | 
			
		||||
use FireflyIII\Exceptions\FireflyException;
 | 
			
		||||
use FireflyIII\Models\Account;
 | 
			
		||||
use FireflyIII\Models\TransactionJournal;
 | 
			
		||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
 | 
			
		||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
 | 
			
		||||
use FireflyIII\Support\Export\ExportDataGenerator;
 | 
			
		||||
use Illuminate\Console\Command;
 | 
			
		||||
use Illuminate\Support\Collection;
 | 
			
		||||
use Exception;
 | 
			
		||||
use Illuminate\Support\Facades\Log;
 | 
			
		||||
use InvalidArgumentException;
 | 
			
		||||
use Safe\Exceptions\FilesystemException;
 | 
			
		||||
 | 
			
		||||
use function Safe\file_put_contents;
 | 
			
		||||
 | 
			
		||||
@@ -189,7 +191,7 @@ class ExportsData extends Command
 | 
			
		||||
            try {
 | 
			
		||||
                $date = Carbon::createFromFormat('!Y-m-d', $this->option($field));
 | 
			
		||||
            } catch (InvalidArgumentException $e) {
 | 
			
		||||
                app('log')->error($e->getMessage());
 | 
			
		||||
                Log::error($e->getMessage());
 | 
			
		||||
                $this->friendlyError(sprintf('%s date "%s" must be formatted YYYY-MM-DD. Field will be ignored.', $field, $this->option('start')));
 | 
			
		||||
                $error = true;
 | 
			
		||||
            }
 | 
			
		||||
@@ -200,7 +202,7 @@ class ExportsData extends Command
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (null === $this->option($field)) {
 | 
			
		||||
            app('log')->info(sprintf('No date given in field "%s"', $field));
 | 
			
		||||
            Log::info(sprintf('No date given in field "%s"', $field));
 | 
			
		||||
            $error = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -275,6 +277,7 @@ class ExportsData extends Command
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @throws FireflyException
 | 
			
		||||
     * @throws FilesystemException
 | 
			
		||||
     */
 | 
			
		||||
    private function exportData(array $options, array $data): void
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -70,7 +70,7 @@ class ReportsEmptyObjects extends Command
 | 
			
		||||
        /** @var stdClass $entry */
 | 
			
		||||
        foreach ($set as $entry) {
 | 
			
		||||
            $line = sprintf(
 | 
			
		||||
                'User #%d (%s) has budget #%d ("%s") which has no transaction journals.',
 | 
			
		||||
                'User #%d (%s) has budget #%d ("%s") which has no transactions.',
 | 
			
		||||
                $entry->user_id,
 | 
			
		||||
                $entry->email,
 | 
			
		||||
                $entry->id,
 | 
			
		||||
@@ -96,7 +96,7 @@ class ReportsEmptyObjects extends Command
 | 
			
		||||
        /** @var stdClass $entry */
 | 
			
		||||
        foreach ($set as $entry) {
 | 
			
		||||
            $line = sprintf(
 | 
			
		||||
                'User #%d (%s) has category #%d ("%s") which has no transaction journals.',
 | 
			
		||||
                'User #%d (%s) has category #%d ("%s") which has no transactions.',
 | 
			
		||||
                $entry->user_id,
 | 
			
		||||
                $entry->email,
 | 
			
		||||
                $entry->id,
 | 
			
		||||
@@ -119,7 +119,7 @@ class ReportsEmptyObjects extends Command
 | 
			
		||||
        /** @var stdClass $entry */
 | 
			
		||||
        foreach ($set as $entry) {
 | 
			
		||||
            $line = sprintf(
 | 
			
		||||
                'User #%d (%s) has tag #%d ("%s") which has no transaction journals.',
 | 
			
		||||
                'User #%d (%s) has tag #%d ("%s") which has no transactions.',
 | 
			
		||||
                $entry->user_id,
 | 
			
		||||
                $entry->email,
 | 
			
		||||
                $entry->id,
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user