Compare commits

...

512 Commits

Author SHA1 Message Date
5774c8fbb6 deps: force doctrine/orm on 2.13.5 2022-12-30 00:56:42 +01:00
b41cd1429c deps: restrict doctrine/orm below 2.14 2022-12-30 00:52:39 +01:00
a1b36107c0 Deps: prevent upgrading to new version of doctrine/orm 2022-12-30 00:51:26 +01:00
bbd2599e7e Fixed: [cron] store the last store of executed tasks correctly 2022-12-27 00:09:45 +01:00
5aa59aa0ff Deploy: upgrade chill bundles and adapt skeleton 2022-12-24 15:40:17 +01:00
351df930a1 DX: Fix CS 2022-12-23 13:36:32 +01:00
c8127a1d9d Fixed: ensure to execute Refresh Address To Geographical Unit Cronjob even during the day 2022-12-23 13:36:23 +01:00
f12f640cb4 Fixed: use correct comparison of body in makeFetch 2022-12-23 11:32:31 +01:00
4da9b6587d DX: remove console comment in file Person.vue 2022-12-23 11:30:40 +01:00
0fec753118 Merge branch 'cire16' into 'master'
Cire issue #16 : fix some stuffs for staging cire instance

See merge request Chill-Projet/chill-bundles!467
2022-12-22 18:51:33 +00:00
4d3d9db1b3 Fixed: Fix map center on opening or editing address 2022-12-22 19:29:56 +01:00
ce17f5f5c0 Fixed: [vue][add-address] fix map center when editing existing address (corrections post review)
52512e45fc (note_1205935758)
2022-12-22 11:31:44 +01:00
6a14c2b9b3 Fixed: [vue][add-address] fix map center when editing existing address
https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/674
2022-12-22 11:31:27 +01:00
ad94c7bcb7 DX: Fix CS and type hinting 2022-12-22 11:22:49 +01:00
3ca2811494 Feature: set parameters for add_address as global
The parameter `window.addaddress` is now global and can be reached to all page. This ensure backward compatibility.
2022-12-22 11:22:24 +01:00
1bc7221315 Feature: Set defaults values for add_address configuration
The default values were not set at the root of the array config. This create a default value to the array config
2022-12-22 11:21:05 +01:00
7a1cc9b076 Merge remote-tracking branch 'origin/master' into cire16 2022-12-22 10:22:58 +01:00
f7fa9c31f3 Merge branch '29-person-modal-on-the-fly-add-center' into 'master'
Resolve "La modale "on the fly" pour créer une personne ne fonctionne pas: il manque le centre"

Closes #29

See merge request Chill-Projet/chill-bundles!468
2022-12-21 16:34:52 +00:00
fa237bf27b Fix: missing translation of validation of center 2022-12-21 17:27:15 +01:00
64e65d08fe Fix: [center denormalizer] do not throw an error if deserializing a null center 2022-12-21 17:27:14 +01:00
1f58acd871 Feature: [person][creation] Add center field to OnTheFly/Person 2022-12-21 17:27:11 +01:00
b06a76784a Feature: [person][creation] api for listing availables centers for person creation 2022-12-21 17:25:23 +01:00
1585a73974 DX: [authorization helper] Create an authorization helper with current user already available
See https://gitlab.com/Chill-Projet/chill-bundles/-/issues/14
2022-12-21 17:25:22 +01:00
ba261ddeb9 Fixed: show list of workflow, event if some accompanying course document associated to a workflow are deleted 2022-12-14 13:52:37 +01:00
58ede06dfe Fixed: show list of workflow, event if some social action associated to a workflow are deleted 2022-12-14 13:46:31 +01:00
2dec6a017d Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2022-12-13 14:43:03 +01:00
fb42cb1baf Merge branch '25-bug-composition' 2022-12-13 14:42:10 +01:00
ae1df1f47a Fixed: [zone admin] fix edit link in composition index template 2022-12-13 14:41:54 +01:00
f2cbd7f4a3 Merge branch '30-add-cron-system' into 'master'
Handle cron within chill-bundle code

Closes #30

See merge request Chill-Projet/chill-bundles!472
2022-12-13 12:45:49 +00:00
d41dc7035c Doc: doc for CronJobManagerInterface 2022-12-12 23:29:03 +01:00
23d7d1c8f0 Doc: doc for installation and cronjob, and addresses 2022-12-12 22:49:50 +01:00
acfa3d6849 Fixed: [cronjob command] force command name 2022-12-12 22:49:30 +01:00
0bfb5c617e Doc: [cronjob manager] Doc for implementing cronjob 2022-12-12 22:48:57 +01:00
17461aa21e Fixed: [cronjob manager] Fix execution of one single job 2022-12-12 22:21:46 +01:00
7d469df62a Feature: CronJob for refreshing materialized view association between address and geographical unit 2022-12-12 21:17:03 +01:00
204ebd4415 Feature: bootstrap dependency injection for CronJobManager and create a command 2022-12-12 21:16:27 +01:00
b789250b8d Feature: bootstrap dependency injection for CronJobManager 2022-12-12 21:15:58 +01:00
1ebdcd1530 Feature: create table for CronJobExecution 2022-12-12 21:15:32 +01:00
e93458f943 Fixes: Fix doctrine annotation and repository for CronJobExecution 2022-12-12 21:15:05 +01:00
ceee5e7eea Feature: [cron] Create an interface for CronManagerInterface 2022-12-12 21:14:33 +01:00
e0c9e12008 Feature: [cron] Create a cron job to refresh materialized view address - geographical unit association 2022-12-12 14:35:46 +01:00
4fcfe3f5d2 Feature: [cron] Create a cron manager 2022-12-12 14:02:19 +01:00
333e524136 Merge branch 'calendar/finalization' into testing 2022-12-12 13:50:58 +01:00
3c85b5ca92 Fixed: a bug for range generatoion during week-end
The range generator failed during week-end, because no range is selected (lastStart and endDate is null).

with this commit, the rangeGenerator may return null instead of an array, which means no sms will be send.
2022-12-12 13:09:31 +01:00
aca81122d5 Merge branch 'calendar/finalization' into testing 2022-12-08 13:42:25 +01:00
efe494d61f handle package version from within chill bundles 2022-12-07 15:42:39 +01:00
c050c42a27 Fixed: [My Calendar Ranges] fix use of legacy mode in vue createI18n 2022-12-07 14:15:52 +01:00
6309877a14 Fixed: [relationship graph] fix layout of button to add a link (upgrade bootstrap) 2022-12-07 12:18:35 +01:00
8d19e8d7af Fixed: Fix padding inside top right menus 2022-12-07 12:00:31 +01:00
34c97769a6 Fixed: Fix modal layout with bootstrap upgrade 2022-12-07 12:00:14 +01:00
a10aae2100 Deploy: update webpack config for postcss loader and ckeditor 2022-12-06 22:27:27 +01:00
516e4e5f47 Fixed: fix the loading of bootstrap
See https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/690
2022-12-06 21:25:35 +01:00
531b49a536 Merge branch '111_exports_suite' into calendar/finalization 2022-12-06 21:21:01 +01:00
5328bee262 Fixed: [SocialAction] Fix the loading of evaluations associated to a SocialActions 2022-12-06 10:17:49 +01:00
060d5d5ca3 Merge remote-tracking branch 'origin/master' into 111_exports_suite 2022-12-05 20:52:33 +01:00
368136ea57 Feature: [activity][list] Fix list for activities and refactor list with an helper 2022-12-05 18:26:01 +01:00
d080dfda9a DX: Fix CS 2022-12-05 18:26:01 +01:00
88fb48e2be Fixed: let the aggregator "Activity by type" be shown again 2022-12-05 18:26:01 +01:00
feb760a97b Merge branch 'calendar/finalization' into testing 2022-11-29 16:08:05 +01:00
e97a04ab54 Feature: [Calendar doc] Pick document to generate inside the edit/new form 2022-11-29 15:27:36 +01:00
c16454214d Merge branch 'calendar/finalization' into testing 2022-11-28 21:38:35 +01:00
be5f87348b Feature: [CalendarDoc] pick template for generating calendar directly in list 2022-11-28 21:37:17 +01:00
e71bb5d77b Merge branch 'calendar/finalization' into testing 2022-11-28 14:54:26 +01:00
6cac298724 Feature: [Calendar doc] show an alert when document is linked to a previous datetime version of the calendar 2022-11-28 14:40:33 +01:00
39f410dc8f Feature: [Calendar doc] complete CRUD for associating documents within Calendar 2022-11-28 14:33:06 +01:00
fc15b85d11 DX: [accompanying period] refactor the getCenters method
Use more portable spl_object_hash for listing different centers
2022-11-28 12:24:10 +01:00
74673380aa Fixed: [calendar] refactor ACL on calendar 2022-11-28 12:22:58 +01:00
72ae6fb2cd merge calendar/finalization into testing: fix conflicts 2022-11-28 09:33:24 +01:00
a73dca5efe Feature: [calendar] show the number of calendars ignored by the date filter, in the list 2022-11-25 17:27:42 +01:00
8cbfe16c24 DX: Fix cs 2022-11-25 17:02:57 +01:00
9b32ce53c8 Fixed: [calendar] add a return path to calendar doc
See https://gitlab.com/Chill-Projet/chill-bundles/-/issues/23
2022-11-25 17:02:12 +01:00
788b1e9eeb Fixed: [calendar] Fix picking calendar document templating, when adding document in person context 2022-11-25 16:51:41 +01:00
57e1786b99 Fixed: [calendar] Always show filter of calendars in list 2022-11-25 16:50:56 +01:00
6eb23c6073 Feature: [calendar] add proper location on short message text for next rendez-vous 2022-11-25 16:28:00 +01:00
b6e3baa5dc DX: fix cs 2022-11-25 16:04:40 +01:00
02a7074218 Fixed: [calendar] Do not require scope when adding calendar roles 2022-11-25 15:57:50 +01:00
593caec851 Merge remote-tracking branch 'origin/111_exports_suite' into calendar/finalization 2022-11-25 15:29:17 +01:00
9913938c1b show x instead of 1 or 0 for boolean field in export 2022-11-25 14:19:22 +01:00
7c8ac8cfcb Merge branch '111_exports_suite' into testing 2022-11-25 14:17:16 +01:00
3ebf3ae148 fix activity list export for linked with person 2022-11-25 14:16:44 +01:00
24833be681 take into account null value in formatter 2022-11-25 14:15:56 +01:00
6777cf7225 household can be null in budget abstractElement 2022-11-24 13:01:55 +01:00
3b9e6d2742 fix z-index of dropdown menus 2022-11-24 11:12:01 +01:00
390da7c641 Merge branch 'testing' of gitlab.com:Chill-Projet/chill-bundles into testing 2022-11-21 11:11:57 +01:00
d3e784de15 DX: fix cs 2022-11-20 21:28:07 +01:00
d35dacf562 Fixed: [budget] Fix voter on household's budget 2022-11-20 21:27:19 +01:00
cd54fdd13f Feature: [activity] automatically add a person to an activity, if
created in the person context

See https://gitlab.com/Chill-Projet/chill-bundles/-/issues/28
2022-11-18 16:12:49 +01:00
448d93cd02 Fixed: [address] Add missing window.addaddress in person create page, and third party create and update page 2022-11-18 16:11:03 +01:00
8894491dac #16 fix error with vue_activity component in person context (when accompanyingPeriod is null) 2022-11-17 21:43:03 +01:00
999e9e8553 Feature: [workflow] do not subscribe user on notification for each step
automatically
2022-11-17 19:17:30 +01:00
3ca46efd2c #16 pass default variables to add-address component when it is called from another vue component 2022-11-17 19:02:07 +01:00
e90782500b #16 add default value for config variables 2022-11-16 23:10:11 +01:00
0f159281ba Merge branch '111_exports_suite' into testing 2022-11-16 22:53:38 +01:00
15c304b1d1 Feature: [rolling date] do not show the fixed date input, unless the fixed date value is picked 2022-11-16 22:52:30 +01:00
53980dd757 #16 replace hardcoded country and map_center in vue add-address by symfony config yaml variables 2022-11-16 22:30:05 +01:00
c1261f63e7 Merge branch 'testing' of gitlab.com:Chill-Projet/chill-bundles into testing 2022-11-16 18:41:42 +01:00
80f6b7d330 cs fix 2022-11-16 18:41:26 +01:00
56a7833858 #16 Fix html5 widget for ChillDateTimeType 2022-11-16 17:44:48 +01:00
318d6b6d4e Fixed: remaining options not linked with PickRollingDateType 2022-11-16 14:58:08 +01:00
d0e1f31ec7 Fixed: [saved exports] Fix a test in list when no export ungrouped 2022-11-16 14:58:08 +01:00
15871db7fd Fixed: [saved exports] Transform null strings into blank strings, and add validation 2022-11-16 14:58:08 +01:00
00bf7bf299 DX: fix construct of ReferrerScopeAggregator in test 2022-11-16 14:58:07 +01:00
dafd715efd Merge branch '111_exports_suite' into testing 2022-11-16 14:32:54 +01:00
928869666c #16 fix errors and some design regressions in eventBundle 2022-11-16 13:09:59 +01:00
9623a35e6f #16 EventBundle participation (fix errors and improve ux) 2022-11-16 10:57:06 +01:00
d58aad4624 improve savedExport translation 2022-11-15 22:08:15 +01:00
a39f547907 fix flex-bloc look in exports list and saved exports 2022-11-15 22:01:35 +01:00
0e661784b0 DX: fix construct of ReferrerScopeAggregator in test 2022-11-15 18:17:58 +01:00
fc607d6a0e DX: improve import command + help for address-ref-from-best-addresses 2022-11-15 16:16:52 +01:00
2f765a3aa5 Merge branch 'testing' of gitlab.com:Chill-Projet/chill-bundles into testing 2022-11-15 13:44:14 +01:00
9ad3bbc1b4 Fixed: fix typo in workflows 2022-11-15 11:58:26 +00:00
f144663877 Fixed: Fix typo in message for activity 2022-11-15 11:46:32 +00:00
434ef075da Feature: Add geographical unit name and ref ids in list, associated to address 2022-11-14 17:06:39 +01:00
2db778c4a4 fix chill-bundles#25 RollingDate bad expression 2022-11-14 16:18:04 +01:00
2178485e5e Merge branch '111_exports_suite' of gitlab.com:Chill-Projet/chill-bundles into 111_exports_suite 2022-11-14 16:12:30 +01:00
e767557216 csfixer 2022-11-14 16:03:04 +01:00
68bfb082fc chill-bundles#25: replace ChillDateType by PickRollingDateType
batch/serial replacing
untested
2022-11-14 15:43:02 +01:00
1f3dd00d81 improve flex positionning for list exports cards 2022-11-14 15:43:02 +01:00
f633fabf79 Merge branch '111_exports_suite' into testing 2022-11-14 14:23:49 +01:00
cf6430ae9b Feature: Adapt geographical unit filters and aggregator to use the materialized view, instead of geographical computation (improve performance) 2022-11-14 14:22:48 +01:00
d3ba11f521 Feature: Store location of each address contained in geographical units in a materialized view 2022-11-14 14:21:03 +01:00
f3401faea1 Merge branch '111_exports_suite' into testing 2022-11-14 11:29:26 +01:00
ec9555ec84 Merge branch 'exports/apply-person-modifier-on-course' into '111_exports_suite'
Apply persons filters and aggregators on accompanying course

See merge request Chill-Projet/chill-bundles!466
2022-11-14 10:22:48 +00:00
a68422e0e8 Features: [export] Apply person filters and aggreators on Count Household 2022-11-14 11:21:16 +01:00
400770123a Features: [export] Apply person filters and aggreators on Count Evaluation 2022-11-14 10:46:13 +01:00
91e3588e76 Features: [export] Show also SocialIssue in the By Social Action aggregator 2022-11-10 21:17:48 +01:00
61f44396c5 Features: [export] Apply person filters and aggreators on Count Social Works export 2022-11-10 15:51:46 +01:00
8e44f20535 Features: [export] Remove old unnecessary filters for person with accompanying period
Those filters applyed on persons and allowed to select person which has a new, closing, or active accompanying period. But this is deprecated: there are now a dedicated Export for that ( CountPersonWithAccompanyingCourse)
2022-11-10 15:21:56 +01:00
a7c44830d2 Features: [export] Filter "persons who do not have a household composition" 2022-11-10 15:11:45 +01:00
a942a24596 Fixes: [export] fixes filters by household composition, and apply them on persons directly 2022-11-09 20:46:15 +01:00
826a975fbe Features: apply all the filters and aggregators concerning person on accompanying courses 2022-11-09 16:20:24 +01:00
c1df8084a6 DX: Add DQL function LEAST and GREATEST 2022-11-09 15:48:20 +01:00
c22135f101 Feature: [export] apply all filters valid for person on accompanying course 2022-11-09 14:50:22 +01:00
a2e1228c09 Merge branch 'testing' of gitlab.com:Chill-Projet/chill-bundles into testing 2022-11-09 11:39:28 +01:00
11f0cac86e Merge branch '111_exports_suite' into testing 2022-11-09 10:47:07 +01:00
9dba5965f6 Merge branch '21-save-exports' into '111_exports_suite'
Allow to save exports

