mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-20 11:19:16 +00:00
Compare commits
547 Commits
5.0.0-beta
...
5.2.5
Author | SHA1 | Date | |
---|---|---|---|
|
7f8ed7abb6 | ||
|
c593936b32 | ||
|
c54204ede9 | ||
|
d9132bbee3 | ||
|
c1be98762e | ||
|
c2733e2a8f | ||
|
722cf9b4fe | ||
|
01e31e73e0 | ||
|
dba7d05296 | ||
|
a8709a4a45 | ||
|
49b1435cba | ||
|
6a25b41952 | ||
|
c561f99de6 | ||
|
9d9053d828 | ||
|
c3c9a2f3c0 | ||
|
28465142e9 | ||
|
5473a618c9 | ||
|
ac1a8d8053 | ||
|
15ae9203b6 | ||
|
9dfc2ae20b | ||
|
230de7cbdd | ||
|
feaa003a52 | ||
|
295d01dc16 | ||
|
cbf1fde45e | ||
|
6cc47287d3 | ||
|
4bbe728376 | ||
|
427a90ec85 | ||
|
55ddb26dac | ||
|
891777f079 | ||
|
1655286b67 | ||
|
dd81636bf2 | ||
|
56a43a707d | ||
|
c2f92c6e45 | ||
|
61bd2dc840 | ||
|
f6a675f2e2 | ||
|
85b43055a7 | ||
|
e63f7bcc70 | ||
|
384dd37430 | ||
|
c6b336171c | ||
|
d2f4399a1a | ||
|
02d1bc093c | ||
|
420e493987 | ||
|
0a15479bff | ||
|
a9b76a3679 | ||
|
d1a3cd9044 | ||
|
81735d59f8 | ||
|
1d8da7f9f0 | ||
|
c5f0684030 | ||
|
25867adcb9 | ||
|
d55694cd68 | ||
|
05f069d61e | ||
|
5f6e7ad138 | ||
|
61bc38921e | ||
|
94c660545d | ||
|
4d3907948d | ||
|
e6442dd8af | ||
|
7905e0bd70 | ||
|
f4b1da352d | ||
|
0d33348941 | ||
|
c7c875e95f | ||
|
19d24b3e2a | ||
|
8fed6b6657 | ||
|
b5eafa1910 | ||
|
c15501937f | ||
|
4c743bd5b0 | ||
|
44289cbd95 | ||
|
b2f1642cfe | ||
|
341ef0220c | ||
|
9df88115bc | ||
|
c7273edb5e | ||
|
c398aa2b69 | ||
|
aa786eaaf3 | ||
|
e58a5e12d6 | ||
|
12b3575c5c | ||
|
3ca186dc8f | ||
|
1535f596f6 | ||
|
2cc326caa1 | ||
|
43436ae942 | ||
|
fbfd8475de | ||
|
405752f353 | ||
|
2af98b259a | ||
|
015242a666 | ||
|
54933fda2e | ||
|
852d057a47 | ||
|
1778f0b4f3 | ||
|
6daf083b3f | ||
|
4a7d9b130a | ||
|
4163efba55 | ||
|
db5847b49b | ||
|
6829003f5e | ||
|
047927718e | ||
|
91deb22a3f | ||
|
1629ca0739 | ||
|
8b87204f10 | ||
|
f920d90e3d | ||
|
1cb91282af | ||
|
a6ce294131 | ||
|
34ceb69776 | ||
|
eed68b5d95 | ||
|
79374c11ee | ||
|
404f9df6d3 | ||
|
4b716e35b9 | ||
|
166fc7a3e2 | ||
|
06afbc7a0a | ||
|
49a98de63a | ||
|
5b572c0da2 | ||
|
59014b1a87 | ||
|
4aec1f06e0 | ||
|
136af9625a | ||
|
edac26f757 | ||
|
ac54dd05bf | ||
|
7948058364 | ||
|
f13a6f7bf9 | ||
|
e1a5d143c5 | ||
|
f98011cd0d | ||
|
e7c10dec5c | ||
|
ae2b28fdee | ||
|
8d3fc18ca6 | ||
|
61521cf478 | ||
|
06c5e4df2c | ||
|
9e4b7f8bb4 | ||
|
144bc29eb3 | ||
|
2c0d8b9cb3 | ||
|
511b1258ba | ||
|
8cfe0af502 | ||
|
54e3c7d729 | ||
|
628b493128 | ||
|
8c552b8fa8 | ||
|
c864d904b0 | ||
|
ecb61676ab | ||
|
ee5a4caaab | ||
|
84bdd47109 | ||
|
5445752588 | ||
|
bcfbdcf3f0 | ||
|
7e6cd77203 | ||
|
5e3d00ecde | ||
|
4dea3a5f55 | ||
|
7303d8b899 | ||
|
fa0caa6518 | ||
|
26be90eff1 | ||
|
db3c9fbd28 | ||
|
87b62e2e72 | ||
|
1e6224f041 | ||
|
d6797b8428 | ||
|
76c89a8efa | ||
|
1797880488 | ||
|
cdebde5a2b | ||
|
5ee1f322d0 | ||
|
87273e232a | ||
|
53b77e6bf9 | ||
|
b8696bf8b5 | ||
|
8436a86536 | ||
|
c598151c68 | ||
|
53938f3c12 | ||
|
0813464fe0 | ||
|
4436c9939e | ||
|
5e323b958f | ||
|
367f225f38 | ||
|
a97d7058ff | ||
|
9d7fb0efe1 | ||
|
1e9596bba0 | ||
|
c6d17e9bd7 | ||
|
f76585dc9b | ||
|
cf4f76f211 | ||
|
790e29f15e | ||
|
2107406d8b | ||
|
b91a21a081 | ||
|
170e35aecc | ||
|
5701597e20 | ||
|
d16389748f | ||
|
ee844e970f | ||
|
62757812ff | ||
|
c15b72b6b0 | ||
|
11e3834235 | ||
|
affc198b03 | ||
|
d5b315e3c8 | ||
|
eb31ff4ebb | ||
|
9ab36d4598 | ||
|
bf06f8eac3 | ||
|
fa9befba11 | ||
|
3b0c061ec7 | ||
|
d021be6a25 | ||
|
69ee691497 | ||
|
5a7152ceec | ||
|
7b216543fa | ||
|
cd3f3fd781 | ||
|
4b0e46af2b | ||
|
470ab6340c | ||
|
9e54ebe6a9 | ||
|
7eb2451e3d | ||
|
6dba44ba71 | ||
|
64683647bd | ||
|
1f919b6d0e | ||
|
417a0d0f83 | ||
|
9b53576fc2 | ||
|
2a46756838 | ||
|
cdf055065f | ||
|
2cee008e4a | ||
|
d889e39aad | ||
|
72b9ecf07e | ||
|
14f4351920 | ||
|
12e81364a0 | ||
|
d489244c00 | ||
|
aceaf5f891 | ||
|
6129b9d25c | ||
|
75afe35e98 | ||
|
3246b7eb9f | ||
|
c412ffc195 | ||
|
7c3b5fe714 | ||
|
ae967c027b | ||
|
3e74fce885 | ||
|
2c7891bfb2 | ||
|
712ba00c9e | ||
|
74683b18f2 | ||
|
d0d129d965 | ||
|
87d459c5ff | ||
|
5b591ff744 | ||
|
63f00cbb7b | ||
|
c90b26c181 | ||
|
c136c60eae | ||
|
ba4c1d95a7 | ||
|
9a25d6a741 | ||
|
91c067ac9f | ||
|
24129ab69c | ||
|
2b6c3fd743 | ||
|
bd2f064eeb | ||
|
b0c9fc0792 | ||
|
e02e747f1b | ||
|
64462812fc | ||
|
46382b0d21 | ||
|
a7fffa5868 | ||
|
4334928fbd | ||
|
a478d1b544 | ||
|
08b69dfbf6 | ||
|
b631adbbf2 | ||
|
fbd88d03c5 | ||
|
4982f6f919 | ||
|
6a6bf102b6 | ||
|
524f85b9c1 | ||
|
328c960950 | ||
|
208bece7ea | ||
|
16f918a294 | ||
|
9d90beb790 | ||
|
d7e953d38c | ||
|
6967bb003e | ||
|
f63e51fea2 | ||
|
33c73701d8 | ||
|
50b710b4f6 | ||
|
d1325ffbd8 | ||
|
bfc6a70c9f | ||
|
a00f46faa9 | ||
|
c475f05652 | ||
|
d42b9ee017 | ||
|
cccaae49a5 | ||
|
1dd3018cb2 | ||
|
7ea32046af | ||
|
9bb2f1cfd3 | ||
|
fdffed636f | ||
|
bde0732135 | ||
|
d1d11ae717 | ||
|
309633069c | ||
|
2ece754927 | ||
|
6f98fc0dff | ||
|
cd65971f5e | ||
|
81d7b7b6a1 | ||
|
92ba56ae2b | ||
|
e1bcfb9ac9 | ||
|
b398924706 | ||
|
d6f46e23c5 | ||
|
8b4066a981 | ||
|
f8a695d7e1 | ||
|
630b24716d | ||
|
be41049e72 | ||
|
b726e7d106 | ||
|
1058bcd31d | ||
|
8724ba05ca | ||
|
5145707b94 | ||
|
3746cb8c71 | ||
|
624f2d0bfd | ||
|
1c397ad0ad | ||
|
a2c0f0666f | ||
|
72a4e86e2f | ||
|
5e8d94d16a | ||
|
d92b741088 | ||
|
2a4107940f | ||
|
16d5282929 | ||
|
f6ecb143fe | ||
|
f375934b41 | ||
|
9f8bf6d495 | ||
|
9e9b55da8e | ||
|
c1654f1d04 | ||
|
c526c4ae1a | ||
|
dcf1609c61 | ||
|
dd84c7f966 | ||
|
bccde86c0c | ||
|
2f17c45b3f | ||
|
b6bab003cd | ||
|
27d7eb4832 | ||
|
774f7d88c2 | ||
|
086e4d5880 | ||
|
50f4bf568b | ||
|
c218c70b1f | ||
|
a939a5ba30 | ||
|
25be550e6d | ||
|
9331f8985a | ||
|
41e6c8f73e | ||
|
a29f8d5849 | ||
|
9817c0807a | ||
|
4818baee39 | ||
|
379916ee08 | ||
|
60dbd51259 | ||
|
0927b0c8ae | ||
|
40cc510057 | ||
|
d580bf8f43 | ||
|
4434ea40ee | ||
|
2ba6ffccbc | ||
|
ec335ae88c | ||
|
542c64154c | ||
|
e4fa437f78 | ||
|
61f3f995ad | ||
|
8182cf1efa | ||
|
10d578503c | ||
|
75ee331f36 | ||
|
a32c484fd5 | ||
|
62d74e05f2 | ||
|
23ec5cbaa7 | ||
|
21fcb6f853 | ||
|
9b0a890531 | ||
|
af503597e6 | ||
|
e0c99fa80c | ||
|
a486d65893 | ||
|
08a6e22556 | ||
|
2d5c4c8101 | ||
|
4b7460c1cf | ||
|
8c8a2a1596 | ||
|
ee7731b1a1 | ||
|
36e4462957 | ||
|
e71a4a5595 | ||
|
287aa76d8d | ||
|
a9738fc2a9 | ||
|
bc485363ca | ||
|
f53e9d91c0 | ||
|
99fd90ee49 | ||
|
fb77210f2c | ||
|
6c163ebef3 | ||
|
1d8f34275a | ||
|
1fcc2f6b39 | ||
|
2eaa31163c | ||
|
3de4441bcd | ||
|
cbc43b9dc1 | ||
|
d018c57b17 | ||
|
a5d0658241 | ||
|
ce29beaf55 | ||
|
b11bcc1fbe | ||
|
ab0e77a2e8 | ||
|
80f0637c77 | ||
|
a280319a0b | ||
|
eb3a55d6e0 | ||
|
64a6661ea4 | ||
|
7f46cf805c | ||
|
d0d5dea5ce | ||
|
018ca29184 | ||
|
4b4f78b9eb | ||
|
f084e742c9 | ||
|
ab4de3fdd6 | ||
|
9f7d5b8e88 | ||
|
4958f6e4a6 | ||
|
b3e3a17add | ||
|
0b25fdd043 | ||
|
cfc48ccc26 | ||
|
3810085ea6 | ||
|
0088886915 | ||
|
c427404e5d | ||
|
e8bf53ad11 | ||
|
5f7f4328c1 | ||
|
1f1829e3b5 | ||
|
8079fab472 | ||
|
19a428bf2d | ||
|
39cdbc461e | ||
|
ccc80dd437 | ||
|
f1539c4cba | ||
|
796188603b | ||
|
b7210e296f | ||
|
6df03e2537 | ||
|
7843e781da | ||
|
bf2d1c223b | ||
|
400c0ccaca | ||
|
db05839b87 | ||
|
50d4774907 | ||
|
5361fbb76f | ||
|
a389cbe521 | ||
|
08b85cfa1a | ||
|
7e354b9c30 | ||
|
4cdc2ade01 | ||
|
dee6c0e1e4 | ||
|
72491250b7 | ||
|
88e2d8cd55 | ||
|
fd04a38359 | ||
|
529cb3d387 | ||
|
8d806e6a1d | ||
|
2a38c9b4ef | ||
|
2e3e18d836 | ||
|
156c51798d | ||
|
8fb72fe697 | ||
|
ccb1f56573 | ||
|
c8d2053500 | ||
|
4b5b47a078 | ||
|
930695b188 | ||
|
d51e5798ef | ||
|
edaa2c168a | ||
|
4dc24939ba | ||
|
4cd642b8da | ||
|
b77b3f0c21 | ||
|
0acc2c5727 | ||
|
5aae8b7743 | ||
|
e81ce3317c | ||
|
cebc0d7568 | ||
|
d5cfc12bf3 | ||
|
ac931698d3 | ||
|
0c13ac2e93 | ||
|
685107e950 | ||
|
ae57be74e0 | ||
|
58c0a69737 | ||
|
ab73322c58 | ||
|
c2e7e00cdd | ||
|
554a702c0a | ||
|
2a3775968c | ||
|
3cb01a9b50 | ||
|
e54a011e0c | ||
|
fc81833b50 | ||
|
067246be79 | ||
|
11997f0f97 | ||
|
635ef0de77 | ||
|
7f3522339c | ||
|
f99f166623 | ||
|
3864855967 | ||
|
0266c364e0 | ||
|
1b411815b7 | ||
|
fb574cb173 | ||
|
cf4adae604 | ||
|
3f6719dc70 | ||
|
7cdfbc48a9 | ||
|
28b7bd4d71 | ||
|
d056f0d221 | ||
|
3771cc3b75 | ||
|
c7f25c5486 | ||
|
b697b71e59 | ||
|
a6fab50c20 | ||
|
43232c208f | ||
|
e9ab11051f | ||
|
a4874e10b8 | ||
|
1c502667b1 | ||
|
b3cdc08a1b | ||
|
60ca1fc4fd | ||
|
b627fcc754 | ||
|
d28bf1f8a4 | ||
|
091cd05527 | ||
|
08b9cfa221 | ||
|
42f585f630 | ||
|
67fb906855 | ||
|
6655d2e3d0 | ||
|
3711cbd9d7 | ||
|
17c8be37f5 | ||
|
90b3bce361 | ||
|
51aca7f415 | ||
|
a381dc1cfe | ||
|
bf07859718 | ||
|
996fc4dc7c | ||
|
f598c39c6e | ||
|
f4fd9e5a15 | ||
|
3adc43938e | ||
|
3f7891f4e8 | ||
|
68d53a2066 | ||
|
6fa4666336 | ||
|
2b9467cd69 | ||
|
a06b23deba | ||
|
9a83e48570 | ||
|
16a6ee577d | ||
|
69b30f4220 | ||
|
797c539c20 | ||
|
f3f53cc38a | ||
|
003c0d1191 | ||
|
f14d3e24ea | ||
|
03be992062 | ||
|
c86faaa165 | ||
|
68c71cb2f9 | ||
|
ad2994a47c | ||
|
1e4b4c66fc | ||
|
28c9069441 | ||
|
200e0054ba | ||
|
ad3280c7ef | ||
|
04824c9c8c | ||
|
a8df0c292c | ||
|
fcb57a911b | ||
|
cd756ffee5 | ||
|
db6533b3de | ||
|
c78455ce6c | ||
|
6a7c7e1e26 | ||
|
882d78afd3 | ||
|
00ed8a17f4 | ||
|
fc7c2c298e | ||
|
7b204c0c2d | ||
|
afcd6cffda | ||
|
4f86aaf198 | ||
|
e055f1720e | ||
|
fd24fe35a6 | ||
|
d27b3fafe9 | ||
|
5a9a35dab8 | ||
|
a4c0ee7350 | ||
|
c8e4bc00c5 | ||
|
47e1d9371c | ||
|
9ae1f460b2 | ||
|
d49efca791 | ||
|
154ac8b73c | ||
|
9b420c461f | ||
|
f6e5a399cf | ||
|
8bc6ca0ec0 | ||
|
63d8068ba6 | ||
|
11160adf08 | ||
|
924899f763 | ||
|
458bdc5fd4 | ||
|
1c458704d6 | ||
|
ff44dbaea0 | ||
|
3852dbeacc | ||
|
94bb3f43ed | ||
|
534f4de520 | ||
|
8c36a371be | ||
|
2416fd6773 | ||
|
77fa3af87e | ||
|
5da8b2ec9e | ||
|
c55bfc0b8c | ||
|
97dffaa8a9 | ||
|
8857e3553d | ||
|
925f63c8e1 | ||
|
987730b36b | ||
|
4752dea460 | ||
|
d57f764fb8 | ||
|
2d0a57e7e4 | ||
|
f78729fc8a | ||
|
7362a36a98 | ||
|
cf067d0bd2 | ||
|
2efe5b07e2 | ||
|
42de629646 | ||
|
220230e981 | ||
|
7f002eb6a9 | ||
|
8c6f8460a2 | ||
|
7f0ac79c5c |
@@ -110,7 +110,8 @@ CER_PROVIDER=fixer
|
|||||||
FIXER_API_KEY=
|
FIXER_API_KEY=
|
||||||
|
|
||||||
# If you wish to track your own behavior over Firefly III, set a valid analytics tracker ID here.
|
# If you wish to track your own behavior over Firefly III, set a valid analytics tracker ID here.
|
||||||
ANALYTICS_ID=
|
TRACKER_SITE_ID=
|
||||||
|
TRACKER_URL=
|
||||||
|
|
||||||
# Most parts of the database are encrypted by default, but you can turn this off if you want to.
|
# Most parts of the database are encrypted by default, but you can turn this off if you want to.
|
||||||
# This makes it easier to migrate your database. Not that some fields will never be decrypted.
|
# This makes it easier to migrate your database. Not that some fields will never be decrypted.
|
||||||
|
@@ -13,3 +13,7 @@ ru_RU
|
|||||||
hu_HU
|
hu_HU
|
||||||
el_GR
|
el_GR
|
||||||
sv_SE
|
sv_SE
|
||||||
|
zh-hans_CN
|
||||||
|
zh-hant_CN
|
||||||
|
fi_FI
|
||||||
|
vi_VN
|
||||||
|
108
.env.example
108
.env.example
@@ -5,34 +5,48 @@ APP_ENV=local
|
|||||||
# Set to true if you want to see debug information in error screens.
|
# Set to true if you want to see debug information in error screens.
|
||||||
APP_DEBUG=false
|
APP_DEBUG=false
|
||||||
|
|
||||||
# This should be your email address
|
# This should be your email address.
|
||||||
|
# If you use Docker or similar, you can set this variable from a file by using SITE_OWNER_FILE
|
||||||
SITE_OWNER=mail@example.com
|
SITE_OWNER=mail@example.com
|
||||||
|
|
||||||
# The encryption key for your sessions. Keep this very secure.
|
# The encryption key for your sessions. Keep this very secure.
|
||||||
# If you generate a new one existing data must be considered LOST.
|
# If you generate a new one existing data must be considered LOST.
|
||||||
# Change it to a string of exactly 32 chars or use command `php artisan key:generate` to generate it
|
# 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
|
APP_KEY=SomeRandomStringOf32CharsExactly
|
||||||
|
|
||||||
|
#
|
||||||
|
# Firefly III will launch using this language (for new users and unauthenticated visitors)
|
||||||
|
# For a list of available languages: https://github.com/firefly-iii/firefly-iii/tree/master/resources/lang
|
||||||
|
#
|
||||||
|
# If text is still in English, remember that not everything may have been translated.
|
||||||
|
DEFAULT_LANGUAGE=en_US
|
||||||
|
|
||||||
|
# The locale defines how numbers are formatted.
|
||||||
|
# by default this value is the same as whatever the language is.
|
||||||
|
DEFAULT_LOCALE=equal
|
||||||
|
|
||||||
# Change this value to your preferred time zone.
|
# Change this value to your preferred time zone.
|
||||||
# Example: Europe/Amsterdam
|
# Example: Europe/Amsterdam
|
||||||
|
# For a list of supported time zones, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||||
TZ=Europe/Amsterdam
|
TZ=Europe/Amsterdam
|
||||||
|
|
||||||
# This variable must match your installation's external address but keep in mind that
|
|
||||||
# it's only used on the command line as a fallback value.
|
|
||||||
APP_URL=http://localhost
|
|
||||||
|
|
||||||
# TRUSTED_PROXIES is a useful variable when using Docker and/or a reverse proxy.
|
# TRUSTED_PROXIES is a useful variable when using Docker and/or a reverse proxy.
|
||||||
# Set it to ** and reverse proxies work just fine.
|
# Set it to ** and reverse proxies work just fine.
|
||||||
TRUSTED_PROXIES=
|
TRUSTED_PROXIES=
|
||||||
|
|
||||||
# The log channel defines where your log entries go to.
|
# The log channel defines where your log entries go to.
|
||||||
# - Docker + versions <= 4.8.1.8 and before: use "stdout"
|
|
||||||
# - Docker + versions > 4.8.1.8: use "docker_out"
|
|
||||||
# - For everything else, use 'daily'
|
|
||||||
|
|
||||||
# Several other options exist. You can use 'single' for one big fat error log (not recommended).
|
# Several other options exist. You can use 'single' for one big fat error log (not recommended).
|
||||||
# Also available are 'syslog', 'errorlog' and 'stdout' which will log to the system itself.
|
# Also available are 'syslog', 'errorlog' and 'stdout' which will log to the system itself.
|
||||||
LOG_CHANNEL=stdout
|
# A rotating log option is 'daily', creates 5 files that (surprise) rotate.
|
||||||
|
# Default setting 'stack' will log to 'daily' and to 'stdout' at the same time.
|
||||||
|
|
||||||
|
# - Docker + versions <= 4.8.1.8 and before: use "stdout"
|
||||||
|
# - Docker + versions > 4.8.1.8 : use "docker_out"
|
||||||
|
# - Docker + versions >= 5.1.1 : use "stack"
|
||||||
|
# - For everything else (als not Docker) : use 'stack'
|
||||||
|
|
||||||
|
LOG_CHANNEL=stack
|
||||||
|
|
||||||
# Log level. You can set this from least severe to most severe:
|
# Log level. You can set this from least severe to most severe:
|
||||||
# debug, info, notice, warning, error, critical, alert, emergency
|
# debug, info, notice, warning, error, critical, alert, emergency
|
||||||
@@ -42,14 +56,17 @@ APP_LOG_LEVEL=notice
|
|||||||
|
|
||||||
# Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III
|
# 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
|
# 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
|
||||||
|
# Use "mysql" for MySQL and MariaDB. Use "sqlite" for SQLite.
|
||||||
DB_CONNECTION=pgsql
|
DB_CONNECTION=pgsql
|
||||||
DB_HOST=firefly_iii_db
|
DB_HOST=fireflyiiidb
|
||||||
DB_PORT=5432
|
DB_PORT=5432
|
||||||
DB_DATABASE=firefly
|
DB_DATABASE=firefly
|
||||||
DB_USERNAME=firefly
|
DB_USERNAME=firefly
|
||||||
DB_PASSWORD=secret_firefly_password
|
DB_PASSWORD=secret_firefly_password
|
||||||
|
|
||||||
# PostgreSQL supports SSL. You can configure it here.
|
# PostgreSQL supports SSL. You can configure it here.
|
||||||
|
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||||
PGSQL_SSL_MODE=prefer
|
PGSQL_SSL_MODE=prefer
|
||||||
PGSQL_SSL_ROOT_CERT=null
|
PGSQL_SSL_ROOT_CERT=null
|
||||||
PGSQL_SSL_CERT=null
|
PGSQL_SSL_CERT=null
|
||||||
@@ -61,19 +78,25 @@ CACHE_DRIVER=file
|
|||||||
SESSION_DRIVER=file
|
SESSION_DRIVER=file
|
||||||
|
|
||||||
# If you set either of these to 'redis', you might want to update these settings too
|
# If you set either of these to 'redis', you might want to update these settings too
|
||||||
|
# If you use Docker or similar, you can set REDIS_HOST_FILE, REDIS_PASSWORD_FILE or
|
||||||
|
# REDIS_PORT_FILE to set the value from a file instead of from an environment variable
|
||||||
REDIS_HOST=127.0.0.1
|
REDIS_HOST=127.0.0.1
|
||||||
REDIS_PASSWORD=null
|
REDIS_PASSWORD=null
|
||||||
REDIS_PORT=6379
|
REDIS_PORT=6379
|
||||||
REDIS_DB="0" # always use quotes
|
# always use quotes and make sure redis db "0" and "1" exists. Otherwise change accordingly.
|
||||||
|
REDIS_DB="0"
|
||||||
REDIS_CACHE_DB="1"
|
REDIS_CACHE_DB="1"
|
||||||
|
|
||||||
# Cookie settings. Should not be necessary to change these.
|
# Cookie settings. Should not be necessary to change these.
|
||||||
|
# If you use Docker or similar, you can set COOKIE_DOMAIN_FILE to set
|
||||||
|
# the value from a file instead of from an environment variable
|
||||||
COOKIE_PATH="/"
|
COOKIE_PATH="/"
|
||||||
COOKIE_DOMAIN=
|
COOKIE_DOMAIN=
|
||||||
COOKIE_SECURE=false
|
COOKIE_SECURE=false
|
||||||
|
|
||||||
# If you want Firefly III to mail you, update these settings
|
# If you want Firefly III to mail you, update these settings
|
||||||
# For instructions, see: https://docs.firefly-iii.org/advanced-installation/email
|
# For instructions, see: https://docs.firefly-iii.org/advanced-installation/email
|
||||||
|
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||||
MAIL_DRIVER=log
|
MAIL_DRIVER=log
|
||||||
MAIL_HOST=smtp.mailtrap.io
|
MAIL_HOST=smtp.mailtrap.io
|
||||||
MAIL_PORT=2525
|
MAIL_PORT=2525
|
||||||
@@ -83,13 +106,20 @@ MAIL_PASSWORD=null
|
|||||||
MAIL_ENCRYPTION=null
|
MAIL_ENCRYPTION=null
|
||||||
|
|
||||||
# Other mail drivers:
|
# Other mail drivers:
|
||||||
|
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||||
MAILGUN_DOMAIN=
|
MAILGUN_DOMAIN=
|
||||||
MAILGUN_SECRET=
|
MAILGUN_SECRET=
|
||||||
|
|
||||||
|
|
||||||
# If you are on EU region in mailgun, use api.eu.mailgun.net, otherwise use api.mailgun.net
|
# If you are on EU region in mailgun, use api.eu.mailgun.net, otherwise use api.mailgun.net
|
||||||
|
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||||
MAILGUN_ENDPOINT=api.mailgun.net
|
MAILGUN_ENDPOINT=api.mailgun.net
|
||||||
|
|
||||||
|
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE
|
||||||
MANDRILL_SECRET=
|
MANDRILL_SECRET=
|
||||||
SPARKPOST_SECRET=
|
SPARKPOST_SECRET=
|
||||||
|
|
||||||
|
|
||||||
# Firefly III can send you the following messages
|
# Firefly III can send you the following messages
|
||||||
SEND_REGISTRATION_MAIL=true
|
SEND_REGISTRATION_MAIL=true
|
||||||
SEND_ERROR_MESSAGE=true
|
SEND_ERROR_MESSAGE=true
|
||||||
@@ -98,6 +128,7 @@ SEND_ERROR_MESSAGE=true
|
|||||||
SEND_REPORT_JOURNALS=true
|
SEND_REPORT_JOURNALS=true
|
||||||
|
|
||||||
# Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places.
|
# Set a Mapbox API key here (see mapbox.com) so there might be a map available at various places.
|
||||||
|
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||||
MAPBOX_API_KEY=
|
MAPBOX_API_KEY=
|
||||||
|
|
||||||
# The map will default to this location:
|
# The map will default to this location:
|
||||||
@@ -115,23 +146,25 @@ CER_PROVIDER=ratesapi
|
|||||||
# set a Fixer IO API key here (see https://fixer.io) to enable live currency exchange rates.
|
# set a Fixer IO API key here (see https://fixer.io) to enable live currency exchange rates.
|
||||||
# Please note that this WILL ONLY WORK FOR PAID fixer.io accounts because they severely limited
|
# Please note that this WILL ONLY WORK FOR PAID fixer.io accounts because they severely limited
|
||||||
# the free API up to the point where you might as well offer nothing.
|
# the free API up to the point where you might as well offer nothing.
|
||||||
|
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||||
FIXER_API_KEY=
|
FIXER_API_KEY=
|
||||||
|
|
||||||
# If you wish to track your own behavior over Firefly III, set a valid analytics tracker ID here.
|
|
||||||
ANALYTICS_ID=
|
|
||||||
|
|
||||||
# Firefly III has two options for user authentication. "eloquent" is the default,
|
# Firefly III has two options for user authentication. "eloquent" is the default,
|
||||||
# and "ldap" for LDAP servers.
|
# and "ldap" for LDAP servers.
|
||||||
# For full instructions on these settings please visit:
|
# For full instructions on these settings please visit:
|
||||||
# https://docs.firefly-iii.org/advanced-installation/authentication
|
# https://docs.firefly-iii.org/advanced-installation/authentication
|
||||||
|
# If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||||
LOGIN_PROVIDER=eloquent
|
LOGIN_PROVIDER=eloquent
|
||||||
|
|
||||||
# LDAP connection configuration
|
# LDAP connection configuration
|
||||||
# OpenLDAP, FreeIPA or ActiveDirectory
|
# OpenLDAP, FreeIPA or ActiveDirectory
|
||||||
|
# # If you use Docker or similar, you can set this variable from a file by appending it with _FILE
|
||||||
ADLDAP_CONNECTION_SCHEME=OpenLDAP
|
ADLDAP_CONNECTION_SCHEME=OpenLDAP
|
||||||
ADLDAP_AUTO_CONNECT=true
|
ADLDAP_AUTO_CONNECT=true
|
||||||
|
|
||||||
# LDAP connection settings
|
# LDAP connection settings
|
||||||
|
# You can set the following variables from a file by appending them with _FILE:
|
||||||
|
# ADLDAP_CONTROLLERS, ADLDAP_PORT, ADLDAP_BASEDN
|
||||||
ADLDAP_CONTROLLERS=
|
ADLDAP_CONTROLLERS=
|
||||||
ADLDAP_PORT=389
|
ADLDAP_PORT=389
|
||||||
ADLDAP_TIMEOUT=5
|
ADLDAP_TIMEOUT=5
|
||||||
@@ -140,12 +173,15 @@ ADLDAP_FOLLOW_REFFERALS=false
|
|||||||
ADLDAP_USE_SSL=false
|
ADLDAP_USE_SSL=false
|
||||||
ADLDAP_USE_TLS=false
|
ADLDAP_USE_TLS=false
|
||||||
|
|
||||||
|
# You can set the following variables from a file by appending them with _FILE:
|
||||||
ADLDAP_ADMIN_USERNAME=
|
ADLDAP_ADMIN_USERNAME=
|
||||||
ADLDAP_ADMIN_PASSWORD=
|
ADLDAP_ADMIN_PASSWORD=
|
||||||
|
|
||||||
|
# You can set the following variables from a file by appending them with _FILE:
|
||||||
ADLDAP_ACCOUNT_PREFIX=
|
ADLDAP_ACCOUNT_PREFIX=
|
||||||
ADLDAP_ACCOUNT_SUFFIX=
|
ADLDAP_ACCOUNT_SUFFIX=
|
||||||
|
|
||||||
|
|
||||||
# LDAP authentication settings.
|
# LDAP authentication settings.
|
||||||
ADLDAP_PASSWORD_SYNC=false
|
ADLDAP_PASSWORD_SYNC=false
|
||||||
ADLDAP_LOGIN_FALLBACK=false
|
ADLDAP_LOGIN_FALLBACK=false
|
||||||
@@ -154,16 +190,38 @@ ADLDAP_DISCOVER_FIELD=distinguishedname
|
|||||||
ADLDAP_AUTH_FIELD=distinguishedname
|
ADLDAP_AUTH_FIELD=distinguishedname
|
||||||
|
|
||||||
# Will allow SSO if your server provides an AUTH_USER field.
|
# Will allow SSO if your server provides an AUTH_USER field.
|
||||||
|
# You can set the following variables from a file by appending them with _FILE:
|
||||||
WINDOWS_SSO_DISCOVER=samaccountname
|
WINDOWS_SSO_DISCOVER=samaccountname
|
||||||
WINDOWS_SSO_KEY=AUTH_USER
|
WINDOWS_SSO_KEY=AUTH_USER
|
||||||
|
|
||||||
# field to sync as local username.
|
# field to sync as local username.
|
||||||
|
# You can set the following variable from a file by appending it with _FILE:
|
||||||
ADLDAP_SYNC_FIELD=userprincipalname
|
ADLDAP_SYNC_FIELD=userprincipalname
|
||||||
|
|
||||||
# You can disable the X-Frame-Options header if it interfears with tools like
|
# You can disable the X-Frame-Options header if it interferes with tools like
|
||||||
# Organizr. This is at your own risk.
|
# Organizr. This is at your own risk. Applications running in frames run the risk
|
||||||
|
# of leaking information to their parent frame.
|
||||||
DISABLE_FRAME_HEADER=false
|
DISABLE_FRAME_HEADER=false
|
||||||
|
|
||||||
|
# You can disable the Content Security Policy header when you're using an ancient browser
|
||||||
|
# or any version of Microsoft Edge / Internet Explorer (which amounts to the same thing really)
|
||||||
|
# This leaves you with the risk of not being able to stop XSS bugs should they ever surface.
|
||||||
|
# This is at your own risk.
|
||||||
|
DISABLE_CSP_HEADER=false
|
||||||
|
|
||||||
|
# If you wish to track your own behavior over Firefly III, set valid analytics tracker information here.
|
||||||
|
# Nobody uses this except for me on the demo site. But hey, feel free to use this if you want to.
|
||||||
|
# Do not prepend the TRACKER_URL with http:// or https://
|
||||||
|
# The only tracker supported is Matomo.
|
||||||
|
# You can set the following variables from a file by appending them with _FILE:
|
||||||
|
TRACKER_SITE_ID=
|
||||||
|
TRACKER_URL=
|
||||||
|
|
||||||
|
#
|
||||||
|
# Firefly III could (in the future) collect telemetry on how you use Firefly III.
|
||||||
|
# In order to allow this, change the following variable to true:
|
||||||
|
SEND_TELEMETRY=false
|
||||||
|
|
||||||
# You can fine tune the start-up of a Docker container by editing these environment variables.
|
# 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.
|
# 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.
|
# However if you know what you're doing you can significantly speed up container start times.
|
||||||
@@ -191,7 +249,7 @@ DKR_RUN_REPORT=true
|
|||||||
|
|
||||||
# Generate OAuth2 keys.
|
# Generate OAuth2 keys.
|
||||||
# When disabled, Firefly III won't attempt to generate OAuth2 Passport keys. This won't be an issue, IFF (if and only if)
|
# When disabled, Firefly III won't attempt to generate OAuth2 Passport keys. This won't be an issue, IFF (if and only if)
|
||||||
# you had previously generated keys already and they're stored in your database for restauration.
|
# you had previously generated keys already and they're stored in your database for restoration.
|
||||||
DKR_RUN_PASSPORT_INSTALL=true
|
DKR_RUN_PASSPORT_INSTALL=true
|
||||||
|
|
||||||
# Leave the following configuration vars as is.
|
# Leave the following configuration vars as is.
|
||||||
@@ -212,3 +270,15 @@ IS_SANDSTORM=false
|
|||||||
IS_DOCKER=false
|
IS_DOCKER=false
|
||||||
IS_HEROKU=false
|
IS_HEROKU=false
|
||||||
BUNQ_USE_SANDBOX=false
|
BUNQ_USE_SANDBOX=false
|
||||||
|
|
||||||
|
#
|
||||||
|
# If you have trouble configuring your Firefly III installation, DON'T BOTHER setting this variable.
|
||||||
|
# It won't work. It doesn't do ANYTHING. Don't believe the lies you read online. I'm not joking.
|
||||||
|
# This configuration value WILL NOT HELP.
|
||||||
|
#
|
||||||
|
# This variable is ONLY used in some of the emails Firefly III sends around. Nowhere else.
|
||||||
|
# So when configuring anything WEB related this variable doesn't do anything. Nothing
|
||||||
|
#
|
||||||
|
# If you're stuck I understand you get desperate but look SOMEWHERE ELSE.
|
||||||
|
#
|
||||||
|
APP_URL=http://localhost
|
||||||
|
13
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
13
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@@ -16,11 +16,10 @@ I am running Firefly III version x.x.x, and my problem is:
|
|||||||
<!-- 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). -->
|
||||||
|
|
||||||
**Bonus points**
|
**Bonus points**
|
||||||
<!-- Earn bonus points by:
|
<!-- Before you submit, verify the following please: -->
|
||||||
|
|
||||||
- Post a stacktrace from your log files
|
- I searched and nobody reported this bug before
|
||||||
- Add a screenshot
|
- I have added a stack trace from my log files <!-- (see https://bit.ly/FF3-get-debug-info) -->
|
||||||
- Make a drawing
|
- I have added a screenshot.
|
||||||
- Donate money (just kidding ;)
|
- I was able to replicate it on the demo site https://demo.firefly-iii.org/
|
||||||
- Replicate the problem on the demo site https://demo.firefly-iii.org/
|
<!-- - I donated money (this is a joke ;)-->
|
||||||
-->
|
|
||||||
|
10
.github/ISSUE_TEMPLATE/Custom.md
vendored
10
.github/ISSUE_TEMPLATE/Custom.md
vendored
@@ -16,8 +16,8 @@ I am running Firefly III version x.x.x.
|
|||||||
|
|
||||||
<!-- Complete the following checklist for bonus points -->
|
<!-- Complete the following checklist for bonus points -->
|
||||||
|
|
||||||
- [ ] I have read the FAQ at https://bit.ly/FF3-FAQ
|
- I have read the FAQ at https://bit.ly/FF3-FAQ
|
||||||
- [ ] I added a screenshot
|
- I added a screenshot
|
||||||
- [ ] I added log files (see https://bit.ly/FF3-get-logs)
|
- I added log files <!-- (see https://bit.ly/FF3-get-debug-info) -->
|
||||||
- [ ] I was able to replicate the issue on the demo site.
|
- I was able to replicate the issue on the demo site.
|
||||||
<!-- - [ ] I donated money (this is a joke :wink:)-->
|
<!-- - I donated money (this is a joke :wink:)-->
|
||||||
|
2
.github/code_of_conduct.md
vendored
2
.github/code_of_conduct.md
vendored
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
|
|||||||
|
|
||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at thegrumpydictator@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at james@firefly-iii.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||||
|
|
||||||
|
2
.github/contributing.md
vendored
2
.github/contributing.md
vendored
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## Feature requests
|
## Feature requests
|
||||||
|
|
||||||
I am always interested in expanding Firefly III's many features. Just open a ticket or [drop me a line](mailto:thegrumpydictator@gmail.com).
|
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
|
## Pull requests
|
||||||
|
|
||||||
|
35
.github/lock.yml
vendored
Normal file
35
.github/lock.yml
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
|
||||||
|
|
||||||
|
# Number of days of inactivity before a closed issue or pull request is locked
|
||||||
|
daysUntilLock: 90
|
||||||
|
|
||||||
|
# Skip issues and pull requests created before a given timestamp. Timestamp must
|
||||||
|
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
|
||||||
|
skipCreatedBefore: false
|
||||||
|
|
||||||
|
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
|
||||||
|
exemptLabels: []
|
||||||
|
|
||||||
|
# Label to add before locking, such as `outdated`. Set to `false` to disable
|
||||||
|
lockLabel: false
|
||||||
|
|
||||||
|
# Comment to post before locking. Set to `false` to disable
|
||||||
|
lockComment: false
|
||||||
|
|
||||||
|
# Assign `resolved` as the reason for locking. Set to `false` to disable
|
||||||
|
setLockReason: true
|
||||||
|
|
||||||
|
# Limit to only `issues` or `pulls`
|
||||||
|
# only: issues
|
||||||
|
|
||||||
|
# Optionally, specify configuration settings just for `issues` or `pulls`
|
||||||
|
# issues:
|
||||||
|
# exemptLabels:
|
||||||
|
# - help-wanted
|
||||||
|
# lockLabel: outdated
|
||||||
|
|
||||||
|
# pulls:
|
||||||
|
# daysUntilLock: 30
|
||||||
|
|
||||||
|
# Repository to extend settings from
|
||||||
|
# _extends: repo
|
2
.github/security.md
vendored
2
.github/security.md
vendored
@@ -6,7 +6,7 @@ Only the latest version of Firefly III is supported. If you're not running the l
|
|||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
If you find something that compromises the security of Firefly III, you should [send me a message](mailto:thegrumpydictator@gmail.com) as soon as possible. These issues will be fixed immediately. You can also open an issue, but if you feel the issue is sensitive, please drop me a message instead.
|
If you find something that compromises the security of Firefly III, you should [send me a message](mailto:james@firefly-iii.org) as soon as possible. These issues will be fixed immediately. You can also open an issue, but if you feel the issue is sensitive, please drop me a message instead.
|
||||||
|
|
||||||
You can use my [GPG key](https://keybase.io/jc5) for extra security. My [GitHub commits](https://github.com/firefly-iii/firefly-iii/commits/master) are almost always signed with this key.
|
You can use my [GPG key](https://keybase.io/jc5) for extra security. My [GitHub commits](https://github.com/firefly-iii/firefly-iii/commits/master) are almost always signed with this key.
|
||||||
|
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
/node_modules
|
/node_modules
|
||||||
|
/frontend/node_modules
|
||||||
/public/hot
|
/public/hot
|
||||||
/public/storage
|
/public/storage
|
||||||
/storage/*.key
|
/storage/*.key
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* AboutController.php
|
* AboutController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* AccountController.php
|
* AccountController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -31,6 +31,7 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
|||||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
use FireflyIII\Transformers\AccountTransformer;
|
use FireflyIII\Transformers\AccountTransformer;
|
||||||
|
use FireflyIII\Transformers\AttachmentTransformer;
|
||||||
use FireflyIII\Transformers\PiggyBankTransformer;
|
use FireflyIII\Transformers\PiggyBankTransformer;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
@@ -73,6 +74,35 @@ class AccountController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Account $account
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function attachments(Account $account): JsonResponse
|
||||||
|
{
|
||||||
|
$manager = $this->getManager();
|
||||||
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
$collection = $this->repository->getAttachments($account);
|
||||||
|
|
||||||
|
$count = $collection->count();
|
||||||
|
$attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||||
|
|
||||||
|
// make paginator:
|
||||||
|
$paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page'));
|
||||||
|
$paginator->setPath(route('api.v1.accounts.attachments', [$account->id]) . $this->buildParams());
|
||||||
|
|
||||||
|
/** @var AttachmentTransformer $transformer */
|
||||||
|
$transformer = app(AttachmentTransformer::class);
|
||||||
|
$transformer->setParameters($this->parameters);
|
||||||
|
|
||||||
|
$resource = new FractalCollection($attachments, $transformer, 'attachments');
|
||||||
|
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||||
|
|
||||||
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the specified resource from storage.
|
* Remove the specified resource from storage.
|
||||||
*
|
*
|
||||||
@@ -104,7 +134,7 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$types = $this->mapAccountTypes($this->parameters->get('type'));
|
$types = $this->mapAccountTypes($this->parameters->get('type'));
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of accounts. Count it and split it.
|
// get list of accounts. Count it and split it.
|
||||||
$collection = $this->repository->getAccountsByType($types);
|
$collection = $this->repository->getAccountsByType($types);
|
||||||
@@ -142,7 +172,7 @@ class AccountController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->repository->getPiggyBanks($account);
|
$collection = $this->repository->getPiggyBanks($account);
|
||||||
@@ -218,7 +248,7 @@ class AccountController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, Account $account): JsonResponse
|
public function transactions(Request $request, Account $account): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
@@ -227,10 +257,8 @@ class AccountController extends Controller
|
|||||||
if (null !== $limit && $limit > 0) {
|
if (null !== $limit && $limit > 0) {
|
||||||
$pageSize = $limit;
|
$pageSize = $limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$types = $this->mapTransactionTypes($this->parameters->get('type'));
|
$types = $this->mapTransactionTypes($this->parameters->get('type'));
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
/** @var User $admin */
|
/** @var User $admin */
|
||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
|
|
||||||
@@ -240,7 +268,6 @@ class AccountController extends Controller
|
|||||||
$collector->setUser($admin)->setAccounts(new Collection([$account]))
|
$collector->setUser($admin)->setAccounts(new Collection([$account]))
|
||||||
->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types);
|
->withAPIInformation()->setLimit($pageSize)->setPage($this->parameters->get('page'))->setTypes($types);
|
||||||
|
|
||||||
// set range if necessary:
|
|
||||||
if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) {
|
if (null !== $this->parameters->get('start') && null !== $this->parameters->get('end')) {
|
||||||
$collector->setRange($this->parameters->get('start'), $this->parameters->get('end'));
|
$collector->setRange($this->parameters->get('start'), $this->parameters->get('end'));
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* AttachmentController.php
|
* AttachmentController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -92,8 +92,8 @@ class AttachmentController extends Controller
|
|||||||
* @param Attachment $attachment
|
* @param Attachment $attachment
|
||||||
*
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
* @return LaravelResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return LaravelResponse
|
||||||
*/
|
*/
|
||||||
public function download(Attachment $attachment): LaravelResponse
|
public function download(Attachment $attachment): LaravelResponse
|
||||||
{
|
{
|
||||||
@@ -139,7 +139,7 @@ class AttachmentController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of accounts. Count it and split it.
|
// get list of accounts. Count it and split it.
|
||||||
$collection = $this->repository->get();
|
$collection = $this->repository->get();
|
||||||
@@ -184,8 +184,8 @@ class AttachmentController extends Controller
|
|||||||
*
|
*
|
||||||
* @param AttachmentStoreRequest $request
|
* @param AttachmentStoreRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(AttachmentStoreRequest $request): JsonResponse
|
public function store(AttachmentStoreRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* AvailableBudgetController.php
|
* AvailableBudgetController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -92,7 +92,7 @@ class AvailableBudgetController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
$start = $this->parameters->get('start');
|
$start = $this->parameters->get('start');
|
||||||
$end = $this->parameters->get('end');
|
$end = $this->parameters->get('end');
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* BillController.php
|
* BillController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -85,7 +85,7 @@ class BillController extends Controller
|
|||||||
public function attachments(Bill $bill): JsonResponse
|
public function attachments(Bill $bill): JsonResponse
|
||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$collection = $this->repository->getAttachments($bill);
|
$collection = $this->repository->getAttachments($bill);
|
||||||
|
|
||||||
$count = $collection->count();
|
$count = $collection->count();
|
||||||
@@ -130,7 +130,7 @@ class BillController extends Controller
|
|||||||
{
|
{
|
||||||
$bills = $this->repository->getBills();
|
$bills = $this->repository->getBills();
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$count = $bills->count();
|
$count = $bills->count();
|
||||||
$bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
$bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||||
$paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page'));
|
$paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page'));
|
||||||
@@ -158,7 +158,7 @@ class BillController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->repository->getRulesForBill($bill);
|
$collection = $this->repository->getRulesForBill($bill);
|
||||||
@@ -206,8 +206,8 @@ class BillController extends Controller
|
|||||||
*
|
*
|
||||||
* @param BillRequest $request
|
* @param BillRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(BillRequest $request): JsonResponse
|
public function store(BillRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -235,7 +235,7 @@ class BillController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, Bill $bill): JsonResponse
|
public function transactions(Request $request, Bill $bill): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* BudgetController.php
|
* BudgetController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -25,13 +25,15 @@ namespace FireflyIII\Api\V1\Controllers;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use FireflyIII\Api\V1\Requests\BudgetLimitRequest;
|
use FireflyIII\Api\V1\Requests\BudgetLimitRequest;
|
||||||
use FireflyIII\Api\V1\Requests\BudgetRequest;
|
use FireflyIII\Api\V1\Requests\BudgetStoreRequest;
|
||||||
|
use FireflyIII\Api\V1\Requests\BudgetUpdateRequest;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
|
use FireflyIII\Transformers\AttachmentTransformer;
|
||||||
use FireflyIII\Transformers\BudgetLimitTransformer;
|
use FireflyIII\Transformers\BudgetLimitTransformer;
|
||||||
use FireflyIII\Transformers\BudgetTransformer;
|
use FireflyIII\Transformers\BudgetTransformer;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
@@ -89,7 +91,7 @@ class BudgetController extends Controller
|
|||||||
public function budgetLimits(Budget $budget): JsonResponse
|
public function budgetLimits(Budget $budget): JsonResponse
|
||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$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', $budget->id);
|
$this->parameters->set('budget_id', $budget->id);
|
||||||
$collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end'));
|
$collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end'));
|
||||||
$count = $collection->count();
|
$count = $collection->count();
|
||||||
@@ -108,6 +110,35 @@ class BudgetController extends Controller
|
|||||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Budget $budget
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function attachments(Budget $budget): JsonResponse
|
||||||
|
{
|
||||||
|
$manager = $this->getManager();
|
||||||
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
$collection = $this->repository->getAttachments($budget);
|
||||||
|
|
||||||
|
$count = $collection->count();
|
||||||
|
$attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||||
|
|
||||||
|
// make paginator:
|
||||||
|
$paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page'));
|
||||||
|
$paginator->setPath(route('api.v1.budgets.attachments', [$budget->id]) . $this->buildParams());
|
||||||
|
|
||||||
|
/** @var AttachmentTransformer $transformer */
|
||||||
|
$transformer = app(AttachmentTransformer::class);
|
||||||
|
$transformer->setParameters($this->parameters);
|
||||||
|
|
||||||
|
$resource = new FractalCollection($attachments, $transformer, 'attachments');
|
||||||
|
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||||
|
|
||||||
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the specified resource from storage.
|
* Remove the specified resource from storage.
|
||||||
*
|
*
|
||||||
@@ -134,7 +165,7 @@ class BudgetController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->repository->getBudgets();
|
$collection = $this->repository->getBudgets();
|
||||||
@@ -179,13 +210,13 @@ class BudgetController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Store a budget.
|
* Store a budget.
|
||||||
*
|
*
|
||||||
* @param BudgetRequest $request
|
* @param BudgetStoreRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
*
|
*
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(BudgetRequest $request): JsonResponse
|
public function store(BudgetStoreRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$budget = $this->repository->store($request->getAll());
|
$budget = $this->repository->store($request->getAll());
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
@@ -205,8 +236,8 @@ class BudgetController extends Controller
|
|||||||
* @param BudgetLimitRequest $request
|
* @param BudgetLimitRequest $request
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function storeBudgetLimit(BudgetLimitRequest $request, Budget $budget): JsonResponse
|
public function storeBudgetLimit(BudgetLimitRequest $request, Budget $budget): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -236,7 +267,7 @@ class BudgetController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, Budget $budget): JsonResponse
|
public function transactions(Request $request, Budget $budget): JsonResponse
|
||||||
{
|
{
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// user can overrule page size with limit parameter.
|
// user can overrule page size with limit parameter.
|
||||||
$limit = $this->parameters->get('limit');
|
$limit = $this->parameters->get('limit');
|
||||||
@@ -291,12 +322,12 @@ class BudgetController extends Controller
|
|||||||
/**
|
/**
|
||||||
* Update a budget.
|
* Update a budget.
|
||||||
*
|
*
|
||||||
* @param BudgetRequest $request
|
* @param BudgetUpdateRequest $request
|
||||||
* @param Budget $budget
|
* @param Budget $budget
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function update(BudgetRequest $request, Budget $budget): JsonResponse
|
public function update(BudgetUpdateRequest $request, Budget $budget): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getAll();
|
$data = $request->getAll();
|
||||||
$budget = $this->repository->update($budget, $data);
|
$budget = $this->repository->update($budget, $data);
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* BudgetLimitController.php
|
* BudgetLimitController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -102,9 +102,9 @@ class BudgetLimitController extends Controller
|
|||||||
public function index(Request $request): JsonResponse
|
public function index(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$budgetId = (int)($request->get('budget_id') ?? 0);
|
$budgetId = (int) ($request->get('budget_id') ?? 0);
|
||||||
$budget = $this->repository->findNull($budgetId);
|
$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);
|
$this->parameters->set('budget_id', $budgetId);
|
||||||
|
|
||||||
$collection = new Collection;
|
$collection = new Collection;
|
||||||
@@ -156,16 +156,16 @@ class BudgetLimitController extends Controller
|
|||||||
*
|
*
|
||||||
* @param BudgetLimitRequest $request
|
* @param BudgetLimitRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
*
|
*
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(BudgetLimitRequest $request): JsonResponse
|
public function store(BudgetLimitRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
$data = $request->getAll();
|
$data = $request->getAll();
|
||||||
$budget = $this->repository->findNull($data['budget_id']);
|
$budget = $this->repository->findNull($data['budget_id']);
|
||||||
if (null === $budget) {
|
if (null === $budget) {
|
||||||
throw new FireflyException('200004: Budget does not exist.');
|
throw new FireflyException('200004: Budget does not exist.'); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
$data['budget'] = $budget;
|
$data['budget'] = $budget;
|
||||||
$budgetLimit = $this->blRepository->storeBudgetLimit($data);
|
$budgetLimit = $this->blRepository->storeBudgetLimit($data);
|
||||||
@@ -191,7 +191,7 @@ class BudgetLimitController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, BudgetLimit $budgetLimit): JsonResponse
|
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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CategoryController.php
|
* CategoryController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -29,6 +29,7 @@ use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
|||||||
use FireflyIII\Models\Category;
|
use FireflyIII\Models\Category;
|
||||||
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
|
use FireflyIII\Transformers\AttachmentTransformer;
|
||||||
use FireflyIII\Transformers\CategoryTransformer;
|
use FireflyIII\Transformers\CategoryTransformer;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
@@ -71,6 +72,35 @@ class CategoryController extends Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Category $category
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function attachments(Category $category): JsonResponse
|
||||||
|
{
|
||||||
|
$manager = $this->getManager();
|
||||||
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
$collection = $this->repository->getAttachments($category);
|
||||||
|
|
||||||
|
$count = $collection->count();
|
||||||
|
$attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||||
|
|
||||||
|
// make paginator:
|
||||||
|
$paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page'));
|
||||||
|
$paginator->setPath(route('api.v1.categories.attachments', [$category->id]) . $this->buildParams());
|
||||||
|
|
||||||
|
/** @var AttachmentTransformer $transformer */
|
||||||
|
$transformer = app(AttachmentTransformer::class);
|
||||||
|
$transformer->setParameters($this->parameters);
|
||||||
|
|
||||||
|
$resource = new FractalCollection($attachments, $transformer, 'attachments');
|
||||||
|
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||||
|
|
||||||
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the specified resource from storage.
|
* Remove the specified resource from storage.
|
||||||
*
|
*
|
||||||
@@ -97,7 +127,7 @@ class CategoryController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->repository->getCategories();
|
$collection = $this->repository->getCategories();
|
||||||
@@ -146,8 +176,8 @@ class CategoryController extends Controller
|
|||||||
*
|
*
|
||||||
* @param CategoryRequest $request
|
* @param CategoryRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(CategoryRequest $request): JsonResponse
|
public function store(CategoryRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -175,7 +205,7 @@ class CategoryController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, Category $category): JsonResponse
|
public function transactions(Request $request, Category $category): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* AccountController.php
|
* AccountController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -99,10 +99,10 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
// loop the end balances. This is an array for each account ($expenses)
|
// loop the end balances. This is an array for each account ($expenses)
|
||||||
foreach ($endBalances as $accountId => $expenses) {
|
foreach ($endBalances as $accountId => $expenses) {
|
||||||
$accountId = (int)$accountId;
|
$accountId = (int) $accountId;
|
||||||
// loop each expense entry (each entry can be a different currency).
|
// loop each expense entry (each entry can be a different currency).
|
||||||
foreach ($expenses as $currencyId => $endAmount) {
|
foreach ($expenses as $currencyId => $endAmount) {
|
||||||
$currencyId = (int)$currencyId;
|
$currencyId = (int) $currencyId;
|
||||||
|
|
||||||
// see if there is an accompanying start amount.
|
// see if there is an accompanying start amount.
|
||||||
// grab the difference and find the currency.
|
// grab the difference and find the currency.
|
||||||
@@ -114,7 +114,7 @@ class AccountController extends Controller
|
|||||||
$tempData[] = [
|
$tempData[] = [
|
||||||
'name' => $accountNames[$accountId],
|
'name' => $accountNames[$accountId],
|
||||||
'difference' => $diff,
|
'difference' => $diff,
|
||||||
'diff_float' => (float)$diff,
|
'diff_float' => (float) $diff,
|
||||||
'currency_id' => $currencyId,
|
'currency_id' => $currencyId,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -247,10 +247,10 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
// loop the end balances. This is an array for each account ($expenses)
|
// loop the end balances. This is an array for each account ($expenses)
|
||||||
foreach ($endBalances as $accountId => $expenses) {
|
foreach ($endBalances as $accountId => $expenses) {
|
||||||
$accountId = (int)$accountId;
|
$accountId = (int) $accountId;
|
||||||
// loop each expense entry (each entry can be a different currency).
|
// loop each expense entry (each entry can be a different currency).
|
||||||
foreach ($expenses as $currencyId => $endAmount) {
|
foreach ($expenses as $currencyId => $endAmount) {
|
||||||
$currencyId = (int)$currencyId;
|
$currencyId = (int) $currencyId;
|
||||||
|
|
||||||
// see if there is an accompanying start amount.
|
// see if there is an accompanying start amount.
|
||||||
// grab the difference and find the currency.
|
// grab the difference and find the currency.
|
||||||
@@ -263,7 +263,7 @@ class AccountController extends Controller
|
|||||||
'name' => $accountNames[$accountId],
|
'name' => $accountNames[$accountId],
|
||||||
'difference' => bcmul($diff, '-1'),
|
'difference' => bcmul($diff, '-1'),
|
||||||
// For some reason this line is never covered in code coverage:
|
// For some reason this line is never covered in code coverage:
|
||||||
'diff_float' => ((float)$diff) * -1, // @codeCoverageIgnore
|
'diff_float' => ((float) $diff) * -1, // @codeCoverageIgnore
|
||||||
'currency_id' => $currencyId,
|
'currency_id' => $currencyId,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* AvailableBudgetController.php
|
* AvailableBudgetController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -83,9 +83,9 @@ class AvailableBudgetController extends Controller
|
|||||||
$spent = $spentInfo['amount'];
|
$spent = $spentInfo['amount'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$left = bcadd($availableBudget->amount, (string)$spent);
|
$left = bcadd($availableBudget->amount, (string) $spent);
|
||||||
// left less than zero? Set to zero.
|
// left less than zero? Set to zero.
|
||||||
if (bccomp($left, '0') === -1) {
|
if (-1 === bccomp($left, '0')) {
|
||||||
$left = '0';
|
$left = '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* CategoryController.php
|
* CategoryController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -95,7 +95,7 @@ class CategoryController extends Controller
|
|||||||
$categories = [];
|
$categories = [];
|
||||||
|
|
||||||
|
|
||||||
foreach ([$spentWith, $earnedWith] as $set) {
|
foreach ([$spentWith, $earnedWith, $spentWithout, $earnedWithout] as $set) {
|
||||||
foreach ($set as $currency) {
|
foreach ($set as $currency) {
|
||||||
foreach ($currency['categories'] as $category) {
|
foreach ($currency['categories'] as $category) {
|
||||||
$categories[] = $category['name'];
|
$categories[] = $category['name'];
|
||||||
@@ -104,7 +104,7 @@ class CategoryController extends Controller
|
|||||||
// make data arrays if not yet present.
|
// make data arrays if not yet present.
|
||||||
$tempData[$inKey] = $tempData[$inKey] ?? [
|
$tempData[$inKey] = $tempData[$inKey] ?? [
|
||||||
'currency_id' => $currency['currency_id'],
|
'currency_id' => $currency['currency_id'],
|
||||||
'label' => (string)trans('firefly.box_earned_in_currency', ['currency' => $currency['currency_name']]),
|
'label' => (string) trans('firefly.box_earned_in_currency', ['currency' => $currency['currency_name']]),
|
||||||
'currency_code' => $currency['currency_code'],
|
'currency_code' => $currency['currency_code'],
|
||||||
'currency_symbol' => $currency['currency_symbol'],
|
'currency_symbol' => $currency['currency_symbol'],
|
||||||
'currency_decimal_places' => $currency['currency_decimal_places'],
|
'currency_decimal_places' => $currency['currency_decimal_places'],
|
||||||
@@ -117,7 +117,7 @@ class CategoryController extends Controller
|
|||||||
];
|
];
|
||||||
$tempData[$outKey] = $tempData[$outKey] ?? [
|
$tempData[$outKey] = $tempData[$outKey] ?? [
|
||||||
'currency_id' => $currency['currency_id'],
|
'currency_id' => $currency['currency_id'],
|
||||||
'label' => (string)trans('firefly.box_spent_in_currency', ['currency' => $currency['currency_name']]),
|
'label' => (string) trans('firefly.box_spent_in_currency', ['currency' => $currency['currency_name']]),
|
||||||
'currency_code' => $currency['currency_code'],
|
'currency_code' => $currency['currency_code'],
|
||||||
'currency_symbol' => $currency['currency_symbol'],
|
'currency_symbol' => $currency['currency_symbol'],
|
||||||
'currency_decimal_places' => $currency['currency_decimal_places'],
|
'currency_decimal_places' => $currency['currency_decimal_places'],
|
||||||
@@ -141,48 +141,48 @@ class CategoryController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ([$spentWithout, $earnedWithout] as $set) {
|
// foreach ([] as $set) {
|
||||||
foreach ($set as $currency) {
|
// foreach ($set as $currency) {
|
||||||
$inKey = sprintf('%d-i', $currency['currency_id']);
|
// $inKey = sprintf('%d-i', $currency['currency_id']);
|
||||||
$outKey = sprintf('%d-e', $currency['currency_id']);
|
// $outKey = sprintf('%d-e', $currency['currency_id']);
|
||||||
$categories[] = (string)trans('firefly.no_category');
|
// $categories[] = (string)trans('firefly.no_category');
|
||||||
// make data arrays if not yet present.
|
// // make data arrays if not yet present.
|
||||||
$tempData[$inKey] = $tempData[$inKey] ?? [
|
// $tempData[$inKey] = $tempData[$inKey] ?? [
|
||||||
'currency_id' => $currency['currency_id'],
|
// 'currency_id' => $currency['currency_id'],
|
||||||
'label' => (string)trans('firefly.box_earned_in_currency', ['currency' => $currency['currency_name']]),
|
// 'label' => (string)trans('firefly.box_earned_in_currency', ['currency' => $currency['currency_name']]),
|
||||||
'currency_code' => $currency['currency_code'],
|
// 'currency_code' => $currency['currency_code'],
|
||||||
'currency_symbol' => $currency['currency_symbol'],
|
// 'currency_symbol' => $currency['currency_symbol'],
|
||||||
'currency_decimal_places' => $currency['currency_decimal_places'],
|
// 'currency_decimal_places' => $currency['currency_decimal_places'],
|
||||||
'type' => 'bar', // line, area or bar
|
// 'type' => 'bar', // line, area or bar
|
||||||
'yAxisID' => 0, // 0, 1, 2
|
// 'yAxisID' => 0, // 0, 1, 2
|
||||||
'entries' => [
|
// 'entries' => [
|
||||||
// per category:
|
// // per category:
|
||||||
// "category" => 5,
|
// // "category" => 5,
|
||||||
],
|
// ],
|
||||||
];
|
// ];
|
||||||
$tempData[$outKey] = $tempData[$outKey] ?? [
|
// $tempData[$outKey] = $tempData[$outKey] ?? [
|
||||||
'currency_id' => $currency['currency_id'],
|
// 'currency_id' => $currency['currency_id'],
|
||||||
'label' => (string)trans('firefly.box_spent_in_currency', ['currency' => $currency['currency_name']]),
|
// 'label' => (string)trans('firefly.box_spent_in_currency', ['currency' => $currency['currency_name']]),
|
||||||
'currency_code' => $currency['currency_code'],
|
// 'currency_code' => $currency['currency_code'],
|
||||||
'currency_symbol' => $currency['currency_symbol'],
|
// 'currency_symbol' => $currency['currency_symbol'],
|
||||||
'currency_decimal_places' => $currency['currency_decimal_places'],
|
// 'currency_decimal_places' => $currency['currency_decimal_places'],
|
||||||
'type' => 'bar', // line, area or bar
|
// 'type' => 'bar', // line, area or bar
|
||||||
'yAxisID' => 0, // 0, 1, 2
|
// 'yAxisID' => 0, // 0, 1, 2
|
||||||
'entries' => [
|
// 'entries' => [
|
||||||
// per category:
|
// // per category:
|
||||||
// "category" => 5,
|
// // "category" => 5,
|
||||||
],
|
// ],
|
||||||
];
|
// ];
|
||||||
foreach ($currency['transaction_journals'] as $journal) {
|
// foreach ($currency['transaction_journals'] as $journal) {
|
||||||
// is it expense or income?
|
// // is it expense or income?
|
||||||
$letter = -1 === bccomp($journal['amount'], '0') ? 'e' : 'i';
|
// $letter = -1 === bccomp($journal['amount'], '0') ? 'e' : 'i';
|
||||||
$currentKey = sprintf('%d-%s', $currency['currency_id'], $letter);
|
// $currentKey = sprintf('%d-%s', $currency['currency_id'], $letter);
|
||||||
$name = (string)trans('firefly.no_category');
|
// $name = (string)trans('firefly.no_category');
|
||||||
$tempData[$currentKey]['entries'][$name] = $tempData[$currentKey]['entries'][$name] ?? '0';
|
// $tempData[$currentKey]['entries'][$name] = $tempData[$currentKey]['entries'][$name] ?? '0';
|
||||||
$tempData[$currentKey]['entries'][$name] = bcadd($tempData[$currentKey]['entries'][$name], $journal['amount']);
|
// $tempData[$currentKey]['entries'][$name] = bcadd($tempData[$currentKey]['entries'][$name], $journal['amount']);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
// re-sort every spent array and add 0 for missing entries.
|
// re-sort every spent array and add 0 for missing entries.
|
||||||
foreach ($tempData as $index => $set) {
|
foreach ($tempData as $index => $set) {
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* ConfigurationController.php
|
* ConfigurationController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -51,7 +51,6 @@ class ConfigurationController extends Controller
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->middleware(
|
$this->middleware(
|
||||||
function ($request, $next) {
|
function ($request, $next) {
|
||||||
/** @noinspection UnusedConstructorDependenciesInspection */
|
|
||||||
$this->repository = app(UserRepositoryInterface::class);
|
$this->repository = app(UserRepositoryInterface::class);
|
||||||
/** @var User $admin */
|
/** @var User $admin */
|
||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
@@ -109,13 +108,12 @@ class ConfigurationController extends Controller
|
|||||||
$lastCheck = app('fireflyconfig')->get('last_update_check');
|
$lastCheck = app('fireflyconfig')->get('last_update_check');
|
||||||
/** @var Configuration $singleUser */
|
/** @var Configuration $singleUser */
|
||||||
$singleUser = app('fireflyconfig')->get('single_user_mode');
|
$singleUser = app('fireflyconfig')->get('single_user_mode');
|
||||||
$data = [
|
|
||||||
|
return [
|
||||||
'is_demo_site' => null === $isDemoSite ? null : $isDemoSite->data,
|
'is_demo_site' => null === $isDemoSite ? null : $isDemoSite->data,
|
||||||
'permission_update_check' => null === $updateCheck ? null : (int)$updateCheck->data,
|
'permission_update_check' => null === $updateCheck ? null : (int) $updateCheck->data,
|
||||||
'last_update_check' => null === $lastCheck ? null : (int)$lastCheck->data,
|
'last_update_check' => null === $lastCheck ? null : (int) $lastCheck->data,
|
||||||
'single_user_mode' => null === $singleUser ? null : $singleUser->data,
|
'single_user_mode' => null === $singleUser ? null : $singleUser->data,
|
||||||
];
|
];
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller.php
|
* Controller.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -104,7 +104,7 @@ class Controller extends BaseController
|
|||||||
private function getParameters(): ParameterBag
|
private function getParameters(): ParameterBag
|
||||||
{
|
{
|
||||||
$bag = new ParameterBag;
|
$bag = new ParameterBag;
|
||||||
$page = (int)request()->get('page');
|
$page = (int) request()->get('page');
|
||||||
if (0 === $page) {
|
if (0 === $page) {
|
||||||
$page = 1;
|
$page = 1;
|
||||||
}
|
}
|
||||||
@@ -131,7 +131,7 @@ class Controller extends BaseController
|
|||||||
foreach ($integers as $integer) {
|
foreach ($integers as $integer) {
|
||||||
$value = request()->query->get($integer);
|
$value = request()->query->get($integer);
|
||||||
if (null !== $value) {
|
if (null !== $value) {
|
||||||
$bag->set($integer, (int)$value);
|
$bag->set($integer, (int) $value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CurrencyController.php
|
* CurrencyController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -116,7 +116,7 @@ class CurrencyController extends Controller
|
|||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$types = $this->mapAccountTypes($this->parameters->get('type'));
|
$types = $this->mapAccountTypes($this->parameters->get('type'));
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of accounts. Count it and split it.
|
// get list of accounts. Count it and split it.
|
||||||
/** @var AccountRepositoryInterface $accountRepository */
|
/** @var AccountRepositoryInterface $accountRepository */
|
||||||
@@ -126,7 +126,7 @@ class CurrencyController extends Controller
|
|||||||
// filter list on currency preference:
|
// filter list on currency preference:
|
||||||
$collection = $unfiltered->filter(
|
$collection = $unfiltered->filter(
|
||||||
static function (Account $account) use ($currency, $accountRepository) {
|
static function (Account $account) use ($currency, $accountRepository) {
|
||||||
$currencyId = (int)$accountRepository->getMetaValue($account, 'currency_id');
|
$currencyId = (int) $accountRepository->getMetaValue($account, 'currency_id');
|
||||||
|
|
||||||
return $currencyId === $currency->id;
|
return $currencyId === $currency->id;
|
||||||
}
|
}
|
||||||
@@ -165,7 +165,7 @@ class CurrencyController extends Controller
|
|||||||
|
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of available budgets. Count it and split it.
|
// get list of available budgets. Count it and split it.
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ class CurrencyController extends Controller
|
|||||||
|
|
||||||
/** @var BillRepositoryInterface $repository */
|
/** @var BillRepositoryInterface $repository */
|
||||||
$repository = app(BillRepositoryInterface::class);
|
$repository = app(BillRepositoryInterface::class);
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$unfiltered = $repository->getBills();
|
$unfiltered = $repository->getBills();
|
||||||
|
|
||||||
// filter and paginate list:
|
// filter and paginate list:
|
||||||
@@ -249,7 +249,7 @@ class CurrencyController extends Controller
|
|||||||
$blRepository = app(BudgetLimitRepositoryInterface::class);
|
$blRepository = app(BudgetLimitRepositoryInterface::class);
|
||||||
|
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$collection = $blRepository->getAllBudgetLimitsByCurrency($currency, $this->parameters->get('start'), $this->parameters->get('end'));
|
$collection = $blRepository->getAllBudgetLimitsByCurrency($currency, $this->parameters->get('start'), $this->parameters->get('end'));
|
||||||
$count = $collection->count();
|
$count = $collection->count();
|
||||||
$budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
$budgetLimits = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||||
@@ -278,7 +278,7 @@ class CurrencyController extends Controller
|
|||||||
{
|
{
|
||||||
// create some objects:
|
// create some objects:
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$collection = $this->repository->getExchangeRates($currency);
|
$collection = $this->repository->getExchangeRates($currency);
|
||||||
|
|
||||||
|
|
||||||
@@ -302,9 +302,9 @@ class CurrencyController extends Controller
|
|||||||
*
|
*
|
||||||
* @param TransactionCurrency $currency
|
* @param TransactionCurrency $currency
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function delete(TransactionCurrency $currency): JsonResponse
|
public function delete(TransactionCurrency $currency): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -318,6 +318,10 @@ class CurrencyController extends Controller
|
|||||||
if ($this->repository->currencyInUse($currency)) {
|
if ($this->repository->currencyInUse($currency)) {
|
||||||
throw new FireflyException('200006: Currency in use.'); // @codeCoverageIgnore
|
throw new FireflyException('200006: Currency in use.'); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
if ($this->repository->isFallbackCurrency($currency)) {
|
||||||
|
throw new FireflyException('200026: Currency is fallback.'); // @codeCoverageIgnore
|
||||||
|
}
|
||||||
|
|
||||||
$this->repository->destroy($currency);
|
$this->repository->destroy($currency);
|
||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
@@ -387,7 +391,7 @@ class CurrencyController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(): JsonResponse
|
public function index(): JsonResponse
|
||||||
{
|
{
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$collection = $this->repository->getAll();
|
$collection = $this->repository->getAll();
|
||||||
$count = $collection->count();
|
$count = $collection->count();
|
||||||
// slice them:
|
// slice them:
|
||||||
@@ -451,7 +455,7 @@ class CurrencyController extends Controller
|
|||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
/** @var RecurringRepositoryInterface $repository */
|
/** @var RecurringRepositoryInterface $repository */
|
||||||
@@ -502,7 +506,7 @@ class CurrencyController extends Controller
|
|||||||
public function rules(TransactionCurrency $currency): JsonResponse
|
public function rules(TransactionCurrency $currency): JsonResponse
|
||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
/** @var RuleRepositoryInterface $repository */
|
/** @var RuleRepositoryInterface $repository */
|
||||||
@@ -563,13 +567,33 @@ class CurrencyController extends Controller
|
|||||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show a currency.
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function showDefault(): JsonResponse
|
||||||
|
{
|
||||||
|
$manager = $this->getManager();
|
||||||
|
$currency = app('amount')->getDefaultCurrencyByUser(auth()->user());
|
||||||
|
|
||||||
|
/** @var CurrencyTransformer $transformer */
|
||||||
|
$transformer = app(CurrencyTransformer::class);
|
||||||
|
$transformer->setParameters($this->parameters);
|
||||||
|
|
||||||
|
$resource = new Item($currency, $transformer, 'currencies');
|
||||||
|
|
||||||
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store new currency.
|
* Store new currency.
|
||||||
*
|
*
|
||||||
* @param CurrencyRequest $request
|
* @param CurrencyRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(CurrencyRequest $request): JsonResponse
|
public function store(CurrencyRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -603,7 +627,7 @@ class CurrencyController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, TransactionCurrency $currency): JsonResponse
|
public function transactions(Request $request, TransactionCurrency $currency): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CurrencyExchangeRateController.php
|
* CurrencyExchangeRateController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -69,8 +69,8 @@ class CurrencyExchangeRateController extends Controller
|
|||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function index(Request $request): JsonResponse
|
public function index(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* ImportController.php
|
* ImportController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -40,6 +40,9 @@ use League\Fractal\Resource\Item;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ImportController
|
* Class ImportController
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
class ImportController extends Controller
|
class ImportController extends Controller
|
||||||
{
|
{
|
||||||
@@ -75,7 +78,7 @@ class ImportController extends Controller
|
|||||||
{
|
{
|
||||||
// create some objects:
|
// create some objects:
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of accounts. Count it and split it.
|
// get list of accounts. Count it and split it.
|
||||||
$collection = $this->repository->get();
|
$collection = $this->repository->get();
|
||||||
@@ -125,7 +128,7 @@ class ImportController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, ImportJob $importJob): JsonResponse
|
public function transactions(Request $request, ImportJob $importJob): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* LinkTypeController.php
|
* LinkTypeController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -79,9 +79,9 @@ class LinkTypeController extends Controller
|
|||||||
*
|
*
|
||||||
* @param LinkType $linkType
|
* @param LinkType $linkType
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function delete(LinkType $linkType): JsonResponse
|
public function delete(LinkType $linkType): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -103,7 +103,7 @@ class LinkTypeController extends Controller
|
|||||||
{
|
{
|
||||||
// create some objects:
|
// create some objects:
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of accounts. Count it and split it.
|
// get list of accounts. Count it and split it.
|
||||||
$collection = $this->repository->get();
|
$collection = $this->repository->get();
|
||||||
@@ -151,8 +151,8 @@ class LinkTypeController extends Controller
|
|||||||
*
|
*
|
||||||
* @param LinkTypeRequest $request
|
* @param LinkTypeRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(LinkTypeRequest $request): JsonResponse
|
public function store(LinkTypeRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -187,7 +187,7 @@ class LinkTypeController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, LinkType $linkType): JsonResponse
|
public function transactions(Request $request, LinkType $linkType): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
@@ -241,8 +241,8 @@ class LinkTypeController extends Controller
|
|||||||
* @param LinkTypeRequest $request
|
* @param LinkTypeRequest $request
|
||||||
* @param LinkType $linkType
|
* @param LinkType $linkType
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function update(LinkTypeRequest $request, LinkType $linkType): JsonResponse
|
public function update(LinkTypeRequest $request, LinkType $linkType): JsonResponse
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* PiggyBankController.php
|
* PiggyBankController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -27,6 +27,7 @@ use FireflyIII\Api\V1\Requests\PiggyBankRequest;
|
|||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\PiggyBank;
|
use FireflyIII\Models\PiggyBank;
|
||||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
|
use FireflyIII\Transformers\AttachmentTransformer;
|
||||||
use FireflyIII\Transformers\PiggyBankEventTransformer;
|
use FireflyIII\Transformers\PiggyBankEventTransformer;
|
||||||
use FireflyIII\Transformers\PiggyBankTransformer;
|
use FireflyIII\Transformers\PiggyBankTransformer;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
@@ -83,6 +84,36 @@ class PiggyBankController extends Controller
|
|||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param PiggyBank $piggyBank
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function attachments(PiggyBank $piggyBank): JsonResponse
|
||||||
|
{
|
||||||
|
$manager = $this->getManager();
|
||||||
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
$collection = $this->repository->getAttachments($piggyBank);
|
||||||
|
|
||||||
|
$count = $collection->count();
|
||||||
|
$attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||||
|
|
||||||
|
// make paginator:
|
||||||
|
$paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page'));
|
||||||
|
$paginator->setPath(route('api.v1.piggy_banks.attachments', [$piggyBank->id]) . $this->buildParams());
|
||||||
|
|
||||||
|
/** @var AttachmentTransformer $transformer */
|
||||||
|
$transformer = app(AttachmentTransformer::class);
|
||||||
|
$transformer->setParameters($this->parameters);
|
||||||
|
|
||||||
|
$resource = new FractalCollection($attachments, $transformer, 'attachments');
|
||||||
|
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||||
|
|
||||||
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List all of them.
|
* List all of them.
|
||||||
*
|
*
|
||||||
@@ -93,7 +124,7 @@ class PiggyBankController extends Controller
|
|||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->repository->getPiggyBanks();
|
$collection = $this->repository->getPiggyBanks();
|
||||||
@@ -126,7 +157,7 @@ class PiggyBankController extends Controller
|
|||||||
public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse
|
public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse
|
||||||
{
|
{
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
$collection = $this->repository->getEvents($piggyBank);
|
$collection = $this->repository->getEvents($piggyBank);
|
||||||
@@ -175,8 +206,8 @@ class PiggyBankController extends Controller
|
|||||||
*
|
*
|
||||||
* @param PiggyBankRequest $request
|
* @param PiggyBankRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(PiggyBankRequest $request): JsonResponse
|
public function store(PiggyBankRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* PreferenceController.php
|
* PreferenceController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -147,10 +147,10 @@ class PreferenceController extends Controller
|
|||||||
$newValue = explode(',', $data['data']);
|
$newValue = explode(',', $data['data']);
|
||||||
break;
|
break;
|
||||||
case 'listPageSize':
|
case 'listPageSize':
|
||||||
$newValue = (int)$data['data'];
|
$newValue = (int) $data['data'];
|
||||||
break;
|
break;
|
||||||
case 'customFiscalYear':
|
case 'customFiscalYear':
|
||||||
$newValue = 1 === (int)$data['data'];
|
$newValue = 1 === (int) $data['data'];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$result = app('preferences')->set($preference->name, $newValue);
|
$result = app('preferences')->set($preference->name, $newValue);
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RecurrenceController.php
|
* RecurrenceController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -99,7 +99,7 @@ class RecurrenceController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->repository->getAll();
|
$collection = $this->repository->getAll();
|
||||||
@@ -149,8 +149,8 @@ class RecurrenceController extends Controller
|
|||||||
*
|
*
|
||||||
* @param RecurrenceStoreRequest $request
|
* @param RecurrenceStoreRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(RecurrenceStoreRequest $request): JsonResponse
|
public function store(RecurrenceStoreRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -178,7 +178,7 @@ class RecurrenceController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, Recurrence $recurrence): JsonResponse
|
public function transactions(Request $request, Recurrence $recurrence): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
@@ -224,9 +224,9 @@ class RecurrenceController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function trigger(): JsonResponse
|
public function trigger(): JsonResponse
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RuleController.php
|
* RuleController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -105,7 +105,7 @@ class RuleController extends Controller
|
|||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->ruleRepository->getAll();
|
$collection = $this->ruleRepository->getAll();
|
||||||
@@ -214,12 +214,12 @@ class RuleController extends Controller
|
|||||||
* @param RuleTestRequest $request
|
* @param RuleTestRequest $request
|
||||||
* @param Rule $rule
|
* @param Rule $rule
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function testRule(RuleTestRequest $request, Rule $rule): JsonResponse
|
public function testRule(RuleTestRequest $request, Rule $rule): JsonResponse
|
||||||
{
|
{
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$parameters = $request->getTestParameters();
|
$parameters = $request->getTestParameters();
|
||||||
/** @var Rule $rule */
|
/** @var Rule $rule */
|
||||||
Log::debug(sprintf('Now testing rule #%d, "%s"', $rule->id, $rule->title));
|
Log::debug(sprintf('Now testing rule #%d, "%s"', $rule->id, $rule->title));
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RuleGroupController.php
|
* RuleGroupController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -106,7 +106,7 @@ class RuleGroupController extends Controller
|
|||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of rule groups. Count it and split it.
|
// get list of rule groups. Count it and split it.
|
||||||
$collection = $this->ruleGroupRepository->get();
|
$collection = $this->ruleGroupRepository->get();
|
||||||
@@ -177,7 +177,7 @@ class RuleGroupController extends Controller
|
|||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->ruleGroupRepository->getRules($group);
|
$collection = $this->ruleGroupRepository->getRules($group);
|
||||||
@@ -246,13 +246,13 @@ class RuleGroupController extends Controller
|
|||||||
* @param RuleGroupTestRequest $request
|
* @param RuleGroupTestRequest $request
|
||||||
* @param RuleGroup $group
|
* @param RuleGroup $group
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
*
|
*
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function testGroup(RuleGroupTestRequest $request, RuleGroup $group): JsonResponse
|
public function testGroup(RuleGroupTestRequest $request, RuleGroup $group): JsonResponse
|
||||||
{
|
{
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
Log::debug('Now in testGroup()');
|
Log::debug('Now in testGroup()');
|
||||||
/** @var Collection $rules */
|
/** @var Collection $rules */
|
||||||
$rules = $this->ruleGroupRepository->getActiveRules($group);
|
$rules = $this->ruleGroupRepository->getActiveRules($group);
|
||||||
@@ -305,8 +305,8 @@ class RuleGroupController extends Controller
|
|||||||
* @param RuleGroupTriggerRequest $request
|
* @param RuleGroupTriggerRequest $request
|
||||||
* @param RuleGroup $group
|
* @param RuleGroup $group
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function triggerGroup(RuleGroupTriggerRequest $request, RuleGroup $group): JsonResponse
|
public function triggerGroup(RuleGroupTriggerRequest $request, RuleGroup $group): JsonResponse
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* AccountController.php
|
* AccountController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -21,7 +22,6 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Api\V1\Controllers\Search;
|
namespace FireflyIII\Api\V1\Controllers\Search;
|
||||||
|
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Support\Http\Api\AccountFilter;
|
use FireflyIII\Support\Http\Api\AccountFilter;
|
||||||
use FireflyIII\Support\Search\AccountSearch;
|
use FireflyIII\Support\Search\AccountSearch;
|
||||||
@@ -32,6 +32,7 @@ use Illuminate\Http\Response;
|
|||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
||||||
use League\Fractal\Resource\Collection as FractalCollection;
|
use League\Fractal\Resource\Collection as FractalCollection;
|
||||||
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AccountController
|
* Class AccountController
|
||||||
@@ -62,6 +63,7 @@ class AccountController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function search(Request $request)
|
public function search(Request $request)
|
||||||
{
|
{
|
||||||
|
Log::debug('Now in account search()');
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
$query = $request->get('query');
|
$query = $request->get('query');
|
||||||
$field = $request->get('field');
|
$field = $request->get('field');
|
||||||
@@ -70,6 +72,8 @@ class AccountController extends Controller
|
|||||||
return response(null, 422);
|
return response(null, 422);
|
||||||
}
|
}
|
||||||
$types = $this->mapAccountTypes($type);
|
$types = $this->mapAccountTypes($type);
|
||||||
|
Log::debug(sprintf('Going to search for "%s" in types', $query), $types);
|
||||||
|
|
||||||
/** @var AccountSearch $search */
|
/** @var AccountSearch $search */
|
||||||
$search = app(AccountSearch::class);
|
$search = app(AccountSearch::class);
|
||||||
$search->setUser(auth()->user());
|
$search->setUser(auth()->user());
|
||||||
@@ -79,6 +83,8 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
$accounts = $search->search();
|
$accounts = $search->search();
|
||||||
|
|
||||||
|
Log::debug(sprintf('Found %d accounts', $accounts->count()));
|
||||||
|
|
||||||
/** @var AccountTransformer $transformer */
|
/** @var AccountTransformer $transformer */
|
||||||
$transformer = app(AccountTransformer::class);
|
$transformer = app(AccountTransformer::class);
|
||||||
$transformer->setParameters($this->parameters);
|
$transformer->setParameters($this->parameters);
|
||||||
@@ -91,5 +97,4 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* TransactionController.php
|
* TransactionController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -21,13 +22,8 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Api\V1\Controllers\Search;
|
namespace FireflyIII\Api\V1\Controllers\Search;
|
||||||
|
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Support\Search\SearchInterface;
|
|
||||||
use FireflyIII\Support\Search\TransactionSearch;
|
|
||||||
use Illuminate\Http\JsonResponse;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Response;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class TransactionController
|
* Class TransactionController
|
||||||
@@ -35,13 +31,13 @@ use Illuminate\Http\Response;
|
|||||||
class TransactionController extends Controller
|
class TransactionController extends Controller
|
||||||
{
|
{
|
||||||
/** @var string */
|
/** @var string */
|
||||||
const SEARCH_ALL = 'all';
|
public const SEARCH_ALL = 'all';
|
||||||
/** @var string */
|
/** @var string */
|
||||||
const SEARCH_DESCRIPTION = 'description';
|
public const SEARCH_DESCRIPTION = 'description';
|
||||||
/** @var string */
|
/** @var string */
|
||||||
const SEARCH_NOTES = 'notes';
|
public const SEARCH_NOTES = 'notes';
|
||||||
/** @var string */
|
/** @var string */
|
||||||
const SEARCH_ACCOUNTS = 'accounts';
|
public const SEARCH_ACCOUNTS = 'accounts';
|
||||||
/** @var array */
|
/** @var array */
|
||||||
private $validFields;
|
private $validFields;
|
||||||
|
|
||||||
@@ -59,11 +55,10 @@ class TransactionController extends Controller
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse|Response
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function search(Request $request)
|
public function search(Request $request): void
|
||||||
{
|
{
|
||||||
die('the route is present but nobody\'s home.');
|
die('the route is present but nobody\'s home.');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* TransferController.php
|
* TransferController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -21,16 +22,13 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Api\V1\Controllers\Search;
|
namespace FireflyIII\Api\V1\Controllers\Search;
|
||||||
|
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Controllers\Controller;
|
use FireflyIII\Api\V1\Controllers\Controller;
|
||||||
use FireflyIII\Api\V1\Requests\Search\TransferRequest;
|
use FireflyIII\Api\V1\Requests\Search\TransferRequest;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Support\Search\TransferSearch;
|
use FireflyIII\Support\Search\TransferSearch;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
|
||||||
use League\Fractal\Resource\Collection as FractalCollection;
|
use League\Fractal\Resource\Collection as FractalCollection;
|
||||||
@@ -41,10 +39,9 @@ use League\Fractal\Resource\Collection as FractalCollection;
|
|||||||
class TransferController extends Controller
|
class TransferController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param TransferRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse|Response
|
* @return JsonResponse|Response
|
||||||
* @throws FireflyException
|
|
||||||
*/
|
*/
|
||||||
public function search(TransferRequest $request)
|
public function search(TransferRequest $request)
|
||||||
{
|
{
|
||||||
@@ -82,7 +79,7 @@ class TransferController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// collector to return results.
|
// collector to return results.
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
/** @var User $admin */
|
/** @var User $admin */
|
||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* SummaryController.php
|
* SummaryController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Api\V1\Controllers;
|
namespace FireflyIII\Api\V1\Controllers;
|
||||||
|
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Exception;
|
use Exception;
|
||||||
use FireflyIII\Api\V1\Requests\DateRequest;
|
use FireflyIII\Api\V1\Requests\DateRequest;
|
||||||
@@ -42,7 +41,6 @@ use FireflyIII\Repositories\Budget\OperationsRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Collection;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class SummaryController
|
* Class SummaryController
|
||||||
@@ -98,8 +96,8 @@ class SummaryController extends Controller
|
|||||||
/**
|
/**
|
||||||
* @param DateRequest $request
|
* @param DateRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function basic(DateRequest $request): JsonResponse
|
public function basic(DateRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -125,7 +123,6 @@ class SummaryController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
return response()->json($return);
|
return response()->json($return);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,25 +149,6 @@ class SummaryController extends Controller
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This method will scroll through the results of the spentInPeriodMc() array and return the correct info.
|
|
||||||
*
|
|
||||||
* @param array $spentInfo
|
|
||||||
* @param TransactionCurrency $currency
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function findInSpentArray(array $spentInfo, TransactionCurrency $currency): string
|
|
||||||
{
|
|
||||||
foreach ($spentInfo as $array) {
|
|
||||||
if ($array['currency_id'] === $currency->id) {
|
|
||||||
return (string)$array['amount'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return '0'; // @codeCoverageIgnore
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Carbon $start
|
* @param Carbon $start
|
||||||
* @param Carbon $end
|
* @param Carbon $end
|
||||||
@@ -198,8 +176,7 @@ class SummaryController extends Controller
|
|||||||
$set = $collector->getExtractedJournals();
|
$set = $collector->getExtractedJournals();
|
||||||
/** @var array $transactionJournal */
|
/** @var array $transactionJournal */
|
||||||
foreach ($set as $transactionJournal) {
|
foreach ($set as $transactionJournal) {
|
||||||
|
$currencyId = (int) $transactionJournal['currency_id'];
|
||||||
$currencyId = (int)$transactionJournal['currency_id'];
|
|
||||||
$incomes[$currencyId] = $incomes[$currencyId] ?? '0';
|
$incomes[$currencyId] = $incomes[$currencyId] ?? '0';
|
||||||
$incomes[$currencyId] = bcadd($incomes[$currencyId], bcmul($transactionJournal['amount'], '-1'));
|
$incomes[$currencyId] = bcadd($incomes[$currencyId], bcmul($transactionJournal['amount'], '-1'));
|
||||||
$sums[$currencyId] = $sums[$currencyId] ?? '0';
|
$sums[$currencyId] = $sums[$currencyId] ?? '0';
|
||||||
@@ -221,7 +198,7 @@ class SummaryController extends Controller
|
|||||||
|
|
||||||
/** @var array $transactionJournal */
|
/** @var array $transactionJournal */
|
||||||
foreach ($set as $transactionJournal) {
|
foreach ($set as $transactionJournal) {
|
||||||
$currencyId = (int)$transactionJournal['currency_id'];
|
$currencyId = (int) $transactionJournal['currency_id'];
|
||||||
$expenses[$currencyId] = $expenses[$currencyId] ?? '0';
|
$expenses[$currencyId] = $expenses[$currencyId] ?? '0';
|
||||||
$expenses[$currencyId] = bcadd($expenses[$currencyId], $transactionJournal['amount']);
|
$expenses[$currencyId] = bcadd($expenses[$currencyId], $transactionJournal['amount']);
|
||||||
$sums[$currencyId] = $sums[$currencyId] ?? '0';
|
$sums[$currencyId] = $sums[$currencyId] ?? '0';
|
||||||
@@ -295,7 +272,7 @@ class SummaryController extends Controller
|
|||||||
$return = [];
|
$return = [];
|
||||||
foreach ($paidAmount as $currencyId => $amount) {
|
foreach ($paidAmount as $currencyId => $amount) {
|
||||||
$amount = bcmul($amount, '-1');
|
$amount = bcmul($amount, '-1');
|
||||||
$currency = $this->currencyRepos->findNull((int)$currencyId);
|
$currency = $this->currencyRepos->findNull((int) $currencyId);
|
||||||
if (null === $currency) {
|
if (null === $currency) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -315,7 +292,7 @@ class SummaryController extends Controller
|
|||||||
|
|
||||||
foreach ($unpaidAmount as $currencyId => $amount) {
|
foreach ($unpaidAmount as $currencyId => $amount) {
|
||||||
$amount = bcmul($amount, '-1');
|
$amount = bcmul($amount, '-1');
|
||||||
$currency = $this->currencyRepos->findNull((int)$currencyId);
|
$currency = $this->currencyRepos->findNull((int) $currencyId);
|
||||||
if (null === $currency) {
|
if (null === $currency) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -340,8 +317,8 @@ class SummaryController extends Controller
|
|||||||
* @param Carbon $start
|
* @param Carbon $start
|
||||||
* @param Carbon $end
|
* @param Carbon $end
|
||||||
*
|
*
|
||||||
* @return array
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function getLeftToSpendInfo(Carbon $start, Carbon $end): array
|
private function getLeftToSpendInfo(Carbon $start, Carbon $end): array
|
||||||
{
|
{
|
||||||
@@ -360,7 +337,7 @@ class SummaryController extends Controller
|
|||||||
$days = $today->diffInDays($end) + 1;
|
$days = $today->diffInDays($end) + 1;
|
||||||
$perDay = '0';
|
$perDay = '0';
|
||||||
if (0 !== $days && bccomp($leftToSpend, '0') > -1) {
|
if (0 !== $days && bccomp($leftToSpend, '0') > -1) {
|
||||||
$perDay = bcdiv($leftToSpend, (string)$days);
|
$perDay = bcdiv($leftToSpend, (string) $days);
|
||||||
}
|
}
|
||||||
|
|
||||||
$return[] = [
|
$return[] = [
|
||||||
@@ -373,14 +350,18 @@ class SummaryController extends Controller
|
|||||||
'currency_decimal_places' => $row['currency_decimal_places'],
|
'currency_decimal_places' => $row['currency_decimal_places'],
|
||||||
'value_parsed' => app('amount')->formatFlat($row['currency_symbol'], $row['currency_decimal_places'], $leftToSpend, false),
|
'value_parsed' => app('amount')->formatFlat($row['currency_symbol'], $row['currency_decimal_places'], $leftToSpend, false),
|
||||||
'local_icon' => 'money',
|
'local_icon' => 'money',
|
||||||
'sub_title' => (string)trans(
|
'sub_title' => (string) trans(
|
||||||
'firefly.box_spend_per_day', ['amount' => app('amount')->formatFlat(
|
'firefly.box_spend_per_day',
|
||||||
$row['currency_symbol'], $row['currency_decimal_places'], $perDay, false
|
['amount' => app('amount')->formatFlat(
|
||||||
|
$row['currency_symbol'],
|
||||||
|
$row['currency_decimal_places'],
|
||||||
|
$perDay,
|
||||||
|
false
|
||||||
)]
|
)]
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,5 +424,4 @@ class SummaryController extends Controller
|
|||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* TagController.php
|
* TagController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -25,12 +25,13 @@ namespace FireflyIII\Api\V1\Controllers;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Api\V1\Requests\DateRequest;
|
use FireflyIII\Api\V1\Requests\DateRequest;
|
||||||
use FireflyIII\Api\V1\Requests\TagUpdateRequest;
|
|
||||||
use FireflyIII\Api\V1\Requests\TagStoreRequest;
|
use FireflyIII\Api\V1\Requests\TagStoreRequest;
|
||||||
|
use FireflyIII\Api\V1\Requests\TagUpdateRequest;
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Models\Tag;
|
use FireflyIII\Models\Tag;
|
||||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
use FireflyIII\Support\Http\Api\TransactionFilter;
|
use FireflyIII\Support\Http\Api\TransactionFilter;
|
||||||
|
use FireflyIII\Transformers\AttachmentTransformer;
|
||||||
use FireflyIII\Transformers\TagTransformer;
|
use FireflyIII\Transformers\TagTransformer;
|
||||||
use FireflyIII\Transformers\TransactionGroupTransformer;
|
use FireflyIII\Transformers\TransactionGroupTransformer;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
@@ -117,7 +118,7 @@ class TagController extends Controller
|
|||||||
{
|
{
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
|
||||||
// get list of budgets. Count it and split it.
|
// get list of budgets. Count it and split it.
|
||||||
$collection = $this->repository->get();
|
$collection = $this->repository->get();
|
||||||
@@ -138,6 +139,36 @@ class TagController extends Controller
|
|||||||
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Tag $tag
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function attachments(Tag $tag): JsonResponse
|
||||||
|
{
|
||||||
|
$manager = $this->getManager();
|
||||||
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
|
$collection = $this->repository->getAttachments($tag);
|
||||||
|
|
||||||
|
$count = $collection->count();
|
||||||
|
$attachments = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
|
||||||
|
|
||||||
|
// make paginator:
|
||||||
|
$paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page'));
|
||||||
|
$paginator->setPath(route('api.v1.tags.attachments', [$tag->id]) . $this->buildParams());
|
||||||
|
|
||||||
|
/** @var AttachmentTransformer $transformer */
|
||||||
|
$transformer = app(AttachmentTransformer::class);
|
||||||
|
$transformer->setParameters($this->parameters);
|
||||||
|
|
||||||
|
$resource = new FractalCollection($attachments, $transformer, 'attachments');
|
||||||
|
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
|
||||||
|
|
||||||
|
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List single resource.
|
* List single resource.
|
||||||
*
|
*
|
||||||
@@ -190,7 +221,7 @@ class TagController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function transactions(Request $request, Tag $tag): JsonResponse
|
public function transactions(Request $request, Tag $tag): 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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
@@ -288,8 +319,8 @@ class TagController extends Controller
|
|||||||
];
|
];
|
||||||
/** @var Tag $tag */
|
/** @var Tag $tag */
|
||||||
foreach ($tags as $tag) {
|
foreach ($tags as $tag) {
|
||||||
$earned = (float)$this->repository->earnedInPeriod($tag, $start, $end);
|
$earned = (float) $this->repository->earnedInPeriod($tag, $start, $end);
|
||||||
$spent = (float)$this->repository->spentInPeriod($tag, $start, $end);
|
$spent = (float) $this->repository->spentInPeriod($tag, $start, $end);
|
||||||
$size = ($spent * -1) + $earned;
|
$size = ($spent * -1) + $earned;
|
||||||
$min = $min ?? $size;
|
$min = $min ?? $size;
|
||||||
if ($size > 0) {
|
if ($size > 0) {
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TransactionController.php
|
* TransactionController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -29,6 +29,7 @@ use FireflyIII\Api\V1\Requests\TransactionUpdateRequest;
|
|||||||
use FireflyIII\Events\StoredTransactionGroup;
|
use FireflyIII\Events\StoredTransactionGroup;
|
||||||
use FireflyIII\Events\UpdatedTransactionGroup;
|
use FireflyIII\Events\UpdatedTransactionGroup;
|
||||||
use FireflyIII\Exceptions\DuplicateTransactionException;
|
use FireflyIII\Exceptions\DuplicateTransactionException;
|
||||||
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
@@ -109,7 +110,6 @@ class TransactionController extends Controller
|
|||||||
$resource = new FractalCollection($attachments, $transformer, 'attachments');
|
$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', 'application/vnd.api+json');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -152,7 +152,7 @@ class TransactionController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function index(Request $request): JsonResponse
|
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';
|
$type = $request->get('type') ?? 'default';
|
||||||
$this->parameters->set('type', $type);
|
$this->parameters->set('type', $type);
|
||||||
|
|
||||||
@@ -214,7 +214,6 @@ class TransactionController extends Controller
|
|||||||
$resource = new FractalCollection($events, $transformer, 'piggy_bank_events');
|
$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', 'application/vnd.api+json');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -274,6 +273,7 @@ class TransactionController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function store(TransactionStoreRequest $request): JsonResponse
|
public function store(TransactionStoreRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
Log::debug('Now in API TransactionController::store()');
|
||||||
$data = $request->getAll();
|
$data = $request->getAll();
|
||||||
$data['user'] = auth()->user()->id;
|
$data['user'] = auth()->user()->id;
|
||||||
|
|
||||||
@@ -283,6 +283,7 @@ class TransactionController extends Controller
|
|||||||
try {
|
try {
|
||||||
$transactionGroup = $this->groupRepository->store($data);
|
$transactionGroup = $this->groupRepository->store($data);
|
||||||
} catch (DuplicateTransactionException $e) {
|
} catch (DuplicateTransactionException $e) {
|
||||||
|
Log::warning('Caught a duplicate. Return error message.');
|
||||||
// return bad validation message.
|
// return bad validation message.
|
||||||
// TODO use Laravel's internal validation thing to do this.
|
// TODO use Laravel's internal validation thing to do this.
|
||||||
$response = [
|
$response = [
|
||||||
@@ -293,9 +294,22 @@ class TransactionController extends Controller
|
|||||||
];
|
];
|
||||||
|
|
||||||
return response()->json($response, 422);
|
return response()->json($response, 422);
|
||||||
}
|
} 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())],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
event(new StoredTransactionGroup($transactionGroup));
|
return response()->json($response, 422);
|
||||||
|
}
|
||||||
|
app('preferences')->mark();
|
||||||
|
event(new StoredTransactionGroup($transactionGroup, $data['apply_rules'] ?? true));
|
||||||
|
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
/** @var User $admin */
|
/** @var User $admin */
|
||||||
@@ -338,7 +352,8 @@ class TransactionController extends Controller
|
|||||||
$transactionGroup = $this->groupRepository->update($transactionGroup, $data);
|
$transactionGroup = $this->groupRepository->update($transactionGroup, $data);
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
event(new UpdatedTransactionGroup($transactionGroup));
|
app('preferences')->mark();
|
||||||
|
event(new UpdatedTransactionGroup($transactionGroup, $data['apply_rules'] ?? true));
|
||||||
|
|
||||||
/** @var User $admin */
|
/** @var User $admin */
|
||||||
$admin = auth()->user();
|
$admin = auth()->user();
|
||||||
@@ -362,6 +377,5 @@ class TransactionController extends Controller
|
|||||||
$resource = new Item($selectedGroup, $transformer, 'transactions');
|
$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', 'application/vnd.api+json');
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* TransactionLinkController.php
|
* TransactionLinkController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -105,7 +105,7 @@ class TransactionLinkController extends Controller
|
|||||||
$name = $request->get('name');
|
$name = $request->get('name');
|
||||||
|
|
||||||
// types to get, page size:
|
// types to get, page size:
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$linkType = $this->repository->findByName($name);
|
$linkType = $this->repository->findByName($name);
|
||||||
|
|
||||||
// get list of transaction links. Count it and split it.
|
// get list of transaction links. Count it and split it.
|
||||||
@@ -155,8 +155,8 @@ class TransactionLinkController extends Controller
|
|||||||
*
|
*
|
||||||
* @param TransactionLinkRequest $request
|
* @param TransactionLinkRequest $request
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function store(TransactionLinkRequest $request): JsonResponse
|
public function store(TransactionLinkRequest $request): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -186,8 +186,8 @@ class TransactionLinkController extends Controller
|
|||||||
* @param TransactionLinkRequest $request
|
* @param TransactionLinkRequest $request
|
||||||
* @param TransactionJournalLink $journalLink
|
* @param TransactionJournalLink $journalLink
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function update(TransactionLinkRequest $request, TransactionJournalLink $journalLink): JsonResponse
|
public function update(TransactionLinkRequest $request, TransactionJournalLink $journalLink): JsonResponse
|
||||||
{
|
{
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* UserController.php
|
* UserController.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -70,9 +70,9 @@ class UserController extends Controller
|
|||||||
*
|
*
|
||||||
* @param User $user
|
* @param User $user
|
||||||
*
|
*
|
||||||
* @return JsonResponse
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function delete(User $user): JsonResponse
|
public function delete(User $user): JsonResponse
|
||||||
{
|
{
|
||||||
@@ -95,7 +95,7 @@ class UserController extends Controller
|
|||||||
public function index(): JsonResponse
|
public function index(): JsonResponse
|
||||||
{
|
{
|
||||||
// user preferences
|
// user preferences
|
||||||
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
$pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
|
||||||
$manager = $this->getManager();
|
$manager = $this->getManager();
|
||||||
|
|
||||||
// build collection
|
// build collection
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* AccountStoreRequest.php
|
* AccountStoreRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* AccountUpdateRequest.php
|
* AccountUpdateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* AttachmentStoreRequest.php
|
* AttachmentStoreRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -23,9 +23,6 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Api\V1\Requests;
|
namespace FireflyIII\Api\V1\Requests;
|
||||||
|
|
||||||
use FireflyIII\Models\Bill;
|
|
||||||
use FireflyIII\Models\ImportJob;
|
|
||||||
use FireflyIII\Models\TransactionJournal;
|
|
||||||
use FireflyIII\Rules\IsValidAttachmentModel;
|
use FireflyIII\Rules\IsValidAttachmentModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,8 +54,8 @@ class AttachmentStoreRequest extends Request
|
|||||||
'filename' => $this->string('filename'),
|
'filename' => $this->string('filename'),
|
||||||
'title' => $this->string('title'),
|
'title' => $this->string('title'),
|
||||||
'notes' => $this->nlString('notes'),
|
'notes' => $this->nlString('notes'),
|
||||||
'model' => $this->string('model'),
|
'model' => $this->string('attachable_type'),
|
||||||
'model_id' => $this->integer('model_id'),
|
'model_id' => $this->integer('attachable_id'),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,22 +66,22 @@ class AttachmentStoreRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$models = implode(
|
$models = config('firefly.valid_attachment_models');
|
||||||
',',
|
$models = array_map(
|
||||||
[
|
|
||||||
str_replace('FireflyIII\\Models\\', '', Bill::class),
|
static function (string $className) {
|
||||||
str_replace('FireflyIII\\Models\\', '', ImportJob::class),
|
return str_replace('FireflyIII\\Models\\', '', $className);
|
||||||
str_replace('FireflyIII\\Models\\', '', TransactionJournal::class),
|
}, $models
|
||||||
]
|
|
||||||
);
|
);
|
||||||
$model = $this->string('model');
|
$models = implode(',', $models);
|
||||||
|
$model = $this->string('attachable_type');
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'filename' => 'required|between:1,255',
|
'filename' => 'required|between:1,255',
|
||||||
'title' => 'between:1,255',
|
'title' => 'between:1,255',
|
||||||
'notes' => 'between:1,65000',
|
'notes' => 'between:1,65000',
|
||||||
'model' => sprintf('required|in:%s', $models),
|
'attachable_type' => sprintf('required|in:%s', $models),
|
||||||
'model_id' => ['required', 'numeric', new IsValidAttachmentModel($model)],
|
'attachable_id' => ['required', 'numeric', new IsValidAttachmentModel($model)],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* AttachmentUpdateRequest.php
|
* AttachmentUpdateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -52,8 +52,8 @@ class AttachmentUpdateRequest extends Request
|
|||||||
'filename' => $this->string('filename'),
|
'filename' => $this->string('filename'),
|
||||||
'title' => $this->string('title'),
|
'title' => $this->string('title'),
|
||||||
'notes' => $this->nlString('notes'),
|
'notes' => $this->nlString('notes'),
|
||||||
'model' => $this->string('model'),
|
'model' => $this->string('attachable_type'),
|
||||||
'model_id' => $this->integer('model_id'),
|
'model_id' => $this->integer('attachable_id'),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* AvailableBudgetRequest.php
|
* AvailableBudgetRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -64,15 +64,13 @@ class AvailableBudgetRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$rules = [
|
return [
|
||||||
'currency_id' => 'numeric|exists:transaction_currencies,id',
|
'currency_id' => 'numeric|exists:transaction_currencies,id',
|
||||||
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
|
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
|
||||||
'amount' => 'required|numeric|more:0',
|
'amount' => 'required|numeric|more:0',
|
||||||
'start' => 'required|date|before:end',
|
'start' => 'required|date|before:end',
|
||||||
'end' => 'required|date|after:start',
|
'end' => 'required|date|after:start',
|
||||||
];
|
];
|
||||||
|
|
||||||
return $rules;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* BillRequest.php
|
* BillRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -60,7 +60,7 @@ class BillRequest extends Request
|
|||||||
$active = $this->boolean('active');
|
$active = $this->boolean('active');
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = [
|
return [
|
||||||
'name' => $this->string('name'),
|
'name' => $this->string('name'),
|
||||||
'amount_min' => $this->string('amount_min'),
|
'amount_min' => $this->string('amount_min'),
|
||||||
'amount_max' => $this->string('amount_max'),
|
'amount_max' => $this->string('amount_max'),
|
||||||
@@ -72,8 +72,6 @@ class BillRequest extends Request
|
|||||||
'active' => $active,
|
'active' => $active,
|
||||||
'notes' => $this->nlString('notes'),
|
'notes' => $this->nlString('notes'),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -121,10 +119,10 @@ class BillRequest extends Request
|
|||||||
$validator->after(
|
$validator->after(
|
||||||
static function (Validator $validator) {
|
static function (Validator $validator) {
|
||||||
$data = $validator->getData();
|
$data = $validator->getData();
|
||||||
$min = (float)($data['amount_min'] ?? 0);
|
$min = (float) ($data['amount_min'] ?? 0);
|
||||||
$max = (float)($data['amount_max'] ?? 0);
|
$max = (float) ($data['amount_max'] ?? 0);
|
||||||
if ($min > $max) {
|
if ($min > $max) {
|
||||||
$validator->errors()->add('amount_min', (string)trans('validation.amount_min_over_max'));
|
$validator->errors()->add('amount_min', (string) trans('validation.amount_min_over_max'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* BudgetLimitRequest.php
|
* BudgetLimitRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,91 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* BudgetRequest.php
|
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
|
||||||
*
|
|
||||||
* 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\Budget;
|
|
||||||
use FireflyIII\Rules\IsBoolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class BudgetRequest
|
|
||||||
*
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
* TODO AFTER 4.8,0: split this into two request classes.
|
|
||||||
*/
|
|
||||||
class BudgetRequest extends Request
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 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
|
|
||||||
{
|
|
||||||
$active = true;
|
|
||||||
if (null !== $this->get('active')) {
|
|
||||||
$active = $this->boolean('active');
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
|
||||||
'name' => $this->string('name'),
|
|
||||||
'active' => $active,
|
|
||||||
'order' => 0,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The rules that the incoming request must be matched against.
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function rules(): array
|
|
||||||
{
|
|
||||||
$rules = [
|
|
||||||
'name' => 'required|between:1,100|uniqueObjectForUser:budgets,name',
|
|
||||||
'active' => [new IsBoolean],
|
|
||||||
];
|
|
||||||
switch ($this->method()) {
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
case 'PUT':
|
|
||||||
case 'PATCH':
|
|
||||||
/** @var Budget $budget */
|
|
||||||
$budget = $this->route()->parameter('budget');
|
|
||||||
$rules['name'] = sprintf('required|between:1,100|uniqueObjectForUser:budgets,name,%d', $budget->id);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $rules;
|
|
||||||
}
|
|
||||||
}
|
|
106
app/Api/V1/Requests/BudgetStoreRequest.php
Normal file
106
app/Api/V1/Requests/BudgetStoreRequest.php
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* BudgetStoreRequest.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 Illuminate\Validation\Validator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class BudgetStoreRequest
|
||||||
|
*
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
class BudgetStoreRequest extends Request
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
{
|
||||||
|
$active = true;
|
||||||
|
if (null !== $this->get('active')) {
|
||||||
|
$active = $this->boolean('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'name' => $this->string('name'),
|
||||||
|
'active' => $active,
|
||||||
|
'order' => 0,
|
||||||
|
'auto_budget_type' => $this->string('auto_budget_type'),
|
||||||
|
'transaction_currency_id' => $this->integer('auto_budget_currency_id'),
|
||||||
|
'transaction_currency_code' => $this->string('auto_budget_currency_code'),
|
||||||
|
'auto_budget_amount' => $this->string('auto_budget_amount'),
|
||||||
|
'auto_budget_period' => $this->string('auto_budget_period'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The rules that the incoming request must be matched against.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|between:1,100|uniqueObjectForUser:budgets,name',
|
||||||
|
'active' => [new IsBoolean],
|
||||||
|
'auto_budget_type' => 'in:reset,rollover,none',
|
||||||
|
'auto_budget_currency_id' => 'exists:transaction_currencies,id',
|
||||||
|
'auto_budget_currency_code' => 'exists:transaction_currencies,code',
|
||||||
|
'auto_budget_amount' => 'min:0|max:1000000000',
|
||||||
|
'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the validator instance with special rules for after the basic validation rules.
|
||||||
|
*
|
||||||
|
* @param Validator $validator
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function withValidator(Validator $validator): void
|
||||||
|
{
|
||||||
|
$validator->after(
|
||||||
|
function (Validator $validator) {
|
||||||
|
// validate all account info
|
||||||
|
$this->validateAutoBudgetAmount($validator);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
107
app/Api/V1/Requests/BudgetUpdateRequest.php
Normal file
107
app/Api/V1/Requests/BudgetUpdateRequest.php
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* BudgetUpdateRequest.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 Illuminate\Validation\Validator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class BudgetUpdateRequest
|
||||||
|
*
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
class BudgetUpdateRequest extends Request
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
{
|
||||||
|
$active = true;
|
||||||
|
if (null !== $this->get('active')) {
|
||||||
|
$active = $this->boolean('active');
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'name' => $this->string('name'),
|
||||||
|
'active' => $active,
|
||||||
|
'order' => 0,
|
||||||
|
'auto_budget_type' => $this->string('auto_budget_type'),
|
||||||
|
'transaction_currency_id' => $this->integer('auto_budget_currency_id'),
|
||||||
|
'transaction_currency_code' => $this->string('auto_budget_currency_code'),
|
||||||
|
'auto_budget_amount' => $this->string('auto_budget_amount'),
|
||||||
|
'auto_budget_period' => $this->string('auto_budget_period'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The rules that the incoming request must be matched against.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
$budget = $this->route()->parameter('budget');
|
||||||
|
|
||||||
|
return [
|
||||||
|
'name' => sprintf('required|between:1,100|uniqueObjectForUser:budgets,name,%d', $budget->id),
|
||||||
|
'active' => [new IsBoolean],
|
||||||
|
'auto_budget_type' => 'in:reset,rollover,none',
|
||||||
|
'auto_budget_currency_id' => 'exists:transaction_currencies,id',
|
||||||
|
'auto_budget_currency_code' => 'exists:transaction_currencies,code',
|
||||||
|
'auto_budget_amount' => 'min:0|max:1000000000',
|
||||||
|
'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the validator instance with special rules for after the basic validation rules.
|
||||||
|
*
|
||||||
|
* @param Validator $validator
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function withValidator(Validator $validator): void
|
||||||
|
{
|
||||||
|
$validator->after(
|
||||||
|
function (Validator $validator) {
|
||||||
|
// validate all account info
|
||||||
|
$this->validateAutoBudgetAmount($validator);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CategoryRequest.php
|
* CategoryRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* ConfigurationRequest.php
|
* ConfigurationRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CurrencyRequest.php
|
* CurrencyRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* DateRequest.php
|
* DateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* LinkTypeRequest.php
|
* LinkTypeRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* PiggyBankRequest.php
|
* PiggyBankRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* PreferenceRequest.php
|
* PreferenceRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RecurrenceStoreRequest.php
|
* RecurrenceStoreRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests;
|
|||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Rules\BelongsUser;
|
use FireflyIII\Rules\BelongsUser;
|
||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
|
use FireflyIII\Validation\CurrencyValidation;
|
||||||
use FireflyIII\Validation\RecurrenceValidation;
|
use FireflyIII\Validation\RecurrenceValidation;
|
||||||
use FireflyIII\Validation\TransactionValidation;
|
use FireflyIII\Validation\TransactionValidation;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
@@ -35,7 +36,7 @@ use Illuminate\Validation\Validator;
|
|||||||
*/
|
*/
|
||||||
class RecurrenceStoreRequest extends Request
|
class RecurrenceStoreRequest extends Request
|
||||||
{
|
{
|
||||||
use RecurrenceValidation, TransactionValidation;
|
use RecurrenceValidation, TransactionValidation, CurrencyValidation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
@@ -63,7 +64,8 @@ class RecurrenceStoreRequest extends Request
|
|||||||
if (null !== $this->get('apply_rules')) {
|
if (null !== $this->get('apply_rules')) {
|
||||||
$applyRules = $this->boolean('apply_rules');
|
$applyRules = $this->boolean('apply_rules');
|
||||||
}
|
}
|
||||||
$return = [
|
|
||||||
|
return [
|
||||||
'recurrence' => [
|
'recurrence' => [
|
||||||
'type' => $this->string('type'),
|
'type' => $this->string('type'),
|
||||||
'title' => $this->string('title'),
|
'title' => $this->string('title'),
|
||||||
@@ -77,8 +79,6 @@ class RecurrenceStoreRequest extends Request
|
|||||||
'transactions' => $this->getTransactionData(),
|
'transactions' => $this->getTransactionData(),
|
||||||
'repetitions' => $this->getRepetitionData(),
|
'repetitions' => $this->getRepetitionData(),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -168,8 +168,8 @@ class RecurrenceStoreRequest extends Request
|
|||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $repetition['type'],
|
'type' => $repetition['type'],
|
||||||
'moment' => $repetition['moment'],
|
'moment' => $repetition['moment'],
|
||||||
'skip' => (int)$repetition['skip'],
|
'skip' => (int) $repetition['skip'],
|
||||||
'weekend' => (int)$repetition['weekend'],
|
'weekend' => (int) $repetition['weekend'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,29 +193,7 @@ class RecurrenceStoreRequest extends Request
|
|||||||
}
|
}
|
||||||
/** @var array $transaction */
|
/** @var array $transaction */
|
||||||
foreach ($transactions as $transaction) {
|
foreach ($transactions as $transaction) {
|
||||||
$return[] = [
|
$return[] = $this->getSingleRecurrenceData($transaction);
|
||||||
'amount' => $transaction['amount'],
|
|
||||||
'currency_id' => isset($transaction['currency_id']) ? (int)$transaction['currency_id'] : null,
|
|
||||||
'currency_code' => $transaction['currency_code'] ?? null,
|
|
||||||
'foreign_amount' => $transaction['foreign_amount'] ?? null,
|
|
||||||
'foreign_currency_id' => isset($transaction['foreign_currency_id']) ? (int)$transaction['foreign_currency_id'] : null,
|
|
||||||
'foreign_currency_code' => $transaction['foreign_currency_code'] ?? null,
|
|
||||||
'source_id' => isset($transaction['source_id']) ? (int)$transaction['source_id'] : null,
|
|
||||||
'source_name' => isset($transaction['source_name']) ? (string)$transaction['source_name'] : null,
|
|
||||||
'destination_id' => isset($transaction['destination_id']) ? (int)$transaction['destination_id'] : null,
|
|
||||||
'destination_name' => isset($transaction['destination_name']) ? (string)$transaction['destination_name'] : null,
|
|
||||||
'description' => $transaction['description'],
|
|
||||||
'type' => $this->string('type'),
|
|
||||||
|
|
||||||
// new and updated fields:
|
|
||||||
'piggy_bank_id' => isset($transaction['piggy_bank_id']) ? (int)$transaction['piggy_bank_id'] : null,
|
|
||||||
'piggy_bank_name' => $transaction['piggy_bank_name'] ?? null,
|
|
||||||
'tags' => $transaction['tags'] ?? [],
|
|
||||||
'budget_id' => isset($transaction['budget_id']) ? (int)$transaction['budget_id'] : null,
|
|
||||||
'budget_name' => $transaction['budget_name'] ?? null,
|
|
||||||
'category_id' => isset($transaction['category_id']) ? (int)$transaction['category_id'] : null,
|
|
||||||
'category_name' => $transaction['category_name'] ?? null,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RecurrenceUpdateRequest.php
|
* RecurrenceUpdateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests;
|
|||||||
use FireflyIII\Models\Recurrence;
|
use FireflyIII\Models\Recurrence;
|
||||||
use FireflyIII\Rules\BelongsUser;
|
use FireflyIII\Rules\BelongsUser;
|
||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
|
use FireflyIII\Validation\CurrencyValidation;
|
||||||
use FireflyIII\Validation\RecurrenceValidation;
|
use FireflyIII\Validation\RecurrenceValidation;
|
||||||
use FireflyIII\Validation\TransactionValidation;
|
use FireflyIII\Validation\TransactionValidation;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
@@ -35,7 +36,7 @@ use Illuminate\Validation\Validator;
|
|||||||
*/
|
*/
|
||||||
class RecurrenceUpdateRequest extends Request
|
class RecurrenceUpdateRequest extends Request
|
||||||
{
|
{
|
||||||
use RecurrenceValidation, TransactionValidation;
|
use RecurrenceValidation, TransactionValidation, CurrencyValidation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
@@ -63,7 +64,8 @@ class RecurrenceUpdateRequest extends Request
|
|||||||
if (null !== $this->get('apply_rules')) {
|
if (null !== $this->get('apply_rules')) {
|
||||||
$applyRules = $this->boolean('apply_rules');
|
$applyRules = $this->boolean('apply_rules');
|
||||||
}
|
}
|
||||||
$return = [
|
|
||||||
|
return [
|
||||||
'recurrence' => [
|
'recurrence' => [
|
||||||
'type' => $this->nullableString('type'),
|
'type' => $this->nullableString('type'),
|
||||||
'title' => $this->nullableString('title'),
|
'title' => $this->nullableString('title'),
|
||||||
@@ -78,8 +80,6 @@ class RecurrenceUpdateRequest extends Request
|
|||||||
'transactions' => $this->getTransactionData(),
|
'transactions' => $this->getTransactionData(),
|
||||||
'repetitions' => $this->getRepetitionData(),
|
'repetitions' => $this->getRepetitionData(),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -141,7 +141,7 @@ class RecurrenceUpdateRequest extends Request
|
|||||||
{
|
{
|
||||||
$validator->after(
|
$validator->after(
|
||||||
function (Validator $validator) {
|
function (Validator $validator) {
|
||||||
$this->validateOneRecurrenceTransactionUpdate($validator);
|
$this->validateOneRecurrenceTransaction($validator);
|
||||||
$this->validateOneRepetitionUpdate($validator);
|
$this->validateOneRepetitionUpdate($validator);
|
||||||
$this->validateRecurrenceRepetition($validator);
|
$this->validateRecurrenceRepetition($validator);
|
||||||
$this->validateRepetitionMoment($validator);
|
$this->validateRepetitionMoment($validator);
|
||||||
@@ -170,8 +170,8 @@ class RecurrenceUpdateRequest extends Request
|
|||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $repetition['type'],
|
'type' => $repetition['type'],
|
||||||
'moment' => $repetition['moment'],
|
'moment' => $repetition['moment'],
|
||||||
'skip' => (int)$repetition['skip'],
|
'skip' => (int) $repetition['skip'],
|
||||||
'weekend' => (int)$repetition['weekend'],
|
'weekend' => (int) $repetition['weekend'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,29 +195,7 @@ class RecurrenceUpdateRequest extends Request
|
|||||||
}
|
}
|
||||||
/** @var array $transaction */
|
/** @var array $transaction */
|
||||||
foreach ($transactions as $transaction) {
|
foreach ($transactions as $transaction) {
|
||||||
$return[] = [
|
$return[] = $this->getSingleRecurrenceData($transaction);
|
||||||
'amount' => $transaction['amount'],
|
|
||||||
'currency_id' => isset($transaction['currency_id']) ? (int)$transaction['currency_id'] : null,
|
|
||||||
'currency_code' => $transaction['currency_code'] ?? null,
|
|
||||||
'foreign_amount' => $transaction['foreign_amount'] ?? null,
|
|
||||||
'foreign_currency_id' => isset($transaction['foreign_currency_id']) ? (int)$transaction['foreign_currency_id'] : null,
|
|
||||||
'foreign_currency_code' => $transaction['foreign_currency_code'] ?? null,
|
|
||||||
'source_id' => isset($transaction['source_id']) ? (int)$transaction['source_id'] : null,
|
|
||||||
'source_name' => isset($transaction['source_name']) ? (string)$transaction['source_name'] : null,
|
|
||||||
'destination_id' => isset($transaction['destination_id']) ? (int)$transaction['destination_id'] : null,
|
|
||||||
'destination_name' => isset($transaction['destination_name']) ? (string)$transaction['destination_name'] : null,
|
|
||||||
'description' => $transaction['description'],
|
|
||||||
'type' => $this->string('type'),
|
|
||||||
|
|
||||||
// new and updated fields:
|
|
||||||
'piggy_bank_id' => isset($transaction['piggy_bank_id']) ? (int)$transaction['piggy_bank_id'] : null,
|
|
||||||
'piggy_bank_name' => $transaction['piggy_bank_name'] ?? null,
|
|
||||||
'tags' => $transaction['tags'] ?? [],
|
|
||||||
'budget_id' => isset($transaction['budget_id']) ? (int)$transaction['budget_id'] : null,
|
|
||||||
'budget_name' => $transaction['budget_name'] ?? null,
|
|
||||||
'category_id' => isset($transaction['category_id']) ? (int)$transaction['category_id'] : null,
|
|
||||||
'category_name' => $transaction['category_name'] ?? null,
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Request.php
|
* Request.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -34,4 +34,36 @@ use FireflyIII\Http\Requests\Request as FireflyIIIRequest;
|
|||||||
*/
|
*/
|
||||||
class Request extends FireflyIIIRequest
|
class Request extends FireflyIIIRequest
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param array $transaction
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function getSingleRecurrenceData(array $transaction): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'amount' => $transaction['amount'],
|
||||||
|
'currency_id' => isset($transaction['currency_id']) ? (int) $transaction['currency_id'] : null,
|
||||||
|
'currency_code' => $transaction['currency_code'] ?? null,
|
||||||
|
'foreign_amount' => $transaction['foreign_amount'] ?? null,
|
||||||
|
'foreign_currency_id' => isset($transaction['foreign_currency_id']) ? (int) $transaction['foreign_currency_id'] : null,
|
||||||
|
'foreign_currency_code' => $transaction['foreign_currency_code'] ?? null,
|
||||||
|
'source_id' => isset($transaction['source_id']) ? (int) $transaction['source_id'] : null,
|
||||||
|
'source_name' => isset($transaction['source_name']) ? (string) $transaction['source_name'] : null,
|
||||||
|
'destination_id' => isset($transaction['destination_id']) ? (int) $transaction['destination_id'] : null,
|
||||||
|
'destination_name' => isset($transaction['destination_name']) ? (string) $transaction['destination_name'] : null,
|
||||||
|
'description' => $transaction['description'],
|
||||||
|
'type' => $this->string('type'),
|
||||||
|
|
||||||
|
// new and updated fields:
|
||||||
|
'piggy_bank_id' => isset($transaction['piggy_bank_id']) ? (int) $transaction['piggy_bank_id'] : null,
|
||||||
|
'piggy_bank_name' => $transaction['piggy_bank_name'] ?? null,
|
||||||
|
'tags' => $transaction['tags'] ?? [],
|
||||||
|
'budget_id' => isset($transaction['budget_id']) ? (int) $transaction['budget_id'] : null,
|
||||||
|
'budget_name' => $transaction['budget_name'] ?? null,
|
||||||
|
'category_id' => isset($transaction['category_id']) ? (int) $transaction['category_id'] : null,
|
||||||
|
'category_name' => $transaction['category_name'] ?? null,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RuleGroupRequest.php
|
* RuleGroupRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* RuleGroupTestRequest.php
|
* RuleGroupTestRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -54,7 +54,7 @@ class RuleGroupTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function getTestParameters(): array
|
public function getTestParameters(): array
|
||||||
{
|
{
|
||||||
$return = [
|
return [
|
||||||
'page' => $this->getPage(),
|
'page' => $this->getPage(),
|
||||||
'start_date' => $this->getDate('start_date'),
|
'start_date' => $this->getDate('start_date'),
|
||||||
'end_date' => $this->getDate('end_date'),
|
'end_date' => $this->getDate('end_date'),
|
||||||
@@ -62,9 +62,6 @@ class RuleGroupTestRequest extends Request
|
|||||||
'trigger_limit' => $this->getTriggerLimit(),
|
'trigger_limit' => $this->getTriggerLimit(),
|
||||||
'accounts' => $this->getAccounts(),
|
'accounts' => $this->getAccounts(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,7 +77,7 @@ class RuleGroupTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getAccounts(): Collection
|
private function getAccounts(): Collection
|
||||||
{
|
{
|
||||||
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
||||||
$accounts = new Collection;
|
$accounts = new Collection;
|
||||||
|
|
||||||
/** @var AccountRepositoryInterface $accountRepository */
|
/** @var AccountRepositoryInterface $accountRepository */
|
||||||
@@ -88,7 +85,7 @@ class RuleGroupTestRequest extends Request
|
|||||||
|
|
||||||
foreach ($accountList as $accountId) {
|
foreach ($accountList as $accountId) {
|
||||||
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
||||||
$account = $accountRepository->findNull((int)$accountId);
|
$account = $accountRepository->findNull((int) $accountId);
|
||||||
if ($this->validAccount($account)) {
|
if ($this->validAccount($account)) {
|
||||||
/** @noinspection NullPointerExceptionInspection */
|
/** @noinspection NullPointerExceptionInspection */
|
||||||
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
||||||
@@ -117,7 +114,7 @@ class RuleGroupTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getPage(): int
|
private function getPage(): int
|
||||||
{
|
{
|
||||||
return 0 === (int)$this->query('page') ? 1 : (int)$this->query('page');
|
return 0 === (int) $this->query('page') ? 1 : (int) $this->query('page');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +123,7 @@ class RuleGroupTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getSearchLimit(): int
|
private function getSearchLimit(): int
|
||||||
{
|
{
|
||||||
return 0 === (int)$this->query('search_limit') ? (int)config('firefly.test-triggers.limit') : (int)$this->query('search_limit');
|
return 0 === (int) $this->query('search_limit') ? (int) config('firefly.test-triggers.limit') : (int) $this->query('search_limit');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -134,7 +131,7 @@ class RuleGroupTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getTriggerLimit(): int
|
private function getTriggerLimit(): int
|
||||||
{
|
{
|
||||||
return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit');
|
return 0 === (int) $this->query('triggered_limit') ? (int) config('firefly.test-triggers.range') : (int) $this->query('triggered_limit');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* RuleGroupTriggerRequest.php
|
* RuleGroupTriggerRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -54,14 +54,11 @@ class RuleGroupTriggerRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function getTriggerParameters(): array
|
public function getTriggerParameters(): array
|
||||||
{
|
{
|
||||||
$return = [
|
return [
|
||||||
'start_date' => $this->getDate('start_date'),
|
'start_date' => $this->getDate('start_date'),
|
||||||
'end_date' => $this->getDate('end_date'),
|
'end_date' => $this->getDate('end_date'),
|
||||||
'accounts' => $this->getAccounts(),
|
'accounts' => $this->getAccounts(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,7 +77,7 @@ class RuleGroupTriggerRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getAccounts(): Collection
|
private function getAccounts(): Collection
|
||||||
{
|
{
|
||||||
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
||||||
$accounts = new Collection;
|
$accounts = new Collection;
|
||||||
|
|
||||||
/** @var AccountRepositoryInterface $accountRepository */
|
/** @var AccountRepositoryInterface $accountRepository */
|
||||||
@@ -88,7 +85,7 @@ class RuleGroupTriggerRequest extends Request
|
|||||||
|
|
||||||
foreach ($accountList as $accountId) {
|
foreach ($accountList as $accountId) {
|
||||||
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
||||||
$account = $accountRepository->findNull((int)$accountId);
|
$account = $accountRepository->findNull((int) $accountId);
|
||||||
if ($this->validAccount($account)) {
|
if ($this->validAccount($account)) {
|
||||||
/** @noinspection NullPointerExceptionInspection */
|
/** @noinspection NullPointerExceptionInspection */
|
||||||
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RuleStoreRequest.php
|
* RuleStoreRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -65,7 +65,7 @@ class RuleStoreRequest extends Request
|
|||||||
$stopProcessing = $this->boolean('stop_processing');
|
$stopProcessing = $this->boolean('stop_processing');
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = [
|
return [
|
||||||
'title' => $this->string('title'),
|
'title' => $this->string('title'),
|
||||||
'description' => $this->string('description'),
|
'description' => $this->string('description'),
|
||||||
'rule_group_id' => $this->integer('rule_group_id'),
|
'rule_group_id' => $this->integer('rule_group_id'),
|
||||||
@@ -77,8 +77,6 @@ class RuleStoreRequest extends Request
|
|||||||
'triggers' => $this->getRuleTriggers(),
|
'triggers' => $this->getRuleTriggers(),
|
||||||
'actions' => $this->getRuleActions(),
|
'actions' => $this->getRuleActions(),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -94,7 +92,8 @@ class RuleStoreRequest extends Request
|
|||||||
// some triggers and actions require text:
|
// some triggers and actions require text:
|
||||||
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
|
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
|
||||||
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
||||||
$rules = [
|
|
||||||
|
return [
|
||||||
'title' => 'required|between:1,100|uniqueObjectForUser:rules,title',
|
'title' => 'required|between:1,100|uniqueObjectForUser:rules,title',
|
||||||
'description' => 'between:1,5000|nullable',
|
'description' => 'between:1,5000|nullable',
|
||||||
'rule_group_id' => 'required|belongsToUser:rule_groups|required_without:rule_group_title',
|
'rule_group_id' => 'required|belongsToUser:rule_groups|required_without:rule_group_title',
|
||||||
@@ -112,8 +111,6 @@ class RuleStoreRequest extends Request
|
|||||||
'stop_processing' => [new IsBoolean],
|
'stop_processing' => [new IsBoolean],
|
||||||
'active' => [new IsBoolean],
|
'active' => [new IsBoolean],
|
||||||
];
|
];
|
||||||
|
|
||||||
return $rules;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -144,7 +141,7 @@ class RuleStoreRequest extends Request
|
|||||||
$actions = $data['actions'] ?? [];
|
$actions = $data['actions'] ?? [];
|
||||||
// need at least one trigger
|
// need at least one trigger
|
||||||
if (0 === count($actions)) {
|
if (0 === count($actions)) {
|
||||||
$validator->errors()->add('title', (string)trans('validation.at_least_one_action'));
|
$validator->errors()->add('title', (string) trans('validation.at_least_one_action'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +156,7 @@ class RuleStoreRequest extends Request
|
|||||||
$triggers = $data['triggers'] ?? [];
|
$triggers = $data['triggers'] ?? [];
|
||||||
// need at least one trigger
|
// need at least one trigger
|
||||||
if (0 === count($triggers)) {
|
if (0 === count($triggers)) {
|
||||||
$validator->errors()->add('title', (string)trans('validation.at_least_one_trigger'));
|
$validator->errors()->add('title', (string) trans('validation.at_least_one_trigger'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,8 +172,8 @@ class RuleStoreRequest extends Request
|
|||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $action['type'],
|
'type' => $action['type'],
|
||||||
'value' => $action['value'],
|
'value' => $action['value'],
|
||||||
'active' => $this->convertBoolean((string)($action['active'] ?? 'false')),
|
'active' => $this->convertBoolean((string) ($action['active'] ?? 'false')),
|
||||||
'stop_processing' => $this->convertBoolean((string)($action['stop_processing'] ?? 'false')),
|
'stop_processing' => $this->convertBoolean((string) ($action['stop_processing'] ?? 'false')),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -196,8 +193,8 @@ class RuleStoreRequest extends Request
|
|||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $trigger['type'],
|
'type' => $trigger['type'],
|
||||||
'value' => $trigger['value'],
|
'value' => $trigger['value'],
|
||||||
'active' => $this->convertBoolean((string)($trigger['active'] ?? 'false')),
|
'active' => $this->convertBoolean((string) ($trigger['active'] ?? 'false')),
|
||||||
'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')),
|
'stop_processing' => $this->convertBoolean((string) ($trigger['stop_processing'] ?? 'false')),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* RuleTestRequest.php
|
* RuleTestRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -54,7 +54,7 @@ class RuleTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function getTestParameters(): array
|
public function getTestParameters(): array
|
||||||
{
|
{
|
||||||
$return = [
|
return [
|
||||||
'page' => $this->getPage(),
|
'page' => $this->getPage(),
|
||||||
'start_date' => $this->getDate('start_date'),
|
'start_date' => $this->getDate('start_date'),
|
||||||
'end_date' => $this->getDate('end_date'),
|
'end_date' => $this->getDate('end_date'),
|
||||||
@@ -62,9 +62,6 @@ class RuleTestRequest extends Request
|
|||||||
'trigger_limit' => $this->getTriggerLimit(),
|
'trigger_limit' => $this->getTriggerLimit(),
|
||||||
'accounts' => $this->getAccounts(),
|
'accounts' => $this->getAccounts(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,7 +77,7 @@ class RuleTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getAccounts(): Collection
|
private function getAccounts(): Collection
|
||||||
{
|
{
|
||||||
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
||||||
$accounts = new Collection;
|
$accounts = new Collection;
|
||||||
|
|
||||||
/** @var AccountRepositoryInterface $accountRepository */
|
/** @var AccountRepositoryInterface $accountRepository */
|
||||||
@@ -88,7 +85,7 @@ class RuleTestRequest extends Request
|
|||||||
|
|
||||||
foreach ($accountList as $accountId) {
|
foreach ($accountList as $accountId) {
|
||||||
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
||||||
$account = $accountRepository->findNull((int)$accountId);
|
$account = $accountRepository->findNull((int) $accountId);
|
||||||
if ($this->validAccount($account)) {
|
if ($this->validAccount($account)) {
|
||||||
/** @noinspection NullPointerExceptionInspection */
|
/** @noinspection NullPointerExceptionInspection */
|
||||||
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
||||||
@@ -117,7 +114,7 @@ class RuleTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getPage(): int
|
private function getPage(): int
|
||||||
{
|
{
|
||||||
return 0 === (int)$this->query('page') ? 1 : (int)$this->query('page');
|
return 0 === (int) $this->query('page') ? 1 : (int) $this->query('page');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +123,7 @@ class RuleTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getSearchLimit(): int
|
private function getSearchLimit(): int
|
||||||
{
|
{
|
||||||
return 0 === (int)$this->query('search_limit') ? (int)config('firefly.test-triggers.limit') : (int)$this->query('search_limit');
|
return 0 === (int) $this->query('search_limit') ? (int) config('firefly.test-triggers.limit') : (int) $this->query('search_limit');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -134,7 +131,7 @@ class RuleTestRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getTriggerLimit(): int
|
private function getTriggerLimit(): int
|
||||||
{
|
{
|
||||||
return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit');
|
return 0 === (int) $this->query('triggered_limit') ? (int) config('firefly.test-triggers.range') : (int) $this->query('triggered_limit');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* RuleTriggerRequest.php
|
* RuleTriggerRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -53,14 +53,11 @@ class RuleTriggerRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function getTriggerParameters(): array
|
public function getTriggerParameters(): array
|
||||||
{
|
{
|
||||||
$return = [
|
return [
|
||||||
'start_date' => $this->getDate('start_date'),
|
'start_date' => $this->getDate('start_date'),
|
||||||
'end_date' => $this->getDate('end_date'),
|
'end_date' => $this->getDate('end_date'),
|
||||||
'accounts' => $this->getAccounts(),
|
'accounts' => $this->getAccounts(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,7 +76,7 @@ class RuleTriggerRequest extends Request
|
|||||||
*/
|
*/
|
||||||
private function getAccounts(): Collection
|
private function getAccounts(): Collection
|
||||||
{
|
{
|
||||||
$accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
$accountList = '' === (string) $this->query('accounts') ? [] : explode(',', $this->query('accounts'));
|
||||||
$accounts = new Collection;
|
$accounts = new Collection;
|
||||||
|
|
||||||
/** @var AccountRepositoryInterface $accountRepository */
|
/** @var AccountRepositoryInterface $accountRepository */
|
||||||
@@ -87,7 +84,7 @@ class RuleTriggerRequest extends Request
|
|||||||
|
|
||||||
foreach ($accountList as $accountId) {
|
foreach ($accountList as $accountId) {
|
||||||
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
Log::debug(sprintf('Searching for asset account with id "%s"', $accountId));
|
||||||
$account = $accountRepository->findNull((int)$accountId);
|
$account = $accountRepository->findNull((int) $accountId);
|
||||||
if ($this->validAccount($account)) {
|
if ($this->validAccount($account)) {
|
||||||
/** @noinspection NullPointerExceptionInspection */
|
/** @noinspection NullPointerExceptionInspection */
|
||||||
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name));
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RuleUpdateRequest.php
|
* RuleUpdateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -65,7 +65,7 @@ class RuleUpdateRequest extends Request
|
|||||||
$stopProcessing = $this->boolean('stop_processing');
|
$stopProcessing = $this->boolean('stop_processing');
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = [
|
return [
|
||||||
'title' => $this->nullableString('title'),
|
'title' => $this->nullableString('title'),
|
||||||
'description' => $this->nullableString('description'),
|
'description' => $this->nullableString('description'),
|
||||||
'rule_group_id' => $this->nullableInteger('rule_group_id'),
|
'rule_group_id' => $this->nullableInteger('rule_group_id'),
|
||||||
@@ -77,8 +77,6 @@ class RuleUpdateRequest extends Request
|
|||||||
'triggers' => $this->getRuleTriggers(),
|
'triggers' => $this->getRuleTriggers(),
|
||||||
'actions' => $this->getRuleActions(),
|
'actions' => $this->getRuleActions(),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -95,7 +93,8 @@ class RuleUpdateRequest extends Request
|
|||||||
// some triggers and actions require text:
|
// some triggers and actions require text:
|
||||||
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
|
$contextTriggers = implode(',', config('firefly.context-rule-triggers'));
|
||||||
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
$contextActions = implode(',', config('firefly.context-rule-actions'));
|
||||||
$rules = [
|
|
||||||
|
return [
|
||||||
'title' => sprintf('between:1,100|uniqueObjectForUser:rules,title,%d', $rule->id),
|
'title' => sprintf('between:1,100|uniqueObjectForUser:rules,title,%d', $rule->id),
|
||||||
'description' => 'between:1,5000|nullable',
|
'description' => 'between:1,5000|nullable',
|
||||||
'rule_group_id' => 'belongsToUser:rule_groups',
|
'rule_group_id' => 'belongsToUser:rule_groups',
|
||||||
@@ -113,8 +112,6 @@ class RuleUpdateRequest extends Request
|
|||||||
'stop_processing' => [new IsBoolean],
|
'stop_processing' => [new IsBoolean],
|
||||||
'active' => [new IsBoolean],
|
'active' => [new IsBoolean],
|
||||||
];
|
];
|
||||||
|
|
||||||
return $rules;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -145,7 +142,7 @@ class RuleUpdateRequest extends Request
|
|||||||
$actions = $data['actions'] ?? null;
|
$actions = $data['actions'] ?? null;
|
||||||
// need at least one action
|
// need at least one action
|
||||||
if (is_array($actions) && 0 === count($actions)) {
|
if (is_array($actions) && 0 === count($actions)) {
|
||||||
$validator->errors()->add('title', (string)trans('validation.at_least_one_action'));
|
$validator->errors()->add('title', (string) trans('validation.at_least_one_action'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,7 +157,7 @@ class RuleUpdateRequest extends Request
|
|||||||
$triggers = $data['triggers'] ?? null;
|
$triggers = $data['triggers'] ?? null;
|
||||||
// need at least one trigger
|
// need at least one trigger
|
||||||
if (is_array($triggers) && 0 === count($triggers)) {
|
if (is_array($triggers) && 0 === count($triggers)) {
|
||||||
$validator->errors()->add('title', (string)trans('validation.at_least_one_trigger'));
|
$validator->errors()->add('title', (string) trans('validation.at_least_one_trigger'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,8 +176,8 @@ class RuleUpdateRequest extends Request
|
|||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $action['type'],
|
'type' => $action['type'],
|
||||||
'value' => $action['value'],
|
'value' => $action['value'],
|
||||||
'active' => $this->convertBoolean((string)($action['active'] ?? 'false')),
|
'active' => $this->convertBoolean((string) ($action['active'] ?? 'false')),
|
||||||
'stop_processing' => $this->convertBoolean((string)($action['stop_processing'] ?? 'false')),
|
'stop_processing' => $this->convertBoolean((string) ($action['stop_processing'] ?? 'false')),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,8 +200,8 @@ class RuleUpdateRequest extends Request
|
|||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $trigger['type'],
|
'type' => $trigger['type'],
|
||||||
'value' => $trigger['value'],
|
'value' => $trigger['value'],
|
||||||
'active' => $this->convertBoolean((string)($trigger['active'] ?? 'false')),
|
'active' => $this->convertBoolean((string) ($trigger['active'] ?? 'false')),
|
||||||
'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')),
|
'stop_processing' => $this->convertBoolean((string) ($trigger['stop_processing'] ?? 'false')),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* TransferRequest.php
|
* TransferRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -21,7 +22,6 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Api\V1\Requests\Search;
|
namespace FireflyIII\Api\V1\Requests\Search;
|
||||||
|
|
||||||
|
|
||||||
use FireflyIII\Api\V1\Requests\Request;
|
use FireflyIII\Api\V1\Requests\Request;
|
||||||
use FireflyIII\Rules\IsTransferAccount;
|
use FireflyIII\Rules\IsTransferAccount;
|
||||||
|
|
||||||
@@ -54,5 +54,4 @@ class TransferRequest extends Request
|
|||||||
'date' => 'required|date',
|
'date' => 'required|date',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* TagStoreRequest.php
|
* TagStoreRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TagUpdateRequest.php
|
* TagUpdateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* TransactionLinkRequest.php
|
* TransactionLinkRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -110,8 +110,8 @@ class TransactionLinkRequest extends Request
|
|||||||
$journalRepos->setUser($user);
|
$journalRepos->setUser($user);
|
||||||
|
|
||||||
$data = $validator->getData();
|
$data = $validator->getData();
|
||||||
$inwardId = (int)($data['inward_id'] ?? 0);
|
$inwardId = (int) ($data['inward_id'] ?? 0);
|
||||||
$outwardId = (int)($data['outward_id'] ?? 0);
|
$outwardId = (int) ($data['outward_id'] ?? 0);
|
||||||
$inward = $journalRepos->findNull($inwardId);
|
$inward = $journalRepos->findNull($inwardId);
|
||||||
$outward = $journalRepos->findNull($outwardId);
|
$outward = $journalRepos->findNull($outwardId);
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TransactionStoreRequest.php
|
* TransactionStoreRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -28,16 +28,18 @@ use FireflyIII\Rules\BelongsUser;
|
|||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
use FireflyIII\Rules\IsDateOrTime;
|
use FireflyIII\Rules\IsDateOrTime;
|
||||||
use FireflyIII\Support\NullArrayObject;
|
use FireflyIII\Support\NullArrayObject;
|
||||||
|
use FireflyIII\Validation\CurrencyValidation;
|
||||||
|
use FireflyIII\Validation\GroupValidation;
|
||||||
use FireflyIII\Validation\TransactionValidation;
|
use FireflyIII\Validation\TransactionValidation;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class TransactionStoreRequest
|
* Class TransactionStoreRequest
|
||||||
*/
|
*/
|
||||||
class TransactionStoreRequest extends Request
|
class TransactionStoreRequest extends Request
|
||||||
{
|
{
|
||||||
use TransactionValidation;
|
use TransactionValidation, GroupValidation, CurrencyValidation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
@@ -46,6 +48,8 @@ class TransactionStoreRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
|
Log::debug('Authorize TransactionStoreRequest');
|
||||||
|
|
||||||
// Only allow authenticated users
|
// Only allow authenticated users
|
||||||
return auth()->check();
|
return auth()->check();
|
||||||
}
|
}
|
||||||
@@ -57,13 +61,14 @@ class TransactionStoreRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function getAll(): array
|
public function getAll(): array
|
||||||
{
|
{
|
||||||
$data = [
|
Log::debug('get all data in TransactionStoreRequest');
|
||||||
|
|
||||||
|
return [
|
||||||
'group_title' => $this->string('group_title'),
|
'group_title' => $this->string('group_title'),
|
||||||
'error_if_duplicate_hash' => $this->boolean('error_if_duplicate_hash'),
|
'error_if_duplicate_hash' => $this->boolean('error_if_duplicate_hash'),
|
||||||
|
'apply_rules' => $this->boolean('apply_rules', true),
|
||||||
'transactions' => $this->getTransactionData(),
|
'transactions' => $this->getTransactionData(),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,10 +78,13 @@ class TransactionStoreRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$rules = [
|
Log::debug('Collect rules of TransactionStoreRequest');
|
||||||
|
|
||||||
|
return [
|
||||||
// basic fields for group:
|
// basic fields for group:
|
||||||
'group_title' => 'between:1,1000|nullable',
|
'group_title' => 'between:1,1000|nullable',
|
||||||
'error_if_duplicate_hash' => [new IsBoolean],
|
'error_if_duplicate_hash' => [new IsBoolean],
|
||||||
|
'apply_rules' => [new IsBoolean],
|
||||||
|
|
||||||
// transaction rules (in array for splits):
|
// transaction rules (in array for splits):
|
||||||
'transactions.*.type' => 'required|in:withdrawal,deposit,transfer,opening-balance,reconciliation',
|
'transactions.*.type' => 'required|in:withdrawal,deposit,transfer,opening-balance,reconciliation',
|
||||||
@@ -150,8 +158,6 @@ class TransactionStoreRequest extends Request
|
|||||||
'transactions.*.invoice_date' => 'date|nullable',
|
'transactions.*.invoice_date' => 'date|nullable',
|
||||||
];
|
];
|
||||||
|
|
||||||
return $rules;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,63 +214,63 @@ class TransactionStoreRequest extends Request
|
|||||||
$return[] = [
|
$return[] = [
|
||||||
'type' => $this->stringFromValue($object['type']),
|
'type' => $this->stringFromValue($object['type']),
|
||||||
'date' => $this->dateFromValue($object['date']),
|
'date' => $this->dateFromValue($object['date']),
|
||||||
'order' => $this->integerFromValue((string)$object['order']),
|
'order' => $this->integerFromValue((string) $object['order']),
|
||||||
|
|
||||||
'currency_id' => $this->integerFromValue((string)$object['currency_id']),
|
'currency_id' => $this->integerFromValue((string) $object['currency_id']),
|
||||||
'currency_code' => $this->stringFromValue($object['currency_code']),
|
'currency_code' => $this->stringFromValue($object['currency_code']),
|
||||||
|
|
||||||
// foreign currency info:
|
// foreign currency info:
|
||||||
'foreign_currency_id' => $this->integerFromValue((string)$object['foreign_currency_id']),
|
'foreign_currency_id' => $this->integerFromValue((string) $object['foreign_currency_id']),
|
||||||
'foreign_currency_code' => $this->stringFromValue($object['foreign_currency_code']),
|
'foreign_currency_code' => $this->stringFromValue($object['foreign_currency_code']),
|
||||||
|
|
||||||
// amount and foreign amount. Cannot be 0.
|
// amount and foreign amount. Cannot be 0.
|
||||||
'amount' => $this->stringFromValue((string)$object['amount']),
|
'amount' => $this->stringFromValue((string) $object['amount']),
|
||||||
'foreign_amount' => $this->stringFromValue((string)$object['foreign_amount']),
|
'foreign_amount' => $this->stringFromValue((string) $object['foreign_amount']),
|
||||||
|
|
||||||
// description.
|
// description.
|
||||||
'description' => $this->stringFromValue($object['description']),
|
'description' => $this->stringFromValue($object['description']),
|
||||||
|
|
||||||
// source of transaction. If everything is null, assume cash account.
|
// source of transaction. If everything is null, assume cash account.
|
||||||
'source_id' => $this->integerFromValue((string)$object['source_id']),
|
'source_id' => $this->integerFromValue((string) $object['source_id']),
|
||||||
'source_name' => $this->stringFromValue($object['source_name']),
|
'source_name' => $this->stringFromValue($object['source_name']),
|
||||||
'source_iban' => $this->stringFromValue($object['source_iban']),
|
'source_iban' => $this->stringFromValue($object['source_iban']),
|
||||||
'source_number' => $this->stringFromValue($object['source_number']),
|
'source_number' => $this->stringFromValue($object['source_number']),
|
||||||
'source_bic' => $this->stringFromValue($object['source_bic']),
|
'source_bic' => $this->stringFromValue($object['source_bic']),
|
||||||
|
|
||||||
// destination of transaction. If everything is null, assume cash account.
|
// destination of transaction. If everything is null, assume cash account.
|
||||||
'destination_id' => $this->integerFromValue((string)$object['destination_id']),
|
'destination_id' => $this->integerFromValue((string) $object['destination_id']),
|
||||||
'destination_name' => $this->stringFromValue($object['destination_name']),
|
'destination_name' => $this->stringFromValue($object['destination_name']),
|
||||||
'destination_iban' => $this->stringFromValue($object['destination_iban']),
|
'destination_iban' => $this->stringFromValue($object['destination_iban']),
|
||||||
'destination_number' => $this->stringFromValue($object['destination_number']),
|
'destination_number' => $this->stringFromValue($object['destination_number']),
|
||||||
'destination_bic' => $this->stringFromValue($object['destination_bic']),
|
'destination_bic' => $this->stringFromValue($object['destination_bic']),
|
||||||
|
|
||||||
// budget info
|
// budget info
|
||||||
'budget_id' => $this->integerFromValue((string)$object['budget_id']),
|
'budget_id' => $this->integerFromValue((string) $object['budget_id']),
|
||||||
'budget_name' => $this->stringFromValue($object['budget_name']),
|
'budget_name' => $this->stringFromValue($object['budget_name']),
|
||||||
|
|
||||||
// category info
|
// category info
|
||||||
'category_id' => $this->integerFromValue((string)$object['category_id']),
|
'category_id' => $this->integerFromValue((string) $object['category_id']),
|
||||||
'category_name' => $this->stringFromValue($object['category_name']),
|
'category_name' => $this->stringFromValue($object['category_name']),
|
||||||
|
|
||||||
// journal bill reference. Optional. Will only work for withdrawals
|
// journal bill reference. Optional. Will only work for withdrawals
|
||||||
'bill_id' => $this->integerFromValue((string)$object['bill_id']),
|
'bill_id' => $this->integerFromValue((string) $object['bill_id']),
|
||||||
'bill_name' => $this->stringFromValue($object['bill_name']),
|
'bill_name' => $this->stringFromValue($object['bill_name']),
|
||||||
|
|
||||||
// piggy bank reference. Optional. Will only work for transfers
|
// piggy bank reference. Optional. Will only work for transfers
|
||||||
'piggy_bank_id' => $this->integerFromValue((string)$object['piggy_bank_id']),
|
'piggy_bank_id' => $this->integerFromValue((string) $object['piggy_bank_id']),
|
||||||
'piggy_bank_name' => $this->stringFromValue($object['piggy_bank_name']),
|
'piggy_bank_name' => $this->stringFromValue($object['piggy_bank_name']),
|
||||||
|
|
||||||
// some other interesting properties
|
// some other interesting properties
|
||||||
'reconciled' => $this->convertBoolean((string)$object['reconciled']),
|
'reconciled' => $this->convertBoolean((string) $object['reconciled']),
|
||||||
'notes' => $this->nlStringFromValue($object['notes']),
|
'notes' => $this->nlStringFromValue($object['notes']),
|
||||||
'tags' => $this->arrayFromValue($object['tags']),
|
'tags' => $this->arrayFromValue($object['tags']),
|
||||||
|
|
||||||
// all custom fields:
|
// all custom fields:
|
||||||
'internal_reference' => $this->stringFromValue($object['internal_reference']),
|
'internal_reference' => $this->stringFromValue((string) $object['internal_reference']),
|
||||||
'external_id' => $this->stringFromValue($object['external_id']),
|
'external_id' => $this->stringFromValue((string) $object['external_id']),
|
||||||
'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')),
|
'original_source' => sprintf('ff3-v%s|api-v%s', config('firefly.version'), config('firefly.api_version')),
|
||||||
'recurrence_id' => $this->integerFromValue($object['recurrence_id']),
|
'recurrence_id' => $this->integerFromValue($object['recurrence_id']),
|
||||||
'bunq_payment_id' => $this->stringFromValue($object['bunq_payment_id']),
|
'bunq_payment_id' => $this->stringFromValue((string) $object['bunq_payment_id']),
|
||||||
|
|
||||||
'sepa_cc' => $this->stringFromValue($object['sepa_cc']),
|
'sepa_cc' => $this->stringFromValue($object['sepa_cc']),
|
||||||
'sepa_ct_op' => $this->stringFromValue($object['sepa_ct_op']),
|
'sepa_ct_op' => $this->stringFromValue($object['sepa_ct_op']),
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TransactionUpdateRequest.php
|
* TransactionUpdateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -28,6 +28,7 @@ use FireflyIII\Models\TransactionGroup;
|
|||||||
use FireflyIII\Rules\BelongsUser;
|
use FireflyIII\Rules\BelongsUser;
|
||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
use FireflyIII\Rules\IsDateOrTime;
|
use FireflyIII\Rules\IsDateOrTime;
|
||||||
|
use FireflyIII\Validation\GroupValidation;
|
||||||
use FireflyIII\Validation\TransactionValidation;
|
use FireflyIII\Validation\TransactionValidation;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
use Log;
|
use Log;
|
||||||
@@ -37,7 +38,7 @@ use Log;
|
|||||||
*/
|
*/
|
||||||
class TransactionUpdateRequest extends Request
|
class TransactionUpdateRequest extends Request
|
||||||
{
|
{
|
||||||
use TransactionValidation;
|
use TransactionValidation, GroupValidation;
|
||||||
|
|
||||||
/** @var array Array values. */
|
/** @var array Array values. */
|
||||||
private $arrayFields;
|
private $arrayFields;
|
||||||
@@ -138,6 +139,7 @@ class TransactionUpdateRequest extends Request
|
|||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'transactions' => $this->getTransactionData(),
|
'transactions' => $this->getTransactionData(),
|
||||||
|
'apply_rules' => $this->boolean('apply_rules', true),
|
||||||
];
|
];
|
||||||
if ($this->has('group_title')) {
|
if ($this->has('group_title')) {
|
||||||
$data['group_title'] = $this->string('group_title');
|
$data['group_title'] = $this->string('group_title');
|
||||||
@@ -153,9 +155,10 @@ class TransactionUpdateRequest extends Request
|
|||||||
*/
|
*/
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$rules = [
|
return [
|
||||||
// basic fields for group:
|
// basic fields for group:
|
||||||
'group_title' => 'between:1,1000',
|
'group_title' => 'between:1,1000',
|
||||||
|
'apply_rules' => [new IsBoolean],
|
||||||
|
|
||||||
// transaction rules (in array for splits):
|
// transaction rules (in array for splits):
|
||||||
'transactions.*.type' => 'in:withdrawal,deposit,transfer,opening-balance,reconciliation',
|
'transactions.*.type' => 'in:withdrawal,deposit,transfer,opening-balance,reconciliation',
|
||||||
@@ -220,8 +223,6 @@ class TransactionUpdateRequest extends Request
|
|||||||
'transactions.*.payment_date' => 'date|nullable',
|
'transactions.*.payment_date' => 'date|nullable',
|
||||||
'transactions.*.invoice_date' => 'date|nullable',
|
'transactions.*.invoice_date' => 'date|nullable',
|
||||||
];
|
];
|
||||||
|
|
||||||
return $rules;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -277,6 +278,111 @@ class TransactionUpdateRequest extends Request
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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)) {
|
||||||
|
$current[$fieldName] = $this->dateFromValue((string) $transaction[$fieldName]);
|
||||||
|
Log::debug(sprintf('New value: "%s"', (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.
|
* Get transaction data.
|
||||||
*
|
*
|
||||||
@@ -290,48 +396,15 @@ class TransactionUpdateRequest extends Request
|
|||||||
* @var int $index
|
* @var int $index
|
||||||
* @var array $transaction
|
* @var array $transaction
|
||||||
*/
|
*/
|
||||||
foreach ($this->get('transactions') as $index => $transaction) {
|
foreach ($this->get('transactions') as $transaction) {
|
||||||
// default response is to update nothing in the transaction:
|
// default response is to update nothing in the transaction:
|
||||||
$current = [];
|
$current = [];
|
||||||
|
$current = $this->getIntegerData($current, $transaction);
|
||||||
// for each field, add it to the array if a reference is present in the request:
|
$current = $this->getStringData($current, $transaction);
|
||||||
foreach ($this->integerFields as $fieldName) {
|
$current = $this->getNlStringData($current, $transaction);
|
||||||
if (array_key_exists($fieldName, $transaction)) {
|
$current = $this->getDateData($current, $transaction);
|
||||||
$current[$fieldName] = $this->integerFromValue((string)$transaction[$fieldName]);
|
$current = $this->getBooleanData($current, $transaction);
|
||||||
}
|
$current = $this->getArrayData($current, $transaction);
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->stringFields as $fieldName) {
|
|
||||||
if (array_key_exists($fieldName, $transaction)) {
|
|
||||||
$current[$fieldName] = $this->stringFromValue((string)$transaction[$fieldName]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->textareaFields as $fieldName) {
|
|
||||||
if (array_key_exists($fieldName, $transaction)) {
|
|
||||||
$current[$fieldName] = $this->nlStringFromValue((string)$transaction[$fieldName]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->dateFields as $fieldName) {
|
|
||||||
Log::debug(sprintf('Now at date field %s', $fieldName));
|
|
||||||
if (array_key_exists($fieldName, $transaction)) {
|
|
||||||
$current[$fieldName] = $this->dateFromValue((string)$transaction[$fieldName]);
|
|
||||||
Log::debug(sprintf('New value: "%s"', (string)$transaction[$fieldName]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->booleanFields as $fieldName) {
|
|
||||||
if (array_key_exists($fieldName, $transaction)) {
|
|
||||||
$current[$fieldName] = $this->convertBoolean((string)$transaction[$fieldName]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->arrayFields as $fieldName) {
|
|
||||||
if (array_key_exists($fieldName, $transaction)) {
|
|
||||||
$current[$fieldName] = $this->arrayFromValue($transaction[$fieldName]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$return[] = $current;
|
$return[] = $current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* UserStoreRequest.php
|
* UserStoreRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -69,14 +69,13 @@ class UserStoreRequest extends Request
|
|||||||
if (null !== $this->get('blocked')) {
|
if (null !== $this->get('blocked')) {
|
||||||
$blocked = $this->boolean('blocked');
|
$blocked = $this->boolean('blocked');
|
||||||
}
|
}
|
||||||
$data = [
|
|
||||||
|
return [
|
||||||
'email' => $this->string('email'),
|
'email' => $this->string('email'),
|
||||||
'blocked' => $blocked,
|
'blocked' => $blocked,
|
||||||
'blocked_code' => $this->string('blocked_code'),
|
'blocked_code' => $this->string('blocked_code'),
|
||||||
'role' => $this->string('role'),
|
'role' => $this->string('role'),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* UserUpdateRequest.php
|
* UserUpdateRequest.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2019 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -69,14 +69,13 @@ class UserUpdateRequest extends Request
|
|||||||
if (null !== $this->get('blocked')) {
|
if (null !== $this->get('blocked')) {
|
||||||
$blocked = $this->boolean('blocked');
|
$blocked = $this->boolean('blocked');
|
||||||
}
|
}
|
||||||
$data = [
|
|
||||||
|
return [
|
||||||
'email' => $this->string('email'),
|
'email' => $this->string('email'),
|
||||||
'blocked' => $blocked,
|
'blocked' => $blocked,
|
||||||
'blocked_code' => $this->string('blocked_code'),
|
'blocked_code' => $this->string('blocked_code'),
|
||||||
'role' => $this->string('role'),
|
'role' => $this->string('role'),
|
||||||
];
|
];
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,14 +86,13 @@ class UserUpdateRequest extends Request
|
|||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
$user = $this->route()->parameter('user');
|
$user = $this->route()->parameter('user');
|
||||||
$rules = [
|
|
||||||
|
return [
|
||||||
'email' => sprintf('email|unique:users,email,%d', $user->id),
|
'email' => sprintf('email|unique:users,email,%d', $user->id),
|
||||||
'blocked' => [new IsBoolean],
|
'blocked' => [new IsBoolean],
|
||||||
'blocked_code' => 'in:email_changed',
|
'blocked_code' => 'in:email_changed',
|
||||||
'role' => 'in:owner,demo,',
|
'role' => 'in:owner,demo,',
|
||||||
];
|
];
|
||||||
|
|
||||||
return $rules;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CorrectDatabase.php
|
* CorrectDatabase.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -30,6 +30,7 @@ use Schema;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CorrectDatabase
|
* Class CorrectDatabase
|
||||||
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
class CorrectDatabase extends Command
|
class CorrectDatabase extends Command
|
||||||
@@ -73,7 +74,7 @@ class CorrectDatabase extends Command
|
|||||||
'firefly-iii:fix-ob-currencies',
|
'firefly-iii:fix-ob-currencies',
|
||||||
'firefly-iii:fix-long-descriptions',
|
'firefly-iii:fix-long-descriptions',
|
||||||
'firefly-iii:fix-recurring-transactions',
|
'firefly-iii:fix-recurring-transactions',
|
||||||
'firefly-iii:restore-oauth-keys'
|
'firefly-iii:restore-oauth-keys',
|
||||||
];
|
];
|
||||||
foreach ($commands as $command) {
|
foreach ($commands as $command) {
|
||||||
$this->line(sprintf('Now executing %s', $command));
|
$this->line(sprintf('Now executing %s', $command));
|
||||||
@@ -82,6 +83,8 @@ class CorrectDatabase extends Command
|
|||||||
echo $result;
|
echo $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* CorrectOpeningBalanceCurrencies.php
|
* CorrectOpeningBalanceCurrencies.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -76,6 +77,8 @@ class CorrectOpeningBalanceCurrencies extends Command
|
|||||||
$this->info('There was nothing to fix in the opening balance transactions.');
|
$this->info('There was nothing to fix in the opening balance transactions.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,17 +114,14 @@ class CorrectOpeningBalanceCurrencies extends Command
|
|||||||
*/
|
*/
|
||||||
private function getAccount(TransactionJournal $journal): ?Account
|
private function getAccount(TransactionJournal $journal): ?Account
|
||||||
{
|
{
|
||||||
$excluded = [];
|
|
||||||
$transactions = $journal->transactions()->with(['account', 'account.accountType'])->get();
|
$transactions = $journal->transactions()->with(['account', 'account.accountType'])->get();
|
||||||
/** @var Transaction $transaction */
|
/** @var Transaction $transaction */
|
||||||
foreach ($transactions as $transaction) {
|
foreach ($transactions as $transaction) {
|
||||||
$account = $transaction->account;
|
$account = $transaction->account;
|
||||||
if (null !== $account) {
|
if ((null !== $account) && AccountType::INITIAL_BALANCE !== $account->accountType->type) {
|
||||||
if (AccountType::INITIAL_BALANCE !== $account->accountType->type) {
|
|
||||||
return $account;
|
return $account;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CreateAccessTokens.php
|
* CreateAccessTokens.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -50,8 +50,8 @@ class CreateAccessTokens extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return int
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -78,6 +78,8 @@ class CreateAccessTokens extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verify access tokens in %s seconds.', $end));
|
$this->info(sprintf('Verify access tokens in %s seconds.', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CreateLinkTypes.php
|
* CreateLinkTypes.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -47,7 +47,7 @@ class CreateLinkTypes extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -79,6 +79,8 @@ class CreateLinkTypes extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified link types in %s seconds', $end));
|
$this->info(sprintf('Verified link types in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* DeleteEmptyGroups.php
|
* DeleteEmptyGroups.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -25,7 +25,6 @@ namespace FireflyIII\Console\Commands\Correction;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
@@ -50,16 +49,17 @@ class DeleteEmptyGroups extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return mixed
|
|
||||||
* @throws Exception;
|
* @throws Exception;
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
Log::debug(sprintf('Now in %s', __METHOD__));
|
Log::debug(sprintf('Now in %s', __METHOD__));
|
||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
$groupIds =
|
$groupIds
|
||||||
TransactionGroup
|
= TransactionGroup
|
||||||
::leftJoin('transaction_journals','transaction_groups.id','=','transaction_journals.transaction_group_id')
|
::leftJoin('transaction_journals', 'transaction_groups.id', '=', 'transaction_journals.transaction_group_id')
|
||||||
->whereNull('transaction_journals.id')->get(['transaction_groups.id'])->pluck('id')->toArray();
|
->whereNull('transaction_journals.id')->get(['transaction_groups.id'])->pluck('id')->toArray();
|
||||||
|
|
||||||
$total = count($groupIds);
|
$total = count($groupIds);
|
||||||
@@ -76,6 +76,8 @@ class DeleteEmptyGroups extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified empty groups in %s seconds', $end));
|
$this->info(sprintf('Verified empty groups in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* DeleteEmptyJournals.php
|
* DeleteEmptyJournals.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -58,6 +58,7 @@ class DeleteEmptyJournals extends Command
|
|||||||
$this->deleteUnevenJournals();
|
$this->deleteUnevenJournals();
|
||||||
$this->deleteEmptyJournals();
|
$this->deleteEmptyJournals();
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -101,18 +102,18 @@ class DeleteEmptyJournals extends Command
|
|||||||
->get([DB::raw('COUNT(transactions.transaction_journal_id) as the_count'), 'transaction_journal_id']);
|
->get([DB::raw('COUNT(transactions.transaction_journal_id) as the_count'), 'transaction_journal_id']);
|
||||||
$total = 0;
|
$total = 0;
|
||||||
foreach ($set as $row) {
|
foreach ($set as $row) {
|
||||||
$count = (int)$row->the_count;
|
$count = (int) $row->the_count;
|
||||||
if (1 === $count % 2) {
|
if (1 === $count % 2) {
|
||||||
// uneven number, delete journal and transactions:
|
// uneven number, delete journal and transactions:
|
||||||
try {
|
try {
|
||||||
TransactionJournal::find((int)$row->transaction_journal_id)->delete();
|
TransactionJournal::find((int) $row->transaction_journal_id)->delete();
|
||||||
// @codeCoverageIgnoreStart
|
// @codeCoverageIgnoreStart
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
Log::info(sprintf('Could not delete journal: %s', $e->getMessage()));
|
Log::info(sprintf('Could not delete journal: %s', $e->getMessage()));
|
||||||
}
|
}
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
Transaction::where('transaction_journal_id', (int)$row->transaction_journal_id)->delete();
|
Transaction::where('transaction_journal_id', (int) $row->transaction_journal_id)->delete();
|
||||||
$this->info(sprintf('Deleted transaction journal #%d because it had an uneven number of transactions.', $row->transaction_journal_id));
|
$this->info(sprintf('Deleted transaction journal #%d because it had an uneven number of transactions.', $row->transaction_journal_id));
|
||||||
$total++;
|
$total++;
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* DeleteOrphanedTransactions.php
|
* DeleteOrphanedTransactions.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -51,8 +51,8 @@ class DeleteOrphanedTransactions extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return int
|
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -62,6 +62,7 @@ class DeleteOrphanedTransactions extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified orphans in %s seconds', $end));
|
$this->info(sprintf('Verified orphans in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +80,7 @@ class DeleteOrphanedTransactions extends Command
|
|||||||
/** @var Transaction $transaction */
|
/** @var Transaction $transaction */
|
||||||
foreach ($set as $transaction) {
|
foreach ($set as $transaction) {
|
||||||
// delete journals
|
// delete journals
|
||||||
$journal = TransactionJournal::find((int)$transaction->transaction_journal_id);
|
$journal = TransactionJournal::find((int) $transaction->transaction_journal_id);
|
||||||
if ($journal) {
|
if ($journal) {
|
||||||
try {
|
try {
|
||||||
$journal->delete();
|
$journal->delete();
|
||||||
@@ -89,10 +90,13 @@ class DeleteOrphanedTransactions extends Command
|
|||||||
}
|
}
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
}
|
}
|
||||||
Transaction::where('transaction_journal_id', (int)$transaction->transaction_journal_id)->delete();
|
Transaction::where('transaction_journal_id', (int) $transaction->transaction_journal_id)->delete();
|
||||||
$this->line(
|
$this->line(
|
||||||
sprintf('Deleted transaction journal #%d because account #%d was already deleted.',
|
sprintf(
|
||||||
$transaction->transaction_journal_id, $transaction->account_id)
|
'Deleted transaction journal #%d because account #%d was already deleted.',
|
||||||
|
$transaction->transaction_journal_id,
|
||||||
|
$transaction->account_id
|
||||||
|
)
|
||||||
);
|
);
|
||||||
$count++;
|
$count++;
|
||||||
}
|
}
|
||||||
@@ -120,7 +124,7 @@ class DeleteOrphanedTransactions extends Command
|
|||||||
);
|
);
|
||||||
/** @var stdClass $entry */
|
/** @var stdClass $entry */
|
||||||
foreach ($set as $entry) {
|
foreach ($set as $entry) {
|
||||||
$transaction = Transaction::find((int)$entry->transaction_id);
|
$transaction = Transaction::find((int) $entry->transaction_id);
|
||||||
$transaction->delete();
|
$transaction->delete();
|
||||||
$this->info(
|
$this->info(
|
||||||
sprintf(
|
sprintf(
|
||||||
@@ -134,6 +138,5 @@ class DeleteOrphanedTransactions extends Command
|
|||||||
if (0 === $count) {
|
if (0 === $count) {
|
||||||
$this->info('No orphaned transactions.');
|
$this->info('No orphaned transactions.');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* DeleteZeroAmount.php
|
* DeleteZeroAmount.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -49,6 +49,7 @@ class DeleteZeroAmount extends Command
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
@@ -77,6 +78,8 @@ class DeleteZeroAmount extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified zero-amount integrity in %s seconds', $end));
|
$this->info(sprintf('Verified zero-amount integrity in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* EnableCurrencies.php
|
* EnableCurrencies.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -52,7 +52,7 @@ class EnableCurrencies extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -62,28 +62,28 @@ class EnableCurrencies extends Command
|
|||||||
/** @var Collection $meta */
|
/** @var Collection $meta */
|
||||||
$meta = AccountMeta::where('name', 'currency_id')->groupBy('data')->get(['data']);
|
$meta = AccountMeta::where('name', 'currency_id')->groupBy('data')->get(['data']);
|
||||||
foreach ($meta as $entry) {
|
foreach ($meta as $entry) {
|
||||||
$found[] = (int)$entry->data;
|
$found[] = (int) $entry->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get all from journals:
|
// get all from journals:
|
||||||
/** @var Collection $journals */
|
/** @var Collection $journals */
|
||||||
$journals = TransactionJournal::groupBy('transaction_currency_id')->get(['transaction_currency_id']);
|
$journals = TransactionJournal::groupBy('transaction_currency_id')->get(['transaction_currency_id']);
|
||||||
foreach ($journals as $entry) {
|
foreach ($journals as $entry) {
|
||||||
$found[] = (int)$entry->transaction_currency_id;
|
$found[] = (int) $entry->transaction_currency_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get all from transactions
|
// get all from transactions
|
||||||
/** @var Collection $transactions */
|
/** @var Collection $transactions */
|
||||||
$transactions = Transaction::groupBy('transaction_currency_id')->get(['transaction_currency_id']);
|
$transactions = Transaction::groupBy('transaction_currency_id')->get(['transaction_currency_id']);
|
||||||
foreach ($transactions as $entry) {
|
foreach ($transactions as $entry) {
|
||||||
$found[] = (int)$entry->transaction_currency_id;
|
$found[] = (int) $entry->transaction_currency_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get all from budget limits
|
// get all from budget limits
|
||||||
/** @var Collection $limits */
|
/** @var Collection $limits */
|
||||||
$limits = BudgetLimit::groupBy('transaction_currency_id')->get(['transaction_currency_id']);
|
$limits = BudgetLimit::groupBy('transaction_currency_id')->get(['transaction_currency_id']);
|
||||||
foreach ($limits as $entry) {
|
foreach ($limits as $entry) {
|
||||||
$found[] = (int)$entry->transaction_currency_id;
|
$found[] = (int) $entry->transaction_currency_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
$found = array_unique($found);
|
$found = array_unique($found);
|
||||||
@@ -101,6 +101,8 @@ class EnableCurrencies extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified currencies in %s seconds.', $end));
|
$this->info(sprintf('Verified currencies in %s seconds.', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* FixAccountTypes.php
|
* FixAccountTypes.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -49,20 +49,20 @@ class FixAccountTypes extends Command
|
|||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $signature = 'firefly-iii:fix-account-types';
|
protected $signature = 'firefly-iii:fix-account-types';
|
||||||
|
/** @var int */
|
||||||
|
private $count;
|
||||||
/** @var array */
|
/** @var array */
|
||||||
private $expected;
|
private $expected;
|
||||||
/** @var AccountFactory */
|
/** @var AccountFactory */
|
||||||
private $factory;
|
private $factory;
|
||||||
/** @var array */
|
/** @var array */
|
||||||
private $fixable;
|
private $fixable;
|
||||||
/** @var int */
|
|
||||||
private $count;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return int
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -106,26 +106,16 @@ class FixAccountTypes extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verifying account types took %s seconds', $end));
|
$this->info(sprintf('Verifying account types took %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is
|
|
||||||
* executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should
|
|
||||||
* be called from the handle method instead of using the constructor to initialize the command.
|
|
||||||
*
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
private function stupidLaravel(): void
|
|
||||||
{
|
|
||||||
$this->count = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param TransactionJournal $journal
|
* @param TransactionJournal $journal
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param Transaction $source
|
* @param Transaction $source
|
||||||
* @param Transaction $dest
|
* @param Transaction $dest
|
||||||
|
*
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
*/
|
*/
|
||||||
private function fixJournal(TransactionJournal $journal, string $type, Transaction $source, Transaction $dest): void
|
private function fixJournal(TransactionJournal $journal, string $type, Transaction $source, Transaction $dest): void
|
||||||
@@ -167,9 +157,12 @@ class FixAccountTypes extends Command
|
|||||||
$dest->save();
|
$dest->save();
|
||||||
$this->info(
|
$this->info(
|
||||||
sprintf(
|
sprintf(
|
||||||
'Transaction journal #%d, destination account changed from #%d ("%s") to #%d ("%s").', $journal->id,
|
'Transaction journal #%d, destination account changed from #%d ("%s") to #%d ("%s").',
|
||||||
$oldDest->id, $oldDest->name,
|
$journal->id,
|
||||||
$result->id, $result->name
|
$oldDest->id,
|
||||||
|
$oldDest->name,
|
||||||
|
$result->id,
|
||||||
|
$result->name
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$this->inspectJournal($journal);
|
$this->inspectJournal($journal);
|
||||||
@@ -184,9 +177,12 @@ class FixAccountTypes extends Command
|
|||||||
$source->save();
|
$source->save();
|
||||||
$this->info(
|
$this->info(
|
||||||
sprintf(
|
sprintf(
|
||||||
'Transaction journal #%d, source account changed from #%d ("%s") to #%d ("%s").', $journal->id,
|
'Transaction journal #%d, source account changed from #%d ("%s") to #%d ("%s").',
|
||||||
$oldSource->id, $oldSource->name,
|
$journal->id,
|
||||||
$result->id, $result->name
|
$oldSource->id,
|
||||||
|
$oldSource->name,
|
||||||
|
$result->id,
|
||||||
|
$result->name
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$this->inspectJournal($journal);
|
$this->inspectJournal($journal);
|
||||||
@@ -198,7 +194,6 @@ class FixAccountTypes extends Command
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -274,4 +269,15 @@ class FixAccountTypes extends Command
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is
|
||||||
|
* executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should
|
||||||
|
* be called from the handle method instead of using the constructor to initialize the command.
|
||||||
|
*
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
private function stupidLaravel(): void
|
||||||
|
{
|
||||||
|
$this->count = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* FixLongDescriptions.php
|
* FixLongDescriptions.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -65,7 +66,7 @@ class FixLongDescriptions extends Command
|
|||||||
$groups = TransactionGroup::get(['id', 'title']);
|
$groups = TransactionGroup::get(['id', 'title']);
|
||||||
/** @var TransactionGroup $group */
|
/** @var TransactionGroup $group */
|
||||||
foreach ($groups as $group) {
|
foreach ($groups as $group) {
|
||||||
if (strlen($group->title) > self::MAX_LENGTH) {
|
if (strlen((string)$group->title) > self::MAX_LENGTH) {
|
||||||
$group->title = substr($group->title, 0, self::MAX_LENGTH);
|
$group->title = substr($group->title, 0, self::MAX_LENGTH);
|
||||||
$group->save();
|
$group->save();
|
||||||
$this->line(sprintf('Truncated description of transaction group #%d', $group->id));
|
$this->line(sprintf('Truncated description of transaction group #%d', $group->id));
|
||||||
@@ -73,6 +74,8 @@ class FixLongDescriptions extends Command
|
|||||||
}
|
}
|
||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified all transaction group and journal title lengths in %s seconds.', $end));
|
$this->info(sprintf('Verified all transaction group and journal title lengths in %s seconds.', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* FixPiggies.php
|
* FixPiggies.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -54,7 +54,7 @@ class FixPiggies extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -98,6 +98,7 @@ class FixPiggies extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->line(sprintf('Verified the content of %d piggy bank events in %s seconds.', $set->count(), $end));
|
$this->line(sprintf('Verified the content of %d piggy bank events in %s seconds.', $set->count(), $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* FixRecurringTransactions.php
|
* FixRecurringTransactions.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -51,16 +52,6 @@ class FixRecurringTransactions extends Command
|
|||||||
/** @var UserRepositoryInterface */
|
/** @var UserRepositoryInterface */
|
||||||
private $userRepos;
|
private $userRepos;
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new command instance.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
@@ -76,6 +67,7 @@ class FixRecurringTransactions extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Corrected recurring transactions %s seconds.', $end));
|
$this->info(sprintf('Corrected recurring transactions %s seconds.', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* FixUnevenAmount.php
|
* FixUnevenAmount.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -63,8 +63,8 @@ class FixUnevenAmount extends Command
|
|||||||
->get(['transaction_journal_id', DB::raw('SUM(amount) AS the_sum')]);
|
->get(['transaction_journal_id', DB::raw('SUM(amount) AS the_sum')]);
|
||||||
/** @var stdClass $entry */
|
/** @var stdClass $entry */
|
||||||
foreach ($journals as $entry) {
|
foreach ($journals as $entry) {
|
||||||
if (0 !== bccomp((string)$entry->the_sum, '0')) {
|
if (0 !== bccomp((string) $entry->the_sum, '0')) {
|
||||||
$this->fixJournal((int)$entry->transaction_journal_id);
|
$this->fixJournal((int) $entry->transaction_journal_id);
|
||||||
$count++;
|
$count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,6 +75,7 @@ class FixUnevenAmount extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified amount integrity in %s seconds', $end));
|
$this->info(sprintf('Verified amount integrity in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,11 +91,42 @@ class FixUnevenAmount extends Command
|
|||||||
}
|
}
|
||||||
/** @var Transaction $source */
|
/** @var Transaction $source */
|
||||||
$source = $journal->transactions()->where('amount', '<', 0)->first();
|
$source = $journal->transactions()->where('amount', '<', 0)->first();
|
||||||
$amount = bcmul('-1', (string)$source->amount);
|
|
||||||
|
if (null === $source) {
|
||||||
|
$this->error(
|
||||||
|
sprintf(
|
||||||
|
'Journal #%d ("%s") has no source transaction. It will be deleted to maintain database consistency.',
|
||||||
|
$journal->id ?? 0,
|
||||||
|
$journal->description ?? ''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete();
|
||||||
|
TransactionJournal::where('id', $journal->description ?? 0)->forceDelete();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$amount = bcmul('-1', (string) $source->amount);
|
||||||
|
|
||||||
// fix amount of destination:
|
// fix amount of destination:
|
||||||
/** @var Transaction $destination */
|
/** @var Transaction $destination */
|
||||||
$destination = $journal->transactions()->where('amount', '>', 0)->first();
|
$destination = $journal->transactions()->where('amount', '>', 0)->first();
|
||||||
|
|
||||||
|
if (null === $destination) {
|
||||||
|
$this->error(
|
||||||
|
sprintf(
|
||||||
|
'Journal #%d ("%s") has no destination transaction. It will be deleted to maintain database consistency.',
|
||||||
|
$journal->id ?? 0,
|
||||||
|
$journal->description ?? ''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
Transaction::where('transaction_journal_id', $journal->id ?? 0)->forceDelete();
|
||||||
|
TransactionJournal::where('id', $journal->description ?? 0)->forceDelete();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$destination->amount = $amount;
|
$destination->amount = $amount;
|
||||||
$destination->save();
|
$destination->save();
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RemoveBills.php
|
* RemoveBills.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -48,7 +48,7 @@ class RemoveBills extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -71,6 +71,7 @@ class RemoveBills extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified bills / journals in %s seconds', $end));
|
$this->info(sprintf('Verified bills / journals in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* RenameMetaFields.php
|
* RenameMetaFields.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -83,6 +83,7 @@ class RenameMetaFields extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Renamed meta fields in %s seconds', $end));
|
$this->info(sprintf('Renamed meta fields in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* TransferBudgets.php
|
* TransferBudgets.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -74,6 +74,7 @@ class TransferBudgets extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Verified budget/journals in %s seconds.', $end));
|
$this->info(sprintf('Verified budget/journals in %s seconds.', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,26 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreateDatabase.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\Console\Commands;
|
namespace FireflyIII\Console\Commands;
|
||||||
|
|
||||||
@@ -33,10 +55,12 @@ class CreateDatabase extends Command
|
|||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
if ('mysql' !== env('DB_CONNECTION')) {
|
if ('mysql' !== env('DB_CONNECTION')) {
|
||||||
$this->info('This command currently applies to MySQL connections only.');
|
$this->info(sprintf('CreateDB does not apply to "%s", skipped.', env('DB_CONNECTION')));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
// try to set up a raw connection:
|
// try to set up a raw connection:
|
||||||
$dsn = sprintf('mysql:host=%s;charset=utf8mb4', env('DB_HOST'));
|
$dsn = sprintf('mysql:host=%s;port=%d;charset=utf8mb4', env('DB_HOST', 'localhost'), env('DB_PORT', '3306'));
|
||||||
$options = [
|
$options = [
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* DecryptDatabase.php
|
* DecryptDatabase.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -30,6 +30,7 @@ use FireflyIII\Exceptions\FireflyException;
|
|||||||
use FireflyIII\Models\Preference;
|
use FireflyIII\Models\Preference;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Contracts\Encryption\DecryptException;
|
use Illuminate\Contracts\Encryption\DecryptException;
|
||||||
|
use JsonException;
|
||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,8 +55,8 @@ class DecryptDatabase extends Command
|
|||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return int
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
@@ -92,11 +93,15 @@ class DecryptDatabase extends Command
|
|||||||
// A separate routine for preferences:
|
// A separate routine for preferences:
|
||||||
if ('preferences' === $table) {
|
if ('preferences' === $table) {
|
||||||
// try to json_decrypt the value.
|
// try to json_decrypt the value.
|
||||||
$value = json_decode($value, true) ?? $value;
|
try {
|
||||||
|
$value = json_decode($value, true, 512, JSON_THROW_ON_ERROR) ?? $value;
|
||||||
|
} catch(JsonException $e) {
|
||||||
|
Log::error($e->getMessage());
|
||||||
|
}
|
||||||
Log::debug(sprintf('Decrypted field "%s" "%s" to "%s" in table "%s" (row #%d)', $field, $original, print_r($value, true), $table, $id));
|
Log::debug(sprintf('Decrypted field "%s" "%s" to "%s" in table "%s" (row #%d)', $field, $original, print_r($value, true), $table, $id));
|
||||||
|
|
||||||
/** @var Preference $object */
|
/** @var Preference $object */
|
||||||
$object = Preference::find((int)$id);
|
$object = Preference::find((int) $id);
|
||||||
if (null !== $object) {
|
if (null !== $object) {
|
||||||
$object->data = $value;
|
$object->data = $value;
|
||||||
$object->save();
|
$object->save();
|
||||||
@@ -118,6 +123,7 @@ class DecryptDatabase extends Command
|
|||||||
}
|
}
|
||||||
$this->info('Done!');
|
$this->info('Done!');
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +137,7 @@ class DecryptDatabase extends Command
|
|||||||
$configName = sprintf('is_decrypted_%s', $table);
|
$configName = sprintf('is_decrypted_%s', $table);
|
||||||
$configVar = app('fireflyconfig')->get($configName, false);
|
$configVar = app('fireflyconfig')->get($configName, false);
|
||||||
if (null !== $configVar) {
|
if (null !== $configVar) {
|
||||||
return (bool)$configVar->data;
|
return (bool) $configVar->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -142,8 +148,9 @@ class DecryptDatabase extends Command
|
|||||||
* Tries to decrypt data. Will only throw an exception when the MAC is invalid.
|
* Tries to decrypt data. Will only throw an exception when the MAC is invalid.
|
||||||
*
|
*
|
||||||
* @param $value
|
* @param $value
|
||||||
* @return string
|
*
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function tryDecrypt($value)
|
private function tryDecrypt($value)
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* ExportData.php
|
* ExportData.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -22,6 +23,7 @@
|
|||||||
namespace FireflyIII\Console\Commands\Export;
|
namespace FireflyIII\Console\Commands\Export;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Exception;
|
||||||
use FireflyIII\Console\Commands\VerifiesAccessToken;
|
use FireflyIII\Console\Commands\VerifiesAccessToken;
|
||||||
use FireflyIII\Exceptions\FireflyException;
|
use FireflyIII\Exceptions\FireflyException;
|
||||||
use FireflyIII\Models\AccountType;
|
use FireflyIII\Models\AccountType;
|
||||||
@@ -32,6 +34,7 @@ use FireflyIII\User;
|
|||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
|
use League\Csv\CannotInsertRecord;
|
||||||
use Log;
|
use Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,14 +44,6 @@ class ExportData extends Command
|
|||||||
{
|
{
|
||||||
use VerifiesAccessToken;
|
use VerifiesAccessToken;
|
||||||
|
|
||||||
/** @var JournalRepositoryInterface */
|
|
||||||
private $journalRepository;
|
|
||||||
|
|
||||||
/** @var AccountRepositoryInterface */
|
|
||||||
private $accountRepository;
|
|
||||||
|
|
||||||
/** @var User */
|
|
||||||
private $user;
|
|
||||||
/**
|
/**
|
||||||
* The console command description.
|
* The console command description.
|
||||||
*
|
*
|
||||||
@@ -77,29 +72,25 @@ class ExportData extends Command
|
|||||||
{--export-bills : Create a file with all your bills and some meta data.}
|
{--export-bills : Create a file with all your bills and some meta data.}
|
||||||
{--export-piggies : Create a file with all your piggy banks and some meta data.}
|
{--export-piggies : Create a file with all your piggy banks and some meta data.}
|
||||||
{--force : Force overwriting of previous exports if found.}';
|
{--force : Force overwriting of previous exports if found.}';
|
||||||
|
/** @var AccountRepositoryInterface */
|
||||||
|
private $accountRepository;
|
||||||
/**
|
/** @var JournalRepositoryInterface */
|
||||||
* Create a new command instance.
|
private $journalRepository;
|
||||||
*
|
/** @var User */
|
||||||
* @return void
|
private $user;
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the console command.
|
* Execute the console command.
|
||||||
*
|
*
|
||||||
* @return int
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @throws CannotInsertRecord
|
||||||
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function handle(): int
|
public function handle(): int
|
||||||
{
|
{
|
||||||
// verify access token
|
// verify access token
|
||||||
if (!$this->verifyAccessToken()) {
|
if (!$this->verifyAccessToken()) {
|
||||||
$this->error('Invalid access token.');
|
$this->error('Invalid access token. Check /profile.');
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -145,8 +136,12 @@ class ExportData extends Command
|
|||||||
$this->exportData($options, $data);
|
$this->exportData($options, $data);
|
||||||
} catch (FireflyException $e) {
|
} catch (FireflyException $e) {
|
||||||
$this->error(sprintf('Could not store data: %s', $e->getMessage()));
|
$this->error(sprintf('Could not store data: %s', $e->getMessage()));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command-with-error', $this->signature);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,8 +169,8 @@ class ExportData extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return Collection
|
||||||
*/
|
*/
|
||||||
private function getAccountsParameter(): Collection
|
private function getAccountsParameter(): Collection
|
||||||
{
|
{
|
||||||
@@ -183,7 +178,7 @@ class ExportData extends Command
|
|||||||
$accounts = new Collection;
|
$accounts = new Collection;
|
||||||
$accountList = $this->option('accounts');
|
$accountList = $this->option('accounts');
|
||||||
$types = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE];
|
$types = [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE];
|
||||||
if (null !== $accountList && '' !== (string)$accountList) {
|
if (null !== $accountList && '' !== (string) $accountList) {
|
||||||
$accountIds = explode(',', $accountList);
|
$accountIds = explode(',', $accountList);
|
||||||
$accounts = $this->accountRepository->getAccountsById($accountIds);
|
$accounts = $this->accountRepository->getAccountsById($accountIds);
|
||||||
}
|
}
|
||||||
@@ -207,44 +202,49 @@ class ExportData extends Command
|
|||||||
/**
|
/**
|
||||||
* @param string $field
|
* @param string $field
|
||||||
*
|
*
|
||||||
* @return Carbon
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @throws Exception
|
||||||
|
* @return Carbon
|
||||||
*/
|
*/
|
||||||
private function getDateParameter(string $field): Carbon
|
private function getDateParameter(string $field): Carbon
|
||||||
{
|
{
|
||||||
$date = null;
|
$date = Carbon::now()->subYear();
|
||||||
if (null !== $this->option($field)) {
|
if (null !== $this->option($field)) {
|
||||||
try {
|
try {
|
||||||
$date = Carbon::createFromFormat('Y-m-d', $this->option($field));
|
$date = Carbon::createFromFormat('Y-m-d', $this->option($field));
|
||||||
} catch (InvalidArgumentException $e) {
|
} catch (InvalidArgumentException $e) {
|
||||||
Log::error($e->getMessage());
|
Log::error($e->getMessage());
|
||||||
throw new FireflyException(sprintf('%s date "%s" must be formatted YYYY-MM-DD', $field, $this->option('start')));
|
$this->error(sprintf('%s date "%s" must be formatted YYYY-MM-DD. Field will be ignored.', $field, $this->option('start')));
|
||||||
}
|
|
||||||
}
|
|
||||||
if (null === $date && 'start' === $field) {
|
|
||||||
$journal = $this->journalRepository->firstNull();
|
|
||||||
$date = null === $journal ? Carbon::now()->subYear() : $date;
|
|
||||||
}
|
|
||||||
if (null === $date && 'end' === $field) {
|
|
||||||
$date = new Carbon;
|
|
||||||
}
|
|
||||||
if ('start' === $date) {
|
|
||||||
$date->startOfDay();
|
|
||||||
}
|
|
||||||
if ('end' === $date) {
|
|
||||||
$date->endOfDay();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $date;
|
return $date;
|
||||||
}
|
}
|
||||||
|
if ('start' === $field) {
|
||||||
|
$journal = $this->journalRepository->firstNull();
|
||||||
|
$date = null === $journal ? Carbon::now()->subYear() : $journal->date;
|
||||||
|
$date->startOfDay();
|
||||||
|
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
if ('end' === $field) {
|
||||||
|
$date = new Carbon;
|
||||||
|
$date->endOfDay();
|
||||||
|
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fallback
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function getExportDirectory(): string
|
private function getExportDirectory(): string
|
||||||
{
|
{
|
||||||
$directory = $this->option('export_directory');
|
$directory = (string) $this->option('export_directory');
|
||||||
if (null === $directory) {
|
if (null === $directory) {
|
||||||
$directory = './';
|
$directory = './';
|
||||||
}
|
}
|
||||||
@@ -256,8 +256,8 @@ class ExportData extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
|
||||||
* @throws FireflyException
|
* @throws FireflyException
|
||||||
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function parseOptions(): array
|
private function parseOptions(): array
|
||||||
{
|
{
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* CreateCSVImport.php
|
* CreateCSVImport.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -39,6 +39,9 @@ use Log;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CreateCSVImport.
|
* Class CreateCSVImport.
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
class CreateCSVImport extends Command
|
class CreateCSVImport extends Command
|
||||||
{
|
{
|
||||||
@@ -60,12 +63,12 @@ class CreateCSVImport extends Command
|
|||||||
{configuration? : The configuration file to use for the import.}
|
{configuration? : The configuration file to use for the import.}
|
||||||
{--user=1 : The user ID that the import should import for.}
|
{--user=1 : The user ID that the import should import for.}
|
||||||
{--token= : The user\'s access token.}';
|
{--token= : The user\'s access token.}';
|
||||||
/** @var UserRepositoryInterface */
|
|
||||||
private $userRepository;
|
|
||||||
/** @var ImportJobRepositoryInterface */
|
|
||||||
private $importRepository;
|
|
||||||
/** @var ImportJob */
|
/** @var ImportJob */
|
||||||
private $importJob;
|
private $importJob;
|
||||||
|
/** @var ImportJobRepositoryInterface */
|
||||||
|
private $importRepository;
|
||||||
|
/** @var UserRepositoryInterface */
|
||||||
|
private $userRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run the command.
|
* Run the command.
|
||||||
@@ -87,13 +90,13 @@ class CreateCSVImport extends Command
|
|||||||
}
|
}
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
$user = $this->userRepository->findNull((int)$this->option('user'));
|
$user = $this->userRepository->findNull((int) $this->option('user'));
|
||||||
$file = (string)$this->argument('file');
|
$file = (string) $this->argument('file');
|
||||||
$configuration = (string)$this->argument('configuration');
|
$configuration = (string) $this->argument('configuration');
|
||||||
|
|
||||||
$this->importRepository->setUser($user);
|
$this->importRepository->setUser($user);
|
||||||
|
|
||||||
$configurationData = json_decode(file_get_contents($configuration), true);
|
$configurationData = json_decode(file_get_contents($configuration), true, 512, JSON_THROW_ON_ERROR);
|
||||||
$this->importJob = $this->importRepository->create('file');
|
$this->importJob = $this->importRepository->create('file');
|
||||||
|
|
||||||
|
|
||||||
@@ -125,6 +128,7 @@ class CreateCSVImport extends Command
|
|||||||
} catch (FireflyException $e) {
|
} catch (FireflyException $e) {
|
||||||
$this->errorLine($e->getMessage());
|
$this->errorLine($e->getMessage());
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command-with-error', $this->signature);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,6 +138,7 @@ class CreateCSVImport extends Command
|
|||||||
} catch (FireflyException $e) {
|
} catch (FireflyException $e) {
|
||||||
$this->errorLine($e->getMessage());
|
$this->errorLine($e->getMessage());
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command-with-error', $this->signature);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,25 +148,14 @@ class CreateCSVImport extends Command
|
|||||||
// clear cache for user:
|
// clear cache for user:
|
||||||
app('preferences')->setForUser($user, 'lastActivity', microtime());
|
app('preferences')->setForUser($user, 'lastActivity', microtime());
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is
|
|
||||||
* executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should
|
|
||||||
* be called from the handle method instead of using the constructor to initialize the command.
|
|
||||||
*
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
private function stupidLaravel(): void
|
|
||||||
{
|
|
||||||
$this->userRepository = app(UserRepositoryInterface::class);
|
|
||||||
$this->importRepository = app(ImportJobRepositoryInterface::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $message
|
* @param string $message
|
||||||
* @param array|null $data
|
* @param array|null $data
|
||||||
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
private function errorLine(string $message, array $data = null): void
|
private function errorLine(string $message, array $data = null): void
|
||||||
@@ -171,9 +165,34 @@ class CreateCSVImport extends Command
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function giveFeedback(): void
|
||||||
|
{
|
||||||
|
$this->infoLine('Job has finished.');
|
||||||
|
|
||||||
|
|
||||||
|
if (null !== $this->importJob->tag) {
|
||||||
|
$this->infoLine(sprintf('%d transaction(s) have been imported.', $this->importJob->tag->transactionJournals->count()));
|
||||||
|
$this->infoLine(sprintf('You can find your transactions under tag "%s"', $this->importJob->tag->tag));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null === $this->importJob->tag) {
|
||||||
|
$this->errorLine('No transactions have been imported :(.');
|
||||||
|
}
|
||||||
|
if (count($this->importJob->errors) > 0) {
|
||||||
|
$this->infoLine(sprintf('%d error(s) occurred:', count($this->importJob->errors)));
|
||||||
|
foreach ($this->importJob->errors as $err) {
|
||||||
|
$this->errorLine('- ' . $err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $message
|
* @param string $message
|
||||||
* @param array $data
|
* @param array $data
|
||||||
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
private function infoLine(string $message, array $data = null): void
|
private function infoLine(string $message, array $data = null): void
|
||||||
@@ -182,65 +201,6 @@ class CreateCSVImport extends Command
|
|||||||
$this->line($message);
|
$this->line($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Verify user inserts correct arguments.
|
|
||||||
*
|
|
||||||
* @noinspection MultipleReturnStatementsInspection
|
|
||||||
* @return bool
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
private function validArguments(): bool
|
|
||||||
{
|
|
||||||
$file = (string)$this->argument('file');
|
|
||||||
$configuration = (string)$this->argument('configuration');
|
|
||||||
$cwd = getcwd();
|
|
||||||
$enabled = (bool)config('import.enabled.file');
|
|
||||||
|
|
||||||
if (false === $enabled) {
|
|
||||||
$this->errorLine('CSV Provider is not enabled.');
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!file_exists($file)) {
|
|
||||||
$this->errorLine(sprintf('Firefly III cannot find file "%s" (working directory: "%s").', $file, $cwd));
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!file_exists($configuration)) {
|
|
||||||
$this->errorLine(sprintf('Firefly III cannot find configuration file "%s" (working directory: "%s").', $configuration, $cwd));
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$configurationData = json_decode(file_get_contents($configuration), true);
|
|
||||||
if (null === $configurationData) {
|
|
||||||
$this->errorLine(sprintf('Firefly III cannot read the contents of configuration file "%s" (working directory: "%s").', $configuration, $cwd));
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store the supplied file as an attachment to this job.
|
|
||||||
*
|
|
||||||
* @param string $file
|
|
||||||
* @throws FireflyException
|
|
||||||
*/
|
|
||||||
private function storeFile(string $file): void
|
|
||||||
{
|
|
||||||
// store file as attachment.
|
|
||||||
if ('' !== $file) {
|
|
||||||
$messages = $this->importRepository->storeCLIUpload($this->importJob, 'import_file', $file);
|
|
||||||
if ($messages->count() > 0) {
|
|
||||||
throw new FireflyException($messages->first());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep repeating import call until job lands on "provider_finished".
|
* Keep repeating import call until job lands on "provider_finished".
|
||||||
*
|
*
|
||||||
@@ -307,26 +267,75 @@ class CreateCSVImport extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Store the supplied file as an attachment to this job.
|
||||||
*
|
*
|
||||||
|
* @param string $file
|
||||||
|
*
|
||||||
|
* @throws FireflyException
|
||||||
*/
|
*/
|
||||||
private function giveFeedback(): void
|
private function storeFile(string $file): void
|
||||||
{
|
{
|
||||||
$this->infoLine('Job has finished.');
|
// store file as attachment.
|
||||||
|
if ('' !== $file) {
|
||||||
|
$messages = $this->importRepository->storeCLIUpload($this->importJob, 'import_file', $file);
|
||||||
if (null !== $this->importJob->tag) {
|
if ($messages->count() > 0) {
|
||||||
$this->infoLine(sprintf('%d transaction(s) have been imported.', $this->importJob->tag->transactionJournals->count()));
|
throw new FireflyException($messages->first());
|
||||||
$this->infoLine(sprintf('You can find your transactions under tag "%s"', $this->importJob->tag->tag));
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null === $this->importJob->tag) {
|
/**
|
||||||
$this->errorLine('No transactions have been imported :(.');
|
* Laravel will execute ALL __construct() methods for ALL commands whenever a SINGLE command is
|
||||||
|
* executed. This leads to noticeable slow-downs and class calls. To prevent this, this method should
|
||||||
|
* be called from the handle method instead of using the constructor to initialize the command.
|
||||||
|
*
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
private function stupidLaravel(): void
|
||||||
|
{
|
||||||
|
$this->userRepository = app(UserRepositoryInterface::class);
|
||||||
|
$this->importRepository = app(ImportJobRepositoryInterface::class);
|
||||||
}
|
}
|
||||||
if (count($this->importJob->errors) > 0) {
|
|
||||||
$this->infoLine(sprintf('%d error(s) occurred:', count($this->importJob->errors)));
|
/**
|
||||||
foreach ($this->importJob->errors as $err) {
|
* Verify user inserts correct arguments.
|
||||||
$this->errorLine('- ' . $err);
|
*
|
||||||
|
* @noinspection MultipleReturnStatementsInspection
|
||||||
|
* @return bool
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
private function validArguments(): bool
|
||||||
|
{
|
||||||
|
$file = (string) $this->argument('file');
|
||||||
|
$configuration = (string) $this->argument('configuration');
|
||||||
|
$cwd = getcwd();
|
||||||
|
$enabled = (bool) config('import.enabled.file');
|
||||||
|
|
||||||
|
if (false === $enabled) {
|
||||||
|
$this->errorLine('CSV Provider is not enabled.');
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!file_exists($file)) {
|
||||||
|
$this->errorLine(sprintf('Firefly III cannot find file "%s" (working directory: "%s").', $file, $cwd));
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!file_exists($configuration)) {
|
||||||
|
$this->errorLine(sprintf('Firefly III cannot find configuration file "%s" (working directory: "%s").', $configuration, $cwd));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$configurationData = json_decode(file_get_contents($configuration), true, 512, JSON_THROW_ON_ERROR);
|
||||||
|
if (null === $configurationData) {
|
||||||
|
$this->errorLine(sprintf('Firefly III cannot read the contents of configuration file "%s" (working directory: "%s").', $configuration, $cwd));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* ReportEmptyObjects.php
|
* ReportEmptyObjects.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -64,6 +64,7 @@ class ReportEmptyObjects extends Command
|
|||||||
$end = round(microtime(true) - $start, 2);
|
$end = round(microtime(true) - $start, 2);
|
||||||
$this->info(sprintf('Report on empty objects finished in %s seconds', $end));
|
$this->info(sprintf('Report on empty objects finished in %s seconds', $end));
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* ReportIntegrity.php
|
* ReportIntegrity.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -30,6 +30,7 @@ use Schema;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ReportIntegrity
|
* Class ReportIntegrity
|
||||||
|
*
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
class ReportIntegrity extends Command
|
class ReportIntegrity extends Command
|
||||||
@@ -68,6 +69,7 @@ class ReportIntegrity extends Command
|
|||||||
echo $result;
|
echo $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* ReportSum.php
|
* ReportSum.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -54,6 +54,7 @@ class ReportSum extends Command
|
|||||||
{
|
{
|
||||||
$this->reportSum();
|
$this->reportSum();
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ class ReportSum extends Command
|
|||||||
|
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
foreach ($userRepository->all() as $user) {
|
foreach ($userRepository->all() as $user) {
|
||||||
$sum = (string)$user->transactions()->sum('amount');
|
$sum = (string) $user->transactions()->sum('amount');
|
||||||
if (0 !== bccomp($sum, '0')) {
|
if (0 !== bccomp($sum, '0')) {
|
||||||
$message = sprintf('Error: Transactions for user #%d (%s) are off by %s!', $user->id, $user->email, $sum);
|
$message = sprintf('Error: Transactions for user #%d (%s) are off by %s!', $user->id, $user->email, $sum);
|
||||||
$this->error($message);
|
$this->error($message);
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
/**
|
/**
|
||||||
* RestoreOAuthKeys.php
|
* RestoreOAuthKeys.php
|
||||||
* Copyright (c) 2019 thegrumpydictator@gmail.com
|
* Copyright (c) 2020 james@firefly-iii.org
|
||||||
*
|
*
|
||||||
* This file is part of Firefly III (https://github.com/firefly-iii).
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
*
|
*
|
||||||
@@ -21,8 +22,6 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Console\Commands\Integrity;
|
namespace FireflyIII\Console\Commands\Integrity;
|
||||||
|
|
||||||
use Artisan;
|
|
||||||
use Crypt;
|
|
||||||
use FireflyIII\Support\System\OAuthKeys;
|
use FireflyIII\Support\System\OAuthKeys;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
|
|
||||||
@@ -53,6 +52,7 @@ class RestoreOAuthKeys extends Command
|
|||||||
{
|
{
|
||||||
$this->restoreOAuthKeys();
|
$this->restoreOAuthKeys();
|
||||||
|
|
||||||
|
// app('telemetry')->feature('executed-command', $this->signature);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user