mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 10:47:00 +00:00 
			
		
		
		
	Compare commits
	
		
			368 Commits
		
	
	
		
			develop-20
			...
			develop-20
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | d178956541 | ||
|  | c29f997733 | ||
|  | 2aabb56d2d | ||
|  | e1e18a2a0c | ||
|  | 2c41694f41 | ||
|  | 48a641286c | ||
|  | 5eec91f439 | ||
|  | 782f0c7d54 | ||
|  | a4dff6d39f | ||
|  | 9312ddbb7b | ||
|  | 14a9bede11 | ||
|  | 58d798df86 | ||
|  | e740fc57a6 | ||
|  | ecd7750030 | ||
|  | 19c4a82194 | ||
|  | ffc91d5ead | ||
|  | 4898c29b85 | ||
|  | 84b4ab0cc2 | ||
|  | eb808a0fbc | ||
|  | d25ae50d30 | ||
|  | c43821e29c | ||
|  | b7570b2651 | ||
|  | cb77609f27 | ||
|  | 99651bb61e | ||
|  | bf1e14f66d | ||
|  | d0e55804f8 | ||
|  | 0a9715b8c1 | ||
|  | 61390e67f6 | ||
|  | 536d25980f | ||
|  | 3253b2e569 | ||
|  | 11ac955303 | ||
|  | caf9a31bc4 | ||
|  | 8c84ab5855 | ||
|  | 91a56a7396 | ||
|  | f5806ea6de | ||
|  | 60b3692ac9 | ||
|  | 0bdb4f2e69 | ||
|  | f89f50c2db | ||
|  | 394df46961 | ||
|  | 535e5e4f50 | ||
|  | 00ba2a46d2 | ||
|  | a3ff26e3e4 | ||
|  | 3388cb6f66 | ||
|  | 1c3c9377ca | ||
|  | 54aeb4b4ef | ||
|  | 9eb3ad62dd | ||
|  | 4f0e978687 | ||
|  | e1cf9f7a79 | ||
|  | 7ce055a22c | ||
|  | 7bd915930c | ||
|  | 75aa2d99fd | ||
|  | f52bc0e242 | ||
|  | 55cf924794 | ||
|  | df3e4a6554 | ||
|  | 7c4ada458e | ||
|  | 2a4a98dd10 | ||
|  | 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 | ||
|  | e39ba46398 | ||
|  | e6b6a3cee5 | ||
|  | b5483f6ad3 | ||
|  | a751218d53 | ||
|  | 2af5e6eeef | ||
|  | 013c43f9f2 | ||
|  | 7e08a1f33c | ||
|  | e592b56d7a | ||
|  | a2479f71fe | ||
|  | 7d3b993b98 | ||
|  | 90623101a3 | ||
|  | e2eca79b25 | ||
|  | 8c0ee8f024 | ||
|  | 69cae3ae55 | ||
|  | 8a06298385 | ||
|  | acc3c294d8 | ||
|  | dbf7dba421 | ||
|  | 65813f290d | ||
|  | 3491fbb99d | ||
|  | cb6b3d5f85 | ||
|  | 956d4e09c3 | ||
|  | 6a7c35e7bc | ||
|  | 090aecb5f5 | ||
|  | b653d63d3d | ||
|  | 258dbf4a98 | ||
|  | 53335077ff | ||
|  | ecfb3e2f95 | ||
|  | f512e6724e | ||
|  | de9efb0727 | ||
|  | 9075fa8ac8 | ||
|  | 768bd892c8 | ||
|  | 9d9483e20f | ||
|  | 935453796e | ||
|  | c2d3f5da16 | ||
|  | 9e6f9d16e4 | ||
|  | fad016f92f | ||
|  | 30df6684cb | ||
|  | 4aa911420a | ||
|  | 19555a7046 | ||
|  | e5c409a8fc | ||
|  | 3adf3d2fdb | ||
|  | 0923d5a23e | ||
|  | 76b8cdc385 | ||
|  | 0a27da83eb | ||
|  | 17d6e2be85 | ||
|  | 7381f3eba9 | ||
|  | 7f2ef1b8e1 | ||
|  | 9dccae2402 | ||
|  | 073afd5b6e | ||
|  | 4167d85be2 | ||
|  | ee28d1307d | ||
|  | 7562215666 | ||
|  | 0203b918e9 | ||
|  | ae7c664418 | ||
|  | f13e0991fb | ||
|  | deae94b658 | ||
|  | c38c752520 | ||
|  | 28e7df2527 | ||
|  | cb0b42e44b | ||
|  | a3674c4dfe | ||
|  | 27480561ee | ||
|  | 6ea7152423 | ||
|  | dab95f7a86 | ||
|  | adf34805a8 | ||
|  | 93e926465f | ||
|  | 5b0be91f93 | ||
|  | 01e7b604da | ||
|  | 974a550d22 | ||
|  | 58d175444b | ||
|  | 29d8861e96 | ||
|  | eb832c750f | ||
|  | 134770644a | ||
|  | a9f21c9371 | ||
|  | 781947beeb | ||
|  | 9760cd2f97 | ||
|  | d317e9ec32 | ||
|  | 534f7fcadb | ||
|  | fb3f7a1d4b | ||
|  | bf2c3e3561 | ||
|  | b670f81dcd | ||
|  | 7aac1cdf67 | ||
|  | fa0ac8a16c | ||
|  | 0990b1f0b4 | ||
|  | c1922670c8 | ||
|  | 81cd89d66f | ||
|  | f5c202543c | ||
|  | 034f437c6b | ||
|  | 8550ba6138 | ||
|  | a51501025b | ||
|  | a9d26e4586 | ||
|  | 949691935f | ||
|  | 4835b05304 | ||
|  | cce5a73dd2 | ||
|  | 3152f635dd | ||
|  | 12e8651017 | ||
|  | f88286c848 | ||
|  | 39cf0533d9 | ||
|  | 6d82887960 | ||
|  | 262f1bae34 | ||
|  | 75dfdcc220 | ||
|  | c3a3bdf525 | ||
|  | 602df95f3c | ||
|  | 296a64e284 | ||
|  | b87b99a755 | ||
|  | bf53f5d6b7 | ||
|  | bcbb868acc | ||
|  | b3a9e6569e | ||
|  | f174f124ef | ||
|  | 8745377f31 | ||
|  | cf76e93f31 | ||
|  | 19e36f6f6e | ||
|  | 2a7bb6f048 | ||
|  | 536eacbc0c | ||
|  | af78158d0b | ||
|  | fb97910a34 | ||
|  | 66b4d14129 | ||
|  | fd53047dbc | ||
|  | 5f6fc1bab4 | ||
|  | cd0b64bd24 | ||
|  | 91b26bce0e | ||
|  | 26a8bd921d | ||
|  | ad77d55c16 | ||
|  | 445a383dd0 | ||
|  | 1666af939e | ||
|  | 35447f5eee | ||
|  | 7c6fcb5731 | ||
|  | fabd9bf765 | ||
|  | 6352d26633 | ||
|  | ebef145bd6 | ||
|  | acc89eb5f9 | ||
|  | 6523596415 | ||
|  | b6c2d23116 | ||
|  | 2a123354f9 | ||
|  | 1e7ea4b76c | ||
|  | d959526eb3 | ||
|  | 8846ee9091 | ||
|  | 6eb8d0fc8c | ||
|  | 1b0e16b6a5 | ||
|  | 2e4df28288 | ||
|  | f3b7a3015d | ||
|  | 5de5e08b1d | ||
|  | 0a116cd04c | ||
|  | fd32a692c1 | ||
|  | 1ac762aba8 | ||
|  | 315dc532b6 | 
							
								
								
									
										215
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										215
									
								
								.ci/php-cs-fixer/composer.lock
									
									
									
										generated
									
									
									
								
							| @@ -402,16 +402,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "friendsofphp/php-cs-fixer", | ||||