See merge request Chill-Projet/chill-bundles!465
2022-11-09 09:44:07 +00:00
be38251a13 Feature: [saved export] Switch between list of export and saved export thanks to nav at the list's top 2022-11-08 19:59:43 +01:00
43791badd5 Feature: [saved export] Edit and delete saved exports 2022-11-08 19:24:22 +01:00
79e9906a05 Feature: [saved export] Générate a report from a saved export 2022-11-08 18:02:26 +01:00
aec4c52567 Feature: [saved export] First list of saved exports 2022-11-08 16:57:49 +01:00
ccb2cd0295 Feature: [saved export] Create a "saved export" 2022-11-08 10:20:38 +01:00
8aeeab9e6b Feature: Apply rolling "open between dates filters" (accompanying period) 2022-11-07 21:18:56 +01:00
48da6d0a92 Feature: Apply rolling date on StepAggregator 2022-11-07 21:11:20 +01:00
50db96ffbc Fix validation of fixed date 2022-11-07 18:20:34 +01:00
86be95ac43 Feature: [export] Add a rolling date on Acp "by step" filter 2022-11-07 18:20:22 +01:00
8159f91e25 DX: create interface for RollingDateConverterInterface 2022-11-07 18:19:35 +01:00
0756bec580 DX: fix cs 2022-11-07 18:07:26 +01:00
4e3c93cdd3 DX: Add validation to PickRolingDateType
It is not possible to pick a fixed date when not setting a fixed date
2022-11-07 17:56:30 +01:00
c7f740d5d7 DX: Add rolling date converter + unit test 2022-11-07 17:42:00 +01:00
5489178e4b DX: Create a RollingDate data transfer object and Form type 2022-11-07 14:06:47 +01:00
3b96ac3ef3 DX: fixed double declaration of AsideActivity 2022-11-07 11:43:21 +01:00
df4f5e7cf8 Fixed: [export] improve memory footprint for filter by Geographical Unit 2022-11-07 11:31:23 +01:00
82d9ab8ca6 DX: [export] review on CreatorFilter, CreatorJobAggregator, CreatorJobFilter 2022-11-07 11:31:23 +01:00
c05637bc72 evaluations aggregators 2022-11-07 11:31:23 +01:00
d450f06286 filters and aggregator aside activity 2022-11-07 11:31:23 +01:00
3b68997c69 Feature: [export][evaluation] Group evaluation by start date 2022-11-07 11:31:23 +01:00
17e8e1964d Feature: [export][evaluation] Adding group by evaluation having end date 2022-11-07 11:31:23 +01:00
bf5ecd25de Feature: [export][evaluation] filter by current evaluation (without any end date) 2022-11-07 11:31:23 +01:00
9fa3a72cb4 Feature: [export][evaluation] add by end date filter 2022-11-07 11:31:23 +01:00
f10a448ae9 DX: prevent collision in parameter name in evaluation / by start date filter 2022-11-07 11:31:23 +01:00
9bfc184f70 Feature: [export][work] Group by current action 2022-11-07 11:31:23 +01:00
2e60b6735a DX: more cs 2022-11-07 11:31:23 +01:00
2ee362bfd5 Feature: [export][action] Filter 'active' action: which does not have an end date 2022-11-07 11:31:23 +01:00
b42e1a9a05 Feature: [export][activity] Add an aggregator to group by sent / received 2022-11-07 11:31:21 +01:00
055acbf43c DX: more code style fixes 2022-11-07 11:30:51 +01:00
5655f953d7 Feature: [export] group accompanying period by number of actions 2022-11-07 11:30:51 +01:00
e6553e71ee Feature: [export] filter accompanying period which has no action - work 2022-11-07 11:30:51 +01:00
7f9e8c5a7b Feature: [export] add aggregator by "number of activity" for acp 2022-11-07 11:30:51 +01:00
f3a3cab801 DX: review for hasNoActivityFilter 2022-11-07 11:30:51 +01:00
d6b358cfa1 Fixed: fix date's type in DateType input, and prevent collision on
parameter name
2022-11-07 11:30:51 +01:00
abd79df8cd count aside activity 2022-11-07 11:30:51 +01:00
dc38e5927c voter aside activity created 2022-11-07 11:30:51 +01:00
18406e83a1 creator job aggregator 2022-11-07 11:30:51 +01:00
6687742e23 DX: simplify creatorJobFilter 2022-11-07 11:30:51 +01:00
2767075be7 Feature: [export] Finalize HasTemporaryLocation filter on accompanying
course
2022-11-07 11:30:51 +01:00
371a7dc05c Fixed: handle null value in SentReceivedAggregator 2022-11-07 11:30:51 +01:00
63129a3b8c setup aside activity export 2022-11-07 11:30:14 +01:00
8ea29e8ec4 add translations creator filters 2022-11-07 11:30:14 +01:00
2bdc06397e creator job filter 2022-11-07 11:30:14 +01:00
edd9aaa475 comment out builder method 2022-11-07 11:30:14 +01:00
5695564723 fix code style 2022-11-07 11:30:13 +01:00
fc9689e881 DX: repairs code style, and psalm types 2022-11-07 11:29:09 +01:00
75f69859e6 fix psalm errors 2022-11-07 11:29:09 +01:00
b5a9dac62e Feature: [export] Add a list of accompanying periods 2022-11-07 11:29:09 +01:00
bf58c5d59c Feature: [export] add a list of people having an accompanying period 2022-11-07 11:29:09 +01:00
8a395bf108 DX: ensure that the return type is correct in ListPersonHelper 2022-11-07 11:29:09 +01:00
1ed367e079 Fixed: [export][acl][Social issue filter] fix type for retrieving data from form 2022-11-07 11:29:09 +01:00
e3801d54b4 DX: Refactor ListPerson to extract methods linked to label and select 2022-11-07 11:29:09 +01:00
4c9cdb7b8c Fixed: [list person] fix list person and add new fields 2022-11-07 11:29:09 +01:00
2096e175d4 Fixed: [export][list person] use address from household for person list 2022-11-07 11:29:09 +01:00
781253a854 Fixed: correctly show datetime in spreadsheet list 2022-11-07 11:29:09 +01:00
c396635163 acp creator filter 2022-11-07 11:29:09 +01:00
eeb84d5cfb php csfixes 2022-11-07 11:29:09 +01:00
fc2f8d33e1 correct namespace and use statements 2022-11-07 11:29:09 +01:00
a69965345f correct config file 2022-11-07 11:29:09 +01:00
226f172970 SentReceivedAggregator (in activity) 2022-11-07 11:29:09 +01:00
6d0622aa38 HasNoActivityFilter (in activity) 2022-11-07 11:29:09 +01:00
0e553594a0 CurrentEvaluationsFilter 2022-11-07 11:29:09 +01:00
f714c7206c ByEndDateFilter evaluation 2022-11-07 11:29:09 +01:00
42012dbad2 ByStartDateFilter evaluation 2022-11-07 11:29:09 +01:00
bc41910a39 HasNoReferrer filter 2022-11-07 11:29:09 +01:00
a18870c91e Evaluation HavingEndDate Aggregator 2022-11-07 11:29:09 +01:00
68ebf8303c remove ByMaxDateFilter (evaluation) 2022-11-07 11:29:09 +01:00
9e89302aa4 SocialWork: Current actions filter + aggregator 2022-11-07 11:29:09 +01:00
2e52729806 acp HasNoAction Filter (UNTESTED) 2022-11-07 11:29:09 +01:00
afb5ebc077 define queryKey in 11 aggregators 2022-11-07 11:29:09 +01:00
f751d2e9ab create 13 new export/filters/aggregators in Person and AsideActivity Bundles
* minor corrections on last commit
* modify related files (declaration, messages.fr, repository)
* yaml service declaration
2022-11-07 11:29:09 +01:00
13d6e4587a Create 16 new filters/aggregators in Bundles: Vendée, Person, Activity
Basic file creation, with methods, namespace, and title translation
2022-11-07 11:29:09 +01:00
6fd75a175f Fixed: [export] improve memory footprint for filter by Geographical Unit 2022-11-03 13:59:16 +01:00
03e765f811 DX: [export] review on CreatorFilter, CreatorJobAggregator, CreatorJobFilter 2022-11-03 12:39:19 +01:00
d3f03fb27c evaluations aggregators 2022-11-02 20:06:03 +01:00
481be32997 filters and aggregator aside activity 2022-11-02 20:02:46 +01:00
4524240ad8 Merge branch '111_exports_suite' of gitlab.com:Chill-Projet/chill-bundles into 111_exports_suite 2022-11-02 18:39:11 +01:00
0255f12fa9 Feature: [export][evaluation] Group evaluation by start date 2022-11-02 16:42:23 +01:00
4ca10ce38d Feature: [export][evaluation] Adding group by evaluation having end date 2022-11-02 16:26:56 +01:00
f0b2ec1348 Feature: [export][evaluation] filter by current evaluation (without any end date) 2022-11-02 16:17:10 +01:00
2d40c38c88 Feature: [export][evaluation] add by end date filter 2022-11-02 15:56:48 +01:00
d8104c4443 DX: prevent collision in parameter name in evaluation / by start date filter 2022-11-02 15:08:04 +01:00
63d38e35f7 Feature: [export][work] Group by current action 2022-11-02 14:55:12 +01:00
9c3533d106 count aside activity 2022-11-02 14:42:44 +01:00
e07d2ab467 voter aside activity created 2022-11-02 14:41:59 +01:00
cda25d3459 DX: more cs 2022-11-02 14:40:17 +01:00
1bf7f9945c Feature: [export][action] Filter 'active' action: which does not have an end date 2022-11-02 14:39:36 +01:00
9cf06c147f Feature: [export][activity] Add an aggregator to group by sent / received 2022-11-02 14:25:52 +01:00
60f93f7f12 DX: more code style fixes 2022-11-02 14:06:10 +01:00
c872ca7204 Feature: [export] group accompanying period by number of actions 2022-11-02 14:05:16 +01:00
51ac4e0938 Feature: [export] filter accompanying period which has no action - work 2022-11-02 13:44:04 +01:00
24873f0cc2 Feature: [export] add aggregator by "number of activity" for acp 2022-11-02 13:33:33 +01:00
84e5be6a60 DX: review for hasNoActivityFilter 2022-11-02 13:21:26 +01:00
5acf2a1986 creator job aggregator 2022-11-02 13:17:03 +01:00
094a912e42 Fixed: fix date's type in DateType input, and prevent collision on
parameter name
2022-11-02 13:15:40 +01:00
f40aa89d08 Merge branch '111_exports_suite' of gitlab.com:Chill-Projet/chill-bundles into 111_exports_suite 2022-11-02 13:14:50 +01:00
50e2f4a147 setup aside activity export 2022-11-02 13:14:38 +01:00
be215bd135 DX: simplify creatorJobFilter 2022-11-02 13:05:12 +01:00
be75cdce55 Feature: [export] Finalize HasTemporaryLocation filter on accompanying
course
2022-11-02 12:56:13 +01:00
e46b285d3e Fixed: handle null value in SentReceivedAggregator 2022-11-02 12:56:13 +01:00
17a7b053cf DX: remove unused variable 2022-11-02 12:56:13 +01:00
32cdf56fbd add translations creator filters 2022-11-02 12:00:29 +01:00
749facb9b0 creator job filter 2022-11-02 11:55:36 +01:00
edd1557f35 comment out builder method 2022-11-02 11:32:55 +01:00
3059935305 merge conflict fixed 2022-11-02 11:20:11 +01:00
355436aa82 acp creator filter 2022-11-02 11:15:54 +01:00
8d4ec5d675 fix code style 2022-11-02 11:12:55 +01:00
c20b561de5 Merge branch 'exports/listes_2022' into '111_exports_suite'
Repairs and add new lists in exports

See merge request Chill-Projet/chill-bundles!464
2022-11-02 09:54:13 +00:00
acc9523ff5 DX: repairs code style, and psalm types 2022-11-02 10:52:49 +01:00
afa6dfd77c fix psalm errors 2022-11-02 10:52:49 +01:00
c331f94201 fix cs 2022-11-02 10:52:49 +01:00
6ffe99a2be Feature: [export] Add a list of accompanying periods 2022-11-02 10:52:49 +01:00
d75ec92417 Feature: [export] add a list of people having an accompanying period 2022-11-02 10:52:49 +01:00
4e55f1ede7 DX: ensure that the return type is correct in ListPersonHelper 2022-11-02 10:52:49 +01:00
cf7d0c1bdb Fixed: [export][acl][Social issue filter] fix type for retrieving data from form 2022-11-02 10:52:49 +01:00
f4c3997e55 DX: Refactor ListPerson to extract methods linked to label and select 2022-11-02 10:52:49 +01:00
f434cc5c02 Fixed: [list person] fix list person and add new fields 2022-11-02 10:52:49 +01:00
333c305eef Fixed: [export][list person] use address from household for person list 2022-11-02 10:52:49 +01:00
4af261a366 Fixed: correctly show datetime in spreadsheet list 2022-11-02 10:52:49 +01:00
1228a0323c php csfixes 2022-11-02 10:28:52 +01:00
dc149c7fd5 correct namespace and use statements 2022-11-02 10:26:44 +01:00
7dc34cb357 correct config file 2022-11-02 10:15:08 +01:00
ed04c276c2 SentReceivedAggregator (in activity) 2022-10-31 16:18:10 +01:00
f8b5078997 HasNoActivityFilter (in activity) 2022-10-31 16:10:24 +01:00
68b9c171a6 CurrentEvaluationsFilter 2022-10-31 15:54:41 +01:00
791ea25e4f ByEndDateFilter evaluation 2022-10-31 15:51:35 +01:00
e3846829e1 ByStartDateFilter evaluation 2022-10-31 15:46:29 +01:00
d48474bbc9 HasNoReferrer filter 2022-10-31 15:32:34 +01:00
05f9a83bed Evaluation HavingEndDate Aggregator 2022-10-31 15:15:35 +01:00
441c5c8da7 remove ByMaxDateFilter (evaluation) 2022-10-31 14:58:25 +01:00
a0fc9d4de5 SocialWork: Current actions filter + aggregator 2022-10-31 11:43:41 +01:00
8527c19073 acp HasNoAction Filter (UNTESTED) 2022-10-31 11:19:21 +01:00
fe120086c7 define queryKey in 11 aggregators 2022-10-28 16:59:11 +02:00
f1fb77187f create 13 new export/filters/aggregators in Person and AsideActivity Bundles
* minor corrections on last commit
* modify related files (declaration, messages.fr, repository)
* yaml service declaration
2022-10-28 16:48:09 +02:00
43d9ba1ba5 Create 16 new filters/aggregators in Bundles: Vendée, Person, Activity
Basic file creation, with methods, namespace, and title translation
2022-10-28 13:07:24 +02:00
77a6e92f69 fix if condition in CalendarController + phpStan error 2022-10-26 11:08:37 +02:00
e1b6fb2db1 Merge branch 'master' into testing 2022-10-25 10:17:25 +02:00
2a4a4a80b1 change name of échange to activité 2022-10-25 10:11:42 +02:00
2e44689549 Merge branch 'calendar/finalization' into testing 2022-10-24 11:12:49 +02:00
aae1fbf7e6 Merge branch '111_exports_suite' into calendar/finalization 2022-10-24 11:10:44 +02:00
81c73f6acf Merge branch 'master' into 111_exports_suite 2022-10-24 11:06:12 +02:00
5bd6281154 Merge branch 'calendar/refactor-calendar-on-person' into 'calendar/finalization'
[Calendar] repairs the calendar for creation in Person file

See merge request Chill-Projet/chill-bundles!463
2022-10-24 07:57:03 +00:00
823d27ed8a Merge branch 'calendar/docgen-add-generation' into 'calendar/finalization'
[Calendar] Generate document associate with calendar

See merge request Chill-Projet/chill-bundles!462
2022-10-24 07:56:44 +00:00
307fdfd0ba Merge branch 'person-docgen-context-with-3party' into 'master'
Feature: [person][docgen] Add a title to document in person docgen

See merge request Chill-Projet/chill-bundles!461
2022-10-24 07:56:02 +00:00
7efa95efab Fixed: [calendar] do not show link to document if no document configured 2022-10-21 13:46:17 +02:00
bc1a7c1d7b Feature: [calendar] allow to create and generate calendar by person 2022-10-21 13:24:02 +02:00
43dcb46d38 Feature: [calendar] associate a calendar with a person: update schema 2022-10-21 11:28:59 +02:00
c04e408d9d DX: [calendar] simplify menu builder injection deps 2022-10-21 11:08:31 +02:00
2c5fa82380 Feature: [calendar] Add button to generate document immediatly after saving the calendar 2022-10-21 10:40:51 +02:00
55095ee6ac Feature: [calendar] show documents in layout of list (and move sms info) 2022-10-21 10:17:58 +02:00
6ae03806b4 Feature: [calendar][docgen] controller and UI to generate a document from a calendar 2022-10-20 22:33:23 +02:00
e107e39ffd Fixed: when counting doc generator template by entity, take 'active'
into account
2022-10-20 22:32:21 +02:00
63f3010395 Feature: [calendar][docgen] generation context for Calendar 2022-10-20 22:31:59 +02:00
2b1d9cabff Feature: [calendar] associate document with calendar 2022-10-20 21:36:30 +02:00
1ec3e176fb Merge branch 'master' into calendar/docgen-add-generation 2022-10-20 13:34:21 +02:00
9f4cf4ea88 Merge branch 'master' of gitlab.com:Chill-Projet/chill-bundles 2022-10-20 09:56:23 +02:00
e91d2c9e93 complete chill documentation about csfixer and phpstan 2022-10-20 09:55:42 +02:00
b580bda2fb DX: [calendar] docgen normalization on Calendar entity 2022-10-19 22:02:43 +02:00
83ba813160 Feature: [docgen] order document template by name in list and in admin 2022-10-19 17:56:10 +02:00
0cbe12a32c DX: [dql] add a function JSON_EXTRACT
This might be used to sort lines which contains translatable string.
2022-10-19 17:44:36 +02:00
2a782044e6 DX: [docgen] add more test for docgenObjectNormalizer and AccompanyingPeriodResourceNormalizer 2022-10-19 17:11:10 +02:00
719256913c Feature: [docgen] Add a new variable createdAtDate, which contains date
without date and time

This is useful when generating a letter, to fill the today's date in the
letter's header.
2022-10-19 16:07:12 +02:00
ea5f8c9d08 Feature: [docgen][person] add a new context to generate document with a
third party

This allow to prepare, for instance, mail (letters) to a thirdparty
about a Person
2022-10-19 14:16:59 +02:00
1b5d5a28fd DX: [main] Validation phone number: add some parameters for debugging 2022-10-19 14:16:20 +02:00
31f048b8e8 Feature: [person][docgen] Add a title to document in person docgen
context
2022-10-19 14:12:47 +02:00
2f9b56dcd5 Feature: [export][acp] group courses by household composition 2022-10-18 21:43:33 +02:00
530c778d8c DX: [person][household composition] create interface for repositories 2022-10-18 21:42:39 +02:00
7b3fcad251 Feature: [export][activity] Filter activities by users scope and job 2022-10-18 16:27:49 +02:00
a7ade9dac4 DX: use tags iterator to inject aggregators, filters and export during ExportManager's construct
Squashed commit of the following:

commit dc2bbc8f4da24549a1d42feb3b453af9f79ab2ff
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Tue Oct 18 10:40:14 2022 +0200

    Fixes: remove iterator_to_array on formatter, which causes a PHP crashes

commit 4ce56a01a7
Author: Julien Fastré <julien.fastre@champs-libres.coop>
Date:   Mon Oct 17 17:41:14 2022 +0200

    DX: use tags and dependency injection to build ExportManager
