mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-19 05:04:59 +00:00
Compare commits
1004 Commits
issue435_n
...
issue471_a
Author | SHA1 | Date | |
---|---|---|---|
246ee58d8b | |||
c2061110dd | |||
b2fb86111d | |||
db6c4f15f8 | |||
12231912d6 | |||
7b0c8d21ee | |||
f713b1ddc8 | |||
faf1559770 | |||
5a1ce399f6 | |||
505384c2a0 | |||
a7654edefa | |||
81689e3507 | |||
b891ba842d | |||
3ceae0473d | |||
795a8e9daf | |||
|
81edaef062 | ||
|
dc48b4b9c7 | ||
e72a2004d7 | |||
329fb05db0 | |||
75250402c8 | |||
e5209ca6d9 | |||
4512b94293 | |||
217f95472b | |||
b7abf6b6bf | |||
c39fa1c49b | |||
81c8d0ec77 | |||
72012a70d9 | |||
916560c522 | |||
57d6240cd1 | |||
2d460adc4d | |||
d155c76013 | |||
529a9e5f58 | |||
2b837e0445 | |||
4279acc2f8 | |||
8fb3870ca0 | |||
ff72b28861 | |||
1f2638626c | |||
41ff21ee23 | |||
30bb2e8393 | |||
ca166655da | |||
8f69f852b9 | |||
6747cad210 | |||
0cbcd91c3f | |||
d757e07dfc | |||
83dd8f810c | |||
bd0b45b4dd | |||
6dbe8068ae | |||
19561c63cb | |||
354f130e9e | |||
2d9af8f8c0 | |||
f7d9551dc1 | |||
abc3caee00 | |||
33f93d484d | |||
8470604b8f | |||
b85e6aae3f | |||
a4baf89a6a | |||
0a05dcd753 | |||
c6be7955fd | |||
e246ccbcd9 | |||
44b537f05e | |||
0fd23c61a1 | |||
6cad0be181 | |||
9a0eb1c74c | |||
a70c561596 | |||
daa3eabd43 | |||
b24de76d77 | |||
92d394b669 | |||
c17d20f945 | |||
be77c3729b | |||
ad1e7b576c | |||
bf0578b6d7 | |||
0ce23230da | |||
8b7404e531 | |||
bc550ea42a | |||
65e6471a02 | |||
de9d2aa885 | |||
66ab38c60f | |||
8882c99f5a | |||
8512a5e1bc | |||
7f97215fe9 | |||
6427fc64cd | |||
26d5bf03bd | |||
|
7048f670ed | ||
c757fa068a | |||
ebc4ec0d7c | |||
617473f6a5 | |||
124a6a58fc | |||
afa38e9dd5 | |||
a52f29bb78 | |||
b95ff337b6 | |||
92a169be1e | |||
e6d59bc837 | |||
31731c6f44 | |||
86ec020f80 | |||
07351e2946 | |||
405694a0b4 | |||
bad39364c2 | |||
c0b39e4e7c | |||
f98b35f009 | |||
8770188d54 | |||
35c7d55b8c | |||
2a53fb9341 | |||
e7f0cd50c9 | |||
a41d6cf744 | |||
24d28b0a52 | |||
4425f2ad49 | |||
a8db07a383 | |||
ef9fd80ad5 | |||
e6169ddffa | |||
ccf7c885bb | |||
01c571ab06 | |||
69b2dce7ee | |||
910245f855 | |||
7fbb3dfd07 | |||
9765bc5663 | |||
bb65909bfa | |||
03b0a8766e | |||
5eea202586 | |||
a78c62789c | |||
68671e297c | |||
4257a918f3 | |||
7ffb3dc74f | |||
0f926e9dfe | |||
fc55567a64 | |||
009030b5fb | |||
6e1cabc8fc | |||
572c602387 | |||
26a4577420 | |||
f09870931c | |||
ea21f2d9c4 | |||
d81a41bb17 | |||
7851d9956e | |||
f35479e4d2 | |||
432b105be5 | |||
988b67bd4b | |||
f64409e5e6 | |||
a1baf99294 | |||
d9bb18e042 | |||
00a6ef0598 | |||
|
c03e38f4ff | ||
|
f9bcc5b1e9 | ||
934a066910 | |||
095afb90c7 | |||
645549ae34 | |||
|
d34462d849 | ||
|
c65a73604d | ||
|
6a4edd000f | ||
|
017b7bca87 | ||
612d053892 | |||
8edc68859e | |||
a4afe73efe | |||
2b67f105f7 | |||
95b114a144 | |||
5477a70c84 | |||
7d69ec6d6b | |||
17594b58ab | |||
cddd3c20c8 | |||
25a37974e5 | |||
066afc07a8 | |||
56c3f05ec9 | |||
1907beaf6e | |||
37c04d3f12 | |||
a7fbce0add | |||
e663bae5c4 | |||
ad6a68487c | |||
|
88f377778c | ||
|
d6deaeb324 | ||
|
f2744fba43 | ||
72a62a3a1b | |||
bcde4497cc | |||
|
ddce7603ad | ||
|
3a3eb68288 | ||
a4ece21f2b | |||
c7762dd6d2 | |||
f47fb17b8d | |||
51dc255be5 | |||
6ddbb79157 | |||
dcddf4b3f1 | |||
e027958c63 | |||
034a416612 | |||
63cdc97c47 | |||
ae10a8bd1c | |||
eb2bad0f47 | |||
bc43d8bae5 | |||
83dfe530e9 | |||
c477996acf | |||
36b1f05524 | |||
dae9d48574 | |||
9812710cd0 | |||
3b083c31e7 | |||
1b567327b7 | |||
|
1d6d8dc002 | ||
38e92ee981 | |||
e433b6a42b | |||
df24d085ca | |||
|
f29ead4961 | ||
|
b361ab2d74 | ||
de4f65fede | |||
|
10fcd4f732 | ||
|
bc8709f9a1 | ||
3d6745e535 | |||
961c0a867c | |||
f5327fe8ab | |||
6f270188f7 | |||
5895334244 | |||
1812592d43 | |||
3babbe5e84 | |||
632ea710c8 | |||
bdcb135adb | |||
3b93d2c0a5 | |||
f24b2931dd | |||
c1e972963f | |||
ce2e05464f | |||
dbe0c9097f | |||
e68c12e0e7 | |||
c99a967fb9 | |||
d11eebefae | |||
b423821ae9 | |||
7a0234adb2 | |||
|
f36fc0ba60 | ||
|
cff126953e | ||
|
89064f55a1 | ||
f69dab5ca5 | |||
259cdd34c4 | |||
|
9dca42e242 | ||
|
248e4e93ed | ||
|
db2bf1e98e | ||
ea66db07a4 | |||
5f35a42fe3 | |||
e82b2bd10a | |||
ad4f400262 | |||
866bcec114 | |||
367188b03d | |||
dd4d463c42 | |||
1031f0d40e | |||
5d7943f871 | |||
d0c34c0206 | |||
726b8f0e3c | |||
5d4149db35 | |||
f04474c82f | |||
156398caba | |||
ae3091f620 | |||
84f9fdba28 | |||
531f940b65 | |||
d907f3f11b | |||
02409d4992 | |||
771b6a59a5 | |||
2e336ac874 | |||
a61c9553e1 | |||
3243a7e0a2 | |||
06cc84a21f | |||
688914906d | |||
f9d87876f2 | |||
7df70cab98 | |||
287ea80be9 | |||
dc3d88a1ef | |||
cba6394823 | |||
eea0711a04 | |||
949bdfd993 | |||
3067da5d24 | |||
546c925224 | |||
d7b5944c5f | |||
aa234e0749 | |||
506118b3f1 | |||
52a78902f7 | |||
e89489fde9 | |||
a7be9c0a83 | |||
6331d8fd3e | |||
|
eb6790b17d | ||
61f010f5ad | |||
30fd36b741 | |||
91aacb91cc | |||
73c17febd9 | |||
99dc9dd4a8 | |||
c5ffca22ff | |||
89e7eb85ff | |||
98d5de29b0 | |||
4939c8c8e4 | |||
8d5c66dc40 | |||
02571bf727 | |||
2c6cbeb8ca | |||
13a7d791a1 | |||
ae555fed00 | |||
6d65009987 | |||
386e88387d | |||
22473d6547 | |||
e7b4f1a54f | |||
1f6565d2ef | |||
e838a82556 | |||
eebca7b0f1 | |||
169d4dc41c | |||
9e063180bf | |||
5b0b15f395 | |||
736d43e756 | |||
b4add2de95 | |||
37a8928e41 | |||
0a0243eb85 | |||
a6c7c1d997 | |||
c7caa2ba76 | |||
2ce8b1110d | |||
11d57094e8 | |||
704392a729 | |||
efeda81e05 | |||
ae5940eb48 | |||
638ae3315f | |||
ac9e55e2fc | |||
293efc03b4 | |||
f084078cf2 | |||
c8a66f008e | |||
b6b6c25b3b | |||
cb35aed202 | |||
eebe1d669a | |||
8f462da627 | |||
3aaecc8630 | |||
9b97b03d42 | |||
bdb07a3a05 | |||
2fda5b751b | |||
ddb048daca | |||
ac42de7863 | |||
2c55cfe1dc | |||
3ba3498892 | |||
99276dc41c | |||
fced8ef4b7 | |||
247f1879e3 | |||
a06a0788c1 | |||
5a8291dc87 | |||
15af0203ff | |||
7006196691 | |||
5cbe14464d | |||
2463a492c8 | |||
72f69f0f82 | |||
a2daeff384 | |||
caaa25ef8e | |||
ff5aeaae17 | |||
184a664bf9 | |||
|
dbc604d84a | ||
|
9c353669ea | ||
8d92cc0ba7 | |||
|
215b859725 | ||
da67fa4c4f | |||
5b4c3ae9b3 | |||
fdb36ab047 | |||
a1b1e6bb17 | |||
|
73dd97f7d3 | ||
bfd51c6615 | |||
|
b84e161399 | ||
|
3b8c329ff6 | ||
|
e7299bac4a | ||
|
80d518e4af | ||
|
730762d1c6 | ||
|
288f0dbf69 | ||
|
2c02150b1a | ||
|
5e0a693108 | ||
72ba2c6bca | |||
6adb647ccc | |||
97731b0a9b | |||
|
1e63d00767 | ||
6151d0ce54 | |||
9551e10d2b | |||
387b7c2fbd | |||
39ba21f308 | |||
|
22755de1dd | ||
|
3d7fcd99a8 | ||
|
35d723e5fb | ||
|
62af980ea5 | ||
|
8abed67e1c | ||
|
b8992b8eeb | ||
|
6ddbf35a7b | ||
|
325ab0daf3 | ||
1a783e1881 | |||
d04f5a527b | |||
f51279e83e | |||
90bebbad7d | |||
|
82052f5d70 | ||
|
369397bf4f | ||
c61577edda | |||
|
1beae4d713 | ||
352302b7aa | |||
01b60f334a | |||
0546a43d63 | |||
5c68879509 | |||
9d844f6692 | |||
28509f651d | |||
b590444375 | |||
873258fc84 | |||
7988becc45 | |||
45c4a7ae64 | |||
05803787a9 | |||
33acc645ea | |||
0ce787701f | |||
e9cacbb74a | |||
a2f8f7ae43 | |||
a49c53772e | |||
1adccdb06e | |||
22d593fc12 | |||
de7ec6fa54 | |||
90948e5513 | |||
bd79391efc | |||
4ea72f7d9d | |||
96e38a8a6d | |||
09e6872724 | |||
f44f9d356b | |||
|
9f0ab5aee7 | ||
|
6eac6044cd | ||
a24cd693e3 | |||
f63aab327d | |||
0c9499dd58 | |||
00787adf2b | |||
|
dbe186547f | ||
|
13f0b8610c | ||
|
f9e8bf4f2d | ||
|
44e93dd5f8 | ||
|
ee8f331de4 | ||
|
99f8aeb6cd | ||
|
fc1fe7c277 | ||
|
a8b6609dbf | ||
|
ded2ac7d48 | ||
|
16a0dc4621 | ||
|
ba668d3b9d | ||
|
690a443bdb | ||
|
137eb184d0 | ||
0a2730540e | |||
9284a4bc29 | |||
|
f2edc1ef0c | ||
bf2d9acc5a | |||
2628e58ea0 | |||
|
da650fa1f2 | ||
|
55a65ee6e9 | ||
|
492c22d1b7 | ||
e153fa34e9 | |||
d272e1398c | |||
9457926a35 | |||
8ff80ac65e | |||
3d1ded8b1c | |||
c611f35cd6 | |||
f79cfda74a | |||
ff4b90835e | |||
d5501bcfbd | |||
fb1552f6b7 | |||
e28da7e99b | |||
4b899d337a | |||
d6933fce35 | |||
aefd09693b | |||
8555277827 | |||
6f58a9a8bb | |||
b02739cc3c | |||
b8d9d59d76 | |||
|
ba52e95253 | ||
|
2e69dbb7c9 | ||
13d579dc33 | |||
|
efcc602d53 | ||
ee82bd2867 | |||
|
fcc5d3d349 | ||
af3b761208 | |||
23e61ac6a7 | |||
e4ae495a3f | |||
ec99bc95fa | |||
|
b68b43118b | ||
|
db95e935d9 | ||
|
dc5ff53a57 | ||
|
50a2de1559 | ||
d18ab5cf49 | |||
1860478aea | |||
|
17e83deb55 | ||
16be28681a | |||
388b666b5d | |||
|
9b06ccc3e6 | ||
efbd9b0185 | |||
b2a61071bf | |||
f0849eeef5 | |||
c7f2eedd4b | |||
ab74478afc | |||
f88d0ee19e | |||
727480d6d1 | |||
af79ffd544 | |||
80aee185a7 | |||
7afada5dad | |||
739c7e9a77 | |||
03471a74fe | |||
44ed2e44e0 | |||
68aa80269f | |||
2012df512c | |||
1c21b80703 | |||
25fe105590 | |||
b6e530fec6 | |||
4ef2274803 | |||
3352999862 | |||
5605813826 | |||
72795240b9 | |||
d0772fc306 | |||
|
def90893de | ||
|
4b692edd7d | ||
|
6472c554ed | ||
|
f04118218d | ||
|
cde6e8f368 | ||
474fffcbb5 | |||
0333e79b0a | |||
7c043e9d85 | |||
|
6d46efa610 | ||
|
84f2e1c72a | ||
|
1c1dec1f5b | ||
|
3ff9291580 | ||
9265a15427 | |||
6d3b88aee9 | |||
827c85ac56 | |||
|
7b52a10943 | ||
|
187c9d82b6 | ||
214ef09fe7 | |||
892be42580 | |||
18694a34cf | |||
e9236875d2 | |||
db4b0b104b | |||
4ad65b616d | |||
|
c5eac09478 | ||
|
a88e052eb6 | ||
|
568a1d95f4 | ||
9769aa1386 | |||
bf4a3a2c91 | |||
3df2335cf4 | |||
1c7c217d1c | |||
f0e41f839f | |||
|
349db2142d | ||
34b3c6fa32 | |||
b1c0e18e51 | |||
6edf0bcb3b | |||
6171b3411f | |||
86bf0115dd | |||
19cad9a7a4 | |||
a736c2a67e | |||
636f92b168 | |||
|
1b66941746 | ||
|
dca17c409b | ||
7f5a91fc49 | |||
3ab71c8a2e | |||
fdf1911c15 | |||
ba24abf788 | |||
076728bf5f | |||
0833bb49ca | |||
|
23fd4be2e5 | ||
|
4406016f82 | ||
ac12e75714 | |||
d50d68aa86 | |||
fccac80222 | |||
bf70d344bf | |||
d0591d0351 | |||
c83d6d392f | |||
09ca1ec6bb | |||
970431197f | |||
9fdd9da486 | |||
b9eee51de6 | |||
c0ec64e4be | |||
74a84e42a6 | |||
595ddf5b6f | |||
abe183fd10 | |||
9a0883eb5f | |||
663295d436 | |||
9f9986d367 | |||
db37527f72 | |||
6171a221b2 | |||
1312fd0941 | |||
c1832d39f1 | |||
3756631595 | |||
969f0b8aeb | |||
8b37f008e6 | |||
a7a933c7a7 | |||
15bc3e62d3 | |||
5ce62f5458 | |||
283b378291 | |||
3e30684198 | |||
c2e284682f | |||
5407dbfc98 | |||
fa23bfd7d5 | |||
09de7cbf7d | |||
6a3c8017f0 | |||
9bb149fb02 | |||
eb6ec8a4af | |||
c8c2c4c859 | |||
7bd93e53c2 | |||
5d6f3de694 | |||
3eb826d422 | |||
e9ffdb1f03 | |||
f4f488dad1 | |||
2a9f1dc238 | |||
8482c8ffa7 | |||
54ad7a4b8f | |||
ed4cf67e79 | |||
550168fd7c | |||
8470430c57 | |||
5dc117037d | |||
7f1083aa40 | |||
900adc7105 | |||
0648154ba1 | |||
86de8137e4 | |||
a9415488dd | |||
8945703785 | |||
9f90cc8fe1 | |||
|
d6d7edf25d | ||
7b17dc692e | |||
e5f7120733 | |||
1a05ffab96 | |||
aad7a21bc3 | |||
ae0bf7bfd7 | |||
d2ecc5d3a3 | |||
22aefca5c9 | |||
cce790f2f8 | |||
|
84478c651e | ||
|
88e9a96e0e | ||
cefa304fb5 | |||
|
a187bac7b0 | ||
83760cc980 | |||
2b108d0d70 | |||
f5accb827c | |||
|
4543c411e7 | ||
|
7aefa5014c | ||
|
d163783ed3 | ||
4536f30da2 | |||
8764aacd92 | |||
8b8f6027cc | |||
6769752c26 | |||
|
5695bb0e9e | ||
|
48a32f2403 | ||
695b9d5bea | |||
f38cfb4b28 | |||
|
a7240e8cc6 | ||
67948f7f3a | |||
52d8776fbb | |||
0d38cae217 | |||
d6bad9e030 | |||
|
b146f17d2f | ||
df675cd757 | |||
ecc2e390f7 | |||
c3e0b3b708 | |||
449a6a1b4e | |||
eb874a15a6 | |||
3b26466a6c | |||
a6ac6ee6d8 | |||
a59994355b | |||
06c279627a | |||
1e146f542e | |||
cdd21c94c6 | |||
|
30cdcb0836 | ||
|
29308110ea | ||
|
18c57d532c | ||
|
b814e812b6 | ||
|
dbbbd99788 | ||
|
47676c67ff | ||
|
7ad78fbce1 | ||
|
37e38436a8 | ||
|
e1b3719746 | ||
|
68a64aa67f | ||
|
d780d95157 | ||
|
4822acb6fb | ||
260ce8ba17 | |||
822f0aa737 | |||
e10a6b4bf2 | |||
8e1f3a5cc0 | |||
31ec6c70ef | |||
cd84700400 | |||
08fa1edbee | |||
15d9593d0f | |||
010afded18 | |||
c12f633829 | |||
fb6f0c316e | |||
b1ed263c4e | |||
846e487e27 | |||
72a9183ca8 | |||
fe89704672 | |||
93d023007e | |||
8bf179934d | |||
24c79cc4b1 | |||
f93282d657 | |||
18c0e6a6bf | |||
3a602385cc | |||
26373e5d23 | |||
cb4c3b46b9 | |||
abb81bf45f | |||
a9694da557 | |||
|
d205939361 | ||
deadeb341e | |||
274c6115cc | |||
416665f209 | |||
f60f927549 | |||
2e59c1415b | |||
d852477c51 | |||
f8d5f13a88 | |||
af0d7765ff | |||
c1f5730c4d | |||
da019a146a | |||
|
4bd50d0148 | ||
|
1826b20b40 | ||
356d1a7133 | |||
|
2cc7473276 | ||
|
2ea5c4b0c7 | ||
432cce280b | |||
530297bc67 | |||
c416f1ef6d | |||
3a5e956e49 | |||
5cf4013a99 | |||
16cca07e12 | |||
|
aae360d6ab | ||
bf25740098 | |||
18836f312a | |||
2b257cc402 | |||
|
289d79e011 | ||
b7d6d69101 | |||
|
15487cd84c | ||
fc5a893b00 | |||
92a6fed521 | |||
051ed19f97 | |||
1479e2ae9a | |||
|
1ab4f997ba | ||
|
24b11f609d | ||
c4e0b68ebe | |||
f8ec0f85e5 | |||
ed33514aee | |||
0d96c1f12d | |||
0fcf21bd35 | |||
9065ec40b1 | |||
8f6ab15621 | |||
fd69ae3d4a | |||
81b42ef99a | |||
c546d23421 | |||
|
0661eb8701 | ||
|
c073ec14c8 | ||
|
bf26092764 | ||
|
e035a6fd94 | ||
ff1ff8f5bb | |||
|
3f43574371 | ||
|
b1390f4e9b | ||
|
fd29a4ce65 | ||
|
4655892815 | ||
e46220ff72 | |||
|
f19a090549 | ||
08f9819453 | |||
7067d4b5bd | |||
de0be15fff | |||
b56d8c2956 | |||
|
5f71b46bb7 | ||
fd16222c51 | |||
185d1dbf49 | |||
576f46f845 | |||
|
154f976762 | ||
d5477e94b1 | |||
67ae506bb5 | |||
5a514cf2db | |||
1fdc994c0a | |||
35aa05fb97 | |||
70c7b1385e | |||
d486f2ddfc | |||
fc5ca30df0 | |||
0601fa0142 | |||
fffed6e3f6 | |||
ffe4dd4a98 | |||
cc4dfdb042 | |||
fd0ca3b29d | |||
daab42109b | |||
ab5bb3963b | |||
262bb13b6c | |||
5d530aaae9 | |||
|
f0e6bfc6c6 | ||
|
d4283a0b94 | ||
|
568c4b60ef | ||
|
736ca2272b | ||
|
88059884ec | ||
|
ce1d213082 | ||
|
71f3a3403c | ||
|
fbeda163f0 | ||
|
08c1bb7992 | ||
|
2f7b237c4c | ||
|
665027085d | ||
|
2618003177 | ||
8f597eb254 | |||
775d223be2 | |||
3849776511 | |||
cb3301bcef | |||
8d74566eac | |||
4a03c2aa43 | |||
292d56cfbe | |||
b41e016a6d | |||
0a2e2301a9 | |||
874c90e0e0 | |||
bb8898a4ec | |||
213da59b0b | |||
4e9879ba92 | |||
0690704391 | |||
610b861345 | |||
b7f8ba4385 | |||
a923a1f135 | |||
0d804dd817 | |||
4f4b1bfbaa | |||
caa63ea97a | |||
8675bb65c1 | |||
104af6d9b5 | |||
2f2d4493ae | |||
2d23068354 | |||
b65dacca72 | |||
265c8b776b | |||
4920c8b28b | |||
4f9acf3174 | |||
962957409b | |||
0b4d79fd5e | |||
0efd3d2af3 | |||
|
02e5a1158d | ||
cfe32828a4 | |||
|
ca6bfea51f | ||
|
8c7da5f80c | ||
|
57175e1c0b | ||
|
c5d2953ecb | ||
ee8044b857 | |||
1fda56b5f7 | |||
ca79da2f9b | |||
c90e6231f9 | |||
e86fa41180 | |||
ebea4b7008 | |||
9565464489 | |||
05f83bf566 | |||
673d0c1e53 | |||
fe35a29fb8 | |||
53d51fea2f | |||
caaebd593b | |||
672fa48140 | |||
a9aeea234c | |||
1683685f6b | |||
e4aac56f2d | |||
d6990349d8 | |||
9ac2f7e359 | |||
f86c0353a2 | |||
0a289e1edd | |||
c2c5bec0e5 | |||
68bfca8a1f | |||
|
6e1b95aa60 | ||
|
baf9b6e1ae | ||
5ff47050ff | |||
|
c302f2dcf9 | ||
|
24fc7a216b | ||
|
2926965400 | ||
|
341177aa5e | ||
56923aa1b8 | |||
62f54a3c27 | |||
64e9461586 | |||
5e01eebd25 | |||
bae2a385aa | |||
9861e3fe1c | |||
95b2fcead7 | |||
45beb27f83 | |||
|
b992bde41d | ||
aebb21935b | |||
20104f1b3b | |||
25264447bc | |||
c1036a3627 | |||
f1a9a872bb | |||
df322d7ebb | |||
|
56a4fd3fa0 | ||
|
02716a6a93 | ||
d4534b56a0 | |||
|
81b7b49170 | ||
c8922a6a82 | |||
cdf0bb30c9 | |||
e4793e1a77 | |||
8347ddd5be | |||
12412e05a7 | |||
|
dd99c35e35 | ||
|
9d651a70e9 | ||
b0d50d315c | |||
41bddf2db6 | |||
769700fe83 | |||
433ccb1fc4 | |||
145c1d59e9 | |||
ae8cc0f700 | |||
a764da3e99 | |||
8f92f79f85 | |||
f093765d03 | |||
c44d962ba8 | |||
20d22b726c | |||
8fa2f0e7ad | |||
604c7f385e | |||
1a07c9d71a | |||
f7e287d415 | |||
b16cc2dc27 | |||
188447fc10 | |||
b920bf6d22 | |||
32ff54e130 | |||
02c09687a4 | |||
3b1fc4aacb | |||
bf9469d538 | |||
c2dec360b1 | |||
dc7422bf56 | |||
89edf508f5 | |||
|
50410d190f | ||
|
b54e076ca0 | ||
2ab7556ac3 | |||
3d38da7b37 | |||
056d5a3f98 | |||
17612afd87 | |||
0a4913f341 | |||
|
3aa12d2e8c | ||
a6504366b4 | |||
4e83e7905a | |||
|
96b1854fef | ||
|
489473806f | ||
|
f5bc8dca5e | ||
|
bc99c85802 | ||
385664e2bc | |||
1658fee090 | |||
b9dbb1916a | |||
|
99afd2e830 | ||
861f461bc5 | |||
b6c118a0c8 | |||
89d3ab38f0 | |||
441704dc29 | |||
8ee451c6e0 | |||
|
785e690404 | ||
|
2fcd7a21a4 | ||
f2221565c5 | |||
|
d5c1591205 | ||
|
7895699ef3 | ||
|
bd9963e65f | ||
df61fbff12 | |||
9ead38ee22 | |||
6402962990 | |||
9e9fa5039f | |||
e6d503a1e2 | |||
844650b685 | |||
4920142540 | |||
|
a7a1f699bb | ||
|
229a91ddf0 | ||
68d0c66402 | |||
c2a132a40b | |||
|
94729a66ca | ||
bd05315de3 | |||
d254a9e14a | |||
|
1c3f6c7c1e | ||
|
f8888462f1 | ||
|
4e2be091cd | ||
|
40a1726ca7 | ||
|
fc9deb8ba8 | ||
|
b1993dbf22 | ||
973644c62d | |||
b9af54892b | |||
f9154233e4 | |||
|
aa7da2559c | ||
753a007172 | |||
|
01a3af694a | ||
|
eee38e9577 | ||
50b7df1f4a | |||
|
1f5d529d33 | ||
|
c19099e76c | ||
|
692343aae4 | ||
|
4dd9bc1123 | ||
bb93cb23a7 | |||
57a88845dc | |||
3532e9dd8c | |||
fddb74f107 | |||
ee817b1d62 | |||
a399804094 | |||
05e9f118d7 | |||
7aad5be29f | |||
41b0dd50bd | |||
4de2cbe807 | |||
bc2d4c1066 | |||
298b597dd0 | |||
481456a038 | |||
|
2c94811c8f | ||
|
eb32b13bcc | ||
b87f14255d | |||
0f2cbbe553 | |||
256c5688a0 | |||
6460007aa1 | |||
f84e088e7b | |||
b8e16d2929 | |||
88fc5e94fa | |||
4431428c26 | |||
724ce8c9af | |||
a31b74e0e5 | |||
47615e2e5d | |||
475585c5e7 | |||
a2e086be75 | |||
e6cf1994b0 | |||
bea0b69858 | |||
95547e961e | |||
c4a859f2d2 | |||
a39bd79930 | |||
424d0533b8 | |||
5a7d187a10 | |||
dc8dd6a423 | |||
006e8cdc27 | |||
cf4f6f06e9 | |||
e467820345 | |||
416a1c4e4d | |||
1febfc11e5 | |||
a288fdf12d | |||
6a3f17962b | |||
3860adc435 | |||
65daf2d0cf | |||
9bf41bbd34 | |||
de7de22492 | |||
ea66fb4c37 | |||
c1232037a9 | |||
75eb6414ce | |||
5e7445a4fe | |||
c527b1b3cf | |||
acacef936c | |||
f971dc05eb | |||
9aba4ea8f6 |
@@ -29,6 +29,7 @@ variables:
|
||||
REDIS_URL: redis://redis:6379
|
||||
# change vendor dir to make the app install into tests/apps
|
||||
COMPOSER_VENDOR_DIR: tests/app/vendor
|
||||
DEFAULT_CARRIER_CODE: BE
|
||||
|
||||
stages:
|
||||
- Composer install
|
||||
@@ -78,6 +79,7 @@ psalm_tests:
|
||||
image: registry.gitlab.com/chill-projet/chill-app/php-base-image:7.4
|
||||
script:
|
||||
- bin/grumphp run --tasks=psalm
|
||||
allow_failure: true
|
||||
artifacts:
|
||||
expire_in: 30 min
|
||||
paths:
|
||||
|
175
CHANGELOG.md
175
CHANGELOG.md
@@ -9,18 +9,183 @@ and this project adheres to
|
||||
* date versioning for test releases
|
||||
|
||||
## Unreleased
|
||||
* AddPersons: remove ul-li html tags from AddPersons (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/419)
|
||||
|
||||
<!-- write down unreleased development here -->
|
||||
|
||||
## Test releases
|
||||
|
||||
### 2021-04-26
|
||||
|
||||
* [Datepickers] datepickers fixed when using keyboard to enter date (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/545)
|
||||
* [social_action] Display 'agents traitants' in parcours resumé and social action list (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/568)
|
||||
* [Person_search] Closed parcours shown within an accordeon that can be opened/closed (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/574)
|
||||
|
||||
### 2021-04-24
|
||||
|
||||
* [notification email on course designation] allow raw string in email content generation
|
||||
* [Accompanying period work] list evaluations associated to a work by startDate, and then by id, from the most recent to older
|
||||
* [Documents] Change wording 'créer' to 'enregistrer' (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/634)
|
||||
* [Parcours]: The number of 'mes parcours' displayed (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/572)
|
||||
* [Hompage_widget]: Renaming of tabs and removal of social actions tab (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/570)
|
||||
* [activity]: Ignore thirdparties when creating a social action via an activity (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/573)
|
||||
* [parcours]: change wording of warning message and button when user is not associated to a household yet (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/590#note_918370943)
|
||||
* [Accompanying period work evaluations] list documents associated to a work by creation date, and then by id, from the most recent to older
|
||||
* [Course comment] add validationConstraint NotNull and NotBlank on comment content, to avoid sql error
|
||||
* [Notifications] delay the sending of notificaiton to kernel.terminate
|
||||
* [Notifications / Period user change] fix the sending of notification when user changes
|
||||
* [Activity form] invert 'incoming' and 'receiving' in Activity form
|
||||
* [Activity form] keep the same order for 'attendee' field in new and edit form
|
||||
* [list with period] use "sameas" test operator to introduce requestor in list
|
||||
* [notification email on course designation] allow raw string in email content generation
|
||||
* [Accompanying period work] list evaluations associated to a work by startDate, and then by id, from the most recent to older
|
||||
|
||||
|
||||
### 2021-04-13
|
||||
|
||||
* [person] household address: add a form for editing the validFrom date (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/541)
|
||||
* [person] householdmemberseditor: fix composition type bug in select form (vuejs) (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/543)
|
||||
* [docgen] add more persons choices in docgen for course: amongst requestor (if person), resources of course (if person), and PersonResource (if person);
|
||||
* [docgen] add a new context with a list of activities in course
|
||||
* [docgen] add a comment in budget lines
|
||||
* [notifications] allow to send a notification to an email address. The address receive an access link
|
||||
* [adresses] add constraints in database to avoid errors later: postcode not null, and validfrom <= validto
|
||||
* [accompanying work editor] add a label on document title input
|
||||
|
||||
### 2021-04-07
|
||||
|
||||
* notification list: move action buttons outside of the toggle
|
||||
* fix detecting of non-read notification
|
||||
* filter users which are disabled in search user api
|
||||
* order query for location and add pagination in list
|
||||
* allow every person which has part for a workflow to see the workflow page
|
||||
* able to see the workflow if the evaluation document has been deleted
|
||||
* hardcode the list of supported mime types for edition with collabora
|
||||
* list of accompanying course: allow to see the pinned comment in list_item
|
||||
|
||||
### 2021-04-06
|
||||
|
||||
* [main] notification toggle read: correct js syntax for compilation in production (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/548)
|
||||
* [parcours] Display of interlocuteurs changed to flex-table in parcours edit page to prevent cut-off of information (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/535)
|
||||
* [activity] espace entre les boutons pour supprimer les documents
|
||||
|
||||
|
||||
### continuous release in February and March
|
||||
|
||||
* Creation of PickCivilityType, and implementation in PersonType and ThirdpartyType
|
||||
* [person] Accompanying course evaluation documents: disable the WOPI edit link if mimetype not supported and if no keyInfos
|
||||
(https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/585)
|
||||
* [activity] display error messages above the form in creating a new location (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/481)
|
||||
* [activity] show required field in activity edit/new by an asterix in the vuejs fields (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/494)
|
||||
* [ACL] fix allow to see the course, event if the scope'course does not contains the scope's user
|
||||
* [search] enforce limit of results for fetching rsults by search api https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/576
|
||||
* [activity] Fix delete button for document (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/554)
|
||||
* [activity] Add return path the document generation (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/553)
|
||||
* [person] add person ressource to person docgen normaliser (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/517)
|
||||
* [person] AccompanyingCourseWorkEdit: fix deleting evaluation documents (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/546)
|
||||
* [person] AccompanyingCourseWorkEdit: download existing documents (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/512)
|
||||
* [person] AccompanyingCourseWorkEdit: replace document by a new one (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/511)
|
||||
* [person] AccompanyingPeriodWork: add referrers to work, add doctrine event listener to add logged user to referrers collection and display a referrers list in work list (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/502)
|
||||
* [person] AccompanyingPeriodWorkEvaluation: fix circular reference when serialising (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/495)
|
||||
* [person] order accompanying period by opening date in search persons, person and household period lists (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/493)
|
||||
* [parcours] autosave of the pinned comment for draft accompanying course (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/477)
|
||||
* [main] filter user job in undispatch acc period to assign (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/472)
|
||||
* [main] filter user job in undispatch acc period to assign (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/472)
|
||||
* [person] Add url in accompanying period work evaluations entity and form (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/476)
|
||||
* [person] Add document generation in admin and in person/{id}/document (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/464)
|
||||
* [activity] do not override location if already exist (when validating new activity) (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/470)
|
||||
* [parcours] Toggle emergency/intensity only by referrer (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/442)
|
||||
* [docstore] Add an API entrypoint for StoredObject (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/466)
|
||||
* [person] Add the possibility of uploading existing documents to AccPeriodWorkEvaluationDocument (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/466)
|
||||
* [person] Add title to AccPeriodWorkEvaluationDocument (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/466)
|
||||
* [person] Order social issues by the field "ordering" (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/388)
|
||||
* [Person/Household list] when listing other simultaneous members of an household, exclude the members on person, not on members (avoid to show two membersship with the same person)
|
||||
* [draft periods] add a delete button (if acl granted) on each draft period listed on draft period page (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/463)
|
||||
* [Person] Display suffixText in RenderPerson, PersonText.vue, RenderPersonBox.vue (was made for displaying "enfant confie") (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/441)
|
||||
* [budget]: budget enabled for persons and households (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/469)
|
||||
* [person] residential address: show residential address or info in PersonRenderBox, refactor Residential Address (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/439)
|
||||
* [thirdparty] Add a contact to a thirdparty from within onTheFly (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/345)
|
||||
* [documents] Improve flex-table item-col placement when long buttons and long metadata
|
||||
* [thirdparty] Fix display of multiple contact badges so they wrap onto next line (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/482)
|
||||
* [confidential] Fix position of toggle button so it does not cover text nor fall outside of box (no issue)
|
||||
* [parcours] Fix edit of both thirdparty and contact name (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/474)
|
||||
* [template] do not list inactive templates (for doc generator)
|
||||
* [household] bugfix if position of member is null, renderbox no longer throws an error (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/480)
|
||||
* [parcours] location cannot be removed if linked to a user (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/478)
|
||||
* [person] email added to twig personRenderbox (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/490)
|
||||
* [activity] Only youngest descendant is kept for social issues and actions (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/471)
|
||||
* [person] Add link to current household in person banner (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/484)
|
||||
* [address] person badge in address history changed to open OnTheFly with all person info (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/489)
|
||||
* [person] Change 'personne' with 'usager' and '&' with 'ET' (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/499)
|
||||
* [thirdparty] Add parameter condition to display centers or not (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/500)
|
||||
* [phonenumber] Remove placeholder in phonenumber field (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/496)
|
||||
* [person_resource] separate create page created to avoid confusion (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/504)
|
||||
* [contact] add contact button color changed plus the pipe at the side removed (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/506)
|
||||
* [thirdparty] For contacts show current civility/profession in edit form + fix saving of edited information (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/491)
|
||||
* [household] create-edit household composition placed in separate page to avoid confusion (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/505)
|
||||
* [blur] Improved positioning of toggle icon (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/486)
|
||||
* [thirdparty] add firstname field to thirdparty 'child' or 'contact' types (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/508)
|
||||
* [household] create-edit household composition placed in separate page to avoid confusion (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/505)
|
||||
* [blur] Improved positioning of toggle icon (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/486)
|
||||
* [parcours] List of parcours for a specific user so they can be reassigned in case of absence (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/509)
|
||||
* [thirdparty] Thirdparty view page, english text translated (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/534)
|
||||
* [social_action] Translation changed in evaluation section (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/512)
|
||||
* [filiation] Possible to add person (or create onthefly) to add to filiation graph + add relation (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/519)
|
||||
* [household] Within parcours listing page of household add create button (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/560)
|
||||
* [person_resource] bugfix when adding thirdparty or freetext resource + prevent personOwner themselves to be added. (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/526)
|
||||
* [aside_activity] style correction + sticky-form create button (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/529)
|
||||
* [budget] order within the menu adjusted (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/592)
|
||||
* [onthefly] fix create person. Bug was noticed in filiation (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/591)
|
||||
* [parcours] Create document buttons made sticky (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/532)
|
||||
* [person] Trailing guillemet removed (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/530)
|
||||
* [notification] Display of social action within workflow notification set to display block (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/537)
|
||||
* [onthefly] trim trailing whitespace in email of person and thirdparty (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/542)
|
||||
|
||||
* [action] Only youngest descendant is kept for social issues and actions (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/471)
|
||||
## Test releases
|
||||
|
||||
### test release 2022-02-21
|
||||
|
||||
* [notifications] Word 'un' changed to number '1' for notifications in user menu (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/483)
|
||||
* [documents] 'gabarit' changed to 'modèle' (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/405)
|
||||
* [person_resources] Menu name and order changed (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/460)
|
||||
* workflow: fix sending notifications
|
||||
* [thirdparty] Extend the thirdparty search to thirdparty children (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/448)
|
||||
* [person]: AddPersons: allow creation of person or thirdparty only (no users) (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/422)
|
||||
* [person]: AddPersons: allow creation of person or thirdparty depending on allowed types (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/422)
|
||||
* [person]: AddPersons: add suggestion of name when creating new person or thirdparty (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/422)
|
||||
* [main] Address: fix small bug: when modifying an address without street (isNoAddress), also check errors if street is an empty string as back-end change null value to empty string for street (and streetNumber)
|
||||
* [main] Address: stronger client-side validation of addresses (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/449)
|
||||
* [person] accompanying course: filter suggested entities by open participations (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/415)
|
||||
[activity] can click through the cross icon for removing person in concerned group (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/476)
|
||||
[activity] correct associated persons by considering only open participations (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/476)
|
||||
* [person_resources]: Renderboxes used to display person/thirdparty info (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/465)
|
||||
* [Household]: Add end date in HouseholdMember form for 'enfant hors menage' (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/434)
|
||||
* [homepage_widget]: If no sender then display as 'notification automatique' (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/435)
|
||||
* [parcours]: Order social activities and only display most recent three in parcours resumé (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/481)
|
||||
* [3party]: 3party: redirect to parent when contact (child) is opened in view page
|
||||
* [parcours / addresses]: launch an event when a person change address (either through changing household or because the household is associated to a new address). If the person is localising a course, the course location go back to a temporarily address.
|
||||
* [thirdparty]: address/phonenumber/email/fonction displayed in thirdpartyrenderbox (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/401)
|
||||
* [thirdparty_contact]: in search results the 'qualité' is displayed (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/465)
|
||||
* [bug]: fix confidential toggle of address in thirdpartyrenderbox (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/460)
|
||||
|
||||
|
||||
|
||||
### test release 2022-02-14
|
||||
|
||||
* AddPersons: remove ul-li html tags from AddPersons (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/419)
|
||||
* [doc-generator] do not set required fields for mainPerson, person1, person2 (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement#456)
|
||||
* [doc-generation] add age and obele in the mainPerson, person1 and person2 list + add obele in person renderString if addAge (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/370)
|
||||
* [person] accompanying course work: fix on-the-fly update of thirdParty
|
||||
* fix normalisation of accompanying course requestor api (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/378)
|
||||
* [person] add a returnPath when clicking on some Person or ThirdParty badge (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/427)
|
||||
* [person] accompanying course work: fix on-the-fly update of thirdParty
|
||||
* [person] accompanying course work: fix on-the-fly update of thirdParty
|
||||
* [on-the-fly] close modal only after validation
|
||||
* [person] correct thirdparty PATCH url + add email and altnames in AddPerson and serializer (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/433)
|
||||
* change order for accompanying course work list
|
||||
* [parcours]: Mes parcours brouillon added to user menu (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/440)
|
||||
* [Documents]: List view adapted to display more information (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/414)
|
||||
* [person]: style fix in parcours listing per person. (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/432)
|
||||
* [parcours]: Only the referrer can toggle the intensity of the parcours (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/442)
|
||||
* [household]: display address of current household (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/415)
|
||||
* ajoute un ordre dans les localisation (api)
|
||||
* [pick entity]: fix translations in modal (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/419)
|
||||
@@ -30,8 +195,8 @@ and this project adheres to
|
||||
* [address]: Correction residential address 'depuis le' (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/459)
|
||||
* [Documents]: List view adapted to display more information (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/414)
|
||||
* [Thirdparty_contact]: address blurred if confidential in view page (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/450)
|
||||
* [thirdparty] Add a contact to a thirdparty from within onTheFly (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/345)
|
||||
|
||||
## Test releases
|
||||
|
||||
### test release 2021-02-01
|
||||
|
||||
@@ -52,6 +217,9 @@ and this project adheres to
|
||||
* [AddAddress] disable multiselect search, and rely only on most pertinent Cities and Street computed backend
|
||||
* [fast_actions] improve fast-actions buttons override mechanism, fix https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/413
|
||||
* [homepage widget] add vue homepage_widget with asynchone loading, give a global view resume of the user concerned actions, notifications, etc.
|
||||
* [thirdparty] Add a contact to a thirdparty from within onTheFly (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/345)
|
||||
* [homepage widget] add vue homepage_widget with asynchone loading, give a global view resume of the user concerned actions, notifications, etc.
|
||||
|
||||
|
||||
### test release 2021-01-31
|
||||
|
||||
@@ -258,6 +426,7 @@ and this project adheres to
|
||||
* add an endpoint for checking permissions. See https://gitlab.com/Chill-Projet/chill-bundles/-/merge_requests/232
|
||||
* [activity] for a new activity: suggest and create on-the-fly locations based on the accompanying course location + location of the suggested parties
|
||||
* [calendar] for a new rdv: suggest and create on-the-fly locations based on the accompanying course location + location of the suggested parties
|
||||
* [period] Validation added when period is confidential and confirmed -> user cannot be null.
|
||||
|
||||
|
||||
## Test releases
|
||||
|
@@ -21,7 +21,8 @@
|
||||
"knplabs/knp-time-bundle": "^1.12",
|
||||
"league/csv": "^9.7.1",
|
||||
"nyholm/psr7": "^1.4",
|
||||
"ocramius/package-versions": "^1.10",
|
||||
"ocramius/package-versions": "^1.10 || ^2",
|
||||
"odolbeau/phone-number-bundle": "^3.6",
|
||||
"phpoffice/phpspreadsheet": "^1.16",
|
||||
"ramsey/uuid-doctrine": "^1.7",
|
||||
"sensio/framework-extra-bundle": "^5.5",
|
||||
@@ -32,6 +33,7 @@
|
||||
"symfony/expression-language": "^4.4",
|
||||
"symfony/form": "^4.4",
|
||||
"symfony/framework-bundle": "^4.4",
|
||||
"symfony/http-foundation": "^4.4",
|
||||
"symfony/intl": "^4.4",
|
||||
"symfony/mailer": "^5.4",
|
||||
"symfony/mime": "^5.4",
|
||||
@@ -102,7 +104,8 @@
|
||||
"ergebnis/composer-normalize": true,
|
||||
"ocramius/package-versions": true,
|
||||
"phpro/grumphp": true,
|
||||
"phpstan/extension-installer": true
|
||||
"phpstan/extension-installer": true,
|
||||
"roave/you-are-using-it-wrong": true
|
||||
},
|
||||
"bin-dir": "bin",
|
||||
"optimize-autoloader": true,
|
||||
|
@@ -32,7 +32,7 @@ Then, render the pagination using the dedicated twig function.
|
||||
|
||||
{% block title 'Item list'|trans %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
|
||||
<table>
|
||||
|
||||
|
@@ -156,7 +156,7 @@ This layout extend `ChillMainBundle::layoutWithVerticalMenu.html.twig` add the p
|
||||
|
||||
It proposes 1 new block :
|
||||
|
||||
* personcontent
|
||||
* content
|
||||
|
||||
* where to display the information of the person
|
||||
|
||||
|
@@ -25,11 +25,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Repository/ActivityACLAwareRepository.php
|
||||
|
||||
-
|
||||
message: "#^Access to an undefined property Chill\\\\PersonBundle\\\\Household\\\\MembersEditorFactory\\:\\:\\$validator\\.$#"
|
||||
count: 2
|
||||
path: src/Bundle/ChillPersonBundle/Household/MembersEditorFactory.php
|
||||
|
||||
-
|
||||
message: "#^Variable variables are not allowed\\.$#"
|
||||
count: 4
|
||||
|
@@ -105,15 +105,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Export/Export/ListActivity.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ActivityBundle\\\\Export\\\\Export\\\\ListActivity\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Export/Export/ListActivity.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -141,15 +132,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Export/Export/StatActivityDuration.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ActivityBundle\\\\Export\\\\Filter\\\\ActivityDateFilter\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Export/Filter/ActivityDateFilter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -195,15 +177,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ActivityBundle\\\\Export\\\\Filter\\\\PersonHavingActivityBetweenDateFilter\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Export/Filter/PersonHavingActivityBetweenDateFilter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -213,15 +186,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Export/Filter/PersonHavingActivityBetweenDateFilter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ActivityBundle\\\\Menu\\\\PersonMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Menu/PersonMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -258,78 +222,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\AsideActivityBundle\\\\Menu\\\\UserMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillAsideActivityBundle/src/Menu/UserMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Class Chill\\\\AMLI\\\\BudgetBundle\\\\Controller\\\\AbstractElementController extends deprecated class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\Controller\\:
|
||||
since Symfony 4\\.2, use "Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController" instead\\.$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillBudgetBundle/Controller/AbstractElementController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\AMLI\\\\BudgetBundle\\\\Controller\\\\AbstractElementController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillBudgetBundle/Controller/AbstractElementController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Class Chill\\\\AMLI\\\\BudgetBundle\\\\Controller\\\\ElementController extends deprecated class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\Controller\\:
|
||||
since Symfony 4\\.2, use "Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController" instead\\.$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillBudgetBundle/Controller/ElementController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\AMLI\\\\BudgetBundle\\\\Controller\\\\ElementController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillBudgetBundle/Controller/ElementController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\AMLI\\\\BudgetBundle\\\\Menu\\\\UserMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillBudgetBundle/Menu/UserMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
|
||||
since Symfony 4\\.3, to be removed in 5\\.0\\. Use strings as roles instead\\.$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillBudgetBundle/Security/Authorization/BudgetElementVoter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\CalendarBundle\\\\Menu\\\\UserMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillCalendarBundle/Menu/UserMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -399,15 +291,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillCustomFieldsBundle/Entity/CustomFieldsGroup.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\CustomFieldsBundle\\\\Form\\\\CustomFieldsGroupType\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillCustomFieldsBundle/Form/CustomFieldsGroupType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -417,15 +300,6 @@ parameters:
|
||||
count: 6
|
||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\EventBundle\\\\Controller\\\\EventController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -444,42 +318,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillEventBundle/Form/Type/PickEventType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\EventBundle\\\\Form\\\\Type\\\\PickEventType\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillEventBundle/Form/Type/PickEventType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\EventBundle\\\\Form\\\\Type\\\\PickRoleType\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillEventBundle/Form/Type/PickRoleType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\EventBundle\\\\Form\\\\Type\\\\PickStatusType\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillEventBundle/Form/Type/PickStatusType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\EventBundle\\\\Menu\\\\PersonMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillEventBundle/Menu/PersonMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -489,24 +327,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillEventBundle/Search/EventSearch.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\AMLI\\\\FamilyMembersBundle\\\\Controller\\\\FamilyMemberController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillFamilyMembersBundle/Controller/FamilyMemberController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\AMLI\\\\FamilyMembersBundle\\\\Menu\\\\UserMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillFamilyMembersBundle/Menu/UserMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -516,24 +336,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillFamilyMembersBundle/Security/Voter/FamilyMemberVoter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Fetching class constant class of deprecated class Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/AbstractCRUDController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Fetching class constant class of deprecated class Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -543,15 +345,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Return type of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:getTranslator\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -570,24 +363,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\MainBundle\\\\Controller\\\\ExportController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Controller/ExportController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\MainBundle\\\\Controller\\\\PasswordController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Controller/PasswordController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -660,42 +435,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Export/ExportManager.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translatorInterface of method Chill\\\\MainBundle\\\\Export\\\\Formatter\\\\CSVListFormatter\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Export/Formatter/CSVListFormatter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translatorInterface of method Chill\\\\MainBundle\\\\Export\\\\Formatter\\\\CSVPivotedListFormatter\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Export/Formatter/CSVPivotedListFormatter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translatorInterface of method Chill\\\\MainBundle\\\\Export\\\\Formatter\\\\SpreadSheetFormatter\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Export/Formatter/SpreadSheetFormatter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translatorInterface of method Chill\\\\MainBundle\\\\Export\\\\Formatter\\\\SpreadsheetListFormatter\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Export/Formatter/SpreadsheetListFormatter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -714,15 +453,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Form/Event/CustomizeFormEvent.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\MainBundle\\\\Form\\\\Type\\\\PostalCodeType\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Form/Type/PostalCodeType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -746,38 +476,11 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Form/UserType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\MainBundle\\\\Notification\\\\Mailer\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Notification/Mailer.php
|
||||
|
||||
-
|
||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
||||
count: 2
|
||||
path: src/Bundle/ChillMainBundle/Repository/NotificationRepository.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\MainBundle\\\\Routing\\\\MenuBuilder\\\\SectionMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Routing/MenuBuilder/SectionMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\MainBundle\\\\Routing\\\\MenuComposer\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Routing/MenuComposer.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -864,15 +567,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Templating/Events/DelegatedBlockRenderingEvent.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\MainBundle\\\\Validation\\\\Validator\\\\RoleScopeScopePresence\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Validation/Validator/RoleScopeScopePresence.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -918,33 +612,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Controller\\\\HouseholdController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Controller/HouseholdController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Controller\\\\HouseholdMemberController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Controller\\\\PersonController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Controller/PersonController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -954,15 +621,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Controller\\\\PersonDuplicateController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php
|
||||
|
||||
-
|
||||
message: "#^Access to deprecated property \\$proxyAccompanyingPeriodOpenState of class Chill\\\\PersonBundle\\\\Entity\\\\Person\\.$#"
|
||||
count: 2
|
||||
@@ -977,15 +635,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Aggregator/AgeAggregator.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Export\\\\Aggregator\\\\CountryOfBirthAggregator\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -995,15 +644,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Export\\\\Aggregator\\\\GenderAggregator\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Aggregator/GenderAggregator.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1013,15 +653,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Aggregator/GenderAggregator.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Export\\\\Aggregator\\\\NationalityAggregator\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1058,15 +689,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Export/ListPerson.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Export\\\\Export\\\\ListPerson\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Export/ListPerson.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1094,15 +716,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Export/ListPersonDuplicate.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Export\\\\Export\\\\ListPersonDuplicate\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Export/ListPersonDuplicate.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1148,15 +761,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Filter/BirthdateFilter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Export\\\\Filter\\\\GenderFilter\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Export/Filter/GenderFilter.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1198,24 +802,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Form/Type/PickPersonType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Form\\\\Type\\\\PickPersonType\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Form/Type/PickPersonType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\PersonBundle\\\\Menu\\\\SectionMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillPersonBundle/Menu/SectionMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1279,15 +865,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ReportBundle\\\\Export\\\\Export\\\\ReportList\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1297,15 +874,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ReportBundle\\\\Export\\\\Export\\\\ReportListProvider\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportListProvider.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1387,15 +955,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\TaskBundle\\\\Controller\\\\TaskController\\:\\:applyTransitionAction\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillTaskBundle/Controller/TaskController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1441,33 +1000,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillTaskBundle/Form/SingleTaskType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\TaskBundle\\\\Menu\\\\MenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillTaskBundle/Menu/MenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\TaskBundle\\\\Menu\\\\SectionMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillTaskBundle/Menu/SectionMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\TaskBundle\\\\Menu\\\\UserMenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillTaskBundle/Menu/UserMenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
@@ -1504,33 +1036,6 @@ parameters:
|
||||
count: 3
|
||||
path: src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ThirdPartyBundle\\\\Controller\\\\ThirdPartyController\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillThirdPartyBundle/Controller/ThirdPartyController.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ThirdPartyBundle\\\\Form\\\\Type\\\\PickThirdPartyType\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillThirdPartyBundle/Form/Type/PickThirdPartyType.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
#^Parameter \\$translator of method Chill\\\\ThirdPartyBundle\\\\Menu\\\\MenuBuilder\\:\\:__construct\\(\\) has typehint with deprecated interface Symfony\\\\Component\\\\Translation\\\\TranslatorInterface\\:
|
||||
since Symfony 4\\.2, use Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface instead$#
|
||||
"""
|
||||
count: 1
|
||||
path: src/Bundle/ChillThirdPartyBundle/Menu/MenuBuilder.php
|
||||
|
||||
-
|
||||
message:
|
||||
"""
|
||||
|
@@ -250,11 +250,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Entity/Address.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Entity/Embeddable/CommentEmbeddable.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 1
|
||||
@@ -295,11 +290,6 @@ parameters:
|
||||
count: 3
|
||||
path: src/Bundle/ChillMainBundle/Form/Type/DataTransformer/DateIntervalTransformer.php
|
||||
|
||||
-
|
||||
message: "#^Only booleans are allowed in a negated boolean, mixed given\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Form/Type/DataTransformer/ObjectToIdTransformer.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 2
|
||||
@@ -325,11 +315,6 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 1
|
||||
@@ -360,11 +345,6 @@ parameters:
|
||||
count: 6
|
||||
path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 2
|
||||
path: src/Bundle/ChillPersonBundle/Entity/PersonPhone.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 1
|
||||
@@ -470,18 +450,8 @@ parameters:
|
||||
count: 1
|
||||
path: src/Bundle/ChillThirdPartyBundle/Repository/ThirdPartyRepository.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillThirdPartyBundle/Search/ThirdPartyApiSearch.php
|
||||
|
||||
-
|
||||
message: "#^Method Chill\\\\ThirdPartyBundle\\\\Search\\\\ThirdPartySearch\\:\\:renderResult\\(\\) should return string but return statement is missing\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillThirdPartyBundle/Search/ThirdPartySearch.php
|
||||
|
||||
-
|
||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
||||
count: 1
|
||||
path: src/Bundle/ChillThirdPartyBundle/Templating/Entity/ThirdPartyRender.php
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="v4.15.0@a1b5e489e6fcebe40cb804793d964e99fc347820">
|
||||
<files psalm-version="4.18.0.0">
|
||||
<file src="src/Bundle/ChillActivityBundle/Controller/ActivityReasonCategoryController.php">
|
||||
<UndefinedClass occurrences="4">
|
||||
<code>'ChillActivityBundle:ActivityReasonCategory'</code>
|
||||
@@ -47,6 +47,11 @@
|
||||
<code>Activity[]|array</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Resources/test/Fixtures/App/app/AppKernel.php">
|
||||
<DuplicateClass occurrences="1">
|
||||
<code>AppKernel</code>
|
||||
</DuplicateClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Resources/test/Fixtures/App/app/autoload.php">
|
||||
<MissingFile occurrences="1">
|
||||
<code>require __DIR__ . '/../../../../../vendor/autoload.php'</code>
|
||||
@@ -164,72 +169,18 @@
|
||||
<code>type</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Aggregator/ActivityReasonAggregatorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Aggregator/ActivityTypeAggregatorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Aggregator/ActivityUserAggregatorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Export/CountActivityTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Export/ListActivityTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Export/StatActivityDurationSumTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Filter/ActivityReasonFilterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Export/Filter/PersonHavingActivityBetweenDateFilterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>\Chill\PersonBundle\Export\Filter\PersonHavingActivityBetweenDateFilter</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Form/ActivityTypeTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Form/Type/TranslatableActivityReasonTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<TooFewArguments occurrences="2"/>
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>Prophecy\Prophet</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Form/Type/TranslatableActivityTypeTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillActivityBundle/Tests/Security/Authorization/ActivityVoterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>type</code>
|
||||
</UndefinedDocblockClass>
|
||||
@@ -254,11 +205,6 @@
|
||||
<code>$asideActivityCategory</code>
|
||||
</ParamNameMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillAsideActivityBundle/src/Tests/Controller/AsideActivityControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillBudgetBundle/Calculator/CalculatorManager.php">
|
||||
<InvalidStaticInvocation occurrences="3">
|
||||
<code>$calculator::getAlias()</code>
|
||||
@@ -288,11 +234,6 @@
|
||||
<code>'ChillCalendarBundle:Calendar'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCalendarBundle/Tests/Controller/CalendarControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Command/CreateFieldsOnGroupCommand.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillCustomFieldsBundle:CustomFieldsGroup'</code>
|
||||
@@ -397,10 +338,6 @@
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/CustomFields/CustomFieldsChoiceTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="4">
|
||||
<code>type</code>
|
||||
<code>type</code>
|
||||
@@ -408,61 +345,6 @@
|
||||
<code>type</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/CustomFields/CustomFieldsNumberTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/CustomFields/CustomFieldsTextTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/Form/Extension/PostTextIntegerExtensionTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/Form/Extension/PostTextNumberExtensionTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/Service/CustomFieldsHelperTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/Templating/Twig/CustomFieldRenderingTwigTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillCustomFieldsBundle/Tests/Templating/Twig/CustomFieldsGroupRenderingTwigTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillDocGeneratorBundle/tests/Serializer/Encoder/DocGenEncoderTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillDocGeneratorBundle/tests/Serializer/Normalizer/DocGenObjectNormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillDocGeneratorBundle/tests/Service/Context/BaseContextDataTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillDocStoreBundle/Controller/DocumentAccompanyingCourseController.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillDocStoreBundle:AccompanyingCourseDocument'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillDocStoreBundle/Controller/DocumentCategoryController.php">
|
||||
<UndefinedClass occurrences="3">
|
||||
<code>'ChillDocStoreBundle:DocumentCategory'</code>
|
||||
@@ -470,11 +352,6 @@
|
||||
<code>'ChillDocStoreBundle:DocumentCategory'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillDocStoreBundle:PersonDocument'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillDocStoreBundle/Entity/Document.php">
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>\Chill\PersonBundle\Entity\user</code>
|
||||
@@ -570,9 +447,6 @@
|
||||
<InvalidParamDefault occurrences="1">
|
||||
<code>type</code>
|
||||
</InvalidParamDefault>
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="8">
|
||||
<code>'ChillEventBundle:Event'</code>
|
||||
<code>'ChillEventBundle:Event'</code>
|
||||
@@ -588,10 +462,6 @@
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillEventBundle/Tests/Search/EventSearchTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillMainBundle:Scope'</code>
|
||||
</UndefinedClass>
|
||||
@@ -891,11 +761,6 @@
|
||||
<code>OptionsResolverInterface</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Notification/Mailer.php">
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>\Symfony\Component\Mailer\Exception\TransportExceptionInterface</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Pagination/PageGenerator.php">
|
||||
<UndefinedVariable occurrences="1">
|
||||
<code>$current</code>
|
||||
@@ -924,11 +789,6 @@
|
||||
<code>$onlyEnabled</code>
|
||||
</ParamNameMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Resources/test/Fixtures/App/app/AppKernel.php">
|
||||
<DuplicateClass occurrences="1">
|
||||
<code>AppKernel</code>
|
||||
</DuplicateClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Resources/test/Fixtures/App/app/autoload.php">
|
||||
<MissingFile occurrences="1">
|
||||
<code>require __DIR__ . '/../../../../../vendor/autoload.php'</code>
|
||||
@@ -1056,158 +916,15 @@
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Test/Export/AbstractFilterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>type</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Authorization/ParentRoleHelperTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Controller/AddressControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Controller/UserControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>protected function tearDown()</code>
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Export/ExportManagerTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="40">
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>$this->prophet</code>
|
||||
<code>Prophecy\Prophet</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Form/Type/PickCenterTypeTest.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>CenterType</code>
|
||||
</UndefinedClass>
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>CenterType</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Pagination/PageTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Pagination/PaginatorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Routing/Loader/RouteLoaderTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Search/AbstractSearchTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Search/SearchProviderTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>unknown</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Security/Authorization/AuthorizationHelperTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Security/PasswordRecover/TokenManagerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Security/Resolver/CenterResolverDispatcherTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Security/Resolver/DefaultScopeResolverTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Security/Resolver/ScopeResolverDispatcherTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Serializer/Normalizer/DateNormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Serializer/Normalizer/DoctrineExistingEntityNormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Services/MenuComposerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Tests/Templating/Entity/AddressRenderTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php">
|
||||
<UndefinedDocblockClass occurrences="1">
|
||||
<code>unknown</code>
|
||||
@@ -1412,20 +1129,6 @@
|
||||
<code>OptionsResolverInterface</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkRepository.php">
|
||||
<UndefinedClass occurrences="6">
|
||||
<code>$qb</code>
|
||||
<code>$qb</code>
|
||||
<code>$qb</code>
|
||||
<code>QueryBuilder</code>
|
||||
<code>SocialAction</code>
|
||||
<code>SocialAction</code>
|
||||
</UndefinedClass>
|
||||
<UndefinedVariable occurrences="2">
|
||||
<code>$action</code>
|
||||
<code>$orderBy</code>
|
||||
</UndefinedVariable>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Resources/test/Fixtures/App/app/AppKernel.php">
|
||||
<DuplicateClass occurrences="1">
|
||||
<code>AppKernel</code>
|
||||
@@ -1505,33 +1208,13 @@
|
||||
</ParamNameMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/AccompanyingPeriod/AccompanyingPeriodConfidentialTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public static function setUpBeforeClass()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="2">
|
||||
<code>AccompanyingPeriodRepository</code>
|
||||
<code>stdClass</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/AccompanyingCourseApiControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public static function setUpBeforeClass()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/AccompanyingCourseControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/AccompanyingPeriodControllerTest.php">
|
||||
<InvalidThrow occurrences="1"/>
|
||||
<MethodSignatureMismatch occurrences="3">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
<code>public static function setUpBeforeClass()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="3">
|
||||
<code>'ChillMainBundle:Center'</code>
|
||||
<code>'ChillPersonBundle:AccompanyingPeriod\ClosingMotive'</code>
|
||||
@@ -1543,40 +1226,19 @@
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/HouseholdApiControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>User</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/HouseholdControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/PersonAddressControllerTest.php">
|
||||
<InvalidScope occurrences="1">
|
||||
<code>$this</code>
|
||||
</InvalidScope>
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public static function setUpBeforeClass()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillPersonBundle:Person'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerCreateTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public static function tearDownAfterClass()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerUpdateTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="2">
|
||||
<code>'ChillMainBundle:Country'</code>
|
||||
<code>'ChillPersonBundle:Person'</code>
|
||||
@@ -1586,140 +1248,25 @@
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerUpdateWithHiddenFieldsTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="2">
|
||||
<code>'ChillMainBundle:Country'</code>
|
||||
<code>'ChillPersonBundle:Person'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerViewTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillPersonBundle:Person'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/PersonControllerViewWithHiddenFieldsTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillPersonBundle:Person'</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/PersonDuplicateControllerViewTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/RelationshipApiControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Controller/SocialIssueApiControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Entity/AccompanyingPeriodTest.php">
|
||||
<AssignmentToVoid occurrences="1">
|
||||
<code>$participationL</code>
|
||||
</AssignmentToVoid>
|
||||
<NullReference occurrences="1">
|
||||
<code>getEndDate</code>
|
||||
</NullReference>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Aggregator/AgeAggregatorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Aggregator/GenderAggregatorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Aggregator/NationalityAggregatorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Export/CountPersonTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Export/ListPersonTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Filter/AccompanyingPeriodFilterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Filter/BirthdayFilterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Export/Filter/GenderFilterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Form/Type/PickPersonTypeTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Household/MembersEditorTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Security/Authorization/PersonVoterTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/AccompanyingPeriodWorkDocGenNormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/HouseholdNormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/PersonDocGenNormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Serializer/Normalizer/PersonJsonNormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Validator/Person/PersonValidationTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Tests/Workflows/AccompanyingPeriodLifecycle.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillPersonBundle/Timeline/AbstractTimelineAccompanyingPeriod.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
@@ -1820,20 +1367,13 @@
|
||||
<code>require __DIR__ . '/../../../../../vendor/autoload.php'</code>
|
||||
</MissingFile>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillReportBundle/Tests/Controller/ReportControllerNextTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>public function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillReportBundle/Tests/Controller/ReportControllerTest.php">
|
||||
<InvalidParamDefault occurrences="1">
|
||||
<code>type</code>
|
||||
</InvalidParamDefault>
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public static function setUpBeforeClass()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="29">
|
||||
<UndefinedDocblockClass occurrences="31">
|
||||
<code>$client</code>
|
||||
<code>$client</code>
|
||||
<code>$client</code>
|
||||
<code>$client</code>
|
||||
<code>$client</code>
|
||||
@@ -1865,16 +1405,7 @@
|
||||
<code>type</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillReportBundle/Tests/DependencyInjection/ChillReportExtensionTest.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>Exception</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillReportBundle/Tests/Security/Authorization/ReportVoterTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public static function setUpBeforeClass()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedDocblockClass occurrences="3">
|
||||
<code>type</code>
|
||||
<code>type</code>
|
||||
@@ -1882,10 +1413,6 @@
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillReportBundle/Tests/Timeline/TimelineProviderTest.php">
|
||||
<MethodSignatureMismatch occurrences="2">
|
||||
<code>public function setUp()</code>
|
||||
<code>public function tearDown()</code>
|
||||
</MethodSignatureMismatch>
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>'ChillCustomFieldsBundle:CustomFieldsGroup'</code>
|
||||
</UndefinedClass>
|
||||
@@ -1958,11 +1485,6 @@
|
||||
<code>CacheItempPoolInterface</code>
|
||||
</UndefinedDocblockClass>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillTaskBundle/Tests/Controller/SingleTaskControllerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillThirdPartyBundle/DependencyInjection/CompilerPass/ThirdPartyTypeCompilerPass.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<code>$taggedService->getClass()::getKey()</code>
|
||||
@@ -1988,11 +1510,6 @@
|
||||
<code>$thirdParty</code>
|
||||
</ParamNameMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillThirdPartyBundle/Tests/Serializer/Normalizer/ThirdPartyJsonDenormalizerTest.php">
|
||||
<MethodSignatureMismatch occurrences="1">
|
||||
<code>protected function setUp()</code>
|
||||
</MethodSignatureMismatch>
|
||||
</file>
|
||||
<file src="src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php">
|
||||
<UndefinedDocblockClass occurrences="6">
|
||||
<code>$object</code>
|
||||
|
@@ -179,14 +179,15 @@ final class ActivityController extends AbstractController
|
||||
{
|
||||
$view = null;
|
||||
|
||||
[$person, $accompanyingPeriod] = $this->getEntity($request);
|
||||
|
||||
$entity = $this->activityRepository->find($id);
|
||||
|
||||
if (null === $entity) {
|
||||
throw $this->createNotFoundException('Unable to find Activity entity.');
|
||||
}
|
||||
|
||||
$accompanyingPeriod = $entity->getAccompanyingPeriod();
|
||||
$person = $entity->getPerson();
|
||||
|
||||
if ($entity->getAccompanyingPeriod() instanceof AccompanyingPeriod) {
|
||||
$view = 'ChillActivityBundle:Activity:editAccompanyingCourse.html.twig';
|
||||
$accompanyingPeriod = $entity->getAccompanyingPeriod();
|
||||
@@ -220,6 +221,9 @@ final class ActivityController extends AbstractController
|
||||
$this->entityManager->persist($entity);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$params = $this->buildParamsToUrl($person, $accompanyingPeriod);
|
||||
$params['id'] = $entity->getId();
|
||||
|
||||
if ($form->has('gendocTemplateId') && null !== $form['gendocTemplateId']->getData()) {
|
||||
return $this->redirectToRoute(
|
||||
'chill_docgenerator_generate_from_template',
|
||||
@@ -227,15 +231,13 @@ final class ActivityController extends AbstractController
|
||||
'template' => $form->get('gendocTemplateId')->getData(),
|
||||
'entityClassName' => Activity::class,
|
||||
'entityId' => $entity->getId(),
|
||||
'returnPath' => $this->generateUrl('chill_activity_activity_edit', $params),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$this->addFlash('success', $this->get('translator')->trans('Success : activity updated!'));
|
||||
|
||||
$params = $this->buildParamsToUrl($person, $accompanyingPeriod);
|
||||
$params['id'] = $entity->getId();
|
||||
|
||||
return $this->redirectToRoute('chill_activity_activity_show', $params);
|
||||
}
|
||||
|
||||
@@ -444,6 +446,9 @@ final class ActivityController extends AbstractController
|
||||
'template' => $form->get('gendocTemplateId')->getData(),
|
||||
'entityClassName' => Activity::class,
|
||||
'entityId' => $entity->getId(),
|
||||
'returnPath' => $this->generateUrl('chill_activity_activity_edit', [
|
||||
'id' => $entity->getId(),
|
||||
]),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
@@ -231,11 +231,22 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
|
||||
{
|
||||
if (!$this->socialActions->contains($socialAction)) {
|
||||
$this->socialActions[] = $socialAction;
|
||||
$this->ensureSocialActionConsistency();
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a social issue.
|
||||
*
|
||||
* Note: the social issue consistency (the fact that only yougest social issues
|
||||
* are kept) is processed by an entity listener:
|
||||
*
|
||||
* @see{\Chill\PersonBundle\AccompanyingPeriod\SocialIssueConsistency\AccompanyingPeriodSocialIssueConsistencyEntityListener}
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function addSocialIssue(SocialIssue $socialIssue): self
|
||||
{
|
||||
if (!$this->socialIssues->contains($socialIssue)) {
|
||||
@@ -357,7 +368,7 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
|
||||
if (null !== $this->accompanyingPeriod) {
|
||||
$personsAssociated = [];
|
||||
|
||||
foreach ($this->accompanyingPeriod->getParticipations() as $participation) {
|
||||
foreach ($this->accompanyingPeriod->getOpenParticipations() as $participation) {
|
||||
if ($this->persons->contains($participation->getPerson())) {
|
||||
$personsAssociated[] = $participation->getPerson();
|
||||
}
|
||||
@@ -631,4 +642,13 @@ class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterfac
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function ensureSocialActionConsistency(): void
|
||||
{
|
||||
$ancestors = SocialAction::findAncestorSocialActions($this->getSocialActions());
|
||||
|
||||
foreach ($ancestors as $ancestor) {
|
||||
$this->removeSocialAction($ancestor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -66,9 +66,6 @@ class ActivityEntityListener
|
||||
$newAction->addPerson($person);
|
||||
}
|
||||
|
||||
foreach ($associatedThirdparties as $thirdparty) {
|
||||
$newAction->setHandlingThierparty($thirdparty);
|
||||
}
|
||||
$this->em->persist($newAction);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
@@ -24,9 +24,9 @@ use Doctrine\ORM\Query;
|
||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Security\Core\Role\Role;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Component\Validator\Constraints\Callback;
|
||||
use Symfony\Component\Validator\Context\ExecutionContextInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
use function array_key_exists;
|
||||
use function count;
|
||||
|
@@ -21,7 +21,7 @@ use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Form\FormError;
|
||||
use Symfony\Component\Form\FormEvent;
|
||||
use Symfony\Component\Form\FormEvents;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class ActivityDateFilter implements FilterInterface
|
||||
{
|
||||
|
@@ -29,8 +29,8 @@ use Symfony\Component\Form\FormError;
|
||||
use Symfony\Component\Form\FormEvent;
|
||||
use Symfony\Component\Form\FormEvents;
|
||||
use Symfony\Component\Form\FormInterface;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Component\Validator\Context\ExecutionContextInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
use function count;
|
||||
|
||||
|
@@ -125,7 +125,9 @@ class ActivityType extends AbstractType
|
||||
}
|
||||
|
||||
if ($activityType->isVisible('socialIssues') && $accompanyingPeriod) {
|
||||
$builder->add('socialIssues', HiddenType::class);
|
||||
$builder->add('socialIssues', HiddenType::class, [
|
||||
'required' => $activityType->getSocialIssuesVisible() === 2,
|
||||
]);
|
||||
$builder->get('socialIssues')
|
||||
->addModelTransformer(new CallbackTransformer(
|
||||
static function (iterable $socialIssuesAsIterable): string {
|
||||
@@ -151,7 +153,9 @@ class ActivityType extends AbstractType
|
||||
}
|
||||
|
||||
if ($activityType->isVisible('socialActions') && $accompanyingPeriod) {
|
||||
$builder->add('socialActions', HiddenType::class);
|
||||
$builder->add('socialActions', HiddenType::class, [
|
||||
'required' => $activityType->getSocialActionsVisible() === 2,
|
||||
]);
|
||||
$builder->get('socialActions')
|
||||
->addModelTransformer(new CallbackTransformer(
|
||||
static function (iterable $socialActionsAsIterable): string {
|
||||
@@ -305,6 +309,7 @@ class ActivityType extends AbstractType
|
||||
'label' => $activityType->getLabel('documents'),
|
||||
'required' => $activityType->isRequired('documents'),
|
||||
'allow_add' => true,
|
||||
'allow_delete' => true,
|
||||
'button_add_label' => 'activity.Insert a document',
|
||||
'button_remove_label' => 'activity.Remove a document',
|
||||
'empty_collection_explain' => 'No documents',
|
||||
@@ -338,7 +343,9 @@ class ActivityType extends AbstractType
|
||||
}
|
||||
|
||||
if ($activityType->isVisible('location')) {
|
||||
$builder->add('location', HiddenType::class)
|
||||
$builder->add('location', HiddenType::class, [
|
||||
'required' => $activityType->getLocationVisible() === 2,
|
||||
])
|
||||
->get('location')
|
||||
->addModelTransformer(new CallbackTransformer(
|
||||
static function (?Location $location): string {
|
||||
@@ -366,8 +373,8 @@ class ActivityType extends AbstractType
|
||||
'label' => $activityType->getLabel('sentReceived'),
|
||||
'required' => $activityType->isRequired('sentReceived'),
|
||||
'choices' => [
|
||||
'Sent' => Activity::SENTRECEIVED_SENT,
|
||||
'Received' => Activity::SENTRECEIVED_RECEIVED,
|
||||
'Sent' => Activity::SENTRECEIVED_SENT,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
@@ -15,7 +15,7 @@ use Chill\ActivityBundle\Security\Authorization\ActivityVoter;
|
||||
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
|
||||
use Knp\Menu\MenuItem;
|
||||
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class PersonMenuBuilder implements LocalMenuBuilderInterface
|
||||
{
|
||||
|
@@ -12,13 +12,20 @@ declare(strict_types=1);
|
||||
namespace Chill\ActivityBundle\Repository;
|
||||
|
||||
use Chill\ActivityBundle\Entity\Activity;
|
||||
use Chill\ActivityBundle\Entity\ActivityPresence;
|
||||
use Chill\ActivityBundle\Entity\ActivityType;
|
||||
use Chill\ActivityBundle\Security\Authorization\ActivityVoter;
|
||||
use Chill\MainBundle\Entity\Location;
|
||||
use Chill\MainBundle\Entity\LocationType;
|
||||
use Chill\MainBundle\Entity\Scope;
|
||||
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
|
||||
use Chill\MainBundle\Security\Resolver\CenterResolverDispatcherInterface;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\AbstractQuery;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Query\ResultSetMappingBuilder;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
||||
use Symfony\Component\Security\Core\Role\Role;
|
||||
use Symfony\Component\Security\Core\Security;
|
||||
@@ -72,6 +79,86 @@ final class ActivityACLAwareRepository implements ActivityACLAwareRepositoryInte
|
||||
->findByAccompanyingPeriod($period, $scopes, true, $limit, $start, $orderBy);
|
||||
}
|
||||
|
||||
public function findByAccompanyingPeriodSimplified(AccompanyingPeriod $period, ?int $limit = 1000): array
|
||||
{
|
||||
$rsm = new ResultSetMappingBuilder($this->em);
|
||||
|
||||
$sql = '
|
||||
SELECT
|
||||
a.id AS activity_id,
|
||||
date,
|
||||
CASE WHEN durationtime IS NOT NULL THEN (EXTRACT(EPOCH from durationtime) / 60)::int ELSE 0 END AS durationtimeminute,
|
||||
attendee_id,
|
||||
comment_comment,
|
||||
emergency,
|
||||
sentreceived,
|
||||
CASE WHEN traveltime IS NOT NULL THEN (EXTRACT(EPOCH from traveltime) / 60)::int ELSE 0 END AS traveltimeminute,
|
||||
t.id AS type_id, t.name as type_name,
|
||||
p.id AS presence_id, p.name AS presence_name,
|
||||
location.id AS location_id, location.address_id, location.name AS location_name, location.phonenumber1, location.phonenumber2, location.email,
|
||||
location.locationtype_id, locationtype.title AS locationtype_title,
|
||||
users.userids AS userids,
|
||||
thirdparties.thirdpartyids,
|
||||
persons.personids,
|
||||
actions.socialactionids,
|
||||
issues.socialissueids
|
||||
|
||||
FROM activity a
|
||||
LEFT JOIN chill_main_location location ON a.location_id = location.id
|
||||
LEFT JOIN chill_main_location_type locationtype ON location.locationtype_id = locationtype.id
|
||||
LEFT JOIN activitytpresence p ON a.attendee_id = p.id
|
||||
LEFT JOIN activitytype t ON a.type_id = t.id
|
||||
LEFT JOIN LATERAL (SELECT jsonb_agg(user_id) userids, activity_id FROM activity_user AS au WHERE a.id = au.activity_id GROUP BY activity_id) AS users ON TRUE
|
||||
LEFT JOIN LATERAL (SELECT jsonb_agg(thirdparty_id) thirdpartyids, activity_id FROM activity_thirdparty AS au WHERE a.id = au.activity_id GROUP BY activity_id) AS thirdparties ON TRUE
|
||||
LEFT JOIN LATERAL (SELECT jsonb_agg(person_id) personids, activity_id FROM activity_person AS au WHERE a.id = au.activity_id GROUP BY activity_id) AS persons ON TRUE
|
||||
LEFT JOIN LATERAL (SELECT jsonb_agg(socialaction_id) socialactionids, activity_id FROM chill_activity_activity_chill_person_socialaction AS au WHERE a.id = au.activity_id GROUP BY activity_id) AS actions ON TRUE
|
||||
LEFT JOIN LATERAL (SELECT jsonb_agg(socialissue_id) socialissueids, activity_id FROM chill_activity_activity_chill_person_socialissue AS au WHERE a.id = au.activity_id GROUP BY activity_id) AS issues ON TRUE
|
||||
|
||||
WHERE accompanyingperiod_id = ?
|
||||
ORDER BY a.date DESC, a.id DESC
|
||||
LIMIT ?
|
||||
';
|
||||
|
||||
$rsm
|
||||
->addEntityResult(Activity::class, 'a')
|
||||
->addFieldResult('a', 'activity_id', 'id')
|
||||
->addFieldResult('a', 'date', 'date')
|
||||
->addFieldResult('a', 'comment', 'comment')
|
||||
->addFieldResult('a', 'sentreceived', 'sentReceived')
|
||||
->addFieldResult('a', 'emergency', 'emergency')
|
||||
->addJoinedEntityResult(Location::class, 'location', 'a', 'location')
|
||||
->addFieldResult('location', 'location_id', 'id')
|
||||
->addFieldResult('location', 'location_name', 'name')
|
||||
->addFieldResult('location', 'phonenumber1', 'phonenumber1')
|
||||
->addFieldResult('location', 'phonenumber2', 'phonenumber2')
|
||||
->addFieldResult('location', 'email', 'email')
|
||||
->addJoinedEntityResult(LocationType::class, 'locationType', 'location', 'locationType')
|
||||
->addFieldResult('locationType', 'locationtype_id', 'id')
|
||||
->addFieldResult('locationType', 'locationtype_title', 'title')
|
||||
->addJoinedEntityResult(ActivityType::class, 'activityType', 'a', 'activityType')
|
||||
->addFieldResult('activityType', 'type_id', 'id')
|
||||
->addFieldResult('activityType', 'type_name', 'name')
|
||||
->addJoinedEntityResult(ActivityPresence::class, 'activityPresence', 'a', 'attendee')
|
||||
->addFieldResult('activityPresence', 'presence_id', 'id')
|
||||
->addFieldResult('activityPresence', 'presence_name', 'name')
|
||||
|
||||
// results which cannot be mapped into entity
|
||||
->addScalarResult('comment_comment', 'comment', Types::TEXT)
|
||||
->addScalarResult('userids', 'userIds', Types::JSON)
|
||||
->addScalarResult('thirdpartyids', 'thirdPartyIds', Types::JSON)
|
||||
->addScalarResult('personids', 'personIds', Types::JSON)
|
||||
->addScalarResult('socialactionids', 'socialActionIds', Types::JSON)
|
||||
->addScalarResult('socialissueids', 'socialIssueIds', Types::JSON)
|
||||
->addScalarResult('durationtimeminute', 'durationTimeMinute', Types::INTEGER)
|
||||
->addScalarResult('traveltimeminute', 'travelTimeMinute', Types::INTEGER);
|
||||
|
||||
$nq = $this->em->createNativeQuery($sql, $rsm);
|
||||
|
||||
$nq->setParameter(0, $period->getId())->setParameter(1, $limit);
|
||||
|
||||
return $nq->getResult(AbstractQuery::HYDRATE_ARRAY);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $orderBy
|
||||
*
|
||||
|
@@ -21,6 +21,15 @@ interface ActivityACLAwareRepositoryInterface
|
||||
*/
|
||||
public function findByAccompanyingPeriod(AccompanyingPeriod $period, string $role, ?int $start = 0, ?int $limit = 1000, ?array $orderBy = []): array;
|
||||
|
||||
/**
|
||||
* Return a list of activities, simplified as array (not object).
|
||||
*
|
||||
* The aim of this method is to get a long list of activities and keep performance.
|
||||
*
|
||||
* @return array an array of array, each item representing an activity
|
||||
*/
|
||||
public function findByAccompanyingPeriodSimplified(AccompanyingPeriod $period, ?int $limit = 1000): array;
|
||||
|
||||
/**
|
||||
* @return Activity[]|array
|
||||
*/
|
||||
|
@@ -0,0 +1,23 @@
|
||||
div.chill-dropzone__below-zone {
|
||||
a.btn-delete {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
ul[data-collection-name="documents"] {
|
||||
button.remove-entry {
|
||||
margin: 0.5rem 0!important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// do it in js does not work
|
||||
// document.addEventListener('DOMContentLoaded', e => {
|
||||
// const dropzoneBelow = document.querySelectorAll('div.chill-dropzone__below-zone');
|
||||
// dropzoneBelow.forEach(
|
||||
// d => {
|
||||
// const a = d.querySelector('a.btn-delete');
|
||||
// d.removeChild(a);
|
||||
// }
|
||||
// )
|
||||
// });
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<li>
|
||||
<span :title="person.text">
|
||||
<span class="chill_denomination" @click.prevent="$emit('remove', person)">
|
||||
<span :title="person.text" @click.prevent="$emit('remove', person)">
|
||||
<span class="chill_denomination">
|
||||
<person-text :person="person" :isCut="true"></person-text>
|
||||
</span>
|
||||
</span>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<teleport to="#location">
|
||||
<div class="mb-3 row">
|
||||
<label class="col-form-label col-sm-4">
|
||||
<label :class="locationClassList">
|
||||
{{ $t("activity.location") }}
|
||||
</label>
|
||||
<div class="col-sm-8">
|
||||
@@ -41,6 +41,12 @@ export default {
|
||||
NewLocation,
|
||||
VueMultiselect,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
locationClassList:
|
||||
`col-form-label col-sm-4 ${document.querySelector('input#chill_activitybundle_activity_location').getAttribute('required') ? 'required' : ''}`,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState(["activity", "availableLocations"]),
|
||||
...mapGetters(["suggestedEntities"]),
|
||||
|
@@ -18,6 +18,12 @@
|
||||
</template>
|
||||
<template v-slot:body>
|
||||
<form>
|
||||
<div class="alert alert-warning" v-if="errors.length">
|
||||
<ul>
|
||||
<li v-for="(e, i) in errors" :key="i">{{ e }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="form-floating mb-3">
|
||||
<select class="form-select form-select-lg" id="type" required v-model="selectType">
|
||||
<option selected disabled value="">{{ $t('activity.choose_location_type') }}</option>
|
||||
@@ -54,11 +60,6 @@
|
||||
<label for="email">{{ $t('activity.location_fields.email') }}</label>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-warning" v-if="errors.length">
|
||||
<ul>
|
||||
<li v-for="(e, i) in errors" :key="i">{{ e }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
</template>
|
||||
<template v-slot:footer>
|
||||
|
@@ -3,7 +3,7 @@
|
||||
|
||||
<div class="mb-3 row">
|
||||
<div class="col-4">
|
||||
<label class="col-form-label">{{ $t('activity.social_issues') }}</label>
|
||||
<label :class="socialIssuesClassList">{{ $t('activity.social_issues') }}</label>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
<div class="mb-3 row">
|
||||
<div class="col-4">
|
||||
<label class="col-form-label">{{ $t('activity.social_actions') }}</label>
|
||||
<label :class="socialActionsClassList">{{ $t('activity.social_actions') }}</label>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
|
||||
@@ -54,19 +54,19 @@
|
||||
{{ $t('activity.select_first_a_social_issue') }}
|
||||
</span>
|
||||
|
||||
<template v-else-if="socialActionsList.length > 0">
|
||||
<check-social-action
|
||||
v-if="socialIssuesSelected.length || socialActionsSelected.length"
|
||||
v-for="action in socialActionsList"
|
||||
:key="action.id"
|
||||
:action="action"
|
||||
:selection="socialActionsSelected"
|
||||
@updateSelected="updateActionsSelected">
|
||||
</check-social-action>
|
||||
</template>
|
||||
<template v-else-if="socialActionsList.length > 0">
|
||||
<check-social-action
|
||||
v-if="socialIssuesSelected.length || socialActionsSelected.length"
|
||||
v-for="action in socialActionsList"
|
||||
:key="action.id"
|
||||
:action="action"
|
||||
:selection="socialActionsSelected"
|
||||
@updateSelected="updateActionsSelected">
|
||||
</check-social-action>
|
||||
</template>
|
||||
|
||||
<span v-else-if="actionAreLoaded && socialActionsList.length === 0" class="inline-choice chill-no-data-statement mt-3">
|
||||
{{ $t('activity.social_action_list_empty') }}
|
||||
{{ $t('activity.social_action_list_empty') }}
|
||||
</span>
|
||||
|
||||
|
||||
@@ -94,6 +94,10 @@ export default {
|
||||
issueIsLoading: false,
|
||||
actionIsLoading: false,
|
||||
actionAreLoaded: false,
|
||||
socialIssuesClassList:
|
||||
`col-form-label ${document.querySelector('input#chill_activitybundle_activity_socialIssues').getAttribute('required') ? 'required' : ''}`,
|
||||
socialActionsClassList:
|
||||
`col-form-label ${document.querySelector('input#chill_activitybundle_activity_socialActions').getAttribute('required') ? 'required' : ''}`,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -107,7 +111,7 @@ export default {
|
||||
return this.$store.state.socialIssuesOther;
|
||||
},
|
||||
socialActionsList() {
|
||||
return this.$store.state.socialActionsList;
|
||||
return this.$store.getters.socialActionsListSorted;
|
||||
},
|
||||
socialActionsSelected() {
|
||||
return this.$store.state.activity.socialActions;
|
||||
|
@@ -101,6 +101,9 @@ const store = createStore({
|
||||
state.activity.activityType.thirdPartiesVisible !== 0)
|
||||
);
|
||||
},
|
||||
socialActionsListSorted(state) {
|
||||
return [ ...state.socialActionsList].sort((a, b) => a.ordering - b.ordering);
|
||||
},
|
||||
},
|
||||
mutations: {
|
||||
// SocialIssueAcc
|
||||
@@ -131,7 +134,6 @@ const store = createStore({
|
||||
state.socialActionsList = [];
|
||||
},
|
||||
addActionInList(state, action) {
|
||||
//console.log('add action list', action.id);
|
||||
state.socialActionsList.push(action);
|
||||
},
|
||||
updateActionsSelected(state, actions) {
|
||||
|
@@ -110,10 +110,8 @@ export default function prepareLocations(store) {
|
||||
console.log('default loation id', window.default_location_id);
|
||||
if (window.default_location_id) {
|
||||
for (let group of store.state.availableLocations) {
|
||||
console.log(group);
|
||||
let location = group.locations.find((l) => l.id === window.default_location_id);
|
||||
console.log(location);
|
||||
if (location !== undefined) {
|
||||
if (location !== undefined & store.state.activity.location === null) {
|
||||
store.dispatch('updateLocation', location);
|
||||
break;
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@
|
||||
|
||||
{% block title 'Remove activity'|trans %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
{{ include('@ChillMain/Util/confirmation_template.html.twig',
|
||||
{
|
||||
'title' : 'Remove activity'|trans,
|
||||
|
@@ -35,7 +35,7 @@
|
||||
{{ form_row(edit_form.socialActions) }}
|
||||
{% endif %}
|
||||
|
||||
{%- if edit_form.socialIssues is defined or edit_form.socialIssues is defined -%}
|
||||
{%- if edit_form.socialIssues is defined or edit_form.socialActions is defined -%}
|
||||
<div id="social-issues-acc"></div>
|
||||
{% endif %}
|
||||
|
||||
|
@@ -30,4 +30,5 @@
|
||||
{{ parent() }}
|
||||
{{ encore_entry_link_tags('mod_async_upload') }}
|
||||
{{ encore_entry_link_tags('vue_activity') }}
|
||||
{{ encore_entry_link_tags('page_edit_activity') }}
|
||||
{% endblock %}
|
||||
|
@@ -20,7 +20,7 @@
|
||||
|
||||
{% block title 'Update activity'|trans %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
<div class="activity-edit">
|
||||
|
||||
<div id="activity"></div> {# <=== vue component #}
|
||||
|
@@ -30,7 +30,7 @@
|
||||
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
|
||||
{% set person_id = null %}
|
||||
{% if person %}
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
{% include 'ChillActivityBundle:Activity:list.html.twig' with {'context': 'person'} %}
|
||||
|
||||
{% if is_granted('CHILL_ACTIVITY_CREATE', person) %}
|
||||
{% if is_granted('CHILL_ACTIVITY_CREATE_PERSON', person) %}
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li>
|
||||
<a href="{{ path('chill_activity_activity_new', {'person_id': person_id, 'accompanying_period_id': accompanying_course_id}) }}"
|
||||
|
@@ -35,7 +35,7 @@
|
||||
{{ form_row(form.socialActions) }}
|
||||
{% endif %}
|
||||
|
||||
{%- if form.socialIssues is defined or form.socialIssues is defined -%}
|
||||
{%- if form.socialIssues is defined or form.socialActions is defined -%}
|
||||
<div id="social-issues-acc"></div>
|
||||
{% endif %}
|
||||
|
||||
@@ -85,15 +85,15 @@
|
||||
{{ form_row(form.comment) }}
|
||||
{% endif %}
|
||||
|
||||
{%- if form.attendee is defined -%}
|
||||
{{ form_row(form.attendee) }}
|
||||
{% endif %}
|
||||
|
||||
{%- if form.documents is defined -%}
|
||||
{{ form_row(form.documents) }}
|
||||
<div data-docgen-template-picker="data-docgen-template-picker" data-entity-class="Chill\ActivityBundle\Entity\Activity" data-entity-id="{{ entity.id }}"></div>
|
||||
{% endif %}
|
||||
|
||||
{%- if form.attendee is defined -%}
|
||||
{{ form_row(form.attendee) }}
|
||||
{% endif %}
|
||||
|
||||
{# TODO .. status #}
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
|
@@ -4,7 +4,7 @@
|
||||
|
||||
{% block title 'Activity creation' |trans %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
<div class="activity-new">
|
||||
|
||||
<div id="activity"></div> {# <=== vue component #}
|
||||
|
@@ -4,6 +4,6 @@
|
||||
|
||||
{% block title 'Activity creation'|trans %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
{% include 'ChillActivityBundle:Activity:selectType.html.twig' %}
|
||||
{% endblock %}
|
||||
|
@@ -18,11 +18,11 @@
|
||||
|
||||
{% import 'ChillActivityBundle:ActivityReason:macro.html.twig' as m %}
|
||||
|
||||
{% block personcontent -%}
|
||||
{% block content -%}
|
||||
<div class="activity-show">
|
||||
{% include 'ChillActivityBundle:Activity:show.html.twig' with {'context': 'person'} %}
|
||||
</div>
|
||||
{% endblock personcontent %}
|
||||
{% endblock %}
|
||||
|
||||
{% block block_post_menu %}
|
||||
<div class="post-menu pt-4">
|
||||
|
@@ -25,7 +25,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block layout_wvm_content %}
|
||||
{% block admin_content %}<!-- block personcontent empty -->
|
||||
{% block admin_content %}<!-- block content empty -->
|
||||
<h1>{{ 'Activity configuration' |trans }}</h1>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
@@ -22,7 +22,7 @@ use Chill\DocStoreBundle\Repository\DocumentCategoryRepository;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Chill\PersonBundle\Templating\Entity\PersonRender;
|
||||
use Chill\PersonBundle\Templating\Entity\PersonRenderInterface;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||
@@ -43,7 +43,7 @@ class ActivityContext implements
|
||||
|
||||
private NormalizerInterface $normalizer;
|
||||
|
||||
private PersonRender $personRender;
|
||||
private PersonRenderInterface $personRender;
|
||||
|
||||
private TranslatableStringHelperInterface $translatableStringHelper;
|
||||
|
||||
@@ -54,7 +54,7 @@ class ActivityContext implements
|
||||
NormalizerInterface $normalizer,
|
||||
TranslatableStringHelperInterface $translatableStringHelper,
|
||||
EntityManagerInterface $em,
|
||||
PersonRender $personRender,
|
||||
PersonRenderInterface $personRender,
|
||||
TranslatorInterface $translator,
|
||||
BaseContextData $baseContextData
|
||||
) {
|
||||
|
@@ -0,0 +1,286 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\ActivityBundle\Service\DocGenerator;
|
||||
|
||||
use Chill\ActivityBundle\Entity\ActivityPresence;
|
||||
use Chill\ActivityBundle\Entity\ActivityType;
|
||||
use Chill\ActivityBundle\Repository\ActivityACLAwareRepositoryInterface;
|
||||
use Chill\DocGeneratorBundle\Context\DocGeneratorContextWithAdminFormInterface;
|
||||
use Chill\DocGeneratorBundle\Context\DocGeneratorContextWithPublicFormInterface;
|
||||
use Chill\DocGeneratorBundle\Entity\DocGeneratorTemplate;
|
||||
use Chill\DocStoreBundle\Entity\StoredObject;
|
||||
use Chill\MainBundle\Entity\Location;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Repository\UserRepository;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
|
||||
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
|
||||
use Chill\PersonBundle\Repository\PersonRepository;
|
||||
use Chill\PersonBundle\Repository\SocialWork\SocialActionRepository;
|
||||
use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository;
|
||||
use Chill\PersonBundle\Service\DocGenerator\AccompanyingPeriodContext;
|
||||
use Chill\ThirdPartyBundle\Entity\ThirdParty;
|
||||
use Chill\ThirdPartyBundle\Repository\ThirdPartyRepository;
|
||||
use DateTime;
|
||||
use libphonenumber\PhoneNumber;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
|
||||
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
|
||||
|
||||
class ListActivitiesByAccompanyingPeriodContext implements
|
||||
DocGeneratorContextWithAdminFormInterface,
|
||||
DocGeneratorContextWithPublicFormInterface
|
||||
{
|
||||
private AccompanyingPeriodContext $accompanyingPeriodContext;
|
||||
|
||||
private ActivityACLAwareRepositoryInterface $activityACLAwareRepository;
|
||||
|
||||
private NormalizerInterface $normalizer;
|
||||
|
||||
private PersonRepository $personRepository;
|
||||
|
||||
private SocialActionRepository $socialActionRepository;
|
||||
|
||||
private SocialIssueRepository $socialIssueRepository;
|
||||
|
||||
private ThirdPartyRepository $thirdPartyRepository;
|
||||
|
||||
private TranslatableStringHelperInterface $translatableStringHelper;
|
||||
|
||||
private UserRepository $userRepository;
|
||||
|
||||
public function __construct(
|
||||
AccompanyingPeriodContext $accompanyingPeriodContext,
|
||||
ActivityACLAwareRepositoryInterface $activityACLAwareRepository,
|
||||
NormalizerInterface $normalizer,
|
||||
PersonRepository $personRepository,
|
||||
SocialActionRepository $socialActionRepository,
|
||||
SocialIssueRepository $socialIssueRepository,
|
||||
ThirdPartyRepository $thirdPartyRepository,
|
||||
TranslatableStringHelperInterface $translatableStringHelper,
|
||||
UserRepository $userRepository
|
||||
) {
|
||||
$this->accompanyingPeriodContext = $accompanyingPeriodContext;
|
||||
$this->activityACLAwareRepository = $activityACLAwareRepository;
|
||||
$this->normalizer = $normalizer;
|
||||
$this->personRepository = $personRepository;
|
||||
$this->socialActionRepository = $socialActionRepository;
|
||||
$this->socialIssueRepository = $socialIssueRepository;
|
||||
$this->thirdPartyRepository = $thirdPartyRepository;
|
||||
$this->translatableStringHelper = $translatableStringHelper;
|
||||
$this->userRepository = $userRepository;
|
||||
}
|
||||
|
||||
public function adminFormReverseTransform(array $data): array
|
||||
{
|
||||
return $this->accompanyingPeriodContext->adminFormReverseTransform($data);
|
||||
}
|
||||
|
||||
public function adminFormTransform(array $data): array
|
||||
{
|
||||
return $this->accompanyingPeriodContext->adminFormTransform($data);
|
||||
}
|
||||
|
||||
public function buildAdminForm(FormBuilderInterface $builder): void
|
||||
{
|
||||
$this->accompanyingPeriodContext->buildAdminForm($builder);
|
||||
}
|
||||
|
||||
public function buildPublicForm(FormBuilderInterface $builder, DocGeneratorTemplate $template, $entity): void
|
||||
{
|
||||
$this->accompanyingPeriodContext->buildPublicForm($builder, $template, $entity);
|
||||
}
|
||||
|
||||
public function getData(DocGeneratorTemplate $template, $entity, array $contextGenerationData = []): array
|
||||
{
|
||||
$data = $this->accompanyingPeriodContext->getData($template, $entity, $contextGenerationData);
|
||||
|
||||
$data['activities'] = $this->getActivitiesSimplified($entity);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'docgen.Accompanying period with a list of activities description';
|
||||
}
|
||||
|
||||
public function getEntityClass(): string
|
||||
{
|
||||
return AccompanyingPeriod::class;
|
||||
}
|
||||
|
||||
public function getFormData(DocGeneratorTemplate $template, $entity): array
|
||||
{
|
||||
return $this->accompanyingPeriodContext->getFormData($template, $entity);
|
||||
}
|
||||
|
||||
public static function getKey(): string
|
||||
{
|
||||
return self::class;
|
||||
}
|
||||
|
||||
public function getName(): string
|
||||
{
|
||||
return 'docgen.Accompanying period with a list of activities';
|
||||
}
|
||||
|
||||
public function hasAdminForm(): bool
|
||||
{
|
||||
return $this->accompanyingPeriodContext->hasAdminForm();
|
||||
}
|
||||
|
||||
public function hasPublicForm(DocGeneratorTemplate $template, $entity): bool
|
||||
{
|
||||
return $this->accompanyingPeriodContext->hasPublicForm($template, $entity);
|
||||
}
|
||||
|
||||
public function storeGenerated(DocGeneratorTemplate $template, StoredObject $storedObject, object $entity, array $contextGenerationData): void
|
||||
{
|
||||
$this->accompanyingPeriodContext->storeGenerated($template, $storedObject, $entity, $contextGenerationData);
|
||||
}
|
||||
|
||||
private function getActivitiesSimplified(AccompanyingPeriod $period)
|
||||
{
|
||||
$activities =
|
||||
$this->activityACLAwareRepository->findByAccompanyingPeriodSimplified($period);
|
||||
$results = [];
|
||||
|
||||
foreach ($activities as $row) {
|
||||
$activity = $row[0];
|
||||
|
||||
$activity['date'] = $this->normalizer->normalize($activity['date'], 'docgen', [
|
||||
AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => DateTime::class,
|
||||
]);
|
||||
|
||||
if (null === $activity['location']) {
|
||||
$activity['location'] = $this->normalizer->normalize(null, 'docgen', [
|
||||
AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => Location::class,
|
||||
]);
|
||||
$activity['location']['type'] = 'location';
|
||||
} else {
|
||||
$activity['location']['isNull'] = false;
|
||||
$activity['location']['type'] = 'location';
|
||||
|
||||
foreach (['1', '2'] as $key) {
|
||||
$activity['location']['phonenumber' . $key] = $this->normalizer->normalize(
|
||||
$activity['location']['phonenumber' . $key],
|
||||
'docgen',
|
||||
[AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => PhoneNumber::class]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (is_numeric($activity['location']['locationType']['id'])) {
|
||||
$activity['location']['locationType']['title'] = $this->translatableStringHelper->localize(
|
||||
$activity['location']['locationType']['title']
|
||||
);
|
||||
$activity['location']['locationType']['isNull'] = false;
|
||||
$activity['location']['locationType']['type'] = 'locationType';
|
||||
}
|
||||
|
||||
if (null !== $activity['activityType']) {
|
||||
$activity['activityType']['name'] = $this->translatableStringHelper->localize(
|
||||
$activity['activityType']['name']
|
||||
);
|
||||
$activity['activityType']['isNull'] = false;
|
||||
$activity['activityType']['type'] = 'activityType';
|
||||
} else {
|
||||
$activity['activityType'] = $this->normalizer->normalize(null, 'docgen', [
|
||||
AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => ActivityType::class,
|
||||
]);
|
||||
}
|
||||
|
||||
if (null !== $activity['attendee']) {
|
||||
$activity['attendee']['name'] = $this->translatableStringHelper->localize(
|
||||
$activity['attendee']['name']
|
||||
);
|
||||
$activity['attendee']['isNull'] = false;
|
||||
$activity['attendee']['type'] = 'activityPresence';
|
||||
} else {
|
||||
$activity['attendee'] = $this->normalizer->normalize(null, 'docgen', [
|
||||
AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => ActivityPresence::class,
|
||||
]);
|
||||
}
|
||||
|
||||
$activity['comment'] = (string) $row['comment'];
|
||||
$activity['travelTimeMinute'] = $row['travelTimeMinute'];
|
||||
$activity['durationTimeMinute'] = $row['durationTimeMinute'];
|
||||
|
||||
if (null !== $row['userIds']) {
|
||||
foreach ($row['userIds'] as $id) {
|
||||
$activity['users'][] = $this->normalizer->normalize(
|
||||
$this->userRepository->find($id),
|
||||
'docgen',
|
||||
[AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => User::class]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$activity['users'] = [];
|
||||
}
|
||||
|
||||
if (null !== $row['personIds']) {
|
||||
foreach ($row['personIds'] as $id) {
|
||||
$activity['persons'][] = $this->normalizer->normalize(
|
||||
$this->personRepository->find($id),
|
||||
'docgen',
|
||||
[AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => Person::class]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$activity['persons'] = [];
|
||||
}
|
||||
|
||||
if (null !== $row['thirdPartyIds']) {
|
||||
foreach ($row['thirdPartyIds'] as $id) {
|
||||
$activity['thirdParties'][] = $this->normalizer->normalize(
|
||||
$this->thirdPartyRepository->find($id),
|
||||
'docgen',
|
||||
[AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => ThirdParty::class]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$activity['thirdParties'] = [];
|
||||
}
|
||||
|
||||
if (null !== $row['socialActionIds']) {
|
||||
foreach ($row['socialActionIds'] as $id) {
|
||||
$activity['socialActions'][] = $this->normalizer->normalize(
|
||||
$this->socialActionRepository->find($id),
|
||||
'docgen',
|
||||
[AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => SocialAction::class]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$activity['socialActions'] = [];
|
||||
}
|
||||
|
||||
if (null !== $row['socialIssueIds']) {
|
||||
foreach ($row['socialIssueIds'] as $id) {
|
||||
$activity['socialIssues'][] = $this->normalizer->normalize(
|
||||
$this->socialIssueRepository->find($id),
|
||||
'docgen',
|
||||
[AbstractNormalizer::GROUPS => ['docgen:read'], 'docgen:expects' => SocialIssue::class]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$activity['socialIssues'] = [];
|
||||
}
|
||||
|
||||
$results[] = $activity;
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
}
|
114
src/Bundle/ChillActivityBundle/Tests/Entity/ActivityTest.php
Normal file
114
src/Bundle/ChillActivityBundle/Tests/Entity/ActivityTest.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\ActivityBundle\Tests\Entity;
|
||||
|
||||
use Chill\ActivityBundle\Entity\Activity;
|
||||
use Chill\PersonBundle\AccompanyingPeriod\SocialIssueConsistency\AccompanyingPeriodSocialIssueConsistencyEntityListener;
|
||||
use Chill\PersonBundle\Entity\AccompanyingPeriod;
|
||||
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
|
||||
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
|
||||
use Doctrine\ORM\Event\LifecycleEventArgs;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Prophecy\PhpUnit\ProphecyTrait;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @coversNothing
|
||||
*/
|
||||
final class ActivityTest extends TestCase
|
||||
{
|
||||
use ProphecyTrait;
|
||||
|
||||
public function testHierarchySocialActions(): void
|
||||
{
|
||||
$parent = new SocialAction();
|
||||
$child = new SocialAction();
|
||||
|
||||
$parent->addChild($child);
|
||||
$grandChild = new SocialAction();
|
||||
$child->addChild($grandChild);
|
||||
|
||||
$activity = new Activity();
|
||||
|
||||
$activity->addSocialAction($parent);
|
||||
|
||||
$this->assertCount(1, $activity->getSocialActions());
|
||||
$this->assertContains($parent, $activity->getSocialActions());
|
||||
|
||||
$activity->addSocialAction($grandChild);
|
||||
|
||||
$this->assertCount(1, $activity->getSocialActions());
|
||||
$this->assertContains($grandChild, $activity->getSocialActions());
|
||||
$this->assertNotContains($parent, $activity->getSocialActions());
|
||||
|
||||
$activity->addSocialAction($child);
|
||||
|
||||
$this->assertCount(1, $activity->getSocialActions());
|
||||
$this->assertContains($grandChild, $activity->getSocialActions());
|
||||
$this->assertNotContains($parent, $activity->getSocialActions());
|
||||
$this->assertNotContains($child, $activity->getSocialActions());
|
||||
|
||||
$activity->addSocialAction($another = new SocialAction());
|
||||
|
||||
$this->assertCount(2, $activity->getSocialActions());
|
||||
$this->assertContains($grandChild, $activity->getSocialActions());
|
||||
$this->assertContains($another, $activity->getSocialActions());
|
||||
$this->assertNotContains($parent, $activity->getSocialActions());
|
||||
$this->assertNotContains($child, $activity->getSocialActions());
|
||||
}
|
||||
|
||||
public function testHierarchySocialIssues(): void
|
||||
{
|
||||
$listener = new AccompanyingPeriodSocialIssueConsistencyEntityListener();
|
||||
$event = $this->prophesize(LifecycleEventArgs::class)->reveal();
|
||||
|
||||
$parent = new SocialIssue();
|
||||
$child = new SocialIssue();
|
||||
|
||||
$parent->addChild($child);
|
||||
$grandChild = new SocialIssue();
|
||||
$child->addChild($grandChild);
|
||||
|
||||
$activity = new Activity();
|
||||
$activity->setAccompanyingPeriod(new AccompanyingPeriod());
|
||||
|
||||
$activity->addSocialIssue($parent);
|
||||
$listener->preUpdate($activity, $event);
|
||||
|
||||
$this->assertCount(1, $activity->getSocialIssues());
|
||||
$this->assertContains($parent, $activity->getSocialIssues());
|
||||
|
||||
$activity->addSocialIssue($grandChild);
|
||||
$listener->preUpdate($activity, $event);
|
||||
|
||||
$this->assertCount(1, $activity->getSocialIssues());
|
||||
$this->assertContains($grandChild, $activity->getSocialIssues());
|
||||
$this->assertNotContains($parent, $activity->getSocialIssues());
|
||||
|
||||
$activity->addSocialIssue($child);
|
||||
$listener->preUpdate($activity, $event);
|
||||
|
||||
$this->assertCount(1, $activity->getSocialIssues());
|
||||
$this->assertContains($grandChild, $activity->getSocialIssues());
|
||||
$this->assertNotContains($parent, $activity->getSocialIssues());
|
||||
$this->assertNotContains($child, $activity->getSocialIssues());
|
||||
|
||||
$activity->addSocialIssue($another = new SocialIssue());
|
||||
$listener->preUpdate($activity, $event);
|
||||
|
||||
$this->assertCount(2, $activity->getSocialIssues());
|
||||
$this->assertContains($grandChild, $activity->getSocialIssues());
|
||||
$this->assertContains($another, $activity->getSocialIssues());
|
||||
$this->assertNotContains($parent, $activity->getSocialIssues());
|
||||
$this->assertNotContains($child, $activity->getSocialIssues());
|
||||
}
|
||||
}
|
@@ -7,5 +7,7 @@ module.exports = function(encore, entries)
|
||||
ChillActivityAssets: __dirname + '/Resources/public'
|
||||
});
|
||||
|
||||
encore.addEntry('page_edit_activity', __dirname + '/Resources/public/page/edit_activity/index.scss');
|
||||
|
||||
encore.addEntry('vue_activity', __dirname + '/Resources/public/vuejs/Activity/index.js');
|
||||
};
|
||||
|
@@ -66,6 +66,14 @@ Choose a type: Choisir un type
|
||||
1 hour 30: 1 heure 30
|
||||
1 hour 45: 1 heure 45
|
||||
2 hours: 2 heures
|
||||
2 hours 15: 2 heures 15
|
||||
2 hours 30: 2 heures 30
|
||||
2 hours 45: 2 heures 45
|
||||
3 hours: 3 heures
|
||||
3 hours 30: 3 heures 30
|
||||
4 hours: 4 heures
|
||||
4 hours 30: 4 heures 30
|
||||
5 hours: 5 heures
|
||||
Concerned groups: Parties concernées
|
||||
Persons in accompanying course: Usagers du parcours
|
||||
Third persons: Tiers non-pro.
|
||||
@@ -76,7 +84,7 @@ activity:
|
||||
Insert a document: Insérer un document
|
||||
Remove a document: Supprimer le document
|
||||
comment: Commentaire
|
||||
No documents: Pas de documents
|
||||
No documents: Aucun document
|
||||
|
||||
#timeline
|
||||
'%user% has done an %activity_type%': '%user% a effectué une activité de type "%activity_type%"'
|
||||
@@ -232,3 +240,5 @@ This is the minimal activity data: Activité n°
|
||||
docgen:
|
||||
Activity basic: Echange
|
||||
A basic context for activity: Contexte pour les échanges
|
||||
Accompanying period with a list of activities: Parcours d'accompagnement avec liste des échanges
|
||||
Accompanying period with a list of activities description: Ce contexte reprend les informations du parcours, et tous les échanges pour un parcours. Les échanges ne sont pas filtrés.
|
||||
|
@@ -31,6 +31,10 @@ class Configuration implements ConfigurationInterface
|
||||
->isRequired()
|
||||
->defaultValue(
|
||||
[
|
||||
['label' => '1 minutes', 'seconds' => 60],
|
||||
['label' => '2 minutes', 'seconds' => 120],
|
||||
['label' => '3 minutes', 'seconds' => 180],
|
||||
['label' => '4 minutes', 'seconds' => 240],
|
||||
['label' => '5 minutes', 'seconds' => 300],
|
||||
['label' => '10 minutes', 'seconds' => 600],
|
||||
['label' => '15 minutes', 'seconds' => 900],
|
||||
|
@@ -16,7 +16,7 @@ use Chill\TaskBundle\Templating\UI\CountNotificationTask;
|
||||
use Knp\Menu\MenuItem;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
||||
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class UserMenuBuilder implements LocalMenuBuilderInterface
|
||||
{
|
||||
|
@@ -6,7 +6,7 @@
|
||||
|
||||
{% block layout_wvm_content %}
|
||||
{% block admin_content %}
|
||||
<!-- block personcontent empty -->
|
||||
<!-- block content empty -->
|
||||
<h1>{{ 'Aside activity configuration'|trans }}</h1>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
@@ -40,7 +40,7 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="item-col">
|
||||
<div class="item-col" style="justify-content: flex-end;">
|
||||
<div class="box">
|
||||
<ul class="list-content fa-ul">
|
||||
<li>
|
||||
@@ -79,7 +79,7 @@
|
||||
|
||||
{{ chill_pagination(paginator) }}
|
||||
|
||||
<ul class="record_actions">
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li>
|
||||
<a href="{{ chill_path_add_return_path('chill_crud_aside_activity_new') }}" class="btn btn-create">
|
||||
{{ 'Create'|trans }}
|
||||
|
@@ -9,9 +9,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Calculator;
|
||||
namespace Chill\BudgetBundle\Calculator;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\AbstractElement;
|
||||
use Chill\BudgetBundle\Entity\AbstractElement;
|
||||
|
||||
interface CalculatorInterface
|
||||
{
|
||||
|
@@ -9,9 +9,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Calculator;
|
||||
namespace Chill\BudgetBundle\Calculator;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\AbstractElement;
|
||||
use Chill\BudgetBundle\Entity\AbstractElement;
|
||||
use OutOfBoundsException;
|
||||
|
||||
use function array_key_exists;
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Calculator;
|
||||
namespace Chill\BudgetBundle\Calculator;
|
||||
|
||||
class CalculatorResult
|
||||
{
|
||||
|
@@ -9,12 +9,12 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle;
|
||||
namespace Chill\BudgetBundle;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\DependencyInjection\Compiler\CalculatorCompilerPass;
|
||||
use Chill\BudgetBundle\DependencyInjection\Compiler\CalculatorCompilerPass;
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||
|
||||
class ChillAMLIBudgetBundle extends Bundle
|
||||
class ChillBudgetBundle extends Bundle
|
||||
{
|
||||
public function build(\Symfony\Component\DependencyInjection\ContainerBuilder $container)
|
||||
{
|
@@ -9,7 +9,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Config;
|
||||
namespace Chill\BudgetBundle\Config;
|
||||
|
||||
class ConfigRepository
|
||||
{
|
||||
@@ -29,6 +29,11 @@ class ConfigRepository
|
||||
$this->charges = $charges;
|
||||
}
|
||||
|
||||
public function getChargesKeys(): array
|
||||
{
|
||||
return array_map(static function ($element) { return $element['key']; }, $this->charges);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array where keys are the resource'key and label the ressource label
|
||||
*/
|
||||
@@ -43,6 +48,11 @@ class ConfigRepository
|
||||
return $charges;
|
||||
}
|
||||
|
||||
public function getResourcesKeys(): array
|
||||
{
|
||||
return array_map(static function ($element) { return $element['key']; }, $this->resources);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array where keys are the resource'key and label the ressource label
|
||||
*/
|
||||
|
@@ -9,37 +9,29 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Controller;
|
||||
namespace Chill\BudgetBundle\Controller;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\AbstractElement;
|
||||
use Chill\AMLI\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\BudgetBundle\Entity\AbstractElement;
|
||||
use Chill\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
|
||||
use Symfony\Component\Form\Form;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
use function get_class;
|
||||
|
||||
abstract class AbstractElementController extends Controller
|
||||
abstract class AbstractElementController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
protected $chillMainLogger;
|
||||
protected LoggerInterface $chillMainLogger;
|
||||
|
||||
/**
|
||||
* @var EntityManagerInterface
|
||||
*/
|
||||
protected $em;
|
||||
protected EntityManagerInterface $em;
|
||||
|
||||
/**
|
||||
* @var TranslatorInterface
|
||||
*/
|
||||
protected $translator;
|
||||
protected TranslatorInterface $translator;
|
||||
|
||||
public function __construct(
|
||||
EntityManagerInterface $em,
|
||||
@@ -59,16 +51,22 @@ abstract class AbstractElementController extends Controller
|
||||
*
|
||||
* @param mixed $template
|
||||
* @param mixed $flashMessage
|
||||
*
|
||||
* @return \Symfony\Component\BrowserKit\Response
|
||||
*/
|
||||
protected function _delete(AbstractElement $element, Request $request, $template, $flashMessage)
|
||||
protected function _delete(AbstractElement $element, Request $request, $template, $flashMessage): Response
|
||||
{
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::DELETE, $element, 'You are not '
|
||||
. 'allowed to delete this family membership');
|
||||
. 'allowed to delete this item');
|
||||
|
||||
$form = $this->createDeleteForm();
|
||||
|
||||
if (null !== $element->getPerson()) {
|
||||
$entity = $element->getPerson();
|
||||
$indexPage = 'chill_budget_elements_index';
|
||||
} else {
|
||||
$entity = $element->getHousehold();
|
||||
$indexPage = 'chill_budget_elements_household_index';
|
||||
}
|
||||
|
||||
if ($request->getMethod() === Request::METHOD_DELETE) {
|
||||
$form->handleRequest($request);
|
||||
|
||||
@@ -88,8 +86,8 @@ abstract class AbstractElementController extends Controller
|
||||
$this->addFlash('success', $this->translator
|
||||
->trans($flashMessage));
|
||||
|
||||
return $this->redirectToRoute('chill_budget_elements_index', [
|
||||
'id' => $element->getPerson()->getId(),
|
||||
return $this->redirectToRoute($indexPage, [
|
||||
'id' => $entity->getId(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -103,13 +101,23 @@ abstract class AbstractElementController extends Controller
|
||||
/**
|
||||
* @param string $template
|
||||
* @param string $flashOnSuccess
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
protected function _edit(AbstractElement $element, Request $request, $template, $flashOnSuccess)
|
||||
protected function _edit(AbstractElement $element, Request $request, $template, $flashOnSuccess): Response
|
||||
{
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::UPDATE, $element);
|
||||
|
||||
if (null !== $element->getPerson()) {
|
||||
$entity = $element->getPerson();
|
||||
$entityStr = 'person';
|
||||
$indexPage = 'chill_budget_elements_index';
|
||||
} else {
|
||||
$entity = $element->getHousehold();
|
||||
$entityStr = 'household';
|
||||
$indexPage = 'chill_budget_elements_household_index';
|
||||
}
|
||||
|
||||
$entity = null !== $element->getPerson() ? $element->getPerson() : $element->getHousehold();
|
||||
|
||||
$form = $this->createForm($this->getType(), $element);
|
||||
$form->add('submit', SubmitType::class);
|
||||
|
||||
@@ -121,29 +129,39 @@ abstract class AbstractElementController extends Controller
|
||||
|
||||
$this->addFlash('success', $this->translator->trans($flashOnSuccess));
|
||||
|
||||
return $this->redirectToRoute('chill_budget_elements_index', [
|
||||
'id' => $element->getPerson()->getId(),
|
||||
return $this->redirectToRoute($indexPage, [
|
||||
'id' => $entity->getId(),
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->render($template, [
|
||||
'element' => $element,
|
||||
'form' => $form->createView(),
|
||||
'person' => $element->getPerson(),
|
||||
$entityStr => $entity,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $template
|
||||
* @param mixed $flashMessageOnSuccess
|
||||
* @param mixed $entity
|
||||
*/
|
||||
protected function _new(Person $person, Request $request, $template, $flashMessageOnSuccess)
|
||||
protected function _new($entity, Request $request, $template, $flashMessageOnSuccess)
|
||||
{
|
||||
/** @var \Chill\AMLI\BudgetBundle\Entity\AbstractElement $element */
|
||||
$element = $this->createNewElement()
|
||||
->setPerson($person);
|
||||
/** @var AbstractElement $element */
|
||||
$element = $this->createNewElement();
|
||||
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::CREATE, $element);
|
||||
if ($entity instanceof Person) {
|
||||
$element->setPerson($entity);
|
||||
$entityStr = 'person';
|
||||
$indexPage = 'chill_budget_elements_index';
|
||||
} else {
|
||||
$element->setHousehold($entity);
|
||||
$entityStr = 'household';
|
||||
$indexPage = 'chill_budget_elements_household_index';
|
||||
}
|
||||
|
||||
// $this->denyAccessUnlessGranted(BudgetElementVoter::CREATE, $entity);
|
||||
|
||||
$form = $this->createForm($this->getType(), $element);
|
||||
$form->add('submit', SubmitType::class);
|
||||
@@ -157,8 +175,8 @@ abstract class AbstractElementController extends Controller
|
||||
|
||||
$this->addFlash('success', $this->translator->trans($flashMessageOnSuccess));
|
||||
|
||||
return $this->redirectToRoute('chill_budget_elements_index', [
|
||||
'id' => $person->getId(),
|
||||
return $this->redirectToRoute($indexPage, [
|
||||
'id' => $entity->getId(),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -168,7 +186,7 @@ abstract class AbstractElementController extends Controller
|
||||
|
||||
return $this->render($template, [
|
||||
'form' => $form->createView(),
|
||||
'person' => $person,
|
||||
$entityStr => $entity,
|
||||
'element' => $element,
|
||||
]);
|
||||
}
|
||||
@@ -183,7 +201,7 @@ abstract class AbstractElementController extends Controller
|
||||
*/
|
||||
protected function _view(AbstractElement $element, $template)
|
||||
{
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::SHOW, $element);
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::SEE, $element);
|
||||
|
||||
return $this->render($template, [
|
||||
'element' => $element,
|
||||
@@ -199,10 +217,8 @@ abstract class AbstractElementController extends Controller
|
||||
|
||||
/**
|
||||
* Creates a form to delete a help request entity by id.
|
||||
*
|
||||
* @return \Symfony\Component\Form\Form The form
|
||||
*/
|
||||
private function createDeleteForm()
|
||||
private function createDeleteForm(): Form
|
||||
{
|
||||
return $this->createFormBuilder()
|
||||
->setMethod(Request::METHOD_DELETE)
|
||||
|
@@ -9,10 +9,11 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Controller;
|
||||
namespace Chill\BudgetBundle\Controller;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\Charge;
|
||||
use Chill\AMLI\BudgetBundle\Form\ChargeType;
|
||||
use Chill\BudgetBundle\Entity\Charge;
|
||||
use Chill\BudgetBundle\Form\ChargeType;
|
||||
use Chill\PersonBundle\Entity\Household\Household;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
@@ -32,7 +33,7 @@ class ChargeController extends AbstractElementController
|
||||
return $this->_delete(
|
||||
$charge,
|
||||
$request,
|
||||
'@ChillAMLIBudget/Charge/confirm_delete.html.twig',
|
||||
'@ChillBudget/Charge/confirm_delete.html.twig',
|
||||
'Charge deleted'
|
||||
);
|
||||
}
|
||||
@@ -50,7 +51,7 @@ class ChargeController extends AbstractElementController
|
||||
return $this->_edit(
|
||||
$charge,
|
||||
$request,
|
||||
'@ChillAMLIBudget/Charge/edit.html.twig',
|
||||
'@ChillBudget/Charge/edit.html.twig',
|
||||
'Charge updated'
|
||||
);
|
||||
}
|
||||
@@ -68,7 +69,25 @@ class ChargeController extends AbstractElementController
|
||||
return $this->_new(
|
||||
$person,
|
||||
$request,
|
||||
'@ChillAMLIBudget/Charge/new.html.twig',
|
||||
'@ChillBudget/Charge/new.html.twig',
|
||||
'Charge created'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route(
|
||||
* "{_locale}/budget/charge/by-household/{id}/new",
|
||||
* name="chill_budget_charge_household_new"
|
||||
* )
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function newHouseholdAction(Request $request, Household $household)
|
||||
{
|
||||
return $this->_new(
|
||||
$household,
|
||||
$request,
|
||||
'@ChillBudget/Charge/new.html.twig',
|
||||
'Charge created'
|
||||
);
|
||||
}
|
||||
@@ -83,7 +102,7 @@ class ChargeController extends AbstractElementController
|
||||
*/
|
||||
public function viewAction(Charge $charge)
|
||||
{
|
||||
return $this->_view($charge, '@ChillAMLIBudget/Charge/view.html.twig');
|
||||
return $this->_view($charge, '@ChillBudget/Charge/view.html.twig');
|
||||
}
|
||||
|
||||
protected function createNewElement()
|
||||
|
@@ -9,44 +9,33 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Controller;
|
||||
namespace Chill\BudgetBundle\Controller;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Calculator\CalculatorManager;
|
||||
use Chill\AMLI\BudgetBundle\Entity\Charge;
|
||||
use Chill\AMLI\BudgetBundle\Entity\Resource;
|
||||
use Chill\AMLI\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\BudgetBundle\Calculator\CalculatorManager;
|
||||
use Chill\BudgetBundle\Entity\Charge;
|
||||
use Chill\BudgetBundle\Entity\Resource;
|
||||
use Chill\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\PersonBundle\Entity\Household\Household;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use DateTime;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
use function array_merge;
|
||||
use function count;
|
||||
|
||||
class ElementController extends Controller
|
||||
class ElementController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* @var CalculatorManager
|
||||
*/
|
||||
protected $calculator;
|
||||
protected CalculatorManager $calculator;
|
||||
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
protected $chillMainLogger;
|
||||
protected LoggerInterface $chillMainLogger;
|
||||
|
||||
/**
|
||||
* @var EntityManagerInterface
|
||||
*/
|
||||
protected $em;
|
||||
protected EntityManagerInterface $em;
|
||||
|
||||
/**
|
||||
* @var TranslatorInterface
|
||||
*/
|
||||
protected $translator;
|
||||
protected TranslatorInterface $translator;
|
||||
|
||||
public function __construct(
|
||||
EntityManagerInterface $em,
|
||||
@@ -68,11 +57,12 @@ class ElementController extends Controller
|
||||
*/
|
||||
public function indexAction(Person $person)
|
||||
{
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::SHOW, $person);
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::SEE, $person);
|
||||
|
||||
$charges = $this->em
|
||||
->getRepository(Charge::class)
|
||||
->findByPerson($person);
|
||||
|
||||
$ressources = $this->em
|
||||
->getRepository(Resource::class)
|
||||
->findByPerson($person);
|
||||
@@ -81,10 +71,10 @@ class ElementController extends Controller
|
||||
|
||||
$actualCharges = $this->em
|
||||
->getRepository(Charge::class)
|
||||
->findByPersonAndDate($person, $now);
|
||||
->findByEntityAndDate($person, $now);
|
||||
$actualResources = $this->em
|
||||
->getRepository(Resource::class)
|
||||
->findByPersonAndDate($person, $now);
|
||||
->findByEntityAndDate($person, $now);
|
||||
|
||||
$elements = array_merge($actualCharges, $actualResources);
|
||||
|
||||
@@ -92,11 +82,79 @@ class ElementController extends Controller
|
||||
$results = $this->calculator->calculateDefault($elements);
|
||||
}
|
||||
|
||||
return $this->render('ChillAMLIBudgetBundle:Element:index.html.twig', [
|
||||
return $this->render('ChillBudgetBundle:Person:index.html.twig', [
|
||||
'person' => $person,
|
||||
'charges' => $charges,
|
||||
'resources' => $ressources,
|
||||
'results' => $results ?? [],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route(
|
||||
* "{_locale}/budget/elements/by-household/{id}",
|
||||
* name="chill_budget_elements_household_index"
|
||||
* )
|
||||
*/
|
||||
public function indexHouseholdAction(Household $household)
|
||||
{
|
||||
$this->denyAccessUnlessGranted(BudgetElementVoter::SEE, $household);
|
||||
|
||||
$charges = $this->em
|
||||
->getRepository(Charge::class)
|
||||
->findByHousehold($household);
|
||||
|
||||
$ressources = $this->em
|
||||
->getRepository(Resource::class)
|
||||
->findByHousehold($household);
|
||||
|
||||
$now = new DateTime('now');
|
||||
|
||||
$actualCharges = $this->em
|
||||
->getRepository(Charge::class)
|
||||
->findByEntityAndDate($household, $now);
|
||||
$actualResources = $this->em
|
||||
->getRepository(Resource::class)
|
||||
->findByEntityAndDate($household, $now);
|
||||
|
||||
$elements = array_merge($actualCharges, $actualResources);
|
||||
|
||||
if (count($elements) > 0) {
|
||||
$results = $this->calculator->calculateDefault($elements);
|
||||
}
|
||||
|
||||
// quick solution to calculate the sum, difference and amount from
|
||||
// controller. This should be done from the calculators
|
||||
// TODO replace this by calculators
|
||||
$wholeCharges = $actualCharges;
|
||||
$wholeResources = $actualResources;
|
||||
|
||||
foreach ($household->getCurrentPersons() as $person) {
|
||||
$wholeCharges = array_merge(
|
||||
$wholeCharges,
|
||||
$this->em
|
||||
->getRepository(Charge::class)
|
||||
->findByEntityAndDate($person, $now)
|
||||
);
|
||||
$wholeResources = array_merge(
|
||||
$wholeResources,
|
||||
$this->em
|
||||
->getRepository(Resource::class)
|
||||
->findByEntityAndDate($person, $now)
|
||||
);
|
||||
}
|
||||
|
||||
return $this->render('ChillBudgetBundle:Household:index.html.twig', [
|
||||
'household' => $household,
|
||||
'charges' => $charges,
|
||||
'resources' => $ressources,
|
||||
'wholeResources' => array_filter($wholeResources, static function (Resource $r) use ($now) {
|
||||
return $r->getStartDate() <= $now && ($r->getEndDate() === null || $r->getEndDate() >= $now);
|
||||
}),
|
||||
'wholeCharges' => array_filter($wholeCharges, static function (Charge $c) use ($now) {
|
||||
return $c->getStartDate() <= $now && ($c->getEndDate() === null || $c->getEndDate() >= $now);
|
||||
}),
|
||||
'results' => $results ?? [],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@@ -9,13 +9,15 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Controller;
|
||||
namespace Chill\BudgetBundle\Controller;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\Resource;
|
||||
use Chill\AMLI\BudgetBundle\Form\ResourceType;
|
||||
use Chill\BudgetBundle\Entity\Resource;
|
||||
use Chill\BudgetBundle\Form\ResourceType;
|
||||
use Chill\PersonBundle\Entity\Household\Household;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class ResourceController extends AbstractElementController
|
||||
{
|
||||
@@ -24,15 +26,13 @@ class ResourceController extends AbstractElementController
|
||||
* "{_locale}/budget/resource/{id}/delete",
|
||||
* name="chill_budget_resource_delete"
|
||||
* )
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function deleteAction(Request $request, Resource $resource)
|
||||
{
|
||||
return $this->_delete(
|
||||
$resource,
|
||||
$request,
|
||||
'@ChillAMLIBudget/Resource/confirm_delete.html.twig',
|
||||
'@ChillBudget/Resource/confirm_delete.html.twig',
|
||||
'Resource deleted'
|
||||
);
|
||||
}
|
||||
@@ -42,33 +42,49 @@ class ResourceController extends AbstractElementController
|
||||
* "{_locale}/budget/resource/{id}/edit",
|
||||
* name="chill_budget_resource_edit"
|
||||
* )
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function editAction(Request $request, Resource $resource)
|
||||
public function editAction(Request $request, Resource $resource): Response
|
||||
{
|
||||
return $this->_edit(
|
||||
$resource,
|
||||
$request,
|
||||
'@ChillAMLIBudget/Resource/edit.html.twig',
|
||||
'@ChillBudget/Resource/edit.html.twig',
|
||||
'Resource updated'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new budget element for a person.
|
||||
*
|
||||
* @Route(
|
||||
* "{_locale}/budget/resource/by-person/{id}/new",
|
||||
* name="chill_budget_resource_new"
|
||||
* )
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function newAction(Request $request, Person $person)
|
||||
public function newAction(Request $request, Person $person): Response
|
||||
{
|
||||
return $this->_new(
|
||||
$person,
|
||||
$request,
|
||||
'@ChillAMLIBudget/Resource/new.html.twig',
|
||||
'@ChillBudget/Resource/new.html.twig',
|
||||
'Resource created'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new budget element for a household.
|
||||
*
|
||||
* @Route(
|
||||
* "{_locale}/budget/resource/by-household/{id}/new",
|
||||
* name="chill_budget_resource_household_new"
|
||||
* )
|
||||
*/
|
||||
public function newHouseholdAction(Request $request, Household $household): Response
|
||||
{
|
||||
return $this->_new(
|
||||
$household,
|
||||
$request,
|
||||
'@ChillBudget/Resource/new.html.twig',
|
||||
'Resource created'
|
||||
);
|
||||
}
|
||||
@@ -78,12 +94,10 @@ class ResourceController extends AbstractElementController
|
||||
* "{_locale}/budget/resource/{id}/view",
|
||||
* name="chill_budget_resource_view"
|
||||
* )
|
||||
*
|
||||
* @return \Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function viewAction(Resource $resource)
|
||||
public function viewAction(Resource $resource): Response
|
||||
{
|
||||
return $this->_view($resource, '@ChillAMLIBudget/Resource/view.html.twig');
|
||||
return $this->_view($resource, '@ChillBudget/Resource/view.html.twig');
|
||||
}
|
||||
|
||||
protected function createNewElement()
|
||||
|
@@ -9,9 +9,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\DependencyInjection;
|
||||
namespace Chill\BudgetBundle\DependencyInjection;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
|
||||
@@ -23,11 +23,11 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
*
|
||||
* @see http://symfony.com/doc/current/cookbook/bundles/extension.html
|
||||
*/
|
||||
class ChillAMLIBudgetExtension extends Extension implements PrependExtensionInterface
|
||||
class ChillBudgetExtension extends Extension implements PrependExtensionInterface
|
||||
{
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$configuration = new Configuration();
|
||||
$configuration = $this->getConfiguration($configs, $container);
|
||||
$config = $this->processConfiguration($configuration, $configs);
|
||||
|
||||
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../config'));
|
||||
@@ -38,6 +38,7 @@ class ChillAMLIBudgetExtension extends Extension implements PrependExtensionInte
|
||||
$loader->load('services/templating.yaml');
|
||||
$loader->load('services/menu.yaml');
|
||||
$loader->load('services/calculator.yaml');
|
||||
$loader->load('services/services.yaml');
|
||||
|
||||
$this->storeConfig('resources', $config, $container);
|
||||
$this->storeConfig('charges', $config, $container);
|
||||
@@ -58,7 +59,7 @@ class ChillAMLIBudgetExtension extends Extension implements PrependExtensionInte
|
||||
$container->prependExtensionConfig('chill_main', [
|
||||
'routing' => [
|
||||
'resources' => [
|
||||
'@ChillAMLIBudgetBundle/config/routing.yaml',
|
||||
'@ChillBudgetBundle/config/routing.yaml',
|
||||
],
|
||||
],
|
||||
]);
|
||||
@@ -68,8 +69,8 @@ class ChillAMLIBudgetExtension extends Extension implements PrependExtensionInte
|
||||
{
|
||||
$container->prependExtensionConfig('security', [
|
||||
'role_hierarchy' => [
|
||||
BudgetElementVoter::UPDATE => [BudgetElementVoter::SHOW],
|
||||
BudgetElementVoter::CREATE => [BudgetElementVoter::SHOW],
|
||||
BudgetElementVoter::UPDATE => [BudgetElementVoter::SEE],
|
||||
BudgetElementVoter::CREATE => [BudgetElementVoter::SEE],
|
||||
],
|
||||
]);
|
||||
}
|
@@ -9,7 +9,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\DependencyInjection\Compiler;
|
||||
namespace Chill\BudgetBundle\DependencyInjection\Compiler;
|
||||
|
||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
@@ -19,7 +19,7 @@ class CalculatorCompilerPass implements CompilerPassInterface
|
||||
{
|
||||
public function process(ContainerBuilder $container)
|
||||
{
|
||||
$manager = $container->getDefinition('Chill\AMLI\BudgetBundle\Calculator\CalculatorManager');
|
||||
$manager = $container->getDefinition('Chill\BudgetBundle\Calculator\CalculatorManager');
|
||||
|
||||
foreach ($container->findTaggedServiceIds('chill_budget.calculator') as $id => $tags) {
|
||||
foreach ($tags as $tag) {
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\DependencyInjection;
|
||||
namespace Chill\BudgetBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
||||
@@ -23,14 +23,14 @@ class Configuration implements ConfigurationInterface
|
||||
{
|
||||
public function getConfigTreeBuilder()
|
||||
{
|
||||
$treeBuilder = new TreeBuilder('chill_amli_budget');
|
||||
$rootNode = $treeBuilder->getRootNode('chill_amli_budget');
|
||||
$treeBuilder = new TreeBuilder('chill_budget');
|
||||
$rootNode = $treeBuilder->getRootNode('chill_budget');
|
||||
|
||||
$rootNode
|
||||
->children()
|
||||
|
||||
// ressources
|
||||
->arrayNode('resources')->isRequired()->requiresAtLeastOneElement()
|
||||
->arrayNode('resources')->defaultValue([])
|
||||
->arrayPrototype()
|
||||
->children()
|
||||
->scalarNode('key')->isRequired()->cannotBeEmpty()
|
||||
@@ -52,7 +52,7 @@ class Configuration implements ConfigurationInterface
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->arrayNode('charges')->isRequired()->requiresAtLeastOneElement()
|
||||
->arrayNode('charges')->defaultValue([])
|
||||
->arrayPrototype()
|
||||
->children()
|
||||
->scalarNode('key')->isRequired()->cannotBeEmpty()
|
||||
|
@@ -9,13 +9,15 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Entity;
|
||||
namespace Chill\BudgetBundle\Entity;
|
||||
|
||||
use Chill\PersonBundle\Entity\Household\Household;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use DateTime;
|
||||
use DateTimeImmutable;
|
||||
use DateTimeInterface;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Ramsey\Uuid\Type\Decimal;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
/**
|
||||
@@ -26,8 +28,6 @@ use Symfony\Component\Validator\Constraints as Assert;
|
||||
abstract class AbstractElement
|
||||
{
|
||||
/**
|
||||
* @var decimal
|
||||
*
|
||||
* @ORM\Column(name="amount", type="decimal", precision=10, scale=2)
|
||||
* @Assert\GreaterThan(
|
||||
* value=0
|
||||
@@ -36,100 +36,80 @@ abstract class AbstractElement
|
||||
* message="The amount cannot be empty"
|
||||
* )
|
||||
*/
|
||||
private $amount;
|
||||
private string $amount;
|
||||
|
||||
/**
|
||||
* @var string|null
|
||||
*
|
||||
* @ORM\Column(name="comment", type="text", nullable=true)
|
||||
*/
|
||||
private $comment;
|
||||
private ?string $comment;
|
||||
|
||||
/**
|
||||
* @var DateTimeImmutable|null
|
||||
*
|
||||
* @ORM\Column(name="endDate", type="datetime_immutable", nullable=true)
|
||||
* @Assert\GreaterThan(
|
||||
* propertyPath="startDate",
|
||||
* message="The budget element's end date must be after the start date"
|
||||
* )
|
||||
*/
|
||||
private $endDate;
|
||||
private ?DateTimeImmutable $endDate;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(
|
||||
* targetEntity="\Chill\PersonBundle\Entity\Household\Household"
|
||||
* )
|
||||
*/
|
||||
private ?Household $household = null;
|
||||
|
||||
/**
|
||||
* @var Person
|
||||
* @ORM\ManyToOne(
|
||||
* targetEntity="\Chill\PersonBundle\Entity\Person"
|
||||
* )
|
||||
*/
|
||||
private $person;
|
||||
private ?Person $person = null;
|
||||
|
||||
/**
|
||||
* @var DateTimeImmutable
|
||||
*
|
||||
* @ORM\Column(name="startDate", type="datetime_immutable")
|
||||
* @Assert\Date
|
||||
*/
|
||||
private $startDate;
|
||||
private DateTimeImmutable $startDate;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @ORM\Column(name="type", type="string", length=255)
|
||||
*/
|
||||
private $type;
|
||||
private string $type;
|
||||
|
||||
/**
|
||||
* Get amount.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getAmount()
|
||||
/*Getters and Setters */
|
||||
|
||||
public function getAmount(): float
|
||||
{
|
||||
return (float) $this->amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get comment.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getComment()
|
||||
public function getComment(): ?string
|
||||
{
|
||||
return $this->comment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get endDate.
|
||||
*
|
||||
* @return DateTimeImmutable|null
|
||||
*/
|
||||
public function getEndDate()
|
||||
public function getEndDate(): ?DateTimeImmutable
|
||||
{
|
||||
return $this->endDate;
|
||||
}
|
||||
|
||||
public function getPerson(): Person
|
||||
public function getHousehold(): ?Household
|
||||
{
|
||||
return $this->household;
|
||||
}
|
||||
|
||||
public function getPerson(): ?Person
|
||||
{
|
||||
return $this->person;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get startDate.
|
||||
*
|
||||
* @return DateTimeImmutable
|
||||
*/
|
||||
public function getStartDate()
|
||||
public function getStartDate(): DateTimeImmutable
|
||||
{
|
||||
return $this->startDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get type.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getType()
|
||||
public function getType(): string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
@@ -143,40 +123,21 @@ abstract class AbstractElement
|
||||
|
||||
abstract public function isResource(): bool;
|
||||
|
||||
/**
|
||||
* Set amount.
|
||||
*
|
||||
* @param string $amount
|
||||
*
|
||||
* @return AbstractElement
|
||||
*/
|
||||
public function setAmount($amount)
|
||||
public function setAmount(string $amount): self
|
||||
{
|
||||
$this->amount = $amount;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set comment.
|
||||
*
|
||||
* @param string|null $comment
|
||||
*
|
||||
* @return AbstractElement
|
||||
*/
|
||||
public function setComment($comment = null)
|
||||
public function setComment(?string $comment = null): self
|
||||
{
|
||||
$this->comment = $comment;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set endDate.
|
||||
*
|
||||
* @return AbstractElement
|
||||
*/
|
||||
public function setEndDate(?DateTimeInterface $endDate = null)
|
||||
public function setEndDate(?DateTimeInterface $endDate = null): self
|
||||
{
|
||||
if ($endDate instanceof DateTime) {
|
||||
$this->endDate = DateTimeImmutable::createFromMutable($endDate);
|
||||
@@ -189,19 +150,21 @@ abstract class AbstractElement
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setPerson(Person $person)
|
||||
public function setHousehold(Household $household): self
|
||||
{
|
||||
$this->household = $household;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setPerson(Person $person): self
|
||||
{
|
||||
$this->person = $person;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set startDate.
|
||||
*
|
||||
* @return AbstractElement
|
||||
*/
|
||||
public function setStartDate(DateTimeInterface $startDate)
|
||||
public function setStartDate(DateTimeInterface $startDate): self
|
||||
{
|
||||
if ($startDate instanceof DateTime) {
|
||||
$this->startDate = DateTimeImmutable::createFromMutable($startDate);
|
||||
@@ -214,14 +177,7 @@ abstract class AbstractElement
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set type.
|
||||
*
|
||||
* @param string $type
|
||||
*
|
||||
* @return AbstractElement
|
||||
*/
|
||||
public function setType($type)
|
||||
public function setType(string $type): self
|
||||
{
|
||||
$this->type = $type;
|
||||
|
||||
|
@@ -9,8 +9,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Entity;
|
||||
namespace Chill\BudgetBundle\Entity;
|
||||
|
||||
use Chill\MainBundle\Entity\Center;
|
||||
use Chill\MainBundle\Entity\HasCenterInterface;
|
||||
use DateTimeImmutable;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
@@ -19,7 +20,7 @@ use Doctrine\ORM\Mapping as ORM;
|
||||
* Charge.
|
||||
*
|
||||
* @ORM\Table(name="chill_budget.charge")
|
||||
* @ORM\Entity(repositoryClass="Chill\AMLI\BudgetBundle\Repository\ChargeRepository")
|
||||
* @ORM\Entity(repositoryClass="Chill\BudgetBundle\Repository\ChargeRepository")
|
||||
*/
|
||||
class Charge extends AbstractElement implements HasCenterInterface
|
||||
{
|
||||
@@ -58,7 +59,7 @@ class Charge extends AbstractElement implements HasCenterInterface
|
||||
$this->setStartDate(new DateTimeImmutable('today'));
|
||||
}
|
||||
|
||||
public function getCenter(): \Chill\MainBundle\Entity\Center
|
||||
public function getCenter(): ?Center
|
||||
{
|
||||
return $this->getPerson()->getCenter();
|
||||
}
|
||||
|
@@ -9,8 +9,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Entity;
|
||||
namespace Chill\BudgetBundle\Entity;
|
||||
|
||||
use Chill\MainBundle\Entity\Center;
|
||||
use Chill\MainBundle\Entity\HasCenterInterface;
|
||||
use DateTimeImmutable;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
@@ -19,7 +20,7 @@ use Doctrine\ORM\Mapping as ORM;
|
||||
* Resource.
|
||||
*
|
||||
* @ORM\Table(name="chill_budget.resource")
|
||||
* @ORM\Entity(repositoryClass="Chill\AMLI\BudgetBundle\Repository\ResourceRepository")
|
||||
* @ORM\Entity(repositoryClass="Chill\BudgetBundle\Repository\ResourceRepository")
|
||||
*/
|
||||
class Resource extends AbstractElement implements HasCenterInterface
|
||||
{
|
||||
@@ -37,7 +38,7 @@ class Resource extends AbstractElement implements HasCenterInterface
|
||||
$this->setStartDate(new DateTimeImmutable('today'));
|
||||
}
|
||||
|
||||
public function getCenter(): \Chill\MainBundle\Entity\Center
|
||||
public function getCenter(): ?Center
|
||||
{
|
||||
return $this->getPerson()->getCenter();
|
||||
}
|
||||
|
@@ -9,10 +9,10 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Form;
|
||||
namespace Chill\BudgetBundle\Form;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Config\ConfigRepository;
|
||||
use Chill\AMLI\BudgetBundle\Entity\Charge;
|
||||
use Chill\BudgetBundle\Config\ConfigRepository;
|
||||
use Chill\BudgetBundle\Entity\Charge;
|
||||
use Chill\MainBundle\Form\Type\ChillDateType;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
@@ -45,6 +45,7 @@ class ChargeType extends AbstractType
|
||||
->add('type', ChoiceType::class, [
|
||||
'choices' => $this->getTypes(),
|
||||
'placeholder' => 'Choose a charge type',
|
||||
'attr' => ['class' => ' select2 '],
|
||||
])
|
||||
->add('amount', MoneyType::class)
|
||||
->add('comment', TextareaType::class, [
|
||||
@@ -96,7 +97,7 @@ class ChargeType extends AbstractType
|
||||
|
||||
public function getBlockPrefix()
|
||||
{
|
||||
return 'chill_amli_budgetbundle_charge';
|
||||
return 'chill_budgetbundle_charge';
|
||||
}
|
||||
|
||||
private function getTypes()
|
||||
|
@@ -9,10 +9,10 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Form;
|
||||
namespace Chill\BudgetBundle\Form;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Config\ConfigRepository;
|
||||
use Chill\AMLI\BudgetBundle\Entity\Resource;
|
||||
use Chill\BudgetBundle\Config\ConfigRepository;
|
||||
use Chill\BudgetBundle\Entity\Resource;
|
||||
use Chill\MainBundle\Form\Type\ChillDateType;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
@@ -45,6 +45,7 @@ class ResourceType extends AbstractType
|
||||
'choices' => $this->getTypes(),
|
||||
'placeholder' => 'Choose a resource type',
|
||||
'label' => 'Resource element type',
|
||||
'attr' => ['class' => ' select2 '],
|
||||
])
|
||||
->add('amount', MoneyType::class)
|
||||
->add('comment', TextareaType::class, [
|
||||
@@ -80,7 +81,7 @@ class ResourceType extends AbstractType
|
||||
|
||||
public function getBlockPrefix()
|
||||
{
|
||||
return 'chill_amli_budgetbundle_resource';
|
||||
return 'chill_budgetbundle_resource';
|
||||
}
|
||||
|
||||
private function getTypes()
|
||||
|
53
src/Bundle/ChillBudgetBundle/Menu/HouseholdMenuBuilder.php
Normal file
53
src/Bundle/ChillBudgetBundle/Menu/HouseholdMenuBuilder.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\BudgetBundle\Menu;
|
||||
|
||||
use Chill\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
|
||||
use Knp\Menu\MenuItem;
|
||||
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class HouseholdMenuBuilder implements LocalMenuBuilderInterface
|
||||
{
|
||||
protected AuthorizationCheckerInterface $authorizationChecker;
|
||||
|
||||
protected TranslatorInterface $translator;
|
||||
|
||||
public function __construct(
|
||||
AuthorizationCheckerInterface $authorizationChecker,
|
||||
TranslatorInterface $translator
|
||||
) {
|
||||
$this->authorizationChecker = $authorizationChecker;
|
||||
$this->translator = $translator;
|
||||
}
|
||||
|
||||
public function buildMenu($menuId, MenuItem $menu, array $parameters)
|
||||
{
|
||||
/** @var Household $household */
|
||||
$household = $parameters['household'];
|
||||
|
||||
// if ($this->authorizationChecker->isGranted(BudgetElementVoter::SHOW, $household)) {
|
||||
$menu->addChild($this->translator->trans('household.Budget'), [
|
||||
'route' => 'chill_budget_elements_household_index',
|
||||
'routeParameters' => [
|
||||
'id' => $household->getId(),
|
||||
], ])
|
||||
->setExtras(['order' => 19]);
|
||||
// }
|
||||
}
|
||||
|
||||
public static function getMenuIds(): array
|
||||
{
|
||||
return ['household'];
|
||||
}
|
||||
}
|
@@ -9,25 +9,19 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Menu;
|
||||
namespace Chill\BudgetBundle\Menu;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\BudgetBundle\Security\Authorization\BudgetElementVoter;
|
||||
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
|
||||
use Knp\Menu\MenuItem;
|
||||
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
|
||||
use Symfony\Component\Translation\TranslatorInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class UserMenuBuilder implements LocalMenuBuilderInterface
|
||||
class PersonMenuBuilder implements LocalMenuBuilderInterface
|
||||
{
|
||||
/**
|
||||
* @var AuthorizationCheckerInterface
|
||||
*/
|
||||
protected $authorizationChecker;
|
||||
protected AuthorizationCheckerInterface $authorizationChecker;
|
||||
|
||||
/**
|
||||
* @var TranslatorInterface
|
||||
*/
|
||||
protected $translator;
|
||||
protected TranslatorInterface $translator;
|
||||
|
||||
public function __construct(
|
||||
AuthorizationCheckerInterface $authorizationChecker,
|
||||
@@ -39,10 +33,10 @@ class UserMenuBuilder implements LocalMenuBuilderInterface
|
||||
|
||||
public function buildMenu($menuId, MenuItem $menu, array $parameters)
|
||||
{
|
||||
/** @var \Chill\PersonBundle\Entity\Person $person */
|
||||
/** @var Person $person */
|
||||
$person = $parameters['person'];
|
||||
|
||||
if ($this->authorizationChecker->isGranted(BudgetElementVoter::SHOW, $person)) {
|
||||
if ($this->authorizationChecker->isGranted(BudgetElementVoter::SEE, $person)) {
|
||||
$menu->addChild(
|
||||
$this->translator->trans('Budget'),
|
||||
[
|
||||
@@ -50,7 +44,7 @@ class UserMenuBuilder implements LocalMenuBuilderInterface
|
||||
'routeParameters' => ['id' => $person->getId()],
|
||||
]
|
||||
)
|
||||
->setExtra('order', 460);
|
||||
->setExtra('order', 59);
|
||||
}
|
||||
}
|
||||
|
@@ -9,10 +9,11 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Repository;
|
||||
namespace Chill\BudgetBundle\Repository;
|
||||
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use DateTime;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
|
||||
/**
|
||||
* ChargeRepository.
|
||||
@@ -20,13 +21,15 @@ use DateTime;
|
||||
* This class was generated by the Doctrine ORM. Add your own custom
|
||||
* repository methods below.
|
||||
*/
|
||||
class ChargeRepository extends \Doctrine\ORM\EntityRepository
|
||||
class ChargeRepository extends EntityRepository
|
||||
{
|
||||
public function findByPersonAndDate(Person $person, DateTime $date, $sort = null)
|
||||
public function findByEntityAndDate($entity, DateTime $date, $sort = null)
|
||||
{
|
||||
$qb = $this->createQueryBuilder('c');
|
||||
|
||||
$qb->where('c.person = :person')
|
||||
$entityStr = $entity instanceof Person ? 'person' : 'household';
|
||||
|
||||
$qb->where("c.{$entityStr} = :{$entityStr}")
|
||||
->andWhere('c.startDate < :date')
|
||||
->andWhere('c.startDate < :date OR c.startDate IS NULL');
|
||||
|
||||
@@ -35,7 +38,7 @@ class ChargeRepository extends \Doctrine\ORM\EntityRepository
|
||||
}
|
||||
|
||||
$qb->setParameters([
|
||||
'person' => $person,
|
||||
$entityStr => $entity,
|
||||
'date' => $date,
|
||||
]);
|
||||
|
||||
|
@@ -9,10 +9,11 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Repository;
|
||||
namespace Chill\BudgetBundle\Repository;
|
||||
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use DateTime;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
|
||||
/**
|
||||
* ResourceRepository.
|
||||
@@ -20,23 +21,28 @@ use DateTime;
|
||||
* This class was generated by the Doctrine ORM. Add your own custom
|
||||
* repository methods below.
|
||||
*/
|
||||
class ResourceRepository extends \Doctrine\ORM\EntityRepository
|
||||
class ResourceRepository extends EntityRepository
|
||||
{
|
||||
public function findByPersonAndDate(Person $person, DateTime $date, $sort = null)
|
||||
public function findByEntityAndDate($entity, DateTime $date, $sort = null)
|
||||
{
|
||||
$qb = $this->createQueryBuilder('c');
|
||||
|
||||
$qb->where('c.person = :person')
|
||||
->andWhere('c.startDate < :date')
|
||||
->andWhere('c.startDate < :date OR c.startDate IS NULL');
|
||||
$entityStr = $entity instanceof Person ? 'person' : 'household';
|
||||
|
||||
$qb->where("c.{$entityStr} = :{$entityStr}")
|
||||
// TODO: in controller, the budget and charges asked are also for future and actual
|
||||
//->andWhere('c.startDate < :date')
|
||||
// TODO: there is a misconception here, the end date must be lower or null. startDate are never null
|
||||
//->andWhere('c.startDate < :date OR c.startDate IS NULL');
|
||||
;
|
||||
|
||||
if (null !== $sort) {
|
||||
$qb->orderBy($sort);
|
||||
}
|
||||
|
||||
$qb->setParameters([
|
||||
'person' => $person,
|
||||
'date' => $date,
|
||||
$entityStr => $entity,
|
||||
//'date' => $date,
|
||||
]);
|
||||
|
||||
return $qb->getQuery()->getResult();
|
||||
|
@@ -0,0 +1,61 @@
|
||||
.subtitle {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
padding: 1rem;
|
||||
}
|
||||
.family-title {
|
||||
margin-bottom: 1rem !important;
|
||||
}
|
||||
.budget-table th {
|
||||
th {
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
.budget-table {
|
||||
th.charge {
|
||||
background-color: #e03851d7;
|
||||
}
|
||||
}
|
||||
.budget-table {
|
||||
th.resource {
|
||||
background-color: #6d9e63d8;
|
||||
}
|
||||
}
|
||||
.budget-table {
|
||||
th, td {
|
||||
padding: 10px;
|
||||
text-align: right;
|
||||
}
|
||||
td.column-wide {
|
||||
width: 20%;
|
||||
}
|
||||
td.column-small {
|
||||
width: 15%;
|
||||
&.right {
|
||||
align-items: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-budget {
|
||||
margin-right: 1rem !important;
|
||||
}
|
||||
|
||||
.el-type {
|
||||
font-weight: 600;
|
||||
text-align: left !important;
|
||||
}
|
||||
|
||||
.total {
|
||||
margin-top: 1rem;
|
||||
border-top: 1px dashed black;
|
||||
}
|
||||
|
||||
.accordion-item {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
button[aria-expanded="true"] > span.folded,
|
||||
button[aria-expanded="false"] > span.unfolded { display: none; }
|
||||
button[aria-expanded="false"] > span.folded,
|
||||
button[aria-expanded="true"] > span.unfolded { display: inline; }
|
@@ -0,0 +1 @@
|
||||
require('./chillbudget.scss');
|
@@ -0,0 +1,74 @@
|
||||
{% set entity = person is defined ? person : household %}
|
||||
|
||||
{% set actualResources = [] %}
|
||||
{% set futureResources = [] %}
|
||||
{% set pastResources = [] %}
|
||||
|
||||
{% for r in resources %}
|
||||
{% if r.startDate|date('U') <= 'now'|date('U') %}
|
||||
{% if r.endDate is null or r.endDate|date('U') >= 'now'|date('U') %}
|
||||
{% set actualResources = actualResources|merge([ r ]) %}
|
||||
{% else %}
|
||||
{% set pastResources = pastResources|merge([ r ]) %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% set futureResources = futureResources|merge([ r ]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% set actualCharges = [] %}
|
||||
{% set futureCharges = [] %}
|
||||
{% set pastCharges = [] %}
|
||||
|
||||
{% for c in charges %}
|
||||
{% if c.startDate|date('U') <= 'now'|date('U') %}
|
||||
{% if c.endDate is null or c.endDate|date('U') >= 'now'|date('U') %}
|
||||
{% set actualCharges = actualCharges|merge([ c ]) %}
|
||||
{% else %}
|
||||
{% set pastCharges = pastCharges|merge([ c ]) %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% set futureCharges = futureCharges|merge([ c ]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
<h3 class="subtitle">{{ 'Actual budget'|trans }}</h3>
|
||||
|
||||
{% if actualCharges|length > 0 or actualResources|length > 0 %}
|
||||
{% include 'ChillBudgetBundle:Budget:_current_budget.html.twig' with {
|
||||
'actualResources': actualResources,
|
||||
'actualCharges': actualCharges,
|
||||
'results': results,
|
||||
'entity': entity
|
||||
} %}
|
||||
{% else %}
|
||||
<div class="flex-table">
|
||||
<div class="item-bloc">
|
||||
<p><span class="chill-no-data-statement">{{ "There isn't any element recorded"|trans }}</span></p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if pastCharges|length > 0 or pastResources|length > 0 %}
|
||||
<h2 class="subtitle">{{ 'Past budget'|trans }}</h2>
|
||||
|
||||
{% include 'ChillBudgetBundle:Budget:_past_budget.html.twig' with {
|
||||
'pastCharges': pastCharges,
|
||||
'pastResources': pastResources,
|
||||
'entity': entity
|
||||
} %}
|
||||
{% endif %}
|
||||
|
||||
{% if futureCharges|length > 0 or futureResources|length > 0 %}
|
||||
<h2 class="subtitle">{{ 'Future budget'|trans }}</h2>
|
||||
|
||||
{% include 'ChillBudgetBundle:Budget:_future_budget.html.twig' with {
|
||||
'futureResources': futureResources,
|
||||
'futureCharges': futureCharges,
|
||||
'entity': entity
|
||||
} %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
@@ -0,0 +1,30 @@
|
||||
{% from 'ChillBudgetBundle:Budget:_macros.html.twig' import table_elements, table_results %}
|
||||
|
||||
{# <h2 class="subtitle">{{ 'Actual budget'|trans }}</h2> #}
|
||||
|
||||
<div class="flex-table">
|
||||
<h4 class="family-title">{{ 'Actual resources'|trans }}</h4>
|
||||
|
||||
{% if actualResources|length > 0 %}
|
||||
<div class="item-bloc">
|
||||
{{ table_elements(actualResources, 'resource') }}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="item-bloc">
|
||||
<span class="chill-no-data-statement">{{ 'No resources registered'|trans }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="flex-table">
|
||||
<h4 class="family-title">{{ 'Actual charges'|trans }}</h4>
|
||||
{% if actualCharges|length > 0 %}
|
||||
<div class="item-bloc">
|
||||
{{ table_elements(actualCharges, 'charge') }}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="item-bloc">
|
||||
<span class="chill-no-data-statement">{{ 'No charges registered'|trans }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
@@ -0,0 +1,51 @@
|
||||
{% from 'ChillBudgetBundle:Budget:_macros.html.twig' import table_elements, table_results %}
|
||||
|
||||
<div class="accordion" id="future_{{ entity.id }}">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="heading_future_{{ entity.id }}">
|
||||
<button
|
||||
class="accordion-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse_future_{{ entity.id }}"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapse_future_{{ entity.id }}">
|
||||
<span class="folded">{{ 'Show future budget'|trans }}</span>
|
||||
<span class="unfolded text-secondary">{{ 'Hide budget'|trans }}</span>
|
||||
</button>
|
||||
</h2>
|
||||
|
||||
<div id="collapse_future_{{ entity.id }}"
|
||||
class="accordion-collapse collapse"
|
||||
aria-labelledby="heading_future_{{ entity.id }}"
|
||||
data-bs-parent="#future_{{ entity.id }}">
|
||||
|
||||
<div class="flex-table">
|
||||
<h3 class="family-title">{{ 'Future resources'|trans }}</h3>
|
||||
|
||||
{% if futureResources|length > 0 %}
|
||||
<div class="item-bloc">
|
||||
{{ table_elements(futureResources, 'resource') }}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="item-bloc">
|
||||
<span class="chill-no-data-statement">{{ 'No future resources registered'|trans }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="flex-table">
|
||||
<h3 class="family-title">{{ 'Future charges'|trans }}</h3>
|
||||
|
||||
{% if futureCharges|length > 0 %}
|
||||
<div class="item-bloc">
|
||||
{{ table_elements(futureCharges, 'charge') }}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="item-bloc">
|
||||
<span class="chill-no-data-statement">{{ 'No future charges registered'|trans }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@@ -0,0 +1,97 @@
|
||||
{% macro table_elements(elements, family) %}
|
||||
<table class="budget-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="{{ family }} el-type">{{ 'Budget element type'|trans }}</th>
|
||||
<th class="{{ family }}">{{ 'Amount'|trans }}</th>
|
||||
<th class="{{ family }}">{{ 'Validity period'|trans }}</th>
|
||||
<th class="{{ family }}"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% set total = 0 %}
|
||||
{% for f in elements %}
|
||||
{% set total = total + f.amount %}
|
||||
<tr>
|
||||
<td class="column-wide el-type">
|
||||
<span class="badge-title">
|
||||
<span class="title_label title_label_{{ family }}"></span>
|
||||
<span class="title_action">{{ f.type|budget_element_type_display(family) }}<span>
|
||||
</span>
|
||||
</td>
|
||||
<td class="column-small">{{ f.amount|format_currency('EUR') }}</td>
|
||||
<td class="column-wide">
|
||||
{% if f.endDate is not null %}
|
||||
{{ f.startDate|format_date('short') ~ ' - ' ~ f.endDate|format_date('short') }}
|
||||
{% else %}
|
||||
{{ f.startDate|format_date('short') ~ ' - ...' }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="column-small">
|
||||
<ul class="record_actions">
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_SEE', f) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_' ~ family ~ '_view', { 'id': f.id } ) }}" class="btn btn-sm btn-show"></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_UPDATE', f) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_' ~ family ~'_edit', { 'id': f.id } ) }}" class="btn btn-sm btn-edit"></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_DELETE', f) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_' ~ family ~ '_delete', { 'id': f.id } ) }}" class="btn btn-sm btn-delete"></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr class="total">
|
||||
<td class="el-type">
|
||||
{{ 'Total'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ total|format_currency('EUR') }}
|
||||
</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro table_results(actualCharges, actualResources) %}
|
||||
|
||||
{% set totalCharges = 0 %}
|
||||
{% for c in actualCharges %}
|
||||
{% set totalCharges = totalCharges + c.amount %}
|
||||
{% endfor %}
|
||||
|
||||
{% set totalResources = 0 %}
|
||||
{% for r in actualResources %}
|
||||
{% set totalResources = totalResources + r.amount %}
|
||||
{% endfor %}
|
||||
|
||||
{% set result = (totalResources - totalCharges) %}
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th> </th>
|
||||
<th>{{ 'Budget calculator result'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ 'The balance'|trans }}</td>
|
||||
<td> </td>
|
||||
<td>
|
||||
{{ result|format_currency('EUR') }}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endmacro %}
|
@@ -0,0 +1,53 @@
|
||||
{% from 'ChillBudgetBundle:Budget:_macros.html.twig' import table_elements, table_results %}
|
||||
|
||||
<div class="accordion" id="past_{{ entity.id }}">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="heading_past_{{ entity.id }}">
|
||||
<button
|
||||
class="accordion-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse_past_{{ entity.id }}"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapse_past_{{ entity.id }}">
|
||||
<span class="folded">{{ 'Show past budget'|trans }}</span>
|
||||
<span class="unfolded text-secondary">{{ 'Hide budget'|trans }}</span>
|
||||
</button>
|
||||
</h2>
|
||||
|
||||
<div id="collapse_past_{{ entity.id }}"
|
||||
class="accordion-collapse collapse"
|
||||
aria-labelledby="heading_past_{{ entity.id }}"
|
||||
data-bs-parent="#past_{{ entity.id }}">
|
||||
|
||||
<div class="flex-table">
|
||||
<h3 class="family-title">{{ 'Past resources'|trans }}</h3>
|
||||
|
||||
{% if pastResources|length > 0 %}
|
||||
<div class="item-bloc">
|
||||
{{ table_elements(pastResources, 'resource') }}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="item-bloc">
|
||||
<span class="chill-no-data-statement">{{ 'No past resources registered'|trans }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="flex-table">
|
||||
<h3 class="family-title">{{ 'Past charges'|trans }}</h3>
|
||||
|
||||
{% if pastCharges|length > 0 %}
|
||||
<div class="item-bloc">
|
||||
{{ table_elements(pastCharges, 'charge') }}
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="item-bloc">
|
||||
<span class="chill-no-data-statement">{{ 'No past charges registered'|trans }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
@@ -1,18 +1,29 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% set confirm_question = 'Are you sure you want to remove the charge "%type%" associated to "%name%" ?'|trans({ '%name%' : person.firstname ~ ' ' ~ person.lastname, '%type%': element.type|budget_element_type_display('charge') } ) %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% set confirm_question = 'Are you sure you want to remove the charge "%type%" associated to household "%household%" ?'|trans({ '%household%' : household.id, '%type%': element.type|budget_element_type_display('charge') } ) %}
|
||||
{% endif %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% extends template %}
|
||||
|
||||
{% block title 'Remove resource'|trans %}
|
||||
{% block title 'Remove charge'|trans %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
|
||||
{{ include('ChillMainBundle:Util:confirmation_template.html.twig',
|
||||
{
|
||||
'title' : 'Remove charge'|trans,
|
||||
'confirm_question' : 'Are you sure you want to remove the charge "%type%" associated to "%name%" ?'|trans({ '%name%' : person.firstname ~ ' ' ~ person.lastname, '%type%': element.type|budget_element_type_display('charge') } ),
|
||||
'cancel_route' : 'chill_budget_elements_index',
|
||||
'cancel_parameters' : { 'id' : element.person.id },
|
||||
'confirm_question' : confirm_question,
|
||||
'cancel_route' : indexPage,
|
||||
'cancel_parameters' : { 'id': person is defined ? person.id : household.id },
|
||||
'form' : delete_form
|
||||
} ) }}
|
||||
|
||||
|
@@ -1,31 +1,43 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% endif %}
|
||||
|
||||
{% set title = 'Edit charge'|trans %}
|
||||
|
||||
{% extends template %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set title = 'Edit Charge for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% block title title %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{{ form_start(form) }}
|
||||
|
||||
{{ form_row(form.type) }}
|
||||
{{ form_row(form.amount) }}
|
||||
{{ form_row(form.help) }}
|
||||
{{ form_row(form.help) }}
|
||||
{{ form_row(form.comment) }}
|
||||
{{ form_row(form.startDate) }}
|
||||
{{ form_row(form.endDate) }}
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li class="cancel">
|
||||
<a href="{{ path("chill_budget_elements_index", { 'id': person.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
<a href="{{ path(indexPage, { 'id': person is defined ? person.id : household.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
{{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-create' }, 'label': 'Edit' } ) }}
|
||||
{{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-edit' }, 'label': 'Edit' } ) }}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
{{ form_end(form) }}
|
||||
{% endblock %}
|
||||
|
@@ -1,31 +1,42 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% endif %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set title = 'New Charge for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% set title = 'New charge'|trans %}
|
||||
|
||||
{% extends template %}
|
||||
{% block title title %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{{ form_start(form) }}
|
||||
|
||||
{{ form_row(form.type) }}
|
||||
{{ form_row(form.amount) }}
|
||||
{{ form_row(form.help) }}
|
||||
{{ form_row(form.help) }}
|
||||
{{ form_row(form.comment) }}
|
||||
{{ form_row(form.startDate) }}
|
||||
{{ form_row(form.endDate) }}
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li class="cancel">
|
||||
<a href="{{ path("chill_budget_elements_index", { 'id': person.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
<a href="{{ path(indexPage, { 'id': person is defined ? person.id : household.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
{{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-create' }, 'label': 'Create' } ) }}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
{{ form_end(form) }}
|
||||
{% endblock %}
|
||||
|
@@ -1,49 +1,68 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% endif %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% set title = 'Charge for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% set title = 'Charge' %}
|
||||
|
||||
{% extends template %}
|
||||
|
||||
{% block title title %}
|
||||
|
||||
{% block personcontent %}
|
||||
<h1>{{ title }}</h1>
|
||||
{% block content %}
|
||||
<div class="budget-show">
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<dl class="chill_view_data">
|
||||
<dt>{{ 'Type'|trans }}</dt>
|
||||
<dd>{{ element.type|budget_element_type_display('charge') }}</dd>
|
||||
|
||||
<dt>{{ 'Amount'|trans }}</dt>
|
||||
<dd>{{ element.amount|localizedcurrency('EUR') }}</dd>
|
||||
|
||||
<dt>{{ 'Validity period'|trans }}</dt>
|
||||
<dd>
|
||||
{% if element.endDate is not null %}
|
||||
{{ 'Valid since %startDate% until %endDate%'|trans( { '%startDate%': element.startDate|localizeddate('long', 'none'), '%endDate%': familyMember.endDate|localizeddate('long', 'none') } ) }}
|
||||
{% else %}
|
||||
{{ 'Valid since %startDate%'|trans( { '%startDate%': element.startDate|localizeddate('long', 'none') } ) }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
|
||||
<dt>{{ 'Comment'|trans }}</dt>
|
||||
<dd>
|
||||
{%- if element.comment is not empty -%}
|
||||
<blockquote class="chill-user-quote">
|
||||
{{ element.comment }}
|
||||
</blockquote>
|
||||
{%- else -%}
|
||||
<span class="chill-no-data-statement">{{ 'Not given'|trans }}</span>
|
||||
{%- endif -%}
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="flex-table">
|
||||
<div class="item-bloc">
|
||||
<div class="item-row">
|
||||
<h2 class="badge-title">
|
||||
<span class="title_label title_label_charge"></span>
|
||||
<span class="title_action">{{ element.type|budget_element_type_display('charge') }}</span>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="item-row separator">
|
||||
<dl class="chill_view_data">
|
||||
<dt>{{ 'Amount'|trans }}</dt>
|
||||
<dd>{{ element.amount|format_currency('EUR') }}</dd>
|
||||
<dt>{{ 'Validity period'|trans }}</dt>
|
||||
<dd>
|
||||
{% if element.endDate is not null %}
|
||||
{{ 'Valid since %startDate% until %endDate%'|trans( { '%startDate%': element.startDate|format_date('long'), '%endDate%': element.endDate|format_date('long') } ) }}
|
||||
{% else %}
|
||||
{{ 'Valid since %startDate%'|trans( { '%startDate%': element.startDate|format_date('long') } ) }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
<dt>{{ 'Comment'|trans }}</dt>
|
||||
<dd>
|
||||
{%- if element.comment is not empty -%}
|
||||
<blockquote class="chill-user-quote">
|
||||
{{ element.comment }}
|
||||
</blockquote>
|
||||
{%- else -%}
|
||||
<span class="chill-no-data-statement">{{ 'Not given'|trans }}</span>
|
||||
{%- endif -%}
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li class="cancel">
|
||||
<a href="{{ path("chill_budget_elements_index", { 'id': person.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
<a href="{{ path(indexPage, { 'id': person is defined ? person.id : household.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
{% if is_granted(constant('Chill\\AMLI\\BudgetBundle\\Security\\Authorization\\BudgetElementVoter::UPDATE'), element) %}
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_UPDATE', element) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_charge_edit', { 'id': element.id } ) }}" class="btn btn-edit">{{ 'Edit'|trans }}</a>
|
||||
</li>
|
||||
|
@@ -1,228 +0,0 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set title = 'Budget for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% block title title %}
|
||||
|
||||
|
||||
{% set actualResources = [] %}
|
||||
{% set futureResources = [] %}
|
||||
{% set pastResources = [] %}
|
||||
|
||||
{% for r in resources %}
|
||||
{% if r.startDate|date('U') <= 'now'|date('U') %}
|
||||
{% if r.endDate is null or r.endDate|date('U') >= 'now'|date('U') %}
|
||||
{% set actualResources = actualResources|merge([ r ]) %}
|
||||
{% else %}
|
||||
{% set pastResources = pastResources|merge([ r ]) %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% set futureResources = futureResources|merge([ r ]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% set actualCharges = [] %}
|
||||
{% set futureCharges = [] %}
|
||||
{% set pastCharges = [] %}
|
||||
|
||||
{% for c in charges %}
|
||||
{% if c.startDate|date('U') <= 'now'|date('U') %}
|
||||
{% if c.endDate is null or c.endDate|date('U') >= 'now'|date('U') %}
|
||||
{% set actualCharges = actualCharges|merge([ c ]) %}
|
||||
{% else %}
|
||||
{% set pastCharges = pastCharges|merge([ c ]) %}
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% set futureCharges = futureCharges|merge([ c ]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
{% macro table_elements(elements, family) %}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ 'Budget element type'|trans }}</th>
|
||||
<th>{{ 'Amount'|trans }}</th>
|
||||
<th>{{ 'Validity period'|trans }}</th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% set total = 0 %}
|
||||
{% for f in elements %}
|
||||
{% set total = total + f.amount %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ f.type|budget_element_type_display(family) }}
|
||||
</td>
|
||||
<td>{{ f.amount|format_currency('EUR') }}</td>
|
||||
<td>
|
||||
{% if f.endDate is not null %}
|
||||
{{ 'Valid since %startDate% until %endDate%'|trans( { '%startDate%': f.startDate|format_date('long'), '%endDate%': f.endDate|format_date('long') } ) }}
|
||||
{% else %}
|
||||
{{ 'Valid since %startDate%'|trans( { '%startDate%': f.startDate|format_date('long') } ) }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
<ul class="record_actions">
|
||||
{% if is_granted(constant('Chill\\AMLI\\BudgetBundle\\Security\\Authorization\\BudgetElementVoter::SHOW'), f) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_' ~ family ~ '_view', { 'id': f.id } ) }}" class="btn btn-show"></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if is_granted(constant('Chill\\AMLI\\BudgetBundle\\Security\\Authorization\\BudgetElementVoter::UPDATE'), f) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_' ~ family ~'_edit', { 'id': f.id } ) }}" class="btn btn-edit"></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if is_granted(constant('Chill\\AMLI\\BudgetBundle\\Security\\Authorization\\BudgetElementVoter::DELETE'), f) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_' ~ family ~ '_delete', { 'id': f.id } ) }}" class="btn btn-delete"></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td>
|
||||
{{ 'Total'|trans }}
|
||||
</td>
|
||||
<td>
|
||||
{{ total|format_currency('EUR') }}
|
||||
</td>
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro table_results(results) %}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>{{ 'Budget calculator result'|trans }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for result in results %}
|
||||
<tr>
|
||||
<td>{{ result.label }}</td>
|
||||
<td>
|
||||
{% if result.type == constant('CHILL\\AMLI\\BudgetBundle\\Calculator\\CalculatorResult::TYPE_CURRENCY') %}
|
||||
{{ result.result|format_currency('EUR') }}
|
||||
{% elseif result.type == constant('CHILL\\AMLI\\BudgetBundle\\Calculator\\CalculatorResult::TYPE_PERCENTAGE') %}
|
||||
{{ result.result|round(2, 'ceil') ~ '%' }}
|
||||
{% else %}
|
||||
{{ result.result|round(2, 'common') }}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endmacro %}
|
||||
|
||||
{% import _self as m %}
|
||||
|
||||
{% block personcontent %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<h2>{{ 'Actual budget'|trans }}</h2>
|
||||
|
||||
{% if resources|length == 0 and charges|length == 0 %}
|
||||
<p><span class="chill-no-data-statement">{{ "There isn't any element recorded"|trans }}</span></p>
|
||||
{% else %}
|
||||
<h3>{{ 'Actual resources'|trans }}</h3>
|
||||
|
||||
{% if actualResources|length > 0 %}
|
||||
{{ m.table_elements(actualResources, 'resource') }}
|
||||
{% else %}
|
||||
<span class="chill-no-data-statement">{{ 'No resources registered'|trans }}</span>
|
||||
{% endif %}
|
||||
|
||||
<h3>{{ 'Actual charges'|trans }}</h3>
|
||||
|
||||
{% if actualCharges|length > 0 %}
|
||||
{{ m.table_elements(actualCharges, 'charge') }}
|
||||
{% else %}
|
||||
<span class="chill-no-data-statement">{{ 'No charges registered'|trans }}</span>
|
||||
{% endif %}
|
||||
|
||||
{% if results|length > 0 %}
|
||||
<h2>{{ 'Budget calculator'|trans }}</h2>
|
||||
|
||||
{{ m.table_results(results) }}
|
||||
{% endif %}
|
||||
|
||||
{% if is_granted(constant('Chill\\AMLI\\BudgetBundle\\Security\\Authorization\\BudgetElementVoter::CREATE'), person) %}
|
||||
<ul class="record_actions">
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_resource_new', { 'id': person.id} ) }}">{{ 'Create new resource'|trans }}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_charge_new', { 'id': person.id} ) }}">{{ 'Create new charge'|trans }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% if pastCharges|length > 0 or pastResources|length > 0 %}
|
||||
<h2>{{ 'Past budget'|trans }}</h2>
|
||||
|
||||
<h3>{{ 'Past resources'|trans }}</h3>
|
||||
|
||||
{% if pastResources|length > 0 %}
|
||||
{{ m.table_elements(pastResources, 'resource') }}
|
||||
{% else %}
|
||||
<span class="chill-no-data-statement">{{ 'No past resources registered'|trans }}</span>
|
||||
{% endif %}
|
||||
|
||||
<h3>{{ 'Past charges'|trans }}</h3>
|
||||
|
||||
{% if pastCharges|length > 0 %}
|
||||
{{ m.table_elements(pastCharges, 'charge') }}
|
||||
{% else %}
|
||||
<span class="chill-no-data-statement">{{ 'No past charges registered'|trans }}</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if futureCharges|length > 0 or futureResources|length > 0 %}
|
||||
<h2>{{ 'Future budget'|trans }}</h2>
|
||||
|
||||
<h3>{{ 'Future resources'|trans }}</h3>
|
||||
|
||||
{% if futureResources|length > 0 %}
|
||||
{{ m.table_elements(futureResources, 'resource') }}
|
||||
{% else %}
|
||||
<span class="chill-no-data-statement">{{ 'No future resources registered'|trans }}</span>
|
||||
{% endif %}
|
||||
|
||||
<h3>{{ 'Future charges'|trans }}</h3>
|
||||
|
||||
{% if futureCharges|length > 0 %}
|
||||
{{ m.table_elements(futureCharges, 'charge') }}
|
||||
{% else %}
|
||||
<span class="chill-no-data-statement">{{ 'No future charges registered'|trans }}</span>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if (resources|length + charges|length) == 0 or futureCharges|length > 0 or futureResources|length > 0 or pastCharges|length > 0 or pastResources|length > 0 %}
|
||||
{% if is_granted(constant('Chill\\AMLI\\BudgetBundle\\Security\\Authorization\\BudgetElementVoter::CREATE'), person) %}
|
||||
<ul class="record_actions">
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_resource_new', { 'id': person.id} ) }}">{{ 'Create new resource'|trans }}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_charge_new', { 'id': person.id} ) }}">{{ 'Create new charge'|trans }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
@@ -0,0 +1,92 @@
|
||||
{% extends "@ChillPerson/Household/layout.html.twig" %}
|
||||
|
||||
{% from 'ChillBudgetBundle:Budget:_macros.html.twig' import table_elements, table_results %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set title = 'Budget for household %household%'|trans({ '%household%' : household.id } ) %}
|
||||
{% block title title %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{% include 'ChillBudgetBundle:Budget:_budget.html.twig' with {
|
||||
'resources': resources,
|
||||
'charges': charges,
|
||||
'household': household
|
||||
} %}
|
||||
|
||||
{#
|
||||
<div class="flex-table">
|
||||
<h3 class="family-title">{{ 'Budget calculator'|trans }}</h3>
|
||||
<div class="item-bloc">
|
||||
{{ table_results(wholeCharges, wholeResources) }}
|
||||
</div>
|
||||
</div>
|
||||
#}
|
||||
|
||||
{% if household.getCurrentMembers|length > 0 %}
|
||||
<h2 class="subtitle">{{ 'Current budget household members'|trans }}</h2>
|
||||
|
||||
{% for hm in household.getCurrentMembers %}
|
||||
{% set member = hm.person %}
|
||||
<div class="accordion" id="member_{{ member.id }}">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="heading_{{ member.id }}">
|
||||
<button
|
||||
class="accordion-button collapsed"
|
||||
type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapse_{{ member.id }}"
|
||||
aria-expanded="false"
|
||||
aria-controls="collapse_{{ member.id }}">
|
||||
<span class="folded">{{ 'Show budget of %name%'|trans({'%name%': member.firstName ~ " " ~ member.lastName }) }} ({{ 'budget.number of elements'|trans({ 'nb_items': member.getBudgetResources|length + member.getBudgetResources|length }) }})</span>
|
||||
<span class="unfolded text-secondary">{{ 'Hide budget of %name%'|trans({'%name%': member.firstName ~ " " ~ member.lastName }) }}</span>
|
||||
</button>
|
||||
</h2>
|
||||
|
||||
<div id="collapse_{{ member.id }}"
|
||||
class="accordion-collapse collapse"
|
||||
aria-labelledby="heading_{{ member.id }}"
|
||||
data-bs-parent="#nonCurrent">
|
||||
|
||||
{% include 'ChillBudgetBundle:Budget:_budget.html.twig' with {
|
||||
'resources': member.getBudgetResources,
|
||||
'charges': member.getBudgetCharges,
|
||||
'person': member
|
||||
} %}
|
||||
|
||||
<ul class="record_actions">
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_SEE', member) %}
|
||||
<li class="btn-budget">
|
||||
<a class="btn btn-edit" title={{ 'Edit budget'|trans }} href="{{ path('chill_budget_elements_index', { 'id': member.id } ) }}"></a>
|
||||
</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_CREATE', household) %}
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_resource_household_new', { 'id': household.id} ) }}">{{ 'Create new resource'|trans }}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_charge_household_new', { 'id': household.id} ) }}">{{ 'Create new charge'|trans }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
@@ -0,0 +1,46 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
|
||||
{% from 'ChillBudgetBundle:Budget:_macros.html.twig' import table_results %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set title = 'Budget for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% block title title %}
|
||||
|
||||
{% block js %}
|
||||
{{ encore_entry_script_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block css %}
|
||||
{{ encore_entry_link_tags('page_budget') }}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{% include 'ChillBudgetBundle:Budget:_budget.html.twig' with {
|
||||
'resources': resources,
|
||||
'charges': charges,
|
||||
'person': person
|
||||
} %}
|
||||
|
||||
<div class="flex-table">
|
||||
<h3 class="family-title">{{ 'Budget calculator'|trans }}</h2>
|
||||
<div class="item-bloc">
|
||||
{{ table_results(charges, resources) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_CREATE', person) %}
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_resource_new', { 'id': person.id} ) }}">{{ 'Create new resource'|trans }}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="btn btn-create" href="{{ path('chill_budget_charge_new', { 'id': person.id} ) }}">{{ 'Create new charge'|trans }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endblock %}
|
||||
|
@@ -1,18 +1,29 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% set confirm_question = 'Are you sure you want to remove the ressource "%type%" associated to "%name%" ?'|trans({ '%name%' : person.firstname ~ ' ' ~ person.lastname, '%type%': element.type|budget_element_type_display('resource') } ) %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% set confirm_question = 'Are you sure you want to remove the ressource "%type%" associated to household "%household%" ?'|trans({ '%household%' : household.id, '%type%': element.type|budget_element_type_display('resource') } ) %}
|
||||
{% endif %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% extends template %}
|
||||
|
||||
{% block title 'Remove resource'|trans %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
|
||||
{{ include('ChillMainBundle:Util:confirmation_template.html.twig',
|
||||
{
|
||||
'title' : 'Remove resource'|trans,
|
||||
'confirm_question' : 'Are you sure you want to remove the ressource "%type%" associated to "%name%" ?'|trans({ '%name%' : person.firstname ~ ' ' ~ person.lastname, '%type%': element.type|budget_element_type_display('resource') } ),
|
||||
'cancel_route' : 'chill_budget_elements_index',
|
||||
'cancel_parameters' : { 'id' : element.person.id },
|
||||
'confirm_question' : confirm_question,
|
||||
'cancel_route' : indexPage,
|
||||
'cancel_parameters' : { 'id': person is defined ? person.id : household.id },
|
||||
'form' : delete_form
|
||||
} ) }}
|
||||
|
||||
|
@@ -1,10 +1,24 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% set title = 'Edit resource for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% set title = 'Edit resource for household %household%'|trans({ '%household%' : household.id } ) %}
|
||||
{% endif %}
|
||||
|
||||
{% set title = 'Edit resource'|trans %}
|
||||
|
||||
{% extends template %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set title = 'Edit Resource for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% block title title %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{{ form_start(form) }}
|
||||
@@ -17,14 +31,14 @@
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li class="cancel">
|
||||
<a href="{{ path("chill_budget_elements_index", { 'id': person.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
<a href="{{ path(indexPage, { 'id': person is defined ? person.id : household.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
{{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-create' }, 'label': 'Edit' } ) }}
|
||||
{{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-edit' }, 'label': 'Edit' } ) }}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
{{ form_end(form) }}
|
||||
{% endblock %}
|
||||
|
@@ -1,10 +1,24 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% set title = 'New Resource for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% set title = 'New Resource for household %household%'|trans({ '%household%' : household.id } ) %}
|
||||
{% endif %}
|
||||
|
||||
{% set title = 'New resource'|trans %}
|
||||
|
||||
{% extends template %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set title = 'New Resource for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% block title title %}
|
||||
|
||||
{% block personcontent %}
|
||||
{% block content %}
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
{{ form_start(form) }}
|
||||
@@ -17,14 +31,14 @@
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li class="cancel">
|
||||
<a href="{{ path("chill_budget_elements_index", { 'id': person.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
<a href="{{ path(indexPage, { 'id': person is defined ? person.id : household.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
{{ form_widget(form.submit, { 'attr' : { 'class': 'btn btn-create' }, 'label': 'Create' } ) }}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
{{ form_end(form) }}
|
||||
{% endblock %}
|
||||
|
@@ -1,49 +1,68 @@
|
||||
{% extends "@ChillPerson/Person/layout.html.twig" %}
|
||||
{% if element.person is not null %}
|
||||
{% set template = '@ChillPerson/Person/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% else %}
|
||||
{% set template = '@ChillPerson/Household/layout.html.twig' %}
|
||||
{% set indexPage = 'chill_budget_elements_household_index' %}
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set household = element.household %}
|
||||
{% endif %}
|
||||
|
||||
{% set activeRouteKey = '' %}
|
||||
{% set person = element.person %}
|
||||
{% set title = 'Resource for %name%'|trans({ '%name%' : person.firstName ~ " " ~ person.lastName } ) %}
|
||||
{% set title = 'Resource' %}
|
||||
|
||||
{% extends template %}
|
||||
|
||||
{% block title title %}
|
||||
|
||||
{% block personcontent %}
|
||||
<h1>{{ title }}</h1>
|
||||
{% block content %}
|
||||
<div class="budget-show">
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<dl class="chill_view_data">
|
||||
<dt>{{ 'Type'|trans }}</dt>
|
||||
<dd>{{ element.type|budget_element_type_display('resource') }}</dd>
|
||||
|
||||
<dt>{{ 'Amount'|trans }}</dt>
|
||||
<dd>{{ element.amount|format_currency('EUR') }}</dd>
|
||||
|
||||
<dt>{{ 'Validity period'|trans }}</dt>
|
||||
<dd>
|
||||
{% if element.endDate is not null %}
|
||||
{{ 'Valid since %startDate% until %endDate%'|trans( { '%startDate%': element.startDate|format_date('long'), '%endDate%': familyMember.endDate|format_date('long') } ) }}
|
||||
{% else %}
|
||||
{{ 'Valid since %startDate%'|trans( { '%startDate%': element.startDate|format_date('long') } ) }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
|
||||
<dt>{{ 'Comment'|trans }}</dt>
|
||||
<dd>
|
||||
{%- if element.comment is not empty -%}
|
||||
<blockquote class="chill-user-quote">
|
||||
{{ element.comment }}
|
||||
</blockquote>
|
||||
{%- else -%}
|
||||
<span class="chill-no-data-statement">{{ 'Not given'|trans }}</span>
|
||||
{%- endif -%}
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="flex-table">
|
||||
<div class="item-bloc">
|
||||
<div class="item-row">
|
||||
<h2 class="badge-title">
|
||||
<span class="title_label title_label_resource"></span>
|
||||
<span class="title_action title_action">{{ element.type|budget_element_type_display('resource') }}</span>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="item-row separator">
|
||||
<dl class="chill_view_data">
|
||||
<dt class="inline">{{ 'Amount'|trans }}</dt>
|
||||
<dd>{{ element.amount|format_currency('EUR') }}</dd>
|
||||
<dt class="inline">{{ 'Validity period'|trans }}</dt>
|
||||
<dd>
|
||||
{% if element.endDate is not null %}
|
||||
{{ 'Valid since %startDate% until %endDate%'|trans( { '%startDate%': element.startDate|format_date('long'), '%endDate%': element.endDate|format_date('long') } ) }}
|
||||
{% else %}
|
||||
{{ 'Valid since %startDate%'|trans( { '%startDate%': element.startDate|format_date('long') } ) }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
<dt class="inline">{{ 'Comment'|trans }}</dt>
|
||||
<dd>
|
||||
{%- if element.comment is not empty -%}
|
||||
<blockquote class="chill-user-quote">
|
||||
{{ element.comment }}
|
||||
</blockquote>
|
||||
{%- else -%}
|
||||
<span class="chill-no-data-statement">{{ 'Not given'|trans }}</span>
|
||||
{%- endif -%}
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul class="record_actions sticky-form-buttons">
|
||||
<li class="cancel">
|
||||
<a href="{{ path("chill_budget_elements_index", { 'id': person.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
<a href="{{ path(indexPage, { 'id': person is defined ? person.id : household.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the list'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
{% if is_granted(constant('Chill\\AMLI\\BudgetBundle\\Security\\Authorization\\BudgetElementVoter::UPDATE'), element) %}
|
||||
{% if is_granted('CHILL_BUDGET_ELEMENT_UPDATE', element) %}
|
||||
<li>
|
||||
<a href="{{ path('chill_budget_resource_edit', { 'id': element.id } ) }}" class="btn btn-edit">{{ 'Edit'|trans }}</a>
|
||||
</li>
|
||||
|
@@ -9,15 +9,16 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Security\Authorization;
|
||||
namespace Chill\BudgetBundle\Security\Authorization;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\AbstractElement;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\BudgetBundle\Entity\AbstractElement;
|
||||
use Chill\MainBundle\Security\Authorization\AbstractChillVoter;
|
||||
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;
|
||||
use Chill\MainBundle\Security\Authorization\VoterHelperFactoryInterface;
|
||||
use Chill\MainBundle\Security\Authorization\VoterHelperInterface;
|
||||
use Chill\MainBundle\Security\ProvideRoleHierarchyInterface;
|
||||
use Chill\PersonBundle\Entity\Household\Household;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Symfony\Component\Security\Core\Role\Role;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
|
||||
use function in_array;
|
||||
|
||||
@@ -30,22 +31,24 @@ class BudgetElementVoter extends AbstractChillVoter implements ProvideRoleHierar
|
||||
public const ROLES = [
|
||||
self::CREATE,
|
||||
self::DELETE,
|
||||
self::SHOW,
|
||||
self::SEE,
|
||||
self::UPDATE,
|
||||
];
|
||||
|
||||
public const SHOW = 'CHILL_BUDGET_ELEMENT_SHOW';
|
||||
public const SEE = 'CHILL_BUDGET_ELEMENT_SEE';
|
||||
|
||||
public const UPDATE = 'CHILL_BUDGET_ELEMENT_UPDATE';
|
||||
|
||||
/**
|
||||
* @var AuthorizationHelper
|
||||
*/
|
||||
protected $authorizationHelper;
|
||||
protected VoterHelperInterface $voter;
|
||||
|
||||
public function __construct(AuthorizationHelper $authorizationHelper)
|
||||
public function __construct(VoterHelperFactoryInterface $voterFactory)
|
||||
{
|
||||
$this->authorizationHelper = $authorizationHelper;
|
||||
$this->voter = $voterFactory
|
||||
->generate(self::class)
|
||||
->addCheckFor(AbstractElement::class, self::ROLES)
|
||||
->addCheckFor(Person::class, [self::CREATE, self::SEE])
|
||||
->addCheckFor(Household::class, [self::CREATE, self::SEE])
|
||||
->build();
|
||||
}
|
||||
|
||||
public function getRoles(): array
|
||||
@@ -66,18 +69,11 @@ class BudgetElementVoter extends AbstractChillVoter implements ProvideRoleHierar
|
||||
protected function supports($attribute, $subject)
|
||||
{
|
||||
return (in_array($attribute, self::ROLES, true) && $subject instanceof AbstractElement)
|
||||
|| ($subject instanceof Person && in_array($attribute, [self::SHOW, self::CREATE], true));
|
||||
|| (($subject instanceof Person || $subject instanceof Household) && in_array($attribute, [self::SEE, self::CREATE], true));
|
||||
}
|
||||
|
||||
protected function voteOnAttribute($attribute, $subject, \Symfony\Component\Security\Core\Authentication\Token\TokenInterface $token)
|
||||
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
|
||||
{
|
||||
$user = $token->getUser();
|
||||
|
||||
if (false === $user instanceof User) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->authorizationHelper
|
||||
->userHasAccess($user, $subject, new Role($attribute));
|
||||
return $this->voter->voteOnAttribute($attribute, $subject, $token);
|
||||
}
|
||||
}
|
||||
|
168
src/Bundle/ChillBudgetBundle/Service/Summary/SummaryBudget.php
Normal file
168
src/Bundle/ChillBudgetBundle/Service/Summary/SummaryBudget.php
Normal file
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\BudgetBundle\Service\Summary;
|
||||
|
||||
use Chill\BudgetBundle\Config\ConfigRepository;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use Chill\PersonBundle\Entity\Household\Household;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\Query\ResultSetMapping;
|
||||
use LogicException;
|
||||
use function count;
|
||||
|
||||
/**
|
||||
* Helps to find a summary of the budget: the sum of resources and charges.
|
||||
*/
|
||||
class SummaryBudget implements SummaryBudgetInterface
|
||||
{
|
||||
private const QUERY_CHARGE_BY_HOUSEHOLD = 'select SUM(amount) AS sum, string_agg(comment, \'|\') AS comment, type FROM chill_budget.charge WHERE (person_id IN (_ids_) OR household_id = ?) AND NOW() BETWEEN startdate AND COALESCE(enddate, \'infinity\'::timestamp) GROUP BY type';
|
||||
|
||||
private const QUERY_CHARGE_BY_PERSON = 'select SUM(amount) AS sum, string_agg(comment, \'|\') AS comment, type FROM chill_budget.charge WHERE person_id = ? AND NOW() BETWEEN startdate AND COALESCE(enddate, \'infinity\'::timestamp) GROUP BY type';
|
||||
|
||||
private const QUERY_RESOURCE_BY_HOUSEHOLD = 'select SUM(amount) AS sum, string_agg(comment, \'|\') AS comment, type FROM chill_budget.resource WHERE (person_id IN (_ids_) OR household_id = ?) AND NOW() BETWEEN startdate AND COALESCE(enddate, \'infinity\'::timestamp) GROUP BY type';
|
||||
|
||||
private const QUERY_RESOURCE_BY_PERSON = 'select SUM(amount) AS sum, string_agg(comment, \'|\') AS comment, type FROM chill_budget.resource WHERE person_id = ? AND NOW() BETWEEN startdate AND COALESCE(enddate, \'infinity\'::timestamp) GROUP BY type';
|
||||
|
||||
private array $chargeLabels;
|
||||
|
||||
private ConfigRepository $configRepository;
|
||||
|
||||
private EntityManagerInterface $em;
|
||||
|
||||
private array $resourcesLabels;
|
||||
|
||||
private TranslatableStringHelperInterface $translatableStringHelper;
|
||||
|
||||
public function __construct(EntityManagerInterface $em, ConfigRepository $configRepository, TranslatableStringHelperInterface $translatableStringHelper)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->configRepository = $configRepository;
|
||||
$this->chargeLabels = $configRepository->getChargesLabels();
|
||||
$this->resourcesLabels = $configRepository->getResourcesLabels();
|
||||
$this->translatableStringHelper = $translatableStringHelper;
|
||||
}
|
||||
|
||||
public function getSummaryForHousehold(?Household $household): array
|
||||
{
|
||||
if (null === $household) {
|
||||
return [
|
||||
'resources' => $this->getEmptyResourceArray(),
|
||||
'charges' => $this->getEmptyChargeArray(),
|
||||
];
|
||||
}
|
||||
|
||||
$personIds = $household->getCurrentPersons()->map(static function (Person $p) { return $p->getId(); });
|
||||
$ids = implode(', ', array_fill(0, count($personIds), '?'));
|
||||
|
||||
$parameters = [...$personIds, $household->getId()];
|
||||
|
||||
$rsm = $this->buildRsm();
|
||||
|
||||
$resources = $this->em->createNativeQuery(strtr(self::QUERY_RESOURCE_BY_HOUSEHOLD, ['_ids_' => $ids]), $rsm)
|
||||
->setParameters($parameters)
|
||||
->getResult();
|
||||
$charges = $this->em->createNativeQuery(strtr(self::QUERY_CHARGE_BY_HOUSEHOLD, ['_ids_' => $ids]), $rsm)
|
||||
->setParameters($parameters)
|
||||
->getResult();
|
||||
|
||||
return [
|
||||
'resources' => array_merge($this->getEmptyResourceArray(), $this->rowToArray($resources, 'resource')),
|
||||
'charges' => array_merge($this->getEmptyChargeArray(), $this->rowToArray($charges, 'charge')),
|
||||
];
|
||||
}
|
||||
|
||||
public function getSummaryForPerson(?Person $person): array
|
||||
{
|
||||
if (null === $person) {
|
||||
return [
|
||||
'resources' => $this->getEmptyResourceArray(),
|
||||
'charges' => $this->getEmptyChargeArray(),
|
||||
];
|
||||
}
|
||||
|
||||
$rsm = $this->buildRsm();
|
||||
|
||||
$resources = $this->em->createNativeQuery(self::QUERY_RESOURCE_BY_PERSON, $rsm)
|
||||
->setParameters([$person->getId()])
|
||||
->getResult();
|
||||
$charges = $this->em->createNativeQuery(self::QUERY_CHARGE_BY_PERSON, $rsm)
|
||||
->setParameters([$person->getId()])
|
||||
->getResult();
|
||||
|
||||
return [
|
||||
'resources' => array_merge($this->getEmptyResourceArray(), $this->rowToArray($resources, 'resource')),
|
||||
'charges' => array_merge($this->getEmptyChargeArray(), $this->rowToArray($charges, 'charge')),
|
||||
];
|
||||
}
|
||||
|
||||
private function buildRsm(): ResultSetMapping
|
||||
{
|
||||
$rsm = new ResultSetMapping();
|
||||
$rsm
|
||||
->addScalarResult('sum', 'sum')
|
||||
->addScalarResult('type', 'type')
|
||||
->addScalarResult('comment', 'comment');
|
||||
|
||||
return $rsm;
|
||||
}
|
||||
|
||||
private function getEmptyChargeArray(): array
|
||||
{
|
||||
$keys = $this->configRepository->getChargesKeys();
|
||||
$labels = $this->chargeLabels;
|
||||
|
||||
return array_combine($keys, array_map(function ($i) use ($labels) {
|
||||
return ['sum' => 0.0, 'label' => $this->translatableStringHelper->localize($labels[$i]), 'comment' => ''];
|
||||
}, $keys));
|
||||
}
|
||||
|
||||
private function getEmptyResourceArray(): array
|
||||
{
|
||||
$keys = $this->configRepository->getResourcesKeys();
|
||||
$labels = $this->resourcesLabels;
|
||||
|
||||
return array_combine($keys, array_map(function ($i) use ($labels) {
|
||||
return ['sum' => 0.0, 'label' => $this->translatableStringHelper->localize($labels[$i]), 'comment' => ''];
|
||||
}, $keys));
|
||||
}
|
||||
|
||||
private function rowToArray(array $rows, string $kind): array
|
||||
{
|
||||
switch ($kind) {
|
||||
case 'charge':
|
||||
$label = $this->chargeLabels;
|
||||
|
||||
break;
|
||||
|
||||
case 'resource':
|
||||
$label = $this->resourcesLabels;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new LogicException();
|
||||
}
|
||||
|
||||
$result = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$result[$row['type']] = [
|
||||
'sum' => (float) $row['sum'],
|
||||
'label' => $this->translatableStringHelper->localize($label[$row['type']]),
|
||||
'comment' => (string) $row['comment'],
|
||||
];
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Chill is a software for social workers
|
||||
*
|
||||
* For the full copyright and license information, please view
|
||||
* the LICENSE file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\BudgetBundle\Service\Summary;
|
||||
|
||||
use Chill\PersonBundle\Entity\Household\Household;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
|
||||
/**
|
||||
* Helps to find a summary of the budget: the sum of resources and charges.
|
||||
*/
|
||||
interface SummaryBudgetInterface
|
||||
{
|
||||
public function getSummaryForHousehold(?Household $household): array;
|
||||
|
||||
public function getSummaryForPerson(?Person $person): array;
|
||||
}
|
@@ -9,9 +9,9 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Templating;
|
||||
namespace Chill\BudgetBundle\Templating;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Config\ConfigRepository;
|
||||
use Chill\BudgetBundle\Config\ConfigRepository;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelper;
|
||||
use Twig\Extension\AbstractExtension;
|
||||
use Twig\TwigFilter;
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Chill\AMLI\BudgetBundle\Tests\Controller;
|
||||
namespace Chill\BudgetBundle\Tests\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||
|
||||
|
9
src/Bundle/ChillBudgetBundle/chill.webpack.config.js
Normal file
9
src/Bundle/ChillBudgetBundle/chill.webpack.config.js
Normal file
@@ -0,0 +1,9 @@
|
||||
// this file loads all assets from the Chill budget bundle
|
||||
module.exports = function(encore, entries)
|
||||
{
|
||||
encore.addAliases({
|
||||
ChillBudgetAssets: __dirname + '/Resources/public'
|
||||
});
|
||||
|
||||
encore.addEntry('page_budget', __dirname + '/Resources/public/page/index.js');
|
||||
};
|
@@ -6,7 +6,7 @@
|
||||
"keywords" : ["chill", "social work"],
|
||||
"homepage" : "https://framagit.org/Chill-project/BudgetBundle",
|
||||
"autoload": {
|
||||
"psr-4": { "Chill\\AMLI\\BudgetBundle\\": "" }
|
||||
"psr-4": { "Chill\\BudgetBundle\\": "" }
|
||||
},
|
||||
"autoload-dev": {
|
||||
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
|
||||
|
@@ -1,3 +1,3 @@
|
||||
chill_amli_budget_controllers:
|
||||
resource: "@ChillAMLIBudgetBundle/Controller"
|
||||
chill_budget_controllers:
|
||||
resource: "@ChillBudgetBundle/Controller"
|
||||
type: annotation
|
||||
|
@@ -1,2 +1,2 @@
|
||||
services:
|
||||
Chill\AMLI\BudgetBundle\Calculator\CalculatorManager: ~
|
||||
Chill\BudgetBundle\Calculator\CalculatorManager: ~
|
||||
|
@@ -1,5 +1,5 @@
|
||||
services:
|
||||
Chill\AMLI\BudgetBundle\Config\ConfigRepository:
|
||||
Chill\BudgetBundle\Config\ConfigRepository:
|
||||
arguments:
|
||||
$resources: '%chill_budget.resources%'
|
||||
$charges: '%chill_budget.charges%'
|
||||
|
@@ -1,5 +1,5 @@
|
||||
services:
|
||||
Chill\AMLI\BudgetBundle\Controller\:
|
||||
Chill\BudgetBundle\Controller\:
|
||||
autowire: true
|
||||
resource: '../../Controller'
|
||||
tags: ['controller.service_arguments']
|
||||
|
@@ -1,14 +1,14 @@
|
||||
services:
|
||||
Chill\AMLI\BudgetBundle\Form\ResourceType:
|
||||
Chill\BudgetBundle\Form\ResourceType:
|
||||
arguments:
|
||||
$configRepository: '@Chill\AMLI\BudgetBundle\Config\ConfigRepository'
|
||||
$configRepository: '@Chill\BudgetBundle\Config\ConfigRepository'
|
||||
$translatableStringHelper: '@Chill\MainBundle\Templating\TranslatableStringHelper'
|
||||
tags:
|
||||
- { name: 'form.type' }
|
||||
|
||||
Chill\AMLI\BudgetBundle\Form\ChargeType:
|
||||
|
||||
Chill\BudgetBundle\Form\ChargeType:
|
||||
arguments:
|
||||
$configRepository: '@Chill\AMLI\BudgetBundle\Config\ConfigRepository'
|
||||
$configRepository: '@Chill\BudgetBundle\Config\ConfigRepository'
|
||||
$translatableStringHelper: '@Chill\MainBundle\Templating\TranslatableStringHelper'
|
||||
tags:
|
||||
- { name: 'form.type' }
|
||||
|
@@ -1,7 +1,8 @@
|
||||
services:
|
||||
Chill\AMLI\BudgetBundle\Menu\UserMenuBuilder:
|
||||
arguments:
|
||||
$authorizationChecker: '@Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface'
|
||||
$translator: '@Symfony\Component\Translation\TranslatorInterface'
|
||||
tags:
|
||||
- { name: 'chill.menu_builder' }
|
||||
Chill\BudgetBundle\Menu\PersonMenuBuilder:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
|
||||
Chill\BudgetBundle\Menu\HouseholdMenuBuilder:
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
|
@@ -1,7 +1,6 @@
|
||||
services:
|
||||
Chill\AMLI\BudgetBundle\Security\Authorization\BudgetElementVoter:
|
||||
arguments:
|
||||
$authorizationHelper: '@Chill\MainBundle\Security\Authorization\AuthorizationHelper'
|
||||
Chill\BudgetBundle\Security\Authorization\BudgetElementVoter:
|
||||
autowire: true
|
||||
tags:
|
||||
- { name: chill.role }
|
||||
- { name: security.voter }
|
||||
|
@@ -0,0 +1,6 @@
|
||||
services:
|
||||
Chill\BudgetBundle\Service\:
|
||||
resource: './../Service'
|
||||
autowire: true
|
||||
autoconfigure: true
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user