|             "version": "v3.86.0", | ||||
|             "version": "v3.89.1", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", | ||||
|                 "reference": "4a952bd19dc97879b0620f495552ef09b55f7d36" | ||||
|                 "reference": "f34967da2866ace090a2b447de1f357356474573" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/4a952bd19dc97879b0620f495552ef09b55f7d36", | ||||
|                 "reference": "4a952bd19dc97879b0620f495552ef09b55f7d36", | ||||
|                 "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/f34967da2866ace090a2b447de1f357356474573", | ||||
|                 "reference": "f34967da2866ace090a2b447de1f357356474573", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -422,39 +422,37 @@ | ||||
|                 "ext-hash": "*", | ||||
|                 "ext-json": "*", | ||||
|                 "ext-tokenizer": "*", | ||||
|                 "fidry/cpu-core-counter": "^1.2", | ||||
|                 "fidry/cpu-core-counter": "^1.3", | ||||
|                 "php": "^7.4 || ^8.0", | ||||
|                 "react/child-process": "^0.6.6", | ||||
|                 "react/event-loop": "^1.5", | ||||
|                 "react/promise": "^3.2", | ||||
|                 "react/socket": "^1.16", | ||||
|                 "react/stream": "^1.4", | ||||
|                 "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", | ||||
|                 "symfony/console": "^5.4.47 || ^6.4.13 || ^7.0", | ||||
|                 "symfony/event-dispatcher": "^5.4.45 || ^6.4.13 || ^7.0", | ||||
|                 "symfony/filesystem": "^5.4.45 || ^6.4.13 || ^7.0", | ||||
|                 "symfony/finder": "^5.4.45 || ^6.4.17 || ^7.0", | ||||
|                 "symfony/options-resolver": "^5.4.45 || ^6.4.16 || ^7.0", | ||||
|                 "symfony/polyfill-mbstring": "^1.32", | ||||
|                 "symfony/polyfill-php80": "^1.32", | ||||
|                 "symfony/polyfill-php81": "^1.32", | ||||
|                 "symfony/process": "^5.4.47 || ^6.4.20 || ^7.2", | ||||
|                 "symfony/stopwatch": "^5.4.45 || ^6.4.19 || ^7.0" | ||||
|                 "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0", | ||||
|                 "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0", | ||||
|                 "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0", | ||||
|                 "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0", | ||||
|                 "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0", | ||||
|                 "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.6", | ||||
|                 "infection/infection": "^0.29.14", | ||||
|                 "justinrainbow/json-schema": "^5.3 || ^6.4", | ||||
|                 "facile-it/paraunit": "^1.3.1 || ^2.7", | ||||
|                 "infection/infection": "^0.31.0", | ||||
|                 "justinrainbow/json-schema": "^6.5", | ||||
|                 "keradus/cli-executor": "^2.2", | ||||
|                 "mikey179/vfsstream": "^1.6.12", | ||||
|                 "php-coveralls/php-coveralls": "^2.8", | ||||
|                 "php-cs-fixer/accessible-object": "^1.1", | ||||
|                 "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", | ||||
|                 "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", | ||||
|                 "phpunit/phpunit": "^9.6.23 || ^10.5.47 || ^11.5.25", | ||||
|                 "symfony/polyfill-php84": "^1.32", | ||||
|                 "symfony/var-dumper": "^5.4.48 || ^6.4.23 || ^7.3.1", | ||||
|                 "symfony/yaml": "^5.4.45 || ^6.4.23 || ^7.3.1" | ||||
|                 "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", | ||||
|                 "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2", | ||||
|                 "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2" | ||||
|             }, | ||||
|             "suggest": { | ||||
|                 "ext-dom": "For handling output formats in XML", | ||||
| @@ -495,7 +493,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.86.0" | ||||
|                 "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.89.1" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -503,7 +501,7 @@ | ||||
|                     "type": "github" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-08-13T22:36:21+00:00" | ||||
|             "time": "2025-10-24T12:05:10+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "psr/container", | ||||
| @@ -1253,16 +1251,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/console", | ||||
|             "version": "v7.3.2", | ||||
|             "version": "v7.3.5", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/console.git", | ||||
|                 "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1" | ||||
|                 "reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/console/zipball/5f360ebc65c55265a74d23d7fe27f957870158a1", | ||||
|                 "reference": "5f360ebc65c55265a74d23d7fe27f957870158a1", | ||||
|                 "url": "https://api.github.com/repos/symfony/console/zipball/cdb80fa5869653c83cfe1a9084a673b6daf57ea7", | ||||
|                 "reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1327,7 +1325,7 @@ | ||||
|                 "terminal" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/console/tree/v7.3.2" | ||||
|                 "source": "https://github.com/symfony/console/tree/v7.3.5" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1347,7 +1345,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-07-30T17:13:41+00:00" | ||||
|             "time": "2025-10-14T15:46:26+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/deprecation-contracts", | ||||
| @@ -1418,16 +1416,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/event-dispatcher", | ||||
|             "version": "v7.3.0", | ||||
|             "version": "v7.3.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/event-dispatcher.git", | ||||
|                 "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" | ||||
|                 "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", | ||||
|                 "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", | ||||
|                 "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", | ||||
|                 "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1478,7 +1476,7 @@ | ||||
|             "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" | ||||
|                 "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1489,12 +1487,16 @@ | ||||
|                     "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-04-22T09:11:45+00:00" | ||||
|             "time": "2025-08-13T11:49:31+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/event-dispatcher-contracts", | ||||
| @@ -1644,16 +1646,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/finder", | ||||
|             "version": "v7.3.2", | ||||
|             "version": "v7.3.5", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/finder.git", | ||||
|                 "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" | ||||
|                 "reference": "9f696d2f1e340484b4683f7853b273abff94421f" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", | ||||
|                 "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", | ||||
|                 "url": "https://api.github.com/repos/symfony/finder/zipball/9f696d2f1e340484b4683f7853b273abff94421f", | ||||
|                 "reference": "9f696d2f1e340484b4683f7853b273abff94421f", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1688,7 +1690,7 @@ | ||||
|             "description": "Finds files and directories via an intuitive fluent interface", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/finder/tree/v7.3.2" | ||||
|                 "source": "https://github.com/symfony/finder/tree/v7.3.5" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1708,20 +1710,20 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-07-15T13:41:35+00:00" | ||||
|             "time": "2025-10-15T18:45:57+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/options-resolver", | ||||
|             "version": "v7.3.2", | ||||
|             "version": "v7.3.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/options-resolver.git", | ||||
|                 "reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37" | ||||
|                 "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/options-resolver/zipball/119bcf13e67dbd188e5dbc74228b1686f66acd37", | ||||
|                 "reference": "119bcf13e67dbd188e5dbc74228b1686f66acd37", | ||||
|                 "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0ff2f5c3df08a395232bbc3c2eb7e84912df911d", | ||||
|                 "reference": "0ff2f5c3df08a395232bbc3c2eb7e84912df911d", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -1759,7 +1761,7 @@ | ||||
|                 "options" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/options-resolver/tree/v7.3.2" | ||||
|                 "source": "https://github.com/symfony/options-resolver/tree/v7.3.3" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -1779,7 +1781,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-07-15T11:36:08+00:00" | ||||
|             "time": "2025-08-05T10:16:07+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/polyfill-ctype", | ||||
| @@ -2281,17 +2283,97 @@ | ||||
|             "time": "2024-09-09T11:45:10+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/process", | ||||
|             "version": "v7.3.0", | ||||
|             "name": "symfony/polyfill-php84", | ||||
|             "version": "v1.33.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/process.git", | ||||
|                 "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" | ||||
|                 "url": "https://github.com/symfony/polyfill-php84.git", | ||||
|                 "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", | ||||
|                 "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", | ||||
|                 "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": { | ||||
| @@ -2323,7 +2405,7 @@ | ||||
|             "description": "Executes commands in sub-processes", | ||||
|             "homepage": "https://symfony.com", | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/process/tree/v7.3.0" | ||||
|                 "source": "https://github.com/symfony/process/tree/v7.3.4" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -2334,12 +2416,16 @@ | ||||
|                     "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-04-17T09:11:12+00:00" | ||||
|             "time": "2025-09-11T10:12:26+00:00" | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/service-contracts", | ||||
| @@ -2488,16 +2574,16 @@ | ||||
|         }, | ||||
|         { | ||||
|             "name": "symfony/string", | ||||
|             "version": "v7.3.2", | ||||
|             "version": "v7.3.4", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/symfony/string.git", | ||||
|                 "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca" | ||||
|                 "reference": "f96476035142921000338bad71e5247fbc138872" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca", | ||||
|                 "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca", | ||||
|                 "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", | ||||
|                 "reference": "f96476035142921000338bad71e5247fbc138872", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
| @@ -2512,7 +2598,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", | ||||
| @@ -2555,7 +2640,7 @@ | ||||
|                 "utf8" | ||||
|             ], | ||||
|             "support": { | ||||
|                 "source": "https://github.com/symfony/string/tree/v7.3.2" | ||||
|                 "source": "https://github.com/symfony/string/tree/v7.3.4" | ||||
|             }, | ||||
|             "funding": [ | ||||
|                 { | ||||
| @@ -2575,7 +2660,7 @@ | ||||
|                     "type": "tidelift" | ||||
|                 } | ||||
|             ], | ||||
|             "time": "2025-07-10T08:47:49+00:00" | ||||
|             "time": "2025-09-11T14:36:48+00:00" | ||||
|         } | ||||
|     ], | ||||
|     "packages-dev": [], | ||||
|   | ||||
| @@ -1,6 +1,4 @@ | ||||
| parameters: | ||||
|   scanFiles: | ||||
|     - ../_ide_helper.php | ||||
|   paths: | ||||
|     - ../app | ||||
|     - ../database | ||||
| @@ -9,30 +7,26 @@ parameters: | ||||
|     - ../bootstrap/app.php | ||||
|   universalObjectCratesClasses: | ||||
|     - Illuminate\Database\Eloquent\Model | ||||
|   # TODO: slowly remove these parameters and fix the issues found. | ||||
|   reportUnmatchedIgnoredErrors: true | ||||
|   ignoreErrors: | ||||
|   # TODO: slowly remove these exceptions and fix the issues found. | ||||
|     - '#Dynamic call to static method#' # all the Laravel ORM things depend on this. | ||||
|     - identifier: varTag.nativeType | ||||
|     - identifier: varTag.type | ||||
|     # all errors below I will never fix. | ||||
|     - '#expects view-string\|null, string given#' | ||||
|     - '#expects view-string, string given#' | ||||
|     - "#Parameter \\#[1-2] \\$num[1-2] of function bc[a-z]+ expects numeric-string, [a-z\\-|&]+ given#" | ||||
|     - identifier: missingType.generics # not interesting enough to fix. | ||||
|     - | ||||
|         identifier: larastan.noEnvCallsOutsideOfConfig | ||||
|         path: ../app/Console/Commands/System/CreatesDatabase.php | ||||
|     - identifier: missingType.iterableValue # not interesting enough to fix. | ||||
|     - identifier: missingType.generics # not interesting enough to fix. | ||||
|     - "#Parameter \\#[1-2] \\$num[1-2] of function bc[a-z]+ expects numeric-string, [a-z\\-|&]+ given#" | ||||
|     - '#expects view-string, string given#' | ||||
|     - '#expects view-string\|null, string given#' | ||||
|  | ||||
|     # phpstan can't handle this so we ignore them. | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::before#' | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::after#' | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::withTrashed#' | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::accountTypeIn#' | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\BelongsTo::withTrashed#' | ||||
|     - identifier: varTag.type # needs a custom extension for every repository, not gonna happen. | ||||
|     - '#Dynamic call to static method Illuminate#' | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::before#' # is custom scope | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::after#' # is custom scope | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::withTrashed#' # is to allow soft delete | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\HasMany::accountTypeIn#' # is a custom scope | ||||
|     - '#Call to an undefined method Illuminate\\Database\\Eloquent\\Relations\\BelongsTo::withTrashed#' # is to allow soft delete | ||||
|  | ||||
|   # The level 8 is the highest level. original was 5 | ||||
|   # 7 is more than enough, higher just leaves NULL things. | ||||
|   level: 7 | ||||
|   level: 6 | ||||
|  | ||||
|   | ||||
| @@ -314,8 +314,9 @@ DEMO_USERNAME= | ||||
| DEMO_PASSWORD= | ||||
|  | ||||
| # | ||||
| # Disable or enable the running balance column data | ||||
| # Please disable this. It's a very experimental feature. | ||||
| # Disable or enable the running balance column data. | ||||
| # If you enable this, please also run "php artisan firefly-iii:correct-database" | ||||
| # This will take some time the first run. | ||||
| # | ||||
| USE_RUNNING_BALANCE=false | ||||
|  | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/cleanup.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/cleanup.yml
									
									
									
									
										vendored
									
									
								
							| @@ -15,7 +15,7 @@ jobs: | ||||
|     timeout-minutes: 10 | ||||
|     steps: | ||||
|       - name: Prune cancelled/skipped runs | ||||
|         uses: actions/github-script@v7 | ||||
|         uses: actions/github-script@v8 | ||||
|         with: | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           script: | | ||||
| @@ -45,7 +45,7 @@ jobs: | ||||
|             } | ||||
|  | ||||
|       - name: Prune runs older than 3 days | ||||
|         uses: actions/github-script@v7 | ||||
|         uses: actions/github-script@v8 | ||||
|         with: | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           script: | | ||||
|   | ||||
							
								
								
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -250,7 +250,7 @@ jobs: | ||||
|             fi | ||||
|  | ||||
|           echo "Merge all changes from $BRANCH_NAME back into '$MERGE_INTO' using a PR" | ||||
|           PR_URL=$(gh pr create -B $MERGE_INTO -H $BRANCH_NAME --title "🤖 Automatic PR to merge all changes into the '$MERGE_INTO' branch." --body '🤖 Created by GitHub action') | ||||
|           PR_URL=$(gh pr create -B $MERGE_INTO -H $BRANCH_NAME --title "🤖 Automatic PR to merge all changes into the '$MERGE_INTO' branch." --body '🤖 This PR was created automatically by a GitHub action to merge the changed files into this branch. It will be merged automatically. `Share and enjoy`') | ||||
|           echo "PR URL is '$PR_URL'" | ||||
|           IFS='/' read -ra parts <<< "$PR_URL" | ||||
|           PR_NR=$(printf %s\\n "${parts[@]:(-1)}") | ||||
| @@ -272,7 +272,7 @@ jobs: | ||||
|  | ||||
|             echo "Also merge everything into main since this is a release." | ||||
|             echo 'create PR' | ||||
|             PR_URL=$(gh pr create -B main -H develop --title "🤖 Automatic PR to merge all changes into the main branch." --body "🤖 Created by GitHub action") | ||||
|             PR_URL=$(gh pr create -B main -H develop --title "🤖 Automatic PR to merge all changes into the main branch." --body '🤖 This PR was created automatically by a GitHub action to merge the changed files into this branch. It will be merged automatically. `Share and enjoy`') | ||||
|             echo "PR URL is '$PR_URL'" | ||||
|  | ||||
|             IFS='/' read -ra parts <<< "$PR_URL" | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/stale.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/stale.yml
									
									
									
									
										vendored
									
									
								
							| @@ -15,7 +15,7 @@ jobs: | ||||