2022-10-18 16:27:49 +02:00
a5c7934b76 Merge branch '664_or_translation' into 111_exports_suite 2022-10-18 15:33:49 +02:00
a7a921ee4d batch replacing ', ou' in filters 2022-10-18 15:25:43 +02:00
93713f2ac2 Merge branch '641_issues_with_children' into '111_exports_suite'
Issue641, improve query,  issues and actions with descendants

See merge request Chill-Projet/chill-bundles!460
2022-10-18 12:50:35 +00:00
9eb451e359 cs fixer 2022-10-18 14:37:33 +02:00
8928664f87 Merge branch '111_exports_suite' into 641_issues_with_children 2022-10-17 18:16:30 +02:00
531e05fc3a DX: fix tests to find ancestor to all SocialAction and SocialIssue 2022-10-17 17:54:50 +02:00
32ddc5465c review: fix stuffs on socialAction and socialIssue filters:
* filters call static entity method
* add renderString option to manage add_children
* add tests on new entity method getDescendantsWithThisFor..()
* rename function in repository
* rename 'Select2..' classes by 'Pick..' and replace all occurences
2022-10-17 17:31:17 +02:00
eb404404f9 Merge remote-tracking branch 'origin/111_exports_suite' into testing 2022-10-17 09:16:39 +02:00
50e12375f8 Feature: [export][activity] Group by users (participating) job and scope
on activity exports
2022-10-17 00:25:16 +02:00
4ed760949a Feature: [export][activity] Add filter and aggregator by users
(participating to the activity)
2022-10-16 23:56:25 +02:00
71f989f00e issue641: same for actions: take children, propose only associated and sort them by ordering 2022-10-16 20:06:18 +02:00
6b1155b9d8 issue641: don't list all children if parent is chosen
add mechanism to differenciate string in export
2022-10-16 20:05:22 +02:00
ccea6dd95c issue641: add descendants to selected in alterQuery 2022-10-16 19:38:13 +02:00
de7ba29853 issue641: form select2 list activated socialissues and sort by ordering 2022-10-16 19:38:13 +02:00
8d7b6fea71 issue641: remove method to add parents socialissues (bad understanding) 2022-10-16 19:38:13 +02:00
6d40ef279f issue641: simplify alterQuery where clause in concerned filters 2022-10-16 19:38:13 +02:00
a46c85d66c Fix nested forms problems with select2 FormTypes in issue 641 and 649
Select2UserLocationType.php is called in another context:
UserController call UserCurrentLocationType which instanciate new Select2UserLocationType.php FormType
2022-10-16 13:24:03 +02:00
3e5be50a87 fix some tests 2022-10-15 00:35:13 +02:00
dd0e2a169c Feature: [export][acp] use a date of computation for each filter and
aggregator linked with referrer
2022-10-15 00:17:04 +02:00
f1e92887fd Fixed: [export][person][by age] use lower maximum age if not set, to avoid postgresql error 2022-10-14 22:33:58 +02:00
c07cd2b715 Fixed: [export][activity] use createdBy property instead of user for
grouping or filtering by creator
2022-10-14 21:55:02 +02:00
cd3fc99b9a DX: extract interface for UserRepository 2022-10-14 21:42:55 +02:00
8b71e141cf Feature: [activity] track creation and update on activity 2022-10-14 21:06:21 +02:00
2ee4897db9 Feature: [export][acp] use the acp's step history to aggregate steps in StepAggregator 2022-10-14 21:04:58 +02:00
59e21b6819 Feature: [acp] record the step history of each accompanying period
Each time a step is changed on an history, a record is stored in a
dedicated table.

When the acp's opening date is moved, the first row is adapted to match the new opening's date. This
mechanisme does not work if the opening date is move beyon the first end
date (if any), nor on the closing date.
2022-10-14 14:36:40 +02:00
66f282e221 DX: fix an accompanying period might be null in an AccompanyingPeriodComment 2022-10-13 16:50:21 +02:00
75f6c8754e Feature: [export][acp] filter by acp which have an evaluation: use
select2
2022-10-13 15:32:09 +02:00
5a94ce49f1 [Feature] add active property to evaluation 2022-10-13 15:25:09 +02:00
a26029999f Merge branch '111_exports_suite' into testing 2022-10-12 11:30:52 +02:00
1ba9f0365f Merge branch 'master' into 111_exports_suite 2022-10-12 11:29:10 +02:00
d5efbd505c Feature: [export][acp] aggregator by course's duration 2022-10-12 11:04:36 +02:00
3a8640db43 DX: Add a DQL AGE function to calculate age between two dates 2022-10-12 11:03:51 +02:00
6f1ec00d3a Feature: [export] allow to choose between different granularity for DurationAggregator (acp) [wip] 2022-10-11 16:48:22 +02:00
aba3b33fd0 Feature: allow to filter courses by user's job #export #acp 2022-10-10 21:22:22 +02:00
2f77deaa60 fix cs 2022-10-10 20:53:49 +02:00
cbd7acebd5 Feature: allow to filter acp by scope of the user #export #acp 2022-10-10 20:52:35 +02:00
fce7c44907 Fix return value for initializeObject in ScopePickerTest 2022-10-10 20:52:35 +02:00
4834eadc18 Feature: do not show desactivated Scope in ScopePickerType 2022-10-10 20:52:35 +02:00
f74f67b5c6 Feature: add a variable active to Scope entity 2022-10-10 20:52:35 +02:00
832f043e25 Fixed: add scope to generated document ref #11 2022-10-10 20:52:35 +02:00
5acf7a81d7 DX: deprecated ProphecyTrait in favour of the one coming from Prophecy\PhpUnit package. 2022-10-10 20:52:35 +02:00
6f46d4c46a add scope to docs if required 2022-10-10 20:52:35 +02:00
f1fc6f9ab3 Fixed: usage of owner side / inversed side on SocialAction / Evaluation
In a ManyToMany relationship, doctrine does take care only of the owning
side of a relationship to inspect changes.

