Compare commits

...

735 Commits

Author SHA1 Message Date
James Cole
3ed4d28c4a Merge branch 'release/5.5.0-beta.1' into main 2021-01-29 18:21:06 +01:00
James Cole
3a5abc3047 Update meta data for new release. 2021-01-29 18:19:50 +01:00
James Cole
ed06ec9a58 Merge branch 'main' into develop
# Conflicts:
#	.github/ISSUE_TEMPLATE/Custom.md
2021-01-26 19:58:30 +01:00
James Cole
fdb74a3dcd Continue work on new frontpage. 2021-01-26 19:57:20 +01:00
James Cole
fcea35ffa9 Update config.yml 2021-01-26 18:43:02 +00:00
James Cole
3c494a64f5 Create config.yml 2021-01-26 18:41:27 +00:00
James Cole
e75d9ccd0e Update issue templates 2021-01-26 18:40:30 +00:00
James Cole
ccaf9d31a6 Set upload size as "***MB" would give errors. 2021-01-26 19:28:35 +01:00
James Cole
cb6862b364 Update packages. 2021-01-26 19:28:06 +01:00
James Cole
e83416d84d Add rule for unique account number. 2021-01-26 19:27:49 +01:00
James Cole
2f8113db6b Add page limit to auto complete 2021-01-26 19:27:27 +01:00
James Cole
cbed5ce67b Merge pull request #4301 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/v-calendar-2.2.1
Bump v-calendar from 2.2.0 to 2.2.1 in /frontend
2021-01-25 08:13:12 +01:00
dependabot[bot]
c9fa1588df Bump v-calendar from 2.2.0 to 2.2.1 in /frontend
Bumps [v-calendar](https://github.com/nathanreyes/v-calendar) from 2.2.0 to 2.2.1.
- [Release notes](https://github.com/nathanreyes/v-calendar/releases)
- [Commits](https://github.com/nathanreyes/v-calendar/compare/v2.2.0...v2.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-25 05:49:39 +00:00
James Cole
22beea1a76 Merge pull request #4299 from firefly-iii/dependabot/composer/develop/filp/whoops-2.9.2 2021-01-25 06:18:44 +01:00
dependabot[bot]
b46e17667c Bump filp/whoops from 2.9.1 to 2.9.2
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.9.1 to 2.9.2.
- [Release notes](https://github.com/filp/whoops/releases)
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.9.1...2.9.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-25 05:11:08 +00:00
James Cole
e3f174621c Update composer file. 2021-01-23 07:08:31 +01:00
James Cole
2ffb98aba8 Rebuild frontend 2021-01-20 18:44:28 +01:00
James Cole
d1e462e66d Update translations. 2021-01-20 18:42:31 +01:00
James Cole
29b5513b03 Fix bad sort in bill controller 2021-01-20 18:42:07 +01:00
James Cole
8918c3ed12 Add "id:xxx" search 2021-01-20 18:41:31 +01:00
James Cole
036e50c0b6 Merge pull request #4291 from firefly-iii/dependabot/composer/laravel/framework-8.22.1
Bump laravel/framework from 8.13.0 to 8.22.1
2021-01-20 06:21:02 +01:00
dependabot[bot]
47d9f5e470 Bump laravel/framework from 8.13.0 to 8.22.1
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.13.0 to 8.22.1.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.13.0...v8.22.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-19 20:15:35 +00:00
James Cole
8efc1df385 Merge pull request #4280 from firefly-iii/dependabot/composer/develop/laravel/ui-3.2.0
Bump laravel/ui from 3.1.0 to 3.2.0
2021-01-18 09:44:53 +01:00
James Cole
fbc6d4a002 Merge pull request #4281 from firefly-iii/dependabot/composer/develop/phpunit/phpunit-9.5.1
Bump phpunit/phpunit from 9.5.0 to 9.5.1
2021-01-18 09:44:38 +01:00
James Cole
fa2c2ff7ba Merge pull request #4284 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.67
Bump phpstan/phpstan from 0.12.65 to 0.12.67
2021-01-18 09:44:24 +01:00
James Cole
787f27102e Merge pull request #4282 from firefly-iii/dependabot/composer/develop/laravel/framework-8.22.1
Bump laravel/framework from 8.21.0 to 8.22.1
2021-01-18 09:44:12 +01:00
dependabot[bot]
80a4a26eae Bump phpunit/phpunit from 9.5.0 to 9.5.1
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.5.0 to 9.5.1.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.5.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.5.0...9.5.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-18 08:37:55 +00:00
dependabot[bot]
48f89a7448 Bump phpstan/phpstan from 0.12.65 to 0.12.67
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.65 to 0.12.67.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.65...0.12.67)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-18 08:36:56 +00:00
dependabot[bot]
32081fb07c Bump laravel/framework from 8.21.0 to 8.22.1
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.21.0 to 8.22.1.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.21.0...v8.22.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-18 08:34:45 +00:00
dependabot[bot]
b13d617863 Bump laravel/ui from 3.1.0 to 3.2.0
Bumps [laravel/ui](https://github.com/laravel/ui) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/laravel/ui/releases)
- [Changelog](https://github.com/laravel/ui/blob/3.x/CHANGELOG.md)
- [Commits](https://github.com/laravel/ui/compare/v3.1.0...v3.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-18 08:34:14 +00:00
James Cole
936ead8668 Merge pull request #4279 from firefly-iii/dependabot/npm_and_yarn/develop/laravel-mix-6.0.10 2021-01-18 06:33:45 +01:00
James Cole
c01f1aa788 Merge pull request #4283 from firefly-iii/dependabot/composer/develop/vimeo/psalm-4.4.1 2021-01-18 06:32:30 +01:00
James Cole
2b9c1e65aa Merge pull request #4278 from firefly-iii/dependabot/npm_and_yarn/develop/vue-i18n-8.22.4 2021-01-18 06:31:52 +01:00
dependabot[bot]
4cd7c528f2 Bump vimeo/psalm from 4.3.2 to 4.4.1
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.3.2 to 4.4.1.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.3.2...4.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-18 05:19:22 +00:00
dependabot[bot]
74db23a972 Bump laravel-mix from 6.0.9 to 6.0.10
Bumps [laravel-mix](https://github.com/JeffreyWay/laravel-mix) from 6.0.9 to 6.0.10.
- [Release notes](https://github.com/JeffreyWay/laravel-mix/releases)
- [Changelog](https://github.com/JeffreyWay/laravel-mix/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JeffreyWay/laravel-mix/compare/v6.0.9...v6.0.10)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-18 05:07:50 +00:00
dependabot[bot]
aa009d22fc Bump vue-i18n from 8.22.3 to 8.22.4
Bumps [vue-i18n](https://github.com/kazupon/vue-i18n) from 8.22.3 to 8.22.4.
- [Release notes](https://github.com/kazupon/vue-i18n/releases)
- [Changelog](https://github.com/kazupon/vue-i18n/blob/v8.x/CHANGELOG.md)
- [Commits](https://github.com/kazupon/vue-i18n/compare/v8.22.3...v8.22.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-18 05:07:35 +00:00
James Cole
79c00548df Frontend remembers state. 2021-01-17 19:52:53 +01:00
James Cole
c86791950d Rebuild frontpage. 2021-01-17 08:52:40 +01:00
James Cole
eb5d17d695 Accidentally committed debug code. 2021-01-17 08:50:20 +01:00
James Cole
ab31cade09 Rebuild frontend 2021-01-16 04:20:28 +01:00
James Cole
99f8ed7760 Fix some final webhook code. 2021-01-15 21:01:53 +01:00
James Cole
b4f929b325 Rebuild frontend with new libraries. 2021-01-14 19:07:04 +01:00
James Cole
ca1dcc8038 Merge pull request #4257 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/popperjs/core-2.6.0
Bump @popperjs/core from 2.5.4 to 2.6.0 in /frontend
2021-01-11 08:38:05 +01:00
James Cole
a545f1ef88 Merge pull request #4258 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/v-calendar-2.2.0
Bump v-calendar from 2.1.6 to 2.2.0 in /frontend
2021-01-11 08:37:55 +01:00
James Cole
4a64fea352 Merge pull request #4256 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-1.32.2
Bump sass from 1.29.0 to 1.32.2 in /frontend
2021-01-11 08:37:23 +01:00
James Cole
e4800851b0 Merge pull request #4255 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/cross-env-7.0.3
Bump cross-env from 7.0.2 to 7.0.3 in /frontend
2021-01-11 08:36:34 +01:00
James Cole
95681519a8 Merge pull request #4252 from firefly-iii/dependabot/composer/develop/doctrine/dbal-3.0.0
Bump doctrine/dbal from 2.12.1 to 3.0.0
2021-01-11 08:36:16 +01:00
James Cole
f1037c3616 Merge pull request #4254 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/overlayscrollbars-1.13.1
Bump overlayscrollbars from 1.13.0 to 1.13.1 in /frontend
2021-01-11 08:33:00 +01:00
James Cole
cfe83c7e00 Merge pull request #4253 from firefly-iii/dependabot/composer/develop/nunomaduro/larastan-0.6.12
Bump nunomaduro/larastan from 0.6.11 to 0.6.12
2021-01-11 08:30:07 +01:00
James Cole
157f0fc7b6 Merge pull request #4251 from firefly-iii/dependabot/composer/develop/barryvdh/laravel-debugbar-3.5.2
Bump barryvdh/laravel-debugbar from 3.5.1 to 3.5.2
2021-01-11 08:29:43 +01:00
James Cole
261ab7251c Merge pull request #4250 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.65
Bump phpstan/phpstan from 0.12.64 to 0.12.65
2021-01-11 08:29:31 +01:00
James Cole
61e673ea7b Merge pull request #4249 from firefly-iii/dependabot/composer/develop/laravel/framework-8.21.0
Bump laravel/framework from 8.20.1 to 8.21.0
2021-01-11 08:29:04 +01:00
James Cole
3fb3fc698a Merge pull request #4248 from firefly-iii/dependabot/npm_and_yarn/develop/uiv-1.2.1
Bump uiv from 1.2.0 to 1.2.1
2021-01-11 08:28:51 +01:00
James Cole
f3aabf6ab8 Merge pull request #4247 from firefly-iii/dependabot/npm_and_yarn/develop/vue-i18n-8.22.3
Bump vue-i18n from 8.22.2 to 8.22.3
2021-01-11 08:26:29 +01:00
dependabot[bot]
d752c38d3d Bump v-calendar from 2.1.6 to 2.2.0 in /frontend
Bumps [v-calendar](https://github.com/nathanreyes/v-calendar) from 2.1.6 to 2.2.0.
- [Release notes](https://github.com/nathanreyes/v-calendar/releases)
- [Commits](https://github.com/nathanreyes/v-calendar/commits)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:54:42 +00:00
dependabot[bot]
48bfae99f4 Bump @popperjs/core from 2.5.4 to 2.6.0 in /frontend
Bumps [@popperjs/core](https://github.com/popperjs/popper-core) from 2.5.4 to 2.6.0.
- [Release notes](https://github.com/popperjs/popper-core/releases)
- [Commits](https://github.com/popperjs/popper-core/compare/v2.5.4...v2.6.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:54:01 +00:00
dependabot[bot]
116c772b1c Bump sass from 1.29.0 to 1.32.2 in /frontend
Bumps [sass](https://github.com/sass/dart-sass) from 1.29.0 to 1.32.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.29.0...1.32.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:53:20 +00:00
dependabot[bot]
e784dd2399 Bump cross-env from 7.0.2 to 7.0.3 in /frontend
Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 7.0.2 to 7.0.3.
- [Release notes](https://github.com/kentcdodds/cross-env/releases)
- [Changelog](https://github.com/kentcdodds/cross-env/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kentcdodds/cross-env/compare/v7.0.2...v7.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:50:06 +00:00
dependabot[bot]
19aec7e6d6 Bump overlayscrollbars from 1.13.0 to 1.13.1 in /frontend
Bumps [overlayscrollbars](https://github.com/KingSora/OverlayScrollbars) from 1.13.0 to 1.13.1.
- [Release notes](https://github.com/KingSora/OverlayScrollbars/releases)
- [Commits](https://github.com/KingSora/OverlayScrollbars/compare/v1.13.0...1.13.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:49:22 +00:00
dependabot[bot]
0fdce6191b Bump nunomaduro/larastan from 0.6.11 to 0.6.12
Bumps [nunomaduro/larastan](https://github.com/nunomaduro/larastan) from 0.6.11 to 0.6.12.
- [Release notes](https://github.com/nunomaduro/larastan/releases)
- [Changelog](https://github.com/nunomaduro/larastan/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nunomaduro/larastan/compare/v0.6.11...v0.6.12)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:14:14 +00:00
dependabot[bot]
ee3ad3e498 Bump doctrine/dbal from 2.12.1 to 3.0.0
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 2.12.1 to 3.0.0.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Upgrade guide](https://github.com/doctrine/dbal/blob/2.12.x/UPGRADE.md)
- [Commits](https://github.com/doctrine/dbal/compare/2.12.1...3.0.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:13:45 +00:00
dependabot[bot]
7b4b6a2356 Bump barryvdh/laravel-debugbar from 3.5.1 to 3.5.2
Bumps [barryvdh/laravel-debugbar](https://github.com/barryvdh/laravel-debugbar) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/barryvdh/laravel-debugbar/releases)
- [Changelog](https://github.com/barryvdh/laravel-debugbar/blob/master/changelog.md)
- [Commits](https://github.com/barryvdh/laravel-debugbar/compare/v3.5.1...v3.5.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:13:28 +00:00
dependabot[bot]
b4f47e793b Bump phpstan/phpstan from 0.12.64 to 0.12.65
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.64 to 0.12.65.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.64...0.12.65)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:13:04 +00:00
dependabot[bot]
aff7651697 Bump laravel/framework from 8.20.1 to 8.21.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.20.1 to 8.21.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.20.1...v8.21.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:12:05 +00:00
dependabot[bot]
27003f15e7 Bump uiv from 1.2.0 to 1.2.1
Bumps [uiv](https://github.com/uiv-lib/uiv) from 1.2.0 to 1.2.1.
- [Release notes](https://github.com/uiv-lib/uiv/releases)
- [Commits](https://github.com/uiv-lib/uiv/compare/v1.2.0...v1.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:11:50 +00:00
dependabot[bot]
b501cd4555 Bump vue-i18n from 8.22.2 to 8.22.3
Bumps [vue-i18n](https://github.com/kazupon/vue-i18n) from 8.22.2 to 8.22.3.
- [Release notes](https://github.com/kazupon/vue-i18n/releases)
- [Changelog](https://github.com/kazupon/vue-i18n/blob/v8.x/CHANGELOG.md)
- [Commits](https://github.com/kazupon/vue-i18n/compare/v8.22.2...v8.22.3)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 05:11:30 +00:00
James Cole
b40581919c Merge branch 'main' into develop
# Conflicts:
#	frontend/package-lock.json
2021-01-08 20:16:16 +01:00
James Cole
b2fce4d487 Fix #4241 2021-01-08 20:15:28 +01:00
James Cole
24b7543f72 Fix #4235 2021-01-07 20:31:48 +01:00
James Cole
b040db7976 Merge pull request #4231 from MihataBG/patch-3
Update bills.twig
2021-01-06 08:28:08 +01:00
MihataBG
405c487518 Update bills.twig 2021-01-06 09:15:54 +02:00
MihataBG
84b0e344fe Update bills.twig
Hidden column names in mobile web page of "Default financial report" -> Bills table.
2021-01-05 22:06:23 +02:00
James Cole
48cae87ed0 Merge pull request #4229 from firefly-iii/dependabot/npm_and_yarn/frontend/axios-0.21.1
Bump axios from 0.21.0 to 0.21.1 in /frontend
2021-01-05 17:41:30 +01:00
dependabot[bot]
cd5ce36b5d Bump axios from 0.21.0 to 0.21.1 in /frontend
Bumps [axios](https://github.com/axios/axios) from 0.21.0 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.0...v0.21.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-05 16:27:25 +00:00
James Cole
3d71c924fd Merge pull request #4226 from firefly-iii/dependabot/npm_and_yarn/axios-0.21.1
Bump axios from 0.21.0 to 0.21.1
2021-01-05 17:26:33 +01:00
dependabot[bot]
e6a44706a3 Bump axios from 0.21.0 to 0.21.1
Bumps [axios](https://github.com/axios/axios) from 0.21.0 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.0...v0.21.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-05 08:06:20 +00:00
James Cole
1353f684b5 Merge pull request #4218 from firefly-iii/dependabot/composer/develop/barryvdh/laravel-ide-helper-2.9.0
Bump barryvdh/laravel-ide-helper from 2.8.2 to 2.9.0
2021-01-04 20:50:19 +01:00
James Cole
dd5119f49a Merge pull request #4217 from firefly-iii/dependabot/npm_and_yarn/develop/uiv-1.2.0
Bump uiv from 1.1.5 to 1.2.0
2021-01-04 20:47:12 +01:00
James Cole
83c036e33e Merge pull request #4219 from firefly-iii/dependabot/composer/develop/vimeo/psalm-4.3.2
Bump vimeo/psalm from 4.3.1 to 4.3.2
2021-01-04 20:05:09 +01:00
dependabot[bot]
3e1c16d9a9 Bump vimeo/psalm from 4.3.1 to 4.3.2
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.3.1...4.3.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-04 05:11:29 +00:00
dependabot[bot]
42adbfa9f4 Bump barryvdh/laravel-ide-helper from 2.8.2 to 2.9.0
Bumps [barryvdh/laravel-ide-helper](https://github.com/barryvdh/laravel-ide-helper) from 2.8.2 to 2.9.0.
- [Release notes](https://github.com/barryvdh/laravel-ide-helper/releases)
- [Changelog](https://github.com/barryvdh/laravel-ide-helper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/barryvdh/laravel-ide-helper/compare/v2.8.2...v2.9.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-04 05:10:58 +00:00
dependabot[bot]
b3068b7a66 Bump uiv from 1.1.5 to 1.2.0
Bumps [uiv](https://github.com/uiv-lib/uiv) from 1.1.5 to 1.2.0.
- [Release notes](https://github.com/uiv-lib/uiv/releases)
- [Commits](https://github.com/uiv-lib/uiv/compare/v1.1.5...v1.2.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-04 05:10:48 +00:00
James Cole
d24a046570 Rebuild frontend. 2021-01-03 07:11:44 +01:00
James Cole
ff2640276c Add currency symbol to API 2021-01-03 07:09:36 +01:00
James Cole
459d57befa Merge pull request #4207 from sephrat/develop
Fix 'spent per day' budget box
2021-01-02 20:03:12 +01:00
Florian Dupret
5dddb5e0df Fix 'spent per day' budget box 2021-01-02 14:33:19 +01:00
Florian Dupret
e848c7372c Fix 'spent per day' budget box 2021-01-02 14:24:31 +01:00
Florian Dupret
1884746233 Fix 'spent per day' budget box 2021-01-02 14:09:02 +01:00
James Cole
321bb33255 Fix #4186 2020-12-30 19:27:09 +01:00
James Cole
e6fd8324e2 Fix #4175 2020-12-30 19:25:53 +01:00
James Cole
fc4f35d6ba Fix #4195 2020-12-30 19:25:02 +01:00
James Cole
ef42d89d55 Update languages. 2020-12-30 18:43:37 +01:00
James Cole
2a0af839f9 Rebuild frontend 2020-12-30 18:43:16 +01:00
James Cole
a19e116a15 Error code for #4200 2020-12-30 11:59:10 +01:00
James Cole
9325b628fd Fix #4199 2020-12-30 11:53:00 +01:00
James Cole
02237d9efe Rebuilt frontend 2020-12-29 08:34:31 +01:00
James Cole
f2e6f03f8c First components for new transaction form. 2020-12-29 08:33:46 +01:00
James Cole
e2330d9bfe Log warning in cron controller 2020-12-29 08:33:25 +01:00
James Cole
bbc131b52c Merge pull request #4192 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/v-calendar-2.1.5
Bump v-calendar from 2.1.3 to 2.1.5 in /frontend
2020-12-28 09:58:49 +01:00
James Cole
7812613d54 Merge pull request #4191 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.64
Bump phpstan/phpstan from 0.12.63 to 0.12.64
2020-12-28 09:58:00 +01:00
James Cole
f9ce8b0bd9 Merge pull request #4190 from firefly-iii/dependabot/composer/develop/laravel/framework-8.20.1
Bump laravel/framework from 8.19.0 to 8.20.1
2020-12-28 08:53:12 +01:00
James Cole
b4da9096d5 Merge pull request #4189 from firefly-iii/dependabot/npm_and_yarn/develop/axios-0.21.1
Bump axios from 0.21.0 to 0.21.1
2020-12-28 08:46:20 +01:00
dependabot[bot]
85880a1974 Bump v-calendar from 2.1.3 to 2.1.5 in /frontend
Bumps [v-calendar](https://github.com/nathanreyes/v-calendar) from 2.1.3 to 2.1.5.
- [Release notes](https://github.com/nathanreyes/v-calendar/releases)
- [Commits](https://github.com/nathanreyes/v-calendar/compare/v2.1.3...v2.1.5)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-28 05:47:44 +00:00
dependabot[bot]
6b9b7fdeb3 Bump phpstan/phpstan from 0.12.63 to 0.12.64
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.63 to 0.12.64.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.63...0.12.64)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-28 05:09:49 +00:00
dependabot[bot]
7c1cb9ac5d Bump laravel/framework from 8.19.0 to 8.20.1
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.19.0 to 8.20.1.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.19.0...v8.20.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-28 05:09:23 +00:00
dependabot[bot]
24070c3cb9 Bump axios from 0.21.0 to 0.21.1
Bumps [axios](https://github.com/axios/axios) from 0.21.0 to 0.21.1.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.1/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.21.0...v0.21.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-28 05:07:45 +00:00
James Cole
6c18c7fb9f Update version. 2020-12-26 07:43:08 +01:00
James Cole
9d05d26aa4 Rebuild FP 2020-12-25 12:49:28 +01:00
James Cole
b34f16535c Fix cast error in PHP 8.0 2020-12-25 12:45:34 +01:00
James Cole
232cc39325 Rebuild FP 2020-12-24 18:48:00 +01:00
James Cole
6be1f5819f Rebuild FP 2020-12-22 19:29:44 +01:00
James Cole
1a8fd25ec3 Rebuild front with some vuex storage. 2020-12-22 17:22:50 +01:00
James Cole
7530effcaa Fix PHP 8 related errors. 2020-12-22 17:16:55 +01:00
James Cole
e9cab814d3 Rebuild frontend v2 2020-12-22 06:28:09 +01:00
James Cole
40f2c9bd27 Clean up languages 2020-12-22 06:27:36 +01:00
James Cole
cb243e6295 Update local translations. 2020-12-22 06:17:23 +01:00
James Cole
b263120c8f Add newlines and strict types check. 2020-12-22 05:35:06 +01:00
James Cole
c7cf55b831 Merge pull request #4171 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/v-calendar-2.1.3
Bump v-calendar from 2.1.2 to 2.1.3 in /frontend
2020-12-21 09:52:55 +01:00
James Cole
235ef06386 Merge pull request #4170 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/popperjs/core-2.6.0
Bump @popperjs/core from 2.5.4 to 2.6.0 in /frontend
2020-12-21 09:52:22 +01:00
dependabot[bot]
925fd3bd3c Bump v-calendar from 2.1.2 to 2.1.3 in /frontend
Bumps [v-calendar](https://github.com/nathanreyes/v-calendar) from 2.1.2 to 2.1.3.
- [Release notes](https://github.com/nathanreyes/v-calendar/releases)
- [Commits](https://github.com/nathanreyes/v-calendar/compare/v2.1.2...v2.1.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-21 08:47:08 +00:00
James Cole
4559d3e4c5 Merge pull request #4172 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/overlayscrollbars-1.13.1
Bump overlayscrollbars from 1.13.0 to 1.13.1 in /frontend
2020-12-21 09:42:20 +01:00
James Cole
670bf26510 Fix round() calls for PHP 8.0 2020-12-21 09:02:24 +01:00
dependabot[bot]
f3c9ee5a54 Bump overlayscrollbars from 1.13.0 to 1.13.1 in /frontend
Bumps [overlayscrollbars](https://github.com/KingSora/OverlayScrollbars) from 1.13.0 to 1.13.1.
- [Release notes](https://github.com/KingSora/OverlayScrollbars/releases)
- [Commits](https://github.com/KingSora/OverlayScrollbars/compare/v1.13.0...1.13.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-21 05:53:01 +00:00
dependabot[bot]
ee237bfc3f Bump @popperjs/core from 2.5.4 to 2.6.0 in /frontend
Bumps [@popperjs/core](https://github.com/popperjs/popper-core) from 2.5.4 to 2.6.0.
- [Release notes](https://github.com/popperjs/popper-core/releases)
- [Commits](https://github.com/popperjs/popper-core/compare/v2.5.4...v2.6.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-21 05:48:46 +00:00
James Cole
fe66bb1984 Fix #4169 2020-12-21 06:18:59 +01:00
James Cole
9971d95605 Update composer. 2020-12-21 06:18:37 +01:00
James Cole
4ebfc33b39 Let's do this in a separate branch 2020-12-20 10:41:55 +01:00
James Cole
bb86ef5683 Prep for LDAP upgrade 2020-12-20 10:32:23 +01:00
James Cole
69edc66509 Fix missing index. 2020-12-20 06:58:35 +01:00
James Cole
d3f4a06d89 Support subqueries in search. 2020-12-20 06:56:27 +01:00
James Cole
dac961a732 Code to fix #4162 2020-12-18 19:16:56 +01:00
James Cole
21619544f5 Fix round() call for PHP 8.0 2020-12-17 17:11:56 +01:00
James Cole
4a8183e5cc Update lock file. 2020-12-17 06:37:42 +01:00
James Cole
da198fb073 Add new language, as yet disabled. 2020-12-17 06:32:05 +01:00
James Cole
b1ed1f878b Add new language, as yet disabled. 2020-12-17 06:31:45 +01:00
James Cole
2a3a89a6ed Remove log 2020-12-17 06:31:32 +01:00
James Cole
013ebbf039 Initial effort to make code 8.0 compatible. 2020-12-17 06:31:23 +01:00
James Cole
07fa1b301f Remove some "strtolower"-references https://github.com/firefly-iii/firefly-iii/pull/4158 2020-12-16 08:42:18 +01:00
James Cole
c9893d0fda Merge pull request #4146 from firefly-iii/dependabot/composer/develop/nunomaduro/larastan-0.6.11
Bump nunomaduro/larastan from 0.6.10 to 0.6.11
2020-12-14 15:02:39 +01:00
James Cole
78c936cd1e Merge pull request #4148 from firefly-iii/dependabot/composer/develop/laravel/framework-8.18.1
Bump laravel/framework from 8.17.2 to 8.18.1
2020-12-14 15:02:13 +01:00
James Cole
c0ae7b6987 Merge pull request #4149 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.62
Bump phpstan/phpstan from 0.12.58 to 0.12.62
2020-12-14 15:01:44 +01:00
James Cole
83e4bc774a Merge pull request #4147 from firefly-iii/dependabot/composer/develop/barryvdh/laravel-ide-helper-2.8.2
Bump barryvdh/laravel-ide-helper from 2.8.1 to 2.8.2
2020-12-14 15:01:29 +01:00
dependabot[bot]
9d8fe1d917 Bump nunomaduro/larastan from 0.6.10 to 0.6.11
Bumps [nunomaduro/larastan](https://github.com/nunomaduro/larastan) from 0.6.10 to 0.6.11.
- [Release notes](https://github.com/nunomaduro/larastan/releases)
- [Changelog](https://github.com/nunomaduro/larastan/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nunomaduro/larastan/compare/v0.6.10...v0.6.11)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 08:27:22 +00:00
dependabot[bot]
b78913ee0f Bump laravel/framework from 8.17.2 to 8.18.1
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.17.2 to 8.18.1.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.17.2...v8.18.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 08:25:47 +00:00
dependabot[bot]
ac0d173cfd Bump phpstan/phpstan from 0.12.58 to 0.12.62
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.58 to 0.12.62.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.58...0.12.62)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 08:24:42 +00:00
dependabot[bot]
bd7c5423e6 Bump barryvdh/laravel-ide-helper from 2.8.1 to 2.8.2
Bumps [barryvdh/laravel-ide-helper](https://github.com/barryvdh/laravel-ide-helper) from 2.8.1 to 2.8.2.
- [Release notes](https://github.com/barryvdh/laravel-ide-helper/releases)
- [Changelog](https://github.com/barryvdh/laravel-ide-helper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/barryvdh/laravel-ide-helper/compare/v2.8.1...v2.8.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 08:22:56 +00:00
James Cole
839c077e8f Merge pull request #4151 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-loader-10.1.0
Bump sass-loader from 10.0.5 to 10.1.0 in /frontend
2020-12-14 08:49:54 +01:00
James Cole
325d74ff6b Merge pull request #4152 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/cross-env-7.0.3
Bump cross-env from 7.0.2 to 7.0.3 in /frontend
2020-12-14 08:49:41 +01:00
James Cole
cf2390a02e Merge pull request #4153 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/v-calendar-2.1.2
Bump v-calendar from 2.1.1 to 2.1.2 in /frontend
2020-12-14 08:48:13 +01:00
James Cole
abbd04b487 Merge pull request #4154 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-1.30.0
Bump sass from 1.29.0 to 1.30.0 in /frontend
2020-12-14 08:48:01 +01:00
James Cole
9f8fbd67e7 Merge pull request #4155 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/vue-i18n-8.22.2
Bump vue-i18n from 8.22.1 to 8.22.2 in /frontend
2020-12-14 08:47:39 +01:00
dependabot[bot]
1d287c5d0d Bump vue-i18n from 8.22.1 to 8.22.2 in /frontend
Bumps [vue-i18n](https://github.com/kazupon/vue-i18n) from 8.22.1 to 8.22.2.
- [Release notes](https://github.com/kazupon/vue-i18n/releases)
- [Changelog](https://github.com/kazupon/vue-i18n/blob/v8.x/CHANGELOG.md)
- [Commits](https://github.com/kazupon/vue-i18n/compare/v8.22.1...v8.22.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 05:57:06 +00:00
dependabot[bot]
b2d42d590c Bump sass from 1.29.0 to 1.30.0 in /frontend
Bumps [sass](https://github.com/sass/dart-sass) from 1.29.0 to 1.30.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.29.0...1.30.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 05:56:17 +00:00
dependabot[bot]
2a4d10c7c7 Bump v-calendar from 2.1.1 to 2.1.2 in /frontend
Bumps [v-calendar](https://github.com/nathanreyes/v-calendar) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/nathanreyes/v-calendar/releases)
- [Commits](https://github.com/nathanreyes/v-calendar/compare/v2.1.1...v2.1.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 05:55:24 +00:00
dependabot[bot]
65329b84b9 Bump cross-env from 7.0.2 to 7.0.3 in /frontend
Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 7.0.2 to 7.0.3.
- [Release notes](https://github.com/kentcdodds/cross-env/releases)
- [Changelog](https://github.com/kentcdodds/cross-env/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kentcdodds/cross-env/compare/v7.0.2...v7.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 05:54:33 +00:00
dependabot[bot]
8a58215f45 Bump sass-loader from 10.0.5 to 10.1.0 in /frontend
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.5 to 10.1.0.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.5...v10.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 05:53:38 +00:00
James Cole
a9a41f31e3 Merge pull request #4150 from firefly-iii/dependabot/composer/develop/fakerphp/faker-1.12.1
Bump fakerphp/faker from 1.12.0 to 1.12.1
2020-12-14 06:41:39 +01:00
dependabot[bot]
dcabaf380f Bump fakerphp/faker from 1.12.0 to 1.12.1
Bumps [fakerphp/faker](https://github.com/FakerPHP/Faker) from 1.12.0 to 1.12.1.
- [Release notes](https://github.com/FakerPHP/Faker/releases)
- [Changelog](https://github.com/FakerPHP/Faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/FakerPHP/Faker/compare/v1.12.0...v1.12.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-14 05:20:01 +00:00
James Cole
29e3eedef5 Merge some main changes into dev. 2020-12-12 06:53:26 +01:00
James Cole
c9322cf69f First changelog 2020-12-12 06:52:28 +01:00
James Cole
cb7b2cd53c Merge pull request #4140 from firefly-iii/dependabot/npm_and_yarn/frontend/ini-1.3.7
Bump ini from 1.3.5 to 1.3.7 in /frontend
2020-12-11 12:01:16 +01:00
dependabot[bot]
61ac8f6ab8 Bump ini from 1.3.5 to 1.3.7 in /frontend
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-11 10:19:51 +00:00
James Cole
61ff1330df Merge pull request #4139 from firefly-iii/dependabot/npm_and_yarn/ini-1.3.7
Bump ini from 1.3.5 to 1.3.7
2020-12-11 11:17:23 +01:00
dependabot[bot]
008b9c1191 Bump ini from 1.3.5 to 1.3.7
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7.
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-11 07:29:57 +00:00
James Cole
be33f6c987 Fix pagination. 2020-12-11 05:17:32 +01:00
James Cole
ee6bd0a0fa Merge pull request #4130 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-1.30.0
Bump sass from 1.29.0 to 1.30.0 in /frontend
2020-12-07 08:29:18 +01:00
James Cole
f41145fe56 Merge pull request #4129 from firefly-iii/dependabot/npm_and_yarn/develop/cross-env-7.0.3
Bump cross-env from 7.0.2 to 7.0.3
2020-12-07 07:41:21 +01:00
dependabot[bot]
21dc8df0bf Bump sass from 1.29.0 to 1.30.0 in /frontend
Bumps [sass](https://github.com/sass/dart-sass) from 1.29.0 to 1.30.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.29.0...1.30.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-07 05:56:36 +00:00
dependabot[bot]
858f8c63e6 Bump cross-env from 7.0.2 to 7.0.3
Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 7.0.2 to 7.0.3.
- [Release notes](https://github.com/kentcdodds/cross-env/releases)
- [Changelog](https://github.com/kentcdodds/cross-env/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kentcdodds/cross-env/compare/v7.0.2...v7.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-12-07 05:10:48 +00:00
James Cole
80f9e0e396 Trigger on delete. 2020-12-05 14:53:14 +01:00
James Cole
81a3e23b4e Update contributing guidelines. 2020-12-05 14:52:55 +01:00
James Cole
58f97a163f Also drop attempts DB 2020-12-05 07:09:05 +01:00
James Cole
9576806765 Message sending is now a job 2020-12-05 07:01:26 +01:00
James Cole
deb829dfdb Make sure webhooks are generated in a generic way for future expansion. 2020-12-05 06:47:16 +01:00
James Cole
4a7e185c44 Fix #4122 2020-12-04 20:37:15 +01:00
James Cole
ce5cabd903 Rebuild frontend. 2020-12-04 20:27:40 +01:00
James Cole
172d2297f1 Update packages. 2020-12-04 20:25:27 +01:00
James Cole
48d1d5c90b Make sure webhook messages can be versionised later. 2020-12-04 20:19:52 +01:00
James Cole
7ee9b51b3f Split webhook message sending into different models. 2020-12-04 06:21:22 +01:00
James Cole
888f5896ff Update model phpdoc [skip ci] 2020-12-04 06:20:44 +01:00
James Cole
a539cfe4f2 Webhooks have titles now. 2020-12-03 06:54:42 +01:00
James Cole
eb80578e30 Can now send webhook messages. 2020-12-02 19:30:09 +01:00
James Cole
35c9367819 New method for consistent data collection. 2020-12-02 17:12:58 +01:00
James Cole
cbe046ba07 Can generate webhook messages for creating transactions. 2020-12-02 06:54:13 +01:00
James Cole
e27e0a97a7 Fix #4113 2020-12-02 06:41:42 +01:00
James Cole
822432712b Fix #4112 2020-12-02 06:28:34 +01:00
James Cole
1f5ac4d9cc Fix #4108 2020-12-01 18:29:21 +01:00
James Cole
d66b03166f Fix #4070 2020-12-01 18:11:31 +01:00
James Cole
c563340532 Fix comma parsing when users search for amount:12,34 2020-12-01 12:24:23 +01:00
James Cole
dd85b8d46a Merge pull request #4102 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.58
Bump phpstan/phpstan from 0.12.57 to 0.12.58
2020-11-30 06:37:36 +01:00
dependabot[bot]
182cd6c100 Bump phpstan/phpstan from 0.12.57 to 0.12.58
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.57 to 0.12.58.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.57...0.12.58)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-30 05:19:11 +00:00
James Cole
59962005db API ability to manage webhooks. 2020-11-29 18:35:49 +01:00
James Cole
6ecbc5e013 Create stale.yml 2020-11-29 13:03:13 +00:00
James Cole
f42bd19c1c Add some stuff for webhooks. 2020-11-29 11:36:29 +01:00
James Cole
c68d7c5aad First attempt at webhooks table. 2020-11-29 09:29:38 +01:00
James Cole
0e5e2fcef7 Config for webhooks. 2020-11-29 09:15:27 +01:00
James Cole
d8344d8d45 Export meta data, fix #3717 2020-11-29 07:58:24 +01:00
James Cole
1ad5f5c759 Fix #4098 2020-11-29 07:07:08 +01:00
James Cole
b38e7cbb1a Rebuild front 2020-11-29 07:06:55 +01:00
James Cole
a5b6bf5797 Make OAuth visible for users. 2020-11-28 05:52:39 +01:00
James Cole
29d1c950ec Update composer to catch some passport related problems. 2020-11-28 05:36:56 +01:00
James Cole
b16d23460e Expand frontend. 2020-11-27 06:14:10 +01:00
James Cole
1b27f6143c Expand API with still undocumented features 2020-11-27 06:13:46 +01:00
James Cole
11e6410d7c Fix layout call. 2020-11-26 06:32:07 +01:00
James Cole
a78d7b9fec Small change in dashboard. 2020-11-26 06:23:02 +01:00
James Cole
68bbadb99a Hardcode v2 2020-11-25 19:54:02 +01:00
James Cole
7211ea5b9b Small test to see if moment isn't null 2020-11-25 19:43:42 +01:00
James Cole
825be42c4e Variables fix. 2020-11-25 19:31:30 +01:00
James Cole
e12c4197f6 Variables fix. 2020-11-25 19:25:07 +01:00
James Cole
6c14742ce0 Rebuild frontend. 2020-11-25 06:32:30 +01:00
James Cole
16018109c8 Minor changes in kernel code. 2020-11-25 06:25:08 +01:00
James Cole
9a658b60fb Merge pull request #4085 from firefly-iii/dependabot/composer/develop/phpunit/phpunit-9.4.3
Bump phpunit/phpunit from 9.4.2 to 9.4.3
2020-11-23 07:49:26 +01:00
James Cole
a13dc20e51 Merge pull request #4084 from firefly-iii/dependabot/composer/develop/laravel/framework-8.15.0
Bump laravel/framework from 8.14.0 to 8.15.0
2020-11-23 07:49:16 +01:00
James Cole
9f1fb62d21 Merge pull request #4083 from firefly-iii/dependabot/composer/develop/diglactic/laravel-breadcrumbs-6.0.3
Bump diglactic/laravel-breadcrumbs from 6.0.2 to 6.0.3
2020-11-23 07:49:06 +01:00
James Cole
a41dc220ca Merge pull request #4082 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.57
Bump phpstan/phpstan from 0.12.55 to 0.12.57
2020-11-23 07:48:55 +01:00
James Cole
6388bdc946 Merge pull request #4081 from firefly-iii/dependabot/composer/develop/vimeo/psalm-4.2.1
Bump vimeo/psalm from 4.1.1 to 4.2.1
2020-11-23 07:48:44 +01:00
dependabot[bot]
5ea5622ead Bump phpunit/phpunit from 9.4.2 to 9.4.3
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.4.2 to 9.4.3.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.4.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.4.2...9.4.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-23 05:29:39 +00:00
dependabot[bot]
bcfbb232c0 Bump laravel/framework from 8.14.0 to 8.15.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.14.0 to 8.15.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.14.0...v8.15.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-23 05:26:36 +00:00
dependabot[bot]
b7f73cdc0e Bump diglactic/laravel-breadcrumbs from 6.0.2 to 6.0.3
Bumps [diglactic/laravel-breadcrumbs](https://github.com/diglactic/laravel-breadcrumbs) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/diglactic/laravel-breadcrumbs/releases)
- [Commits](https://github.com/diglactic/laravel-breadcrumbs/compare/v6.0.2...v6.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-23 05:22:56 +00:00
dependabot[bot]
4c84a14ee2 Bump phpstan/phpstan from 0.12.55 to 0.12.57
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.55 to 0.12.57.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.55...0.12.57)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-23 05:20:28 +00:00
dependabot[bot]
e5201d6127 Bump vimeo/psalm from 4.1.1 to 4.2.1
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 4.1.1 to 4.2.1.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/4.1.1...4.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-23 05:17:59 +00:00
James Cole
ce7bc723ac Rebuild new frontend. 2020-11-22 07:50:55 +01:00
James Cole
4a54f484aa Remove code comment. 2020-11-22 07:50:26 +01:00
James Cole
e1c242326a Rebuild frontend 2020-11-21 12:06:43 +01:00
James Cole
2eee4cfcf8 Configurable audit logging for #4074 2020-11-20 15:44:17 +01:00
James Cole
729a6130be Rebuild frontend. 2020-11-20 06:28:14 +01:00
James Cole
b8c73aa0d9 Create event manually 2020-11-20 06:25:08 +01:00
James Cole
c659d67172 Budget limit now has period. 2020-11-20 06:24:08 +01:00
James Cole
3dbc74b040 Fix #4071 2020-11-20 06:22:43 +01:00
James Cole
5e703c6e7f Extra instructions in GitHub templates. 2020-11-19 06:31:09 +01:00
James Cole
30817cba9f Merge pull request #4066 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.55
Bump phpstan/phpstan from 0.12.54 to 0.12.55
2020-11-16 11:15:01 +01:00
James Cole
38170ba614 Merge pull request #4065 from firefly-iii/dependabot/composer/develop/fakerphp/faker-1.11.0
Bump fakerphp/faker from 1.10.1 to 1.11.0
2020-11-16 11:10:13 +01:00
James Cole
369e92f0ad Merge pull request #4064 from firefly-iii/dependabot/composer/develop/adldap2/adldap2-laravel-6.1.4
Bump adldap2/adldap2-laravel from 6.1.2 to 6.1.4
2020-11-16 09:31:58 +01:00
James Cole
f8f407aac5 Merge pull request #4067 from firefly-iii/dependabot/composer/develop/doctrine/dbal-2.12.1
Bump doctrine/dbal from 2.12.0 to 2.12.1
2020-11-16 09:31:42 +01:00
dependabot[bot]
f9ce04744b Bump fakerphp/faker from 1.10.1 to 1.11.0
Bumps [fakerphp/faker](https://github.com/FakerPHP/Faker) from 1.10.1 to 1.11.0.
- [Release notes](https://github.com/FakerPHP/Faker/releases)
- [Changelog](https://github.com/FakerPHP/Faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/FakerPHP/Faker/compare/v1.10.1...v1.11.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-16 07:55:22 +00:00
dependabot[bot]
6ba421e867 Bump phpstan/phpstan from 0.12.54 to 0.12.55
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.54 to 0.12.55.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.54...0.12.55)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-16 07:54:54 +00:00
dependabot[bot]
7cfc615af8 Bump doctrine/dbal from 2.12.0 to 2.12.1
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 2.12.0 to 2.12.1.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/2.12.0...2.12.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-16 07:53:29 +00:00
dependabot[bot]
cfc5dfb62f Bump adldap2/adldap2-laravel from 6.1.2 to 6.1.4
Bumps [adldap2/adldap2-laravel](https://github.com/Adldap2/Adldap2-Laravel) from 6.1.2 to 6.1.4.
- [Release notes](https://github.com/Adldap2/Adldap2-Laravel/releases)
- [Commits](https://github.com/Adldap2/Adldap2-Laravel/compare/v6.1.2...v6.1.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-16 07:50:43 +00:00
James Cole
3a8bfaba27 Merge pull request #4068 from firefly-iii/dependabot/composer/develop/laravel/framework-8.14.0
Bump laravel/framework from 8.13.0 to 8.14.0
2020-11-16 07:26:43 +01:00
dependabot[bot]
fedc16503a Bump laravel/framework from 8.13.0 to 8.14.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 8.13.0 to 8.14.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md)
- [Commits](https://github.com/laravel/framework/compare/v8.13.0...v8.14.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-16 05:26:38 +00:00
James Cole
8f0d36e724 production build of frontend v1 2020-11-15 14:05:29 +01:00
James Cole
20850a604f Update frontend layout. 2020-11-15 14:05:04 +01:00
James Cole
259fadc433 Expand views in v2 2020-11-15 14:02:49 +01:00
James Cole
eb616f36ea Expand API. 2020-11-15 14:02:29 +01:00
James Cole
20e7948d99 Update sonar rules. 2020-11-15 14:02:12 +01:00
James Cole
1e4c3f0e19 Forget 2FA cookie when logout. 2020-11-15 06:13:56 +01:00
James Cole
c749e69abc Rename column 2020-11-15 06:09:23 +01:00
James Cole
f266c14f9c Missing import. 2020-11-15 05:53:42 +01:00
James Cole
b8fffe5d6d Merge pull request #4062 from hakoerber/fix-remote-guard-email-header
Fix remote guard email header
2020-11-14 20:14:48 +01:00
Hannes Körber
9082a7d9b9 Fix error on missing AUTHENTICATION_GUARD_EMAIL
Fixes #4060
2020-11-14 18:50:31 +01:00
James Cole
f7490176ec Expand table. 2020-11-13 14:03:04 +01:00
James Cole
5fce6af00a Fix #4055 2020-11-12 20:26:41 +01:00
James Cole
cd67d8fe21 New migration 2020-11-12 14:58:39 +01:00
James Cole
ce51bb8be6 Build frontend again, using Yarn. 2020-11-12 07:11:15 +01:00
James Cole
60339c9d1b Build frontend, delete old code. 2020-11-12 06:14:15 +01:00
James Cole
d90f457a36 Add to webpack 2020-11-12 05:58:17 +01:00
James Cole
8f42c6e4eb Update vue 2020-11-12 05:58:06 +01:00
James Cole
5e87d7b570 Expand configuration. 2020-11-12 05:55:14 +01:00
James Cole
80718baa16 Catch null pointer 2020-11-11 19:14:05 +01:00
James Cole
ae9a9c1647 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-11-11 19:09:02 +01:00
James Cole
68ff7fd568 Merge pull request #4050 from Johnny-Malizia/transactionapilimit
Updated Transaction Search API to set limit from user preferences
2020-11-09 15:11:56 +00:00
johnny
30ff2f0f11 Updated Transaction Search API to set limit from user preferences 2020-11-08 17:16:17 -08:00
James Cole
ab70fd8bc5 Move fields to configuration. 2020-11-08 18:26:40 +01:00
James Cole
479f9e8f0c Add links to add stuff. 2020-11-08 15:33:11 +01:00
James Cole
f584f159f0 Fix #4045 2020-11-08 15:17:44 +01:00
James Cole
9352d38c1c Update translations. 2020-11-08 14:31:38 +01:00
James Cole
6b79f1abdb Create events for transaction links. 2020-11-08 14:27:03 +01:00
James Cole
52ce873aac Update views. 2020-11-08 14:16:06 +01:00
James Cole
006da9ebbc Update frontend v2 2020-11-08 14:15:53 +01:00
James Cole
0f32761ae8 Refactor code. 2020-11-08 14:13:21 +01:00
James Cole
ec44d0dc8e Remove deprecated call 2020-11-08 14:07:59 +01:00
James Cole
d268931187 Refactor to remove deprecated methods. 2020-11-08 14:06:49 +01:00
James Cole
7efb77e000 Refactor authorize() method. 2020-11-08 13:36:13 +01:00
James Cole
e16bbf1072 Refactor request classes. 2020-11-08 13:31:54 +01:00
James Cole
6560510dd8 Remove plugin from Travis script. 2020-11-08 07:07:20 +01:00
James Cole
293d61b343 Clean up views and pages for v2 2020-11-07 20:13:06 +01:00
James Cole
f582a11feb Cleanup changelog. 2020-11-07 17:42:00 +01:00
James Cole
896fbbc146 Merge tag '5.4.6' into develop
5.4.6
2020-11-07 17:40:31 +01:00
James Cole
bcb734a459 Merge branch 'release/5.4.6' into main 2020-11-07 17:40:29 +01:00
James Cole
8e9e0f71bf Some last minute updates 2020-11-07 17:39:06 +01:00
James Cole
647c9c5eb0 Fix #4023 2020-11-07 17:22:11 +01:00
James Cole
4fa92ed5f7 Code for #4023 2020-11-07 17:19:23 +01:00
James Cole
febcbac1de Expand changelog. 2020-11-07 14:32:38 +01:00
James Cole
c9763c3d05 Fix #4006 2020-11-07 14:31:06 +01:00
James Cole
fab6d5df8d Update meta files ahead of new release. 2020-11-07 14:30:59 +01:00
James Cole
5d872bead7 Update category code for #4015 2020-11-07 14:25:43 +01:00
James Cole
60a3cc1f72 Remove migration. 2020-11-07 14:11:41 +01:00
James Cole
413df5a005 Expand tests 2020-11-07 14:05:53 +01:00
James Cole
5b35612be0 Expand v2 views 2020-11-07 14:05:42 +01:00
James Cole
54441df562 Update version 2020-11-07 14:05:28 +01:00
James Cole
87f4b59cfe Rebuild frontend. 2020-11-07 14:05:20 +01:00
James Cole
4d0839cf9c New empty views for new layout 2020-11-07 07:23:17 +01:00
James Cole
56388e46f2 Merge pull request #4015 from weimdall/develop
Forward REMOTE_USER (remote_user_guard auth mode)
2020-11-06 16:58:51 +00:00
James Cole
6b20b7ecdb Can edit category notes 2020-11-05 06:25:56 +01:00
James Cole
ee82547eed Basic expand and collapse. #4031 2020-11-05 06:16:22 +01:00
James Cole
ebd9b30f55 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-11-04 19:06:18 +01:00
James Cole
5b70f70aa7 update packages. 2020-11-04 19:05:35 +01:00
James Cole
80ef6fcb04 Send messages to owner, not to user when user is demo. 2020-11-03 20:33:46 +01:00
Julien Cassagne
700db14de2 Fix : Forward REMOTE_USER
In remote_user_guard auth mode, fireflyiii wasn't receiving REMOTE_USER
This issue occurs with docker image and standalone (when using apache)
2020-11-03 01:19:50 -05:00
James Cole
433397cb3d Update composer JSON 2020-11-02 19:56:34 +01:00
James Cole
40b952c4e8 Merge pull request #4022 from firefly-iii/dependabot/composer/develop/vimeo/psalm-4.1.0
Bump vimeo/psalm from 3.18.2 to 4.1.0
2020-11-02 08:25:29 +01:00
James Cole
b46b01e03d Merge pull request #4025 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/popperjs/core-2.5.4
Bump @popperjs/core from 2.5.3 to 2.5.4 in /frontend
2020-11-02 08:24:49 +01:00
James Cole
70b8a10e94 Merge pull request #4026 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-1.28.0
Bump sass from 1.27.0 to 1.28.0 in /frontend
2020-11-02 08:24:27 +01:00
dependabot[bot]
b40eaf7585 Bump sass from 1.27.0 to 1.28.0 in /frontend
Bumps [sass](https://github.com/sass/dart-sass) from 1.27.0 to 1.28.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.27.0...1.28.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-02 06:03:39 +00:00
dependabot[bot]
aeca645a37 Bump @popperjs/core from 2.5.3 to 2.5.4 in /frontend
Bumps [@popperjs/core](https://github.com/popperjs/popper-core) from 2.5.3 to 2.5.4.
- [Release notes](https://github.com/popperjs/popper-core/releases)
- [Commits](https://github.com/popperjs/popper-core/compare/v2.5.3...v2.5.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-02 06:02:12 +00:00
dependabot[bot]
713dbf47fb Bump vimeo/psalm from 3.18.2 to 4.1.0
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 3.18.2 to 4.1.0.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/3.18.2...4.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-11-02 05:28:11 +00:00
James Cole
d6c7ccf62d Remodel seeds and factories. 2020-11-02 06:20:49 +01:00
James Cole
52385ae980 Expand docs for #4015 2020-11-01 07:01:59 +01:00
James Cole
53da61429a Fix help text, courtesy of @weimdall 2020-11-01 06:58:19 +01:00
James Cole
c8a87833c6 Various code cleanup. 2020-10-31 08:00:44 +01:00
James Cole
55c8b9012c Remove unused methods. 2020-10-31 06:54:33 +01:00
James Cole
0104d46206 Update jobs table. 2020-10-31 06:47:36 +01:00
James Cole
b9963ce0bf Remove unused rule. 2020-10-31 06:47:29 +01:00
James Cole
09247cc30b Upgrade to laravel 8. 2020-10-30 17:34:51 +01:00
James Cole
b03b0c630b Fix missing method. 2020-10-30 17:13:29 +01:00
James Cole
ebd076e0ed Remove excessive debug things. 2020-10-30 12:07:26 +01:00
James Cole
a0f34666a3 Fix #4011 2020-10-29 17:20:58 +01:00
James Cole
1ed71ea742 Fix #4011 2020-10-29 14:42:24 +01:00
James Cole
b75c221626 Fix #4005 2020-10-29 06:42:14 +01:00
James Cole
3cf340e44c Merge tag '5.4.5' into develop
5.4.5
2020-10-28 20:26:31 +01:00
James Cole
e6c0bbf082 Merge branch 'release/5.4.5' into main 2020-10-28 20:26:28 +01:00
James Cole
86ca234625 Update meta files for new release. 2020-10-28 20:25:51 +01:00
James Cole
7bd86fe2b6 Update translations. 2020-10-28 20:22:30 +01:00
James Cole
23356b3884 Cleanup JS 2020-10-28 20:16:21 +01:00
James Cole
ca3d836c83 Add notes to category #4002 2020-10-28 06:32:37 +01:00
James Cole
3aa835a985 Fix #4003 2020-10-28 06:14:12 +01:00
James Cole
7b9f2b6ce5 Fix #4000 2020-10-27 19:04:19 +01:00
James Cole
31a9b03c1a Refactor and cleanup. 2020-10-27 16:26:10 +01:00
James Cole
141436aebb Exclude from code coverage. 2020-10-27 06:53:47 +01:00
James Cole
8d84bffc2d Simplify methods. 2020-10-27 06:53:33 +01:00
James Cole
0fb81a6112 Append sonarqube properties file 2020-10-27 06:41:26 +01:00
James Cole
6563a79483 Clean up code. 2020-10-27 06:40:53 +01:00
James Cole
372c6ac667 Various issues fixed (SonarQube) 2020-10-26 19:15:57 +01:00
James Cole
e4923a3c69 Move JS files 2020-10-26 19:15:35 +01:00
James Cole
54f3e60ae4 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-10-26 17:05:23 +01:00
James Cole
df6f65e0aa Sonarqube properties file. 2020-10-26 16:54:14 +01:00
James Cole
e83fdc58ff Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-10-26 16:52:34 +01:00
James Cole
7720482930 Fix bread crumbs 2020-10-26 16:51:49 +01:00
James Cole
c07fae19f9 Remove unused variable. 2020-10-26 16:50:05 +01:00
James Cole
aa3e467a3e Add message so exception isn't empty. 2020-10-26 16:22:20 +01:00
James Cole
c837692d72 Merge pull request #3997 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/axios-0.21.0
Bump axios from 0.20.0 to 0.21.0 in /frontend
2020-10-26 05:58:45 +00:00
dependabot[bot]
61c8b79e30 Bump axios from 0.20.0 to 0.21.0 in /frontend
Bumps [axios](https://github.com/axios/axios) from 0.20.0 to 0.21.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.20.0...v0.21.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-26 05:52:19 +00:00
James Cole
d0a8e6eb5b Merge pull request #3996 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.52
Bump phpstan/phpstan from 0.12.51 to 0.12.52
2020-10-26 05:50:05 +00:00
James Cole
e61236836b Merge pull request #3995 from firefly-iii/dependabot/npm_and_yarn/develop/uiv-1.1.2
Bump uiv from 1.1.1 to 1.1.2
2020-10-26 05:47:16 +00:00
James Cole
a235b60bef Merge pull request #3994 from firefly-iii/dependabot/npm_and_yarn/develop/axios-0.21.0
Bump axios from 0.20.0 to 0.21.0
2020-10-26 05:47:06 +00:00
James Cole
a7d15ef287 Temp fix for tes 2020-10-26 06:45:24 +01:00
James Cole
045cec4421 Fix #3992 2020-10-26 06:43:09 +01:00
dependabot[bot]
465e49476a Bump phpstan/phpstan from 0.12.51 to 0.12.52
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.51 to 0.12.52.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.51...0.12.52)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-26 05:24:43 +00:00
dependabot[bot]
ed6a331faa Bump uiv from 1.1.1 to 1.1.2
Bumps [uiv](https://github.com/uiv-lib/uiv) from 1.1.1 to 1.1.2.
- [Release notes](https://github.com/uiv-lib/uiv/releases)
- [Commits](https://github.com/uiv-lib/uiv/compare/v1.1.1...v1.1.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-26 05:19:05 +00:00
dependabot[bot]
f578e2c9e7 Bump axios from 0.20.0 to 0.21.0
Bumps [axios](https://github.com/axios/axios) from 0.20.0 to 0.21.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.20.0...v0.21.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-26 05:18:49 +00:00
James Cole
e0526508cb Fix #3853 2020-10-26 06:18:09 +01:00
James Cole
9151f44022 Fix #3991 2020-10-26 06:11:55 +01:00
James Cole
276de8a470 fix #3993 2020-10-26 06:10:10 +01:00
James Cole
f6ce49b586 Escape input, fixes #3990 2020-10-25 06:36:33 +01:00
James Cole
cf3d9d26fa Less hysterical about JSON errors 2020-10-25 06:35:58 +01:00
James Cole
265385c833 Merge tag '5.4.4' into develop
5.4.4
2020-10-24 18:55:40 +02:00
James Cole
ca3e4e978d Merge branch 'release/5.4.4' into main 2020-10-24 18:55:36 +02:00
James Cole
0dbfeed639 Update meta files. 2020-10-24 18:52:46 +02:00
James Cole
ca235e2287 Updated meta files for release. 2020-10-24 18:47:47 +02:00
James Cole
9d826519e3 Simplify code. 2020-10-24 18:40:17 +02:00
James Cole
3979e12043 Optimise code. 2020-10-24 17:27:36 +02:00
James Cole
b3f1737495 Reverse logic operators. 2020-10-24 16:59:56 +02:00
James Cole
179a710c5b Better note escape 2020-10-24 16:49:21 +02:00
James Cole
08f347cd57 Fix bad array validation. 2020-10-24 16:49:05 +02:00
James Cole
c910cbe5da Fix #3940 2020-10-24 15:52:51 +02:00
James Cole
34a2ab31df Update composer file. 2020-10-24 08:26:57 +02:00
James Cole
229a3b4284 Update JS 2020-10-24 08:07:30 +02:00
James Cole
dbc878950c Clean up form requests 2020-10-24 07:55:09 +02:00
James Cole
ab4bcd3703 Clean up code. 2020-10-24 07:40:56 +02:00
James Cole
048e5eeb31 Fix #3974 2020-10-24 07:18:37 +02:00
James Cole
a526559a0e Remove unused import statements. 2020-10-23 19:12:46 +02:00
James Cole
8dbd785ab8 Clean up code. 2020-10-23 19:11:25 +02:00
James Cole
0845e1cb7d Fix complicated method. 2020-10-23 18:35:56 +02:00
James Cole
20598d877d Simplify function 2020-10-23 18:33:06 +02:00
James Cole
cf540bf173 Simplify code. 2020-10-23 18:26:18 +02:00
James Cole
a8fcde1459 Fix #3985 2020-10-23 18:15:37 +02:00
James Cole
bcdc562bf7 Fix zero length limit. 2020-10-23 12:33:53 +02:00
James Cole
171f8c5848 Include IP in error message. 2020-10-23 12:30:12 +02:00
James Cole
58bb5eaeae Extra check on activity for #3974 2020-10-23 07:37:06 +02:00
James Cole
fd629d6574 Fix https://github.com/firefly-iii/firefly-iii/issues/3983 2020-10-23 06:20:59 +02:00
James Cole
9bafd067f6 Fix # 2020-10-23 06:15:56 +02:00
James Cole
bc06afe17e Fix #3978 2020-10-22 06:33:55 +02:00
James Cole
250aa989c4 Update JS 2020-10-21 06:45:53 +02:00
James Cole
2e3317b95f Remove account from preferences when set inactive, #3974 2020-10-21 06:29:25 +02:00
James Cole
c8be714d16 Do now show not uploaded attachments #3973 2020-10-21 06:24:27 +02:00
James Cole
2f885d65cc Add some cases for #3973 2020-10-21 06:24:16 +02:00
James Cole
f07c1f7164 Fix bad array 2020-10-21 06:20:11 +02:00
James Cole
ed86c26a18 Fix similar issue in piggies 2020-10-20 04:42:44 +02:00
James Cole
ec787de5e0 Simplify code 2020-10-20 04:36:36 +02:00
James Cole
0d5c09af84 Simplify budget report code. 2020-10-20 04:22:57 +02:00
James Cole
ff32f96295 Simplify report. 2020-10-19 20:34:53 +02:00
James Cole
590591f6bd Fix #3968 2020-10-19 18:44:52 +02:00
James Cole
30f708ba7a Fix bill edit submission group thing. 2020-10-19 18:28:39 +02:00
James Cole
2e3af087e8 Merge pull request #3962 from firefly-iii/dependabot/composer/develop/vimeo/psalm-3.17.2
Bump vimeo/psalm from 3.16 to 3.17.2
2020-10-19 08:39:35 +02:00
James Cole
6ce922e983 Merge pull request #3963 from firefly-iii/dependabot/composer/develop/gdbots/query-parser-2.0.1
Bump gdbots/query-parser from 2.0.0 to 2.0.1
2020-10-19 08:39:27 +02:00
James Cole
f63cff91bf Merge pull request #3964 from firefly-iii/dependabot/composer/develop/filp/whoops-2.8.0
Bump filp/whoops from 2.7.3 to 2.8.0
2020-10-19 08:39:14 +02:00
James Cole
b422ba6547 Merge pull request #3965 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/chart.js-2.9.4
Bump chart.js from 2.9.3 to 2.9.4 in /frontend
2020-10-19 08:39:04 +02:00
dependabot[bot]
114d53befd Bump chart.js from 2.9.3 to 2.9.4 in /frontend
Bumps [chart.js](https://github.com/chartjs/Chart.js) from 2.9.3 to 2.9.4.
- [Release notes](https://github.com/chartjs/Chart.js/releases)
- [Commits](https://github.com/chartjs/Chart.js/compare/v2.9.3...v2.9.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:47:18 +00:00
dependabot[bot]
076010c058 Bump filp/whoops from 2.7.3 to 2.8.0
Bumps [filp/whoops](https://github.com/filp/whoops) from 2.7.3 to 2.8.0.
- [Release notes](https://github.com/filp/whoops/releases)
- [Changelog](https://github.com/filp/whoops/blob/master/CHANGELOG.md)
- [Commits](https://github.com/filp/whoops/compare/2.7.3...2.8.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:26:45 +00:00
dependabot[bot]
56a7793bf1 Bump gdbots/query-parser from 2.0.0 to 2.0.1
Bumps [gdbots/query-parser](https://github.com/gdbots/query-parser-php) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/gdbots/query-parser-php/releases)
- [Changelog](https://github.com/gdbots/query-parser-php/blob/master/CHANGELOG-2.x.md)
- [Commits](https://github.com/gdbots/query-parser-php/compare/v2.0.0...v2.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:24:10 +00:00
dependabot[bot]
00c610045d Bump vimeo/psalm from 3.16 to 3.17.2
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 3.16 to 3.17.2.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/3.16...3.17.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:21:39 +00:00
James Cole
4b0b2f46ef Merge pull request #3961 from firefly-iii/dependabot/composer/develop/doctrine/dbal-2.11.2
Bump doctrine/dbal from 2.11.1 to 2.11.2
2020-10-19 07:20:11 +02:00
dependabot[bot]
5a53cea90b Bump doctrine/dbal from 2.11.1 to 2.11.2
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 2.11.1 to 2.11.2.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/2.11.1...2.11.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:19:16 +00:00
James Cole
07a3ff01b0 Merge pull request #3960 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.50
Bump phpstan/phpstan from 0.12.48 to 0.12.50
2020-10-19 07:17:25 +02:00
James Cole
03875d7e41 Merge pull request #3958 from firefly-iii/dependabot/composer/develop/nunomaduro/larastan-0.6.6
Bump nunomaduro/larastan from 0.6.4 to 0.6.6
2020-10-19 07:17:09 +02:00
dependabot[bot]
0e340288e6 Bump phpstan/phpstan from 0.12.48 to 0.12.50
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.48 to 0.12.50.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.48...0.12.50)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:16:51 +00:00
James Cole
1183c40114 Merge pull request #3959 from firefly-iii/dependabot/composer/develop/league/commonmark-1.5.6
Bump league/commonmark from 1.5.5 to 1.5.6
2020-10-19 07:16:51 +02:00
dependabot[bot]
06ab9df6fc Bump league/commonmark from 1.5.5 to 1.5.6
Bumps [league/commonmark](https://github.com/thephpleague/commonmark) from 1.5.5 to 1.5.6.
- [Release notes](https://github.com/thephpleague/commonmark/releases)
- [Changelog](https://github.com/thephpleague/commonmark/blob/1.5.6/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/commonmark/compare/1.5.5...1.5.6)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:13:43 +00:00
dependabot[bot]
b871dab5fe Bump nunomaduro/larastan from 0.6.4 to 0.6.6
Bumps [nunomaduro/larastan](https://github.com/nunomaduro/larastan) from 0.6.4 to 0.6.6.
- [Release notes](https://github.com/nunomaduro/larastan/releases)
- [Changelog](https://github.com/nunomaduro/larastan/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nunomaduro/larastan/compare/v0.6.4...v0.6.6)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-19 05:11:26 +00:00
James Cole
054eecf541 Optimise code. 2020-10-19 06:41:31 +02:00
James Cole
348452ec7d Simplify method. 2020-10-19 06:41:01 +02:00
James Cole
1f5934d6e2 Use trait, not class extension as an experiment. 2020-10-19 06:23:22 +02:00
James Cole
60fa6c775b Merge pull request #3957 from bu4ak/add-logged-in-request
Add base request that check user's auth
2020-10-19 06:11:34 +02:00
bu4ak
ed98c01ba0 Add LoggedInRequest 2020-10-18 20:24:47 +02:00
James Cole
198c79c048 Simplify transformer. 2020-10-18 17:44:30 +02:00
James Cole
3cd331062d Cleanup code. 2020-10-18 16:44:34 +02:00
James Cole
22f1e4db31 Simplify method. 2020-10-18 16:36:19 +02:00
James Cole
68693f20bb Slight reorder of shields. 2020-10-18 12:52:16 +02:00
James Cole
54a4c25152 Slight reorder of shields. 2020-10-18 12:51:21 +02:00
James Cole
21c615818c Slight reorder of shields. 2020-10-18 12:48:30 +02:00
James Cole
204d7e57bd Merge pull request #3954 from lastlink/patch-4
add travis build badge
2020-10-18 12:43:17 +02:00
James Cole
cd151da240 Simplify chart code with external helper. 2020-10-18 12:41:49 +02:00
lastlink
687a62fe26 add travis build badge 2020-10-18 04:25:39 -04:00
James Cole
0bf0b762b8 Simplify command. 2020-10-18 08:25:56 +02:00
James Cole
53a6af7779 Simplify code 2020-10-18 08:06:00 +02:00
James Cole
4c10f2b960 Test improv 2020-10-18 08:01:22 +02:00
James Cole
2630732b8a Code cleanup [skip ci] 2020-10-18 08:01:10 +02:00
James Cole
b8774a7af3 Code cleanup [skip ci] 2020-10-18 08:00:49 +02:00
James Cole
7a89df749d Fix #3953 2020-10-18 07:59:28 +02:00
James Cole
937c11e83c Update translations + JS 2020-10-17 21:41:13 +02:00
James Cole
a79f7e3b59 Better code. 2020-10-17 09:12:51 +02:00
James Cole
c1b52524b1 #3909 2020-10-17 09:12:38 +02:00
James Cole
04d451be8d Fix #3871 2020-10-17 09:02:52 +02:00
James Cole
e5109d6a0f Fix #3942 2020-10-17 08:57:58 +02:00
James Cole
c404354890 Fix missing var 2020-10-17 08:56:38 +02:00
James Cole
01fbe89295 Better catch for long queries, #3903 2020-10-17 08:53:32 +02:00
James Cole
388da769bb Upgrade and move some scripts. 2020-10-17 07:02:18 +02:00
James Cole
0d4f203fae Stop escaping notes, move to parser. 2020-10-13 17:48:50 +02:00
James Cole
96dbd633bf Fix #3914 2020-10-13 06:51:44 +02:00
James Cole
4b1f4ae319 Fix #3915 2020-10-13 06:48:11 +02:00
James Cole
13e15d0476 Fix # 2020-10-13 06:36:34 +02:00
James Cole
7c962c617a Debug for #3903 2020-10-13 06:35:47 +02:00
James Cole
4e51f0abc4 Clean up some code. 2020-10-13 06:35:33 +02:00
James Cole
3bd5ac21c9 Fix #3901 2020-10-13 06:28:07 +02:00
James Cole
d7b872eeaa Merge pull request #3931 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-1.27.0
Bump sass from 1.26.11 to 1.27.0 in /frontend
2020-10-12 08:13:08 +00:00
dependabot[bot]
c868a6374d Bump sass from 1.26.11 to 1.27.0 in /frontend
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.11 to 1.27.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.26.11...1.27.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 07:20:53 +00:00
James Cole
e61720754a Merge pull request #3926 from firefly-iii/dependabot/npm_and_yarn/develop/vue-i18n-8.22.0
Bump vue-i18n from 8.21.1 to 8.22.0
2020-10-12 06:30:55 +00:00
James Cole
f9f0eaefbe Merge pull request #3928 from firefly-iii/dependabot/composer/develop/phpunit/phpunit-9.4.1
Bump phpunit/phpunit from 9.4.0 to 9.4.1
2020-10-12 06:29:12 +00:00
James Cole
5712739df1 Merge pull request #3929 from firefly-iii/dependabot/composer/develop/laravel/framework-7.28.4
Bump laravel/framework from 7.28.3 to 7.28.4
2020-10-12 06:29:01 +00:00
James Cole
6e7152a200 Merge pull request #3930 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/fortawesome/fontawesome-free-5.15.1
Bump @fortawesome/fontawesome-free from 5.15.0 to 5.15.1 in /frontend
2020-10-12 06:28:33 +00:00
James Cole
f2b8aab1d2 Merge pull request #3927 from firefly-iii/dependabot/npm_and_yarn/develop/uiv-1.1.1
Bump uiv from 1.0.1 to 1.1.1
2020-10-12 06:26:50 +00:00
James Cole
59f2e9cf72 Merge pull request #3925 from firefly-iii/dependabot/npm_and_yarn/develop/laravel-mix-5.0.7
Bump laravel-mix from 5.0.5 to 5.0.7
2020-10-12 06:26:30 +00:00
James Cole
3a0793b26a Merge pull request #3933 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-loader-10.0.3
Bump sass-loader from 10.0.2 to 10.0.3 in /frontend
2020-10-12 06:26:09 +00:00
James Cole
659df750d8 Merge pull request #3932 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/vue-router-3.4.6
Bump vue-router from 3.4.5 to 3.4.6 in /frontend
2020-10-12 06:25:55 +00:00
James Cole
b5983f7e99 Merge pull request #3934 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/laravel-mix-5.0.7
Bump laravel-mix from 5.0.5 to 5.0.7 in /frontend
2020-10-12 06:25:44 +00:00
dependabot[bot]
86d0d18b00 Bump laravel-mix from 5.0.5 to 5.0.7 in /frontend
Bumps [laravel-mix](https://github.com/JeffreyWay/laravel-mix) from 5.0.5 to 5.0.7.
- [Release notes](https://github.com/JeffreyWay/laravel-mix/releases)
- [Commits](https://github.com/JeffreyWay/laravel-mix/compare/v5.0.5...v5.0.7)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:54:12 +00:00
dependabot[bot]
28f71963f1 Bump sass-loader from 10.0.2 to 10.0.3 in /frontend
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.2 to 10.0.3.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.2...v10.0.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:52:46 +00:00
dependabot[bot]
27f91365b4 Bump vue-router from 3.4.5 to 3.4.6 in /frontend
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.5 to 3.4.6.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.4.5...v3.4.6)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:51:46 +00:00
dependabot[bot]
8d11fecfeb Bump @fortawesome/fontawesome-free from 5.15.0 to 5.15.1 in /frontend
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.15.0 to 5.15.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.15.0...5.15.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:50:06 +00:00
dependabot[bot]
c10a955928 Bump laravel/framework from 7.28.3 to 7.28.4
Bumps [laravel/framework](https://github.com/laravel/framework) from 7.28.3 to 7.28.4.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/8.x/CHANGELOG-6.x.md)
- [Commits](https://github.com/laravel/framework/compare/v7.28.3...v7.28.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:20:49 +00:00
dependabot[bot]
d5a12d56a6 Bump phpunit/phpunit from 9.4.0 to 9.4.1
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.4.0 to 9.4.1.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.4.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.4.0...9.4.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:18:18 +00:00
dependabot[bot]
f869ebbb30 Bump uiv from 1.0.1 to 1.1.1
Bumps [uiv](https://github.com/uiv-lib/uiv) from 1.0.1 to 1.1.1.
- [Release notes](https://github.com/uiv-lib/uiv/releases)
- [Commits](https://github.com/uiv-lib/uiv/compare/v1.0.1...v1.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:07:29 +00:00
dependabot[bot]
3471c964d0 Bump vue-i18n from 8.21.1 to 8.22.0
Bumps [vue-i18n](https://github.com/kazupon/vue-i18n) from 8.21.1 to 8.22.0.
- [Release notes](https://github.com/kazupon/vue-i18n/releases)
- [Changelog](https://github.com/kazupon/vue-i18n/blob/v8.x/CHANGELOG.md)
- [Commits](https://github.com/kazupon/vue-i18n/compare/v8.21.1...v8.22.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:07:08 +00:00
dependabot[bot]
94b1934877 Bump laravel-mix from 5.0.5 to 5.0.7
Bumps [laravel-mix](https://github.com/JeffreyWay/laravel-mix) from 5.0.5 to 5.0.7.
- [Release notes](https://github.com/JeffreyWay/laravel-mix/releases)
- [Commits](https://github.com/JeffreyWay/laravel-mix/compare/v5.0.5...v5.0.7)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-12 05:06:49 +00:00
James Cole
adfd3ab3ac Update commands and test factories 2020-10-10 11:21:45 +02:00
James Cole
a42008dd7b Add captions 2020-10-10 11:21:25 +02:00
James Cole
acfc976f6d New tests 2020-10-10 11:21:14 +02:00
James Cole
76cfdef27d Remove old tests. To be reinstated later. 2020-10-10 11:20:52 +02:00
James Cole
d75f33558d Merge pull request #3913 from vcrazyV/ruble_currency_fix
Fix space ruble currency name
2020-10-07 04:08:02 +00:00
Viktor Yakovlev
7345a558ce fix ruble currency name 2020-10-06 21:24:48 +03:00
James Cole
5ba93dda9f Merge pull request #3908 from firefly-iii/dependabot/npm_and_yarn/develop/uiv-1.0.1
Bump uiv from 0.37.0 to 1.0.1
2020-10-05 08:49:52 +02:00
dependabot[bot]
a94195ae45 Bump uiv from 0.37.0 to 1.0.1
Bumps [uiv](https://github.com/uiv-lib/uiv) from 0.37.0 to 1.0.1.
- [Release notes](https://github.com/uiv-lib/uiv/releases)
- [Commits](https://github.com/uiv-lib/uiv/compare/v0.37.0...v1.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-10-05 05:10:12 +00:00
James Cole
0b8415e82b Debug for #3897 2020-10-04 17:11:59 +02:00
James Cole
a5c37f1e4a Fix #3902 2020-10-04 16:50:16 +02:00
James Cole
7bd0b09711 Fix #3900 2020-10-04 13:45:39 +02:00
James Cole
64370229d8 Fix #3900 2020-10-04 13:44:55 +02:00
James Cole
6671c6d45c Create some new test code. 2020-10-04 10:56:10 +02:00
James Cole
a2eedb3742 Fix #3898 2020-10-04 09:19:36 +02:00
James Cole
3bae5e236b Fix #3885 2020-10-04 07:56:03 +02:00
James Cole
9f4e950a70 Fix hard coded site ID 2020-10-04 07:25:30 +02:00
James Cole
4d2d9d4d6e Whoops. Fixed self-referencing constant. 2020-10-04 07:20:48 +02:00
James Cole
61ffc8ada6 Switch should have default thing. 2020-10-03 17:53:23 +02:00
James Cole
b8e36b0398 Replace string with constant. 2020-10-03 16:51:44 +02:00
James Cole
d89e4ec143 Merge tag '5.4.3' into develop
5.4.3
2020-10-03 16:23:09 +02:00
James Cole
712b8d6e0c Merge branch 'release/5.4.3' into main 2020-10-03 16:23:07 +02:00
James Cole
50cfb54a3d Updated meta-files & translations for upcoming release. 2020-10-03 16:20:59 +02:00
James Cole
dcb1866e81 Add some breadcrumbs 2020-10-03 15:58:25 +02:00
James Cole
f2550a7861 Fix #3893 2020-10-03 15:16:42 +02:00
James Cole
5ed3d52e9a Fix #3894 2020-10-03 15:08:24 +02:00
James Cole
aadcb2cc5b Fix https://github.com/firefly-iii/firefly-iii/issues/3592 2020-10-03 07:03:41 +02:00
James Cole
96028e91be Fix #3887 2020-10-02 17:45:35 +02:00
James Cole
f92780d3da Updated meta-files & translations for upcoming release. 2020-10-02 08:46:41 +02:00
James Cole
8c7e3b3731 Fix #3884 2020-10-02 07:47:02 +02:00
James Cole
8eb6b5a364 Fix #3881 2020-10-01 18:43:41 +02:00
James Cole
d03ca0ec36 Some bug fixes. 2020-10-01 17:02:15 +02:00
James Cole
c25f5598f1 Some bug fixes. 2020-10-01 16:52:01 +02:00
James Cole
d32611b2d5 Remove unused dropdown menu. 2020-10-01 14:27:06 +02:00
James Cole
9ab034c1ad Rebuild frontend. 2020-10-01 14:24:35 +02:00
James Cole
b3edbecde2 Code for #3875 2020-10-01 12:48:27 +02:00
James Cole
3ce949f0aa Fix #3880 2020-10-01 10:50:34 +02:00
James Cole
df8c6abd5c Fix issue submitted over email by Gustav, making sure the "budgeted" amount matches the budgets below. 2020-10-01 08:06:25 +02:00
James Cole
b94561223e Fix search for #3850 2020-10-01 07:42:20 +02:00
James Cole
f633769f7b Fix links for #3824 2020-10-01 07:33:39 +02:00
James Cole
8767bad61e Fix #3879 2020-10-01 07:31:08 +02:00
James Cole
c01345468d Fix #3878 2020-10-01 07:07:18 +02:00
James Cole
8046d14d2d Clean up readme and incorporate the badges as suggested by @lastlink 2020-09-30 19:23:15 +02:00
James Cole
f957d8aeb5 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-09-30 17:28:31 +02:00
James Cole
564a387505 Rebuild JS and some switch stuff for #3826 2020-09-30 17:28:16 +02:00
James Cole
116fc0c70f Merge pull request #3874 from sephrat/fix-3858
FIx #3858
2020-09-30 17:22:32 +02:00
James Cole
f82e35a8a8 New rendered JS. 2020-09-30 17:20:51 +02:00
James Cole
ea76647b29 Fix #3862 2020-09-30 17:19:58 +02:00
James Cole
26dc70c8fd Merge pull request #3863 from lastlink/patch-3
sonarcloud badges
2020-09-30 17:10:05 +02:00
James Cole
85113d50be Merge pull request #3855 from achembarpu/patch-1
Add start_url to manifest file
2020-09-30 17:06:17 +02:00
James Cole
9e41cc27af Merge pull request #3854 from sephrat/fix-3853
Fix #3853
2020-09-30 17:05:16 +02:00
Florian Dupret
89d8c11b52 More pagination fixes 2020-09-29 14:05:41 +02:00
Florian Dupret
70d16c31ad FIx #3858 2020-09-29 13:04:41 +02:00
lastlink
e07f243344 Update readme.md
pr changes
2020-09-28 13:04:22 -04:00
James Cole
ba4a43b4aa Merge pull request #3869 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/popperjs/core-2.5.2
Bump @popperjs/core from 2.5.1 to 2.5.2 in /frontend
2020-09-28 08:18:22 +02:00
James Cole
860bf22503 Merge pull request #3868 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/vue-router-3.4.5
Bump vue-router from 3.4.3 to 3.4.5 in /frontend
2020-09-28 08:04:27 +02:00
dependabot[bot]
4a1f009458 Bump @popperjs/core from 2.5.1 to 2.5.2 in /frontend
Bumps [@popperjs/core](https://github.com/popperjs/popper-core) from 2.5.1 to 2.5.2.
- [Release notes](https://github.com/popperjs/popper-core/releases)
- [Commits](https://github.com/popperjs/popper-core/compare/v2.5.1...v2.5.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-28 05:56:13 +00:00
dependabot[bot]
4830b3b2c1 Bump vue-router from 3.4.3 to 3.4.5 in /frontend
Bumps [vue-router](https://github.com/vuejs/vue-router) from 3.4.3 to 3.4.5.
- [Release notes](https://github.com/vuejs/vue-router/releases)
- [Changelog](https://github.com/vuejs/vue-router/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-router/compare/v3.4.3...v3.4.5)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-28 05:55:02 +00:00
James Cole
e2bf13b5ca Merge pull request #3865 from firefly-iii/dependabot/composer/develop/phpunit/phpunit-9.3.11
Bump phpunit/phpunit from 9.3.10 to 9.3.11
2020-09-28 07:29:38 +02:00
James Cole
c36a4f64d4 Merge pull request #3867 from firefly-iii/dependabot/composer/develop/doctrine/dbal-2.11.1
Bump doctrine/dbal from 2.11.0 to 2.11.1
2020-09-28 07:29:15 +02:00
James Cole
39abea0290 Merge pull request #3866 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.45
Bump phpstan/phpstan from 0.12.43 to 0.12.45
2020-09-28 07:28:43 +02:00
dependabot[bot]
abec47f6c3 Bump doctrine/dbal from 2.11.0 to 2.11.1
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 2.11.0 to 2.11.1.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/2.11.0...2.11.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-28 05:25:41 +00:00
dependabot[bot]
4f0100b7a9 Bump phpstan/phpstan from 0.12.43 to 0.12.45
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.43 to 0.12.45.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.43...0.12.45)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-28 05:23:07 +00:00
dependabot[bot]
8c576953ad Bump phpunit/phpunit from 9.3.10 to 9.3.11
Bumps [phpunit/phpunit](https://github.com/sebastianbergmann/phpunit) from 9.3.10 to 9.3.11.
- [Release notes](https://github.com/sebastianbergmann/phpunit/releases)
- [Changelog](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.3.md)
- [Commits](https://github.com/sebastianbergmann/phpunit/compare/9.3.10...9.3.11)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-28 05:21:25 +00:00
lastlink
e8f9d2b608 Update readme.md
sonarcloud badges, easy fruits for open source contributors to work on. I can move the order around if preferred.
2020-09-26 23:01:37 -04:00
Arvind Chembarpu
2347267518 Add start_url to manifest
start_url is a mandatory field.
2020-09-24 22:34:58 +02:00
Florian Dupret
602f5b6646 Fix #3853 2020-09-24 19:42:12 +02:00
James Cole
b1b2e0ff09 Merge tag '5.4.2' into develop
5.4.2
2020-09-24 06:24:30 +02:00
James Cole
ab38bfe4d2 Merge branch 'release/5.4.2' into main 2020-09-24 06:24:29 +02:00
James Cole
dcb3f23078 Update meta data for new release. 2020-09-24 06:22:08 +02:00
James Cole
c0f363cf86 Consistent dates for #3847 2020-09-24 06:09:26 +02:00
James Cole
46ebf3c07c Consistent dates for #3847 2020-09-24 06:06:18 +02:00
James Cole
ed7977a105 Fix count for #3841 2020-09-24 06:00:45 +02:00
James Cole
f093dbb30b Fix #3844 2020-09-23 20:37:31 +02:00
James Cole
620b69f234 Fix #3841 2020-09-23 20:30:42 +02:00
James Cole
a346b6ee29 Bad redirect when editing a not found transaction. 2020-09-23 20:28:20 +02:00
James Cole
ccb511936e Better fix for #3842, thanks @niklas2810 2020-09-23 20:18:30 +02:00
James Cole
9f98289952 Fix #3843 2020-09-23 20:17:21 +02:00
James Cole
e549b74c97 Fix #3842 2020-09-23 20:13:08 +02:00
James Cole
f73af50eb0 Fix #3840 2020-09-23 19:32:46 +02:00
James Cole
5f5346ed71 Partial fix for #3840 2020-09-23 19:29:10 +02:00
James Cole
fc157b2944 Fix #3839 2020-09-23 19:14:50 +02:00
James Cole
cc1a537ecb Meta data for 5.4.2 2020-09-23 19:14:39 +02:00
James Cole
1e5df66c62 Expand readme. 2020-09-23 16:44:39 +02:00
James Cole
e5ea82663e Create .mergify.yml 2020-09-23 07:41:56 +00:00
James Cole
2d6e6f3ec9 Merge pull request #3837 from okaufmann/fix-account-detail
Fixes account notes parsing (Reopen)
2020-09-23 07:40:58 +00:00
James Cole
a822c9f833 Merge branch 'develop' into fix-account-detail 2020-09-23 07:40:46 +00:00
James Cole
0b8b9cb280 Update version. 2020-09-23 06:18:59 +02:00
James Cole
29b8cf936e Add mergify config 2020-09-23 06:18:49 +02:00
James Cole
b288d6b0eb Fix #3828 2020-09-23 06:18:43 +02:00
James Cole
8a2d5b12c3 Instructions for one-time donations. 2020-09-23 05:56:49 +02:00
James Cole
a7dc9e201f Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-09-23 05:50:51 +02:00
James Cole
c686f16a93 Merge pull request #3831 from okaufmann/main
Fixes `Unknown column 'notes' in 'where clause'` when using Rules
2020-09-23 03:49:50 +00:00
Oliver Kaufmann
58245d85b3 fix account notes 2020-09-23 02:18:53 +02:00
Oliver Kaufmann
f564ef5195 fix notes filter query 2020-09-22 23:48:36 +02:00
James Cole
18c24a7251 Fix #3827 2020-09-22 18:27:21 +02:00
James Cole
d97fd73ce5 Make sure notes always have a value, even when null #3823 2020-09-22 16:19:51 +02:00
James Cole
1624abd9ed Merge pull request #3822 from achembarpu/patch-1
Fix web app manifest
2020-09-22 05:15:50 +00:00
Arvind Chembarpu
14f22009ed Update manifest link 2020-09-21 21:25:57 +02:00
Arvind Chembarpu
86cd3c0c38 Do not force portrait mode
For easier use on larger devices like tablets
2020-09-21 21:24:32 +02:00
Arvind Chembarpu
855fe1235a Rename site.webmanifest to manifest.webmanifest
As per Web App Manifest spec - https://www.w3.org/TR/appmanifest/
2020-09-21 21:24:03 +02:00
Arvind Chembarpu
198a0f7011 Delete manifest.json 2020-09-21 21:21:32 +02:00
James Cole
2b16d73e65 Remove LDAP limit from 2FA 2020-09-21 20:40:47 +02:00
James Cole
03f68426e5 Merge tag '5.4.1' into develop
5.4.1
2020-09-21 19:52:27 +02:00
James Cole
229479b7ed Merge branch 'release/5.4.1' into main 2020-09-21 19:52:26 +02:00
James Cole
0f742aa040 Update changelog and meta files for 5.4.1 2020-09-21 18:28:34 +02:00
James Cole
e5ac6a3a1d Add some debug info. 2020-09-21 16:08:41 +02:00
James Cole
d05fb4472c Fix count reference. 2020-09-21 15:56:50 +02:00
James Cole
5161971373 Different call to count() 2020-09-21 15:45:51 +02:00
James Cole
2a5841c631 Temp debug information. 2020-09-21 15:39:14 +02:00
James Cole
766abd3336 Extra info for debug screen. 2020-09-21 15:39:03 +02:00
James Cole
b58cde5431 Add some debug info. 2020-09-21 15:30:54 +02:00
James Cole
9964cf11a4 Fix #3809 2020-09-21 15:20:14 +02:00
James Cole
7f9c8fa133 Merge tag '5.4.0' into develop
5.4.0
2020-09-21 13:21:42 +02:00
James Cole
10057f05a5 Merge branch 'release/5.4.0' into main 2020-09-21 13:21:41 +02:00
James Cole
fc61b20f6d Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-09-21 12:47:48 +02:00
James Cole
40e7f019dd Meta data for new release, 5.4.0. 2020-09-21 12:47:40 +02:00
James Cole
2f32ddce6b Merge pull request #3814 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.43
Bump phpstan/phpstan from 0.12.42 to 0.12.43
2020-09-21 07:52:53 +00:00
James Cole
459015c01e Merge pull request #3813 from firefly-iii/dependabot/composer/develop/doctrine/dbal-2.11.0
Bump doctrine/dbal from 2.10.4 to 2.11.0
2020-09-21 07:52:41 +00:00
dependabot[bot]
b669f96036 Bump phpstan/phpstan from 0.12.42 to 0.12.43
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.42 to 0.12.43.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.42...0.12.43)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-21 05:19:54 +00:00
dependabot[bot]
4524d1cfe3 Bump doctrine/dbal from 2.10.4 to 2.11.0
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 2.10.4 to 2.11.0.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/2.10.4...2.11.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-21 05:17:28 +00:00
James Cole
651029e284 Don't use isset. 2020-09-20 16:18:48 +02:00
James Cole
cbeb2675fd Fix second issue in #3809 2020-09-20 16:16:49 +02:00
James Cole
7a80caf26b Fix #3790 2020-09-18 16:14:17 +02:00
James Cole
f3eaf1dd4c Code for #3790 2020-09-18 16:07:59 +02:00
James Cole
af88e91a48 Update attributes 2020-09-18 12:25:41 +02:00
James Cole
706cb47065 Code changes for v540 2020-09-18 12:16:47 +02:00
James Cole
0d72aa9673 Default is MySQL 2020-09-18 09:46:22 +02:00
James Cole
039e654ef1 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-09-14 20:01:47 +02:00
James Cole
1c3fe93d59 Recognize a year. 2020-09-14 20:01:33 +02:00
James Cole
5ef45fd4a3 Merge pull request #3794 from firefly-iii/dependabot/composer/develop/league/commonmark-1.5.5
Bump league/commonmark from 1.5.4 to 1.5.5
2020-09-14 07:24:15 +00:00
James Cole
db700d6b80 Merge pull request #3793 from firefly-iii/dependabot/npm_and_yarn/develop/uiv-0.37.0
Bump uiv from 0.36.1 to 0.37.0
2020-09-14 07:16:35 +00:00
dependabot[bot]
7032bdc169 Bump league/commonmark from 1.5.4 to 1.5.5
Bumps [league/commonmark](https://github.com/thephpleague/commonmark) from 1.5.4 to 1.5.5.
- [Release notes](https://github.com/thephpleague/commonmark/releases)
- [Changelog](https://github.com/thephpleague/commonmark/blob/latest/CHANGELOG-1.x.md)
- [Commits](https://github.com/thephpleague/commonmark/compare/1.5.4...1.5.5)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-14 06:28:32 +00:00
dependabot[bot]
1dde09c738 Bump uiv from 0.36.1 to 0.37.0
Bumps [uiv](https://github.com/wxsms/uiv) from 0.36.1 to 0.37.0.
- [Release notes](https://github.com/wxsms/uiv/releases)
- [Commits](https://github.com/wxsms/uiv/compare/v0.36.1...v0.37.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-14 06:26:19 +00:00
James Cole
a54ca0141a Merge tag '5.4.0-beta.1' into develop
5.4.0-beta.1
2020-09-13 07:48:50 +02:00
James Cole
a553bfd142 Merge branch 'release/5.4.0-beta.1' into main 2020-09-13 07:48:47 +02:00
James Cole
ed01551ad4 Update composer. 2020-09-13 07:41:29 +02:00
James Cole
91473332b4 Update and rebuild JS. 2020-09-13 07:39:19 +02:00
James Cole
890de05394 Update localised JS 2020-09-13 07:38:31 +02:00
James Cole
29445e4ffb Fix #3695 2020-09-12 06:28:23 +02:00
James Cole
098eac8bab Fix #3765 2020-09-11 21:06:10 +02:00
James Cole
e2ad5c60c6 Fix #3761 2020-09-11 20:37:50 +02:00
James Cole
34e2595a3d Make sure you can't set negative amounts. 2020-09-11 20:29:30 +02:00
James Cole
284222c2ee Better call to date. 2020-09-11 07:12:33 +02:00
James Cole
0b308cb5f2 Fix #3791 2020-09-11 07:12:11 +02:00
James Cole
22dc03f32c Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-09-11 07:11:43 +02:00
James Cole
c2ff26b515 Fix lowercase 2020-09-11 07:11:37 +02:00
James Cole
402351a6b7 Fix #3789 2020-09-10 19:16:03 +02:00
James Cole
562be457ec Add more types. 2020-09-10 14:53:35 +02:00
James Cole
600e98cf47 Add hashtag 2020-09-10 14:50:49 +02:00
James Cole
bded065d42 Support date 2020-09-10 14:50:22 +02:00
James Cole
a526007957 Add URL compatibility 2020-09-10 14:48:02 +02:00
James Cole
c0af49f336 Fix missing search node type. 2020-09-09 06:10:00 +02:00
James Cole
ff6c0c26e0 Fix #3745 2020-09-07 13:03:10 +02:00
James Cole
a7af8d2195 Fix language issues #3772 2020-09-07 12:56:51 +02:00
James Cole
f5871898bd Fix #3768 2020-09-07 12:49:56 +02:00
James Cole
df8f23cba3 Merge pull request #3781 from firefly-iii/dependabot/composer/develop/nunomaduro/larastan-0.6.4
Bump nunomaduro/larastan from 0.6.2 to 0.6.4
2020-09-07 07:03:08 +00:00
James Cole
d9bc23725b Merge pull request #3782 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-loader-10.0.2
Bump sass-loader from 10.0.1 to 10.0.2 in /frontend
2020-09-07 07:02:01 +00:00
James Cole
a68ab28f00 Merge pull request #3778 from firefly-iii/dependabot/composer/develop/phpstan/phpstan-0.12.42
Bump phpstan/phpstan from 0.12.40 to 0.12.42
2020-09-07 07:01:11 +00:00
dependabot[bot]
676c282f11 Bump phpstan/phpstan from 0.12.40 to 0.12.42
Bumps [phpstan/phpstan](https://github.com/phpstan/phpstan) from 0.12.40 to 0.12.42.
- [Release notes](https://github.com/phpstan/phpstan/releases)
- [Commits](https://github.com/phpstan/phpstan/compare/0.12.40...0.12.42)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:46:22 +00:00
dependabot[bot]
f99731e90b Bump nunomaduro/larastan from 0.6.2 to 0.6.4
Bumps [nunomaduro/larastan](https://github.com/nunomaduro/larastan) from 0.6.2 to 0.6.4.
- [Release notes](https://github.com/nunomaduro/larastan/releases)
- [Changelog](https://github.com/nunomaduro/larastan/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nunomaduro/larastan/compare/v0.6.2...v0.6.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:45:43 +00:00
James Cole
302ece8ffc Merge pull request #3779 from firefly-iii/dependabot/composer/develop/predis/predis-1.1.4
Bump predis/predis from 1.1.3 to 1.1.4
2020-09-07 06:17:29 +00:00
James Cole
47100a8e51 Merge pull request #3780 from firefly-iii/dependabot/composer/develop/league/csv-9.6.1
Bump league/csv from 9.6.0 to 9.6.1
2020-09-07 06:17:02 +00:00
dependabot[bot]
7e59d8cb75 Bump sass-loader from 10.0.1 to 10.0.2 in /frontend
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.1 to 10.0.2.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.1...v10.0.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:16:10 +00:00
James Cole
7eaa00a5ad Merge pull request #3777 from firefly-iii/dependabot/composer/develop/vimeo/psalm-3.15
Bump vimeo/psalm from 3.14.2 to 3.15
2020-09-07 06:13:29 +00:00
dependabot[bot]
0713cc55b6 Bump league/csv from 9.6.0 to 9.6.1
Bumps [league/csv](https://github.com/thephpleague/csv) from 9.6.0 to 9.6.1.
- [Release notes](https://github.com/thephpleague/csv/releases)
- [Changelog](https://github.com/thephpleague/csv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/thephpleague/csv/compare/9.6.0...9.6.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:10:29 +00:00
James Cole
8329d68b22 Merge pull request #3776 from firefly-iii/dependabot/composer/develop/laravel/framework-7.27.0
Bump laravel/framework from 7.26.1 to 7.27.0
2020-09-07 06:10:23 +00:00
dependabot[bot]
3e05cf7306 Bump predis/predis from 1.1.3 to 1.1.4
Bumps [predis/predis](https://github.com/predis/predis) from 1.1.3 to 1.1.4.
- [Release notes](https://github.com/predis/predis/releases)
- [Changelog](https://github.com/predis/predis/blob/main/CHANGELOG.md)
- [Commits](https://github.com/predis/predis/compare/v1.1.3...v1.1.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:08:32 +00:00
James Cole
8c116e1bc5 Merge pull request #3775 from firefly-iii/dependabot/composer/develop/doctrine/dbal-2.10.3
Bump doctrine/dbal from 2.10.2 to 2.10.3
2020-09-07 06:06:37 +00:00
dependabot[bot]
7d61986025 Bump vimeo/psalm from 3.14.2 to 3.15
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 3.14.2 to 3.15.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/3.14.2...3.15)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:04:54 +00:00
dependabot[bot]
abff2a0a8f Bump laravel/framework from 7.26.1 to 7.27.0
Bumps [laravel/framework](https://github.com/laravel/framework) from 7.26.1 to 7.27.0.
- [Release notes](https://github.com/laravel/framework/releases)
- [Changelog](https://github.com/laravel/framework/blob/7.x/CHANGELOG-7.x.md)
- [Commits](https://github.com/laravel/framework/compare/v7.26.1...v7.27.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:03:09 +00:00
dependabot[bot]
65499bb9ff Bump doctrine/dbal from 2.10.2 to 2.10.3
Bumps [doctrine/dbal](https://github.com/doctrine/dbal) from 2.10.2 to 2.10.3.
- [Release notes](https://github.com/doctrine/dbal/releases)
- [Commits](https://github.com/doctrine/dbal/compare/2.10.2...2.10.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-07 06:01:41 +00:00
James Cole
6f219d1932 Short header 2020-09-06 07:27:46 +02:00
James Cole
9d35048fb9 Fix #3770 2020-09-06 07:27:36 +02:00
James Cole
af58c30249 Merge branch 'main' into develop 2020-09-05 07:37:40 +02:00
James Cole
366744ed69 Catch bad SSL config 2020-09-05 07:37:18 +02:00
James Cole
d809b77154 Catch errors 2020-09-05 07:37:10 +02:00
James Cole
03cec69af3 Fix cash account display. 2020-09-03 06:55:00 +02:00
James Cole
9ae41b1645 Link in clone. 2020-09-03 06:52:09 +02:00
James Cole
b0f18a0419 Consistent end dates for budget limits. 2020-09-03 06:49:22 +02:00
James Cole
5648a9197d Merge pull request #3758 from firefly-iii/dependabot/composer/symfony/http-kernel-5.1.5
Bump symfony/http-kernel from 5.1.3 to 5.1.5
2020-09-03 04:35:01 +00:00
James Cole
f0fe8bf5c7 Fix #3759 2020-09-03 06:34:48 +02:00
dependabot[bot]
8a690afc46 Bump symfony/http-kernel from 5.1.3 to 5.1.5
Bumps [symfony/http-kernel](https://github.com/symfony/http-kernel) from 5.1.3 to 5.1.5.
- [Release notes](https://github.com/symfony/http-kernel/releases)
- [Changelog](https://github.com/symfony/http-kernel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/symfony/http-kernel/compare/v5.1.3...v5.1.5)

Signed-off-by: dependabot[bot] <support@github.com>
2020-09-02 18:56:48 +00:00
James Cole
2bb6c48278 Add some debug logging. 2020-09-02 06:46:51 +02:00
James Cole
6eb661df19 Fix #3755 2020-09-02 06:40:05 +02:00
James Cole
8e578e1058 Fix #3755 2020-09-02 06:39:56 +02:00
James Cole
4f7683b1fd Merge pull request #3751 from firefly-iii/dependabot/composer/develop/barryvdh/laravel-debugbar-3.4.2
Bump barryvdh/laravel-debugbar from 3.4.1 to 3.4.2
2020-08-31 07:55:32 +00:00
James Cole
656456b9d9 Merge pull request #3752 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/sass-loader-10.0.1
Bump sass-loader from 9.0.3 to 10.0.1 in /frontend
2020-08-31 07:14:07 +00:00
dependabot[bot]
8c1daa9eed Bump sass-loader from 9.0.3 to 10.0.1 in /frontend
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 9.0.3 to 10.0.1.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v9.0.3...v10.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-31 06:46:38 +00:00
dependabot[bot]
f146205208 Bump barryvdh/laravel-debugbar from 3.4.1 to 3.4.2
Bumps [barryvdh/laravel-debugbar](https://github.com/barryvdh/laravel-debugbar) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/barryvdh/laravel-debugbar/releases)
- [Changelog](https://github.com/barryvdh/laravel-debugbar/blob/master/changelog.md)
- [Commits](https://github.com/barryvdh/laravel-debugbar/compare/v3.4.1...v3.4.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-31 06:25:22 +00:00
James Cole
dce3c333da Merge pull request #3748 from psychowood/develop
Wrong query params in autocomplete
2020-08-31 04:25:38 +00:00
psychowood
b0d67f1637 Typos in b63e8d60bb 2020-08-31 00:27:55 +02:00
James Cole
bc913d0e9c Merge pull request #3746 from GrayStrider/patch-1
Fix anchor link
2020-08-29 11:41:14 +00:00
GrayStrider
415ef57458 Fix anchor link 2020-08-29 22:33:10 +11:00
James Cole
278ddf27bd Merge tag '5.4.0-alpha.3' into develop
5.4.0-alpha.3
2020-08-29 13:10:35 +02:00
James Cole
3566305c27 Merge branch 'release/5.4.0-alpha.3' into main 2020-08-29 13:10:33 +02:00
James Cole
b41b03e8f0 Update meta files for new alpha release. 2020-08-29 13:08:26 +02:00
James Cole
e5642b59d7 Update meta files 2020-08-29 12:10:13 +02:00
James Cole
e159de9a6a Expand warning with better text 2020-08-29 07:18:41 +02:00
James Cole
2a02e8a790 Clarify + warning 2020-08-28 22:03:27 +02:00
James Cole
798c73394d Code for #3712 2020-08-28 21:58:03 +02:00
James Cole
7f48043505 Fix #3729 2020-08-28 21:29:47 +02:00
James Cole
82b49a9e51 Add telemetry to get insight in update preferences. 2020-08-28 21:04:29 +02:00
James Cole
56ea680e46 Add telemetry to get insight into updates 2020-08-28 21:03:23 +02:00
James Cole
70f3d13626 Update translations 2020-08-28 16:36:03 +02:00
James Cole
093f34b7a8 Account search fixed. 2020-08-28 11:24:55 +02:00
James Cole
63794cab07 Fix bill from rule 2020-08-28 06:10:31 +02:00
James Cole
ed17600f79 Fix currency search. 2020-08-28 06:09:04 +02:00
James Cole
778af9f4e2 Fix #3735 2020-08-28 05:51:02 +02:00
James Cole
8c97754b64 Expand rule/search combination. 2020-08-27 20:22:52 +02:00
James Cole
2393344978 Correct params for search 2020-08-27 07:20:58 +02:00
James Cole
4c81a46af6 New features for rules in search. 2020-08-27 07:12:44 +02:00
James Cole
7df084dd3c Other way to test rule for #3735 2020-08-27 06:35:53 +02:00
James Cole
08aa61a2bf Basic bread crumb code to replace obsolete package 2020-08-27 06:19:41 +02:00
James Cole
a16ac479d5 Fix #3735 2020-08-27 06:19:16 +02:00
James Cole
483e7256f7 Disable layout caches. 2020-08-27 06:18:47 +02:00
James Cole
412b169e3a Kill 2FA 2020-08-26 20:37:30 +02:00
James Cole
bfcd743efa Fix copy/paste error [skip ci] 2020-08-26 20:22:11 +02:00
James Cole
f123c28540 Fix HTML 2020-08-26 20:21:12 +02:00
James Cole
56f9ce333c Updated strings. 2020-08-26 20:19:00 +02:00
James Cole
cd156d6991 Fix #3740 2020-08-26 20:18:27 +02:00
James Cole
c985683ee3 Fixed #3737 2020-08-26 19:41:50 +02:00
James Cole
59ab0c9f0d Fix #3739 2020-08-26 18:18:53 +02:00
James Cole
a24b6711d1 Clean up. 2020-08-26 18:06:47 +02:00
James Cole
7f7d7be646 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-08-26 18:06:24 +02:00
James Cole
2f2a02834b Fix #3736 2020-08-26 18:06:14 +02:00
James Cole
e2a3aa12a8 Merge pull request #3733 from glmdev/glmdev-ldap-filter
Add config option to specify custom LDAP filter
2020-08-26 14:53:11 +00:00
root
a4f70794a2 LdapFilterScope - make ldap filter config call coerce string 2020-08-26 14:46:01 +00:00
root
0ee3941b43 This adds support for the ADLDAP_AUTH_FILTER env var, and the
ldap_auth.custom_filter config option. These are optional.

If provided, the custom filter will be applied to the LDAP query
using the FireflyIII\Scopes\LdapFilterScope class.

This allows the integrator to specify a custom LDAP filter.
2020-08-26 14:07:47 +00:00
James Cole
4e05ce4c35 Wrong field when updating limit 2020-08-25 06:21:44 +02:00
James Cole
c5fa48ca46 Extra text 2020-08-25 06:12:43 +02:00
James Cole
20e39b2e12 Missing default variable. 2020-08-25 06:10:52 +02:00
James Cole
d28394c5d9 Update changelog. 2020-08-24 18:31:26 +02:00
James Cole
86fff1b61c Update packages. 2020-08-24 18:31:18 +02:00
James Cole
71ef5abea5 Remove references to unused code. 2020-08-24 18:31:10 +02:00
James Cole
6b83313ce8 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2020-08-24 18:05:27 +02:00
James Cole
2fe93656ee Delete unused files. 2020-08-24 18:05:05 +02:00
James Cole
ec8003245f Clean up configuration file. 2020-08-24 18:00:49 +02:00
James Cole
8f632cb57b Merge pull request #3725 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/axios-0.20.0
Bump axios from 0.19.2 to 0.20.0 in /frontend
2020-08-24 08:07:53 +00:00
dependabot[bot]
d7b9129c33 Bump axios from 0.19.2 to 0.20.0 in /frontend
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.20.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.20.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-24 08:04:30 +00:00
James Cole
82efe530ea Merge pull request #3724 from firefly-iii/dependabot/npm_and_yarn/frontend/develop/vue-chartjs-3.5.1
Bump vue-chartjs from 3.5.0 to 3.5.1 in /frontend
2020-08-24 08:03:39 +00:00
James Cole
b3805585a7 Merge pull request #3726 from firefly-iii/dependabot/npm_and_yarn/develop/axios-0.20.0
Bump axios from 0.19.2 to 0.20.0
2020-08-24 08:03:03 +00:00
James Cole
04b84fd0dc Merge pull request #3727 from firefly-iii/dependabot/composer/develop/vimeo/psalm-3.14.2
Bump vimeo/psalm from 3.14.1 to 3.14.2
2020-08-24 07:58:56 +00:00
dependabot[bot]
2ac405b2d0 Bump vimeo/psalm from 3.14.1 to 3.14.2
Bumps [vimeo/psalm](https://github.com/vimeo/psalm) from 3.14.1 to 3.14.2.
- [Release notes](https://github.com/vimeo/psalm/releases)
- [Commits](https://github.com/vimeo/psalm/compare/3.14.1...3.14.2)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-24 07:14:39 +00:00
dependabot[bot]
eb8571a508 Bump axios from 0.19.2 to 0.20.0
Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.20.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.20.0)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-24 07:03:01 +00:00
dependabot[bot]
f7e75e9b8a Bump vue-chartjs from 3.5.0 to 3.5.1 in /frontend
Bumps [vue-chartjs](https://github.com/apertureless/vue-chartjs) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/apertureless/vue-chartjs/releases)
- [Changelog](https://github.com/apertureless/vue-chartjs/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/apertureless/vue-chartjs/compare/v3.5.0...v3.5.1)

Signed-off-by: dependabot[bot] <support@github.com>
2020-08-24 06:43:49 +00:00
James Cole
0fd7dabbc1 Restore missing functions. 2020-08-24 07:38:33 +02:00
James Cole
9123454545 Migrate to new rule engine. 2020-08-24 07:31:50 +02:00
James Cole
3141ec0406 Expand search. 2020-08-24 07:03:17 +02:00
James Cole
4bf86500bd Fix tag search 2020-08-23 18:48:40 +02:00
James Cole
bee54146bf Fix #3721 2020-08-23 18:48:24 +02:00
James Cole
28698cc769 Make sure limits exist in rule engine. 2020-08-23 17:00:47 +02:00
James Cole
41f2339c8c Switch to new rule engine on command line. 2020-08-23 16:37:08 +02:00
James Cole
ce34e097a2 Add new rule engine to API commands. 2020-08-23 16:26:39 +02:00
James Cole
fecc9f7659 Fix actions and associated tests. 2020-08-23 16:12:16 +02:00
James Cole
139b3ffab4 Test more rule actions. 2020-08-23 09:21:50 +02:00
James Cole
febe60b3d1 Test more actions in new format. 2020-08-23 08:51:58 +02:00
James Cole
fc519c41bc Update conversion actions. 2020-08-23 08:03:28 +02:00
James Cole
6e074d9b8b Start testing new rule actions. 2020-08-23 07:42:14 +02:00
James Cole
d89a4d8a54 Fix #3720 2020-08-23 05:52:59 +02:00
James Cole
a504617425 Mark all triggers as deprecated. 2020-08-22 20:07:39 +02:00
James Cole
0c0fef6e84 Fix #3715 2020-08-22 19:48:00 +02:00
James Cole
1dfda62125 Fix #3715 2020-08-22 19:46:08 +02:00
James Cole
5e0c0e25f2 Fix #3716 2020-08-22 19:27:16 +02:00
James Cole
07220eb167 Update rule actions. 2020-08-22 17:18:15 +02:00
James Cole
216a0a186c Implement first version of the new rule engine. 2020-08-22 16:55:54 +02:00
James Cole
14df37712c Fix date searches. 2020-08-22 13:02:33 +02:00
James Cole
ab5a146277 Rename class. 2020-08-22 13:01:37 +02:00
James Cole
24a373abf4 Fix search 2020-08-22 12:25:00 +02:00
James Cole
ffca935ced Expand search. 2020-08-22 12:24:01 +02:00
James Cole
d69934ca8f Rule engine and search engine now use the same operators; making them interchangeable. 2020-08-21 08:23:44 +02:00
James Cole
3081911eae Merge tag '5.4.0-alpha.2' into develop
5.4.0-alpha.2
2020-08-21 08:04:50 +02:00
1409 changed files with 58568 additions and 97980 deletions

View File

@@ -9,6 +9,7 @@ parameters:
- '#is not allowed to extend#'
- '#is neither abstract nor final#'
- '#Control structures using switch should not be used\.#'
- '#has a nullable return type declaration#'
paths:
- ../app
- ../database
@@ -16,4 +17,4 @@ parameters:
- ../bootstrap/app.php
# The level 8 is the highest level. original was 5
level: 0
level: 5

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# Install composer packages
composer install --no-suggest --no-scripts --no-ansi
composer install --no-scripts --no-ansi
# enable test .env file.
cp .ci/.env.ci .env

View File

@@ -9,13 +9,13 @@ fi_FI
fr_FR
hu_HU
it_IT
lt_LT
nb_NO
nl_NL
pl_PL
pt_BR
ro_RO
ru_RU
sk_SK
sv_SE
vi_VN
zh-hans_CN

View File

@@ -10,7 +10,6 @@ APP_DEBUG=false
SITE_OWNER=mail@example.com
# The encryption key for your sessions. Keep this very secure.
# If you generate a new one all existing attachments must be considered LOST.
# Change it to a string of exactly 32 chars or use something like `php artisan key:generate` to generate it.
# If you use Docker or similar, you can set this variable from a file by using APP_KEY_FILE
APP_KEY=SomeRandomStringOf32CharsExactly
@@ -53,6 +52,11 @@ LOG_CHANNEL=stack
# nothing will get logged, ever.
APP_LOG_LEVEL=notice
# Audit log level.
# set to "emergency" if you dont want to store audit logs.
# leave on info otherwise.
AUDIT_LOG_LEVEL=info
# Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III
# For other database types, please see the FAQ: https://docs.firefly-iii.org/support/faq
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
@@ -143,6 +147,7 @@ SPARKPOST_SECRET=
# Firefly III can send you the following messages
SEND_REGISTRATION_MAIL=true
SEND_ERROR_MESSAGE=true
SEND_LOGIN_NEW_IP_WARNING=true
# These messages contain (sensitive) transaction information:
SEND_REPORT_JOURNALS=true
@@ -179,11 +184,25 @@ AUTHENTICATION_GUARD=web
# Some systems use X-Auth headers. In that case, use HTTP_X_AUTH_USERNAME or HTTP_X_AUTH_EMAIL
# Depending on your system, REMOTE_USER may need to be changed to HTTP_REMOTE_USER
#
# Firefly III won't be able to send emails when the header you use isn't an email address.
# If this header is 'unexpectedly empty', check out the documentation.
# https://docs.firefly-iii.org/advanced-installation/authentication
#
AUTHENTICATION_GUARD_HEADER=REMOTE_USER
# Likewise, it's impossible to log out users who's authentication is handled by an external system.
#
# Firefly III uses email addresses as user identifiers. When you're using an external authentication guard
# that doesn't do this, Firefly III is incapable of emailing you. Messages sent to "Bill Gates" always fail.
#
# However, if you set this value, Firefly III will store the value from this header as the user's backup
# email address and use it to communicate. So user "Bill Gates" could still have
# the email address "bill@microsoft.com".
#
# Example value: AUTHENTICATION_GUARD_EMAIL=HTTP_X_AUTH_EMAIL
#
AUTHENTICATION_GUARD_EMAIL=
# It's impossible to log out users who's authentication is handled by an external system.
# Enter a custom URL here that will force a logout (your authentication provider can tell you).
# Setting this variable only works when AUTHENTICATION_GUARD != web
#
@@ -257,6 +276,11 @@ TRACKER_URL=
# To read more about this feature, go to this page: https://docs.firefly-iii.org/support/telemetry
SEND_TELEMETRY=false
#
# Firefly III supports webhooks. These are security sensitive and must be enabled manually first.
#
ALLOW_WEBHOOKS=false
# You can fine tune the start-up of a Docker container by editing these environment variables.
# Use this at your own risk. Disabling certain checks and features may result in lost of inconsistent data.
# However if you know what you're doing you can significantly speed up container start times.

3
.gitattributes vendored
View File

@@ -3,3 +3,6 @@
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
/tests export-ignore
/phpunit.xml export-ignore
/.ci export-ignore

7
.github/.mergify.yml vendored Normal file
View File

@@ -0,0 +1,7 @@
pull_request_rules:
- name: PR on main is never approved.
conditions:
- base=main
actions:
close:
message: Please reopen this PR on the `develop` branch. Thank you.

View File

@@ -1,6 +1,9 @@
---
name: Bug report
about: Create a report to help Firefly III improve
title: ''
labels: ''
assignees: ''
---
@@ -13,7 +16,12 @@ I am running Firefly III version x.x.x, and my problem is:
<!-- What do you need to do to trigger this bug? -->
**Extra info**
<!-- Please add extra info here, such as OS, browser, and the output from the /debug page of your Firefly III installation (click the version at the bottom). -->
<!-- Please add extra info here, such as OS, browser, and the output from the /debug page of your Firefly III installation (click the version at the bottom).
DO NOT PUT ```BACKTICKS``` AROUND THE OUTPUT OF THE /debug PAGE
-->
**Bonus points**
<!-- Before you submit, verify the following please: -->

View File

@@ -10,7 +10,11 @@ I am running Firefly III version x.x.x.
<!-- (if relevant of course) -->
**Extra info**
<!-- Please add extra info here, such as OS, browser, and the output from the `/debug`-page of your Firefly III installation (click the version at the bottom). -->
<!-- Please add extra info here, such as OS, browser, and the output from the `/debug`-page of your Firefly III installation (click the version at the bottom).
DO NOT PUT ```BACKTICKS``` AROUND THE OUTPUT OF THE /debug PAGE
-->
**Bonus points**

View File

@@ -1,6 +1,9 @@
---
name: Feature request
about: Suggest an idea or feature for Firefly III
title: ''
labels: ''
assignees: ''
---
@@ -28,4 +31,4 @@ Please describe your feature request:
- Make a drawing
- Donate money (just kidding ;)
-->
-->

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Ask a question
url: https://github.com/firefly-iii/firefly-iii/discussions
about: Please ask and answer questions here.

View File

@@ -1,15 +1,3 @@
# Welcome to Firefly III on Github!
# [Contributing guidelines](https://docs.firefly-iii.org/other-pages/contributing)
:+1::tada: Thank you for taking the time to contribute something to Firefly III!
## Feature requests
I am always interested in expanding Firefly III's many features. Just open a ticket or [drop me a line](mailto:james@firefly-iii.org).
## Pull requests
When contributing to Firefly III, please first discuss the change you wish to make via issue, email, or any other method. I can only accept pull requests against the `develop` branch, never the `main` branch.
## Translations :us: :fr: :de:
If you see a spelling error, grammatical error or a weird translation in your language, please join [our CrowdIn](https://crowdin.com/project/firefly-iii) project. There, you can submit your translations and fixes. The GitHub repository will download these automatically and they will be included in the next release.
[Contributing guidelines](https://docs.firefly-iii.org/other-pages/contributing)

1
.github/funding.yml vendored
View File

@@ -2,4 +2,3 @@
github: jc5
patreon: JC5
custom: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=L62W7DVD5ETPC&source=url

23
.github/workflows/stale.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
name: "Close stale issues"
on:
schedule:
- cron: "30 1 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
stale-pr-message: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
days-before-stale: 14
days-before-close: 7
exempt-issue-labels: 'enhancement,feature,bug,announcement'

View File

@@ -14,7 +14,6 @@ branches:
before_script:
- phpenv config-rm xdebug.ini || return 0
- composer global require hirak/prestissimo --no-plugins --no-scripts
script:
- "./.ci/phpstan.sh"

View File

@@ -60,7 +60,7 @@ class AboutController extends Controller
'driver' => $currentDriver,
];
return response()->json(['data' => $data])->header('Content-Type', 'application/vnd.api+json');
return response()->json(['data' => $data])->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -78,6 +78,6 @@ class AboutController extends Controller
$resource = new Item(auth()->user(), $transformer, 'users');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -102,7 +102,7 @@ class AccountController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -155,7 +155,7 @@ class AccountController extends Controller
$resource = new FractalCollection($accounts, $transformer, self::RESOURCE_KEY);
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -191,7 +191,7 @@ class AccountController extends Controller
$resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -211,7 +211,7 @@ class AccountController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($account, $transformer, self::RESOURCE_KEY);
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -233,7 +233,7 @@ class AccountController extends Controller
$resource = new Item($account, $transformer, self::RESOURCE_KEY);
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -283,7 +283,7 @@ class AccountController extends Controller
$resource = new FractalCollection($groups, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -306,6 +306,6 @@ class AccountController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($account, $transformer, self::RESOURCE_KEY);
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -95,8 +95,8 @@ class AttachmentController extends Controller
* @param Attachment $attachment
*
* @codeCoverageIgnore
* @throws FireflyException
* @return LaravelResponse
* @throws FireflyException
*/
public function download(Attachment $attachment): LaravelResponse
{
@@ -160,7 +160,7 @@ class AttachmentController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -179,7 +179,7 @@ class AttachmentController extends Controller
$resource = new Item($attachment, $transformer, 'attachments');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -187,8 +187,8 @@ class AttachmentController extends Controller
*
* @param AttachmentStoreRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(AttachmentStoreRequest $request): JsonResponse
{
@@ -202,7 +202,7 @@ class AttachmentController extends Controller
$resource = new Item($attachment, $transformer, 'attachments');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -225,7 +225,7 @@ class AttachmentController extends Controller
$resource = new Item($attachment, $transformer, 'attachments');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**

View File

@@ -41,7 +41,6 @@ class AccountController extends Controller
use AccountFilter;
private array $balanceTypes;
private AccountRepositoryInterface $repository;
@@ -76,16 +75,14 @@ class AccountController extends Controller
$query = $data['query'];
$date = $data['date'] ?? today(config('app.timezone'));
/** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class);
$return = [];
$result = $repository->searchAccount((string) $query, $types, $data['limit']);
$result = $this->repository->searchAccount((string)$query, $types, $data['limit']);
$defaultCurrency = app('amount')->getDefaultCurrency();
/** @var Account $account */
foreach ($result as $account) {
$nameWithBalance = $account->name;
$currency = $repository->getAccountCurrency($account) ?? $defaultCurrency;
$currency = $this->repository->getAccountCurrency($account) ?? $defaultCurrency;
if (in_array($account->accountType->type, $this->balanceTypes, true)) {
$balance = app('steam')->balance($account, $date);
@@ -100,6 +97,7 @@ class AccountController extends Controller
'currency_id' => $currency->id,
'currency_name' => $currency->name,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places,
];
}
@@ -108,11 +106,14 @@ class AccountController extends Controller
$order = [AccountType::ASSET, AccountType::REVENUE, AccountType::EXPENSE];
usort($return, function ($a, $b) use ($order) {
usort(
$return, function ($a, $b) use ($order) {
$pos_a = array_search($a['type'], $order);
$pos_b = array_search($b['type'], $order);
return $pos_a - $pos_b;
});
}
);
return response()->json($return);
}

View File

@@ -58,7 +58,6 @@ class BillController extends Controller
}
/**
* TODO add limit
* @param AutocompleteRequest $request
*
* @return JsonResponse

View File

@@ -58,7 +58,6 @@ class BudgetController extends Controller
}
/**
* TODO add limit
* @param AutocompleteRequest $request
*
* @return JsonResponse

View File

@@ -89,7 +89,7 @@ class CurrencyController extends Controller
*/
public function currencies(AutocompleteRequest $request): JsonResponse
{
$data = $request->getData();
$data = $request->getData();
$collection = $this->repository->searchCurrency($data['query'], $data['limit']);
$result = [];

View File

@@ -76,7 +76,7 @@ class PiggyBankController extends Controller
/** @var PiggyBank $piggy */
foreach ($piggies as $piggy) {
$currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency;
$currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency;
$response[] = [
'id' => $piggy->id,
'name' => $piggy->name,
@@ -103,9 +103,9 @@ class PiggyBankController extends Controller
$response = [];
/** @var PiggyBank $piggy */
foreach ($piggies as $piggy) {
$currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency;
$currentAmount = $this->piggyRepository->getRepetition($piggy)->currentamount ?? '0';
$response[] = [
$currency = $this->accountRepository->getAccountCurrency($piggy->account) ?? $defaultCurrency;
$currentAmount = $this->piggyRepository->getRepetition($piggy)->currentamount ?? '0';
$response[] = [
'id' => $piggy->id,
'name' => $piggy->name,
'name_with_balance' => sprintf(

View File

@@ -111,7 +111,7 @@ class AvailableBudgetController extends Controller
$resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -132,7 +132,7 @@ class AvailableBudgetController extends Controller
$resource = new Item($availableBudget, $transformer, 'available_budgets');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -145,6 +145,9 @@ class AvailableBudgetController extends Controller
public function store(AvailableBudgetRequest $request): JsonResponse
{
$data = $request->getAll();
$data['start']->startOfDay();
$data['end']->endOfDay();
/** @var TransactionCurrencyFactory $factory */
$factory = app(TransactionCurrencyFactory::class);
$currency = $factory->find($data['currency_id'], $data['currency_code']);
@@ -162,7 +165,7 @@ class AvailableBudgetController extends Controller
$resource = new Item($availableBudget, $transformer, 'available_budgets');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -202,7 +205,7 @@ class AvailableBudgetController extends Controller
$resource = new Item($availableBudget, $transformer, 'available_budgets');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -24,7 +24,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\BillRequest;
use FireflyIII\Api\V1\Requests\BillUpdateRequest;
use FireflyIII\Api\V1\Requests\BillStoreRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Bill;
@@ -49,8 +50,7 @@ class BillController extends Controller
{
use TransactionFilter;
/** @var BillRepositoryInterface The bill repository */
private $repository;
private BillRepositoryInterface $repository;
/**
@@ -103,7 +103,7 @@ class BillController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -143,7 +143,7 @@ class BillController extends Controller
$resource = new FractalCollection($bills, $transformer, 'bills');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -178,7 +178,7 @@ class BillController extends Controller
$resource = new FractalCollection($rules, $transformer, 'rules');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -199,18 +199,18 @@ class BillController extends Controller
$resource = new Item($bill, $transformer, 'bills');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Store a bill.
*
* @param BillRequest $request
* @param BillStoreRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(BillRequest $request): JsonResponse
public function store(BillStoreRequest $request): JsonResponse
{
$bill = $this->repository->store($request->getAll());
$manager = $this->getManager();
@@ -221,7 +221,7 @@ class BillController extends Controller
$resource = new Item($bill, $transformer, 'bills');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -279,18 +279,18 @@ class BillController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Update a bill.
*
* @param BillRequest $request
* @param BillUpdateRequest $request
* @param Bill $bill
*
* @return JsonResponse
*/
public function update(BillRequest $request, Bill $bill): JsonResponse
public function update(BillUpdateRequest $request, Bill $bill): JsonResponse
{
$data = $request->getAll();
$bill = $this->repository->update($bill, $data);
@@ -302,7 +302,7 @@ class BillController extends Controller
$resource = new Item($bill, $transformer, 'bills');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -23,8 +23,6 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use Exception;
use FireflyIII\Api\V1\Requests\BudgetLimitRequest;
use FireflyIII\Api\V1\Requests\BudgetStoreRequest;
use FireflyIII\Api\V1\Requests\BudgetUpdateRequest;
use FireflyIII\Exceptions\FireflyException;
@@ -109,7 +107,7 @@ class BudgetController extends Controller
$resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -138,7 +136,7 @@ class BudgetController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -185,7 +183,7 @@ class BudgetController extends Controller
$resource = new FractalCollection($budgets, $transformer, 'budgets');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -206,7 +204,7 @@ class BudgetController extends Controller
$resource = new Item($budget, $transformer, 'budgets');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -214,9 +212,9 @@ class BudgetController extends Controller
*
* @param BudgetStoreRequest $request
*
* @return JsonResponse
* @throws FireflyException
*
* @return JsonResponse
*/
public function store(BudgetStoreRequest $request): JsonResponse
{
@@ -229,7 +227,7 @@ class BudgetController extends Controller
$resource = new Item($budget, $transformer, 'budgets');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -293,7 +291,7 @@ class BudgetController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -316,7 +314,7 @@ class BudgetController extends Controller
$resource = new Item($budget, $transformer, 'budgets');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}

View File

@@ -24,7 +24,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\BudgetLimitRequest;
use FireflyIII\Api\V1\Requests\BudgetLimitStoreRequest;
use FireflyIII\Api\V1\Requests\BudgetLimitUpdateRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\BudgetLimit;
@@ -49,11 +50,8 @@ class BudgetLimitController extends Controller
{
use TransactionFilter;
/** @var BudgetLimitRepositoryInterface */
private $blRepository;
/** @var BudgetRepositoryInterface The budget repository */
private $repository;
private BudgetLimitRepositoryInterface $blRepository;
private BudgetRepositoryInterface $repository;
/**
@@ -104,9 +102,10 @@ class BudgetLimitController extends Controller
public function index(Request $request): JsonResponse
{
$manager = $this->getManager();
$budgetId = (int) ($request->get('budget_id') ?? 0);
$manager->parseIncludes('budget');
$budgetId = (int)($request->get('budget_id') ?? 0);
$budget = $this->repository->findNull($budgetId);
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$this->parameters->set('budget_id', $budgetId);
$collection = new Collection;
@@ -129,7 +128,7 @@ class BudgetLimitController extends Controller
$resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -150,19 +149,19 @@ class BudgetLimitController extends Controller
$resource = new Item($budgetLimit, $transformer, 'budget_limits');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Store a newly created resource in storage.
*
* @param BudgetLimitRequest $request
* @param BudgetLimitStoreRequest $request
*
* @return JsonResponse
* @throws FireflyException
*
*/
public function store(BudgetLimitRequest $request): JsonResponse
public function store(BudgetLimitStoreRequest $request): JsonResponse
{
$data = $request->getAll();
$data['start_date'] = $data['start'];
@@ -178,7 +177,7 @@ class BudgetLimitController extends Controller
$resource = new Item($budgetLimit, $transformer, 'budget_limits');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -192,7 +191,7 @@ class BudgetLimitController extends Controller
*/
public function transactions(Request $request, BudgetLimit $budgetLimit): JsonResponse
{
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$type = $request->get('type') ?? 'default';
$this->parameters->set('type', $type);
@@ -231,22 +230,22 @@ class BudgetLimitController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Update the specified resource in storage.
*
* @param BudgetLimitRequest $request
* @param BudgetLimit $budgetLimit
* @param BudgetLimitUpdateRequest $request
* @param BudgetLimit $budgetLimit
*
* @return JsonResponse
*/
public function update(BudgetLimitRequest $request, BudgetLimit $budgetLimit): JsonResponse
public function update(BudgetLimitUpdateRequest $request, BudgetLimit $budgetLimit): JsonResponse
{
$data = $request->getAll();
$budgetLimit = $this->blRepository->update($budgetLimit, $data);
$manager = $this->getManager();
$data = $request->getAll();
$budgetLimit = $this->blRepository->update($budgetLimit, $data);
$manager = $this->getManager();
/** @var BudgetLimitTransformer $transformer */
$transformer = app(BudgetLimitTransformer::class);
@@ -254,7 +253,7 @@ class BudgetLimitController extends Controller
$resource = new Item($budgetLimit, $transformer, 'budget_limits');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -23,7 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\CategoryRequest;
use FireflyIII\Api\V1\Requests\CategoryStoreRequest;
use FireflyIII\Api\V1\Requests\CategoryUpdateRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Category;
@@ -46,9 +47,7 @@ use League\Fractal\Resource\Item;
class CategoryController extends Controller
{
use TransactionFilter;
/** @var CategoryRepositoryInterface The category repository */
private $repository;
private CategoryRepositoryInterface $repository;
/**
@@ -99,7 +98,7 @@ class CategoryController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -147,7 +146,7 @@ class CategoryController extends Controller
$resource = new FractalCollection($categories, $transformer, 'categories');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -169,18 +168,18 @@ class CategoryController extends Controller
$resource = new Item($category, $transformer, 'categories');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Store new category.
*
* @param CategoryRequest $request
* @param CategoryStoreRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(CategoryRequest $request): JsonResponse
public function store(CategoryStoreRequest $request): JsonResponse
{
$category = $this->repository->store($request->getAll());
$manager = $this->getManager();
@@ -191,7 +190,7 @@ class CategoryController extends Controller
$resource = new Item($category, $transformer, 'categories');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -247,18 +246,18 @@ class CategoryController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Update the category.
*
* @param CategoryRequest $request
* @param CategoryUpdateRequest $request
* @param Category $category
*
* @return JsonResponse
*/
public function update(CategoryRequest $request, Category $category): JsonResponse
public function update(CategoryUpdateRequest $request, Category $category): JsonResponse
{
$data = $request->getAll();
$category = $this->repository->update($category, $data);
@@ -270,7 +269,7 @@ class CategoryController extends Controller
$resource = new Item($category, $transformer, 'categories');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}

View File

@@ -149,7 +149,7 @@ class AccountController extends Controller
foreach ($tempData as $entry) {
$currencyId = $entry['currency_id'];
$name = $entry['name'];
$chartData[$currencyId]['entries'][$name] = round($entry['difference'], $chartData[$currencyId]['currency_decimal_places']);
$chartData[$currencyId]['entries'][$name] = round((float) $entry['difference'], $chartData[$currencyId]['currency_decimal_places']);
}
$chartData = array_values($chartData);
@@ -206,11 +206,11 @@ class AccountController extends Controller
/** @var Carbon $currentStart */
$currentStart = clone $start;
$range = app('steam')->balanceInRange($account, $start, clone $end);
$previous = round(array_values($range)[0], 12);
$previous = round((float) array_values($range)[0], 12);
while ($currentStart <= $end) {
$format = $currentStart->format('Y-m-d');
$label = $currentStart->format('Y-m-d');
$balance = array_key_exists($format, $range) ? round($range[$format], 12) : $previous;
$balance = array_key_exists($format, $range) ? round((float) $range[$format], 12) : $previous;
$previous = $balance;
$currentStart->addDay();
$currentSet['entries'][$label] = $balance;
@@ -300,7 +300,7 @@ class AccountController extends Controller
foreach ($tempData as $entry) {
$currencyId = $entry['currency_id'];
$name = $entry['name'];
$chartData[$currencyId]['entries'][$name] = round($entry['difference'], $chartData[$currencyId]['currency_decimal_places']);
$chartData[$currencyId]['entries'][$name] = round((float) $entry['difference'], $chartData[$currencyId]['currency_decimal_places']);
}
$chartData = array_values($chartData);

View File

@@ -31,7 +31,6 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection;
/**
* Class AvailableBudgetController
@@ -106,7 +105,7 @@ class AvailableBudgetController extends Controller
'currency_decimal_places' => $currency->decimal_places,
'type' => 'line', // line, area or bar
'yAxisID' => 0, // 0, 1, 2
'entries' => [round($left, $currency->decimal_places)],
'entries' => [round((float) $left, $currency->decimal_places)],
],
];

View File

@@ -58,13 +58,10 @@ class BudgetController extends Controller
$this->middleware(
function ($request, $next) {
//$this->generator = app(GeneratorInterface::class);
$this->repository = app(BudgetRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->blRepository = app(BudgetLimitRepositoryInterface::class);
//$this->nbRepository = app(NoBudgetRepositoryInterface::class);
return $next($request);
}
);
@@ -134,94 +131,6 @@ class BudgetController extends Controller
return $arr;
}
/**
* @param array $budgetNames
* @param array $currencyNames
*
* @return array
*/
private function createSets(array $budgetNames, array $currencyNames): array
{
$return = [];
foreach ($currencyNames as $currencyName) {
$entries = [];
foreach ($budgetNames as $budgetName) {
$label = sprintf('%s (%s)', $budgetName, $currencyName);
$entries[$label] = '0';
}
// left
$return['left'] = [
'label' => sprintf('%s (%s)', trans('firefly.left'), $currencyName),
'data_type' => 'left',
'currency_name' => $currencyName,
'type' => 'bar',
'yAxisID' => 0, // 0, 1, 2
'entries' => $entries,
];
// spent_capped
$return['spent_capped'] = [
'label' => sprintf('%s (%s)', trans('firefly.spent'), $currencyName),
'data_type' => 'spent_capped',
'currency_name' => $currencyName,
'type' => 'bar',
'yAxisID' => 0, // 0, 1, 2
'entries' => $entries,
];
// overspent
$return['overspent'] = [
'label' => sprintf('%s (%s)', trans('firefly.overspent'), $currencyName),
'data_type' => 'overspent',
'currency_name' => $currencyName,
'type' => 'bar',
'yAxisID' => 0, // 0, 1, 2
'entries' => $entries,
];
}
return $return;
}
/**
* @param array $basic
* @param array $sets
*
* @return array
*/
private function fillSets(array $basic, array $sets): array
{
foreach ($sets as $set) {
$label = $set['label'];
//$basic['spent']['entries'][$label] = $set['entries']['spent'];
$basic['spent_capped']['entries'][$label] = $set['entries']['spent_capped'];
$basic['left']['entries'][$label] = $set['entries']['left'];
$basic['overspent']['entries'][$label] = $set['entries']['overspent'];
}
return $basic;
}
/**
* @param array $expenses
*
* @return array
*/
private function filterNulls(array $expenses): array
{
$return = [];
/** @var array|null $arr */
foreach ($expenses as $arr) {
if ([] !== $arr) {
$return[] = $arr;
}
}
return $return;
}
/**
* @param Budget $budget
* @param Carbon $start
@@ -292,10 +201,97 @@ class BudgetController extends Controller
$return['entries']['spent'] = $sumSpent;
$return['entries']['amount'] = $limit->amount;
$return['entries']['spent_capped'] = 1 === bccomp($sumSpent, $limit->amount) ? $limit->amount : $sumSpent;
$return['entries']['left'] = 1 === bccomp($limit->amount, $sumSpent) ? bcadd($set['sum'], $limit->amount) : '0'; // left
$return['entries']['left'] = 1 === bccomp($limit->amount, $sumSpent) ? bcadd($set['sum'], $limit->amount) : '0'; // left
$return['entries']['overspent'] = 1 === bccomp($limit->amount, $sumSpent) ? '0' : bcmul(bcadd($set['sum'], $limit->amount), '-1'); // overspent
return $return;
}
/**
* @param array $expenses
*
* @return array
*/
private function filterNulls(array $expenses): array
{
$return = [];
/** @var array|null $arr */
foreach ($expenses as $arr) {
if ([] !== $arr) {
$return[] = $arr;
}
}
return $return;
}
/**
* @param array $budgetNames
* @param array $currencyNames
*
* @return array
*/
private function createSets(array $budgetNames, array $currencyNames): array
{
$return = [];
foreach ($currencyNames as $currencyName) {
$entries = [];
foreach ($budgetNames as $budgetName) {
$label = sprintf('%s (%s)', $budgetName, $currencyName);
$entries[$label] = '0';
}
// left
$return['left'] = [
'label' => sprintf('%s (%s)', trans('firefly.left'), $currencyName),
'data_type' => 'left',
'currency_name' => $currencyName,
'type' => 'bar',
'yAxisID' => 0, // 0, 1, 2
'entries' => $entries,
];
// spent_capped
$return['spent_capped'] = [
'label' => sprintf('%s (%s)', trans('firefly.spent'), $currencyName),
'data_type' => 'spent_capped',
'currency_name' => $currencyName,
'type' => 'bar',
'yAxisID' => 0, // 0, 1, 2
'entries' => $entries,
];
// overspent
$return['overspent'] = [
'label' => sprintf('%s (%s)', trans('firefly.overspent'), $currencyName),
'data_type' => 'overspent',
'currency_name' => $currencyName,
'type' => 'bar',
'yAxisID' => 0, // 0, 1, 2
'entries' => $entries,
];
}
return $return;
}
/**
* @param array $basic
* @param array $sets
*
* @return array
*/
private function fillSets(array $basic, array $sets): array
{
foreach ($sets as $set) {
$label = $set['label'];
$basic['spent_capped']['entries'][$label] = $set['entries']['spent_capped'];
$basic['left']['entries'][$label] = $set['entries']['left'];
$basic['overspent']['entries'][$label] = $set['entries']['overspent'];
}
return $basic;
}
}

View File

@@ -38,15 +38,10 @@ use Illuminate\Http\JsonResponse;
*/
class CategoryController extends Controller
{
/** @var CategoryRepositoryInterface */
private $categoryRepository;
/** @var NoCategoryRepositoryInterface */
private $noCatRepository;
/** @var OperationsRepositoryInterface */
private $opsRepository;
private CategoryRepositoryInterface $categoryRepository;
private NoCategoryRepositoryInterface $noCatRepository;
private OperationsRepositoryInterface $opsRepository;
private array $categories;
/**
* AccountController constructor.
@@ -63,6 +58,7 @@ class CategoryController extends Controller
$this->categoryRepository = app(CategoryRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class);
$this->noCatRepository = app(NoCategoryRepositoryInterface::class);
$this->categories = [];
$this->categoryRepository->setUser($user);
$this->opsRepository->setUser($user);
$this->noCatRepository->setUser($user);
@@ -87,53 +83,75 @@ class CategoryController extends Controller
/** @var Carbon $end */
$end = $dates['end'];
$tempData = [];
$spentWith = $this->opsRepository->listExpenses($start, $end);
$spentWithout = $this->noCatRepository->listExpenses($start, $end);
$tempData = [];
$spentWith = $this->opsRepository->listExpenses($start, $end);
$spentWithout = $this->noCatRepository->listExpenses($start, $end);
$categories = [];
/** @var array $set */
foreach ([$spentWith, $spentWithout,] as $set) {
$tempData = $this->processArray($tempData, $set);
}
$chartData = $this->sortArray($tempData);
foreach ([$spentWith, $spentWithout, ] as $set) {
foreach ($set as $currency) {
foreach ($currency['categories'] as $category) {
$categories[] = $category['name'];
$outKey = sprintf('%d-e', $currency['currency_id']);
$tempData[$outKey] = $tempData[$outKey] ?? [
'currency_id' => $currency['currency_id'],
'label' => (string) trans('firefly.box_spent_in_currency', ['currency' => $currency['currency_name']]),
'currency_code' => $currency['currency_code'],
'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'],
'type' => 'bar', // line, area or bar
'yAxisID' => 0, // 0, 1, 2
'entries' => [],
];
return response()->json($chartData);
}
foreach ($category['transaction_journals'] as $journal) {
// is it expense or income?
$currentKey = sprintf('%d-%s', $currency['currency_id'], 'e');
$name = $category['name'];
$tempData[$currentKey]['entries'][$name] = $tempData[$currentKey]['entries'][$name] ?? '0';
$tempData[$currentKey]['entries'][$name] = bcadd($tempData[$currentKey]['entries'][$name], $journal['amount']);
}
/**
* @param array $tempData
* @param array $set
*
* @return array
*/
private function processArray(array $tempData, array $set): array
{
foreach ($set as $currency) {
foreach ($currency['categories'] as $category) {
$this->categories[] = $category['name'];
$outKey = sprintf('%d-e', $currency['currency_id']);
$tempData[$outKey] = $tempData[$outKey] ?? [
'currency_id' => $currency['currency_id'],
'label' => (string)trans('firefly.box_spent_in_currency', ['currency' => $currency['currency_name']]),
'currency_code' => $currency['currency_code'],
'currency_symbol' => $currency['currency_symbol'],
'currency_decimal_places' => $currency['currency_decimal_places'],
'type' => 'bar', // line, area or bar
'yAxisID' => 0, // 0, 1, 2
'entries' => [],
];
foreach ($category['transaction_journals'] as $journal) {
// is it expense or income?
$currentKey = sprintf('%d-%s', $currency['currency_id'], 'e');
$name = $category['name'];
$tempData[$currentKey]['entries'][$name] = $tempData[$currentKey]['entries'][$name] ?? '0';
$tempData[$currentKey]['entries'][$name] = bcadd($tempData[$currentKey]['entries'][$name], $journal['amount']);
}
}
}
return $tempData;
}
/**
* @param array $tempData
*
* @return array
*/
private function sortArray(array $tempData): array
{
// re-sort every spent array and add 0 for missing entries.
foreach ($tempData as $index => $set) {
$oldSet = $set['entries'];
$newSet = [];
foreach ($categories as $category) {
foreach ($this->categories as $category) {
$value = $oldSet[$category] ?? '0';
$value = -1 === bccomp($value, '0') ? bcmul($value, '-1') : $value;
$newSet[$category] = $value;
}
$tempData[$index]['entries'] = $newSet;
}
$chartData = array_values($tempData);
return response()->json($chartData);
return array_values($tempData);
}
}

View File

@@ -71,24 +71,7 @@ class ConfigurationController extends Controller
{
$configData = $this->getConfigData();
return response()->json(['data' => $configData])->header('Content-Type', 'application/vnd.api+json');
}
/**
* Update the configuration.
*
* @param ConfigurationRequest $request
* @param string $name
*
* @return JsonResponse
*/
public function update(ConfigurationRequest $request, string $name): JsonResponse
{
$data = $request->getAll();
app('fireflyconfig')->set($name, $data['value']);
$configData = $this->getConfigData();
return response()->json(['data' => $configData])->header('Content-Type', 'application/vnd.api+json');
return response()->json(['data' => $configData])->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -114,4 +97,21 @@ class ConfigurationController extends Controller
'single_user_mode' => null === $singleUser ? null : $singleUser->data,
];
}
/**
* Update the configuration.
*
* @param ConfigurationRequest $request
* @param string $name
*
* @return JsonResponse
*/
public function update(ConfigurationRequest $request, string $name): JsonResponse
{
$data = $request->getAll();
app('fireflyconfig')->set($name, $data['value']);
$configData = $this->getConfigData();
return response()->json(['data' => $configData])->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -44,9 +44,9 @@ abstract class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected const CONTENT_TYPE = 'application/vnd.api+json';
protected ParameterBag $parameters;
/**
* Controller constructor.
*/
@@ -54,43 +54,17 @@ abstract class Controller extends BaseController
{
// get global parameters
$this->parameters = $this->getParameters();
}
$this->middleware(
function ($request, $next) {
if (auth()->check()) {
$language = app('steam')->getLanguage();
app()->setLocale($language);
}
/**
* Method to help build URI's.
*
* @return string
*/
final protected function buildParams(): string
{
$return = '?';
$params = [];
foreach ($this->parameters as $key => $value) {
if ('page' === $key) {
continue;
return $next($request);
}
if ($value instanceof Carbon) {
$params[$key] = $value->format('Y-m-d');
continue;
}
$params[$key] = $value;
}
$return .= http_build_query($params);
);
return $return;
}
/**
* @return Manager
*/
final protected function getManager(): Manager
{
// create some objects:
$manager = new Manager;
$baseUrl = request()->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
return $manager;
}
/**
@@ -101,7 +75,7 @@ abstract class Controller extends BaseController
private function getParameters(): ParameterBag
{
$bag = new ParameterBag;
$page = (int) request()->get('page');
$page = (int)request()->get('page');
if (0 === $page) {
$page = 1;
}
@@ -128,11 +102,47 @@ abstract class Controller extends BaseController
foreach ($integers as $integer) {
$value = request()->query->get($integer);
if (null !== $value) {
$bag->set($integer, (int) $value);
$bag->set($integer, (int)$value);
}
}
return $bag;
}
/**
* Method to help build URI's.
*
* @return string
*/
final protected function buildParams(): string
{
$return = '?';
$params = [];
foreach ($this->parameters as $key => $value) {
if ('page' === $key) {
continue;
}
if ($value instanceof Carbon) {
$params[$key] = $value->format('Y-m-d');
continue;
}
$params[$key] = $value;
}
return $return . http_build_query($params);
}
/**
* @return Manager
*/
final protected function getManager(): Manager
{
// create some objects:
$manager = new Manager;
$baseUrl = request()->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
return $manager;
}
}

View File

@@ -23,7 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\CurrencyRequest;
use FireflyIII\Api\V1\Requests\CurrencyUpdateRequest;
use FireflyIII\Api\V1\Requests\CurrencyStoreRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Account;
@@ -37,7 +38,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
@@ -68,11 +68,8 @@ class CurrencyController extends Controller
{
use AccountFilter, TransactionFilter;
/** @var CurrencyRepositoryInterface The currency repository */
private $repository;
/** @var UserRepositoryInterface The user repository */
private $userRepository;
private CurrencyRepositoryInterface $repository;
private UserRepositoryInterface $userRepository;
/**
@@ -148,7 +145,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($accounts, $transformer, 'accounts');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -161,22 +158,14 @@ class CurrencyController extends Controller
*/
public function availableBudgets(TransactionCurrency $currency): JsonResponse
{
/** @var User $admin */
$admin = auth()->user();
$manager = $this->getManager();
// types to get, page size:
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
// get list of available budgets. Count it and split it.
/** @var BudgetRepositoryInterface $repository */
$repository = app(BudgetRepositoryInterface::class);
/** @var AvailableBudgetRepositoryInterface $abRepository */
$abRepository = app(AvailableBudgetRepositoryInterface::class);
$repository->setUser($admin);
$collection = $abRepository->getAvailableBudgetsByCurrency($currency);
$count = $collection->count();
$availableBudgets = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
@@ -193,7 +182,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($availableBudgets, $transformer, 'available_budgets');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -208,10 +197,10 @@ class CurrencyController extends Controller
{
$manager = $this->getManager();
/** @var BillRepositoryInterface $repository */
$repository = app(BillRepositoryInterface::class);
/** @var BillRepositoryInterface $billRepos */
$billRepos = app(BillRepositoryInterface::class);
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$unfiltered = $repository->getBills();
$unfiltered = $billRepos->getBills();
// filter and paginate list:
$collection = $unfiltered->filter(
@@ -233,7 +222,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($bills, $transformer, 'bills');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -264,7 +253,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($budgetLimits, $transformer, 'budget_limits');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -295,7 +284,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($exchangeRates, $transformer, 'currency_exchange_rates');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -303,9 +292,9 @@ class CurrencyController extends Controller
*
* @param TransactionCurrency $currency
*
* @return JsonResponse
* @throws FireflyException
* @codeCoverageIgnore
* @return JsonResponse
*/
public function delete(TransactionCurrency $currency): JsonResponse
{
@@ -354,7 +343,7 @@ class CurrencyController extends Controller
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -380,7 +369,7 @@ class CurrencyController extends Controller
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -412,7 +401,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($currencies, $transformer, 'currencies');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -440,7 +429,7 @@ class CurrencyController extends Controller
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -459,9 +448,9 @@ class CurrencyController extends Controller
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
// get list of budgets. Count it and split it.
/** @var RecurringRepositoryInterface $repository */
$repository = app(RecurringRepositoryInterface::class);
$unfiltered = $repository->getAll();
/** @var RecurringRepositoryInterface $recurringRepos */
$recurringRepos = app(RecurringRepositoryInterface::class);
$unfiltered = $recurringRepos->getAll();
// filter selection
$collection = $unfiltered->filter(
@@ -492,7 +481,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($piggyBanks, $transformer, 'recurrences');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -510,9 +499,9 @@ class CurrencyController extends Controller
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
// get list of budgets. Count it and split it.
/** @var RuleRepositoryInterface $repository */
$repository = app(RuleRepositoryInterface::class);
$unfiltered = $repository->getAll();
/** @var RuleRepositoryInterface $ruleRepos */
$ruleRepos = app(RuleRepositoryInterface::class);
$unfiltered = $ruleRepos->getAll();
$collection = $unfiltered->filter(
static function (Rule $rule) use ($currency) {
@@ -541,7 +530,7 @@ class CurrencyController extends Controller
$resource = new FractalCollection($rules, $transformer, 'rules');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -565,7 +554,7 @@ class CurrencyController extends Controller
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -586,18 +575,18 @@ class CurrencyController extends Controller
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Store new currency.
*
* @param CurrencyRequest $request
* @param CurrencyStoreRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(CurrencyRequest $request): JsonResponse
public function store(CurrencyStoreRequest $request): JsonResponse
{
$currency = $this->repository->store($request->getAll());
if (true === $request->boolean('default')) {
@@ -614,7 +603,7 @@ class CurrencyController extends Controller
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -670,18 +659,18 @@ class CurrencyController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Update a currency.
*
* @param CurrencyRequest $request
* @param CurrencyUpdateRequest $request
* @param TransactionCurrency $currency
*
* @return JsonResponse
*/
public function update(CurrencyRequest $request, TransactionCurrency $currency): JsonResponse
public function update(CurrencyUpdateRequest $request, TransactionCurrency $currency): JsonResponse
{
$data = $request->getAll();
$currency = $this->repository->update($currency, $data);
@@ -702,7 +691,7 @@ class CurrencyController extends Controller
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -1,112 +0,0 @@
<?php
/**
* CurrencyExchangeRateController.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Services\Currency\ExchangeRateInterface;
use FireflyIII\Transformers\CurrencyExchangeRateTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use League\Fractal\Resource\Item;
/**
* Class CurrencyExchangeRateController
*
* @codeCoverageIgnore
*/
class CurrencyExchangeRateController extends Controller
{
/** @var CurrencyRepositoryInterface The currency repository */
private $repository;
/**
* CurrencyExchangeRateController constructor.
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
$this->repository = app(CurrencyRepositoryInterface::class);
$this->repository->setUser($admin);
return $next($request);
}
);
}
/**
* Show an exchange rate.
*
* @param Request $request
*
* @throws FireflyException
* @return JsonResponse
*/
public function index(Request $request): JsonResponse
{
$manager = $this->getManager();
$fromCurrency = $this->repository->findByCodeNull($request->get('from') ?? 'EUR');
$toCurrency = $this->repository->findByCodeNull($request->get('to') ?? 'USD');
if (null === $fromCurrency) {
throw new FireflyException('200007: Unknown source currency');
}
if (null === $toCurrency) {
throw new FireflyException('200007: Unknown destination currency');
}
/** @var Carbon $dateObj */
$dateObj = Carbon::createFromFormat('Y-m-d', $request->get('date') ?? date('Y-m-d'));
$this->parameters->set('from', $fromCurrency->code);
$this->parameters->set('to', $toCurrency->code);
$this->parameters->set('date', $dateObj->format('Y-m-d'));
$this->parameters->set('amount', $request->get('amount'));
$rate = $this->repository->getExchangeRate($fromCurrency, $toCurrency, $dateObj);
if (null === $rate) {
/** @var User $admin */
$admin = auth()->user();
// create service:
/** @var ExchangeRateInterface $service */
$service = app(ExchangeRateInterface::class);
$service->setUser($admin);
$rate = $service->getRate($fromCurrency, $toCurrency, $dateObj);
}
/** @var CurrencyExchangeRateTransformer $transformer */
$transformer = app(CurrencyExchangeRateTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($rate, $transformer, 'currency_exchange_rates');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
}

View File

@@ -160,31 +160,6 @@ class DestroyController extends Controller
return response()->json([], 204);
}
/**
* @param array $types
*/
private function destroyAccounts(array $types): void
{
/** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class);
$collection = $repository->getAccountsByType($types);
$service = app(AccountDestroyService::class);
/** @var Account $account */
foreach ($collection as $account) {
$service->destroy($account, null);
}
}
/**
*
*/
private function destroyBills(): void
{
/** @var BillRepositoryInterface $repository */
$repository = app(BillRepositoryInterface::class);
$repository->destroyAll();
}
/**
*
*/
@@ -206,18 +181,11 @@ class DestroyController extends Controller
/**
*
*/
private function destroyCategories(): void
private function destroyBills(): void
{
/** @var CategoryRepositoryInterface $categoryRepos */
$categoryRepos = app(CategoryRepositoryInterface::class);
$categoryRepos->destroyAll();
}
private function destroyObjectGroups(): void
{
/** @var ObjectGroupRepositoryInterface $repository */
$repository = app(ObjectGroupRepositoryInterface::class);
$repository->deleteAll();
/** @var BillRepositoryInterface $repository */
$repository = app(BillRepositoryInterface::class);
$repository->destroyAll();
}
/**
@@ -230,16 +198,6 @@ class DestroyController extends Controller
$repository->destroyAll();
}
/**
*
*/
private function destroyRecurringTransactions(): void
{
/** @var RecurringRepositoryInterface $repository */
$repository = app(RecurringRepositoryInterface::class);
$repository->destroyAll();
}
/**
*
*/
@@ -250,6 +208,26 @@ class DestroyController extends Controller
$repository->destroyAll();
}
/**
*
*/
private function destroyRecurringTransactions(): void
{
/** @var RecurringRepositoryInterface $repository */
$repository = app(RecurringRepositoryInterface::class);
$repository->destroyAll();
}
/**
*
*/
private function destroyCategories(): void
{
/** @var CategoryRepositoryInterface $categoryRepos */
$categoryRepos = app(CategoryRepositoryInterface::class);
$categoryRepos->destroyAll();
}
/**
*
*/
@@ -260,6 +238,28 @@ class DestroyController extends Controller
$tagRepository->destroyAll();
}
private function destroyObjectGroups(): void
{
/** @var ObjectGroupRepositoryInterface $repository */
$repository = app(ObjectGroupRepositoryInterface::class);
$repository->deleteAll();
}
/**
* @param array $types
*/
private function destroyAccounts(array $types): void
{
/** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class);
$collection = $repository->getAccountsByType($types);
$service = app(AccountDestroyService::class);
/** @var Account $account */
foreach ($collection as $account) {
$service->destroy($account, null);
}
}
/**
* @param array $types
*/
@@ -267,10 +267,10 @@ class DestroyController extends Controller
{
/** @var JournalRepositoryInterface $repository */
$repository = app(JournalRepositoryInterface::class);
$journals = $repository->findByType($types);
$service = app(JournalDestroyService::class);
$journals = $repository->findByType($types);
$service = app(JournalDestroyService::class);
/** @var TransactionJournal $journal */
foreach($journals as $journal) {
foreach ($journals as $journal) {
$service->destroy($journal);
}
}

View File

@@ -0,0 +1,131 @@
<?php
declare(strict_types=1);
/*
* DateController.php
* Copyright (c) 2020 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\Insight\Expense;
use Carbon\Carbon;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\DateRequest;
use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Support\Http\Api\ApiSupport;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
/**
* Class DateController
*
* Shows expense information grouped or limited by date.
* Ie. all expenses grouped by account + currency.
*/
class DateController extends Controller
{
use ApiSupport;
private CurrencyRepositoryInterface $currencyRepository;
private AccountRepositoryInterface $repository;
/**
* AccountController constructor.
*
* @codeCoverageIgnore
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $user */
$user = auth()->user();
$this->repository = app(AccountRepositoryInterface::class);
$this->repository->setUser($user);
$this->currencyRepository = app(CurrencyRepositoryInterface::class);
$this->currencyRepository->setUser($user);
return $next($request);
}
);
}
/**
*
*/
public function basic(DateRequest $request): JsonResponse
{
// parameters for chart:
$dates = $request->getAll();
/** @var Carbon $start */
$start = $dates['start'];
/** @var Carbon $end */
$end = $dates['end'];
$start->subDay();
// prep some vars:
$currencies = [];
$chartData = [];
$tempData = [];
// grab all accounts and names
$accounts = $this->repository->getAccountsByType([AccountType::EXPENSE]);
$accountNames = $this->extractNames($accounts);
$startBalances = app('steam')->balancesPerCurrencyByAccounts($accounts, $start);
$endBalances = app('steam')->balancesPerCurrencyByAccounts($accounts, $end);
// loop the end balances. This is an array for each account ($expenses)
foreach ($endBalances as $accountId => $expenses) {
$accountId = (int)$accountId;
// loop each expense entry (each entry can be a different currency).
foreach ($expenses as $currencyId => $endAmount) {
$currencyId = (int)$currencyId;
// see if there is an accompanying start amount.
// grab the difference and find the currency.
$startAmount = $startBalances[$accountId][$currencyId] ?? '0';
$diff = bcsub($endAmount, $startAmount);
$currencies[$currencyId] = $currencies[$currencyId] ?? $this->currencyRepository->findNull($currencyId);
if (0 !== bccomp($diff, '0')) {
// store the values in a temporary array.
$tempData[] = [
'id' => $accountId,
'name' => $accountNames[$accountId],
'difference' => bcmul($diff, '-1'),
'difference_float' => ((float)$diff) * -1,
'currency_id' => $currencyId,
'currency_code' => $currencies[$currencyId]->code,
];
}
}
}
// sort temp array by amount.
$amounts = array_column($tempData, 'difference_float');
array_multisort($amounts, SORT_ASC, $tempData);
return response()->json($tempData);
}
}

View File

@@ -0,0 +1,131 @@
<?php
declare(strict_types=1);
/*
* DateController.php
* Copyright (c) 2020 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\Insight\Income;
use Carbon\Carbon;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\DateRequest;
use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Support\Http\Api\ApiSupport;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
/**
* Class DateController
*
* Shows income information grouped or limited by date.
* Ie. all income grouped by revenue + currency.
*/
class DateController extends Controller
{
use ApiSupport;
private CurrencyRepositoryInterface $currencyRepository;
private AccountRepositoryInterface $repository;
/**
* AccountController constructor.
*
* @codeCoverageIgnore
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $user */
$user = auth()->user();
$this->repository = app(AccountRepositoryInterface::class);
$this->repository->setUser($user);
$this->currencyRepository = app(CurrencyRepositoryInterface::class);
$this->currencyRepository->setUser($user);
return $next($request);
}
);
}
/**
*
*/
public function basic(DateRequest $request): JsonResponse
{
// parameters for chart:
$dates = $request->getAll();
/** @var Carbon $start */
$start = $dates['start'];
/** @var Carbon $end */
$end = $dates['end'];
$start->subDay();
// prep some vars:
$currencies = [];
$chartData = [];
$tempData = [];
// grab all accounts and names
$accounts = $this->repository->getAccountsByType([AccountType::REVENUE]);
$accountNames = $this->extractNames($accounts);
$startBalances = app('steam')->balancesPerCurrencyByAccounts($accounts, $start);
$endBalances = app('steam')->balancesPerCurrencyByAccounts($accounts, $end);
// loop the end balances. This is an array for each account ($expenses)
foreach ($endBalances as $accountId => $expenses) {
$accountId = (int)$accountId;
// loop each expense entry (each entry can be a different currency).
foreach ($expenses as $currencyId => $endAmount) {
$currencyId = (int)$currencyId;
// see if there is an accompanying start amount.
// grab the difference and find the currency.
$startAmount = $startBalances[$accountId][$currencyId] ?? '0';
$diff = bcsub($endAmount, $startAmount);
$currencies[$currencyId] = $currencies[$currencyId] ?? $this->currencyRepository->findNull($currencyId);
if (0 !== bccomp($diff, '0')) {
// store the values in a temporary array.
$tempData[] = [
'id' => $accountId,
'name' => $accountNames[$accountId],
'difference' => $diff,
'difference_float' => (float)$diff,
'currency_id' => $currencyId,
'currency_code' => $currencies[$currencyId]->code,
];
}
}
}
// sort temp array by amount.
$amounts = array_column($tempData, 'difference_float');
array_multisort($amounts, SORT_ASC, $tempData);
return response()->json($tempData);
}
}

View File

@@ -23,7 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\LinkTypeRequest;
use FireflyIII\Api\V1\Requests\LinkTypeStoreRequest;
use FireflyIII\Api\V1\Requests\LinkTypeUpdateRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\LinkType;
@@ -80,9 +81,9 @@ class LinkTypeController extends Controller
*
* @param LinkType $linkType
*
* @return JsonResponse
* @throws FireflyException
* @codeCoverageIgnore
* @return JsonResponse
*/
public function delete(LinkType $linkType): JsonResponse
{
@@ -122,7 +123,7 @@ class LinkTypeController extends Controller
$resource = new FractalCollection($linkTypes, $transformer, 'link_types');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -143,19 +144,19 @@ class LinkTypeController extends Controller
$resource = new Item($linkType, $transformer, 'link_types');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Store new object.
*
* @param LinkTypeRequest $request
* @param LinkTypeStoreRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(LinkTypeRequest $request): JsonResponse
public function store(LinkTypeStoreRequest $request): JsonResponse
{
/** @var User $admin */
$admin = auth()->user();
@@ -173,7 +174,7 @@ class LinkTypeController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($linkType, $transformer, 'link_types');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -232,20 +233,20 @@ class LinkTypeController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Update object.
*
* @param LinkTypeRequest $request
* @param LinkTypeUpdateRequest $request
* @param LinkType $linkType
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function update(LinkTypeRequest $request, LinkType $linkType): JsonResponse
public function update(LinkTypeUpdateRequest $request, LinkType $linkType): JsonResponse
{
if (false === $linkType->editable) {
throw new FireflyException('200020: Link type cannot be changed.');
@@ -267,7 +268,7 @@ class LinkTypeController extends Controller
$resource = new Item($linkType, $transformer, 'link_types');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -111,7 +111,7 @@ class ObjectGroupController extends Controller
$resource = new FractalCollection($objectGroups, $transformer, 'object_groups');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -147,7 +147,7 @@ class ObjectGroupController extends Controller
$resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -167,7 +167,7 @@ class ObjectGroupController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($objectGroup, $transformer, 'object_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -190,6 +190,6 @@ class ObjectGroupController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($objectGroup, $transformer, 'object_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -23,7 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\PiggyBankRequest;
use FireflyIII\Api\V1\Requests\PiggyBankUpdateRequest;
use FireflyIII\Api\V1\Requests\PiggyBankStoreRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\PiggyBank;
@@ -43,9 +43,7 @@ use League\Fractal\Resource\Item;
*/
class PiggyBankController extends Controller
{
/** @var PiggyBankRepositoryInterface The piggy bank repository */
private $repository;
private PiggyBankRepositoryInterface $repository;
/**
* PiggyBankController constructor.
@@ -111,7 +109,7 @@ class PiggyBankController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -142,7 +140,7 @@ class PiggyBankController extends Controller
$resource = new FractalCollection($piggyBanks, $transformer, 'piggy_banks');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -175,7 +173,7 @@ class PiggyBankController extends Controller
$resource = new FractalCollection($events, $transformer, 'piggy_bank_events');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -197,7 +195,7 @@ class PiggyBankController extends Controller
$resource = new Item($piggyBank, $transformer, 'piggy_banks');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -206,8 +204,8 @@ class PiggyBankController extends Controller
*
* @param PiggyBankStoreRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(PiggyBankStoreRequest $request): JsonResponse
{
@@ -220,18 +218,18 @@ class PiggyBankController extends Controller
$resource = new Item($piggyBank, $transformer, 'piggy_banks');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Update piggy bank.
*
* @param PiggyBankRequest $request
* @param PiggyBankUpdateRequest $request
* @param PiggyBank $piggyBank
*
* @return JsonResponse
*/
public function update(PiggyBankRequest $request, PiggyBank $piggyBank): JsonResponse
public function update(PiggyBankUpdateRequest $request, PiggyBank $piggyBank): JsonResponse
{
$data = $request->getAll();
$piggyBank = $this->repository->update($piggyBank, $data);
@@ -247,7 +245,7 @@ class PiggyBankController extends Controller
$resource = new Item($piggyBank, $transformer, 'piggy_banks');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -101,7 +101,7 @@ class PreferenceController extends Controller
$resource = new FractalCollection($preferences, $transformer, 'preferences');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -122,7 +122,7 @@ class PreferenceController extends Controller
$resource = new Item($preference, $transformer, 'preferences');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -161,7 +161,7 @@ class PreferenceController extends Controller
$resource = new Item($result, $transformer, 'preferences');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -0,0 +1,99 @@
<?php
/*
* IndexController.php
* Copyright (c) 2020 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\Preferences;
use Carbon\Carbon;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Support\Facades\Navigation;
use Illuminate\Http\JsonResponse;
/**
* Class IndexController
*/
class IndexController extends Controller
{
public const DATE_FORMAT = 'Y-m-d';
/**
* Return users preferred date range settings, the current period
* and some previous / next periods.
*
* @return JsonResponse
*/
public function dateRanges(): JsonResponse
{
$range = app('preferences')->get('viewRange', '1M')->data;
$return = [
'range' => $range,
'ranges' => [],
'default' => null,
];
$today = Carbon::today(config('app.timezone'));
$start = Navigation::startOfPeriod($today, $range);
$todayStr = $today->format(self::DATE_FORMAT);
// optional date ranges. Maybe to be configured later
// current $period
$title = (string)Navigation::periodShow($start, $range);
$return['default'] = $title;
$return['ranges'][$title] = [$start->format(self::DATE_FORMAT),
Navigation::endOfPeriod($start, $range)->format(self::DATE_FORMAT)];
// previous $period
$previousStart = Navigation::subtractPeriod($start, $range);
$title = (string)Navigation::periodShow($previousStart, $range);
$return['ranges'][$title] = [$previousStart->format(self::DATE_FORMAT),
Navigation::endOfPeriod($previousStart, $range)->format(self::DATE_FORMAT)];
// next $period
$nextStart = Navigation::addPeriod($start, $range, 0);
$title = (string)Navigation::periodShow($nextStart, $range);
$return['ranges'][$title] = [$nextStart->format(self::DATE_FORMAT),
Navigation::endOfPeriod($nextStart, $range)->format(self::DATE_FORMAT)];
// --
// last seven days:
$seven = Carbon::today()->subDays(7);
$title = (string)trans('firefly.last_seven_days');
$return['ranges'][$title] = [$seven->format(self::DATE_FORMAT), $todayStr];
// last 30 days:
$thirty = Carbon::today()->subDays(30);
$title = (string)trans('firefly.last_thirty_days');
$return['ranges'][$title] = [$thirty->format(self::DATE_FORMAT), $todayStr];
// last 180 days
$long = Carbon::today()->subDays(180);
$title = (string)trans('firefly.last_180_days');
$return['ranges'][$title] = [$long->format(self::DATE_FORMAT), $todayStr];
// YTD
$YTD = Carbon::today()->startOfYear();
$title = (string)trans('firefly.YTD');
$return['ranges'][$title] = [$YTD->format(self::DATE_FORMAT), $todayStr];
// ---
// everything
$repository = app(JournalRepositoryInterface::class);
$journal = $repository->firstNull();
$first = null === $journal ? clone $YTD : clone $journal->date;
$title = (string)trans('firefly.everything');
$return['ranges'][$title] = [$first->format(self::DATE_FORMAT), $todayStr];
return response()->json($return);
}
}

View File

@@ -119,7 +119,7 @@ class RecurrenceController extends Controller
$resource = new FractalCollection($piggyBanks, $transformer, 'recurrences');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -141,7 +141,7 @@ class RecurrenceController extends Controller
$resource = new Item($recurrence, $transformer, 'recurrences');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -151,8 +151,8 @@ class RecurrenceController extends Controller
*
* @param RecurrenceStoreRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(RecurrenceStoreRequest $request): JsonResponse
{
@@ -166,7 +166,7 @@ class RecurrenceController extends Controller
$resource = new Item($recurrence, $transformer, 'recurrences');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -222,13 +222,13 @@ class RecurrenceController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* @return JsonResponse
* @throws FireflyException
* @codeCoverageIgnore
* @return JsonResponse
*/
public function trigger(): JsonResponse
{
@@ -238,7 +238,7 @@ class RecurrenceController extends Controller
$result = $recurring->fire();
} catch (FireflyException $e) {
Log::error($e->getMessage());
throw new FireflyException('200022: Error in cron job.',0, $e);
throw new FireflyException('200022: Error in cron job.', 0, $e);
}
if (false === $result) {
return response()->json([], 204);
@@ -270,7 +270,7 @@ class RecurrenceController extends Controller
$resource = new Item($category, $transformer, 'recurrences');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -28,21 +28,19 @@ use FireflyIII\Api\V1\Requests\RuleTestRequest;
use FireflyIII\Api\V1\Requests\RuleTriggerRequest;
use FireflyIII\Api\V1\Requests\RuleUpdateRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Rule;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Rule\RuleRepositoryInterface;
use FireflyIII\TransactionRules\Engine\RuleEngine;
use FireflyIII\TransactionRules\TransactionMatcher;
use FireflyIII\TransactionRules\Engine\RuleEngineInterface;
use FireflyIII\Transformers\RuleTransformer;
use FireflyIII\Transformers\TransactionGroupTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use Log;
/**
* Class RuleController
@@ -124,7 +122,7 @@ class RuleController extends Controller
$resource = new FractalCollection($rules, $transformer, 'rules');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -145,7 +143,7 @@ class RuleController extends Controller
$resource = new Item($rule, $transformer, 'rules');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -166,7 +164,7 @@ class RuleController extends Controller
$resource = new Item($rule, $transformer, 'rules');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -187,7 +185,7 @@ class RuleController extends Controller
$resource = new Item($rule, $transformer, 'rules');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -208,36 +206,44 @@ class RuleController extends Controller
$resource = new Item($rule, $transformer, 'rules');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* @param RuleTestRequest $request
* @param Rule $rule
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function testRule(RuleTestRequest $request, Rule $rule): JsonResponse
{
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$parameters = $request->getTestParameters();
/** @var Rule $rule */
Log::debug(sprintf('Now testing rule #%d, "%s"', $rule->id, $rule->title));
/** @var TransactionMatcher $matcher */
$matcher = app(TransactionMatcher::class);
// set all parameters:
$matcher->setRule($rule);
$matcher->setStartDate($parameters['start_date']);
$matcher->setEndDate($parameters['end_date']);
$matcher->setSearchLimit($parameters['search_limit']);
$matcher->setTriggeredLimit($parameters['trigger_limit']);
$matcher->setAccounts($parameters['accounts']);
$matchingTransactions = $matcher->findTransactionsByRule();
$count = count($matchingTransactions);
$transactions = array_slice($matchingTransactions, ($parameters['page'] - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($transactions, $count, $pageSize, $this->parameters->get('page'));
/** @var RuleEngineInterface $ruleEngine */
$ruleEngine = app(RuleEngineInterface::class);
$ruleEngine->setRules(new Collection([$rule]));
// overrule the rule(s) if necessary.
if (array_key_exists('start', $parameters) && null !== $parameters['start']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_after', 'value' => $parameters['start']->format('Y-m-d')]);
}
if (array_key_exists('end', $parameters) && null !== $parameters['end']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_before', 'value' => $parameters['end']->format('Y-m-d')]);
}
if (array_key_exists('accounts', $parameters) && '' !== $parameters['accounts']) {
$ruleEngine->addOperator(['type' => 'account_id', 'value' => $parameters['accounts']]);
}
// file the rule(s)
$transactions = $ruleEngine->find();
$count = $transactions->count();
$paginator = new LengthAwarePaginator($transactions, $count, 31337, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.rules.test', [$rule->id]) . $this->buildParams());
// resulting list is presented as JSON thing.
@@ -246,10 +252,10 @@ class RuleController extends Controller
$transformer = app(TransactionGroupTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new FractalCollection($matchingTransactions, $transformer, 'transactions');
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -265,28 +271,27 @@ class RuleController extends Controller
// Get parameters specified by the user
$parameters = $request->getTriggerParameters();
/** @var RuleEngine $ruleEngine */
$ruleEngine = app(RuleEngine::class);
$ruleEngine->setUser(auth()->user());
/** @var RuleEngineInterface $ruleEngine */
$ruleEngine = app(RuleEngineInterface::class);
$ruleEngine->setRules(new Collection([$rule]));
$rules = [$rule->id];
$ruleEngine->setRulesToApply($rules);
$ruleEngine->setTriggerMode(RuleEngine::TRIGGER_STORE);
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setAccounts($parameters['accounts']);
$collector->setRange($parameters['start_date'], $parameters['end_date']);
$journals = $collector->getExtractedJournals();
/** @var array $journal */
foreach ($journals as $journal) {
Log::debug('Start of new journal.');
$ruleEngine->processJournalArray($journal);
Log::debug('Done with all rules for this group + done with journal.');
// overrule the rule(s) if necessary.
if (array_key_exists('start', $parameters) && null !== $parameters['start']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_after', 'value' => $parameters['start']->format('Y-m-d')]);
}
if (array_key_exists('end', $parameters) && null !== $parameters['end']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_before', 'value' => $parameters['end']->format('Y-m-d')]);
}
if (array_key_exists('accounts', $parameters) && '' !== $parameters['accounts']) {
$ruleEngine->addOperator(['type' => 'account_id', 'value' => $parameters['accounts']]);
}
// file the rule(s)
$ruleEngine->fire();
return response()->json([], 204);
}
@@ -310,6 +315,6 @@ class RuleController extends Controller
$resource = new Item($rule, $transformer, 'rules');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -24,17 +24,15 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers;
use Exception;
use FireflyIII\Api\V1\Requests\RuleGroupRequest;
use FireflyIII\Api\V1\Requests\RuleGroupUpdateRequest;
use FireflyIII\Api\V1\Requests\RuleGroupStoreRequest;
use FireflyIII\Api\V1\Requests\RuleGroupTestRequest;
use FireflyIII\Api\V1\Requests\RuleGroupTriggerRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Rule;
use FireflyIII\Models\RuleGroup;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\RuleGroup\RuleGroupRepositoryInterface;
use FireflyIII\TransactionRules\Engine\RuleEngine;
use FireflyIII\TransactionRules\TransactionMatcher;
use FireflyIII\TransactionRules\Engine\RuleEngineInterface;
use FireflyIII\Transformers\RuleGroupTransformer;
use FireflyIII\Transformers\RuleTransformer;
use FireflyIII\Transformers\TransactionGroupTransformer;
@@ -45,7 +43,6 @@ use Illuminate\Support\Collection;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use Log;
/**
* Class RuleGroupController
@@ -126,7 +123,7 @@ class RuleGroupController extends Controller
$resource = new FractalCollection($ruleGroups, $transformer, 'rule_groups');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -146,7 +143,7 @@ class RuleGroupController extends Controller
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -166,7 +163,7 @@ class RuleGroupController extends Controller
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -197,7 +194,7 @@ class RuleGroupController extends Controller
$resource = new FractalCollection($rules, $transformer, 'rules');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -218,18 +215,18 @@ class RuleGroupController extends Controller
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Store new object.
*
* @param RuleGroupRequest $request
* @param RuleGroupStoreRequest $request
*
* @return JsonResponse
*/
public function store(RuleGroupRequest $request): JsonResponse
public function store(RuleGroupStoreRequest $request): JsonResponse
{
$ruleGroup = $this->ruleGroupRepository->store($request->getAll());
$manager = $this->getManager();
@@ -240,7 +237,7 @@ class RuleGroupController extends Controller
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -248,57 +245,54 @@ class RuleGroupController extends Controller
* @param RuleGroupTestRequest $request
* @param RuleGroup $group
*
* @return JsonResponse
* @throws FireflyException
*
* @return JsonResponse
*/
public function testGroup(RuleGroupTestRequest $request, RuleGroup $group): JsonResponse
{
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
Log::debug('Now in testGroup()');
/** @var Collection $rules */
$rules = $this->ruleGroupRepository->getActiveRules($group);
if (0 === $rules->count()) {
throw new FireflyException('200023: No rules in this rule group.');
}
$parameters = $request->getTestParameters();
$matchingTransactions = [];
$parameters = $request->getTestParameters();
Log::debug(sprintf('Going to test %d rules', $rules->count()));
/** @var Rule $rule */
foreach ($rules as $rule) {
Log::debug(sprintf('Now testing rule #%d, "%s"', $rule->id, $rule->title));
/** @var TransactionMatcher $matcher */
$matcher = app(TransactionMatcher::class);
// set all parameters:
$matcher->setRule($rule);
$matcher->setStartDate($parameters['start_date']);
$matcher->setEndDate($parameters['end_date']);
$matcher->setSearchLimit($parameters['search_limit']);
$matcher->setTriggeredLimit($parameters['trigger_limit']);
$matcher->setAccounts($parameters['accounts']);
/** @var RuleEngineInterface $ruleEngine */
$ruleEngine = app(RuleEngineInterface::class);
$ruleEngine->setRules($rules);
$result = $matcher->findTransactionsByRule();
/** @noinspection AdditionOperationOnArraysInspection */
$matchingTransactions = $result + $matchingTransactions;
// overrule the rule(s) if necessary.
if (array_key_exists('start', $parameters) && null !== $parameters['start']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_after', 'value' => $parameters['start']->format('Y-m-d')]);
}
// make paginator out of results.
$count = count($matchingTransactions);
$transactions = array_slice($matchingTransactions, ($parameters['page'] - 1) * $pageSize, $pageSize);
if (array_key_exists('end', $parameters) && null !== $parameters['end']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_before', 'value' => $parameters['end']->format('Y-m-d')]);
}
if (array_key_exists('accounts', $parameters) && '' !== $parameters['accounts']) {
$ruleEngine->addOperator(['type' => 'account_id', 'value' => $parameters['accounts']]);
}
// make paginator:
$paginator = new LengthAwarePaginator($transactions, $count, $pageSize, $parameters['page']);
// file the rule(s)
$transactions = $ruleEngine->find();
$count = $transactions->count();
$paginator = new LengthAwarePaginator($transactions, $count, 31337, $this->parameters->get('page'));
$paginator->setPath(route('api.v1.rule_groups.test', [$group->id]) . $this->buildParams());
$manager = $this->getManager();
// resulting list is presented as JSON thing.
$manager = $this->getManager();
/** @var TransactionGroupTransformer $transformer */
$transformer = app(TransactionGroupTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new FractalCollection($matchingTransactions, $transformer, 'transactions');
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -307,40 +301,40 @@ class RuleGroupController extends Controller
* @param RuleGroupTriggerRequest $request
* @param RuleGroup $group
*
* @throws Exception
* @return JsonResponse
* @throws Exception
*/
public function triggerGroup(RuleGroupTriggerRequest $request, RuleGroup $group): JsonResponse
{
/** @var Collection $rules */
$rules = $this->ruleGroupRepository->getActiveRules($group);
if (0 === $rules->count()) {
throw new FireflyException('200023: No rules in this rule group.');
}
// Get parameters specified by the user
$parameters = $request->getTriggerParameters();
/** @var Collection $collection */
$collection = $this->ruleGroupRepository->getActiveRules($group);
$rules = [];
/** @var Rule $item */
foreach ($collection as $item) {
$rules[] = $item->id;
/** @var RuleEngineInterface $ruleEngine */
$ruleEngine = app(RuleEngineInterface::class);
$ruleEngine->setRules($rules);
// overrule the rule(s) if necessary.
if (array_key_exists('start', $parameters) && null !== $parameters['start']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_after', 'value' => $parameters['start']->format('Y-m-d')]);
}
// start looping.
/** @var RuleEngine $ruleEngine */
$ruleEngine = app(RuleEngine::class);
$ruleEngine->setUser(auth()->user());
$ruleEngine->setRulesToApply($rules);
$ruleEngine->setTriggerMode(RuleEngine::TRIGGER_STORE);
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setAccounts($parameters['accounts']);
$collector->setRange($parameters['start_date'], $parameters['end_date']);
$journals = $collector->getExtractedJournals();
/** @var array $journal */
foreach ($journals as $journal) {
Log::debug('Start of new journal.');
$ruleEngine->processJournalArray($journal);
Log::debug('Done with all rules for this group + done with journal.');
if (array_key_exists('end', $parameters) && null !== $parameters['end']) {
// add a range:
$ruleEngine->addOperator(['type' => 'date_before', 'value' => $parameters['end']->format('Y-m-d')]);
}
if (array_key_exists('accounts', $parameters) && '' !== $parameters['accounts']) {
$ruleEngine->addOperator(['type' => 'account_id', 'value' => $parameters['accounts']]);
}
// file the rule(s)
$ruleEngine->fire();
return response()->json([], 204);
}
@@ -348,12 +342,12 @@ class RuleGroupController extends Controller
/**
* Update a rule group.
*
* @param RuleGroupRequest $request
* @param RuleGroupUpdateRequest $request
* @param RuleGroup $ruleGroup
*
* @return JsonResponse
*/
public function update(RuleGroupRequest $request, RuleGroup $ruleGroup): JsonResponse
public function update(RuleGroupUpdateRequest $request, RuleGroup $ruleGroup): JsonResponse
{
$ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll());
$manager = $this->getManager();
@@ -364,6 +358,6 @@ class RuleGroupController extends Controller
$resource = new Item($ruleGroup, $transformer, 'rule_groups');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -97,6 +97,6 @@ class AccountController extends Controller
$resource = new FractalCollection($accounts, $transformer, 'accounts');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -45,13 +45,14 @@ class TransactionController extends Controller
*/
public function search(Request $request, SearchInterface $searcher): JsonResponse
{
$manager = $this->getManager();
$fullQuery = (string) $request->get('query');
$page = 0 === (int) $request->get('page') ? 1 : (int) $request->get('page');
$manager = $this->getManager();
$fullQuery = (string)$request->get('query');
$page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page');
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$pageSize = 0 === (int)$request->get('limit') ? $pageSize : (int)$request->get('limit');
$searcher->parseQuery($fullQuery);
$searcher->setPage($page);
$searcher->setLimit((int) config('firefly.search_result_limit'));
$searcher->setLimit($pageSize);
$groups = $searcher->searchTransactions();
$parameters = ['search' => $fullQuery];
$url = route('api.v1.search.transactions') . '?' . http_build_query($parameters);
@@ -65,6 +66,6 @@ class TransactionController extends Controller
$resource = new Collection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($groups));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -47,24 +47,12 @@ use Illuminate\Http\JsonResponse;
*/
class SummaryController extends Controller
{
/** @var AvailableBudgetRepositoryInterface */
private $abRepository;
/** @var AccountRepositoryInterface */
private $accountRepository;
/** @var BillRepositoryInterface */
private $billRepository;
/** @var BudgetRepositoryInterface */
private $budgetRepository;
/** @var CurrencyRepositoryInterface */
private $currencyRepos;
/** @var OperationsRepositoryInterface */
private $opsRepository;
private AvailableBudgetRepositoryInterface $abRepository;
private AccountRepositoryInterface $accountRepository;
private BillRepositoryInterface $billRepository;
private BudgetRepositoryInterface $budgetRepository;
private CurrencyRepositoryInterface $currencyRepos;
private OperationsRepositoryInterface $opsRepository;
/**
* SummaryController constructor.
@@ -101,8 +89,8 @@ class SummaryController extends Controller
/**
* @param DateRequest $request
*
* @throws Exception
* @return JsonResponse
* @throws Exception
*/
public function basic(DateRequest $request): JsonResponse
{
@@ -130,30 +118,6 @@ class SummaryController extends Controller
return response()->json($return);
}
/**
* Check if date is outside session range.
*
* @param Carbon $date
*
* @param Carbon $start
* @param Carbon $end
*
* @return bool
*/
protected function notInDateRange(Carbon $date, Carbon $start, Carbon $end): bool // Validate a preference
{
$result = false;
if ($start->greaterThanOrEqualTo($date) && $end->greaterThanOrEqualTo($date)) {
$result = true;
}
// start and end in the past? use $end
if ($start->lessThanOrEqualTo($date) && $end->lessThanOrEqualTo($date)) {
$result = true;
}
return $result;
}
/**
* @param Carbon $start
* @param Carbon $end
@@ -221,7 +185,7 @@ class SummaryController extends Controller
$return[] = [
'key' => sprintf('balance-in-%s', $currency->code),
'title' => trans('firefly.box_balance_in_currency', ['currency' => $currency->symbol]),
'monetary_value' => round($sums[$currencyId] ?? 0, $currency->decimal_places),
'monetary_value' => round((float) $sums[$currencyId] ?? 0, $currency->decimal_places),
'currency_id' => $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
@@ -234,7 +198,7 @@ class SummaryController extends Controller
$return[] = [
'key' => sprintf('spent-in-%s', $currency->code),
'title' => trans('firefly.box_spent_in_currency', ['currency' => $currency->symbol]),
'monetary_value' => round($expenses[$currencyId] ?? 0, $currency->decimal_places),
'monetary_value' => round((float) ($expenses[$currencyId] ?? 0), $currency->decimal_places),
'currency_id' => $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
@@ -246,7 +210,7 @@ class SummaryController extends Controller
$return[] = [
'key' => sprintf('earned-in-%s', $currency->code),
'title' => trans('firefly.box_earned_in_currency', ['currency' => $currency->symbol]),
'monetary_value' => round($incomes[$currencyId] ?? 0, $currency->decimal_places),
'monetary_value' => round((float) ($incomes[$currencyId] ?? 0), $currency->decimal_places),
'currency_id' => $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
@@ -284,7 +248,7 @@ class SummaryController extends Controller
$return[] = [
'key' => sprintf('bills-paid-in-%s', $currency->code),
'title' => trans('firefly.box_bill_paid_in_currency', ['currency' => $currency->symbol]),
'monetary_value' => round($amount, $currency->decimal_places),
'monetary_value' => round((float) $amount, $currency->decimal_places),
'currency_id' => $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
@@ -304,7 +268,7 @@ class SummaryController extends Controller
$return[] = [
'key' => sprintf('bills-unpaid-in-%s', $currency->code),
'title' => trans('firefly.box_bill_unpaid_in_currency', ['currency' => $currency->symbol]),
'monetary_value' => round($amount, $currency->decimal_places),
'monetary_value' => round((float) $amount, $currency->decimal_places),
'currency_id' => $currency->id,
'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
@@ -322,13 +286,13 @@ class SummaryController extends Controller
* @param Carbon $start
* @param Carbon $end
*
* @throws Exception
* @return array
* @throws Exception
*/
private function getLeftToSpendInfo(Carbon $start, Carbon $end): array
{
$return = [];
$today = new Carbon;
$today = today(config('app.timezone'));
$available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end);
$budgets = $this->budgetRepository->getActiveBudgets();
$spent = $this->opsRepository->sumExpenses($start, $end, null, $budgets);
@@ -348,7 +312,7 @@ class SummaryController extends Controller
$return[] = [
'key' => sprintf('left-to-spend-in-%s', $row['currency_code']),
'title' => trans('firefly.box_left_to_spend_in_currency', ['currency' => $row['currency_symbol']]),
'monetary_value' => round($leftToSpend, $row['currency_decimal_places']),
'monetary_value' => round((float) $leftToSpend, $row['currency_decimal_places']),
'currency_id' => $row['currency_id'],
'currency_code' => $row['currency_code'],
'currency_symbol' => $row['currency_symbol'],
@@ -408,7 +372,7 @@ class SummaryController extends Controller
foreach ($netWorthSet as $data) {
/** @var TransactionCurrency $currency */
$currency = $data['currency'];
$amount = round($data['balance'], $currency->decimal_places);
$amount = round((float) $data['balance'], $currency->decimal_places);
if (0.0 === $amount) {
continue;
}
@@ -429,4 +393,28 @@ class SummaryController extends Controller
return $return;
}
/**
* Check if date is outside session range.
*
* @param Carbon $date
*
* @param Carbon $start
* @param Carbon $end
*
* @return bool
*/
protected function notInDateRange(Carbon $date, Carbon $start, Carbon $end): bool // Validate a preference
{
$result = false;
if ($start->greaterThanOrEqualTo($date) && $end->greaterThanOrEqualTo($date)) {
$result = true;
}
// start and end in the past? use $end
if ($start->lessThanOrEqualTo($date) && $end->lessThanOrEqualTo($date)) {
$result = true;
}
return $result;
}
}

View File

@@ -115,7 +115,7 @@ class TagController extends Controller
$resource = new FractalCollection($rules, $transformer, 'tags');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -145,7 +145,7 @@ class TagController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -165,7 +165,7 @@ class TagController extends Controller
$resource = new Item($tag, $transformer, 'tags');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -186,7 +186,7 @@ class TagController extends Controller
$resource = new Item($rule, $transformer, 'tags');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -239,7 +239,7 @@ class TagController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -260,7 +260,7 @@ class TagController extends Controller
$resource = new Item($rule, $transformer, 'tags');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\TransactionStoreRequest;
use FireflyIII\Api\V1\Requests\TransactionUpdateRequest;
use FireflyIII\Events\DestroyedTransactionGroup;
use FireflyIII\Events\StoredTransactionGroup;
use FireflyIII\Events\UpdatedTransactionGroup;
use FireflyIII\Exceptions\DuplicateTransactionException;
@@ -36,6 +37,7 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalAPIRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use FireflyIII\Rules\IsDuplicateTransaction;
use FireflyIII\Support\Http\Api\TransactionFilter;
use FireflyIII\Transformers\AttachmentTransformer;
use FireflyIII\Transformers\PiggyBankEventTransformer;
@@ -45,11 +47,13 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Validation\ValidationException;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item;
use Log;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Validator;
/**
* Class TransactionController
@@ -59,9 +63,7 @@ class TransactionController extends Controller
use TransactionFilter;
private TransactionGroupRepositoryInterface $groupRepository;
private JournalAPIRepositoryInterface $journalAPIRepository;
private JournalRepositoryInterface $repository;
@@ -110,7 +112,7 @@ class TransactionController extends Controller
$resource = new FractalCollection($attachments, $transformer, 'attachments');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -130,7 +132,7 @@ class TransactionController extends Controller
$resource = new FractalCollection($journalLinks, $transformer, 'transaction_links');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -144,6 +146,8 @@ class TransactionController extends Controller
public function delete(TransactionGroup $transactionGroup): JsonResponse
{
$this->repository->destroyGroup($transactionGroup);
// trigger just after destruction
event(new DestroyedTransactionGroup($transactionGroup));
return response()->json([], 204);
}
@@ -173,7 +177,7 @@ class TransactionController extends Controller
*/
public function index(Request $request): JsonResponse
{
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$type = $request->get('type') ?? 'default';
$this->parameters->set('type', $type);
@@ -211,7 +215,7 @@ class TransactionController extends Controller
$resource = new FractalCollection($transactions, $transformer, 'transactions');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -234,7 +238,20 @@ class TransactionController extends Controller
$resource = new FractalCollection($events, $transformer, 'piggy_bank_events');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
* Show a single transaction, by transaction journal.
*
* @param TransactionJournal $transactionJournal
*
* @return JsonResponse
* @codeCoverageIgnore
*/
public function showByJournal(TransactionJournal $transactionJournal): JsonResponse
{
return $this->show($transactionJournal->transactionGroup);
}
/**
@@ -269,20 +286,7 @@ class TransactionController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($selectedGroup, $transformer, 'transactions');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**
* Show a single transaction, by transaction journal.
*
* @param TransactionJournal $transactionJournal
*
* @return JsonResponse
* @codeCoverageIgnore
*/
public function showByJournal(TransactionJournal $transactionJournal): JsonResponse
{
return $this->show($transactionJournal->transactionGroup);
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -291,7 +295,7 @@ class TransactionController extends Controller
* @param TransactionStoreRequest $request
*
* @return JsonResponse
* @throws FireflyException
* @throws FireflyException|ValidationException
*/
public function store(TransactionStoreRequest $request): JsonResponse
{
@@ -306,29 +310,16 @@ class TransactionController extends Controller
$transactionGroup = $this->groupRepository->store($data);
} catch (DuplicateTransactionException $e) {
Log::warning('Caught a duplicate transaction. Return error message.');
// return bad validation message.
// TODO use Laravel's internal validation thing to do this.
$response = [
'message' => 'The given data was invalid.',
'errors' => [
'transactions.0.description' => [$e->getMessage()],
],
];
return response()->json($response, 422);
$validator = Validator::make(
['transactions' => [['description' => $e->getMessage()]]], ['transactions.0.description' => new IsDuplicateTransaction]
);
throw new ValidationException($validator);
} catch (FireflyException $e) {
Log::warning('Caught an exception. Return error message.');
Log::error($e->getMessage());
// return bad validation message.
// TODO use Laravel's internal validation thing to do this.
$response = [
'message' => 'The given data was invalid.',
'errors' => [
'transactions.0.description' => [sprintf('Internal exception: %s', $e->getMessage())],
],
];
return response()->json($response, 422);
$message = sprintf('Internal exception: %s', $e->getMessage());
$validator = Validator::make(['transactions' => [['description' => $message]]], ['transactions.0.description' => new IsDuplicateTransaction]);
throw new ValidationException($validator);
}
app('preferences')->mark();
event(new StoredTransactionGroup($transactionGroup, $data['apply_rules'] ?? true));
@@ -355,7 +346,7 @@ class TransactionController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($selectedGroup, $transformer, 'transactions');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -398,6 +389,6 @@ class TransactionController extends Controller
$transformer->setParameters($this->parameters);
$resource = new Item($selectedGroup, $transformer, 'transactions');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -126,7 +126,7 @@ class TransactionLinkController extends Controller
$resource = new FractalCollection($journalLinks, $transformer, 'transaction_links');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -148,7 +148,7 @@ class TransactionLinkController extends Controller
$resource = new Item($journalLink, $transformer, 'transaction_links');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
@@ -157,8 +157,8 @@ class TransactionLinkController extends Controller
*
* @param TransactionLinkRequest $request
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function store(TransactionLinkRequest $request): JsonResponse
{
@@ -179,7 +179,7 @@ class TransactionLinkController extends Controller
$resource = new Item($journalLink, $transformer, 'transaction_links');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -188,8 +188,8 @@ class TransactionLinkController extends Controller
* @param TransactionLinkRequest $request
* @param TransactionJournalLink $journalLink
*
* @throws FireflyException
* @return JsonResponse
* @throws FireflyException
*/
public function update(TransactionLinkRequest $request, TransactionJournalLink $journalLink): JsonResponse
{
@@ -209,7 +209,7 @@ class TransactionLinkController extends Controller
$resource = new Item($journalLink, $transformer, 'transaction_links');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -68,9 +68,9 @@ class UserController extends Controller
*
* @param User $user
*
* @return JsonResponse
* @throws FireflyException
* @codeCoverageIgnore
* @return JsonResponse
*/
public function delete(User $user): JsonResponse
{
@@ -113,7 +113,7 @@ class UserController extends Controller
$resource = new FractalCollection($users, $transformer, 'users');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -135,7 +135,7 @@ class UserController extends Controller
$resource = new Item($user, $transformer, 'users');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -159,7 +159,7 @@ class UserController extends Controller
$resource = new Item($user, $transformer, 'users');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
/**
@@ -182,7 +182,7 @@ class UserController extends Controller
$resource = new Item($user, $transformer, 'users');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}

View File

@@ -0,0 +1,80 @@
<?php
declare(strict_types=1);
/*
* CreateController.php
* Copyright (c) 2020 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\Webhook;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Webhook\CreateRequest;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Transformers\WebhookTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use League\Fractal\Resource\Item;
/**
* Class CreateController
*/
class CreateController extends Controller
{
private WebhookRepositoryInterface $repository;
/**
* @codeCoverageIgnore
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var WebhookRepositoryInterface repository */
$this->repository = app(WebhookRepositoryInterface::class);
$this->repository->setUser($admin);
return $next($request);
}
);
}
/**
* @param CreateRequest $request
*
* @return JsonResponse
*/
public function store(CreateRequest $request): JsonResponse
{
$data = $request->getData();
$webhook = $this->repository->store($data);
$manager = $this->getManager();
/** @var WebhookTransformer $transformer */
$transformer = app(WebhookTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($webhook, $transformer, 'webhooks');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -0,0 +1,75 @@
<?php
declare(strict_types=1);
/*
* DeleteController.php
* Copyright (c) 2020 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\Webhook;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Models\Webhook;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
/**
* Class DeleteController
*/
class DeleteController extends Controller
{
private WebhookRepositoryInterface $repository;
/**
* @codeCoverageIgnore
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var WebhookRepositoryInterface repository */
$this->repository = app(WebhookRepositoryInterface::class);
$this->repository->setUser($admin);
return $next($request);
}
);
}
/**
* Remove the specified resource from storage.
*
* @param Webhook $webhook
*
* @return JsonResponse
* @codeCoverageIgnore
*/
public function destroy(Webhook $webhook): JsonResponse
{
$this->repository->destroy($webhook);
return response()->json([], 204);
}
}

View File

@@ -0,0 +1,81 @@
<?php
declare(strict_types=1);
/*
* EditController.php
* Copyright (c) 2020 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\Webhook;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Webhook\UpdateRequest;
use FireflyIII\Models\Webhook;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Transformers\WebhookTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use League\Fractal\Resource\Item;
/**
* Class EditController
*/
class EditController extends Controller
{
private WebhookRepositoryInterface $repository;
/**
* @codeCoverageIgnore
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var WebhookRepositoryInterface repository */
$this->repository = app(WebhookRepositoryInterface::class);
$this->repository->setUser($admin);
return $next($request);
}
);
}
/**
* @param Webhook $webhook
* @param UpdateRequest $request
*
* @return JsonResponse
*/
public function update(Webhook $webhook, UpdateRequest $request): JsonResponse
{
$data = $request->getData();
$webhook = $this->repository->update($webhook, $data);
$manager = $this->getManager();
/** @var WebhookTransformer $transformer */
$transformer = app(WebhookTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($webhook, $transformer, 'webhooks');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -0,0 +1,88 @@
<?php
declare(strict_types=1);
/*
* IndexController.php
* Copyright (c) 2020 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\Webhook;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Repositories\Webhook\WebhookRepositoryInterface;
use FireflyIII\Transformers\WebhookTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
/**
* Class IndexController
*/
class IndexController extends Controller
{
private WebhookRepositoryInterface $repository;
/**
* @codeCoverageIgnore
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var WebhookRepositoryInterface repository */
$this->repository = app(WebhookRepositoryInterface::class);
$this->repository->setUser($admin);
return $next($request);
}
);
}
/**
* Display a listing of the resource.
*
* @return JsonResponse
* @codeCoverageIgnore
*/
public function index(): JsonResponse
{
$webhooks = $this->repository->all();
$manager = $this->getManager();
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
$count = $webhooks->count();
$bills = $webhooks->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($webhooks, $count, $pageSize, $this->parameters->get('page'));
/** @var WebhookTransformer $transformer */
$transformer = app(WebhookTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new FractalCollection($bills, $transformer, 'webhooks');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
}
}

View File

@@ -23,7 +23,6 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Middleware;
use Closure;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\User;
use Illuminate\Http\Request;

View File

@@ -26,7 +26,10 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Location;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\UniqueAccountNumber;
use FireflyIII\Rules\UniqueIban;
use FireflyIII\Support\Request\AppendsLocationData;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -37,18 +40,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class AccountStoreRequest extends FormRequest
{
use ConvertsDataTypes, AppendsLocationData;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, AppendsLocationData, ChecksLogin;
/**
* @return array
@@ -108,12 +100,13 @@ class AccountStoreRequest extends FormRequest
$accountRoles = implode(',', config('firefly.accountRoles'));
$types = implode(',', array_keys(config('firefly.subTitlesByIdentifier')));
$ccPaymentTypes = implode(',', array_keys(config('firefly.ccTypes')));
$type = $this->string('type');
$rules = [
'name' => 'required|min:1|uniqueAccountForUser',
'type' => 'required|' . sprintf('in:%s', $types),
'iban' => 'iban|nullable',
'iban' => ['iban', 'nullable', new UniqueIban(null, $type)],
'bic' => 'bic|nullable',
'account_number' => 'between:1,255|nullable|uniqueAccountNumberForUser',
'account_number' => ['between:1,255', 'nullable', new UniqueAccountNumber(null, $type)],
'opening_balance' => 'numeric|required_with:opening_balance_date|nullable',
'opening_balance_date' => 'date|required_with:opening_balance|nullable',
'virtual_balance' => 'numeric|nullable',
@@ -132,8 +125,7 @@ class AccountStoreRequest extends FormRequest
'interest_period' => 'required_if:type,liability|in:daily,monthly,yearly',
'notes' => 'min:0|max:65536',
];
$rules = Location::requestRules($rules);
return $rules;
return Location::requestRules($rules);
}
}

View File

@@ -26,7 +26,10 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Location;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\UniqueAccountNumber;
use FireflyIII\Rules\UniqueIban;
use FireflyIII\Support\Request\AppendsLocationData;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -37,17 +40,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class AccountUpdateRequest extends FormRequest
{
use ConvertsDataTypes, AppendsLocationData;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, AppendsLocationData, ChecksLogin;
/**
* @return array
@@ -112,9 +105,9 @@ class AccountUpdateRequest extends FormRequest
$rules = [
'name' => sprintf('min:1|uniqueAccountForUser:%d', $account->id),
'type' => sprintf('in:%s', $types),
'iban' => 'iban|nullable',
'iban' => ['iban', 'nullable', new UniqueIban($account, $this->nullableString('type'))],
'bic' => 'bic|nullable',
'account_number' => sprintf('between:1,255|nullable|uniqueAccountNumberForUser:%d', $account->id),
'account_number' => ['between:1,255', 'nullable', new UniqueAccountNumber($account, $this->nullableString('type'))],
'opening_balance' => 'numeric|required_with:opening_balance_date|nullable',
'opening_balance_date' => 'date|required_with:opening_balance|nullable',
'virtual_balance' => 'numeric|nullable',
@@ -133,8 +126,7 @@ class AccountUpdateRequest extends FormRequest
'interest_period' => 'required_if:type,liability|in:daily,monthly,yearly',
'notes' => 'min:0|max:65536',
];
$rules = Location::requestRules($rules);
return $rules;
return Location::requestRules($rules);
}
}

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsValidAttachmentModel;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -34,17 +35,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class AttachmentStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -33,17 +34,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class AttachmentUpdateRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.

View File

@@ -24,6 +24,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests\Autocomplete;
use FireflyIII\Models\AccountType;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -32,18 +34,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class AutocompleteRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* @return array
@@ -58,6 +49,9 @@ class AutocompleteRequest extends FormRequest
$limit = $this->integer('limit');
$limit = 0 === $limit ? 10 : $limit;
// remove 'initial balance' from allowed types. its internal
$array = array_diff($array, [AccountType::INITIAL_BALANCE, AccountType::RECONCILIATION]);
return [
'types' => $array,
'query' => $this->string('query'),

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -33,17 +34,9 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class AvailableBudgetRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.

View File

@@ -1,7 +1,7 @@
<?php
/**
* BillRequest.php
* BillStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
@@ -25,30 +25,19 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Validator;
/**
* Class BillRequest
*
* TODO AFTER 4.8,0: split this into two request classes.
* Class BillStoreRequest
*
* @codeCoverageIgnore
*/
class BillRequest extends FormRequest
class BillStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -84,7 +73,7 @@ class BillRequest extends FormRequest
*/
public function rules(): array
{
$rules = [
return [
'name' => 'between:1,255|uniqueObjectForUser:bills,name',
'amount_min' => 'numeric|gt:0',
'amount_max' => 'numeric|gt:0',
@@ -96,17 +85,6 @@ class BillRequest extends FormRequest
'active' => [new IsBoolean],
'notes' => 'between:1,65536',
];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
$bill = $this->route()->parameter('bill');
$rules['name'] .= ',' . $bill->id;
break;
}
return $rules;
}
/**

View File

@@ -0,0 +1,111 @@
<?php
/**
* BillUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Validator;
/**
* Class BillUpdateRequest
*
* @codeCoverageIgnore
*/
class BillUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
$active = true;
if (null !== $this->get('active')) {
$active = $this->boolean('active');
}
return [
'name' => $this->string('name'),
'amount_min' => $this->string('amount_min'),
'amount_max' => $this->string('amount_max'),
'currency_id' => $this->integer('currency_id'),
'currency_code' => $this->string('currency_code'),
'date' => $this->date('date'),
'repeat_freq' => $this->string('repeat_freq'),
'skip' => $this->integer('skip'),
'active' => $active,
'order' => $this->integer('order'),
'notes' => $this->nlString('notes'),
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$bill = $this->route()->parameter('bill');
return [
'name' => sprintf('between:1,255|uniqueObjectForUser:bills,name,%d', $bill->id),
'amount_min' => 'numeric|gt:0',
'amount_max' => 'numeric|gt:0',
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
'date' => 'date',
'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly',
'skip' => 'between:0,31',
'active' => [new IsBoolean],
'notes' => 'between:1,65536',
];
}
/**
* Configure the validator instance.
*
* @param Validator $validator
*
* @return void
*/
public function withValidator(Validator $validator): void
{
$validator->after(
static function (Validator $validator) {
$data = $validator->getData();
$min = (float) ($data['amount_min'] ?? 0);
$max = (float) ($data['amount_max'] ?? 0);
if ($min > $max) {
$validator->errors()->add('amount_min', (string) trans('validation.amount_min_over_max'));
}
}
);
}
}

View File

@@ -0,0 +1,73 @@
<?php
/**
* BudgetLimitStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class BudgetLimitStoreRequest
*
* @codeCoverageIgnore
*/
class BudgetLimitStoreRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
return [
'budget_id' => $this->integer('budget_id'),
'start' => $this->date('start'),
'end' => $this->date('end'),
'amount' => $this->string('amount'),
'currency_id' => $this->integer('currency_id'),
'currency_code' => $this->string('currency_code'),
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
return [
'budget_id' => 'required|exists:budgets,id|belongsToUser:budgets,id',
'start' => 'required|before:end|date',
'end' => 'required|after:start|date',
'amount' => 'required|gt:0',
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
];
}
}

View File

@@ -1,6 +1,6 @@
<?php
/**
* BudgetLimitRequest.php
* BudgetLimitUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
@@ -23,29 +23,18 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class BudgetLimitRequest
* Class BudgetLimitUpdateRequest
*
* @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/
class BudgetLimitRequest extends FormRequest
class BudgetLimitUpdateRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -85,21 +74,12 @@ class BudgetLimitRequest extends FormRequest
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
$rules['budget_id'] = 'required|exists:budgets,id|belongsToUser:budgets,id';
break;
}
// if request has a budget already, drop the rule.
$budget = $this->route()->parameter('budget');
if (null !== $budget) {
unset($rules['budget_id']);
}
return $rules;
}

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest;
use Illuminate\Foundation\Http\FormRequest;
@@ -36,17 +37,7 @@ use Illuminate\Validation\Validator;
*/
class BudgetStoreRequest extends FormRequest
{
use ConvertsDataTypes, ValidatesAutoBudgetRequest;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ValidatesAutoBudgetRequest, ChecksLogin;
/**
* Get all data from the request.

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Validation\AutoBudget\ValidatesAutoBudgetRequest;
use Illuminate\Foundation\Http\FormRequest;
@@ -36,17 +37,7 @@ use Illuminate\Validation\Validator;
*/
class BudgetUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ValidatesAutoBudgetRequest;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ValidatesAutoBudgetRequest, ChecksLogin;
/**
* Get all data from the request.

View File

@@ -1,6 +1,6 @@
<?php
/**
* CategoryRequest.php
* CategoryStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
@@ -23,7 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Category;
use FireflyIII\Rules\ZeroOrMore;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -31,21 +32,10 @@ use Illuminate\Foundation\Http\FormRequest;
* Class CategoryRequest
*
* @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/
class CategoryRequest extends FormRequest
class CategoryStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -55,7 +45,8 @@ class CategoryRequest extends FormRequest
public function getAll(): array
{
return [
'name' => $this->string('name'),
'name' => $this->string('name'),
'notes' => $this->nlString('notes'),
];
}
@@ -66,20 +57,8 @@ class CategoryRequest extends FormRequest
*/
public function rules(): array
{
$rules = [
return [
'name' => 'required|between:1,100|uniqueObjectForUser:categories,name',
];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
/** @var Category $category */
$category = $this->route()->parameter('category');
$rules['name'] = sprintf('required|between:1,100|uniqueObjectForUser:categories,name,%d', $category->id);
break;
}
return $rules;
}
}

View File

@@ -0,0 +1,71 @@
<?php
/**
* CategoryUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class CategoryUpdateRequest
*
* @codeCoverageIgnore
*/
class CategoryUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
$notes = null;
$all = $this->all();
if (array_key_exists('notes', $all)) {
$notes = $this->nlString('notes');
}
return [
'name' => $this->string('name'),
'notes' => $notes,
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$category = $this->route()->parameter('category');
return [
'name' => sprintf('required|between:1,100|uniqueObjectForUser:categories,name,%d', $category->id),
];
}
}

View File

@@ -25,6 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -35,17 +36,9 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class ConfigurationRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -56,6 +49,8 @@ class ConfigurationRequest extends FormRequest
{
$name = $this->route()->parameter('configName');
switch ($name) {
default:
break;
case 'is_demo_site':
case 'single_user_mode':
return ['value' => $this->boolean('value')];
@@ -75,6 +70,8 @@ class ConfigurationRequest extends FormRequest
{
$name = $this->route()->parameter('configName');
switch ($name) {
default:
break;
case 'is_demo_site':
case 'single_user_mode':
return ['value' => ['required', new IsBoolean]];

View File

@@ -1,6 +1,6 @@
<?php
/**
* CurrencyRequest.php
* CurrencyStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
@@ -24,29 +24,19 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class CurrencyRequest
* Class CurrencyStoreRequest
*
* @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/
class CurrencyRequest extends FormRequest
class CurrencyStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -81,7 +71,7 @@ class CurrencyRequest extends FormRequest
*/
public function rules(): array
{
$rules = [
return [
'name' => 'required|between:1,255|unique:transaction_currencies,name',
'code' => 'required|between:3,3|unique:transaction_currencies,code',
'symbol' => 'required|between:1,8|unique:transaction_currencies,symbol',
@@ -90,20 +80,5 @@ class CurrencyRequest extends FormRequest
'default' => [new IsBoolean()],
];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
$currency = $this->route()->parameter('currency_code');
$rules['name'] = 'required|between:1,255|unique:transaction_currencies,name,' . $currency->id;
$rules['code'] = 'required|between:3,3|unique:transaction_currencies,code,' . $currency->id;
$rules['symbol'] = 'required|between:1,8|unique:transaction_currencies,symbol,' . $currency->id;
break;
}
return $rules;
}
}

View File

@@ -0,0 +1,84 @@
<?php
/**
* CurrencyUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class CurrencyUpdateRequest
*
* @codeCoverageIgnore
*/
class CurrencyUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
$enabled = true;
$default = false;
if (null !== $this->get('enabled')) {
$enabled = $this->boolean('enabled');
}
if (null !== $this->get('default')) {
$default = $this->boolean('default');
}
return [
'name' => $this->string('name'),
'code' => $this->string('code'),
'symbol' => $this->string('symbol'),
'decimal_places' => $this->integer('decimal_places'),
'default' => $default,
'enabled' => $enabled,
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$currency = $this->route()->parameter('currency_code');
return [
'name' => sprintf('required|between:1,255|unique:transaction_currencies,name,%d', $currency->id),
'code' => sprintf('required|between:3,3|unique:transaction_currencies,code,%d', $currency->id),
'symbol' => sprintf('required|between:1,8|unique:transaction_currencies,symbol,%d', $currency->id),
'decimal_places' => 'between:0,20|numeric|min:0|max:20',
'enabled' => [new IsBoolean()],
'default' => [new IsBoolean()],
];
}
}

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -31,17 +32,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class DataDestroyRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check() && !auth()->user()->hasRole('demo');
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -64,7 +55,7 @@ class DataDestroyRequest extends FormRequest
',accounts,asset_accounts,expense_accounts,revenue_accounts,liabilities,transactions,withdrawals,deposits,transfers';
return [
'objects' => sprintf('min:1|string|in:%s', $valid),
'objects' => sprintf('required|min:1|string|in:%s', $valid),
];
}
}

View File

@@ -25,6 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -35,17 +36,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class DateRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.

View File

@@ -1,6 +1,6 @@
<?php
/**
* LinkTypeRequest.php
* LinkTypeStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
@@ -24,29 +24,19 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\LinkType;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
/**
* Class LinkTypeRequest
* Class LinkTypeStoreRequest
*
* @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/
class LinkTypeRequest extends FormRequest
class LinkTypeStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -71,26 +61,10 @@ class LinkTypeRequest extends FormRequest
*/
public function rules(): array
{
$rules = [
return [
'name' => 'required|unique:link_types,name|min:1',
'outward' => 'required|unique:link_types,outward|min:1|different:inward',
'inward' => 'required|unique:link_types,inward|min:1|different:outward',
];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
/** @var LinkType $linkType */
$linkType = $this->route()->parameter('linkType');
$rules['name'] = ['required', Rule::unique('link_types', 'name')->ignore($linkType->id), 'min:1'];
$rules['outward'] = ['required', 'different:inward', Rule::unique('link_types', 'outward')->ignore($linkType->id), 'min:1'];
$rules['inward'] = ['required', 'different:outward', Rule::unique('link_types', 'inward')->ignore($linkType->id), 'min:1'];
break;
}
return $rules;
}
}

View File

@@ -0,0 +1,71 @@
<?php
/**
* LinkTypeUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\LinkType;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
/**
* Class LinkTypeUpdateRequest
*
* @codeCoverageIgnore
*/
class LinkTypeUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
return [
'name' => $this->string('name'),
'outward' => $this->string('outward'),
'inward' => $this->string('inward'),
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$linkType = $this->route()->parameter('linkType');
return [
'name' => ['required', Rule::unique('link_types', 'name')->ignore($linkType->id), 'min:1'],
'outward' => ['required', 'different:inward', Rule::unique('link_types', 'outward')->ignore($linkType->id), 'min:1'],
'inward' => ['required', 'different:outward', Rule::unique('link_types', 'inward')->ignore($linkType->id), 'min:1'],
];
}
}

View File

@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -34,17 +35,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class ObjectGroupUpdateRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* @return array

View File

@@ -1,106 +0,0 @@
<?php
/**
* PiggyBankRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Rules\IsAssetAccountId;
use FireflyIII\Rules\LessThanPiggyTarget;
use FireflyIII\Rules\ZeroOrMore;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class PiggyBankRequest
*
* @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/
class PiggyBankRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
return [
'name' => $this->string('name'),
'account_id' => $this->integer('account_id'),
'targetamount' => $this->string('target_amount'),
'current_amount' => $this->string('current_amount'),
'startdate' => $this->date('start_date'),
'targetdate' => $this->date('target_date'),
'notes' => $this->nlString('notes'),
'order' => $this->integer('order'),
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$rules = [
'name' => 'required|between:1,255|uniquePiggyBankForUser',
'current_amount' => ['numeric', new ZeroOrMore, 'lte:target_amount'],
'start_date' => 'date|nullable',
'target_date' => 'date|nullable|after:start_date',
'notes' => 'max:65000',
];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
/** @var PiggyBank $piggyBank */
$piggyBank = $this->route()->parameter('piggyBank');
$rules['name'] = 'between:1,255|uniquePiggyBankForUser:' . $piggyBank->id;
$rules['account_id'] = ['belongsToUser:accounts', new IsAssetAccountId];
$rules['target_amount'] = 'numeric|gt:0';
$rules['current_amount'] = ['numeric', new ZeroOrMore, new LessThanPiggyTarget];
break;
}
return $rules;
}
}

View File

@@ -23,7 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\ZeroOrMore;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -34,17 +34,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class PiggyBankStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -75,10 +65,10 @@ class PiggyBankStoreRequest extends FormRequest
{
return [
'name' => 'required|between:1,255|uniquePiggyBankForUser',
'current_amount' => ['numeric', new ZeroOrMore, 'lte:target_amount'],
'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'],
'account_id' => 'required|numeric|belongsToUser:accounts,id',
'object_group_id' => 'numeric|belongsToUser:object_groups,id',
'target_amount' => ['numeric', new ZeroOrMore, 'lte:target_amount', 'required'],
'target_amount' => ['numeric', 'gte:0', 'lte:target_amount', 'required'],
'start_date' => 'date|nullable',
'target_date' => 'date|nullable|after:start_date',
'notes' => 'max:65000',

View File

@@ -0,0 +1,89 @@
<?php
/**
* PiggyBankUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsAssetAccountId;
use FireflyIII\Rules\LessThanPiggyTarget;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class PiggyBankUpdateRequest
*
* @codeCoverageIgnore
*/
class PiggyBankUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
// if the value isn't present, dont return it at all.
// TODO this should be the way to collect fields for all API things.
// TODO make sure piggy bank uses 'start_date' etc. until right up to DB update.
// TODO can we configure this and return it from config?
// TODO this is the way.
$fields = [
'name' => ['name', 'string'],
'account_id' => ['account_id', 'integer'],
'targetamount' => ['target_amount', 'string'],
'current_amount' => ['current_amount', 'string'],
'startdate' => ['start_date', 'date'],
'targetdate' => ['target_date', 'string'],
'notes' => ['notes', 'nlString'],
'order' => ['order', 'integer'],
'object_group' => ['object_group', 'string'],
'object_group_id' => ['object_group_id', 'integer'],
];
return $this->getAllData($fields);
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$piggyBank = $this->route()->parameter('piggyBank');
return [
'name' => 'between:1,255|uniquePiggyBankForUser:' . $piggyBank->id,
'current_amount' => ['numeric', 'gte:0', new LessThanPiggyTarget],
'target_amount' => 'numeric|gt:0',
'start_date' => 'date|nullable',
'target_date' => 'date|nullable|after:start_date',
'notes' => 'max:65000',
'account_id' => ['belongsToUser:accounts', new IsAssetAccountId],
];
}
}

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -33,18 +34,9 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class PreferenceRequest extends FormRequest
{
use ConvertsDataTypes;
use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/**
* Get all data from the request.

View File

@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests;
use Carbon\Carbon;
use FireflyIII\Rules\BelongsUser;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Support\Request\GetRecurrenceData;
use FireflyIII\Validation\CurrencyValidation;
@@ -39,17 +40,9 @@ use Illuminate\Validation\Validator;
*/
class RecurrenceStoreRequest extends FormRequest
{
use ConvertsDataTypes, RecurrenceValidation, TransactionValidation, CurrencyValidation, GetRecurrenceData;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, RecurrenceValidation, TransactionValidation, CurrencyValidation, GetRecurrenceData, ChecksLogin;
/**
* Get all data from the request.
@@ -83,6 +76,56 @@ class RecurrenceStoreRequest extends FormRequest
];
}
/**
* Returns the transaction data as it is found in the submitted data. It's a complex method according to code
* standards but it just has a lot of ??-statements because of the fields that may or may not exist.
*
* @return array
*/
private function getTransactionData(): array
{
$return = [];
// transaction data:
/** @var array $transactions */
$transactions = $this->get('transactions');
if (null === $transactions) {
return [];
}
/** @var array $transaction */
foreach ($transactions as $transaction) {
$return[] = $this->getSingleRecurrenceData($transaction);
}
return $return;
}
/**
* Returns the repetition data as it is found in the submitted data.
*
* @return array
*/
private function getRepetitionData(): array
{
$return = [];
// repetition data:
/** @var array $repetitions */
$repetitions = $this->get('repetitions');
if (null === $repetitions) {
return [];
}
/** @var array $repetition */
foreach ($repetitions as $repetition) {
$return[] = [
'type' => $repetition['type'],
'moment' => $repetition['moment'],
'skip' => (int) $repetition['skip'],
'weekend' => (int) $repetition['weekend'],
];
}
return $return;
}
/**
* The rules that the incoming request must be matched against.
*
@@ -150,54 +193,4 @@ class RecurrenceStoreRequest extends FormRequest
}
);
}
/**
* Returns the repetition data as it is found in the submitted data.
*
* @return array
*/
private function getRepetitionData(): array
{
$return = [];
// repetition data:
/** @var array $repetitions */
$repetitions = $this->get('repetitions');
if (null === $repetitions) {
return [];
}
/** @var array $repetition */
foreach ($repetitions as $repetition) {
$return[] = [
'type' => $repetition['type'],
'moment' => $repetition['moment'],
'skip' => (int) $repetition['skip'],
'weekend' => (int) $repetition['weekend'],
];
}
return $return;
}
/**
* Returns the transaction data as it is found in the submitted data. It's a complex method according to code
* standards but it just has a lot of ??-statements because of the fields that may or may not exist.
*
* @return array
*/
private function getTransactionData(): array
{
$return = [];
// transaction data:
/** @var array $transactions */
$transactions = $this->get('transactions');
if (null === $transactions) {
return [];
}
/** @var array $transaction */
foreach ($transactions as $transaction) {
$return[] = $this->getSingleRecurrenceData($transaction);
}
return $return;
}
}

View File

@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Recurrence;
use FireflyIII\Rules\BelongsUser;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Support\Request\GetRecurrenceData;
use FireflyIII\Validation\CurrencyValidation;
@@ -39,18 +40,9 @@ use Illuminate\Validation\Validator;
*/
class RecurrenceUpdateRequest extends FormRequest
{
use ConvertsDataTypes, RecurrenceValidation, TransactionValidation, CurrencyValidation, GetRecurrenceData;
use ConvertsDataTypes, RecurrenceValidation, TransactionValidation, CurrencyValidation, GetRecurrenceData, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/**
* Get all data from the request.
@@ -85,6 +77,56 @@ class RecurrenceUpdateRequest extends FormRequest
];
}
/**
* Returns the transaction data as it is found in the submitted data. It's a complex method according to code
* standards but it just has a lot of ??-statements because of the fields that may or may not exist.
*
* @return array
*/
private function getTransactionData(): array
{
$return = [];
// transaction data:
/** @var array $transactions */
$transactions = $this->get('transactions');
if (null === $transactions) {
return [];
}
/** @var array $transaction */
foreach ($transactions as $transaction) {
$return[] = $this->getSingleRecurrenceData($transaction);
}
return $return;
}
/**
* Returns the repetition data as it is found in the submitted data.
*
* @return array
*/
private function getRepetitionData(): array
{
$return = [];
// repetition data:
/** @var array $repetitions */
$repetitions = $this->get('repetitions');
if (null === $repetitions) {
return [];
}
/** @var array $repetition */
foreach ($repetitions as $repetition) {
$return[] = [
'type' => $repetition['type'],
'moment' => $repetition['moment'],
'skip' => (int) $repetition['skip'],
'weekend' => (int) $repetition['weekend'],
];
}
return $return;
}
/**
* The rules that the incoming request must be matched against.
*
@@ -153,54 +195,4 @@ class RecurrenceUpdateRequest extends FormRequest
}
);
}
/**
* Returns the repetition data as it is found in the submitted data.
*
* @return array
*/
private function getRepetitionData(): array
{
$return = [];
// repetition data:
/** @var array $repetitions */
$repetitions = $this->get('repetitions');
if (null === $repetitions) {
return [];
}
/** @var array $repetition */
foreach ($repetitions as $repetition) {
$return[] = [
'type' => $repetition['type'],
'moment' => $repetition['moment'],
'skip' => (int) $repetition['skip'],
'weekend' => (int) $repetition['weekend'],
];
}
return $return;
}
/**
* Returns the transaction data as it is found in the submitted data. It's a complex method according to code
* standards but it just has a lot of ??-statements because of the fields that may or may not exist.
*
* @return array
*/
private function getTransactionData(): array
{
$return = [];
// transaction data:
/** @var array $transactions */
$transactions = $this->get('transactions');
if (null === $transactions) {
return [];
}
/** @var array $transaction */
foreach ($transactions as $transaction) {
$return[] = $this->getSingleRecurrenceData($transaction);
}
return $return;
}
}

View File

@@ -1,6 +1,6 @@
<?php
/**
* RuleGroupRequest.php
* RuleGroupStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
@@ -25,28 +25,18 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\RuleGroup;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* @codeCoverageIgnore
* Class RuleGroupRequest
* TODO AFTER 4.8,0: split this into two request classes.
* Class RuleGroupStoreRequest
*/
class RuleGroupRequest extends FormRequest
class RuleGroupStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
@@ -75,22 +65,10 @@ class RuleGroupRequest extends FormRequest
*/
public function rules(): array
{
$rules = [
return [
'title' => 'required|between:1,100|uniqueObjectForUser:rule_groups,title',
'description' => 'between:1,5000|nullable',
'active' => [new IsBoolean],
];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
/** @var RuleGroup $ruleGroup */
$ruleGroup = $this->route()->parameter('ruleGroup');
$rules['title'] = 'required|between:1,100|uniqueObjectForUser:rule_groups,title,' . $ruleGroup->id;
break;
}
return $rules;
}
}

View File

@@ -26,30 +26,19 @@ namespace FireflyIII\Api\V1\Requests;
use Carbon\Carbon;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Collection;
use Log;
/**
* Class RuleGroupTestRequest
*/
class RuleGroupTestRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* @return array
@@ -57,47 +46,12 @@ class RuleGroupTestRequest extends FormRequest
public function getTestParameters(): array
{
return [
'page' => $this->getPage(),
'start_date' => $this->getDate('start_date'),
'end_date' => $this->getDate('end_date'),
'search_limit' => $this->getSearchLimit(),
'trigger_limit' => $this->getTriggerLimit(),
'accounts' => $this->getAccounts(),
'start' => $this->getDate('start'),
'end' => $this->getDate('end'),
'accounts' => $this->getAccounts(),
];
}
/**
* @return array
*/
public function rules(): array
{
return [];
}
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int) $accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/**
* @param string $field
*
@@ -105,45 +59,28 @@ class RuleGroupTestRequest extends FormRequest
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
}
/**
* @return int
* @return Collection
*/
private function getPage(): int
private function getAccounts(): string
{
return 0 === (int) $this->query('page') ? 1 : (int) $this->query('page');
return (string) $this->query('accounts');
}
/**
* @return int
* @return array
*/
private function getSearchLimit(): int
public function rules(): array
{
return 0 === (int) $this->query('search_limit') ? (int) config('firefly.test-triggers.limit') : (int) $this->query('search_limit');
}
/**
* @return int
*/
private function getTriggerLimit(): int
{
return 0 === (int) $this->query('triggered_limit') ? (int) config('firefly.test-triggers.range') : (int) $this->query('triggered_limit');
}
/**
* @param Account|null $account
*
* @return bool
*/
private function validAccount(?Account $account): bool
{
return null !== $account && AccountType::ASSET === $account->accountType->type;
return [
'start' => 'date',
'end' => 'date|after:start',
'accounts' => '',
'accounts.*' => 'exists:accounts,id|belongsToUser:accounts',
];
}
}

View File

@@ -26,30 +26,18 @@ namespace FireflyIII\Api\V1\Requests;
use Carbon\Carbon;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Collection;
use Log;
/**
* Class RuleGroupTriggerRequest
*/
class RuleGroupTriggerRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* @return array
@@ -57,47 +45,12 @@ class RuleGroupTriggerRequest extends FormRequest
public function getTriggerParameters(): array
{
return [
'start_date' => $this->getDate('start_date'),
'end_date' => $this->getDate('end_date'),
'accounts' => $this->getAccounts(),
'start' => $this->getDate('start'),
'end' => $this->getDate('end'),
'accounts' => $this->getAccounts(),
];
}
/**
* @return array
*/
public function rules(): array
{
return [
'start_date' => 'required|date',
'end_date' => 'required|date|after:start_date',
];
}
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int) $accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/**
* @param string $field
*
@@ -105,20 +58,26 @@ class RuleGroupTriggerRequest extends FormRequest
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
}
/**
* @param Account|null $account
*
* @return bool
* @return string
*/
private function validAccount(?Account $account): bool
private function getAccounts(): string
{
return null !== $account && AccountType::ASSET === $account->accountType->type;
return (string) $this->query('accounts');
}
/**
* @return array
*/
public function rules(): array
{
return [
'start' => 'date',
'end' => 'date|after:start',
];
}
}

View File

@@ -0,0 +1,74 @@
<?php
/**
* RuleGroupUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* @codeCoverageIgnore
* Class RuleGroupUpdateRequest
*/
class RuleGroupUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
$active = true;
if (null !== $this->get('active')) {
$active = $this->boolean('active');
}
return [
'title' => $this->string('title'),
'description' => $this->string('description'),
'active' => $active,
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$ruleGroup = $this->route()->parameter('ruleGroup');
return [
'title' => 'required|between:1,100|uniqueObjectForUser:rule_groups,title,' . $ruleGroup->id,
'description' => 'between:1,5000|nullable',
'active' => [new IsBoolean],
];
}
}

View File

@@ -24,7 +24,9 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Support\Request\GetRuleConfiguration;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Validator;
use function is_array;
@@ -35,17 +37,9 @@ use function is_array;
*/
class RuleStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, GetRuleConfiguration, ChecksLogin;
/**
* Get all data from the request.
@@ -81,6 +75,48 @@ class RuleStoreRequest extends FormRequest
];
}
/**
* @return array
*/
private function getRuleTriggers(): array
{
$triggers = $this->get('triggers');
$return = [];
if (is_array($triggers)) {
foreach ($triggers as $trigger) {
$return[] = [
'type' => $trigger['type'],
'value' => $trigger['value'],
'active' => $this->convertBoolean((string) ($trigger['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($trigger['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
/**
* @return array
*/
private function getRuleActions(): array
{
$actions = $this->get('actions');
$return = [];
if (is_array($actions)) {
foreach ($actions as $action) {
$return[] = [
'type' => $action['type'],
'value' => $action['value'],
'active' => $this->convertBoolean((string) ($action['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($action['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
/**
* The rules that the incoming request must be matched against.
*
@@ -88,11 +124,11 @@ class RuleStoreRequest extends FormRequest
*/
public function rules(): array
{
$validTriggers = array_keys(config('firefly.rule-triggers'));
$validTriggers = $this->getTriggers();
$validActions = array_keys(config('firefly.rule-actions'));
// some triggers and actions require text:
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
$contextTriggers = implode(',', $this->getTriggersWithContext());
$contextActions = implode(',', config('firefly.context-rule-actions'));
return [
@@ -132,21 +168,6 @@ class RuleStoreRequest extends FormRequest
);
}
/**
* Adds an error to the validator when there are no repetitions in the array of data.
*
* @param Validator $validator
*/
protected function atLeastOneAction(Validator $validator): void
{
$data = $validator->getData();
$actions = $data['actions'] ?? [];
// need at least one trigger
if (0 === count($actions)) {
$validator->errors()->add('title', (string) trans('validation.at_least_one_action'));
}
}
/**
* Adds an error to the validator when there are no repetitions in the array of data.
*
@@ -163,44 +184,17 @@ class RuleStoreRequest extends FormRequest
}
/**
* @return array
* Adds an error to the validator when there are no repetitions in the array of data.
*
* @param Validator $validator
*/
private function getRuleActions(): array
protected function atLeastOneAction(Validator $validator): void
{
$actions = $this->get('actions');
$return = [];
if (is_array($actions)) {
foreach ($actions as $action) {
$return[] = [
'type' => $action['type'],
'value' => $action['value'],
'active' => $this->convertBoolean((string) ($action['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($action['stop_processing'] ?? 'false')),
];
}
$data = $validator->getData();
$actions = $data['actions'] ?? [];
// need at least one trigger
if (0 === count($actions)) {
$validator->errors()->add('title', (string) trans('validation.at_least_one_action'));
}
return $return;
}
/**
* @return array
*/
private function getRuleTriggers(): array
{
$triggers = $this->get('triggers');
$return = [];
if (is_array($triggers)) {
foreach ($triggers as $trigger) {
$return[] = [
'type' => $trigger['type'],
'value' => $trigger['value'],
'active' => $this->convertBoolean((string) ($trigger['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($trigger['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
}

View File

@@ -26,30 +26,18 @@ namespace FireflyIII\Api\V1\Requests;
use Carbon\Carbon;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Collection;
use Log;
/**
* Class RuleTestRequest
*/
class RuleTestRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* @return array
@@ -57,60 +45,14 @@ class RuleTestRequest extends FormRequest
public function getTestParameters(): array
{
return [
'page' => $this->getPage(),
'start_date' => $this->getDate('start_date'),
'end_date' => $this->getDate('end_date'),
'search_limit' => $this->getSearchLimit(),
'trigger_limit' => $this->getTriggerLimit(),
'accounts' => $this->getAccounts(),
'page' => $this->getPage(),
'start' => $this->getDate('start'),
'end' => $this->getDate('end'),
'accounts' => $this->getAccounts(),
];
}
/**
* @return array
*/
public function rules(): array
{
return [];
}
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int) $accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/**
* @param string $field
*
* @return Carbon|null
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
}
/**
* @return int
*/
@@ -121,29 +63,34 @@ class RuleTestRequest extends FormRequest
}
/**
* @return int
*/
private function getSearchLimit(): int
{
return 0 === (int) $this->query('search_limit') ? (int) config('firefly.test-triggers.limit') : (int) $this->query('search_limit');
}
/**
* @return int
*/
private function getTriggerLimit(): int
{
return 0 === (int) $this->query('triggered_limit') ? (int) config('firefly.test-triggers.range') : (int) $this->query('triggered_limit');
}
/**
* @param Account|null $account
* @param string $field
*
* @return bool
* @return Carbon|null
*/
private function validAccount(?Account $account): bool
private function getDate(string $field): ?Carbon
{
return null !== $account && AccountType::ASSET === $account->accountType->type;
return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
}
/**
* @return string
*/
private function getAccounts(): string
{
return (string) $this->query('accounts');
}
/**
* @return array
*/
public function rules(): array
{
return [
'start' => 'date',
'end' => 'date|after:start',
'accounts' => '',
'accounts.*' => 'required|exists:accounts,id|belongsToUser:accounts',
];
}
}

View File

@@ -26,30 +26,18 @@ namespace FireflyIII\Api\V1\Requests;
use Carbon\Carbon;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Collection;
use Log;
/**
* Class RuleTriggerRequest
*/
class RuleTriggerRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* @return array
@@ -57,47 +45,12 @@ class RuleTriggerRequest extends FormRequest
public function getTriggerParameters(): array
{
return [
'start_date' => $this->getDate('start_date'),
'end_date' => $this->getDate('end_date'),
'accounts' => $this->getAccounts(),
'start' => $this->getDate('start'),
'end' => $this->getDate('end'),
'accounts' => $this->getAccounts(),
];
}
/**
* @return array
*/
public function rules(): array
{
return [
'start_date' => 'required|date',
'end_date' => 'required|date|after:start_date',
];
}
/**
* @return Collection
*/
private function getAccounts(): Collection
{
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
$accounts = new Collection;
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
foreach ($accountList as $accountId) {
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
$account = $accountRepository->findNull((int) $accountId);
if ($this->validAccount($account)) {
/** @noinspection NullPointerExceptionInspection */
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
$accounts->push($account);
}
}
return $accounts;
}
/**
* @param string $field
*
@@ -105,20 +58,28 @@ class RuleTriggerRequest extends FormRequest
*/
private function getDate(string $field): ?Carbon
{
/** @var Carbon $result */
$result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
return $result;
return null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field));
}
/**
* @param Account|null $account
*
* @return bool
* @return string
*/
private function validAccount(?Account $account): bool
private function getAccounts(): string
{
return null !== $account && AccountType::ASSET === $account->accountType->type;
return (string) $this->query('accounts');
}
/**
* @return array
*/
public function rules(): array
{
return [
'start' => 'date',
'end' => 'date|after:start',
'accounts' => '',
'accounts.*' => 'exists:accounts,id|belongsToUser:accounts',
];
}
}

View File

@@ -24,7 +24,9 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Support\Request\GetRuleConfiguration;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Validator;
use function is_array;
@@ -35,17 +37,9 @@ use function is_array;
*/
class RuleUpdateRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, GetRuleConfiguration, ChecksLogin;
/**
* Get all data from the request.
@@ -81,6 +75,54 @@ class RuleUpdateRequest extends FormRequest
];
}
/**
* @return array|null
*/
private function getRuleTriggers(): ?array
{
if (!$this->has('triggers')) {
return null;
}
$triggers = $this->get('triggers');
$return = [];
if (is_array($triggers)) {
foreach ($triggers as $trigger) {
$return[] = [
'type' => $trigger['type'],
'value' => $trigger['value'],
'active' => $this->convertBoolean((string) ($trigger['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($trigger['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
/**
* @return array|null
*/
private function getRuleActions(): ?array
{
if (!$this->has('actions')) {
return null;
}
$actions = $this->get('actions');
$return = [];
if (is_array($actions)) {
foreach ($actions as $action) {
$return[] = [
'type' => $action['type'],
'value' => $action['value'],
'active' => $this->convertBoolean((string) ($action['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($action['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
/**
* The rules that the incoming request must be matched against.
*
@@ -88,12 +130,12 @@ class RuleUpdateRequest extends FormRequest
*/
public function rules(): array
{
$validTriggers = array_keys(config('firefly.rule-triggers'));
$validTriggers = $this->getTriggers();
$validActions = array_keys(config('firefly.rule-actions'));
$rule = $this->route()->parameter('rule');
// some triggers and actions require text:
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
$contextTriggers = implode(',', $this->getTriggersWithContext());
$contextActions = implode(',', config('firefly.context-rule-actions'));
return [
@@ -133,21 +175,6 @@ class RuleUpdateRequest extends FormRequest
);
}
/**
* Adds an error to the validator when there are no repetitions in the array of data.
*
* @param Validator $validator
*/
protected function atLeastOneAction(Validator $validator): void
{
$data = $validator->getData();
$actions = $data['actions'] ?? null;
// need at least one action
if (is_array($actions) && 0 === count($actions)) {
$validator->errors()->add('title', (string) trans('validation.at_least_one_action'));
}
}
/**
* Adds an error to the validator when there are no repetitions in the array of data.
*
@@ -164,50 +191,17 @@ class RuleUpdateRequest extends FormRequest
}
/**
* @return array|null
* Adds an error to the validator when there are no repetitions in the array of data.
*
* @param Validator $validator
*/
private function getRuleActions(): ?array
protected function atLeastOneAction(Validator $validator): void
{
if (!$this->has('actions')) {
return null;
$data = $validator->getData();
$actions = $data['actions'] ?? null;
// need at least one action
if (is_array($actions) && 0 === count($actions)) {
$validator->errors()->add('title', (string) trans('validation.at_least_one_action'));
}
$actions = $this->get('actions');
$return = [];
if (is_array($actions)) {
foreach ($actions as $action) {
$return[] = [
'type' => $action['type'],
'value' => $action['value'],
'active' => $this->convertBoolean((string) ($action['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($action['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
/**
* @return array|null
*/
private function getRuleTriggers(): ?array
{
if (!$this->has('triggers')) {
return null;
}
$triggers = $this->get('triggers');
$return = [];
if (is_array($triggers)) {
foreach ($triggers as $trigger) {
$return[] = [
'type' => $trigger['type'],
'value' => $trigger['value'],
'active' => $this->convertBoolean((string) ($trigger['active'] ?? 'false')),
'stop_processing' => $this->convertBoolean((string) ($trigger['stop_processing'] ?? 'false')),
];
}
}
return $return;
}
}

View File

@@ -24,6 +24,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Location;
use FireflyIII\Support\Request\AppendsLocationData;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -34,17 +36,8 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class TagStoreRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin, AppendsLocationData;
/**
* Get all data from the request.
@@ -53,20 +46,15 @@ class TagStoreRequest extends FormRequest
*/
public function getAll(): array
{
$hasLocation = false;
if ($this->has('longitude') && $this->has('latitude') && $this->has('zoom_level')) {
$hasLocation = true;
}
return [
$data = [
'tag' => $this->string('tag'),
'date' => $this->date('date'),
'description' => $this->string('description'),
'has_location' => $hasLocation,
'longitude' => $this->string('longitude'),
'latitude' => $this->string('latitude'),
'zoom_level' => $this->integer('zoom_level'),
'has_location' => true,
];
$data = $this->appendLocationData($data, null);
return $data;
}
/**

View File

@@ -25,6 +25,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Location;
use FireflyIII\Support\Request\AppendsLocationData;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -35,17 +37,8 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class TagUpdateRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin, AppendsLocationData;
/**
* Get all data from the request.
@@ -54,20 +47,15 @@ class TagUpdateRequest extends FormRequest
*/
public function getAll(): array
{
$updateLocation = false;
if ($this->has('longitude') && $this->has('latitude') && $this->has('zoom_level')) {
$updateLocation = true;
}
return [
$data = [
'tag' => $this->string('tag'),
'date' => $this->date('date'),
'description' => $this->string('description'),
'has_location' => $updateLocation,
'longitude' => '' === $this->string('longitude') ? null : $this->string('longitude'),
'latitude' => '' === $this->string('latitude') ? null : $this->string('latitude'),
'zoom_level' => '' === $this->string('zoom_level') ? null : $this->integer('zoom_level'),
'has_location' => true, // pretend location is present.
];
$data = $this->appendLocationData($data, null);
return $data;
}
/**

View File

@@ -25,6 +25,7 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\LinkType\LinkTypeRepositoryInterface;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\User;
use Illuminate\Foundation\Http\FormRequest;
@@ -35,17 +36,9 @@ use Illuminate\Validation\Validator;
*/
class TransactionLinkRequest extends FormRequest
{
use ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.

View File

@@ -28,6 +28,7 @@ use FireflyIII\Rules\BelongsUser;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\IsDateOrTime;
use FireflyIII\Support\NullArrayObject;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Validation\CurrencyValidation;
use FireflyIII\Validation\GroupValidation;
@@ -41,20 +42,7 @@ use Log;
*/
class TransactionStoreRequest extends FormRequest
{
use TransactionValidation, GroupValidation, CurrencyValidation, ConvertsDataTypes;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
Log::debug('Authorize TransactionStoreRequest');
// Only allow authenticated users
return auth()->check();
}
use TransactionValidation, GroupValidation, CurrencyValidation, ConvertsDataTypes, ChecksLogin;
/**
* Get all data. Is pretty complex because of all the ??-statements.
@@ -73,6 +61,105 @@ class TransactionStoreRequest extends FormRequest
];
}
/**
* Get transaction data.
*
* @return array
*/
private function getTransactionData(): array
{
$return = [];
/**
* @var array $transaction
*/
foreach ($this->get('transactions') as $transaction) {
$object = new NullArrayObject($transaction);
$return[] = [
'type' => $this->stringFromValue($object['type']),
'date' => $this->dateFromValue($object['date']),
'order' => $this->integerFromValue((string) $object['order']),
'currency_id' => $this->integerFromValue((string) $object['currency_id']),
'currency_code' => $this->stringFromValue($object['currency_code']),
// foreign currency info:
'foreign_currency_id' => $this->integerFromValue((string) $object['foreign_currency_id']),
'foreign_currency_code' => $this->stringFromValue((string) $object['foreign_currency_code']),
// amount and foreign amount. Cannot be 0.
'amount' => $this->stringFromValue((string) $object['amount']),
'foreign_amount' => $this->stringFromValue((string) $object['foreign_amount']),
// description.
'description' => $this->stringFromValue($object['description']),
// source of transaction. If everything is null, assume cash account.
'source_id' => $this->integerFromValue((string) $object['source_id']),
'source_name' => $this->stringFromValue((string) $object['source_name']),
'source_iban' => $this->stringFromValue((string) $object['source_iban']),
'source_number' => $this->stringFromValue((string) $object['source_number']),
'source_bic' => $this->stringFromValue((string) $object['source_bic']),
// destination of transaction. If everything is null, assume cash account.
'destination_id' => $this->integerFromValue((string) $object['destination_id']),
'destination_name' => $this->stringFromValue((string) $object['destination_name']),
'destination_iban' => $this->stringFromValue((string) $object['destination_iban']),
'destination_number' => $this->stringFromValue((string) $object['destination_number']),
'destination_bic' => $this->stringFromValue((string) $object['destination_bic']),
// budget info
'budget_id' => $this->integerFromValue((string) $object['budget_id']),
'budget_name' => $this->stringFromValue((string) $object['budget_name']),
// category info
'category_id' => $this->integerFromValue((string) $object['category_id']),
'category_name' => $this->stringFromValue((string) $object['category_name']),
// journal bill reference. Optional. Will only work for withdrawals
'bill_id' => $this->integerFromValue((string) $object['bill_id']),
'bill_name' => $this->stringFromValue((string) $object['bill_name']),
// piggy bank reference. Optional. Will only work for transfers
'piggy_bank_id' => $this->integerFromValue((string) $object['piggy_bank_id']),
'piggy_bank_name' => $this->stringFromValue((string) $object['piggy_bank_name']),
// some other interesting properties
'reconciled' => $this->convertBoolean((string) $object['reconciled']),
'notes' => $this->nlStringFromValue((string) $object['notes']),
'tags' => $this->arrayFromValue($object['tags']),
// all custom fields:
'internal_reference' => $this->stringFromValue((string) $object['internal_reference']),
'external_id' => $this->stringFromValue((string) $object['external_id']),
'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')),
'recurrence_id' => $this->integerFromValue($object['recurrence_id']),
'bunq_payment_id' => $this->stringFromValue((string) $object['bunq_payment_id']),
'external_uri' => $this->stringFromValue((string) $object['external_uri']),
'sepa_cc' => $this->stringFromValue($object['sepa_cc']),
'sepa_ct_op' => $this->stringFromValue($object['sepa_ct_op']),
'sepa_ct_id' => $this->stringFromValue($object['sepa_ct_id']),
'sepa_db' => $this->stringFromValue($object['sepa_db']),
'sepa_country' => $this->stringFromValue($object['sepa_country']),
'sepa_ep' => $this->stringFromValue($object['sepa_ep']),
'sepa_ci' => $this->stringFromValue($object['sepa_ci']),
'sepa_batch_id' => $this->stringFromValue($object['sepa_batch_id']),
// custom date fields. Must be Carbon objects. Presence is optional.
'interest_date' => $this->dateFromValue($object['interest_date']),
'book_date' => $this->dateFromValue($object['book_date']),
'process_date' => $this->dateFromValue($object['process_date']),
'due_date' => $this->dateFromValue($object['due_date']),
'payment_date' => $this->dateFromValue($object['payment_date']),
'invoice_date' => $this->dateFromValue($object['invoice_date']),
];
}
return $return;
}
/**
* The rules that the incoming request must be matched against.
*
@@ -175,6 +262,10 @@ class TransactionStoreRequest extends FormRequest
{
$validator->after(
function (Validator $validator) {
// must be valid array.
$this->validateTransactionArray($validator);
// must submit at least one transaction.
$this->validateOneTransaction($validator);
@@ -199,104 +290,4 @@ class TransactionStoreRequest extends FormRequest
}
);
}
/**
* Get transaction data.
*
* @return array
*/
private function getTransactionData(): array
{
$return = [];
/**
* @var int $index
* @var array $transaction
*/
foreach ($this->get('transactions') as $index => $transaction) {
$object = new NullArrayObject($transaction);
$return[] = [
'type' => $this->stringFromValue($object['type']),
'date' => $this->dateFromValue($object['date']),
'order' => $this->integerFromValue((string) $object['order']),
'currency_id' => $this->integerFromValue((string) $object['currency_id']),
'currency_code' => $this->stringFromValue($object['currency_code']),
// foreign currency info:
'foreign_currency_id' => $this->integerFromValue((string) $object['foreign_currency_id']),
'foreign_currency_code' => $this->stringFromValue((string) $object['foreign_currency_code']),
// amount and foreign amount. Cannot be 0.
'amount' => $this->stringFromValue((string) $object['amount']),
'foreign_amount' => $this->stringFromValue((string) $object['foreign_amount']),
// description.
'description' => $this->stringFromValue($object['description']),
// source of transaction. If everything is null, assume cash account.
'source_id' => $this->integerFromValue((string) $object['source_id']),
'source_name' => $this->stringFromValue((string) $object['source_name']),
'source_iban' => $this->stringFromValue((string) $object['source_iban']),
'source_number' => $this->stringFromValue((string) $object['source_number']),
'source_bic' => $this->stringFromValue((string) $object['source_bic']),
// destination of transaction. If everything is null, assume cash account.
'destination_id' => $this->integerFromValue((string) $object['destination_id']),
'destination_name' => $this->stringFromValue((string) $object['destination_name']),
'destination_iban' => $this->stringFromValue((string) $object['destination_iban']),
'destination_number' => $this->stringFromValue((string) $object['destination_number']),
'destination_bic' => $this->stringFromValue((string) $object['destination_bic']),
// budget info
'budget_id' => $this->integerFromValue((string) $object['budget_id']),
'budget_name' => $this->stringFromValue((string) $object['budget_name']),
// category info
'category_id' => $this->integerFromValue((string) $object['category_id']),
'category_name' => $this->stringFromValue((string) $object['category_name']),
// journal bill reference. Optional. Will only work for withdrawals
'bill_id' => $this->integerFromValue((string) $object['bill_id']),
'bill_name' => $this->stringFromValue((string) $object['bill_name']),
// piggy bank reference. Optional. Will only work for transfers
'piggy_bank_id' => $this->integerFromValue((string) $object['piggy_bank_id']),
'piggy_bank_name' => $this->stringFromValue((string) $object['piggy_bank_name']),
// some other interesting properties
'reconciled' => $this->convertBoolean((string) $object['reconciled']),
'notes' => $this->nlStringFromValue((string) $object['notes']),
'tags' => $this->arrayFromValue($object['tags']),
// all custom fields:
'internal_reference' => $this->stringFromValue((string) $object['internal_reference']),
'external_id' => $this->stringFromValue((string) $object['external_id']),
'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')),
'recurrence_id' => $this->integerFromValue($object['recurrence_id']),
'bunq_payment_id' => $this->stringFromValue((string) $object['bunq_payment_id']),
'external_uri' => $this->stringFromValue((string) $object['external_uri']),
'sepa_cc' => $this->stringFromValue($object['sepa_cc']),
'sepa_ct_op' => $this->stringFromValue($object['sepa_ct_op']),
'sepa_ct_id' => $this->stringFromValue($object['sepa_ct_id']),
'sepa_db' => $this->stringFromValue($object['sepa_db']),
'sepa_country' => $this->stringFromValue($object['sepa_country']),
'sepa_ep' => $this->stringFromValue($object['sepa_ep']),
'sepa_ci' => $this->stringFromValue($object['sepa_ci']),
'sepa_batch_id' => $this->stringFromValue($object['sepa_batch_id']),
// custom date fields. Must be Carbon objects. Presence is optional.
'interest_date' => $this->dateFromValue($object['interest_date']),
'book_date' => $this->dateFromValue($object['book_date']),
'process_date' => $this->dateFromValue($object['process_date']),
'due_date' => $this->dateFromValue($object['due_date']),
'payment_date' => $this->dateFromValue($object['payment_date']),
'invoice_date' => $this->dateFromValue($object['invoice_date']),
];
}
return $return;
}
}

View File

@@ -28,6 +28,7 @@ use FireflyIII\Models\TransactionGroup;
use FireflyIII\Rules\BelongsUser;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Rules\IsDateOrTime;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use FireflyIII\Validation\GroupValidation;
use FireflyIII\Validation\TransactionValidation;
@@ -40,37 +41,17 @@ use Log;
*/
class TransactionUpdateRequest extends FormRequest
{
use TransactionValidation, GroupValidation, ConvertsDataTypes;
use TransactionValidation, GroupValidation, ConvertsDataTypes, ChecksLogin;
private array $arrayFields;
private array $booleanFields;
private array $dateFields;
private array $integerFields;
private array $stringFields;
private array $textareaFields;
/** @var array Array values. */
private $arrayFields;
/** @var array Boolean values. */
private $booleanFields;
/** @var array Fields that contain date values. */
private $dateFields;
/** @var array Fields that contain integer values. */
private $integerFields;
/** @var array Fields that contain string values. */
private $stringFields;
/** @var array Fields that contain text (with newlines) */
private $textareaFields;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/**
* Get all data. Is pretty complex because of all the ??-statements.
@@ -157,6 +138,139 @@ class TransactionUpdateRequest extends FormRequest
return $data;
}
/**
* Get transaction data.
*
* @return array
*/
private function getTransactionData(): array
{
Log::debug('Now in getTransactionData()');
$return = [];
/**
* @var int $index
* @var array $transaction
*/
foreach ($this->get('transactions') as $transaction) {
// default response is to update nothing in the transaction:
$current = [];
$current = $this->getIntegerData($current, $transaction);
$current = $this->getStringData($current, $transaction);
$current = $this->getNlStringData($current, $transaction);
$current = $this->getDateData($current, $transaction);
$current = $this->getBooleanData($current, $transaction);
$current = $this->getArrayData($current, $transaction);
$return[] = $current;
}
return $return;
}
/**
* For each field, add it to the array if a reference is present in the request:
*
* @param array $current
*
* @return array
*/
private function getIntegerData(array $current, array $transaction): array
{
foreach ($this->integerFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->integerFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getStringData(array $current, array $transaction): array
{
foreach ($this->stringFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->stringFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getNlStringData(array $current, array $transaction): array
{
foreach ($this->textareaFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->nlStringFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getDateData(array $current, array $transaction): array
{
foreach ($this->dateFields as $fieldName) {
Log::debug(sprintf('Now at date field %s', $fieldName));
if (array_key_exists($fieldName, $transaction)) {
Log::debug(sprintf('New value: "%s"', (string) $transaction[$fieldName]));
$current[$fieldName] = $this->dateFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getBooleanData(array $current, array $transaction): array
{
foreach ($this->booleanFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->convertBoolean((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getArrayData(array $current, array $transaction): array
{
foreach ($this->arrayFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->arrayFromValue($transaction[$fieldName]);
}
}
return $current;
}
/**
* The rules that the incoming request must be matched against.
*
@@ -177,12 +291,12 @@ class TransactionUpdateRequest extends FormRequest
// currency info
'transactions.*.currency_id' => 'numeric|exists:transaction_currencies,id',
'transactions.*.currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
'transactions.*.foreign_currency_id' => 'numeric|exists:transaction_currencies,id',
'transactions.*.foreign_currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
'transactions.*.foreign_currency_id' => 'nullable|numeric|exists:transaction_currencies,id',
'transactions.*.foreign_currency_code' => 'nullable|min:3|max:3|exists:transaction_currencies,code',
// amount
'transactions.*.amount' => 'numeric|gt:0|max:100000000000',
'transactions.*.foreign_amount' => 'numeric|gte:0',
'transactions.*.foreign_amount' => 'nullable|numeric|gte:0',
// description
'transactions.*.description' => 'nullable|between:1,1000',
@@ -260,160 +374,11 @@ class TransactionUpdateRequest extends FormRequest
// validate source/destination is equal, depending on the transaction journal type.
$this->validateEqualAccountsForUpdate($validator, $transactionGroup);
// If type is set, source + destination info is mandatory.
// Not going to do this. Not sure where the demand came from.
// validate that the currency fits the source and/or destination account.
// validate all account info
$this->validateAccountInformationUpdate($validator);
// The currency info must match the accounts involved.
// Instead will ignore currency info as much as possible.
// TODO if the transaction_journal_id is empty, some fields are mandatory, like the amount!
// all journals must have a description
// // validate foreign currency info
//
//
// // make sure all splits have valid source + dest info
// the group must have a description if > 1 journal.
}
);
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getArrayData(array $current, array $transaction): array
{
foreach ($this->arrayFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->arrayFromValue($transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getBooleanData(array $current, array $transaction): array
{
foreach ($this->booleanFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->convertBoolean((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getDateData(array $current, array $transaction): array
{
foreach ($this->dateFields as $fieldName) {
Log::debug(sprintf('Now at date field %s', $fieldName));
if (array_key_exists($fieldName, $transaction)) {
Log::debug(sprintf('New value: "%s"', (string) $transaction[$fieldName]));
$current[$fieldName] = $this->dateFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* For each field, add it to the array if a reference is present in the request:
*
* @param array $current
*
* @return array
*/
private function getIntegerData(array $current, array $transaction): array
{
foreach ($this->integerFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->integerFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getNlStringData(array $current, array $transaction): array
{
foreach ($this->textareaFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->nlStringFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* @param array $current
* @param array $transaction
*
* @return array
*/
private function getStringData(array $current, array $transaction): array
{
foreach ($this->stringFields as $fieldName) {
if (array_key_exists($fieldName, $transaction)) {
$current[$fieldName] = $this->stringFromValue((string) $transaction[$fieldName]);
}
}
return $current;
}
/**
* Get transaction data.
*
* @return array
*/
private function getTransactionData(): array
{
Log::debug('Now in getTransactionData()');
$return = [];
/**
* @var int $index
* @var array $transaction
*/
foreach ($this->get('transactions') as $transaction) {
// default response is to update nothing in the transaction:
$current = [];
$current = $this->getIntegerData($current, $transaction);
$current = $this->getStringData($current, $transaction);
$current = $this->getNlStringData($current, $transaction);
$current = $this->getDateData($current, $transaction);
$current = $this->getBooleanData($current, $transaction);
$current = $this->getArrayData($current, $transaction);
$return[] = $current;
}
return $return;
}
}

View File

@@ -25,6 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
@@ -34,9 +35,10 @@ use Illuminate\Foundation\Http\FormRequest;
*/
class UserStoreRequest extends FormRequest
{
use ConvertsDataTypes;
use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
* Logged in + owner
*
* @return bool
*/

Some files were not shown because too many files have changed in this diff Show More