|       actions: write | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/stale@v9 | ||||
|       - uses: actions/stale@v10 | ||||
|         with: | ||||
|           repo-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           stale-issue-message: | | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\AccountTypeEnum; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| @@ -79,20 +79,26 @@ class AccountController extends Controller | ||||
|      * @throws FireflyException | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function accounts(AutocompleteRequest $request): JsonResponse | ||||
|     public function accounts(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data        = $request->getData(); | ||||
|         $types       = $data['types']; | ||||
|         $query       = $data['query']; | ||||
|         $date        = $data['date'] ?? today(config('app.timezone')); | ||||
|         [ | ||||
|             'types' => $types, | ||||
|             'query' => $query, | ||||
|             'date'  => $date, | ||||
|             'limit' => $limit, | ||||
|         ] | ||||
|                      = $request->attributes->all(); | ||||
| 
 | ||||
| 
 | ||||
|         $date ??= today(config('app.timezone')); | ||||
| 
 | ||||
|         // set date to end-of-day for account balance. so it is at $date 23:59:59
 | ||||
|         $date->endOfDay(); | ||||
| 
 | ||||
|         $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
 | ||||
|         $date->endOfDay(); | ||||
| 
 | ||||
|         $result      = $this->repository->searchAccount((string)$query, $types, $limit); | ||||
|         $allBalances = Steam::accountsBalancesOptimized($result, $date, $this->primaryCurrency, $this->convertToPrimary); | ||||
| 
 | ||||
|         /** @var Account $account */ | ||||
| @@ -111,16 +117,17 @@ class AccountController extends Controller | ||||
|             } | ||||
| 
 | ||||