([see
documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/unitofwork-associations.html#important-concepts))

This commit mark as "internal" the methods add/removeSocialAction on the
inversed side (`Evaluation`) and let the methods add/removeEvaluation
on the owning side (`SocialAction`) update the inversed side.

The usage is also adapted into SocialWorkMetadata's importer.
2022-10-10 20:52:35 +02:00
c8c0c26ab9 php cs fixes, stan ok! 2022-10-10 20:52:35 +02:00
0e2740a4dd update changelog 2022-10-10 20:52:33 +02:00
0827cd4b02 query adjusted to fetch only active objectives for a social action 2022-10-10 20:52:08 +02:00
8f2e91d857 doc for PickPostalCode vue component 2022-10-10 20:52:08 +02:00
0c47d2cafd [Feature] show period's localisation (address) into reassign and regulation list 2022-10-10 20:52:08 +02:00
215d150103 [Dev] Add unit test to PickPostalCodeType 2022-10-10 20:52:08 +02:00
cf0252b469 [Feature] Prevent sending notification to user when bulk reassign 2022-10-10 20:52:08 +02:00
86cfd87d71 Feature: Allow to filter periods to reassign by postal code 2022-10-10 20:52:08 +02:00
0609fdee14 [workflow] Feature: allow user to retrieve the access link for the
workflow + show dest email for a workflow
2022-10-10 20:52:07 +02:00
nobohan
aa5094f196 [person] normalizer tests: php stan 2022-10-10 20:51:40 +02:00
nobohan
0aef6b1afb [person]: add origin and social issue normalizer tests + typo 2022-10-10 20:51:40 +02:00
nobohan
9d9aa0404f [person]: add new test for social action normalizer 2022-10-10 20:51:40 +02:00
5c6068e8a5 fix cs 2022-10-10 18:52:38 +02:00
9c709d4388 issue641: others filters use these new Select2...Type 2022-10-10 18:28:30 +02:00
c3f9ce1ea6 issue641: create 2 new Select2 formType (for actions and issues) 2022-10-10 18:28:30 +02:00
fd24ba618d Merge branch '111_exports_suite' of gitlab.com:Chill-Projet/chill-bundles into 111_exports_suite 2022-10-10 18:27:02 +02:00
963ec3c3e4 Merge branch '649_select2_forms' into 111_exports_suite 2022-10-10 18:03:50 +02:00
c41f9d8f5b fix missing service declaration + remove unused form method 2022-10-10 18:02:58 +02:00
5fd4e322d6 Merge branch '649_select2_forms' into 111_exports_suite 2022-10-10 16:14:09 +02:00
631111b0c7 rename UserCurrentLocationType to more generic Select2UserLocationType
NB: used 2 times, check that all works
2022-10-10 16:08:23 +02:00
7276cb971f issue649: new formType to use select2 with LocationTypeFilter 2022-10-10 15:59:16 +02:00
087270829e cleaning previous 2022-10-10 15:27:36 +02:00
999d4e2038 issue649: adapt existing UserCurrentLocationType to use select2 with AdministrativeLocationFilter 2022-10-10 15:27:22 +02:00
863a384a85 Merge branch '11-fix-scope-person-document' into 'master'
Resolve "Un document généré dans le contexte "personne" n'est pas enregistré"

Closes #11

See merge request Chill-Projet/chill-bundles!459
2022-10-10 12:27:17 +00:00
a8a206557b Fixed: add scope to generated document ref #11 2022-10-10 14:25:07 +02:00
877535ca4d DX: deprecated ProphecyTrait in favour of the one coming from Prophecy\PhpUnit package. 2022-10-10 14:25:07 +02:00
7df203633d add scope to docs if required 2022-10-10 14:25:07 +02:00
69704e5211 Fixed: usage of owner side / inversed side on SocialAction / Evaluation
In a ManyToMany relationship, doctrine does take care only of the owning
side of a relationship to inspect changes.

([see
documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/unitofwork-associations.html#important-concepts))

This commit mark as "internal" the methods add/removeSocialAction on the
inversed side (`Evaluation`) and let the methods add/removeEvaluation
on the owning side (`SocialAction`) update the inversed side.

The usage is also adapted into SocialWorkMetadata's importer.
2022-10-10 13:59:59 +02:00
629e4ab02d Merge branch 'atelier_tests' into '111_exports_suite'
Add tests which check that an alias do not disappears in filters / aggregators

See merge request Chill-Projet/chill-bundles!455
2022-10-10 10:41:41 +00:00
2229266347 Merge branch 'fix_fetch_action_objectives' into 'master'
Fix fetch action objectives

See merge request Chill-Projet/chill-bundles!444
2022-10-10 10:37:20 +00:00
ee08fd5877 Merge branch 'regulation-list-add-commune' into 'master'
Add postal code to filter regulation list

See merge request Chill-Projet/chill-bundles!457
2022-10-10 10:35:20 +00:00
8d3ff2f26e doc for PickPostalCode vue component 2022-10-10 10:34:48 +00:00
704e502beb Merge branch 'workflow-show-link' into 'master'
[workflow] Feature: allow user to retrieve the access link for the

See merge request Chill-Projet/chill-bundles!456
2022-10-10 10:29:19 +00:00
9e11448c5e Merge branch 'improve_normalizer_tests' into 'master'
Improve normalizer tests

See merge request Chill-Projet/chill-bundles!458
2022-10-10 10:28:57 +00:00
01acfeb58f Merge branch 'master' into 111_exports_suite 2022-10-08 01:37:24 +02:00
022f0a5e33 Fixed: the marital's status was shown to admin users - and was not editable 2022-10-08 01:36:37 +02:00
d055a286a8 Fix CS 2022-10-08 01:35:56 +02:00
61db0d6a28 DX: fix deprecation in dql custom function + add test 2022-10-08 01:34:20 +02:00
76aa9c7058 Fixed: do not store center in Person any more, the centerHistory is now fully in use 2022-10-08 01:11:54 +02:00
8cf166f7ea store an end date instead of a string when person is removed from a participation 2022-10-08 01:10:00 +02:00
6585662087 Fixed: fix the evaluation maxDateFilter to use correct alias
Some weird code is also removed in describeAction
2022-10-08 01:03:21 +02:00
5592e906f2 DX: remove fixed phpstan things 2022-10-08 01:02:32 +02:00
f64952a93e Merge branch 'master' into 111_exports_suite 2022-10-08 00:50:17 +02:00
6b5f746efc Remove deprecation of AuthorizationHelper::getReachableScope, as it is
widely used
2022-10-08 00:23:07 +02:00
nobohan
80052cc6c8 [person] normalizer tests: php stan 2022-10-07 10:47:55 +02:00
nobohan
4ca5fb9869 [person]: add origin and social issue normalizer tests + typo 2022-10-07 10:23:41 +02:00
d74decba74 DX: Fix cs 2022-10-06 23:57:45 +02:00
915ec0d428 DX: fix import in test 2022-10-06 23:57:26 +02:00
db28443008 Fixed: correct use of scopes 2022-10-06 23:57:02 +02:00
3a23e889e3 DX: fixed phpstan things 2022-10-06 23:43:28 +02:00
2fdb1dfb52 DX: more type hint for DirectExportInterface 2022-10-06 23:43:16 +02:00
07d15f0a68 DX: fixed complicated comparison to add a group by 2022-10-06 23:42:46 +02:00
1b1aaaa862 phpstan: fixed things 2022-10-06 23:24:59 +02:00
ca67170ad3 DX: do not loop on possible choices to display action 2022-10-06 23:24:38 +02:00
f5997e39cd DX: do not use complicated condtiion to add a group by 2022-10-06 23:24:07 +02:00
c7de95c635 DX: fix type hinting, code and some dev stuffs 2022-10-06 23:17:58 +02:00
5dbfb98906 DX: fix missing import during exception handling 2022-10-06 23:17:20 +02:00
1a8f8efa23 DX: remove call to deprecated method 2022-10-06 23:16:50 +02:00
7e1d07f1ff DX: add missing import for handling exception 2022-10-06 23:04:50 +02:00
17cdaf449e DX: remove unnecessary comparison 2022-10-06 23:02:47 +02:00
9ad9ef6758 DX: rename argument $qb to $query in export's, getResult method, and add missing return type and import
This name is the same as the implemented interface.
2022-10-06 22:56:34 +02:00
77800c21bb Fixed: missing import for handling LogicException 2022-10-06 22:45:58 +02:00
e518cf703d fix cs again 2022-10-06 22:45:07 +02:00
a41483be00 ACP ConfidentialFilter: Do not loop on choices to show the picked one 2022-10-06 22:44:31 +02:00
02330fcc75 ACP EmergencyFilter: Do not loop on choices to show the picked one 2022-10-06 22:42:35 +02:00
a324121f01 ACP IntensityFilter: Do not loop on choices to show the picked one 2022-10-06 22:39:00 +02:00
36590e7810 fix cs: mismatch header and strict type declaration 2022-10-06 22:25:45 +02:00
ba7adf59ff [Fixed] Add required import for exception handling 2022-10-06 22:25:45 +02:00
9699e2304a fix cs: declare type and license header mismatch 2022-10-06 22:25:43 +02:00
67104d15cd [Fixed] Add required import for exception handling 2022-10-06 22:22:08 +02:00
62386378fc [Feature] show period's localisation (address) into reassign and regulation list 2022-10-06 22:14:39 +02:00
dea217a670 [Dev] Add unit test to PickPostalCodeType 2022-10-06 22:06:45 +02:00
9aae36556b [Feature] Prevent sending notification to user when bulk reassign 2022-10-06 21:44:23 +02:00
f82bc02f8b Feature: Allow to filter periods to reassign by postal code 2022-10-06 20:53:29 +02:00
49731777b4 fix cs: declare type and license header mismatch 2022-10-06 20:51:44 +02:00
c6b78d1c0c Merge branch '111_exports_suite' of gitlab.com:Chill-Projet/chill-bundles into 111_exports_suite 2022-10-06 18:48:38 +02:00
c73bb10dce issue 644: Use Vue AddPersons picker to select users 2022-10-06 18:47:53 +02:00
nobohan
713b8357cd [person]: add new test for social action normalizer 2022-10-06 15:26:44 +02:00
7e65e97caf fix cs: header and declare strict type order 2022-10-06 10:21:16 +02:00
087375f648 Merge branch '111_exports_suite' into calendar/finalization 2022-10-06 09:31:43 +02:00
66af19c43d Merge branch 'master' into 111_exports_suite 2022-10-06 08:55:57 +02:00
b394d7247d fix cs: too much line before declaring strict type 2022-10-06 08:55:32 +02:00
fb7c6f0a9b fix cs: too much line before declaring strict type 2022-10-06 08:54:23 +02:00
445a8ac8c7 Merge branch 'master' into 111_exports_suite 2022-10-05 17:09:23 +02:00
67c3f3a840 fix cs with licencse header 2022-10-05 17:08:14 +02:00
845a4e9523 fix cs for doc [ci-skip] 2022-10-05 16:56:00 +02:00
63137c67f4 fix cs 2022-10-05 16:55:13 +02:00
dbf3780593 Merge branch '111_exports_suite' into testing 2022-10-05 15:47:25 +02:00
e4c450cd1b Fixed: typo in service name 2022-10-05 15:46:57 +02:00
642b1e43c8 fix cs 2022-10-05 15:30:55 +02:00
b20a75c2ee Merge branch '111_exports_suite' into testing 2022-10-05 15:28:51 +02:00
d95472ca9d Merge branch '111_exports_suite' into calendar/finalization 2022-10-05 15:28:37 +02:00
908419fbf8 Merge branch 'master' into 111_exports_suite 2022-10-05 15:26:18 +02:00
a967e1ed17 fix cs 2022-10-05 15:23:28 +02:00
58b1778544 Merge commit 'a90e87b1be8f278113b191816e88ad6619bf3101' into 111_exports_suite 2022-10-05 15:14:04 +02:00
c1d96af85f fix cs 2022-10-05 15:08:53 +02:00
71db287ded Merge branch '111_exports_suite' into testing 2022-10-05 14:57:55 +02:00
8a740a25da [Export] Feature: create a aggregator for referrer's main scope on
aggregator
2022-10-05 14:57:15 +02:00
491570a21c [export] Fixed: the scope aggregator (accompanying course) group by
period's scope (and the label didn't show this)

+ extract ScopeRepository and create ScopeRepositoryInterface
2022-10-05 14:56:36 +02:00
5f0a6f37b0 Merge branch '111_exports_suite' into testing 2022-10-05 10:43:35 +02:00
307ed4fb1b Merge branch '111_export_GeographicalUnit' into 111_exports_suite 2022-10-05 10:43:21 +02:00
fa1b5c4a02 Merge branch 'workflow-show-link' into testing 2022-10-05 10:23:08 +02:00
a90e87b1be more explanation for installation instructions 2022-10-05 10:22:30 +02:00
4388331b2f Merge branch '111_exports_suite' into testing 2022-10-05 10:21:42 +02:00
be6b5178cd Merge branch 'master' into 111_exports_suite 2022-10-05 10:16:05 +02:00
58a1af0c78 installation instructions 2022-10-05 09:58:18 +02:00
432acc0ace [export][person] Feature: add filter and aggregator by geographical unit on person 2022-10-04 22:17:16 +02:00
fc567868c1 [export][person] Feature: allow to filter accompanying period by
geographical unit
2022-10-04 15:07:07 +02:00
52435f5331 Feature: aggregator for accompanying course by geographical level 2022-10-04 10:25:34 +02:00
65f6712a15 Fixed: take layer into account for unicity of geographical unit's keys 2022-10-03 17:19:32 +02:00
9c3ac72426 Feature: Create a base importer for geographical units and add index 2022-10-03 15:45:42 +02:00
994160f28a Feature: add a proper entity for geographical unit layer 2022-10-03 13:50:10 +02:00
e1fda324a4 Merge branch '111_exports_suite' into 111_export_GeographicalUnit 2022-10-03 12:00:15 +02:00
9d1c38e978 Merge remote-tracking branch 'origin/testing' into testing 2022-10-03 09:31:44 +02:00
a95f0c538d Merge remote-tracking branch 'origin/master' into testing 2022-10-03 09:31:15 +02:00
99b261b1d7 [person][relations] Fixed: GET request had a body, this prevented to
load files
2022-09-30 17:36:52 +02:00
ffd1145cd0 [apimethods] Fixed: prevent makeFetch to add a null body on GET and HEAD
requests
2022-09-30 17:35:43 +02:00
d1b9400257 [person][relations] Fixed: GET request had a body, this prevented to
load files
2022-09-30 17:31:30 +02:00
fd0e541e3f [workflow] Feature: allow user to retrieve the access link for the
workflow + show dest email for a workflow
2022-09-29 22:09:49 +02:00
ccedebda90 Add new Abstract Filter Test to check qb aliases (for join clauses) 2022-09-29 20:48:56 +02:00
eb6efcefd8 Add new Abstract Aggregator Test to check qb aliases (for join clauses) 2022-09-29 20:48:56 +02:00
ab5ca48968 Merge branch '111_exports_suite' of gitlab.com:Chill-Projet/chill-bundles into 111_exports_suite 2022-09-29 20:48:00 +02:00
e737f20735 batch removing unused $request prophesise in Tests setup() 2022-09-29 20:46:18 +02:00
b7c2903815 keep prophecy when test get 'request_stack' 2022-09-29 20:46:18 +02:00
6bddd320fa Add Activity Export/Export missing tests 2022-09-29 20:46:18 +02:00
f5fb721ddd activity export export tests 2022-09-29 20:46:18 +02:00
2b8fe462ea repair Activity Aggregator Tests 2022-09-29 20:46:18 +02:00
8d1160d093 delete duplicate AggregatorTest 2022-09-29 20:46:18 +02:00
ac39baa5f5 Fixed: avoid the requirement to store person current center, which is a readonly entity 2022-09-29 18:21:14 +02:00
2309484692 Fixed: cascade persist the center history when a person is created 2022-09-28 17:21:39 +02:00
3feb5115a5 Merge remote-tracking branch 'origin/master' into 111_exports_suite 2022-09-28 15:53:43 +02:00
b777e9c819 Merge branch 'person-change-center-history' into '111_exports_suite'
Track the change of person's centers

See merge request Chill-Projet/chill-bundles!454
2022-09-28 13:52:55 +00:00
32f252149b [export] Feature: rely on person's center history to build export's
query
2022-09-28 15:43:58 +02:00
f39b0ee002 [task] Feature: use the resolution of center with person's center
history
2022-09-27 16:09:09 +02:00
451f7f4230 [person][Search] Feature: use the current center history when searching
for person
2022-09-27 10:22:15 +02:00
49d2e98a1a [person] Feature: add a person's center history
The association between Person and Center is now stored in a dedicated
Entity: `PersonCenterHistory`, which have a date interval (start date
and endDate). The SQL counterpart is a table, with a constraint which
ensure that no person might be associated with two center at the same time.

For ease, a view is created to get the current center associated with
the person.

The dedicated migration creates also:

* indexes for a rapid search for person at current date;
* and populate the table from current data, setting the startdate to the
  person's creation date and time if any, `NOW()` unless.

The `Person` entity is also updated to use the information from the
PersonCenterHistory classes, but this commit does not yet delete the
`Center` column.
2022-09-26 21:11:01 +02:00
7813f66935 Merge branch 'calendar/finalization' of gitlab.com:Chill-Projet/chill-bundles into calendar/finalization 2022-09-21 13:31:38 +02:00
9da410afb8 urgency and calendarrange exports 2022-09-21 13:31:24 +02:00
7ef84b9fd0 exports: create new aggregator test (untested) 2022-09-21 13:27:26 +02:00
8d7013b988 Merge branch 'calendar/finalization' of gitlab.com:Chill-Projet/chill-bundles into calendar/finalization 2022-09-21 12:46:03 +02:00
6405f2101f exports: add new tests for calendar aggregators (untested) 2022-09-21 12:45:31 +02:00
d62c09993f Merge branch 'calendar/finalization' of gitlab.com:Chill-Projet/chill-bundles into calendar/finalization 2022-09-21 12:26:29 +02:00
40b4fd00b0 Merge branch 'calendar/finalization' of gitlab.com:Chill-Projet/chill-bundles into calendar/finalization 2022-09-21 12:26:03 +02:00
2331e9ea0f Merge branch 'calendar/finalization' of gitlab.com:Chill-Projet/chill-bundles into calendar/finalization 2022-09-21 12:20:52 +02:00
e90ff67e33 add urgent property to calendar entity 2022-09-21 12:20:39 +02:00
318009c9c8 exports: add new tests for calendar filters (untested) 2022-09-21 11:02:09 +02:00
b13686bbf1 fix geom type in db: multipolygon 2022-09-19 09:07:49 +02:00
841eb57144 GeographicalUnit Filter: add join clauses 2022-09-19 09:07:49 +02:00
236e89a6ae Merge branch 'calendar/finalization' of gitlab.com:Chill-Projet/chill-bundles into calendar/finalization 2022-09-08 13:31:46 +02:00
25cc728f6d adjust translations 2022-09-08 12:30:22 +02:00
2e3f977f3d adjust property name to make it work with changes calendar bundle 2022-09-08 11:59:44 +02:00
48548e020f adjust property name to make it work with changes calendar bundle 2022-09-08 11:30:19 +02:00
d0d7c0babf adjust property name to make it work with changes calendar bundle 2022-09-08 11:25:50 +02:00
c1c472f546 Merge branch 'calendar/finalization' of gitlab.com:Chill-Projet/chill-bundles into calendar/finalization 2022-09-08 11:20:36 +02:00
3822f68574 add querybuilder method to repository 2022-09-08 11:20:27 +02:00
f00e01d44e rename files for coherence with naming elsewhere 2022-09-08 11:17:13 +02:00
2127fb2b54 rename files for coherence with naming elsewhere 2022-09-08 11:08:34 +02:00
283de2cab8 add actionRender in construct, it was missing 2022-09-08 11:03:20 +02:00
f92ac05ed7 Merge branch '111_exports_suite' into calendar/finalization 2022-09-08 10:19:53 +02:00
8efb874742 merge exports branch into calendar branch 2022-09-07 10:11:43 +02:00
2911cb5063 master merged into branch 2022-07-18 15:05:34 +02:00
62dc909708 php cs fixes, stan ok! 2022-07-18 14:51:40 +02:00
6272000588 update changelog 2022-07-18 12:53:20 +02:00
de4cd60b3d query adjusted to fetch only active objectives for a social action 2022-07-18 12:52:02 +02:00
2095 changed files with 28402 additions and 10083 deletions

2
.gitignore vendored
View File

@@ -24,3 +24,5 @@ docs/build/
/.php-cs-fixer.cache
/.idea/
/.psalm/
node_modules/*

View File

@@ -1,15 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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);
/** @var \drupol\PhpCsFixerConfigsPhp\Config\Php73 $config */
$config = require __DIR__ . '/tests/app/vendor/drupol/php-conventions/config/php73/php_cs_fixer.config.php';
$config

View File

@@ -16,6 +16,8 @@ and this project adheres to
* [activity][export] DX/Feature: use of an `ActivityTypeRepositoryInterface` instead of the old-style EntityRepository
* [person][export] Fixed: some inconsistency with date filter on accompanying courses
* [person][export] Fixed: use left join for related entities in accompanying course aggregators
* [workflow] Feature: allow user to copy and send manually the access link for the workflow
* [workflow] Feature: show the email addresses that received an access link for the workflow
## Test releases
@@ -32,8 +34,12 @@ and this project adheres to
* [person-thirdparty]: fix quick-add of names that consist of multiple parts (eg. De Vlieger) within onthefly modal person/thirdparty
* [search]: Order of birthdate fields changed in advanced search to avoid confusion.
* [workflow]: Constraint added to workflow (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/675)
* [social_action]: only show active objectives (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/625)
* [household]: Reposition and cut button for enfant hors menage have been deleted (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/620)
* [admin]: Add crud for composition type in admin (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/611)
* [social_action]: only show active objectives (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/625)
## Test releases
### 2022-05-30

View File

@@ -14,7 +14,7 @@
"champs-libres/wopi-lib": "dev-master#8615f4a45a39fc2b6a98765ea835fcfd39618787",
"doctrine/doctrine-bundle": "^2.1",
"doctrine/doctrine-migrations-bundle": "^3.0",
"doctrine/orm": "^2.7",
"doctrine/orm": "2.13.5",
"erusev/parsedown": "^1.7",
"graylog2/gelf-php": "^1.5",
"knplabs/knp-menu-bundle": "^3.0",

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\PersonBundle\Export\Filter;
use Chill\MainBundle\Export\ExportElementValidatedInterface;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\PersonBundle\Export\Export;
use Chill\MainBundle\Export\ExportInterface;
@@ -18,7 +18,6 @@ use Chill\PersonBundle\Security\Authorization\PersonVoter;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role;
class CountPerson implements ExportInterface
{
@@ -73,9 +72,9 @@ class CountPerson implements ExportInterface
return ['export_result'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle()
@@ -106,9 +105,9 @@ class CountPerson implements ExportInterface
return $qb;
}
public function requiredRole()
public function requiredRole(): string
{
return new Role(PersonVoter::STATS);
return PersonVoter::STATS;
}
public function supportsModifiers()

View File

@@ -0,0 +1,93 @@
.. Copyright (C) 2014-2023 Champs Libres Cooperative SCRLFS
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _cronjob:
Cron jobs
*********
Some tasks must be executed regularly: refresh some materialized views, remove old data, ...
For this purpose, one can programmatically implements a "cron job", which will be scheduled by a specific command.
The command :code:`chill:cron-job:execute`
==========================================
The command :code:`chill:cron-job:execute` will schedule a task, one by one. In a classical implementation, it should
be executed every 15 minutes (more or less), to ensure that every task can be executed.
.. warning::
This command should not be executed in parallel. The installer should ensure that two job are executed concurrently.
How to implements a cron job ?
==============================
Implements a :code:`Chill\MainBundle\Cron\CronJobInterface`. Here is an example:
.. code-block:: php
namespace Chill\MainBundle\Service\Something;
use Chill\MainBundle\Cron\CronJobInterface;
use Chill\MainBundle\Entity\CronJobExecution;
use DateInterval;
use DateTimeImmutable;
class MyCronJob implements CronJobInterface
{
public function canRun(?CronJobExecution $cronJobExecution): bool
{
// the parameter $cronJobExecution contains data about the last execution of the cronjob
// if it is null, it should be executed immediatly
if (null === $cronJobExecution) {
return true;
}
if ($cronJobExecution->getKey() !== $this->getKey()) {
throw new UnexpectedValueException();
}
// this cron job should be executed if the last execution is greater than one day, but only during the night
$now = new DateTimeImmutable('now');
return $cronJobExecution->getLastStart() < $now->sub(new DateInterval('P1D'))
&& in_array($now->format('H'), self::ACCEPTED_HOURS, true)
// introduce a random component to ensure a roll of task execution when multiple instances are hosted on same machines
&& mt_rand(0, 5) === 0;
}
public function getKey(): string
{
return 'arbitrary-and-unique-key';
}
public function run(): void
{
// here, we execute the command
}
}
How are cron job scheduled ?
============================
If the command :code:`chill:cron-job:execute` is run with one or more :code:`job` argument, those jobs are run, **without checking that the job can run** (the method :code:`canRun` is not executed).
If any :code:`job` argument is given, the :code:`CronManager` schedule job with those steps:
* the tasks are ordered, with:
* a priority is given for tasks that weren't never executed;
* then, the tasks are ordered, the last executed are the first in the list
* then, for each tasks, and in the given order, the first task where :code:`canRun` return :code:`TRUE` will be executed.
The command :code:`chill:cron-job:execute` execute **only one** task.

View File

@@ -34,6 +34,7 @@ As Chill rely on the `symfony <http://symfony.com>`_ framework, reading the fram
Useful snippets <useful-snippets.rst>
manual/index.rst
Assets <assets.rst>
Cron Jobs <cronjob.rst>
Layout and UI
**************

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\MyBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\HealthBundle\Controller;
use Chill\HealthBundle\Security\Authorization\ConsultationVoter;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\MainBundle\DependencyInjection;
use Chill\MainBundle\DependencyInjection\Widget\AddWidgetConfigurationTrait;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\MainBundle\DependencyInjection;
use Chill\MainBundle\DependencyInjection\Widget\Factory\WidgetFactoryInterface;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\PersonBundle\Widget;
use Chill\MainBundle\DependencyInjection\Widget\Factory\AbstractWidgetFactory;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\PersonBundle\Widget;
use Chill\MainBundle\Security\Authorization\AuthorizationHelper;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\PersonBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;

View File

@@ -18,6 +18,7 @@ Installation & Usage
:maxdepth: 2
prod.rst
load-addresses.rst
prod-calendar-sms-sending.rst
msgraph-configure.rst
@@ -28,25 +29,33 @@ Requirements
- This project use `docker <https://docker.com>`_ to be run. As a developer, use `docker-compose <https://docs.docker.com/compose/overview/>`_ to bootstrap a dev environment in a glance. You do not need any other dependencies ;
- Make is used to automate scripts.
Installation in development mode
********************************
Installation
************
If you plan to run chill in production:
1. install it locally first, and check if everything is ok on your local machine;
2. once ready, build the image from your local machine, and deploy them.
If you want to develop some bundles, the first step is sufficient (until you deploy on production).
1. Get the code
===============
Clone or download the chill-app project and `cd` into the main directory.
Clone or download the chill-skeleton project and `cd` into the main directory.
.. code-block:: bash
git clone https://gitlab.com/Chill-Projet/chill-app.git
git clone https://gitlab.com/Chill-Projet/chill-skeleton-basic.git
cd chill-app
As a developer, the code will stay on your computer and will be executed in docker container. To avoid permission problem, the code should be run with the same uid/gid from your current user. This is why we get your current user id with the command ``id -u`` in each following scripts.
2. Prepare composer download of sources
=======================================
2. Prepare composer to download the sources
===========================================
As you are running in dev, you must configure an auth token for getting the source code.
@@ -55,7 +64,7 @@ As you are running in dev, you must configure an auth token for getting the sour
If you skip this part, the code will be downloaded from dist instead of source (with git repository). You will probably replace the source manually, but the next time you will run ```composer update```, your repository will be replaced and you might loose something.
1. Create a personal access token from https://gitlab.com/-/profile/personal_access_tokens, with the `read_api` scope.
2. add a file called ```.composer/auth.json```:
2. add a file called ```.composer/auth.json``` with this content:
.. code-block:: json
@@ -74,7 +83,19 @@ Copy ```docker-compose.override.dev.yml``` into ```docker-compose.override.yml``
cp docker-compose.override.dev.template.yml docker-compose.override.yml
Configure your environment variables, by creating a .env.local file and override the desired variables.
2. Prepare your variables and docker-compose
============================================
Have a look at the variable in ``.env`` and check if you need to adapt them. If they do not adapt with your need, or if some are missing:
1. copy the file as ``.env.local``: ``cp .env .env.local``
2. you may replace some variables inside ``.env``
Prepare also you docker-compose installation, and adapt it to your needs:
1. If you plan to deploy on dev, copy the file ``docker-compose.override.dev.template.yml`` to ``docker-compose.override.yml``.
2. adapt to your needs.
**Note**: If you intend to use the bundle ``Chill-Doc-Store``, you will need to configure and install an openstack object storage container with temporary url middleware. You will have to configure `secret keys <https://docs.openstack.org/swift/latest/api/temporary_url_middleware.html#secret-keys>`_.
@@ -94,6 +115,17 @@ This script will :
3. install the php dependencies
4. build assets
.. warning::
The script will work only if the binary ``docker-compose`` is located into your ``PATH``. If you use ``compose`` as a docker plugin,
you can simulate this binary by creating this file at (for instance), ``/usr/local/bin/docker-compose`` (and run ``chmod +x /usr/local/bin/docker-compose``):
.. code-block:: bash
#!/bin/bash
/usr/bin/docker compose "$@"
.. note::
@@ -117,13 +149,20 @@ This script will :
.. code-block:: bash
make migrate
# mount into to container
./docker-php.sh
# and load fixtures
bin/console doctrine:migrations:migrate
Chill will be available at ``http://localhost:8001.`` Currently, there isn't any user or data. To add fixtures, run
.. code-block:: bash
docker-compose exec --user $(id -u) php bin/console doctrine:fixtures:load --purge-with-truncate
# mount into to container
./docker-php.sh
# and load fixtures
bin/console doctrine:fixtures:load --purge-with-truncate
There are several users available:
@@ -132,29 +171,7 @@ There are several users available:
The password is always ``password``.
Now, read `Operations` below.
Prepare for development
***********************
Add a Gitlab token to ensure that you get always the source code:
1. generate a gitlab token there: https://gitlab.com/oauth/token
2. run this command (in php container, at the app's root): :code:`composer config gitlab-token.gitlab.com <your token>`
The auth token should appears now in the directory :code:`.composer`:
.. code-block: bash
$ cat .composer/auth.json
{
"gitlab-token": {
"gitlab.com": "<your token>"
}
}
See also "how to switch branch and get new dependencies".
Now, read `Operations` below. For running in production, read `prod_`.
Operations
@@ -175,7 +192,7 @@ How to execute the console ?
.. code-block:: bash
# if a container is running
docker-compose exec --user $(id -u) php bin/console
./docker-php.sh
# if not
docker-compose run --user $(id -u) php bin/console
@@ -185,7 +202,8 @@ How to create the database schema (= run migrations) ?
.. code-block:: bash
# if a container is running
docker-compose exec --user $(id -u) php bin/console doctrine:migrations:migrate
./docker-php.sh
bin/console doctrine:migrations:migrate
# if not
docker-compose run --user $(id -u) php bin/console doctrine:migrations:migrate
@@ -203,7 +221,8 @@ How to load fixtures ? (development mode only)
.. code-block:: bash
# if a container is running
docker-compose exec --user $(id -u) php bin/console doctrine:fixtures:load
./docker-php.sh
bin/console doctrine:fixtures:load
# if not
docker-compose run --user $(id -u) php bin/console doctrine:fixtures:load
@@ -213,7 +232,7 @@ How to open a terminal in the project
.. code-block:: bash
# if a container is running
docker-compose exec --user $(id -u) php /bin/bash
./docker-php.sh
# if not
docker-compose run --user $(id -u) php /bin/bash
@@ -223,21 +242,22 @@ How to run composer ?
.. code-block:: bash
# if a container is running
docker-compose exec --user $(id -u) php ./composer.phar
./docker-php.sh
composer
# if not
docker-compose run --user $(id -u) php ./composer.phar
docker-compose run --user $(id -u) php composer
How to access to PGADMIN ?
==========================
Pgadmin is installed with docker-compose.
Pgadmin is installed with docker-compose, and is available **only if you uncomment the appropriate lines into ``docker-compose.override.yml``.
You can access it at ``http://localhost:8002``.
Credentials:
- login: admin@chill.social
- password: password
- login: from the variable you set into ``docker-composer.override.yml``
- password: same :-)
How to run tests ?
==================
@@ -246,18 +266,44 @@ Tests reside inside the installed bundles. You must `cd` into that directory, do
**Note**: some bundle require the fixture to be executed. See the dedicated _how-tos_.
Exemple, for running test inside `main` bundle:
Exemple, for running unit test inside `main` bundle:
.. code-block:: bash
# mount into the php image
docker-compose run --user $(id -u) php /bin/bash
./docker-php.sh
# cd into main directory
cd vendor/chill-project/main
cd vendor/chill-project/chill-bundles
# download deps
php ../../../composer.phar install
git submodule init
git submodule update
composer install
# run tests
/vendor/bin/phpunit
bin/phpunit src/Bundle/path/to/your/test
Or for running tests to check code style and php conventions with csfixer and phpstan:
.. code-block:: bash
# run code style fixer
bin/grumphp run --tasks=phpcsfixer
# run phpstan
bin/grumphp run --tasks=phpstan
.. note::
To avoid phpstan block your commits:
.. code-block:: bash
git commit -n ...
To avoid phpstan block your commits permanently:
.. code-block:: bash
./bin/grumphp git:deinit
How to run webpack interactively
================================
@@ -269,10 +315,14 @@ How to switch the branch for chill-bundles, and get new dependencies
During development, you will switch to new branches for chill-bundles. As long as the dependencies are equals, this does not cause any problem. But sometimes, a new branch introduces a new dependency, and you must download it.
.. warning::
Ensure that you have gitlab-token ready before updating your branches. See above.
In order to do that without pain, use those steps:
0. Ensuire you have a token, set
1. at the app's root, update the `composer.json` to your current branch:
1. at the app's root, update the ``composer.json`` to your current branch:
.. code-block:: json
@@ -281,14 +331,7 @@ In order to do that without pain, use those steps:
"chill-bundles": "dev-<my-branch>@dev"
}
2. mount into the php container, and run `composer update`
Build the documentation API
===========================
A basic configuration of `sami <https://github.com/FriendsOfPhp/Sami>`_ is embedded within the project.
A configuration file for `phpDocumentor <https://www.phpdoc.org>`_ is present.
2. mount into the php container (``./docker-php.sh``), and run ``composer update``
Error `An exception has been thrown during the rendering of a template ("Asset manifest file "/var/www/app/web/build/manifest.json" does not exist.").` on first run
====================================================================================================================================================================
@@ -303,7 +346,8 @@ Currently, to run this software in production, the *state of the art* is the fol
1. Run the software locally and tweak the configuration to your needs ;
2. Build the image and store them into a private container registry. This can be done using :code:`make build-and-push-image`.
To be sure to target the correct container registry, you have to adapt the values ``IMAGE_NGINX`` and ``IMAGE_PHP`` date in the ``.env`` file.
To be sure to target the correct container registry, you have to adapt the image names into your ``docker-compose.override.yml`` file.
3. Push the image on your registry, or upload them to the destination machine using ``docker image save`` and ``docker image load``.
3. Run the image on your production server, using docker-compose or eventually docker stack. You have to customize the variable set in docker-compose.
See also the :ref:`running-production-tips-and-tricks` below.
@@ -335,7 +379,7 @@ It is worth having an eye on the configuration of logstash container.
Design principles
*****************
Why the DB URL is set in environment, and not in parameters.yml ?
Why the DB URL is also set in environment, and not in .env file ?
=================================================================
Because, at startup, a script does check the db is up and, if not, wait for a couple of seconds before running ``entrypoint.sh``. For avoiding double configuration, the configuration of the PHP app takes his configuration from environment also (and it will be standard in future releases, with symfony 4.0).

View File

@@ -0,0 +1,50 @@
.. _addresses:
Addresses
*********
Chill can store a list of geolocated address references, which are used to suggest address and ensure that the data is correctly stored.
Those addresses may be load from a dedicated source.
In France
=========
The address are loaded from the `BANO <https://bano.openstreetmap.fr/>`_. The postal codes are loaded from `the official list of
postal codes <https://datanova.laposte.fr/explore/dataset/laposte_hexasmal/information/>`_
.. code-block:: bash
# first, load postal codes
bin/console chill:main:postal-code:load:FR
# then, load all addresses, by departement (multiple departement can be loaded by repeating the departement code
bin/console chill:main:address-ref-from-bano 57 54 51
In Belgium
==========
Addresses are prepared from the `BeST Address data <https://www.geo.be/catalog/details/ca0fd5c0-8146-11e9-9012-482ae30f98d9>`_.
Postal code are loaded from this database. There is no need to load postal codes from another source (actually, this is strongly discouraged).
The data are prepared for Chill (`See this repository <https://gitea.champs-libres.be/Chill-project/belgian-bestaddresses-transform/releases>`_).
One can select postal code by his first number (:code:`1xxx` for postal codes from 1000 to 1999), or a limited list for development purpose.
.. code-block:: bash
# load postal code from 1000 to 3999:
bin/console chill:main:address-ref-from-best-addresse 1xxx 2xxx 3xxx
# load only an extract (for dev purposes)
bin/console chill:main:address-ref-from-best-addresse extract
# load full addresses (discouraged)
bin/console chill:main:address-ref-from-best-addresse full
.. note::
There is a possibility to load the full list of addresses is discouraged: the loading is optimized with smaller extracts.
Once you load the full list, it is not possible to load smaller extract: each extract loaded **after** will not
delete the addresses loaded with the full extract (and some addresses will be present twice).

View File

@@ -6,6 +6,8 @@ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
.. _prod:
Installation for production
###########################
@@ -36,6 +38,19 @@ This should be adapted to your needs:
* Think about how you will backup your database. Some adminsys find easier to store database outside of docker, which might be easier to administrate or replicate.
Cron jobs
=========
The command :code:`chill:cron-job:execute` should be executed every 15 minutes (more or less).
This command should never be executed concurrently. It should be not have more than one process for a single instance.
Post-install tasks
==================
- import addresses. See :ref:`addresses`.
Tweak symfony messenger
=======================

View File

@@ -6,7 +6,7 @@ Add condition with distinct alias on each export join clauses (Indicators + Filt
These are alias conventions :
| Entity | Join | Attribute | Alias |
|:----------------------------------------|:----------------------------------------|:-------------------------------------------|:----------------------------------|
|:----------------------------------------|:----------------------------------------|:-------------------------------------------|:---------------------------------------|
| AccompanyingPeriod::class | | | acp |
| | AccompanyingPeriodWork::class | acp.works | acpw |
| | AccompanyingPeriodParticipation::class | acp.participations | acppart |
@@ -17,6 +17,7 @@ These are alias conventions :
| | Scope::class | acp.scopes | acpscope |
| | SocialIssue::class | acp.socialIssues | acpsocialissue |
| | User::class | acp.user | acpuser |
| | AccompanyingPeriopStepHistory::class | acp.stepHistories | acpstephistories |
| AccompanyingPeriodWork::class | | | acpw |
| | AccompanyingPeriodWorkEvaluation::class | acpw.accompanyingPeriodWorkEvaluations | workeval |
| | User::class | acpw.referrers | acpwuser |
@@ -35,6 +36,7 @@ These are alias conventions :
| | MaritalStatus::class | person.maritalStatus | personmarital |
| | VendeePerson::class | | vp |
| | VendeePersonMineur::class | | vpm |
| | CurrentPersonAddress::class | person.currentPersonAddress | currentPersonAddress (on a given date) |
| ResidentialAddress::class | | | resaddr |
| | ThirdParty::class | resaddr.hostThirdParty | tparty |
| ThirdParty::class | | | tparty |
@@ -59,6 +61,7 @@ These are alias conventions :
| | User::class | activity.users | actusers |
| | ActivityReason::class | activity.reasons | actreasons |
| | Center::class | actperson.center | actcenter |
| | Person::class | activity.createdBy | actcreator |
| ActivityReason::class | | | actreasons |
| | ActivityReasonCategory::class | actreason.category | actreasoncat |
| Calendar::class | | | cal |

67
package.json Normal file
View File

@@ -0,0 +1,67 @@
{
"name": "chill",
"version": "2.0.0",
"devDependencies": {
"@alexlafroscia/yaml-merge": "^4.0.0",
"@apidevtools/swagger-cli": "^4.0.4",
"@babel/core": "^7.20.5",
"@babel/preset-env": "^7.20.2",
"@ckeditor/ckeditor5-build-classic": "^35.3.2",
"@ckeditor/ckeditor5-dev-utils": "^31.1.13",
"@ckeditor/ckeditor5-dev-webpack-plugin": "^31.1.13",
"@ckeditor/ckeditor5-markdown-gfm": "^35.3.2",
"@ckeditor/ckeditor5-theme-lark": "^35.3.2",
"@ckeditor/ckeditor5-vue": "^4.0.1",
"@symfony/webpack-encore": "^4.1.0",
"@tsconfig/node14": "^1.0.1",
"bindings": "^1.5.0",
"bootstrap": "^5.0.1",
"chokidar": "^3.5.1",
"fork-awesome": "^1.1.7",
"jquery": "^3.6.0",
"node-sass": "^8.0.0",
"popper.js": "^1.16.1",
"postcss-loader": "^7.0.2",
"raw-loader": "^4.0.2",
"sass-loader": "^13.0.0",
"select2": "^4.0.13",
"select2-bootstrap-theme": "0.1.0-beta.10",
"style-loader": "^3.3.1",
"ts-loader": "^9.3.1",
"typescript": "^4.7.2",
"vue-loader": "^17.0.0",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1"
},
"dependencies": {
"@fullcalendar/core": "^5.11.0",
"@fullcalendar/daygrid": "^5.11.0",
"@fullcalendar/interaction": "^5.11.0",
"@fullcalendar/list": "^5.11.0",
"@fullcalendar/timegrid": "^5.11.0",
"@fullcalendar/vue3": "^5.11.1",
"@popperjs/core": "^2.9.2",
"dropzone": "^5.7.6",
"es6-promise": "^4.2.8",
"leaflet": "^1.7.1",
"masonry-layout": "^4.2.2",
"mime": "^3.0.0",
"swagger-ui": "^4.15.5",
"vis-network": "^9.1.0",
"vue": "^3.2.37",
"vue-i18n": "^9.1.6",
"vue-multiselect": "3.0.0-alpha.2",
"vue-toast-notification": "^2.0",
"vuex": "^4.0.0"
},
"browserslist": [
"Firefox ESR"
],
"scripts": {
"dev-server": "encore dev-server",
"dev": "encore dev",
"watch": "encore dev --watch",
"build": "encore production --progress"
},
"private": true
}

View File

@@ -5,11 +5,6 @@ parameters:
count: 1
path: src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
-
message: "#^Access to an undefined property Chill\\\\PersonBundle\\\\Entity\\\\Household\\\\PersonHouseholdAddress\\:\\:\\$relation\\.$#"
count: 1
path: src/Bundle/ChillPersonBundle/Entity/Household/PersonHouseholdAddress.php
-
message: "#^Access to an undefined property Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\:\\:\\$work\\.$#"
count: 1
@@ -30,11 +25,6 @@ parameters:
count: 1
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php
-
message: "#^Undefined variable\\: \\$choiceSlug$#"
count: 1
path: src/Bundle/ChillPersonBundle/Export/Export/ListPerson.php
-
message: "#^Undefined variable\\: \\$choiceSlug$#"
count: 1

View File

@@ -23,150 +23,6 @@ parameters:
count: 1
path: src/Bundle/ChillActivityBundle/Entity/ActivityReasonCategory.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/ChillActivityBundle/Export/Aggregator/ActivityReasonAggregator.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Aggregator\\\\ActivityReasonAggregator\\:\\:addRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Aggregator/ActivityReasonAggregator.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/ChillActivityBundle/Export/Aggregator/ActivityTypeAggregator.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Aggregator\\\\ActivityTypeAggregator\\:\\:addRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Aggregator/ActivityTypeAggregator.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/ChillActivityBundle/Export/Aggregator/ActivityUserAggregator.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Aggregator\\\\ActivityUserAggregator\\:\\:addRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Aggregator/ActivityUserAggregator.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/ChillActivityBundle/Export/Export/CountActivity.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Export\\\\CountActivity\\:\\:requiredRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Export/CountActivity.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/ChillActivityBundle/Export/Export/ListActivity.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Export\\\\ListActivity\\:\\:requiredRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Export/ListActivity.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/ChillActivityBundle/Export/Export/StatActivityDuration.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Export\\\\StatActivityDuration\\:\\:requiredRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Export/StatActivityDuration.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Filter\\\\ActivityDateFilter\\:\\:addRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Filter/ActivityDateFilter.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/ChillActivityBundle/Export/Filter/ActivityReasonFilter.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Filter\\\\ActivityReasonFilter\\:\\:addRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Filter/ActivityReasonFilter.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/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Filter\\\\ActivityTypeFilter\\:\\:addRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Filter/ActivityTypeFilter.php
-
message: """
#^Return type of method Chill\\\\ActivityBundle\\\\Export\\\\Filter\\\\PersonHavingActivityBetweenDateFilter\\:\\:addRole\\(\\) has typehint with 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/ChillActivityBundle/Export/Filter/PersonHavingActivityBetweenDateFilter.php
-
message: """
#^Fetching class constant class of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
@@ -175,13 +31,6 @@ parameters:
count: 1
path: src/Bundle/ChillActivityBundle/Form/ActivityType.php
-
message: """
#^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
Use getReachableCircles$#
"""
count: 1
path: src/Bundle/ChillActivityBundle/Repository/ActivityACLAwareRepository.php
-
message: """
@@ -294,14 +143,6 @@ parameters:
count: 1
path: src/Bundle/ChillEventBundle/Form/Type/PickEventType.php
-
message: """
#^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
Use getReachableCircles$#
"""
count: 1
path: src/Bundle/ChillEventBundle/Search/EventSearch.php
-
message: """
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
@@ -374,38 +215,6 @@ parameters:
count: 1
path: src/Bundle/ChillMainBundle/Entity/User.php
-
message: """
#^Return type of method Chill\\\\MainBundle\\\\Export\\\\DirectExportInterface\\:\\:requiredRole\\(\\) has typehint with 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/ChillMainBundle/Export/DirectExportInterface.php
-
message: """
#^Return type of method Chill\\\\MainBundle\\\\Export\\\\ExportInterface\\:\\:requiredRole\\(\\) has typehint with 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/ChillMainBundle/Export/ExportInterface.php
-
message: """
#^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
Use getReachableCircles$#
"""
count: 1
path: src/Bundle/ChillMainBundle/Export/ExportManager.php
-
message: """
#^Return type of method Chill\\\\MainBundle\\\\Export\\\\ModifierInterface\\:\\:addRole\\(\\) has typehint with 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/ChillMainBundle/Export/ModifierInterface.php
-
message: """
#^Class Chill\\\\MainBundle\\\\Form\\\\Event\\\\CustomizeFormEvent extends deprecated class Symfony\\\\Component\\\\EventDispatcher\\\\Event\\:
@@ -565,142 +374,6 @@ parameters:
count: 2
path: src/Bundle/ChillPersonBundle/Entity/Person.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Aggregator\\\\AgeAggregator\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Aggregator/AgeAggregator.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Aggregator\\\\CountryOfBirthAggregator\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Aggregator\\\\GenderAggregator\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Aggregator/GenderAggregator.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Aggregator\\\\NationalityAggregator\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Aggregator/NationalityAggregator.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/ChillPersonBundle/Export/Export/CountPerson.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Export\\\\CountPerson\\:\\:requiredRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Export/CountPerson.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/ChillPersonBundle/Export/Export/ListPerson.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Export\\\\ListPerson\\:\\:requiredRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Export/ListPerson.php
-
message: """
#^Call to deprecated method execute\\(\\) of class Doctrine\\\\DBAL\\\\Statement\\:
Statement\\:\\:execute\\(\\) is deprecated, use Statement\\:\\:executeQuery\\(\\) or executeStatement\\(\\) instead$#
"""
count: 1
path: src/Bundle/ChillPersonBundle/Export/Export/ListPersonDuplicate.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/ChillPersonBundle/Export/Export/ListPersonDuplicate.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Export\\\\ListPersonDuplicate\\:\\:requiredRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Export/ListPersonDuplicate.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Filter\\\\AccompanyingPeriodClosingFilter\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Filter/AccompanyingPeriodClosingFilter.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Filter\\\\AccompanyingPeriodFilter\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Filter/AccompanyingPeriodFilter.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Filter\\\\AccompanyingPeriodOpeningFilter\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Filter/AccompanyingPeriodOpeningFilter.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Filter\\\\BirthdateFilter\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Filter/BirthdateFilter.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Filter\\\\GenderFilter\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Filter/GenderFilter.php
-
message: """
#^Return type of method Chill\\\\PersonBundle\\\\Export\\\\Filter\\\\NationalityFilter\\:\\:addRole\\(\\) has typehint with 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/ChillPersonBundle/Export/Filter/NationalityFilter.php
-
message: """
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
@@ -754,14 +427,6 @@ parameters:
count: 1
path: src/Bundle/ChillPersonBundle/Widget/PersonListWidget.php
-
message: """
#^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
Use getReachableCircles$#
"""
count: 1
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
-
message: """
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
@@ -770,37 +435,6 @@ parameters:
count: 3
path: src/Bundle/ChillReportBundle/Controller/ReportController.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/ChillReportBundle/Export/Export/ReportList.php
-
message: """
#^Return type of method Chill\\\\ReportBundle\\\\Export\\\\Export\\\\ReportList\\:\\:requiredRole\\(\\) has typehint with 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/ChillReportBundle/Export/Export/ReportList.php
-
message: """
#^Return type of method Chill\\\\ReportBundle\\\\Export\\\\Filter\\\\ReportDateFilter\\:\\:addRole\\(\\) has typehint with 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/ChillReportBundle/Export/Filter/ReportDateFilter.php
-
message: """
#^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
Use getReachableCircles$#
"""
count: 1
path: src/Bundle/ChillReportBundle/Form/ReportType.php
-
message: """
@@ -810,14 +444,6 @@ parameters:
count: 1
path: src/Bundle/ChillReportBundle/Form/ReportType.php
-
message: """
#^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
Use getReachableCircles$#
"""
count: 1
path: src/Bundle/ChillReportBundle/Search/ReportSearch.php
-
message: """
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:
@@ -826,13 +452,6 @@ parameters:
count: 1
path: src/Bundle/ChillReportBundle/Search/ReportSearch.php
-
message: """
#^Call to deprecated method getReachableScopes\\(\\) of class Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:
Use getReachableCircles$#
"""
count: 2
path: src/Bundle/ChillReportBundle/Timeline/TimelineReportProvider.php
-
message: """
@@ -898,14 +517,6 @@ parameters:
count: 1
path: src/Bundle/ChillTaskBundle/Form/SingleTaskType.php
-
message: """
#^Parameter \\$centerResolverDispatcher of method Chill\\\\TaskBundle\\\\Repository\\\\SingleTaskAclAwareRepository\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
"""
count: 1
path: src/Bundle/ChillTaskBundle/Repository/SingleTaskAclAwareRepository.php
-
message: """
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role\\:

View File

@@ -10,16 +10,6 @@ parameters:
count: 1
path: src/Bundle/ChillActivityBundle/Entity/ActivityReasonCategory.php
-
message: "#^Method Chill\\\\ActivityBundle\\\\Export\\\\Export\\\\StatActivityDuration\\:\\:getDescription\\(\\) should return string but return statement is missing\\.$#"
count: 1
path: src/Bundle/ChillActivityBundle/Export/Export/StatActivityDuration.php
-
message: "#^Method Chill\\\\ActivityBundle\\\\Export\\\\Export\\\\StatActivityDuration\\:\\:getTitle\\(\\) should return string but return statement is missing\\.$#"
count: 1
path: src/Bundle/ChillActivityBundle/Export/Export/StatActivityDuration.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 1
@@ -245,11 +235,6 @@ parameters:
count: 1
path: src/Bundle/ChillMainBundle/Entity/User.php
-
message: "#^Only booleans are allowed in a ternary operator condition, mixed given\\.$#"
count: 1
path: src/Bundle/ChillMainBundle/Export/Formatter/SpreadsheetListFormatter.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 1
@@ -335,21 +320,6 @@ parameters:
count: 6
path: src/Bundle/ChillPersonBundle/Command/ImportPeopleFromCSVCommand.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 1
path: src/Bundle/ChillPersonBundle/Export/Aggregator/CountryOfBirthAggregator.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 1
path: src/Bundle/ChillPersonBundle/Export/Aggregator/NationalityAggregator.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 2
path: src/Bundle/ChillPersonBundle/Export/Export/ListPerson.php
-
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
count: 1

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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;
use Symfony\Component\HttpKernel\Bundle\Bundle;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Controller;
use Chill\ActivityBundle\Entity\Activity;
@@ -42,7 +42,6 @@ use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Serializer\SerializerInterface;
use function array_key_exists;
@@ -364,6 +363,7 @@ final class ActivityController extends AbstractController
if ($person instanceof Person) {
$entity->setPerson($person);
$entity->getPersons()->add($person);
}
if ($accompanyingPeriod instanceof AccompanyingPeriod) {

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Controller;
use Chill\ActivityBundle\Entity\ActivityReasonCategory;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Controller;
use Chill\ActivityBundle\Entity\ActivityReason;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Controller;
use Chill\MainBundle\CRUD\Controller\CRUDController;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Controller;
use Chill\MainBundle\CRUD\Controller\CRUDController;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Controller;
use Chill\MainBundle\CRUD\Controller\CRUDController;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DataFixtures\ORM;
use Chill\ActivityBundle\Entity\Activity;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DataFixtures\ORM;
use Chill\ActivityBundle\Entity\Activity;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DataFixtures\ORM;
use Chill\ActivityBundle\Entity\ActivityReason;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DataFixtures\ORM;
use Chill\ActivityBundle\Entity\ActivityReasonCategory;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DataFixtures\ORM;
use Chill\ActivityBundle\Entity\ActivityType;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DataFixtures\ORM;
use Chill\ActivityBundle\Entity\ActivityTypeCategory;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DataFixtures\ORM;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DependencyInjection;
use Chill\ActivityBundle\Security\Authorization\ActivityVoter;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;

View File

@@ -1,18 +1,22 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Entity;
use Chill\ActivityBundle\Validator\Constraints as ActivityValidator;
use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\MainBundle\Doctrine\Model\TrackCreationInterface;
use Chill\MainBundle\Doctrine\Model\TrackCreationTrait;
use Chill\MainBundle\Doctrine\Model\TrackUpdateInterface;
use Chill\MainBundle\Doctrine\Model\TrackUpdateTrait;
use Chill\MainBundle\Entity\Center;
use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable;
use Chill\MainBundle\Entity\Embeddable\PrivateCommentEmbeddable;
@@ -55,8 +59,12 @@ use Symfony\Component\Validator\Constraints as Assert;
* getUserFunction="getUser",
* path="scope")
*/
class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterface, HasCentersInterface, HasScopesInterface
class Activity implements AccompanyingPeriodLinkedWithSocialIssuesEntityInterface, HasCentersInterface, HasScopesInterface, TrackCreationInterface, TrackUpdateInterface
{
use TrackCreationTrait;
use TrackUpdateTrait;
public const SENTRECEIVED_RECEIVED = 'received';
public const SENTRECEIVED_SENT = 'sent';

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Entity;
use Doctrine\ORM\Mapping as ORM;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Entity;
use Doctrine\ORM\Mapping as ORM;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Entity;
use Doctrine\Common\Collections\ArrayCollection;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Entity;
use Doctrine\ORM\Mapping as ORM;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Entity;
use Doctrine\ORM\Mapping as ORM;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\EntityListener;
use Chill\ActivityBundle\Entity\Activity;

View File

@@ -0,0 +1,68 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Entity\Activity;
use Chill\MainBundle\Export\AggregatorInterface;
use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
class ByActivityNumberAggregator implements AggregatorInterface
{
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data): void
{
$qb
->addSelect('(SELECT COUNT(activity.id) FROM ' . Activity::class . ' activity WHERE activity.accompanyingPeriod = acp) AS activity_by_number_aggregator')
->addGroupBy('activity_by_number_aggregator');
}
public function applyOn(): string
{
return Declarations::ACP_TYPE;
}
public function buildForm(FormBuilderInterface $builder): void
{
// No form needed
}
public function getLabels($key, array $values, $data)
{
return static function ($value) {
if ('_header' === $value) {
return '';
}
if (null === $value) {
return '';
}
return $value;
};
}
public function getQueryKeys($data): array
{
return ['activity_by_number_aggregator'];
}
public function getTitle(): string
{
return 'Group acp by activity number';
}
}

View File

@@ -1,32 +1,31 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Repository\UserRepositoryInterface;
use Chill\MainBundle\Templating\Entity\UserRender;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ByUserAggregator implements AggregatorInterface
class ByCreatorAggregator implements AggregatorInterface
{
private UserRender $userRender;
private UserRepository $userRepository;
private UserRepositoryInterface $userRepository;
public function __construct(
UserRepository $userRepository,
UserRepositoryInterface $userRepository,
UserRender $userRender
) {
$this->userRepository = $userRepository;
@@ -40,12 +39,8 @@ class ByUserAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data)
{
if (!in_array('actusers', $qb->getAllAliases(), true)) {
$qb->leftJoin('activity.users', 'actusers');
}
$qb->addSelect('actusers.id AS users_aggregator');
$qb->addGroupBy('users_aggregator');
$qb->addSelect('IDENTITY(activity.createdBy) AS creator_aggregator');
$qb->addGroupBy('creator_aggregator');
}
public function applyOn(): string
@@ -62,7 +57,7 @@ class ByUserAggregator implements AggregatorInterface
{
return function ($value): string {
if ('_header' === $value) {
return 'Accepted users';
return 'Created by';
}
if (null === $value) {
@@ -77,11 +72,11 @@ class ByUserAggregator implements AggregatorInterface
public function getQueryKeys($data): array
{
return ['users_aggregator'];
return ['creator_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by linked users';
return 'Group activity by creator';
}
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations;
@@ -19,7 +19,7 @@ use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class UserScopeAggregator implements AggregatorInterface
class CreatorScopeAggregator implements AggregatorInterface
{
private ScopeRepository $scopeRepository;
@@ -40,12 +40,12 @@ class UserScopeAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data)
{
if (!in_array('actuser', $qb->getAllAliases(), true)) {
$qb->leftJoin('activity.user', 'actuser');
if (!in_array('actcreator', $qb->getAllAliases(), true)) {
$qb->leftJoin('activity.createdBy', 'actcreator');
}
$qb->addSelect('IDENTITY(actuser.mainScope) AS userscope_aggregator');
$qb->addGroupBy('userscope_aggregator');
$qb->addSelect('IDENTITY(actcreator.mainScope) AS creatorscope_aggregator');
$qb->addGroupBy('creatorscope_aggregator');
}
public function applyOn(): string
@@ -79,11 +79,11 @@ class UserScopeAggregator implements AggregatorInterface
public function getQueryKeys($data): array
{
return ['userscope_aggregator'];
return ['creatorscope_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by userscope';
return 'Group activity by creator scope';
}
}

View File

@@ -1,19 +1,18 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface;
use DateTime;
use Doctrine\ORM\QueryBuilder;
use RuntimeException;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
@@ -50,14 +49,17 @@ class DateAggregator implements AggregatorInterface
switch ($data['frequency']) {
case 'month':
$fmt = 'YYYY-MM';
break;
case 'week':
$fmt = 'YYYY-IW';
break;
case 'year':
$fmt = 'YYYY'; $order = 'DESC';
break; // order DESC does not works !
default:
@@ -98,7 +100,6 @@ class DateAggregator implements AggregatorInterface
switch ($data['frequency']) {
case 'month':
case 'week':
//return $this->translator->trans('for week') .' '. $value ;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator;
use Chill\ActivityBundle\Export\Declarations;
@@ -16,7 +16,6 @@ use Chill\ActivityBundle\Repository\ActivityTypeRepositoryInterface;
use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Closure;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
@@ -45,7 +44,7 @@ class ActivityTypeAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data)
{
if (!in_array('acttype', $qb->getAllAliases(), true)) {
$qb->join('activity.activityType', 'acttype');
$qb->leftJoin('activity.activityType', 'acttype');
}
$qb->addSelect(sprintf('IDENTITY(activity.activityType) AS %s', self::KEY));

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator;
use Chill\ActivityBundle\Export\Declarations;

View File

@@ -0,0 +1,86 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Aggregator;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserRepositoryInterface;
use Chill\MainBundle\Templating\Entity\UserRender;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ActivityUsersAggregator implements AggregatorInterface
{
private UserRender $userRender;
private UserRepositoryInterface $userRepository;
public function __construct(UserRepositoryInterface $userRepository, UserRender $userRender)
{
$this->userRepository = $userRepository;
$this->userRender = $userRender;
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
if (!in_array('actusers', $qb->getAllAliases(), true)) {
$qb->leftJoin('activity.users', 'actusers');
}
$qb
->addSelect('actusers.id AS activity_users_aggregator')
->addGroupBy('activity_users_aggregator');
}
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add on the form
}
public function getLabels($key, array $values, $data)
{
return function ($value) {
if ('_header' === $value) {
return 'Activity users';
}
if (null === $value) {
return '';
}
$u = $this->userRepository->find($value);
return $this->userRender->renderString($u, []);
};
}
public function getQueryKeys($data)
{
return ['activity_users_aggregator'];
}
public function getTitle()
{
return 'Aggregate by activity users';
}
}

View File

@@ -0,0 +1,87 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Aggregator;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Repository\UserJobRepositoryInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ActivityUsersJobAggregator implements \Chill\MainBundle\Export\AggregatorInterface
{
private TranslatableStringHelperInterface $translatableStringHelper;
private UserJobRepositoryInterface $userJobRepository;
public function __construct(UserJobRepositoryInterface $userJobRepository, TranslatableStringHelperInterface $translatableStringHelper)
{
$this->userJobRepository = $userJobRepository;
$this->translatableStringHelper = $translatableStringHelper;
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
if (!in_array('actusers', $qb->getAllAliases(), true)) {
$qb->leftJoin('activity.users', 'actusers');
}
$qb
->addSelect('IDENTITY(actusers.userJob) AS activity_users_job_aggregator')
->addGroupBy('activity_users_job_aggregator');
}
public function applyOn()
{
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add in the form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Users \'s job';
}
if (null === $value) {
return '';
}
$j = $this->userJobRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getLabel()
);
};
}
public function getQueryKeys($data): array
{
return ['activity_users_job_aggregator'];
}
public function getTitle()
{
return 'Aggregate by users job';
}
}

View File

@@ -0,0 +1,87 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Aggregator;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Repository\ScopeRepositoryInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ActivityUsersScopeAggregator implements \Chill\MainBundle\Export\AggregatorInterface
{
private ScopeRepositoryInterface $scopeRepository;
private TranslatableStringHelperInterface $translatableStringHelper;
public function __construct(ScopeRepositoryInterface $scopeRepository, TranslatableStringHelperInterface $translatableStringHelper)
{
$this->scopeRepository = $scopeRepository;
$this->translatableStringHelper = $translatableStringHelper;
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
if (!in_array('actusers', $qb->getAllAliases(), true)) {
$qb->leftJoin('activity.users', 'actusers');
}
$qb
->addSelect('IDENTITY(actusers.mainScope) AS activity_users_main_scope_aggregator')
->addGroupBy('activity_users_main_scope_aggregator');
}
public function applyOn()
{
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder)
{
// nothing to add in the form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Users \'s scope';
}
if (null === $value) {
return '';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['activity_users_main_scope_aggregator'];
}
public function getTitle()
{
return 'Aggregate by users scope';
}
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Aggregator\PersonAggregators;
use Chill\ActivityBundle\Export\Declarations;
@@ -25,8 +25,8 @@ use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use function array_key_exists;
use function count;
use function in_array;
class ActivityReasonAggregator implements AggregatorInterface, ExportElementValidatedInterface
{

View File

@@ -0,0 +1,83 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Aggregator;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface;
use Doctrine\ORM\QueryBuilder;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
class SentReceivedAggregator implements AggregatorInterface
{
private TranslatorInterface $translator;
public function __construct(TranslatorInterface $translator)
{
$this->translator = $translator;
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data): void
{
$qb->addSelect('activity.sentReceived AS activity_sentreceived_aggregator')
->addGroupBy('activity_sentreceived_aggregator');
}
public function applyOn(): string
{
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder): void
{
// No form needed
}
public function getLabels($key, array $values, $data): callable
{
return function (?string $value): string {
if ('_header' === $value) {
return 'export.aggregator.activity.by_sent_received.Sent or received';
}
switch ($value) {
case null:
return '';
case 'sent':
return $this->translator->trans('export.aggregator.activity.by_sent_received.is sent');
case 'received':
return $this->translator->trans('export.aggregator.activity.by_sent_received.is received');
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
};
}
public function getQueryKeys($data): array
{
return ['activity_sentreceived_aggregator'];
}
public function getTitle(): string
{
return 'export.aggregator.activity.by_sent_received.Group activity by sentreceived';
}
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export;
/**

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity;
@@ -17,10 +17,13 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
class AvgActivityDuration implements ExportInterface, GroupedExportInterface
@@ -55,7 +58,7 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
public function getLabels($key, array $values, $data)
{
if ('export_avg_activity_duration' !== $key) {
throw new \LogicException("the key {$key} is not used by this export");
throw new LogicException("the key {$key} is not used by this export");
}
return static fn ($value) => '_header' === $value ? 'Average activities linked to an accompanying period duration' : $value;
@@ -66,9 +69,9 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
return ['export_avg_activity_duration'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle(): string
@@ -83,6 +86,10 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
$qb = $this->repository->createQueryBuilder('activity');
$qb
@@ -90,6 +97,17 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
->select('AVG(activity.durationTime) as export_avg_activity_duration')
->andWhere($qb->expr()->isNotNull('activity.durationTime'));
$qb
->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM ' . AccompanyingPeriodParticipation::class . ' acl_count_part
JOIN ' . PersonCenterHistory::class . ' acl_count_person_history WITH IDENTITY(acl_count_person_history.person) = IDENTITY(acl_count_part.person)
WHERE acl_count_part.accompanyingPeriod = acp.id AND acl_count_person_history.center IN (:authorized_centers)
'
)
)
->setParameter('authorized_centers', $centers);
return $qb;
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity;
@@ -17,10 +17,13 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterface
@@ -56,7 +59,7 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
public function getLabels($key, array $values, $data)
{
if ('export_avg_activity_visit_duration' !== $key) {
throw new \LogicException("the key {$key} is not used by this export");
throw new LogicException("the key {$key} is not used by this export");
}
return static fn ($value) => '_header' === $value ? 'Average activities linked to an accompanying period visit duration' : $value;
@@ -67,9 +70,9 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return ['export_avg_activity_visit_duration'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle(): string
@@ -84,13 +87,27 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
$qb = $this->repository->createQueryBuilder('activity');
$qb
->join('activity.accompanyingPeriod', 'acp')
->select('AVG(activity.travelTime) as export_avg_activity_visit_duration')
->andWhere($qb->expr()->isNotNull('activity.travelTime'))
;
->andWhere($qb->expr()->isNotNull('activity.travelTime'));
$qb
->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM ' . AccompanyingPeriodParticipation::class . ' acl_count_part
JOIN ' . PersonCenterHistory::class . ' acl_count_person_history WITH IDENTITY(acl_count_person_history.person) = IDENTITY(acl_count_part.person)
WHERE acl_count_part.accompanyingPeriod = acp.id AND acl_count_person_history.center IN (:authorized_centers)
'
)
)
->setParameter('authorized_centers', $centers);
return $qb;
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity;
@@ -17,6 +17,8 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
@@ -67,9 +69,9 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return ['export_count_activity'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle(): string
@@ -84,11 +86,24 @@ class CountActivity implements ExportInterface, GroupedExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$qb = $this->repository->createQueryBuilder('activity');
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
if (!in_array('acp', $qb->getAllAliases(), true)) {
$qb->join('activity.accompanyingPeriod', 'acp');
}
$qb = $this->repository
->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp');
$qb
->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM ' . AccompanyingPeriodParticipation::class . ' acl_count_part
JOIN ' . PersonCenterHistory::class . ' acl_count_person_history WITH IDENTITY(acl_count_person_history.person) = IDENTITY(acl_count_part.person)
WHERE acl_count_part.accompanyingPeriod = acp.id AND acl_count_person_history.center IN (:authorized_centers)
'
)
)
->setParameter('authorized_centers', $centers);
$qb->select('COUNT(DISTINCT activity.id) as export_count_activity');

View File

@@ -0,0 +1,165 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity;
use Chill\ActivityBundle\Export\Export\ListActivityHelper;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Entity\Scope;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\MainBundle\Export\Helper\TranslatableStringExportLabelHelper;
use Chill\MainBundle\Export\ListInterface;
use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\FormBuilderInterface;
class ListActivity implements ListInterface, GroupedExportInterface
{
private EntityManagerInterface $entityManager;
private ListActivityHelper $helper;
private TranslatableStringExportLabelHelper $translatableStringExportLabelHelper;
public function __construct(
ListActivityHelper $helper,
EntityManagerInterface $entityManager,
TranslatableStringExportLabelHelper $translatableStringExportLabelHelper
) {
$this->helper = $helper;
$this->entityManager = $entityManager;
$this->translatableStringExportLabelHelper = $translatableStringExportLabelHelper;
}
public function buildForm(FormBuilderInterface $builder)
{
$this->helper->buildForm($builder);
}
public function getAllowedFormattersTypes()
{
return $this->helper->getAllowedFormattersTypes();
}
public function getDescription()
{
return ListActivityHelper::MSG_KEY . 'List activities linked to an accompanying course';
}
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
public function getLabels($key, array $values, $data)
{
switch ($key) {
case 'acpId':
return static function ($value) {
if ('_header' === $value) {
return ListActivityHelper::MSG_KEY . 'accompanying course id';
}
return $value ?? '';
};
case 'scopesNames':
return $this->translatableStringExportLabelHelper->getLabelMulti($key, $values, ListActivityHelper::MSG_KEY . 'course circles');
default:
return $this->helper->getLabels($key, $values, $data);
}
}
public function getQueryKeys($data)
{
return
array_merge(
$this->helper->getQueryKeys($data),
[
'acpId',
'scopesNames',
]
);
}
public function getResult($query, $data)
{
return $this->helper->getResult($query, $data);
}
public function getTitle()
{
return ListActivityHelper::MSG_KEY . 'List activity linked to a course';
}
public function getType()
{
return $this->helper->getType();
}
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
$qb = $this->entityManager->createQueryBuilder();
$qb
->distinct()
->from(Activity::class, 'activity')
->join('activity.accompanyingPeriod', 'acp')
->leftJoin('acp.participations', 'acppart')
->leftJoin('acppart.person', 'person')
->andWhere('acppart.startDate != acppart.endDate OR acppart.endDate IS NULL')
->andWhere(
$qb->expr()->exists(
'SELECT 1
FROM ' . PersonCenterHistory::class . ' acl_count_person_history
WHERE acl_count_person_history.person = person
AND acl_count_person_history.center IN (:authorized_centers)
'
)
)
// some grouping are necessary
->addGroupBy('acp.id')
->addOrderBy('activity.date')
->addOrderBy('activity.id')
->setParameter('authorized_centers', $centers);
$this->helper->addSelect($qb);
// add select for this step
$qb
->addSelect('acp.id AS acpId')
->addSelect('(SELECT AGGREGATE(acpScope.name) FROM ' . Scope::class . ' acpScope WHERE acpScope MEMBER OF acp.scopes) AS scopesNames')
->addGroupBy('scopesNames');
return $qb;
}
public function requiredRole(): string
{
return ActivityStatsVoter::LISTS;
}
public function supportsModifiers()
{
return array_merge(
$this->helper->supportsModifiers(),
[
\Chill\PersonBundle\Export\Declarations::ACP_TYPE,
]
);
}
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity;
@@ -17,10 +17,13 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
class SumActivityDuration implements ExportInterface, GroupedExportInterface
@@ -56,7 +59,7 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
public function getLabels($key, array $values, $data)
{
if ('export_sum_activity_duration' !== $key) {
throw new \LogicException("the key {$key} is not used by this export");
throw new LogicException("the key {$key} is not used by this export");
}
return static fn ($value) => '_header' === $value ? 'Sum activities linked to an accompanying period duration' : $value;
@@ -67,9 +70,9 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
return ['export_sum_activity_duration'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle(): string
@@ -84,15 +87,28 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$qb = $this->repository->createQueryBuilder('activity');
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
if (!in_array('acp', $qb->getAllAliases(), true)) {
$qb->join('activity.accompanyingPeriod', 'acp');
}
$qb = $this->repository
->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp');
$qb->select('SUM(activity.durationTime) as export_sum_activity_duration')
->andWhere($qb->expr()->isNotNull('activity.durationTime'));
$qb
->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM ' . AccompanyingPeriodParticipation::class . ' acl_count_part
JOIN ' . PersonCenterHistory::class . ' acl_count_person_history WITH IDENTITY(acl_count_person_history.person) = IDENTITY(acl_count_part.person)
WHERE acl_count_part.accompanyingPeriod = acp.id AND acl_count_person_history.center IN (:authorized_centers)
'
)
)
->setParameter('authorized_centers', $centers);
return $qb;
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity;
@@ -17,10 +17,13 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
class SumActivityVisitDuration implements ExportInterface, GroupedExportInterface
@@ -56,7 +59,7 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
public function getLabels($key, array $values, $data)
{
if ('export_sum_activity_visit_duration' !== $key) {
throw new \LogicException("the key {$key} is not used by this export");
throw new LogicException("the key {$key} is not used by this export");
}
return static fn ($value) => '_header' === $value ? 'Sum activities linked to an accompanying period visit duration' : $value;
@@ -67,9 +70,9 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return ['export_sum_activity_visit_duration'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle(): string
@@ -84,15 +87,28 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$qb = $this->repository->createQueryBuilder('activity');
$centers = array_map(static function ($el) {
return $el['center'];
}, $acl);
if (!in_array('acp', $qb->getAllAliases(), true)) {
$qb->join('activity.accompanyingPeriod', 'acp');
}
$qb = $this->repository
->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp');
$qb->select('SUM(activity.travelTime) as export_sum_activity_visit_duration')
->andWhere($qb->expr()->isNotNull('activity.travelTime'));
$qb
->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM ' . AccompanyingPeriodParticipation::class . ' acl_count_part
JOIN ' . PersonCenterHistory::class . ' acl_count_person_history WITH IDENTITY(acl_count_person_history.person) = IDENTITY(acl_count_part.person)
WHERE acl_count_part.accompanyingPeriod = acp.id AND acl_count_person_history.center IN (:authorized_centers)
'
)
)
->setParameter('authorized_centers', $centers);
return $qb;
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToPerson;
use Chill\ActivityBundle\Export\Declarations;
@@ -65,9 +65,9 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return ['export_count_activity'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle()
@@ -84,16 +84,24 @@ class CountActivity implements ExportInterface, GroupedExportInterface
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
$qb = $this->activityRepository->createQueryBuilder('activity');
if (!in_array('person', $qb->getAllAliases(), true)) {
$qb->join('activity.person', 'person');
}
$qb = $this->activityRepository
->createQueryBuilder('activity')
->join('activity.person', 'person')
->join('person.centerHistory', 'centerHistory');
$qb->select('COUNT(activity.id) as export_count_activity');
$qb
->where($qb->expr()->in('person.center', ':centers'))
->where(
$qb->expr()->andX(
$qb->expr()->lte('centerHistory.startDate', 'activity.date'),
$qb->expr()->orX(
$qb->expr()->isNull('centerHistory.endDate'),
$qb->expr()->gt('centerHistory.endDate', 'activity.date')
)
)
)
->andWhere($qb->expr()->in('centerHistory.center', ':centers'))
->setParameter('centers', $centers);
return $qb;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToPerson;
use Chill\ActivityBundle\Entity\ActivityReason;
@@ -124,7 +124,7 @@ class ListActivity implements ListInterface, GroupedExportInterface
return 'attendee';
}
return $value ? 1 : 0;
return $value ? 'X' : '';
};
case 'list_reasons':
@@ -210,10 +210,20 @@ class ListActivity implements ListInterface, GroupedExportInterface
$qb
->from('ChillActivityBundle:Activity', 'activity')
->join('activity.person', 'person')
->join('actperson.center', 'actcenter')
->andWhere('actcenter IN (:authorized_centers)')
->setParameter('authorized_centers', $centers);
->join('activity.person', 'actperson')
->join('actperson.centerHistory', 'centerHistory');
$qb->where(
$qb->expr()->andX(
$qb->expr()->lte('centerHistory.startDate', 'activity.date'),
$qb->expr()->orX(
$qb->expr()->isNull('centerHistory.endDate'),
$qb->expr()->gt('centerHistory.endDate', 'activity.date')
)
)
)
->andWhere($qb->expr()->in('centerHistory.center', ':centers'))
->setParameter('centers', $centers);
foreach ($this->fields as $f) {
if (in_array($f, $data['fields'], true)) {
@@ -224,17 +234,17 @@ class ListActivity implements ListInterface, GroupedExportInterface
break;
case 'person_firstname':
$qb->addSelect('person.firstName AS person_firstname');
$qb->addSelect('actperson.firstName AS person_firstname');
break;
case 'person_lastname':
$qb->addSelect('person.lastName AS person_lastname');
$qb->addSelect('actperson.lastName AS person_lastname');
break;
case 'person_id':
$qb->addSelect('person.id AS person_id');
$qb->addSelect('actperson.id AS person_id');
break;
@@ -251,7 +261,7 @@ class ListActivity implements ListInterface, GroupedExportInterface
break;
case 'type_name':
$qb->join('activity.type', 'type');
$qb->join('activity.activityType', 'type');
$qb->addSelect('type.name AS type_name');
break;
@@ -263,6 +273,11 @@ class ListActivity implements ListInterface, GroupedExportInterface
break;
case 'attendee':
$qb->addSelect('IDENTITY(activity.attendee) AS attendee');
break;
default:
$qb->addSelect(sprintf('activity.%s as %s', $f, $f));

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Export\LinkedToPerson;
use Chill\ActivityBundle\Export\Declarations;
@@ -64,6 +64,8 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
if (self::SUM === $this->action) {
return 'Sum activities linked to a person duration by various parameters.';
}
throw new LogicException('this action is not supported: ' . $this->action);
}
public function getGroup(): string
@@ -87,9 +89,9 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
return ['export_stat_activity'];
}
public function getResult($qb, $data)
public function getResult($query, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle()
@@ -97,6 +99,8 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
if (self::SUM === $this->action) {
return 'Sum activity linked to a person duration';
}
throw new LogicException('This action is not supported: ' . $this->action);
}
public function getType(): string
@@ -119,11 +123,24 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
$select = 'SUM(activity.durationTime) AS export_stat_activity';
}
return $qb->select($select)
$qb->select($select)
->join('activity.person', 'person')
->join('actperson.center', 'actcenter')
->where($qb->expr()->in('actcenter', ':centers'))
->setParameter(':centers', $centers);
->join('person.centerHistory', 'centerHistory');
$qb
->where(
$qb->expr()->andX(
$qb->expr()->lte('centerHistory.startDate', 'activity.date'),
$qb->expr()->orX(
$qb->expr()->isNull('centerHistory.endDate'),
$qb->expr()->gt('centerHistory.endDate', 'activity.date')
)
)
)
->andWhere($qb->expr()->in('centerHistory.center', ':centers'))
->setParameter('centers', $centers);
return $qb;
}
public function requiredRole(): string

View File

@@ -0,0 +1,269 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Export;
use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Repository\ActivityPresenceRepositoryInterface;
use Chill\ActivityBundle\Repository\ActivityTypeRepositoryInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\Helper\DateTimeHelper;
use Chill\MainBundle\Export\Helper\TranslatableStringExportLabelHelper;
use Chill\MainBundle\Export\Helper\UserHelper;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Chill\PersonBundle\Export\Helper\LabelPersonHelper;
use Chill\ThirdPartyBundle\Export\Helper\LabelThirdPartyHelper;
use Doctrine\ORM\AbstractQuery;
use Doctrine\ORM\QueryBuilder;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use const SORT_NUMERIC;
class ListActivityHelper
{
public const MSG_KEY = 'export.list.activity.';
private ActivityPresenceRepositoryInterface $activityPresenceRepository;
private ActivityTypeRepositoryInterface $activityTypeRepository;
private DateTimeHelper $dateTimeHelper;
private LabelPersonHelper $labelPersonHelper;
private LabelThirdPartyHelper $labelThirdPartyHelper;
private TranslatableStringHelperInterface $translatableStringHelper;
private TranslatableStringExportLabelHelper $translatableStringLabelHelper;
private TranslatorInterface $translator;
private UserHelper $userHelper;
public function __construct(
ActivityPresenceRepositoryInterface $activityPresenceRepository,
ActivityTypeRepositoryInterface $activityTypeRepository,
DateTimeHelper $dateTimeHelper,
LabelPersonHelper $labelPersonHelper,
LabelThirdPartyHelper $labelThirdPartyHelper,
TranslatorInterface $translator,
TranslatableStringHelperInterface $translatableStringHelper,
TranslatableStringExportLabelHelper $translatableStringLabelHelper,
UserHelper $userHelper
) {
$this->activityPresenceRepository = $activityPresenceRepository;
$this->activityTypeRepository = $activityTypeRepository;
$this->dateTimeHelper = $dateTimeHelper;
$this->labelPersonHelper = $labelPersonHelper;
$this->labelThirdPartyHelper = $labelThirdPartyHelper;
$this->translator = $translator;
$this->translatableStringHelper = $translatableStringHelper;
$this->translatableStringLabelHelper = $translatableStringLabelHelper;
$this->userHelper = $userHelper;
}
public function addSelect(QueryBuilder $qb): void
{
$qb
->addSelect('activity.id AS id')
->addSelect('activity.date')
->addSelect('IDENTITY(activity.activityType) AS typeName')
->leftJoin('activity.reasons', 'reasons')
->addSelect('AGGREGATE(reasons.name) AS listReasons')
->leftJoin('activity.persons', 'actPerson')
->addSelect('AGGREGATE(actPerson.id) AS personsIds')
->addSelect('AGGREGATE(actPerson.id) AS personsNames')
->leftJoin('activity.users', 'users_u')
->addSelect('AGGREGATE(users_u.id) AS usersIds')
->addSelect('AGGREGATE(users_u.id) AS usersNames')
->leftJoin('activity.thirdParties', 'thirdparty')
->addSelect('AGGREGATE(thirdparty.id) AS thirdPartiesIds')
->addSelect('AGGREGATE(thirdparty.id) AS thirdPartiesNames')
->addSelect('IDENTITY(activity.attendee) AS attendeeName')
->addSelect('activity.durationTime')
->addSelect('activity.travelTime')
->addSelect('activity.emergency')
->leftJoin('activity.location', 'location')
->addSelect('location.name AS locationName')
->addSelect('activity.sentReceived')
->addSelect('IDENTITY(activity.createdBy) AS createdBy')
->addSelect('activity.createdAt')
->addSelect('IDENTITY(activity.updatedBy) AS updatedBy')
->addSelect('activity.updatedAt')
->addGroupBy('activity.id')
->addGroupBy('location.id');
}
public function buildForm(FormBuilderInterface $builder)
{
}
public function getAllowedFormattersTypes()
{
return [FormatterInterface::TYPE_LIST];
}
public function getLabels($key, array $values, $data)
{
switch ($key) {
case 'createdAt':
case 'updatedAt':
return $this->dateTimeHelper->getLabel($key);
case 'createdBy':
case 'updatedBy':
return $this->userHelper->getLabel($key, $values, $key);
case 'date':
return $this->dateTimeHelper->getLabel(self::MSG_KEY . $key);
case 'attendeeName':
return function ($value) {
if ('_header' === $value) {
return 'Attendee';
}
if (null === $value || null === $presence = $this->activityPresenceRepository->find($value)) {
return '';
}
return $this->translatableStringHelper->localize($presence->getName());
};
case 'listReasons':
return $this->translatableStringLabelHelper->getLabelMulti($key, $values, 'Activity Reasons');
case 'typeName':
return function ($value) {
if ('_header' === $value) {
return 'Activity type';
}
if (null === $value || null === $type = $this->activityTypeRepository->find($value)) {
return '';
}
return $this->translatableStringHelper->localize($type->getName());
};
case 'usersNames':
return $this->userHelper->getLabelMulti($key, $values, self::MSG_KEY . 'users name');
case 'usersIds':
case 'thirdPartiesIds':
case 'personsIds':
return static function ($value) use ($key) {
if ('_header' === $value) {
switch ($key) {
case 'usersIds':
return self::MSG_KEY . 'users ids';
case 'thirdPartiesIds':
return self::MSG_KEY . 'third parties ids';
case 'personsIds':
return self::MSG_KEY . 'persons ids';
default:
throw new LogicException('key not supported');
}
}
$decoded = json_decode($value);
return implode(
'|',
array_unique(
array_filter($decoded, static fn (?int $id) => null !== $id),
SORT_NUMERIC
)
);
};
case 'personsNames':
return $this->labelPersonHelper->getLabelMulti($key, $values, self::MSG_KEY . 'persons name');
case 'thirdPartiesNames':
return $this->labelThirdPartyHelper->getLabelMulti($key, $values, self::MSG_KEY . 'thirds parties');
case 'sentReceived':
return function ($value) {
if ('_header' === $value) {
return self::MSG_KEY . 'sent received';
}
if (null === $value) {
return '';
}
return $this->translator->trans($value);
};
default:
return function ($value) use ($key) {
if ('_header' === $value) {
return self::MSG_KEY . $key;
}
if (null === $value) {
return '';
}
return $this->translator->trans($value);
};
}
}
public function getQueryKeys($data)
{
return [
'id',
'date',
'typeName',
'listReasons',
'attendeeName',
'durationTime',
'travelTime',
'emergency',
'locationName',
'sentReceived',
'personsIds',
'personsNames',
'usersIds',
'usersNames',
'thirdPartiesIds',
'thirdPartiesNames',
'createdBy',
'createdAt',
'updatedBy',
'updatedAt',
];
}
public function getResult($query, $data)
{
return $query->getQuery()->getResult(AbstractQuery::HYDRATE_SCALAR);
}
public function getType(): string
{
return Declarations::ACTIVITY;
}
public function supportsModifiers()
{
return [
Declarations::ACTIVITY,
];
}
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Entity\Activity;
@@ -18,10 +18,10 @@ use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr;
use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ActivityTypeFilter implements FilterInterface
{

View File

@@ -1,27 +1,24 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\PickUserDynamicType;
use Chill\MainBundle\Templating\Entity\UserRender;
use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ByUserFilter implements FilterInterface
class ByCreatorFilter implements FilterInterface
{
private UserRender $userRender;
@@ -37,22 +34,11 @@ class ByUserFilter implements FilterInterface
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
if (!in_array('actusers', $qb->getAllAliases(), true)) {
$qb->join('activity.users', 'actusers');
}
$clause = $qb->expr()->in('actusers.id', ':users');
if ($where instanceof Andx) {
$where->add($clause);
} else {
$where = $qb->expr()->andX($clause);
}
$qb->add('where', $where);
$qb->setParameter('users', $data['accepted_users']);
$qb
->andWhere(
$qb->expr()->in('activity.createdBy', ':users')
)
->setParameter('users', $data['accepted_users']);
}
public function applyOn(): string
@@ -62,13 +48,8 @@ class ByUserFilter implements FilterInterface
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
$builder->add('accepted_users', PickUserDynamicType::class, [
'multiple' => true,
'expanded' => true,
]);
}
@@ -80,13 +61,13 @@ class ByUserFilter implements FilterInterface
$users[] = $this->userRender->renderString($u, []);
}
return ['Filtered activity by linked users: only %users%', [
'%users%' => implode(', ou ', $users),
return ['Filtered activity by creator: only %users%', [
'%users%' => implode(', ', $users),
]];
}
public function getTitle(): string
{
return 'Filter activity by linked users';
return 'Filter activity by creator';
}
}

View File

@@ -1,23 +1,22 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\PersonBundle\Form\Type\PickSocialActionType;
use Chill\PersonBundle\Templating\Entity\SocialActionRender;
use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
@@ -37,22 +36,17 @@ class BySocialActionFilter implements FilterInterface
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
if (!in_array('actsocialaction', $qb->getAllAliases(), true)) {
$qb->join('activity.socialActions', 'actsocialaction');
}
$clause = $qb->expr()->in('actsocialaction.id', ':socialactions');
if ($where instanceof Andx) {
$where->add($clause);
} else {
$where = $qb->expr()->andX($clause);
}
$qb->add('where', $where);
$qb->setParameter('socialactions', $data['accepted_socialactions']);
$qb->andWhere($clause)
->setParameter(
'socialactions',
SocialAction::getDescendantsWithThisForActions($data['accepted_socialactions'])
);
}
public function applyOn(): string
@@ -62,13 +56,8 @@ class BySocialActionFilter implements FilterInterface
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialactions', EntityType::class, [
'class' => SocialAction::class,
'choice_label' => function (SocialAction $sa) {
return $this->actionRender->renderString($sa, []);
},
$builder->add('accepted_socialactions', PickSocialActionType::class, [
'multiple' => true,
'expanded' => true,
]);
}
@@ -76,12 +65,14 @@ class BySocialActionFilter implements FilterInterface
{
$actions = [];
foreach ($data['accepted_socialactions'] as $sa) {
$actions[] = $this->actionRender->renderString($sa, []);
foreach ($data['accepted_socialactions'] as $action) {
$actions[] = $this->actionRender->renderString($action, [
'show_and_children' => true,
]);
}
return ['Filtered activity by linked socialaction: only %actions%', [
'%actions%' => implode(', ou ', $actions),
'%actions%' => implode(', ', $actions),
]];
}

View File

@@ -1,23 +1,22 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Chill\PersonBundle\Form\Type\PickSocialIssueType;
use Chill\PersonBundle\Templating\Entity\SocialIssueRender;
use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
@@ -37,22 +36,17 @@ class BySocialIssueFilter implements FilterInterface
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
if (!in_array('actsocialissue', $qb->getAllAliases(), true)) {
$qb->join('activity.socialIssues', 'actsocialissue');
}
$clause = $qb->expr()->in('actsocialissue.id', ':socialissues');
if ($where instanceof Andx) {
$where->add($clause);
} else {
$where = $qb->expr()->andX($clause);
}
$qb->add('where', $where);
$qb->setParameter('socialissues', $data['accepted_socialissues']);
$qb->andWhere($clause)
->setParameter(
'socialissues',
SocialIssue::getDescendantsWithThisForIssues($data['accepted_socialissues'])
);
}
public function applyOn(): string
@@ -62,13 +56,8 @@ class BySocialIssueFilter implements FilterInterface
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialissues', EntityType::class, [
'class' => SocialIssue::class,
'choice_label' => function (SocialIssue $si) {
return $this->issueRender->renderString($si, []);
},
$builder->add('accepted_socialissues', PickSocialIssueType::class, [
'multiple' => true,
'expanded' => true,
]);
}
@@ -76,12 +65,14 @@ class BySocialIssueFilter implements FilterInterface
{
$issues = [];
foreach ($data['accepted_socialissues'] as $si) {
$issues[] = $this->issueRender->renderString($si, []);
foreach ($data['accepted_socialissues'] as $issue) {
$issues[] = $this->issueRender->renderString($issue, [
'show_and_children' => true,
]);
}
return ['Filtered activity by linked socialissue: only %issues%', [
'%issues%' => implode(', ou ', $issues),
'%issues%' => implode(', ', $issues),
]];
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
@@ -74,15 +74,13 @@ class EmergencyFilter implements FilterInterface
public function describeAction($data, $format = 'string'): array
{
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_emergency']) {
$choice = $k;
}
}
return ['Filtered activity by emergency: only %emergency%', [
'%emergency%' => $this->translator->trans($choice),
]];
return [
'Filtered by emergency: only %emergency%', [
'%emergency%' => $this->translator->trans(
$data['accepted_emergency'] ? 'is emergency' : 'is not emergency'
),
],
];
}
public function getTitle(): string

View File

@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Entity\Activity;
use Chill\MainBundle\Export\FilterInterface;
use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
class HasNoActivityFilter implements FilterInterface
{
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
$qb
->andWhere('
NOT EXISTS (
SELECT 1 FROM ' . Activity::class . ' activity
WHERE activity.accompanyingPeriod = acp
)
');
}
public function applyOn(): string
{
return Declarations::ACP_TYPE;
}
public function buildForm(FormBuilderInterface $builder)
{
//no form needed
}
public function describeAction($data, $format = 'string'): array
{
return ['Filtered acp which has no activities', []];
}
public function getTitle(): string
{
return 'Filter acp which has no activity';
}
}

View File

@@ -1,23 +1,22 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\LocationType;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\PickLocationTypeType;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
@@ -61,13 +60,9 @@ class LocationTypeFilter implements FilterInterface
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_locationtype', EntityType::class, [
'class' => LocationType::class,
'choice_label' => function (LocationType $type) {
return $this->translatableStringHelper->localize($type->getTitle());
},
$builder->add('accepted_locationtype', PickLocationTypeType::class, [
'multiple' => true,
'expanded' => true,
//'label' => false,
]);
}
@@ -82,7 +77,7 @@ class LocationTypeFilter implements FilterInterface
}
return ['Filtered activity by locationtype: only %types%', [
'%types%' => implode(', ou ', $types),
'%types%' => implode(', ', $types),
]];
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Entity\Activity;

View File

@@ -1,23 +1,22 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\PickUserDynamicType;
use Chill\MainBundle\Templating\Entity\UserRender;
use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
class UserFilter implements FilterInterface
@@ -57,13 +56,8 @@ class UserFilter implements FilterInterface
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
$builder->add('accepted_users', PickUserDynamicType::class, [
'multiple' => true,
'expanded' => true,
'label' => 'Creators',
]);
}
@@ -77,7 +71,7 @@ class UserFilter implements FilterInterface
}
return ['Filtered activity by user: only %users%', [
'%users%' => implode(', ou ', $users),
'%users%' => implode(', ', $users),
]];
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
@@ -85,7 +85,7 @@ class UserScopeFilter implements FilterInterface
}
return ['Filtered activity by userscope: only %scopes%', [
'%scopes%' => implode(', ou ', $scopes),
'%scopes%' => implode(', ', $scopes),
]];
}

View File

@@ -1,21 +1,22 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\MainBundle\Form\Type\Export\FilterType;
use DateTime;
use Chill\MainBundle\Form\Type\PickRollingDateType;
use Chill\MainBundle\Service\RollingDate\RollingDate;
use Chill\MainBundle\Service\RollingDate\RollingDateConverterInterface;
use Doctrine\ORM\Query\Expr;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
@@ -28,9 +29,14 @@ class ActivityDateFilter implements FilterInterface
{
protected TranslatorInterface $translator;
public function __construct(TranslatorInterface $translator)
{
private RollingDateConverterInterface $rollingDateConverter;
public function __construct(
TranslatorInterface $translator,
RollingDateConverterInterface $rollingDateConverter
) {
$this->translator = $translator;
$this->rollingDateConverter = $rollingDateConverter;
}
public function addRole(): ?string
@@ -54,8 +60,14 @@ class ActivityDateFilter implements FilterInterface
}
$qb->add('where', $where);
$qb->setParameter('date_from', $data['date_from']);
$qb->setParameter('date_to', $data['date_to']);
$qb->setParameter(
'date_from',
$this->rollingDateConverter->convert($data['date_from'])
);
$qb->setParameter(
'date_to',
$this->rollingDateConverter->convert($data['date_to'])
);
}
public function applyOn(): string
@@ -66,13 +78,13 @@ class ActivityDateFilter implements FilterInterface
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date_from', ChillDateType::class, [
->add('date_from', PickRollingDateType::class, [
'label' => 'Activities after this date',
'data' => new DateTime(),
'data' => new RollingDate(RollingDate::T_YEAR_PREVIOUS_START),
])
->add('date_to', ChillDateType::class, [
->add('date_to', PickRollingDateType::class, [
'label' => 'Activities before this date',
'data' => new DateTime(),
'data' => new RollingDate(RollingDate::T_TODAY),
]);
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
@@ -121,8 +133,8 @@ class ActivityDateFilter implements FilterInterface
return [
'Filtered by date of activity: only between %date_from% and %date_to%',
[
'%date_from%' => $data['date_from']->format('d-m-Y'),
'%date_to%' => $data['date_to']->format('d-m-Y'),
'%date_from%' => $this->rollingDateConverter->convert($data['date_from'])->format('d-m-Y'),
'%date_to%' => $this->rollingDateConverter->convert($data['date_to'])->format('d-m-Y'),
],
];
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter;
use Chill\ActivityBundle\Entity\ActivityType;
@@ -17,8 +17,6 @@ use Chill\ActivityBundle\Repository\ActivityTypeRepositoryInterface;
use Chill\MainBundle\Export\ExportElementValidatedInterface;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Doctrine\ORM\Query\Expr;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
@@ -79,8 +77,8 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
'multiple' => true,
'expanded' => false,
'attr' => [
'class' => 'select2'
]
'class' => 'select2',
],
]);
}
@@ -93,7 +91,7 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
);
return ['Filtered by activity type: only %list%', [
'%list%' => implode(', ou ', $reasonsNames),
'%list%' => implode(', ', $reasonsNames),
]];
}

View File

@@ -0,0 +1,77 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Filter;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\PickUserDynamicType;
use Chill\MainBundle\Templating\Entity\UserRender;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
class ActivityUsersFilter implements FilterInterface
{
private UserRender $userRender;
public function __construct(UserRender $userRender)
{
$this->userRender = $userRender;
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
$orX = $qb->expr()->orX();
foreach ($data['accepted_users'] as $key => $user) {
$orX->add($qb->expr()->isMemberOf(':activity_users_filter_u' . $key, 'activity.users'));
$qb->setParameter('activity_users_filter_u' . $key, $user);
}
$qb->andWhere($orX);
}
public function applyOn()
{
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', PickUserDynamicType::class, [
'multiple' => true,
'label' => 'Users',
]);
}
public function describeAction($data, $format = 'string')
{
$users = [];
foreach ($data['accepted_users'] as $u) {
$users[] = $this->userRender->renderString($u, []);
}
return ['Filtered activity by users: only %users%', [
'%users%' => implode(', ', $users),
]];
}
public function getTitle(): string
{
return 'Filter activity by users';
}
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\PersonFilters;
use Chill\ActivityBundle\Entity\ActivityReason;
@@ -19,14 +19,13 @@ use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Doctrine\ORM\Query\Expr;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use function array_key_exists;
use function count;
use function in_array;
class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInterface
{

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Export\Filter\PersonFilters;
use Chill\ActivityBundle\Entity\Activity;

View File

@@ -0,0 +1,81 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Filter;
use Chill\ActivityBundle\Entity\Activity;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\UserJob;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
class UsersJobFilter implements FilterInterface
{
private TranslatableStringHelperInterface $translatableStringHelper;
public function __construct(TranslatableStringHelperInterface $translatableStringHelper)
{
$this->translatableStringHelper = $translatableStringHelper;
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
$qb
->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM ' . Activity::class . ' activity_users_job_filter_act
JOIN activity_users_job_filter_act.users users WHERE users.userJob IN (:activity_users_job_filter_jobs) AND activity_users_job_filter_act = activity '
)
)
->setParameter('activity_users_job_filter_jobs', $data['jobs']);
}
public function applyOn()
{
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('jobs', EntityType::class, [
'class' => UserJob::class,
'choice_label' => fn (UserJob $j) => $this->translatableStringHelper->localize($j->getLabel()),
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string')
{
return ['export.filter.activity.by_usersjob.Filtered activity by users job: only %jobs%', [
'%jobs%' => implode(
', ',
array_map(
fn (UserJob $job) => $this->translatableStringHelper->localize($job->getLabel()),
$data['jobs']->toArray()
)
),
]];
}
public function getTitle()
{
return 'export.filter.activity.by_usersjob.Filter by users job';
}
}

View File

@@ -0,0 +1,88 @@
<?php
declare(strict_types=1);
/*
* 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.
*/
namespace Chill\ActivityBundle\Export\Filter;
use Chill\ActivityBundle\Entity\Activity;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\Scope;
use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Repository\ScopeRepositoryInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
class UsersScopeFilter implements FilterInterface
{
private ScopeRepositoryInterface $scopeRepository;
private TranslatableStringHelperInterface $translatableStringHelper;
public function __construct(
ScopeRepositoryInterface $scopeRepository,
TranslatableStringHelperInterface $translatableStringHelper
) {
$this->scopeRepository = $scopeRepository;
$this->translatableStringHelper = $translatableStringHelper;
}
public function addRole(): ?string
{
return null;
}
public function alterQuery(QueryBuilder $qb, $data)
{
$qb
->andWhere(
$qb->expr()->exists(
'SELECT 1 FROM ' . Activity::class . ' activity_users_scope_filter_act
JOIN activity_users_scope_filter_act.users users WHERE users.mainScope IN (:activity_users_scope_filter_scopes) AND activity_users_scope_filter_act = activity '
)
)
->setParameter('activity_users_scope_filter_scopes', $data['scopes']);
}
public function applyOn()
{
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('scopes', EntityType::class, [
'class' => Scope::class,
'choices' => $this->scopeRepository->findAllActive(),
'choice_label' => fn (Scope $s) => $this->translatableStringHelper->localize($s->getName()),
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string')
{
return ['export.filter.activity.by_usersscope.Filtered activity by users scope: only %scopes%', [
'%scopes%' => implode(
', ',
array_map(
fn (Scope $s) => $this->translatableStringHelper->localize($s->getName()),
$data['scopes']->toArray()
)
),
]];
}
public function getTitle()
{
return 'export.filter.activity.by_usersscope.Filter by users scope';
}
}

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form;
use Chill\ActivityBundle\Entity\ActivityPresence;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form;
use Chill\MainBundle\Form\Type\TranslatableStringFormType;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form;
use Chill\ActivityBundle\Form\Type\TranslatableActivityReasonCategory;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form;
use Chill\ActivityBundle\Entity\Activity;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form;
use Chill\ActivityBundle\Entity\ActivityTypeCategory;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form;
use Chill\ActivityBundle\Entity\ActivityTypeCategory;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form\Type;
use Chill\ActivityBundle\Entity\ActivityType;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form\Type;
use Chill\ActivityBundle\Entity\ActivityReason;

View File

@@ -1,14 +1,14 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form\Type;
use Doctrine\ORM\EntityRepository;

View File

@@ -1,24 +1,21 @@
<?php
/**
declare(strict_types=1);
/*
* 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\Form\Type;
use Chill\ActivityBundle\Entity\ActivityType;
use Chill\ActivityBundle\Repository\ActivityTypeRepositoryInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class TranslatableActivityType extends AbstractType

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