|             $return[]        = [ | ||||
|                 'id'                              => (string) $account->id, | ||||
|                 'id'                              => (string)$account->id, | ||||
|                 'name'                            => $account->name, | ||||
|                 'name_with_balance'               => $nameWithBalance, | ||||
|                 'active'                          => $account->active, | ||||
|                 'type'                            => $account->accountType->type, | ||||
|                 'currency_id'                     => (string) $useCurrency->id, | ||||
|                 'currency_id'                     => (string)$useCurrency->id, | ||||
|                 'currency_name'                   => $useCurrency->name, | ||||
|                 'currency_code'                   => $useCurrency->code, | ||||
|                 'currency_symbol'                 => $useCurrency->symbol, | ||||
|                 'currency_decimal_places'         => $useCurrency->decimal_places, | ||||
|                 'account_currency_id'             => (string) $currency->id, | ||||
|                 'account_currency_id'             => (string)$currency->id, | ||||
|                 'account_currency_name'           => $currency->name, | ||||
|                 'account_currency_code'           => $currency->code, | ||||
|                 'account_currency_symbol'         => $currency->symbol, | ||||
| @@ -133,8 +140,8 @@ class AccountController extends Controller | ||||
|             $return, | ||||
|             static function (array $left, array $right) { | ||||
|                 $order = [AccountTypeEnum::ASSET->value, AccountTypeEnum::REVENUE->value, AccountTypeEnum::EXPENSE->value]; | ||||
|                 $posA  = (int) array_search($left['type'], $order, true); | ||||
|                 $posB  = (int) array_search($right['type'], $order, true); | ||||
|                 $posA  = (int)array_search($left['type'], $order, true); | ||||
|                 $posB  = (int)array_search($right['type'], $order, true); | ||||
| 
 | ||||
|                 return $posA - $posB; | ||||
|             } | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\Bill; | ||||
| use FireflyIII\Repositories\Bill\BillRepositoryInterface; | ||||
| @@ -61,10 +61,9 @@ class BillController extends Controller | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBillsAC
 | ||||
|      */ | ||||
|     public function bills(AutocompleteRequest $request): JsonResponse | ||||
|     public function bills(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $result   = $this->repository->searchBill($data['query'], $this->parameters->get('limit')); | ||||
|         $result   = $this->repository->searchBill($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $filtered = $result->map( | ||||
|             static fn (Bill $item) => [ | ||||
|                 'id'     => (string) $item->id, | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\Budget; | ||||
| use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; | ||||
| @@ -61,14 +61,14 @@ class BudgetController extends Controller | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getBudgetsAC
 | ||||
|      */ | ||||
|     public function budgets(AutocompleteRequest $request): JsonResponse | ||||
|     public function budgets(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $result   = $this->repository->searchBudget($data['query'], $this->parameters->get('limit')); | ||||
|         $result   = $this->repository->searchBudget($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $filtered = $result->map( | ||||
|             static fn (Budget $item) => [ | ||||
|                 'id'   => (string) $item->id, | ||||
|                 'name' => $item->name, | ||||
|                 'id'     => (string) $item->id, | ||||
|                 'name'   => $item->name, | ||||
|                 'active' => $item->active, | ||||
|             ] | ||||
|         ); | ||||
| 
 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\Category; | ||||
| use FireflyIII\Repositories\Category\CategoryRepositoryInterface; | ||||
| @@ -61,10 +61,9 @@ class CategoryController extends Controller | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCategoriesAC
 | ||||
|      */ | ||||
|     public function categories(AutocompleteRequest $request): JsonResponse | ||||
|     public function categories(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $result   = $this->repository->searchCategory($data['query'], $this->parameters->get('limit')); | ||||
|         $result   = $this->repository->searchCategory($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $filtered = $result->map( | ||||
|             static fn (Category $item) => [ | ||||
|                 'id'   => (string) $item->id, | ||||
|   | ||||
| @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use Deprecated; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| @@ -62,10 +63,9 @@ class CurrencyController extends Controller | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getCurrenciesAC
 | ||||
|      */ | ||||
|     public function currencies(AutocompleteRequest $request): JsonResponse | ||||
|     public function currencies(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data       = $request->getData(); | ||||
|         $collection = $this->repository->searchCurrency($data['query'], $this->parameters->get('limit')); | ||||
|         $collection = $this->repository->searchCurrency($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $result     = []; | ||||
| 
 | ||||
|         /** @var TransactionCurrency $currency */ | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\ObjectGroup; | ||||
| use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface; | ||||
| @@ -61,11 +61,10 @@ class ObjectGroupController extends Controller | ||||
|      * Documentation for this endpoint is at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getObjectGroupsAC
 | ||||
|      */ | ||||
|     public function objectGroups(AutocompleteRequest $request): JsonResponse | ||||
|     public function objectGroups(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data   = $request->getData(); | ||||
|         $return = []; | ||||
|         $result = $this->repository->search($data['query'], $this->parameters->get('limit')); | ||||
|         $result = $this->repository->search($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
| 
 | ||||
|         /** @var ObjectGroup $objectGroup */ | ||||
|         foreach ($result as $objectGroup) { | ||||
|   | ||||
| @@ -25,11 +25,13 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| 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; | ||||
| 
 | ||||
| /** | ||||
| @@ -62,10 +64,9 @@ class PiggyBankController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function piggyBanks(AutocompleteRequest $request): JsonResponse | ||||
|     public function piggyBanks(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $piggies  = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit')); | ||||
|         $piggies  = $this->piggyRepository->searchPiggyBank($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $response = []; | ||||
| 
 | ||||
|         /** @var PiggyBank $piggy */ | ||||
| @@ -88,14 +89,14 @@ class PiggyBankController extends Controller | ||||
|         return response()->api($response); | ||||
|     } | ||||
| 
 | ||||
|     public function piggyBanksWithBalance(AutocompleteRequest $request): JsonResponse | ||||
|     public function piggyBanksWithBalance(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $piggies  = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit')); | ||||
|         $piggies  = $this->piggyRepository->searchPiggyBank($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $response = []; | ||||
| 
 | ||||
|         /** @var PiggyBank $piggy */ | ||||
|         foreach ($piggies as $piggy) { | ||||
|             /** @var TransactionCurrency $currency */ | ||||
|             $currency      = $piggy->transactionCurrency; | ||||
|             $currentAmount = $this->piggyRepository->getCurrentAmount($piggy); | ||||
|             $objectGroup   = $piggy->objectGroups()->first(); | ||||
| @@ -105,8 +106,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, | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\Recurrence; | ||||
| use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; | ||||
| @@ -57,10 +57,9 @@ class RecurrenceController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function recurring(AutocompleteRequest $request): JsonResponse | ||||
|     public function recurring(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data        = $request->getData(); | ||||
|         $recurrences = $this->repository->searchRecurrence($data['query'], $this->parameters->get('limit')); | ||||
|         $recurrences = $this->repository->searchRecurrence($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $response    = []; | ||||
| 
 | ||||
|         /** @var Recurrence $recurrence */ | ||||
| @@ -69,6 +68,7 @@ class RecurrenceController extends Controller | ||||
|                 'id'          => (string) $recurrence->id, | ||||
|                 'name'        => $recurrence->title, | ||||
|                 'description' => $recurrence->description, | ||||
|                 'active'      => $recurrence->active, | ||||
|             ]; | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\Rule; | ||||
| use FireflyIII\Repositories\Rule\RuleRepositoryInterface; | ||||
| @@ -37,7 +37,7 @@ use Illuminate\Http\JsonResponse; | ||||
| class RuleController extends Controller | ||||
| { | ||||
|     private RuleRepositoryInterface $repository; | ||||
|     protected array $acceptedRoles = [UserRoleEnum::READ_RULES]; | ||||
|     protected array                 $acceptedRoles = [UserRoleEnum::READ_RULES]; | ||||
| 
 | ||||
|     /** | ||||
|      * RuleController constructor. | ||||
| @@ -57,18 +57,18 @@ class RuleController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function rules(AutocompleteRequest $request): JsonResponse | ||||
|     public function rules(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $rules    = $this->repository->searchRule($data['query'], $this->parameters->get('limit')); | ||||
|         $rules    = $this->repository->searchRule($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $response = []; | ||||
| 
 | ||||
|         /** @var Rule $rule */ | ||||
|         foreach ($rules as $rule) { | ||||
|             $response[] = [ | ||||
|                 'id'          => (string) $rule->id, | ||||
|                 'id'          => (string)$rule->id, | ||||
|                 'name'        => $rule->title, | ||||
|                 'description' => $rule->description, | ||||
|                 'active'      => $rule->active, | ||||
|             ]; | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\RuleGroup; | ||||
| use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; | ||||
| @@ -57,10 +57,9 @@ class RuleGroupController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function ruleGroups(AutocompleteRequest $request): JsonResponse | ||||
|     public function ruleGroups(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $groups   = $this->repository->searchRuleGroup($data['query'], $this->parameters->get('limit')); | ||||
|         $groups   = $this->repository->searchRuleGroup($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $response = []; | ||||
| 
 | ||||
|         /** @var RuleGroup $group */ | ||||
| @@ -69,6 +68,7 @@ class RuleGroupController extends Controller | ||||
|                 'id'          => (string) $group->id, | ||||
|                 'name'        => $group->title, | ||||
|                 'description' => $group->description, | ||||
|                 'active'      => $group->active, | ||||
|             ]; | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\Tag; | ||||
| use FireflyIII\Repositories\Tag\TagRepositoryInterface; | ||||
| @@ -57,10 +57,9 @@ class TagController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function tags(AutocompleteRequest $request): JsonResponse | ||||
|     public function tags(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data   = $request->getData(); | ||||
|         $result = $this->repository->searchTags($data['query'], $this->parameters->get('limit')); | ||||
|         $result = $this->repository->searchTags($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $array  = []; | ||||
| 
 | ||||
|         /** @var Tag $tag */ | ||||
|   | ||||
| @@ -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\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\TransactionGroup; | ||||
| use FireflyIII\Models\TransactionJournal; | ||||
| use FireflyIII\Repositories\Journal\JournalRepositoryInterface; | ||||
| use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; | ||||
| @@ -64,10 +64,9 @@ class TransactionController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function transactions(AutocompleteRequest $request): JsonResponse | ||||
|     public function transactions(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data     = $request->getData(); | ||||
|         $result   = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit')); | ||||
|         $result   = $this->repository->searchJournalDescriptions($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
| 
 | ||||
|         // limit and unique
 | ||||
|         $filtered = $result->unique('description'); | ||||
| @@ -86,13 +85,12 @@ class TransactionController extends Controller | ||||
|         return response()->api($array); | ||||
|     } | ||||
| 
 | ||||
|     public function transactionsWithID(AutocompleteRequest $request): JsonResponse | ||||
|     public function transactionsWithID(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data   = $request->getData(); | ||||
|         $result = new Collection(); | ||||
|         if (is_numeric($data['query'])) { | ||||
|         if (is_numeric($request->attributes->get('query'))) { | ||||
|             // search for group, not journal.
 | ||||
|             $firstResult = $this->groupRepository->find((int) $data['query']); | ||||
|             $firstResult = $this->groupRepository->find((int) $request->attributes->get('query')); | ||||
|             if ($firstResult instanceof TransactionGroup) { | ||||
|                 // group may contain multiple journals, each a result:
 | ||||
|                 foreach ($firstResult->transactionJournals as $journal) { | ||||
| @@ -100,8 +98,8 @@ class TransactionController extends Controller | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         if (!is_numeric($data['query'])) { | ||||
|             $result = $this->repository->searchJournalDescriptions($data['query'], $this->parameters->get('limit')); | ||||
|         if (!is_numeric($request->attributes->get('query'))) { | ||||
|             $result = $this->repository->searchJournalDescriptions($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         } | ||||
| 
 | ||||
|         // limit and unique
 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Autocomplete; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; | ||||
| use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteApiRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\TransactionType; | ||||
| use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface; | ||||
| @@ -55,10 +55,9 @@ class TransactionTypeController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function transactionTypes(AutocompleteRequest $request): JsonResponse | ||||
|     public function transactionTypes(AutocompleteApiRequest $request): JsonResponse | ||||
|     { | ||||
|         $data  = $request->getData(); | ||||
|         $types = $this->repository->searchTypes($data['query'], $this->parameters->get('limit')); | ||||
|         $types = $this->repository->searchTypes($request->attributes->get('query'), $request->attributes->get('limit')); | ||||
|         $array = []; | ||||
| 
 | ||||
|         /** @var TransactionType $type */ | ||||
|   | ||||
| @@ -31,9 +31,7 @@ use FireflyIII\Enums\TransactionTypeEnum; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Http\Api\AccountBalanceGrouped; | ||||
| use FireflyIII\Support\Http\Api\CleansChartData; | ||||
| use FireflyIII\Support\Http\Api\CollectsAccountsFromFilter; | ||||
|   | ||||
| @@ -26,15 +26,15 @@ namespace FireflyIII\Api\V1\Controllers\Chart; | ||||
| 
 | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Data\SameDateRequest; | ||||
| use FireflyIII\Api\V1\Requests\DateRangeRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\Budget; | ||||
| use FireflyIII\Models\BudgetLimit; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; | ||||
| use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; | ||||
| use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Http\Api\CleansChartData; | ||||
| use FireflyIII\Support\Http\Api\ExchangeRateConverter; | ||||
| use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; | ||||
| @@ -55,7 +55,6 @@ class BudgetController extends Controller | ||||
|     protected OperationsRepositoryInterface $opsRepository; | ||||
|     private BudgetLimitRepositoryInterface  $blRepository; | ||||
|     private array                           $currencies = []; | ||||
|     private TransactionCurrency             $currency; | ||||
|     private BudgetRepositoryInterface       $repository; | ||||
| 
 | ||||
|     public function __construct() | ||||
| @@ -84,15 +83,13 @@ class BudgetController extends Controller | ||||
|      * | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function overview(SameDateRequest $request): JsonResponse | ||||
|     public function overview(DateRangeRequest $request): JsonResponse | ||||
|     { | ||||
|         $params  = $request->getAll(); | ||||
| 
 | ||||
|         /** @var Carbon $start */ | ||||
|         $start   = $params['start']; | ||||
|         $start   = $request->attributes->get('start'); | ||||
| 
 | ||||
|         /** @var Carbon $end */ | ||||
|         $end     = $params['end']; | ||||
|         $end     = $request->attributes->get('end'); | ||||
| 
 | ||||
|         // code from FrontpageChartGenerator, but not in separate class
 | ||||
|         $budgets = $this->repository->getActiveBudgets(); | ||||
| @@ -115,7 +112,7 @@ class BudgetController extends Controller | ||||
|         // get all limits:
 | ||||
|         $limits     = $this->blRepository->getBudgetLimits($budget, $start, $end); | ||||
|         $rows       = []; | ||||
|         $spent      = $this->opsRepository->listExpenses($start, $end, null, new Collection([$budget])); | ||||
|         $spent      = $this->opsRepository->listExpenses($start, $end, null, new Collection()->push($budget)); | ||||
|         $expenses   = $this->processExpenses($budget->id, $spent, $start, $end); | ||||
|         $converter  = new ExchangeRateConverter(); | ||||
|         $currencies = [$this->primaryCurrency->id => $this->primaryCurrency]; | ||||
| @@ -134,9 +131,9 @@ class BudgetController extends Controller | ||||
|             $row['pc_left']      = '0'; | ||||
|             $row['pc_overspent'] = '0'; | ||||
| 
 | ||||
|             if (null !== $limit) { | ||||
|             if ($limit instanceof BudgetLimit) { | ||||
|                 $row['budgeted']  = $limit->amount; | ||||
|                 $row['left']      = bcsub($row['budgeted'], bcmul($row['spent'], '-1')); | ||||
|                 $row['left']      = bcsub((string) $row['budgeted'], bcmul((string) $row['spent'], '-1')); | ||||
|                 $row['overspent'] = bcmul($row['left'], '-1'); | ||||
|                 $row['left']      = 1 === bccomp($row['left'], '0') ? $row['left'] : '0'; | ||||
|                 $row['overspent'] = 1 === bccomp($row['overspent'], '0') ? $row['overspent'] : '0'; | ||||
| @@ -144,7 +141,7 @@ class BudgetController extends Controller | ||||
| 
 | ||||
|             // convert data if necessary.
 | ||||
|             if (true === $this->convertToPrimary && $currencyId !== $this->primaryCurrency->id) { | ||||
|                 $currencies[$currencyId] ??= TransactionCurrency::find($currencyId); | ||||
|                 $currencies[$currencyId] ??= Amount::getTransactionCurrencyById($currencyId); | ||||
|                 $row['pc_budgeted']  = $converter->convert($currencies[$currencyId], $this->primaryCurrency, $start, $row['budgeted']); | ||||
|                 $row['pc_spent']     = $converter->convert($currencies[$currencyId], $this->primaryCurrency, $start, $row['spent']); | ||||
|                 $row['pc_left']      = $converter->convert($currencies[$currencyId], $this->primaryCurrency, $start, $row['left']); | ||||
| @@ -201,18 +198,18 @@ class BudgetController extends Controller | ||||
|         return $return; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * When no budget limits are present, the expenses of the whole period are collected and grouped. | ||||
|      * This is grouped per currency. Because there is no limit set, "left to spend" and "overspent" are empty. | ||||
|      * | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     private function noBudgetLimits(Budget $budget, Carbon $start, Carbon $end): array | ||||
|     { | ||||
|         $spent = $this->opsRepository->listExpenses($start, $end, null, new Collection([$budget])); | ||||
| 
 | ||||
|         return $this->processExpenses($budget->id, $spent, $start, $end); | ||||
|     } | ||||
|     //    /**
 | ||||
|     //     * When no budget limits are present, the expenses of the whole period are collected and grouped.
 | ||||
|     //     * This is grouped per currency. Because there is no limit set, "left to spend" and "overspent" are empty.
 | ||||
|     //     *
 | ||||
|     //     * @throws FireflyException
 | ||||
|     //     */
 | ||||
|     //    private function noBudgetLimits(Budget $budget, Carbon $start, Carbon $end): array
 | ||||
|     //    {
 | ||||
|     //        $spent = $this->opsRepository->listExpenses($start, $end, null, new Collection()->push($budget));
 | ||||
|     //
 | ||||
|     //        return $this->processExpenses($budget->id, $spent, $start, $end);
 | ||||
|     //    }
 | ||||
| 
 | ||||
|     /** | ||||
|      * Shared between the "noBudgetLimits" function and "processLimit". Will take a single set of expenses and return | ||||
| @@ -232,7 +229,7 @@ class BudgetController extends Controller | ||||
|          * @var array $block | ||||
|          */ | ||||
|         foreach ($spent as $currencyId => $block) { | ||||
|             $this->currencies[$currencyId] ??= TransactionCurrency::find($currencyId); | ||||
|             $this->currencies[$currencyId] ??= Amount::getTransactionCurrencyById($currencyId); | ||||
|             $return[$currencyId]           ??= [ | ||||
|                 'currency_id'             => (string)$currencyId, | ||||
|                 'currency_code'           => $block['currency_code'], | ||||
| @@ -251,67 +248,15 @@ class BudgetController extends Controller | ||||
|             // var_dump($return);
 | ||||
|             /** @var array $journal */ | ||||
|             foreach ($currentBudgetArray['transaction_journals'] as $journal) { | ||||
|                 $return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], (string)$journal['amount']); | ||||
|                 /** @var numeric-string $amount */ | ||||
|                 $amount                       = (string)$journal['amount']; | ||||
|                 $return[$currencyId]['spent'] = bcadd($return[$currencyId]['spent'], $amount); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         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([$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'; | ||||
|   | ||||
| @@ -26,7 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Chart; | ||||
| 
 | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Data\SameDateRequest; | ||||
| use FireflyIII\Api\V1\Requests\DateRangeRequest; | ||||
| use FireflyIII\Enums\AccountTypeEnum; | ||||
| use FireflyIII\Enums\TransactionTypeEnum; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| @@ -80,13 +80,13 @@ class CategoryController extends Controller | ||||
|      * | ||||
|      * @SuppressWarnings("PHPMD.UnusedFormalParameter") | ||||
|      */ | ||||
|     public function overview(SameDateRequest $request): JsonResponse | ||||
|     public function overview(DateRangeRequest $request): JsonResponse | ||||
|     { | ||||
|         /** @var Carbon $start */ | ||||
|         $start      = $this->parameters->get('start'); | ||||
|         $start      = $request->attributes->get('start'); | ||||
| 
 | ||||
|         /** @var Carbon $end */ | ||||
|         $end        = $this->parameters->get('end'); | ||||
|         $end        = $request->attributes->get('end'); | ||||
|         $accounts   = $this->accountRepos->getAccountsByType([AccountTypeEnum::DEBT->value, AccountTypeEnum::LOAN->value, AccountTypeEnum::MORTGAGE->value, AccountTypeEnum::ASSET->value]); | ||||
|         $currencies = []; | ||||
|         $return     = []; | ||||
| @@ -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(), | ||||
|   | ||||
| @@ -27,9 +27,9 @@ namespace FireflyIII\Api\V1\Controllers; | ||||
| use Carbon\Carbon; | ||||
| use Carbon\Exceptions\InvalidFormatException; | ||||
| use FireflyIII\Exceptions\BadHttpHeaderException; | ||||
| use FireflyIII\Models\Preference; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Support\Facades\Steam; | ||||
| use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; | ||||
| use FireflyIII\Transformers\AbstractTransformer; | ||||
| @@ -66,10 +66,10 @@ abstract class Controller extends BaseController | ||||
|     protected const string JSON_CONTENT_TYPE        = 'application/json'; | ||||
|     protected array $accepts                        = ['application/json', 'application/vnd.api+json']; | ||||
| 
 | ||||
|     /** @var array<int, string> */ | ||||
|     protected array               $allowedSort; | ||||
|     protected bool                $convertToPrimary = false; | ||||
|     protected TransactionCurrency $primaryCurrency; | ||||
| 
 | ||||
|     /** @deprecated use Request classes */ | ||||
|     protected ParameterBag        $parameters; | ||||
| 
 | ||||
|     /** | ||||
| @@ -78,7 +78,6 @@ abstract class Controller extends BaseController | ||||
|     public function __construct() | ||||
|     { | ||||
|         // get global parameters
 | ||||
|         $this->allowedSort = config('firefly.allowed_sort_parameters'); | ||||
|         $this->middleware( | ||||
|             function ($request, $next) { | ||||
|                 $this->parameters = $this->getParameters(); | ||||
| @@ -102,18 +101,14 @@ 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 | ||||
|     { | ||||
|         $bag      = new ParameterBag(); | ||||
|         $page     = (int)request()->get('page'); | ||||
|         if ($page < 1) { | ||||
|             $page = 1; | ||||
|         } | ||||
|         if ($page > 2 ** 16) { | ||||
|             $page = 2 ** 16; | ||||
|         } | ||||
|         $page     = min(max(1, $page), 2 ** 16); | ||||
|         $bag->set('page', $page); | ||||
| 
 | ||||
|         // some date fields:
 | ||||
| @@ -131,19 +126,15 @@ abstract class Controller extends BaseController | ||||
|             $obj  = null; | ||||
|             if (null !== $date) { | ||||
|                 try { | ||||
|                     $obj = Carbon::parse((string)$date); | ||||
|                     $obj = Carbon::parse((string)$date, config('app.timezone')); | ||||
|                 } catch (InvalidFormatException $e) { | ||||
|                     // don't care
 | ||||
|                     Log::warning( | ||||
|                         sprintf( | ||||
|                             'Ignored invalid date "%s" in API controller parameter check: %s', | ||||
|                             substr((string)$date, 0, 20), | ||||
|                             $e->getMessage() | ||||
|                         ) | ||||
|                     ); | ||||
|                     Log::warning(sprintf('Ignored invalid date "%s" in API controller parameter check: %s', substr((string)$date, 0, 20), $e->getMessage())); | ||||
|                 } | ||||
|             } | ||||
|             $bag->set($field, $obj); | ||||
|             if ($obj instanceof Carbon) { | ||||
|                 $bag->set($field, $obj); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // integer fields:
 | ||||
| @@ -159,13 +150,7 @@ abstract class Controller extends BaseController | ||||
|             } | ||||
|             if (null !== $value) { | ||||
|                 $value = (int)$value; | ||||
|                 if ($value < 1) { | ||||
|                     $value = 1; | ||||
|                 } | ||||
|                 if ($value > 2 ** 16) { | ||||
|                     $value = 2 ** 16; | ||||
|                 } | ||||
| 
 | ||||
|                 $value = min(max(1, $value), 2 ** 16); | ||||
|                 $bag->set($integer, $value); | ||||
|             } | ||||
|             if (null === $value | ||||
| @@ -175,46 +160,14 @@ abstract class Controller extends BaseController | ||||
|                 /** @var User $user */ | ||||
|                 $user     = auth()->user(); | ||||
| 
 | ||||
|                 /** @var Preference $pageSize */ | ||||
|                 $pageSize = (int)app('preferences')->getForUser($user, 'listPageSize', 50)->data; | ||||
|                 $pageSize = (int)Preferences::getForUser($user, 'listPageSize', 50)->data; | ||||
|                 $bag->set($integer, $pageSize); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // sort fields:
 | ||||
|         return $this->getSortParameters($bag); | ||||
|     } | ||||
| 
 | ||||
|     private function getSortParameters(ParameterBag $bag): ParameterBag | ||||
|     { | ||||
|         $sortParameters = []; | ||||
| 
 | ||||
|         try { | ||||
|             $param = (string)request()->query->get('sort'); | ||||
|         } catch (BadRequestException $e) { | ||||
|             Log::error('Request field "sort" contains a non-scalar value. Value set to NULL.'); | ||||
|             Log::error($e->getMessage()); | ||||
|             Log::error($e->getTraceAsString()); | ||||
|             $param = ''; | ||||
|         } | ||||
|         if ('' === $param) { | ||||
|             return $bag; | ||||
|         } | ||||
|         $parts          = explode(',', $param); | ||||
|         foreach ($parts as $part) { | ||||
|             $part      = trim($part); | ||||
|             $direction = 'asc'; | ||||
|             if ('-' === $part[0]) { | ||||
|                 $part      = substr($part, 1); | ||||
|                 $direction = 'desc'; | ||||
|             } | ||||
|             if (in_array($part, $this->allowedSort, true)) { | ||||
|                 $sortParameters[] = [$part, $direction]; | ||||
|             } | ||||
|         } | ||||
|         $bag->set('sort', $sortParameters); | ||||
| 
 | ||||
|         return $bag; | ||||
|         // return $this->getSortParameters($bag);
 | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @@ -283,8 +236,6 @@ abstract class Controller extends BaseController | ||||
|         $baseUrl  = sprintf('%s/api/v1', request()->getSchemeAndHttpHost()); | ||||
|         $manager->setSerializer(new JsonApiSerializer($baseUrl)); | ||||
| 
 | ||||
|         // $transformer->collectMetaData(new Collection([$object]));
 | ||||
| 
 | ||||
|         $resource = new Item($object, $transformer, $key); | ||||
| 
 | ||||
|         return $manager->createData($resource)->toArray(); | ||||
|   | ||||
| @@ -46,6 +46,7 @@ use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; | ||||
| use FireflyIII\Repositories\Tag\TagRepositoryInterface; | ||||
| use FireflyIII\Services\Internal\Destroy\AccountDestroyService; | ||||
| use FireflyIII\Services\Internal\Destroy\JournalDestroyService; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| 
 | ||||
| @@ -102,7 +103,7 @@ class DestroyController extends Controller | ||||
|             default                  => throw new FireflyException(sprintf('200033: This endpoint can\'t handle object "%s"', $objects)), | ||||
|         }; | ||||
| 
 | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -76,7 +76,7 @@ class BudgetController extends Controller | ||||
| 
 | ||||
|         /** @var Budget $budget */ | ||||
|         foreach ($budgets as $budget) { | ||||
|             $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection([$budget])); | ||||
|             $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection()->push($budget)); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|   | ||||
| @@ -76,7 +76,7 @@ class CategoryController extends Controller | ||||
| 
 | ||||
|         /** @var Category $category */ | ||||
|         foreach ($categories as $category) { | ||||
|             $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection([$category])); | ||||
|             $expenses = $this->opsRepository->sumExpenses($start, $end, $assetAccounts, new Collection()->push($category)); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|   | ||||
| @@ -76,7 +76,7 @@ class CategoryController extends Controller | ||||
| 
 | ||||
|         /** @var Category $category */ | ||||
|         foreach ($categories as $category) { | ||||
|             $expenses = $this->opsRepository->sumIncome($start, $end, $assetAccounts, new Collection([$category])); | ||||
|             $expenses = $this->opsRepository->sumIncome($start, $end, $assetAccounts, new Collection()->push($category)); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|   | ||||
| @@ -29,6 +29,7 @@ use FireflyIII\Api\V1\Requests\Insight\GenericRequest; | ||||
| use FireflyIII\Enums\TransactionTypeEnum; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Facades\Steam; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -71,7 +72,7 @@ class PeriodController extends Controller | ||||
|                 'currency_id'      => (string) $currencyId, | ||||
|                 'currency_code'    => $currencyCode, | ||||
|             ]; | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field])); | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], Steam::positive($journal[$field])); | ||||
|             $response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference']; // float but on purpose.
 | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -30,6 +30,7 @@ use FireflyIII\Enums\TransactionTypeEnum; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Repositories\Tag\TagRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Facades\Steam; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -97,7 +98,7 @@ class TagController extends Controller | ||||
|                 'currency_id'      => (string) $currencyId, | ||||
|                 'currency_code'    => $currencyCode, | ||||
|             ]; | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field])); | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], Steam::positive($journal[$field])); | ||||
|             $response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference']; | ||||
| 
 | ||||
|         } | ||||
| @@ -148,7 +149,7 @@ class TagController extends Controller | ||||
|                         'currency_id'      => (string) $currencyId, | ||||
|                         'currency_code'    => $journal['currency_code'], | ||||
|                     ]; | ||||
|                     $response[$key]['difference']       = bcadd((string) $response[$key]['difference'], (string) app('steam')->positive($journal['amount'])); | ||||
|                     $response[$key]['difference']       = bcadd((string) $response[$key]['difference'], Steam::positive($journal['amount'])); | ||||
|                     $response[$key]['difference_float'] = (float) $response[$key]['difference']; | ||||
|                 } | ||||
| 
 | ||||
| @@ -160,10 +161,7 @@ class TagController extends Controller | ||||
|                         'currency_id'      => (string) $foreignCurrencyId, | ||||
|                         'currency_code'    => $journal['foreign_currency_code'], | ||||
|                     ]; | ||||
|                     $response[$foreignKey]['difference']       = bcadd( | ||||
|                         (string) $response[$foreignKey]['difference'], | ||||
|                         (string) app('steam')->positive($journal['foreign_amount']) | ||||
|                     ); | ||||
|                     $response[$foreignKey]['difference']       = bcadd((string) $response[$foreignKey]['difference'], Steam::positive($journal['foreign_amount'])); | ||||
|                     $response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; | ||||
|                 } | ||||
|             } | ||||
|   | ||||
| @@ -76,7 +76,7 @@ class CategoryController extends Controller | ||||
| 
 | ||||
|         /** @var Category $category */ | ||||
|         foreach ($categories as $category) { | ||||
|             $expenses = $this->opsRepository->sumTransfers($start, $end, $assetAccounts, new Collection([$category])); | ||||
|             $expenses = $this->opsRepository->sumTransfers($start, $end, $assetAccounts, new Collection()->push($category)); | ||||
| 
 | ||||
|             /** @var array $expense */ | ||||
|             foreach ($expenses as $expense) { | ||||
|   | ||||
| @@ -29,6 +29,7 @@ use FireflyIII\Api\V1\Requests\Insight\GenericRequest; | ||||
| use FireflyIII\Enums\TransactionTypeEnum; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Facades\Steam; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -71,7 +72,7 @@ class PeriodController extends Controller | ||||
|                 'currency_id'      => (string) $currencyId, | ||||
|                 'currency_code'    => $currencyCode, | ||||
|             ]; | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field])); | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], Steam::positive($journal[$field])); | ||||
|             $response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference']; | ||||
| 
 | ||||
|         } | ||||
|   | ||||
| @@ -30,6 +30,7 @@ use FireflyIII\Enums\TransactionTypeEnum; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Repositories\Tag\TagRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Facades\Steam; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -95,7 +96,7 @@ class TagController extends Controller | ||||
|                 'currency_id'      => (string) $currencyId, | ||||
|                 'currency_code'    => $currencyCode, | ||||
|             ]; | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], (string) app('steam')->positive($journal[$field])); | ||||
|             $response[$currencyId]['difference']       = bcadd($response[$currencyId]['difference'], Steam::positive($journal[$field])); | ||||
|             $response[$currencyId]['difference_float'] = (float) $response[$currencyId]['difference']; | ||||
| 
 | ||||
|         } | ||||
| @@ -146,7 +147,7 @@ class TagController extends Controller | ||||
|                         'currency_id'      => (string) $currencyId, | ||||
|                         'currency_code'    => $journal['currency_code'], | ||||
|                     ]; | ||||
|                     $response[$key]['difference']       = bcadd((string) $response[$key]['difference'], (string) app('steam')->positive($journal['amount'])); | ||||
|                     $response[$key]['difference']       = bcadd((string) $response[$key]['difference'], Steam::positive($journal['amount'])); | ||||
|                     $response[$key]['difference_float'] = (float) $response[$key]['difference']; | ||||
|                 } | ||||
| 
 | ||||
| @@ -160,7 +161,7 @@ class TagController extends Controller | ||||
|                     ]; | ||||
|                     $response[$foreignKey]['difference']       = bcadd( | ||||
|                         (string) $response[$foreignKey]['difference'], | ||||
|                         (string) app('steam')->positive($journal['foreign_amount']) | ||||
|                         Steam::positive($journal['foreign_amount']) | ||||
|                     ); | ||||
|                     $response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; // intentional float
 | ||||
|                 } | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Account; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\Account; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -60,7 +61,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(Account $account): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($account, null); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Models\Account; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Api\V1\Requests\PaginationRequest; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Models\Account; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| @@ -70,25 +70,25 @@ class ListController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function attachments(Account $account): JsonResponse | ||||
|     public function attachments(PaginationRequest $request, Account $account): JsonResponse | ||||
|     { | ||||
|         $manager     = $this->getManager(); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         [ | ||||
|             'limit'  => $limit, | ||||
|             'offset' => $offset, | ||||
|             'page'   => $page, | ||||
|         ]            = $request->attributes->all(); | ||||
|         $collection  = $this->repository->getAttachments($account); | ||||
| 
 | ||||
|         $count       = $collection->count(); | ||||
|         $attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $attachments = $collection->slice($offset, $limit); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator   = new LengthAwarePaginator($attachments, $count, $limit, $page); | ||||
|         $paginator->setPath(route('api.v1.accounts.attachments', [$account->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var AttachmentTransformer $transformer */ | ||||
|         $transformer = app(AttachmentTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource    = new FractalCollection($attachments, $transformer, 'attachments'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| @@ -96,21 +96,21 @@ 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 | ||||
|     public function piggyBanks(PaginationRequest $request, Account $account): JsonResponse | ||||
|     { | ||||
|         // create some objects:
 | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         [ | ||||
|             'limit'  => $limit, | ||||
|             'offset' => $offset, | ||||
|             'page'   => $page, | ||||
|         ]            = $request->attributes->all(); | ||||
| 
 | ||||
|         // get list of piggy banks. Count it and split it.
 | ||||
|         $collection  = $this->repository->getPiggyBanks($account); | ||||
|         $count       = $collection->count(); | ||||
|         $piggyBanks  = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         $piggyBanks  = $collection->slice(($page - 1) * $limit, $limit); | ||||
| 
 | ||||
|         // enrich
 | ||||
|         /** @var User $admin */ | ||||
| @@ -120,12 +120,12 @@ class ListController extends Controller | ||||
|         $piggyBanks  = $enrichment->enrich($piggyBanks); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator   = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); | ||||
|         $paginator   = new LengthAwarePaginator($piggyBanks, $count, $limit, $page); | ||||
|         $paginator->setPath(route('api.v1.accounts.piggy-banks', [$account->id]).$this->buildParams()); | ||||
| 
 | ||||
|         /** @var PiggyBankTransformer $transformer */ | ||||
|         $transformer = app(PiggyBankTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|         // $transformer->setParameters($this->parameters);
 | ||||
| 
 | ||||
|         $resource    = new FractalCollection($piggyBanks, $transformer, 'piggy-banks'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| @@ -135,8 +135,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * Show all transaction groups related to the account. | ||||
|      * | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function transactions(Request $request, Account $account): JsonResponse | ||||
|     { | ||||
| @@ -152,7 +150,7 @@ class ListController extends Controller | ||||
|         // use new group collector:
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector    = app(GroupCollectorInterface::class); | ||||
|         $collector->setUser($admin)->setAccounts(new Collection([$account])) | ||||
|         $collector->setUser($admin)->setAccounts(new Collection()->push($account)) | ||||
|             ->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types) | ||||
|         ; | ||||
| 
 | ||||
|   | ||||
| @@ -25,7 +25,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V1\Controllers\Models\Account; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Api\V1\Requests\Models\Account\ShowRequest; | ||||
| use FireflyIII\Models\Account; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Support\Http\Api\AccountFilter; | ||||
| @@ -33,7 +33,6 @@ use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment; | ||||
| use FireflyIII\Transformers\AccountTransformer; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Http\Request; | ||||
| use Illuminate\Pagination\LengthAwarePaginator; | ||||
| use League\Fractal\Pagination\IlluminatePaginatorAdapter; | ||||
| use League\Fractal\Resource\Collection as FractalCollection; | ||||
| @@ -68,42 +67,49 @@ class ShowController extends Controller | ||||
| 
 | ||||
|     /** | ||||
|      * Display a listing of the resource. | ||||
|      * | ||||
|      * @throws FireflyException | ||||
|      */ | ||||
|     public function index(Request $request): JsonResponse | ||||
|     public function index(ShowRequest $request): JsonResponse | ||||
|     { | ||||
|         $manager     = $this->getManager(); | ||||
|         $type        = $request->get('type') ?? 'all'; | ||||
|         $this->parameters->set('type', $type); | ||||
| 
 | ||||
|         // types to get, page size:
 | ||||
|         $types       = $this->mapAccountTypes($this->parameters->get('type')); | ||||
|         $pageSize    = $this->parameters->get('limit'); | ||||
|         [ | ||||
|             '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, $this->parameters->get('sort') ?? []); | ||||
|         $collection  = $this->repository->getAccountsByType($types, $sort); | ||||
|         $count       = $collection->count(); | ||||
| 
 | ||||
|         // continue sort:
 | ||||
|         $accounts    = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); | ||||
|         // 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($offset, $limit); | ||||
| 
 | ||||
|         // enrich
 | ||||
|         /** @var User $admin */ | ||||
|         $admin       = auth()->user(); | ||||
|         $enrichment  = new AccountEnrichment(); | ||||
|         $enrichment->setDate($this->parameters->get('date')); | ||||
|         $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, $pageSize, $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)); | ||||
| @@ -117,26 +123,30 @@ class ShowController extends Controller | ||||
|      * | ||||
|      * Show single instance. | ||||
|      */ | ||||
|     public function show(Account $account): JsonResponse | ||||
|     public function show(ShowRequest $request, Account $account): JsonResponse | ||||
|     { | ||||
|         // 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')); | ||||
|         $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); | ||||
|     } | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Models\Account\UpdateRequest; | ||||
| use FireflyIII\Models\Account; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment; | ||||
| use FireflyIII\Transformers\AccountTransformer; | ||||
| use FireflyIII\User; | ||||
| @@ -74,7 +75,7 @@ class UpdateController extends Controller | ||||
|         $account      = $this->repository->update($account, $data); | ||||
|         $manager      = $this->getManager(); | ||||
|         $account->refresh(); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         // enrich
 | ||||
|         /** @var User $admin */ | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Middleware\ApiDemoUser; | ||||
| use FireflyIII\Models\Attachment; | ||||
| use FireflyIII\Repositories\Attachment\AttachmentRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| @@ -74,7 +75,7 @@ class DestroyController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         $this->repository->destroy($attachment); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
| @@ -114,8 +111,8 @@ class ShowController extends Controller | ||||
|     public function show(AvailableBudget $availableBudget): JsonResponse | ||||
|     { | ||||
|         $manager         = $this->getManager(); | ||||
|         $start           = $this->parameters->get('start'); | ||||
|         $end             = $this->parameters->get('end'); | ||||
|         //        $start           = $this->parameters->get('start');
 | ||||
|         //        $end             = $this->parameters->get('end');
 | ||||
| 
 | ||||
|         /** @var AvailableBudgetTransformer $transformer */ | ||||
|         $transformer     = app(AvailableBudgetTransformer::class); | ||||
| @@ -126,8 +123,8 @@ class ShowController extends Controller | ||||
|         $admin           = auth()->user(); | ||||
|         $enrichment      = new AvailableBudgetEnrichment(); | ||||
|         $enrichment->setUser($admin); | ||||
|         $enrichment->setStart($start); | ||||
|         $enrichment->setEnd($end); | ||||
|         //        $enrichment->setStart($start);
 | ||||
|         //        $enrichment->setEnd($end);
 | ||||
|         $availableBudget = $enrichment->enrichSingle($availableBudget); | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Bill; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\Bill; | ||||
| use FireflyIII\Repositories\Bill\BillRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -61,7 +62,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(Bill $bill): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($bill); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Budget; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\Budget; | ||||
| use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -61,7 +62,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(Budget $budget): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($budget); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -67,7 +67,9 @@ class StoreController extends Controller | ||||
|      */ | ||||
|     public function store(StoreRequest $request): JsonResponse | ||||
|     { | ||||
|         $budget      = $this->repository->store($request->getAll()); | ||||
|         $data        = $request->getAll(); | ||||
|         $data['fire_webhooks'] ??= true; | ||||
|         $budget      = $this->repository->store($data); | ||||
|         $budget->refresh(); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|   | ||||
| @@ -57,15 +57,10 @@ class UpdateController extends Controller | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * This endpoint is documented at: | ||||
|      * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/budgets/updateBudget
 | ||||
|      * | ||||
|      * Update a budget. | ||||
|      */ | ||||
|     public function update(UpdateRequest $request, Budget $budget): JsonResponse | ||||
|     { | ||||
|         $data        = $request->getAll(); | ||||
|         $data['fire_webhooks'] ??= true; | ||||
|         $budget      = $this->repository->update($budget, $data); | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|   | ||||
| @@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\Budget; | ||||
| use FireflyIII\Models\BudgetLimit; | ||||
| use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| @@ -71,7 +72,7 @@ class DestroyController extends Controller | ||||
|             throw new FireflyException('20028: The budget limit does not belong to the budget.'); | ||||
|         } | ||||
|         $this->blRepository->destroyBudgetLimit($budgetLimit); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -84,6 +84,8 @@ class ShowController extends Controller | ||||
|         $enrichment->setUser($admin); | ||||
|         $enrichment->setStart($this->parameters->get('start')); | ||||
|         $enrichment->setEnd($this->parameters->get('end')); | ||||
| 
 | ||||
|         /** @var Budget $budget */ | ||||
|         $budget       = $enrichment->enrichSingle($budget); | ||||
| 
 | ||||
| 
 | ||||
| @@ -170,7 +172,6 @@ class ShowController extends Controller | ||||
| 
 | ||||
|         /** @var BudgetLimitTransformer $transformer */ | ||||
|         $transformer = app(BudgetLimitTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource    = new Item($budgetLimit, $transformer, 'budget_limits'); | ||||
| 
 | ||||
|   | ||||
| @@ -70,6 +70,7 @@ class StoreController extends Controller | ||||
|         $data               = $request->getAll(); | ||||
|         $data['start_date'] = $data['start']; | ||||
|         $data['end_date']   = $data['end']; | ||||
|         $data['fire_webhooks'] ??= true; | ||||
|         $data['budget_id']  = $budget->id; | ||||
| 
 | ||||
|         $budgetLimit        = $this->blRepository->store($data); | ||||
|   | ||||
| @@ -77,6 +77,7 @@ class UpdateController extends Controller | ||||
|             throw new FireflyException('20028: The budget limit does not belong to the budget.'); | ||||
|         } | ||||
|         $data              = $request->getAll(); | ||||
|         $data['fire_webhooks'] ??= true; | ||||
|         $data['budget_id'] = $budget->id; | ||||
|         $budgetLimit       = $this->blRepository->update($budgetLimit, $data); | ||||
|         $manager           = $this->getManager(); | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Category; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\Category; | ||||
| use FireflyIII\Repositories\Category\CategoryRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -61,7 +62,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(Category $category): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($category); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use Carbon\Carbon; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Models\CurrencyExchangeRate\DestroyRequest; | ||||
| use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\CurrencyExchangeRate; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface; | ||||
| @@ -72,9 +73,12 @@ 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); | ||||
|         } | ||||
|         if (!$exchangeRate instanceof CurrencyExchangeRate) { | ||||
|             throw new FireflyException('Bla'); | ||||
|         } | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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(); | ||||
|         } | ||||
| 
 | ||||
|   | ||||
| @@ -33,6 +33,7 @@ use FireflyIII\Enums\UserRoleEnum; | ||||
| use FireflyIII\Models\CurrencyExchangeRate; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Repositories\ExchangeRate\ExchangeRateRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Amount; | ||||
| use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; | ||||
| use FireflyIII\Transformers\ExchangeRateTransformer; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| @@ -69,7 +70,7 @@ class StoreController extends Controller | ||||
|         foreach ($data as $date => $rate) { | ||||
|             $date     = Carbon::createFromFormat('Y-m-d', $date); | ||||
|             $existing = $this->repository->getSpecificRateOnDate($from, $to, $date); | ||||
|             if (null !== $existing) { | ||||
|             if ($existing instanceof CurrencyExchangeRate) { | ||||
|                 // update existing rate.
 | ||||
|                 $existing = $this->repository->updateExchangeRate($existing, $rate); | ||||
|                 $collection->push($existing); | ||||
| @@ -98,12 +99,9 @@ class StoreController extends Controller | ||||
|         $from        = $request->getFromCurrency(); | ||||
|         $collection  = new Collection(); | ||||
|         foreach ($data['rates'] as $key => $rate) { | ||||
|             $to       = TransactionCurrency::where('code', $key)->first(); | ||||
|             if (null === $to) { | ||||
|                 continue; // should not happen.
 | ||||
|             } | ||||
|             $to       = Amount::getTransactionCurrencyByCode($key); | ||||
|             $existing = $this->repository->getSpecificRateOnDate($from, $to, $date); | ||||
|             if (null !== $existing) { | ||||
|             if ($existing instanceof CurrencyExchangeRate) { | ||||
|                 // update existing rate.
 | ||||
|                 $existing = $this->repository->updateExchangeRate($existing, $rate); | ||||
|                 $collection->push($existing); | ||||
|   | ||||
| @@ -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(); | ||||
| @@ -82,7 +82,6 @@ class UpdateController extends Controller | ||||
|         $exchangeRate = $this->repository->updateExchangeRate($exchangeRate, $rate, $date); | ||||
| 
 | ||||
|         $transformer  = new ExchangeRateTransformer(); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         return response() | ||||
|             ->api($this->jsonApiObject(self::RESOURCE_KEY, $exchangeRate, $transformer)) | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\ObjectGroup; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\ObjectGroup; | ||||
| use FireflyIII\Repositories\ObjectGroup\ObjectGroupRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| @@ -64,7 +65,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(ObjectGroup $objectGroup): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($objectGroup); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\PiggyBank; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\PiggyBank; | ||||
| use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -61,7 +62,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(PiggyBank $piggyBank): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($piggyBank); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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(); | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Recurrence; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\Recurrence; | ||||
| use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| /** | ||||
| @@ -61,7 +62,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(Recurrence $recurrence): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($recurrence); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
							
								
								
									
										124
									
								
								app/Api/V1/Controllers/Models/Recurrence/TriggerController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								app/Api/V1/Controllers/Models/Recurrence/TriggerController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,124 @@ | ||||
| <?php | ||||
| 
 | ||||
| declare(strict_types=1); | ||||
| /* | ||||
|  * TriggerController.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\Controllers\Models\Recurrence; | ||||
| 
 | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Generic\SingleDateRequest; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Jobs\CreateRecurringTransactions; | ||||
| use FireflyIII\Models\Recurrence; | ||||
| use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment; | ||||
| use FireflyIII\Transformers\TransactionGroupTransformer; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Pagination\LengthAwarePaginator; | ||||
| use Illuminate\Support\Collection; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| use League\Fractal\Pagination\IlluminatePaginatorAdapter; | ||||
| use League\Fractal\Resource\Collection as FractalCollection; | ||||
| 
 | ||||
| class TriggerController extends Controller | ||||
| { | ||||
|     private RecurringRepositoryInterface $repository; | ||||
| 
 | ||||
|     /** | ||||
|      * RecurrenceController constructor. | ||||
|      */ | ||||
|     public function __construct() | ||||
|     { | ||||
|         parent::__construct(); | ||||
|         $this->middleware( | ||||
|             function ($request, $next) { | ||||
|                 $this->repository = app(RecurringRepositoryInterface::class); | ||||
|                 $this->repository->setUser(auth()->user()); | ||||
| 
 | ||||
|                 return $next($request); | ||||
|             } | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public function trigger(SingleDateRequest $request, Recurrence $recurrence): JsonResponse | ||||
|     { | ||||
|         // find recurrence occurrence for this date and trigger it.
 | ||||
|         // grab the date from the last time the recurrence fired:
 | ||||
|         $backupDate                 = $recurrence->latest_date; | ||||
|         $date                       = $request->getDate(); | ||||
| 
 | ||||
|         // fire the recurring cron job on the given date, then post-date the created transaction.
 | ||||
|         Log::info(sprintf('Trigger: will now fire recurring cron job task for date "%s".', $date->format('Y-m-d H:i:s'))); | ||||
| 
 | ||||
|         /** @var CreateRecurringTransactions $job */ | ||||
|         $job                        = app(CreateRecurringTransactions::class); | ||||
|         $job->setRecurrences(new Collection()->push($recurrence)); | ||||
|         $job->setDate($date); | ||||
|         $job->setForce(false); | ||||
|         $job->handle(); | ||||
|         Log::debug('Done with recurrence.'); | ||||
| 
 | ||||
|         $groups                     = $job->getGroups(); | ||||
|         $this->repository->markGroupsAsNow($groups); | ||||
|         $recurrence->latest_date    = $backupDate; | ||||
|         $recurrence->latest_date_tz = $backupDate?->format('e'); | ||||
|         $recurrence->save(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         // enrich groups and return them:
 | ||||
| 
 | ||||
|         $paginator                  = new LengthAwarePaginator(new Collection(), 0, 1); | ||||
|         if ($groups->count() > 0) { | ||||
|             /** @var User $admin */ | ||||
|             $admin     = auth()->user(); | ||||
| 
 | ||||
|             // use new group collector:
 | ||||
|             /** @var GroupCollectorInterface $collector */ | ||||
|             $collector = app(GroupCollectorInterface::class); | ||||
|             $collector | ||||
|                 ->setUser($admin) | ||||
|                 ->setIds($groups->pluck('id')->toArray()) | ||||
|                 ->withAPIInformation() | ||||
|             ; | ||||
|             $paginator = $collector->getPaginatedGroups(); | ||||
|         } | ||||
| 
 | ||||
|         $manager                    = $this->getManager(); | ||||
|         $paginator->setPath(route('api.v1.recurrences.trigger', [$recurrence->id]).$this->buildParams()); | ||||
| 
 | ||||
|         // enrich
 | ||||
|         $admin                      = auth()->user(); | ||||
|         $enrichment                 = new TransactionGroupEnrichment(); | ||||
|         $enrichment->setUser($admin); | ||||
|         $transactions               = $enrichment->enrich($paginator->getCollection()); | ||||
| 
 | ||||
|         /** @var TransactionGroupTransformer $transformer */ | ||||
|         $transformer                = app(TransactionGroupTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource                   = new FractalCollection($transactions, $transformer, 'transactions'); | ||||
|         $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); | ||||
| 
 | ||||
|         return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
| } | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Rule; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\Rule; | ||||
| use FireflyIII\Repositories\Rule\RuleRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| @@ -65,7 +66,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(Rule $rule): JsonResponse | ||||
|     { | ||||
|         $this->ruleRepository->destroy($rule); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -75,7 +75,7 @@ class TriggerController extends Controller | ||||
| 
 | ||||
|         /** @var RuleEngineInterface $ruleEngine */ | ||||
|         $ruleEngine   = app(RuleEngineInterface::class); | ||||
|         $ruleEngine->setRules(new Collection([$rule])); | ||||
|         $ruleEngine->setRules(new Collection()->push($rule)); | ||||
| 
 | ||||
|         // overrule the rule(s) if necessary.
 | ||||
|         if (array_key_exists('start', $parameters) && null !== $parameters['start']) { | ||||
| @@ -129,7 +129,7 @@ class TriggerController extends Controller | ||||
| 
 | ||||
|         /** @var RuleEngineInterface $ruleEngine */ | ||||
|         $ruleEngine = app(RuleEngineInterface::class); | ||||
|         $ruleEngine->setRules(new Collection([$rule])); | ||||
|         $ruleEngine->setRules(new Collection()->push($rule)); | ||||
| 
 | ||||
|         // overrule the rule(s) if necessary.
 | ||||
|         if (array_key_exists('start', $parameters) && null !== $parameters['start']) { | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\RuleGroup; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\RuleGroup; | ||||
| use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| @@ -65,7 +66,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(RuleGroup $ruleGroup): JsonResponse | ||||
|     { | ||||
|         $this->ruleGroupRepository->destroy($ruleGroup, null); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\Tag; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\Tag; | ||||
| use FireflyIII\Repositories\Tag\TagRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| @@ -65,7 +66,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(Tag $tag): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroy($tag); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -32,6 +32,7 @@ use FireflyIII\Models\TransactionGroup; | ||||
| use FireflyIII\Models\TransactionJournal; | ||||
| use FireflyIII\Repositories\Journal\JournalRepositoryInterface; | ||||
| use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepository; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| @@ -92,7 +93,7 @@ class DestroyController extends Controller | ||||
| 
 | ||||
|         $this->groupRepository->destroy($transactionGroup); | ||||
| 
 | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         /** @var Account $account */ | ||||
|         foreach ($accounts as $account) { | ||||
| @@ -112,7 +113,7 @@ class DestroyController extends Controller | ||||
|     public function destroyJournal(TransactionJournal $transactionJournal): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroyJournal($transactionJournal); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     { | ||||
|   | ||||
| @@ -33,6 +33,7 @@ use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; | ||||
| use FireflyIII\Rules\IsDuplicateTransaction; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Support\Http\Api\TransactionFilter; | ||||
| use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment; | ||||
| use FireflyIII\Transformers\TransactionGroupTransformer; | ||||
| @@ -107,7 +108,7 @@ class StoreController extends Controller | ||||
| 
 | ||||
|             throw new ValidationException($validator); | ||||
|         } | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
|         $applyRules         = $data['apply_rules'] ?? true; | ||||
|         $fireWebhooks       = $data['fire_webhooks'] ?? true; | ||||
|         event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); | ||||
|   | ||||
| @@ -30,6 +30,7 @@ use FireflyIII\Events\UpdatedTransactionGroup; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Models\TransactionGroup; | ||||
| use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment; | ||||
| use FireflyIII\Transformers\TransactionGroupTransformer; | ||||
| use FireflyIII\User; | ||||
| @@ -79,7 +80,7 @@ class UpdateController extends Controller | ||||
|         $newHash           = $this->groupRepository->getCompareHash($transactionGroup); | ||||
|         $manager           = $this->getManager(); | ||||
| 
 | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
|         $applyRules        = $data['apply_rules'] ?? true; | ||||
|         $fireWebhooks      = $data['fire_webhooks'] ?? true; | ||||
|         $runRecalculations = $oldHash !== $newHash; | ||||
|   | ||||
| @@ -24,14 +24,15 @@ 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; | ||||
| use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; | ||||
| use FireflyIII\Repositories\User\UserRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Support\Facades\Validator; | ||||
| use Illuminate\Validation\ValidationException; | ||||
| 
 | ||||
| /** | ||||
| @@ -89,7 +90,7 @@ class DestroyController extends Controller | ||||
|         } | ||||
| 
 | ||||
|         $this->repository->destroy($currency); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -25,14 +25,11 @@ 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; | ||||
| use FireflyIII\Models\Recurrence; | ||||
| use FireflyIII\Models\RecurrenceTransaction; | ||||
| use FireflyIII\Models\Rule; | ||||
| use FireflyIII\Models\RuleTrigger; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Repositories\Bill\BillRepositoryInterface; | ||||
| @@ -73,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 | ||||
|     { | ||||
| @@ -105,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); | ||||
| 
 | ||||
| @@ -131,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 | ||||
|     { | ||||
| @@ -166,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 | ||||
|     { | ||||
| @@ -192,7 +190,7 @@ class ListController extends Controller | ||||
|         $enrichment->setUser($admin); | ||||
|         $enrichment->setStart($this->parameters->get('start')); | ||||
|         $enrichment->setEnd($this->parameters->get('end')); | ||||
|         $bills       = $enrichment->enrichSingle($bills); | ||||
|         $bills       = $enrichment->enrich($bills); | ||||
| 
 | ||||
|         // make paginator:
 | ||||
|         $paginator   = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); | ||||
| @@ -213,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 | ||||
|     { | ||||
| @@ -251,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 | ||||
|     { | ||||
| @@ -268,7 +262,6 @@ class ListController extends Controller | ||||
|         // filter selection
 | ||||
|         $collection     = $unfiltered->filter( | ||||
|             static function (Recurrence $recurrence) use ($currency) {  // @phpstan-ignore-line
 | ||||
|                 /** @var RecurrenceTransaction $transaction */ | ||||
|                 if (array_any($recurrence->recurrenceTransactions, fn ($transaction) => $transaction->transaction_currency_id === $currency->id || $transaction->foreign_currency_id === $currency->id)) { | ||||
|                     return $recurrence; | ||||
|                 } | ||||
| @@ -305,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 | ||||
|     { | ||||
| @@ -320,7 +311,6 @@ class ListController extends Controller | ||||
| 
 | ||||
|         $collection  = $unfiltered->filter( | ||||
|             static function (Rule $rule) use ($currency) { // @phpstan-ignore-line
 | ||||
|                 /** @var RuleTrigger $trigger */ | ||||
|                 if (array_any($rule->ruleTriggers, fn ($trigger) => 'currency_is' === $trigger->trigger_type && $currency->name === $trigger->trigger_value)) { | ||||
|                     return $rule; | ||||
|                 } | ||||
| @@ -351,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,8 +26,8 @@ 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\Facades\Preferences; | ||||
| use FireflyIII\Support\Http\Api\AccountFilter; | ||||
| use FireflyIII\Support\Http\Api\TransactionFilter; | ||||
| use FireflyIII\Transformers\CurrencyTransformer; | ||||
| @@ -66,15 +66,13 @@ 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 | ||||
|     { | ||||
|         $currency    = $this->repository->store($request->getAll()); | ||||
|         if (true === $request->boolean('default')) { | ||||
|             $this->repository->makePrimary($currency); | ||||
|             app('preferences')->mark(); | ||||
|             Preferences::mark(); | ||||
|         } | ||||
|         $manager     = $this->getManager(); | ||||
| 
 | ||||
|   | ||||
| @@ -29,6 +29,7 @@ use FireflyIII\Api\V1\Requests\Models\TransactionCurrency\UpdateRequest; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\TransactionCurrency; | ||||
| use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Support\Http\Api\AccountFilter; | ||||
| use FireflyIII\Support\Http\Api\TransactionFilter; | ||||
| use FireflyIII\Transformers\CurrencyTransformer; | ||||
| @@ -98,9 +99,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 */ | ||||
| @@ -108,7 +106,7 @@ class UpdateController extends Controller | ||||
|         $this->repository->enable($currency); | ||||
|         $this->repository->makePrimary($currency); | ||||
| 
 | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         $manager     = $this->getManager(); | ||||
|         $currency->refreshForUser($user); | ||||
| @@ -127,8 +125,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 | ||||
|     { | ||||
| @@ -177,14 +173,13 @@ class UpdateController extends Controller | ||||
| 
 | ||||
|         $currency    = $this->repository->update($currency, $data); | ||||
| 
 | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         $manager     = $this->getManager(); | ||||
|         $currency->refreshForUser($user); | ||||
| 
 | ||||
|         /** @var CurrencyTransformer $transformer */ | ||||
|         $transformer = app(CurrencyTransformer::class); | ||||
|         $transformer->setParameters($this->parameters); | ||||
| 
 | ||||
|         $resource    = new Item($currency, $transformer, 'currencies'); | ||||
| 
 | ||||
|   | ||||
| @@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Models\TransactionLink; | ||||
| use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Models\TransactionJournalLink; | ||||
| use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| 
 | ||||
| @@ -66,7 +67,7 @@ class DestroyController extends Controller | ||||
|     public function destroy(TransactionJournalLink $link): JsonResponse | ||||
|     { | ||||
|         $this->repository->destroyLink($link); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Exceptions\FireflyException; | ||||
| use FireflyIII\Models\LinkType; | ||||
| use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Support\Http\Api\TransactionFilter; | ||||
| use FireflyIII\User; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| @@ -73,7 +74,7 @@ class DestroyController extends Controller | ||||
|             throw new FireflyException('200020: Link type cannot be changed.'); | ||||
|         } | ||||
|         $this->repository->destroy($linkType); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         return response()->json([], 204); | ||||
|     } | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -28,6 +28,7 @@ use FireflyIII\Api\V1\Controllers\Controller; | ||||
| use FireflyIII\Api\V1\Requests\Models\UserGroup\UpdateRequest; | ||||
| use FireflyIII\Models\UserGroup; | ||||
| use FireflyIII\Repositories\UserGroup\UserGroupRepositoryInterface; | ||||
| use FireflyIII\Support\Facades\Preferences; | ||||
| use FireflyIII\Transformers\UserGroupTransformer; | ||||
| use Illuminate\Http\JsonResponse; | ||||
| use Illuminate\Support\Facades\Log; | ||||
| @@ -59,7 +60,7 @@ class UpdateController extends Controller | ||||
|         $data        = $request->getData(); | ||||
|         $userGroup   = $this->repository->update($userGroup, $data); | ||||
|         $userGroup->refresh(); | ||||
|         app('preferences')->mark(); | ||||
|         Preferences::mark(); | ||||
| 
 | ||||
|         $transformer = new UserGroupTransformer(); | ||||
|         $transformer->setParameters($this->parameters); | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user