mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-11-12 07:08:25 +00:00
Compare commits
86 Commits
ticket/64-
...
move-docum
| Author | SHA1 | Date | |
|---|---|---|---|
|
0541995a60
|
|||
|
29e054bd10
|
|||
|
da0099aafc
|
|||
|
3a18ea42fe
|
|||
| e60435b8cc | |||
| ab6ab19499 | |||
| 2a1762ea8d | |||
| 18ababbca9 | |||
| f6179cd3a3 | |||
| ddf8da4cee | |||
| bf2181c2f1 | |||
| d508fde8d2 | |||
| 14dba22181 | |||
| 7dc7e77c62 | |||
| 9d58904969 | |||
| 4d90c7028f | |||
| 3abb76d268 | |||
| d62dd4396e | |||
| 59e8d9d516 | |||
| 7dcb8abe38 | |||
| a0b2d92ba2 | |||
| 7843e5dfd1 | |||
| 32c847267b | |||
| 9b353f4d1b | |||
| 81a858f07a | |||
| 6a2ee232a9 | |||
| 56c43a0a76 | |||
| eb724a730c | |||
| 18f98b6795 | |||
| d73994edd0 | |||
| 70603570c8 | |||
| df09dd2017 | |||
| 1c87280b1e | |||
| 445e093a28 | |||
| 3f91c65b30 | |||
| 9bc3c16b58 | |||
| 12dff82248 | |||
| ab23a4efb5 | |||
| 204fb20475 | |||
| f430d97152 | |||
| 4fa4d3b65c | |||
| bd4c34cc1d | |||
| 4cea678e93 | |||
| 5e6833975b | |||
| f523b9adb3 | |||
| a211549432 | |||
| 17b1363113 | |||
| 3356ed8e57 | |||
| 2a7fa517ee | |||
| 85781c8e14 | |||
| 00eb435896 | |||
| ed71cffd6a | |||
| ae679e6997 | |||
| e1d308fd97 | |||
| d9acda67e3 | |||
| e88da74882 | |||
| 591c44d1a0 | |||
| bf04b7981c | |||
| df33eec30f | |||
| c657c98918 | |||
| ef5eb5b907 | |||
| d683fe002d | |||
| 555bbca59b | |||
| e9e9d5c458 | |||
| b1842a33ae | |||
| 6afeaccf24 | |||
| fb76bac480 | |||
| 6ded185289 | |||
| 95adc29f9d | |||
| 4d0c3e683f | |||
| 018aafc773 | |||
| c4aea4efc2 | |||
| 225e3ca13f | |||
| 8c1fa7956a | |||
| e253d1b276 | |||
| a52aac2d98 | |||
| 9e8cf60dd8 | |||
| 7682d81d50 | |||
| 5d31ce96c1 | |||
| 81ef64a246 | |||
| 49d1f78001 | |||
| 0d0f3528e2 | |||
| d97d5e689a | |||
| 95d80ce13e | |||
| 668720984d | |||
| 245c3fa121 |
@@ -1,7 +0,0 @@
|
|||||||
kind: DX
|
|
||||||
body: |
|
|
||||||
Send notifications log to dedicated channel, if it exists
|
|
||||||
time: 2025-10-27T15:00:53.309372316+01:00
|
|
||||||
custom:
|
|
||||||
Issue: ""
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Feature
|
|
||||||
body: |
|
|
||||||
Upgrade import of address list to the last version of compiled addresses of belgian-best-address
|
|
||||||
time: 2024-05-30T16:00:03.440767606+02:00
|
|
||||||
custom:
|
|
||||||
Issue: ""
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Feature
|
|
||||||
body: |
|
|
||||||
Upgrade CKEditor and refactor configuration with use of typescript
|
|
||||||
time: 2024-05-31T19:02:42.776662753+02:00
|
|
||||||
custom:
|
|
||||||
Issue: ""
|
|
||||||
6
.changes/unreleased/Feature-20250211-142243.yaml
Normal file
6
.changes/unreleased/Feature-20250211-142243.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Feature
|
||||||
|
body: Allow the merge of two accompanying period works
|
||||||
|
time: 2025-02-11T14:22:43.134106669+01:00
|
||||||
|
custom:
|
||||||
|
Issue: "359"
|
||||||
|
SchemaChange: No schema change
|
||||||
6
.changes/unreleased/Feature-20250403-100311.yaml
Normal file
6
.changes/unreleased/Feature-20250403-100311.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Feature
|
||||||
|
body: Duplication of a document to another accompanying period work evaluation
|
||||||
|
time: 2025-04-03T10:03:11.796736107+02:00
|
||||||
|
custom:
|
||||||
|
Issue: "369"
|
||||||
|
SchemaChange: No schema change
|
||||||
6
.changes/unreleased/Feature-20250403-100857.yaml
Normal file
6
.changes/unreleased/Feature-20250403-100857.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Feature
|
||||||
|
body: Fusion of two accompanying period works
|
||||||
|
time: 2025-04-03T10:08:57.25079018+02:00
|
||||||
|
custom:
|
||||||
|
Issue: "359"
|
||||||
|
SchemaChange: No schema change
|
||||||
6
.changes/unreleased/Feature-20250717-110850.yaml
Normal file
6
.changes/unreleased/Feature-20250717-110850.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Feature
|
||||||
|
body: Add filter to social actions list to filter out actions where current user intervenes
|
||||||
|
time: 2025-07-17T11:08:50.128269232+02:00
|
||||||
|
custom:
|
||||||
|
Issue: "400"
|
||||||
|
SchemaChange: No schema change
|
||||||
6
.changes/unreleased/Feature-20250722-155039.yaml
Normal file
6
.changes/unreleased/Feature-20250722-155039.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Feature
|
||||||
|
body: Show filters on list pages unfolded by default
|
||||||
|
time: 2025-07-22T15:50:39.338057044+02:00
|
||||||
|
custom:
|
||||||
|
Issue: "399"
|
||||||
|
SchemaChange: No schema change
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Feature
|
|
||||||
body: Create invitation list in user menu
|
|
||||||
time: 2025-08-08T12:08:02.446361367+02:00
|
|
||||||
custom:
|
|
||||||
Issue: "385"
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Feature
|
|
||||||
body: Admin interface for Motive entity
|
|
||||||
time: 2025-10-07T15:59:45.597029709+02:00
|
|
||||||
custom:
|
|
||||||
Issue: ""
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Feature
|
|
||||||
body: Add an admin interface for Motive entity
|
|
||||||
time: 2025-10-22T11:15:52.13937955+02:00
|
|
||||||
custom:
|
|
||||||
Issue: ""
|
|
||||||
SchemaChange: Add columns or tables
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Feature
|
|
||||||
body: Add columns for comments linked to an activity in the activity list export
|
|
||||||
time: 2025-10-29T15:25:10.493968528+01:00
|
|
||||||
custom:
|
|
||||||
Issue: "404"
|
|
||||||
SchemaChange: No schema change
|
|
||||||
6
.changes/unreleased/Fixed-20250806-134609.yaml
Normal file
6
.changes/unreleased/Fixed-20250806-134609.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Fixed
|
||||||
|
body: adjust display logic for accompanying period dates, include closing date if period is closed.
|
||||||
|
time: 2025-08-06T13:46:09.241584292+02:00
|
||||||
|
custom:
|
||||||
|
Issue: "382"
|
||||||
|
SchemaChange: No schema change
|
||||||
6
.changes/unreleased/Fixed-20250806-173527.yaml
Normal file
6
.changes/unreleased/Fixed-20250806-173527.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: Fixed
|
||||||
|
body: add min and step attributes to integer field in DateIntervalType
|
||||||
|
time: 2025-08-06T17:35:27.413787704+02:00
|
||||||
|
custom:
|
||||||
|
Issue: "384"
|
||||||
|
SchemaChange: No schema change
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixed
|
|
||||||
body: 'Fix: display also social actions linked to parents of the selected social issue'
|
|
||||||
time: 2025-10-29T12:43:55.008647232+01:00
|
|
||||||
custom:
|
|
||||||
Issue: "451"
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixed
|
|
||||||
body: 'Fix: export actions and their results in csv even when action does not have any goals attached to it.'
|
|
||||||
time: 2025-10-29T14:38:36.195220844+01:00
|
|
||||||
custom:
|
|
||||||
Issue: "453"
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixed
|
|
||||||
body: Fix the possibility to delete a workflow
|
|
||||||
time: 2025-11-04T13:51:08.113234488+01:00
|
|
||||||
custom:
|
|
||||||
Issue: ""
|
|
||||||
SchemaChange: Drop or rename table or columns, or enforce new constraint that must be manually fixed
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: Fixed
|
|
||||||
body: Fix suggestion of referrer when creating notification for accompanyingPeriodWorkDocument
|
|
||||||
time: 2025-11-06T16:16:05.861813041+01:00
|
|
||||||
custom:
|
|
||||||
Issue: "428"
|
|
||||||
SchemaChange: No schema change
|
|
||||||
6
.changes/unreleased/UX-20250722-132637.yaml
Normal file
6
.changes/unreleased/UX-20250722-132637.yaml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
kind: UX
|
||||||
|
body: Limit display of participations in event list
|
||||||
|
time: 2025-07-22T13:26:37.500656935+02:00
|
||||||
|
custom:
|
||||||
|
Issue: ""
|
||||||
|
SchemaChange: No schema change
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: UX
|
|
||||||
body: Change the terms 'cercle' and 'centre' to 'service', and 'territoire' respectively.
|
|
||||||
time: 2025-10-06T12:39:32.514056818+02:00
|
|
||||||
custom:
|
|
||||||
Issue: "425"
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: UX
|
|
||||||
body: Improve the ux for selecting whether user wants to be notified of the final step of a workflow or all steps
|
|
||||||
time: 2025-10-29T11:08:04.077020411+01:00
|
|
||||||
custom:
|
|
||||||
Issue: "542"
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
kind: UX
|
|
||||||
body: Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'
|
|
||||||
time: 2025-10-30T18:09:19.373907522+01:00
|
|
||||||
custom:
|
|
||||||
Issue: ""
|
|
||||||
SchemaChange: No schema change
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
## v4.1.0 - 2025-08-26
|
|
||||||
### Feature
|
|
||||||
* ([#400](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/400)) Add filter to social actions list to filter out actions where current user intervenes
|
|
||||||
* ([#399](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/399)) Show filters on list pages unfolded by default
|
|
||||||
* Expansion of event module with new fields in the creation form: thematic, internal/external animator, responsable, and budget elements. Filtering options in the event list + adapted exports
|
|
||||||
|
|
||||||
**Schema Change**: Add columns or tables
|
|
||||||
### Fixed
|
|
||||||
* ([#382](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/382)) adjust display logic for accompanying period dates, include closing date if period is closed.
|
|
||||||
* ([#384](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/384)) add min and step attributes to integer field in DateIntervalType
|
|
||||||
### UX
|
|
||||||
* Limit display of participations in event list
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
## v4.2.0 - 2025-09-02
|
|
||||||
### Feature
|
|
||||||
* ([#64](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/64)) Add external identifier for a Person
|
|
||||||
|
|
||||||
**Schema Change**: Add columns or tables
|
|
||||||
* ([#330](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/330) Allow users to choose for which notifications they want to receive an email
|
|
||||||
### Fixed
|
|
||||||
* ([#422](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/422)) Fixed html layout of pages for recovering password
|
|
||||||
* Fix typo in 'uncheckAll' script for centers selection
|
|
||||||
* Fix incorrect parameter name in event details link
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
## v4.2.1 - 2025-09-03
|
|
||||||
### Fixed
|
|
||||||
* Fix exports to work with DirectExportInterface
|
|
||||||
### DX
|
|
||||||
* Improve error message when a stored object cannot be written on local disk
|
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
## v4.3.0 - 2025-09-08
|
|
||||||
### Feature
|
|
||||||
* ([#409](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/409)) Add 45 and 60 min calendar ranges
|
|
||||||
* Add a command to generate a list of permissions
|
|
||||||
* ([#412](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/412)) Add an absence end date
|
|
||||||
|
|
||||||
**Schema Change**: Add columns or tables
|
|
||||||
### Fixed
|
|
||||||
* fix date formatting in calendar range display
|
|
||||||
* Change route URL to avoid clash with person duplicate controller method
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
## v4.4.0 - 2025-09-11
|
|
||||||
### Feature
|
|
||||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
|
|
||||||
* ([#369](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/369)) Duplication of a document to another accompanying period work evaluation
|
|
||||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Fusion of two accompanying period works
|
|
||||||
### Fixed
|
|
||||||
* Fix display of 'duplicate' and 'merge' buttons in CRUD templates
|
|
||||||
* Fix saving notification preferences in user's profile
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
## v4.4.1 - 2025-09-11
|
|
||||||
### Fixed
|
|
||||||
* fix translations in duplicate evaluation document modal and realign close modal button
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
## v4.4.2 - 2025-09-12
|
|
||||||
### Fixed
|
|
||||||
* Fix document generation and workflow generation do not work on accompanying period work documents
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
## v4.5.0 - 2025-10-03
|
|
||||||
### Feature
|
|
||||||
* Only allow delete of attachment on workflows that are not final
|
|
||||||
* Move up signature buttons on index workflow page for easier access
|
|
||||||
* Filter out document from attachment list if it is the same as the workflow document
|
|
||||||
* Block edition on attached document on workflow, if the workflow is finalized or sent external
|
|
||||||
* Convert workflow's attached document to pdf while sending them external
|
|
||||||
* After a signature is canceled or rejected, going to a waiting page until the post-process routines apply a workflow transition
|
|
||||||
### Fixed
|
|
||||||
* ([#426](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/426)) Increased the number of required characters when setting a new password in Chill from 9 to 14 - GDPR compliance
|
|
||||||
* Fix permissions on storedObject which are subject by a workflow
|
|
||||||
### DX
|
|
||||||
* Introduce a WaitingScreen component to display a waiting screen
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
## v4.5.1 - 2025-10-03
|
|
||||||
### Fixed
|
|
||||||
* Add missing javascript dependency
|
|
||||||
* Add exception handling for conversion of attachment on sending external, when documens are already in pdf
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
## v4.6.0 - 2025-10-15
|
|
||||||
### Feature
|
|
||||||
* ([#423](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/423)) Create environment banner that can be activated and configured depending on the image deployed
|
|
||||||
* ([#394](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/394)) Only show active workflow on the page "my tracked workflow"
|
|
||||||
### Fixed
|
|
||||||
* Fix loading of classLists in SocialIssuesAcc.vue, ensure elements are present
|
|
||||||
* Fix the rendering of list of StoredObjectVersions, where there are kept version (before converting to pdf) and intermediate versions deleted
|
|
||||||
* ([#434](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/434)) Notification: fix editing of sent notification by removing form.addressesEmails, a field that no longer exists
|
|
||||||
* Fix loading of social issues and social actions within vue component
|
|
||||||
* ([#446](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/446)) Add unique condition on stored object filename, with cleaning step on existing duplicate filenames
|
|
||||||
|
|
||||||
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
|
|
||||||
* [workflow] take permissions into account to delete the workflow attachment
|
|
||||||
* ([#448](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/448)) Fix the execution of daily cronjob notification, when the previous last execution storage was invalid
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
## v4.6.1 - 2025-10-27
|
|
||||||
### Fixed
|
|
||||||
* Fix export case where no 'reason' is picked within the PersonHavingActivityBetweenDateFilter.php
|
|
||||||
@@ -19,11 +19,11 @@ max_line_length = 80
|
|||||||
[COMMIT_EDITMSG]
|
[COMMIT_EDITMSG]
|
||||||
max_line_length = 0
|
max_line_length = 0
|
||||||
|
|
||||||
[*.{js,vue,ts}]
|
[*.{js, vue, ts}]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
indent_style = space
|
indent_style = space
|
||||||
|
|
||||||
[*.rst]
|
[.rst]
|
||||||
indent_size = 3
|
ident_size = 3
|
||||||
indent_style = space
|
ident_style = space
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,14 @@
|
|||||||
"message": "'app' is assigned a value but never used.",
|
"message": "'app' is assigned a value but never used.",
|
||||||
"hash": "f8c2979921289906e3baabae31ba101ead91504f"
|
"hash": "f8c2979921289906e3baabae31ba101ead91504f"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/index.js",
|
||||||
|
"line": 57,
|
||||||
|
"column": 23,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'event' is defined but never used.",
|
||||||
|
"hash": "cf0cf378f71403f62a6425f384ccbbdec433d1f2"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillCalendarBundle/Resources/public/module/Invite/answer.js",
|
"path": "src/Bundle/ChillCalendarBundle/Resources/public/module/Invite/answer.js",
|
||||||
"line": 7,
|
"line": 7,
|
||||||
@@ -119,6 +127,46 @@
|
|||||||
"message": "'payload' is defined but never used.",
|
"message": "'payload' is defined but never used.",
|
||||||
"hash": "66c545917093ba30f1d6ca10ddaa676140e749bd"
|
"hash": "66c545917093ba30f1d6ca10ddaa676140e749bd"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
|
||||||
|
"line": 224,
|
||||||
|
"column": 10,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reactive' is defined but never used.",
|
||||||
|
"hash": "96ed76a9828138fb125fc36c4b55e900bbfe87c2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
|
||||||
|
"line": 230,
|
||||||
|
"column": 5,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'DropArg' is defined but never used.",
|
||||||
|
"hash": "bd405399a4091d65e8391404bfb0c4611816c8e0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
|
||||||
|
"line": 251,
|
||||||
|
"column": 9,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'t' is assigned a value but never used.",
|
||||||
|
"hash": "bc09207a496405f7a71c178e522b89aeb1f7ebd3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
|
||||||
|
"line": 356,
|
||||||
|
"column": 32,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'arg' is defined but never used.",
|
||||||
|
"hash": "aeae152f0669b946a1ad681dd52b0ef03393ae79"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/App2.vue",
|
||||||
|
"line": 434,
|
||||||
|
"column": 11,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'changedEvent' is assigned a value but never used.",
|
||||||
|
"hash": "a7a81a6bf09d00c0364e3aa8207ffad853f0547b"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/Components/EditLocation.vue",
|
"path": "src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/Components/EditLocation.vue",
|
||||||
"line": 77,
|
"line": 77,
|
||||||
@@ -351,6 +399,14 @@
|
|||||||
"message": "'error' is defined but never used.",
|
"message": "'error' is defined but never used.",
|
||||||
"hash": "e26e5e101e90d2b7ee84d6f5de8c819e52129c17"
|
"hash": "e26e5e101e90d2b7ee84d6f5de8c819e52129c17"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/index.ts",
|
||||||
|
"line": 29,
|
||||||
|
"column": 14,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'vm' is defined but never used.",
|
||||||
|
"hash": "8e7f5e89dd72c54459cf82156389b88988f97d63"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/uploader.js",
|
"path": "src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/uploader.js",
|
||||||
"line": 39,
|
"line": 39,
|
||||||
@@ -559,6 +615,14 @@
|
|||||||
"message": "'ref' is defined but never used.",
|
"message": "'ref' is defined but never used.",
|
||||||
"hash": "2a27cd6d06a26e1326654c929068e3704137e24b"
|
"hash": "2a27cd6d06a26e1326654c929068e3704137e24b"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/HistoryButton/HistoryButtonList.vue",
|
||||||
|
"line": 57,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/valid-v-for",
|
||||||
|
"message": "Custom elements in iteration require 'v-bind:key' directives.",
|
||||||
|
"hash": "cce787939524e83dd135869e13738ef332d7156c"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/WopiEditButton.vue",
|
"path": "src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/StoredObjectButton/WopiEditButton.vue",
|
||||||
"line": 15,
|
"line": 15,
|
||||||
@@ -919,6 +983,22 @@
|
|||||||
"message": "'_e' is defined but never used.",
|
"message": "'_e' is defined but never used.",
|
||||||
"hash": "1d6448401778e8c56554020fe5abd47851ed33f3"
|
"hash": "1d6448401778e8c56554020fe5abd47851ed33f3"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/module/wopi-link/index.js",
|
||||||
|
"line": 21,
|
||||||
|
"column": 55,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'e' is defined but never used.",
|
||||||
|
"hash": "eae499e4f6e9f43a9d17f9cd917cb6d3d97be25c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/page/export/download-export.js",
|
||||||
|
"line": 3,
|
||||||
|
"column": 55,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'e' is defined but never used.",
|
||||||
|
"hash": "088fd383e7807e484aefc9825209bc7c8942bd22"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/page/homepage_widget/index.js",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/page/homepage_widget/index.js",
|
||||||
"line": 9,
|
"line": 9,
|
||||||
@@ -1009,19 +1089,115 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
"line": 516,
|
"line": 247,
|
||||||
"column": 21,
|
"column": 5,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
"message": "Unexpected mutation of \"context\" prop.",
|
"message": "'postAddressToPerson' is defined but never used.",
|
||||||
"hash": "984c4203f2ac1e1bb65f9ce76ecd03b763cfaa83"
|
"hash": "8a41c437cf2b5554cbbe1704cd51f3102b3d5994"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
"line": 517,
|
"line": 248,
|
||||||
|
"column": 5,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'postAddressToHousehold' is defined but never used.",
|
||||||
|
"hash": "66dec84b2ece299daf21308e5e60d497ba442b27"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 490,
|
||||||
"column": 21,
|
"column": 21,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"context\" prop.",
|
"message": "Unexpected mutation of \"context\" prop.",
|
||||||
"hash": "c9fb019bc21bfa77d989ed596913b99dd653c594"
|
"hash": "0d3f40c47974a4371072b3b9ee04b197c830162d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 491,
|
||||||
|
"column": 21,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"context\" prop.",
|
||||||
|
"hash": "8e877b7e588c30e182f7b572bdb9685360f9cf99"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 508,
|
||||||
|
"column": 47,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "5a3e3401bc3c765d91faaf4cfde57697af1262b7"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 525,
|
||||||
|
"column": 47,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "35a741d90379574b9323279f5802193d0c98a9dc"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 553,
|
||||||
|
"column": 47,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "c23d1ddf6c0d10ae97948e74aee9c14b9320b86c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 572,
|
||||||
|
"column": 47,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "4322e81c6ea9d9734c680633a724d5bd4fabacb2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 803,
|
||||||
|
"column": 47,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "7928a6461b9d394c7d97f048933553936f7d8963"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress.vue",
|
||||||
|
"line": 852,
|
||||||
|
"column": 47,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "e5afdb8efccb5470a08dde48f755b1268fa947b5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
||||||
|
"line": 93,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "68f5e1cf5c03f9ada59c9e0afca0b74c7f3fca4b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
||||||
|
"line": 101,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "50d730f6109092baff2db66adc44dc1315e2bda2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
||||||
|
"line": 109,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "573e4c041ce663f28b933d7a675c2a525aba644c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
||||||
|
"line": 117,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "293f845eeab515b1df4649d136c2d8219ed59c4d"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
||||||
@@ -1048,180 +1224,204 @@
|
|||||||
"hash": "2d5a5e680ff207ad97c7e7b7d999064b561dfd8a"
|
"hash": "2d5a5e680ff207ad97c7e7b7d999064b561dfd8a"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 149,
|
"line": 106,
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "e4c1ecd7ae77d46ac3625c5bbe92a24d6a964db9"
|
"hash": "d52356f2af31d0167c02330ec22d09fbfa6b2b9f"
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
|
||||||
"line": 157,
|
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "4dece2db87c6ce1c04ae06c088ddfe916c1c0c61"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
|
||||||
"line": 165,
|
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "facc7a0f17bdf19396fae3d0de3da82e60503c0d"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressMore.vue",
|
|
||||||
"line": 173,
|
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "19de32c76518387218264d7c4dab914d143a9cca"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 130,
|
"line": 114,
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "239ac02a02694d5b20ab30d4c7ce5838c51d1515"
|
"hash": "c8e8e06f370f93bf05867e93b5f037dfa46937b1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 138,
|
"line": 128,
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "a54f9bc6d1edfa4df93c7dd7d409cfef3fccf99e"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
|
||||||
"line": 152,
|
|
||||||
"column": 13,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "74a5f664d18f3916ea908897fcd0291cb0128f29"
|
"hash": "9abaf71ca4b4f292b3b01e724d0a7733365e71f1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
|
"line": 129,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "0b0743959778a9e3d93089b132608816ee4e6646"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
|
"line": 132,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "9759da7b7859b8ee8efaf74876430658ac6b6fe2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
|
"line": 133,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "dba8be9a27ab74ec743b7d9e07c05d857b407dd3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
|
"line": 134,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "9b1f5bce779aafc46b19d7a5d266eaa29f8f9be9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
|
"line": 139,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "fe6fc4aea0994ba9da15b7c09d308842b67958cb"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 153,
|
"line": 153,
|
||||||
"column": 13,
|
"column": 55,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "'reject' is defined but never used.",
|
||||||
"hash": "740ea5d793c7a34c9f352d8b333f3aa04cc80ee8"
|
"hash": "bd0e024fcad2e3f4566f15293e3c25c840f6dd3e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 156,
|
"line": 154,
|
||||||
"column": 13,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "af8aca18f0226a5988ed90d44d95e2d607bfb5e6"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
|
||||||
"line": 157,
|
|
||||||
"column": 13,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "7bc2453017793ae20cd6c10005f941d384b59d84"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
|
||||||
"line": 158,
|
|
||||||
"column": 13,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "571b4ee5f22358dd165ec59696bb3439b7c9ff6c"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
|
||||||
"line": 163,
|
|
||||||
"column": 13,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "cfcb5946c86e289fc61623a794284a5a272d02e8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
|
||||||
"line": 178,
|
|
||||||
"column": 37,
|
"column": 37,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "0ec402e43cb08bf129e0737c0d2c4f6d0c7af8bd"
|
"hash": "596c4b180b926b7829f987384328bf5636cd367a"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 196,
|
"line": 171,
|
||||||
|
"column": 59,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "5b41d5f9b45da074fb7bbbbd45e0da501da72071"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
|
"line": 172,
|
||||||
"column": 41,
|
"column": 41,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "ec178d33e067aac892e015002afb6f3a2ff98762"
|
"hash": "d92b92a25043244cca809bd129633b7e024e26b4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 214,
|
"line": 190,
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "c0f4e5454e672b6064eb9cf6c235c6810f7bfa80"
|
"hash": "dd9a85ea740742d620e864796f67c5bff834486d"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 215,
|
"line": 191,
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "e3dd840d2474f9865a45822872bf9ecfb15961d7"
|
"hash": "e3e59960d0d50709a57b336f66b586710b774892"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 216,
|
"line": 192,
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "a32a60382b145cc7a4a7ebe01ec435b8e3103320"
|
"hash": "fe11b0e54396511e7b3b08615a78d22fc27e2fad"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/AddressSelection.vue",
|
||||||
"line": 246,
|
"line": 222,
|
||||||
"column": 13,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "082447e5c731012f3acc282943502775dfd24797"
|
"hash": "63c14c2150c33ec701bc4a0ff94efde69537d490"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 118,
|
"line": 96,
|
||||||
"column": 20,
|
"column": 20,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "d4fba4fe09af3c0937c0dd164928c8930c1591b5"
|
"hash": "d2a9fdaeef0e2810f480022d4c6f99e4f76a818e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 118,
|
"line": 96,
|
||||||
"column": 20,
|
"column": 20,
|
||||||
"ruleId": "vue/no-side-effects-in-computed-properties",
|
"ruleId": "vue/no-side-effects-in-computed-properties",
|
||||||
"message": "Unexpected side effect in \"cities\" computed property.",
|
"message": "Unexpected side effect in \"cities\" computed property.",
|
||||||
"hash": "1113a114d5aaf9f32f442916d25458541c5af35c"
|
"hash": "dd92a60a9b1ebefeb9a90941d45326fbfa483733"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 102,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "04be01ab638ce01f568fb0216929e65e1175ca23"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 110,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "8619c8e0b63e87d09268832f90e4fba06b87e41f"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 124,
|
"line": 124,
|
||||||
"column": 17,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "fa56a7c93583f0a9d0c2ecac10228c4f4fc1bc3a"
|
"hash": "281f918da00635079501418b1e6b2c05b62eb4a7"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 132,
|
"line": 125,
|
||||||
"column": 17,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "9fe87937ea67d1dae95fb3d44d4be0da2eba0905"
|
"hash": "c131b09fa67ab1d069f1d04a54582d6b0f206153"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 126,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "3d3a2a4add64c291b8f5f1cddd90a173cd6a819d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 131,
|
||||||
|
"column": 21,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "ed48f4988914d7897018a2e06830a97e6740b3e8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 145,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "744f3a7610d4d6015e50e25149bceffd6c6e2763"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
@@ -1241,139 +1441,115 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 148,
|
"line": 149,
|
||||||
"column": 13,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "ab4f478fbfbc954b8dff75176dcd432f9ff28cfc"
|
"hash": "1e7b1ad55866f708baaca72dfa4ff26d6f8e5d21"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 153,
|
"line": 152,
|
||||||
"column": 21,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "1d907d149f9ddb62e32140a90efe9a74b3e71fef"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 167,
|
|
||||||
"column": 13,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "8aa37d2d4f011773e68838a2c88017875de563b5"
|
"hash": "84779331536ffceec8d4a8c5ca4307310b882549"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 168,
|
"line": 161,
|
||||||
"column": 13,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "a4827a357e52a51fa9262319114d81a130296acf"
|
"hash": "0789999841be671a4d8ab080d6fdb679f843eb52"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 169,
|
"line": 170,
|
||||||
"column": 13,
|
"column": 51,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "'reject' is defined but never used.",
|
||||||
"hash": "a4c9715664202949e3242b8d4aa4098288b46dc4"
|
"hash": "bbb17afa114f016e2058d90aa32d2a625804f0d1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 171,
|
"line": 171,
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "f3e9e21e433e90ec7b615b8940d43c4177372b66"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 174,
|
|
||||||
"column": 13,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "770b7a24cc24b380e88db47d62422c8e1ece2571"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 183,
|
|
||||||
"column": 13,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "2aef3c519a9ec6abcfe7573989d3de19d5c4c752"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 193,
|
|
||||||
"column": 33,
|
"column": 33,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "5d1f97e4d7d9f47399d312e8b9f95ef9e3843b8c"
|
"hash": "5fbe407ceceb37bff2ac800ceddd7942540132f1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 190,
|
||||||
|
"column": 55,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'reject' is defined but never used.",
|
||||||
|
"hash": "e2af91def877befbabef8e93deba4c58a3ee2ded"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 191,
|
||||||
|
"column": 37,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "ee8544ee45681a650ed7d4918ae979685cdd8f0f"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 210,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "5d9d2217c8c7e6571bc9f72a98ea5b370edb4968"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 211,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "6e04619b373c23c91f6c36c2aad314ac16cdb697"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
|
"line": 212,
|
||||||
|
"column": 17,
|
||||||
|
"ruleId": "vue/no-mutating-props",
|
||||||
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
|
"hash": "39df045639a62f64ccdb03a80e286bc3ad772587"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 213,
|
"line": 213,
|
||||||
"column": 37,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "c1df874f790ef0c036bf58ae8a8db1ee173685d4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 232,
|
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "476e6588a28ac9382e8b9d2e63a8babecd23bad8"
|
"hash": "c399a43fa797a8ce61c9d96a644a39cc84a387b7"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
||||||
"line": 233,
|
"line": 245,
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "6a0c82ba72d6d87217bf33a6ad8e40a4b81bc802"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 234,
|
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "741d5af6c7d90041c0dc1c1df2e8699b80fca69a"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 235,
|
|
||||||
"column": 17,
|
|
||||||
"ruleId": "vue/no-mutating-props",
|
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
|
||||||
"hash": "c3ffd141f58d532663875cc5c7d338ed00db2a6d"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue",
|
|
||||||
"line": 267,
|
|
||||||
"column": 13,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "2700f258396516a2fe971618fafbcdf72cdda3ab"
|
"hash": "04337a07944caaa4819cfebcf29e1a7cbfdf248b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
|
||||||
"line": 94,
|
"line": 76,
|
||||||
"column": 13,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "4be1b0592efa775092a91a1d744e16ce98bd216e"
|
"hash": "373a2e31f110d138c66d77f1faf5dc61545c55af"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CountrySelection.vue",
|
||||||
"line": 99,
|
"line": 81,
|
||||||
"column": 13,
|
"column": 13,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "19b54b6d76c30249d520a296f826eda9d6eb0668"
|
"hash": "421eb6a63224b4b1d81b216677a710c5c99ddee3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/DatePane.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/DatePane.vue",
|
||||||
@@ -1393,19 +1569,19 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
|
||||||
"line": 169,
|
"line": 155,
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "dcb7b34098062760ddbb849655a5bb3ca65c36d3"
|
"hash": "b3a822914fcb5e2fcf28efc331a45b9205002eeb"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/EditPane.vue",
|
||||||
"line": 178,
|
"line": 164,
|
||||||
"column": 17,
|
"column": 17,
|
||||||
"ruleId": "vue/no-mutating-props",
|
"ruleId": "vue/no-mutating-props",
|
||||||
"message": "Unexpected mutation of \"entity\" prop.",
|
"message": "Unexpected mutation of \"entity\" prop.",
|
||||||
"hash": "86b3ecf201025cac36878c5e4bf8850fb9d58cb5"
|
"hash": "72c7d850f6cdeaf65b373a33234222f9766ee30b"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/index.js",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/index.js",
|
||||||
@@ -1455,6 +1631,14 @@
|
|||||||
"message": "'app' is assigned a value but never used.",
|
"message": "'app' is assigned a value but never used.",
|
||||||
"hash": "9e6125f4fc387dc362c69cc6e3ce360eb2851f1b"
|
"hash": "9e6125f4fc387dc362c69cc6e3ce360eb2851f1b"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/PickEntity/PickEntity.vue",
|
||||||
|
"line": 60,
|
||||||
|
"column": 22,
|
||||||
|
"ruleId": "vue/require-valid-default-prop",
|
||||||
|
"message": "Type of the default value for 'suggested' prop must be a function.",
|
||||||
|
"hash": "d30212820bc2e97fa02d75dbc3a014558693f169"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue",
|
"path": "src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue",
|
||||||
"line": 24,
|
"line": 24,
|
||||||
@@ -1543,6 +1727,14 @@
|
|||||||
"message": "'tags' is assigned a value but never used.",
|
"message": "'tags' is assigned a value but never used.",
|
||||||
"hash": "ae9bb2e0651c118ed9efd227e88b86cc83f5d80d"
|
"hash": "ae9bb2e0651c118ed9efd227e88b86cc83f5d80d"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/components/StickyNav.vue",
|
||||||
|
"line": 116,
|
||||||
|
"column": 18,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'event' is defined but never used.",
|
||||||
|
"hash": "201f182769c6dfb87148b841e7d9b592be429669"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/index.js",
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourse/index.js",
|
||||||
"line": 19,
|
"line": 19,
|
||||||
@@ -1575,6 +1767,14 @@
|
|||||||
"message": "'app' is assigned a value but never used.",
|
"message": "'app' is assigned a value but never used.",
|
||||||
"hash": "aaaaa63e7a60443b8cbf8191feb9142852ebdf1c"
|
"hash": "aaaaa63e7a60443b8cbf8191feb9142852ebdf1c"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/components/FormEvaluation.vue",
|
||||||
|
"line": 79,
|
||||||
|
"column": 13,
|
||||||
|
"ruleId": "vue/require-v-for-key",
|
||||||
|
"message": "Elements in iteration expect to have 'v-bind:key' directives.",
|
||||||
|
"hash": "422f53925922e59655d0f71624c19af75d41628c"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/index.js",
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/index.js",
|
||||||
"line": 12,
|
"line": 12,
|
||||||
@@ -1615,6 +1815,22 @@
|
|||||||
"message": "'evalFQDN' is assigned a value but never used.",
|
"message": "'evalFQDN' is assigned a value but never used.",
|
||||||
"hash": "7fc32caafa23addddf44f3acbc5045b4523a0271"
|
"hash": "7fc32caafa23addddf44f3acbc5045b4523a0271"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/AccompanyingCourseWorkEdit/store.js",
|
||||||
|
"line": 611,
|
||||||
|
"column": 9,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'errors' is assigned a value but never used.",
|
||||||
|
"hash": "c41cf979fc1626c38328dbf1028800c3395496bd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/ExportFormActionGoalResult/App.vue",
|
||||||
|
"line": 282,
|
||||||
|
"column": 7,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-expressions",
|
||||||
|
"message": "Expected an assignment or function call and instead saw an expression.",
|
||||||
|
"hash": "de3a6e2bb10a80a2bacba665be74266c7efc7d64"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/ExportFormActionGoalResult/index.js",
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/ExportFormActionGoalResult/index.js",
|
||||||
"line": 16,
|
"line": 16,
|
||||||
@@ -1631,6 +1847,38 @@
|
|||||||
"message": "'app' is assigned a value but never used.",
|
"message": "'app' is assigned a value but never used.",
|
||||||
"hash": "2f161e663689e3e4dfe2c53b0d64c91a4d2b1a60"
|
"hash": "2f161e663689e3e4dfe2c53b0d64c91a4d2b1a60"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
|
||||||
|
"line": 263,
|
||||||
|
"column": 19,
|
||||||
|
"ruleId": "vue/return-in-computed-property",
|
||||||
|
"message": "Expected to return a value in \"refreshNetwork\" computed property.",
|
||||||
|
"hash": "2c1b08a49098c83b09058cedc0a962126e91e544"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
|
||||||
|
"line": 270,
|
||||||
|
"column": 7,
|
||||||
|
"ruleId": "vue/no-side-effects-in-computed-properties",
|
||||||
|
"message": "Unexpected side effect in \"legendLayers\" computed property.",
|
||||||
|
"hash": "760948d2187c853f17ac9a1bd7107e883092d4f4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
|
||||||
|
"line": 281,
|
||||||
|
"column": 5,
|
||||||
|
"ruleId": "vue/no-dupe-keys",
|
||||||
|
"message": "Duplicate key 'checkedLayers'. May cause name collision in script or template tag.",
|
||||||
|
"hash": "447edb461e15e3ff5c60c8ecba88131e442539aa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/App.vue",
|
||||||
|
"line": 353,
|
||||||
|
"column": 7,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-expressions",
|
||||||
|
"message": "Expected an assignment or function call and instead saw an expression.",
|
||||||
|
"hash": "9cf656cbf1eb3d7cc0082e63adcd320b6093d14f"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/index.js",
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/VisGraph/index.js",
|
||||||
"line": 20,
|
"line": 20,
|
||||||
@@ -1639,6 +1887,22 @@
|
|||||||
"message": "'app' is assigned a value but never used.",
|
"message": "'app' is assigned a value but never used.",
|
||||||
"hash": "9e94e6412b8a44e47bfe8e66218cad09cff5bed4"
|
"hash": "9e94e6412b8a44e47bfe8e66218cad09cff5bed4"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AccompanyingPeriod/SetReferrer.vue",
|
||||||
|
"line": 42,
|
||||||
|
"column": 16,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'response' is defined but never used.",
|
||||||
|
"hash": "62de07b13c662e32332bb062038acee23978ea70"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue",
|
||||||
|
"line": 356,
|
||||||
|
"column": 28,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'_response' is defined but never used.",
|
||||||
|
"hash": "097e7788a2b5dea500b80b8a3cf968e57063a66a"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons/TypeUserGroup.vue",
|
"path": "src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons/TypeUserGroup.vue",
|
||||||
"line": 6,
|
"line": 6,
|
||||||
@@ -1654,5 +1918,45 @@
|
|||||||
"ruleId": "@typescript-eslint/no-unused-vars",
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
"message": "'UserRenderBoxBadge' is defined but never used.",
|
"message": "'UserRenderBoxBadge' is defined but never used.",
|
||||||
"hash": "99eba0d8633b2c9497417f4f61ec4194dbb2a96b"
|
"hash": "99eba0d8633b2c9497417f4f61ec4194dbb2a96b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
|
||||||
|
"line": 4,
|
||||||
|
"column": 3,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'StoredObjectStatus' is defined but never used.",
|
||||||
|
"hash": "63f8c4572293916850d6165647774b27d4b732c6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
|
||||||
|
"line": 5,
|
||||||
|
"column": 3,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'StoredObjectStatusChange' is defined but never used.",
|
||||||
|
"hash": "a87c178e3eb5999bf0f46b3fa1c6da77e1be08b9"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
|
||||||
|
"line": 30,
|
||||||
|
"column": 61,
|
||||||
|
"ruleId": "@typescript-eslint/no-unused-vars",
|
||||||
|
"message": "'e' is defined but never used.",
|
||||||
|
"hash": "02953121583f4f73742a19adab099ab63df9076e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
|
||||||
|
"line": 31,
|
||||||
|
"column": 32,
|
||||||
|
"ruleId": "@typescript-eslint/no-explicit-any",
|
||||||
|
"message": "Unexpected any. Specify a different type.",
|
||||||
|
"hash": "af48e21a1651b6017ede882dab249c00a818a44d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "src/Bundle/ChillWopiBundle/src/Resources/public/module/pending/index.ts",
|
||||||
|
"line": 37,
|
||||||
|
"column": 16,
|
||||||
|
"ruleId": "@typescript-eslint/no-explicit-any",
|
||||||
|
"message": "Unexpected any. Specify a different type.",
|
||||||
|
"hash": "7513ea552a0a649ce4ab93b6cf9d40bfef4f68d9"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -18,9 +18,6 @@ migrations/*
|
|||||||
templates/*
|
templates/*
|
||||||
translations/*
|
translations/*
|
||||||
|
|
||||||
# we allow developers to add customization on their installation, without commiting it
|
|
||||||
config/packages/dev/*
|
|
||||||
|
|
||||||
###> symfony/framework-bundle ###
|
###> symfony/framework-bundle ###
|
||||||
/.env.local
|
/.env.local
|
||||||
/.env.local.php
|
/.env.local.php
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ Chill is a comprehensive web application built as a set of Symfony bundles. It i
|
|||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
Note: This is a project that's existed for a long time, and throughout the years we've used multiple structures inside each bundle. When having the choice, the developers should choose the new structure.
|
Note: This is a project which exists from a long time ago, and we found multiple structure inside each bundle. When having the choice, the developers should choose the new structure.
|
||||||
|
|
||||||
The project follows a standard Symfony bundle structure:
|
The project follows a standard Symfony bundle structure:
|
||||||
- `/src/Bundle/`: Contains all the Chill bundles. The code is either at the root of the bundle directory, or within a `src/` directory (preferred). See psr4 mapping at the root's `composer.json`.
|
- `/src/Bundle/`: Contains all the Chill bundles. The code is either at the root of the bundle directory, or within a `src/` directory (preferred). See psr4 mapping at the root's `composer.json`.
|
||||||
- each bundle comes with its own tests, either in the `Tests` directory (when the code is directly within the bundle directory (for instance `src/Bundle/ChillMainBundle/Tests`, `src/Bundle/ChillPersonBundle/Tests`)), or inside the `tests` directory, alongside the `src/` sub-directory (example: `src/Bundle/ChillWopiBundle/tests`) (this is the preferred way).
|
- each bundle come with his own tests, either in the `Tests` directory (when the code is directly within the bundle directory (for instance `src/Bundle/ChillMainBundle/Tests`, `src/Bundle/ChillPersonBundle/Tests`)), or inside the `tests` directory, alongside to the `src/` sub-directory (example: `src/Bundle/ChillWopiBundle/tests`) (this is the preferred way).
|
||||||
- `/docs/`: Contains project documentation
|
- `/docs/`: Contains project documentation
|
||||||
|
|
||||||
Each bundle typically has the following structure:
|
Each bundle typically has the following structure:
|
||||||
@@ -46,13 +46,13 @@ Each bundle typically has the following structure:
|
|||||||
|
|
||||||
### A special word about TicketBundle
|
### A special word about TicketBundle
|
||||||
|
|
||||||
The ticket bundle is developed using a kind of "Command" pattern. The controller fills a "Command," and a "CommandHandler" handles this command. They are saved in the `src/Bundle/ChillTicketBundle/src/Action` directory.
|
The ticket bundle is developed using a kind of "Command" pattern. The controller fill a "Command", and a "CommandHandler" handle this command. They are savec in the `src/Bundle/ChillTicketBundle/src/Action` directory.
|
||||||
|
|
||||||
## Development Guidelines
|
## Development Guidelines
|
||||||
|
|
||||||
### Building and Configuration Instructions
|
### Building and Configuration Instructions
|
||||||
|
|
||||||
All the commands should be run through the `symfony` command, which will configure the required variables.
|
All the command should be run through the `symfony` command, which will configure the required variables.
|
||||||
|
|
||||||
For assets, we must ensure that we use node at version `^20.0.0`. This is done using `nvm use 20`.
|
For assets, we must ensure that we use node at version `^20.0.0`. This is done using `nvm use 20`.
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ For assets, we must ensure that we use node at version `^20.0.0`. This is done u
|
|||||||
docker compose up -d
|
docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
6. **Set Up the Database**:
|
5. **Set Up the Database**:
|
||||||
```bash
|
```bash
|
||||||
# Create the database
|
# Create the database
|
||||||
symfony console doctrine:database:create
|
symfony console doctrine:database:create
|
||||||
@@ -99,20 +99,20 @@ For assets, we must ensure that we use node at version `^20.0.0`. This is done u
|
|||||||
symfony console doctrine:fixtures:load
|
symfony console doctrine:fixtures:load
|
||||||
```
|
```
|
||||||
|
|
||||||
7. **Build Assets**:
|
6. **Build Assets**:
|
||||||
```bash
|
```bash
|
||||||
nvm use 20
|
nvm use 20
|
||||||
yarn run encore dev
|
yarn run encore dev
|
||||||
```
|
```
|
||||||
|
|
||||||
8. **Start the Development Server**:
|
7. **Start the Development Server**:
|
||||||
```bash
|
```bash
|
||||||
symfony server:start -d
|
symfony server:start -d
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Docker Setup
|
#### Docker Setup
|
||||||
|
|
||||||
The project includes a Docker configuration for easier development:
|
The project includes Docker configuration for easier development:
|
||||||
|
|
||||||
1. **Start Docker Services**:
|
1. **Start Docker Services**:
|
||||||
```bash
|
```bash
|
||||||
@@ -153,9 +153,9 @@ Key configuration files:
|
|||||||
|
|
||||||
Each time a doctrine entity is created, we generate migration to adapt the database.
|
Each time a doctrine entity is created, we generate migration to adapt the database.
|
||||||
|
|
||||||
The migration is created using the command `symfony console doctrine:migrations:diff --no-interaction --namespace <namespace>`, where the namespace is the relevant namespace for migration. As this is a bash script, remember to quote the `\` (`\` must become `\\` in your command).
|
The migration are created using the command `symfony console doctrine:migrations:diff --no-interaction --namespace <namespace>`, where the namespace is the relevant namespace for migration. As this is a bash script, do not forget to quote the `\` (`\` must become `\\` in your command).
|
||||||
|
|
||||||
Each bundle has his own namespace for migration (always ask me to confirm that command with a list of updated / created entities so that I can confirm to you that it is ok):
|
Each bundle has his own namespace for migration (always ask me to confirm that command, with a list of updated / created entities so that I can confirm you that it is ok):
|
||||||
|
|
||||||
- `Chill\Bundle\ActivityBundle` writes migrations to `Chill\Migrations\Activity`;
|
- `Chill\Bundle\ActivityBundle` writes migrations to `Chill\Migrations\Activity`;
|
||||||
- `Chill\Bundle\BudgetBundle` writes migrations to `Chill\Migrations\Budget`;
|
- `Chill\Bundle\BudgetBundle` writes migrations to `Chill\Migrations\Budget`;
|
||||||
@@ -183,7 +183,7 @@ Once created the, comment's classes should be removed and a description of the c
|
|||||||
|
|
||||||
When we need to use a DateTime or DateTimeImmutable that need to express "now", we prefer the usage of
|
When we need to use a DateTime or DateTimeImmutable that need to express "now", we prefer the usage of
|
||||||
`Symfony\Component\Clock\ClockInterface`, where possible. This is usually not possible in doctrine entities,
|
`Symfony\Component\Clock\ClockInterface`, where possible. This is usually not possible in doctrine entities,
|
||||||
where injection does not work when restoring an entity from a database, but usually possible in services.
|
where injection does not work when restoring an entity from database, but usually possible in services.
|
||||||
|
|
||||||
In test, we use `\Symfony\Component\Clock\MockClock` which is an implementation of `Symfony\Component\Clock\ClockInterface`
|
In test, we use `\Symfony\Component\Clock\MockClock` which is an implementation of `Symfony\Component\Clock\ClockInterface`
|
||||||
where we have full and easy control of the date.
|
where we have full and easy control of the date.
|
||||||
@@ -198,9 +198,9 @@ The project uses PHPUnit for testing. Each bundle has its own test suite, and th
|
|||||||
|
|
||||||
For creating mock, we prefer using prophecy (library phpspec/prophecy).
|
For creating mock, we prefer using prophecy (library phpspec/prophecy).
|
||||||
|
|
||||||
##### Useful helpers and tips that avoid creating a mock
|
##### Useful helpers and tips that avoid create a mock
|
||||||
|
|
||||||
Some notable implementations that are test helpers and avoid creating a mock:
|
Some notable implementations that are tests helper, and avoid to create a mock:
|
||||||
|
|
||||||
- `\Psr\Log\NullLogger`, an implementation of `\Psr\Log\LoggerInterface`;
|
- `\Psr\Log\NullLogger`, an implementation of `\Psr\Log\LoggerInterface`;
|
||||||
- `\Symfony\Component\Clock\MockClock`, an implementation of `Symfony\Component\Clock\ClockInterface` (already mentioned above);
|
- `\Symfony\Component\Clock\MockClock`, an implementation of `Symfony\Component\Clock\ClockInterface` (already mentioned above);
|
||||||
@@ -234,22 +234,22 @@ This must be a decision made by a human, not by an AI. Every AI task must abort
|
|||||||
|
|
||||||
#### Running Tests
|
#### Running Tests
|
||||||
|
|
||||||
The tests are run from the project's root (not from the bundle's root: so, do not change the directory to any bundle directory before running tests).
|
The tests are run from the project's root (not from the bundle's root).
|
||||||
|
|
||||||
Tests must be run using the `symfony` command:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Run all tests
|
||||||
|
vendor/bin/phpunit
|
||||||
|
|
||||||
|
# Run tests for a specific bundle
|
||||||
|
vendor/bin/phpunit --testsuite NameBundle
|
||||||
|
|
||||||
# Run a specific test file
|
# Run a specific test file
|
||||||
symfony composer exec phpunit -- path/to/TestFile.php
|
vendor/bin/phpunit path/to/TestFile.php
|
||||||
|
|
||||||
# Run a specific test method
|
# Run a specific test method
|
||||||
symfony composer exec phpunit -- --filter methodName path/to/TestFile.php
|
vendor/bin/phpunit --filter methodName path/to/TestFile.php
|
||||||
```
|
```
|
||||||
|
|
||||||
When writing tests, only test specific files. Do not run all tests or the full
|
|
||||||
test suite.
|
|
||||||
|
|
||||||
#### Test Structure
|
#### Test Structure
|
||||||
|
|
||||||
Tests are organized by bundle and follow the same structure as the bundle itself:
|
Tests are organized by bundle and follow the same structure as the bundle itself:
|
||||||
@@ -297,7 +297,7 @@ class TicketTest extends TestCase
|
|||||||
|
|
||||||
#### Test Database
|
#### Test Database
|
||||||
|
|
||||||
For tests that require a database, the project uses a postgresql database filled with fixtures (usage of doctrine-fixtures). You can configure a different database for testing in the `.env.test` file.
|
For tests that require a database, the project uses postgresql database filled by fixtures (usage of doctrine-fixtures). You can configure a different database for testing in the `.env.test` file.
|
||||||
|
|
||||||
### Code Quality Tools
|
### Code Quality Tools
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"tabWidth": 2,
|
|
||||||
"useTabs": false
|
|
||||||
}
|
|
||||||
30
.vscode/launch.json
vendored
30
.vscode/launch.json
vendored
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
// Use IntelliSense to learn about possible attributes.
|
|
||||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
"name": "Chill Debug",
|
|
||||||
"type": "php",
|
|
||||||
"request": "launch",
|
|
||||||
"port": 9000,
|
|
||||||
"pathMappings": {
|
|
||||||
"/var/www/html": "${workspaceFolder}"
|
|
||||||
},
|
|
||||||
"preLaunchTask": "symfony"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Yarn Encore Dev (Watch)",
|
|
||||||
"type": "node-terminal",
|
|
||||||
"request": "launch",
|
|
||||||
"command": "yarn encore dev --watch",
|
|
||||||
"cwd": "${workspaceFolder}"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"compounds": [
|
|
||||||
{
|
|
||||||
"name": "Chill Debug + Yarn Encore Dev (Watch)",
|
|
||||||
"configurations": ["Chill Debug", "Yarn Encore Dev (Watch)"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
23
.vscode/tasks.json
vendored
23
.vscode/tasks.json
vendored
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"command": "symfony",
|
|
||||||
"args": [
|
|
||||||
"server:start",
|
|
||||||
"--allow-http",
|
|
||||||
"--no-tls",
|
|
||||||
"--port=8000",
|
|
||||||
"--allow-all-ip",
|
|
||||||
"-d"
|
|
||||||
],
|
|
||||||
"label": "symfony"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"command": "yarn",
|
|
||||||
"args": ["encore", "dev", "--watch"],
|
|
||||||
"label": "webpack"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
101
CHANGELOG.md
101
CHANGELOG.md
@@ -6,103 +6,6 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|||||||
and is generated by [Changie](https://github.com/miniscruff/changie).
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
||||||
|
|
||||||
|
|
||||||
## v4.6.1 - 2025-10-27
|
|
||||||
### Fixed
|
|
||||||
* Fix export case where no 'reason' is picked within the PersonHavingActivityBetweenDateFilter.php
|
|
||||||
|
|
||||||
## v4.6.0 - 2025-10-15
|
|
||||||
### Feature
|
|
||||||
* ([#423](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/423)) Create environment banner that can be activated and configured depending on the image deployed
|
|
||||||
* ([#394](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/394)) Only show active workflow on the page "my tracked workflow"
|
|
||||||
### Fixed
|
|
||||||
* Fix loading of classLists in SocialIssuesAcc.vue, ensure elements are present
|
|
||||||
* Fix the rendering of list of StoredObjectVersions, where there are kept version (before converting to pdf) and intermediate versions deleted
|
|
||||||
* ([#434](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/434)) Notification: fix editing of sent notification by removing form.addressesEmails, a field that no longer exists
|
|
||||||
* Fix loading of social issues and social actions within vue component
|
|
||||||
* ([#446](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/446)) Add unique condition on stored object filename, with cleaning step on existing duplicate filenames
|
|
||||||
|
|
||||||
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
|
|
||||||
* [workflow] take permissions into account to delete the workflow attachment
|
|
||||||
* ([#448](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/448)) Fix the execution of daily cronjob notification, when the previous last execution storage was invalid
|
|
||||||
|
|
||||||
## v4.5.1 - 2025-10-03
|
|
||||||
### Fixed
|
|
||||||
* Add missing javascript dependency
|
|
||||||
* Add exception handling for conversion of attachment on sending external, when documens are already in pdf
|
|
||||||
|
|
||||||
## v4.5.0 - 2025-10-03
|
|
||||||
### Feature
|
|
||||||
* Only allow delete of attachment on workflows that are not final
|
|
||||||
* Move up signature buttons on index workflow page for easier access
|
|
||||||
* Filter out document from attachment list if it is the same as the workflow document
|
|
||||||
* Block edition on attached document on workflow, if the workflow is finalized or sent external
|
|
||||||
* Convert workflow's attached document to pdf while sending them external
|
|
||||||
* After a signature is canceled or rejected, going to a waiting page until the post-process routines apply a workflow transition
|
|
||||||
### Fixed
|
|
||||||
* ([#426](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/426)) Increased the number of required characters when setting a new password in Chill from 9 to 14 - GDPR compliance
|
|
||||||
* Fix permissions on storedObject which are subject by a workflow
|
|
||||||
### DX
|
|
||||||
* Introduce a WaitingScreen component to display a waiting screen
|
|
||||||
|
|
||||||
## v4.4.2 - 2025-09-12
|
|
||||||
### Fixed
|
|
||||||
* Fix document generation and workflow generation do not work on accompanying period work documents
|
|
||||||
|
|
||||||
## v4.4.1 - 2025-09-11
|
|
||||||
### Fixed
|
|
||||||
* fix translations in duplicate evaluation document modal and realign close modal button
|
|
||||||
|
|
||||||
## v4.4.0 - 2025-09-11
|
|
||||||
### Feature
|
|
||||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Allow the merge of two accompanying period works
|
|
||||||
* ([#369](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/369)) Duplication of a document to another accompanying period work evaluation
|
|
||||||
* ([#359](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/359)) Fusion of two accompanying period works
|
|
||||||
### Fixed
|
|
||||||
* Fix display of 'duplicate' and 'merge' buttons in CRUD templates
|
|
||||||
* Fix saving notification preferences in user's profile
|
|
||||||
|
|
||||||
## v4.3.0 - 2025-09-08
|
|
||||||
### Feature
|
|
||||||
* ([#409](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/409)) Add 45 and 60 min calendar ranges
|
|
||||||
* Add a command to generate a list of permissions
|
|
||||||
* ([#412](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/412)) Add an absence end date
|
|
||||||
|
|
||||||
**Schema Change**: Add columns or tables
|
|
||||||
### Fixed
|
|
||||||
* fix date formatting in calendar range display
|
|
||||||
* Change route URL to avoid clash with person duplicate controller method
|
|
||||||
|
|
||||||
## v4.2.1 - 2025-09-03
|
|
||||||
### Fixed
|
|
||||||
* Fix exports to work with DirectExportInterface
|
|
||||||
### DX
|
|
||||||
* Improve error message when a stored object cannot be written on local disk
|
|
||||||
|
|
||||||
|
|
||||||
## v4.2.0 - 2025-09-02
|
|
||||||
### Feature
|
|
||||||
* ([#64](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/64)) Add external identifier for a Person
|
|
||||||
|
|
||||||
**Schema Change**: Add columns or tables
|
|
||||||
* ([#330](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/330) Allow users to choose for which notifications they want to receive an email
|
|
||||||
### Fixed
|
|
||||||
* ([#422](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/422)) Fixed html layout of pages for recovering password
|
|
||||||
* Fix typo in 'uncheckAll' script for centers selection
|
|
||||||
* Fix incorrect parameter name in event details link
|
|
||||||
|
|
||||||
## v4.1.0 - 2025-08-26
|
|
||||||
### Feature
|
|
||||||
* ([#400](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/400)) Add filter to social actions list to filter out actions where current user intervenes
|
|
||||||
* ([#399](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/399)) Show filters on list pages unfolded by default
|
|
||||||
* Expansion of event module with new fields in the creation form: thematic, internal/external animator, responsable, and budget elements. Filtering options in the event list + adapted exports
|
|
||||||
|
|
||||||
**Schema Change**: Add columns or tables
|
|
||||||
### Fixed
|
|
||||||
* ([#382](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/382)) adjust display logic for accompanying period dates, include closing date if period is closed.
|
|
||||||
* ([#384](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/384)) add min and step attributes to integer field in DateIntervalType
|
|
||||||
### UX
|
|
||||||
* Limit display of participations in event list
|
|
||||||
|
|
||||||
## v4.0.2 - 2025-07-09
|
## v4.0.2 - 2025-07-09
|
||||||
### Fixed
|
### Fixed
|
||||||
* Fix add missing translation
|
* Fix add missing translation
|
||||||
@@ -780,7 +683,7 @@ Fix color of Chill footer
|
|||||||
- ajout d'un filtre et regroupement par usager participant sur les échanges
|
- ajout d'un filtre et regroupement par usager participant sur les échanges
|
||||||
- ajout d'un regroupement: par type d'activité associé au parcours;
|
- ajout d'un regroupement: par type d'activité associé au parcours;
|
||||||
- trie les filtre et regroupements par ordre alphabétique dans els exports
|
- trie les filtre et regroupements par ordre alphabétique dans els exports
|
||||||
- ajout d'un paramètre qui permet de désactiver le filtre par territoire dans les exports
|
- ajout d'un paramètre qui permet de désactiver le filtre par centre dans les exports
|
||||||
- correction de l'interface de date dans les filtres et regroupements "par statut du parcours à la date"
|
- correction de l'interface de date dans les filtres et regroupements "par statut du parcours à la date"
|
||||||
|
|
||||||
## v2.9.2 - 2023-10-17
|
## v2.9.2 - 2023-10-17
|
||||||
@@ -960,7 +863,7 @@ error when trying to reedit a saved export
|
|||||||
- ajout d'un regroupement par métier des intervenants sur un parcours;
|
- ajout d'un regroupement par métier des intervenants sur un parcours;
|
||||||
- ajout d'un regroupement par service des intervenants sur un parcours;
|
- ajout d'un regroupement par service des intervenants sur un parcours;
|
||||||
- ajout d'un regroupement par utilisateur intervenant sur un parcours
|
- ajout d'un regroupement par utilisateur intervenant sur un parcours
|
||||||
- ajout d'un regroupement "par territoire de l'usager";
|
- ajout d'un regroupement "par centre de l'usager";
|
||||||
- ajout d'un filtre "par métier intervenant sur un parcours";
|
- ajout d'un filtre "par métier intervenant sur un parcours";
|
||||||
- ajout d'un filtre "par service intervenant sur un parcours";
|
- ajout d'un filtre "par service intervenant sur un parcours";
|
||||||
- création d'un rôle spécifique pour voir les parcours confidentiels (et séparer de celui de la liste qui permet de ré-assigner les parcours en lot);
|
- création d'un rôle spécifique pour voir les parcours confidentiels (et séparer de celui de la liste qui permet de ré-assigner les parcours en lot);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ Arborescence:
|
|||||||
- person
|
- person
|
||||||
- personvendee
|
- personvendee
|
||||||
- household_edit_metadata
|
- household_edit_metadata
|
||||||
- index.ts
|
- index.js
|
||||||
```
|
```
|
||||||
|
|
||||||
## Organisation des feuilles de styles
|
## Organisation des feuilles de styles
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
import {
|
import { trans, setLocale, setLocaleFallbacks } from "./ux-translator";
|
||||||
trans,
|
|
||||||
setLocale,
|
|
||||||
getLocale,
|
|
||||||
setLocaleFallbacks,
|
|
||||||
} from "./ux-translator";
|
|
||||||
|
|
||||||
setLocaleFallbacks({ en: "fr", nl: "fr", fr: "en" });
|
setLocaleFallbacks({"en": "fr", "nl": "fr", "fr": "en"});
|
||||||
setLocale("fr");
|
setLocale('fr');
|
||||||
|
|
||||||
export { trans, getLocale };
|
export { trans };
|
||||||
export * from "../var/translations";
|
export * from '../var/translations';
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"ext-openssl": "*",
|
"ext-openssl": "*",
|
||||||
"ext-redis": "*",
|
"ext-redis": "*",
|
||||||
"ext-zlib": "*",
|
"ext-zlib": "*",
|
||||||
"champs-libres/wopi-bundle": "dev-symfony-v5@dev",
|
"champs-libres/wopi-bundle": "dev-master@dev",
|
||||||
"champs-libres/wopi-lib": "dev-master@dev",
|
"champs-libres/wopi-lib": "dev-master@dev",
|
||||||
"doctrine/data-fixtures": "^1.8",
|
"doctrine/data-fixtures": "^1.8",
|
||||||
"doctrine/doctrine-bundle": "^2.1",
|
"doctrine/doctrine-bundle": "^2.1",
|
||||||
@@ -133,7 +133,6 @@
|
|||||||
"Chill\\TaskBundle\\": "src/Bundle/ChillTaskBundle",
|
"Chill\\TaskBundle\\": "src/Bundle/ChillTaskBundle",
|
||||||
"Chill\\ThirdPartyBundle\\": "src/Bundle/ChillThirdPartyBundle",
|
"Chill\\ThirdPartyBundle\\": "src/Bundle/ChillThirdPartyBundle",
|
||||||
"Chill\\WopiBundle\\": "src/Bundle/ChillWopiBundle/src",
|
"Chill\\WopiBundle\\": "src/Bundle/ChillWopiBundle/src",
|
||||||
"Chill\\TicketBundle\\": "src/Bundle/ChillTicketBundle/src",
|
|
||||||
"Chill\\Utils\\Rector\\": "utils/rector/src"
|
"Chill\\Utils\\Rector\\": "utils/rector/src"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
||||||
|
loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true],
|
||||||
ChampsLibres\WopiBundle\WopiBundle::class => ['all' => true],
|
ChampsLibres\WopiBundle\WopiBundle::class => ['all' => true],
|
||||||
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
|
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
|
||||||
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
|
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
|
||||||
@@ -34,8 +35,6 @@ return [
|
|||||||
Chill\ThirdPartyBundle\ChillThirdPartyBundle::class => ['all' => true],
|
Chill\ThirdPartyBundle\ChillThirdPartyBundle::class => ['all' => true],
|
||||||
Chill\BudgetBundle\ChillBudgetBundle::class => ['all' => true],
|
Chill\BudgetBundle\ChillBudgetBundle::class => ['all' => true],
|
||||||
Chill\WopiBundle\ChillWopiBundle::class => ['all' => true],
|
Chill\WopiBundle\ChillWopiBundle::class => ['all' => true],
|
||||||
Chill\TicketBundle\ChillTicketBundle::class => ['all' => true],
|
|
||||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||||
Symfony\UX\Translator\UxTranslatorBundle::class => ['all' => true],
|
Symfony\UX\Translator\UxTranslatorBundle::class => ['all' => true],
|
||||||
loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true],
|
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
chill_main:
|
chill_main:
|
||||||
available_languages: [ '%env(resolve:LOCALE)%', 'en' ]
|
available_languages: [ '%env(resolve:LOCALE)%', 'en' ]
|
||||||
available_countries: ['BE', 'FR']
|
available_countries: ['BE', 'FR']
|
||||||
top_banner:
|
|
||||||
visible: false
|
|
||||||
text:
|
|
||||||
fr: 'Vous travaillez actuellement avec la version de PRÉ-PRODUCTION.'
|
|
||||||
nl: 'Je werkt momenteel in de PRE-PRODUCTIE versie'
|
|
||||||
color: '#353535'
|
|
||||||
background_color: '#d8bb48'
|
|
||||||
notifications:
|
notifications:
|
||||||
from_email: '%env(resolve:NOTIFICATION_FROM_EMAIL)%'
|
from_email: '%env(resolve:NOTIFICATION_FROM_EMAIL)%'
|
||||||
from_name: '%env(resolve:NOTIFICATION_FROM_NAME)%'
|
from_name: '%env(resolve:NOTIFICATION_FROM_NAME)%'
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
chill_aside_activity:
|
|
||||||
show_concerned_persons_count: hidden
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
chill_doc_store:
|
chill_doc_store:
|
||||||
use_driver: local_storage
|
use_driver: openstack
|
||||||
local_storage:
|
local_storage:
|
||||||
storage_path: '%kernel.project_dir%/var/storage'
|
storage_path: '%kernel.project_dir%/var/storage'
|
||||||
openstack:
|
openstack:
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
chill_ticket:
|
|
||||||
ticket:
|
|
||||||
person_per_ticket: one # One of "one"; "many"
|
|
||||||
response_time_exceeded_delay: PT12H
|
|
||||||
|
|
||||||
@@ -14,7 +14,6 @@ doctrine_migrations:
|
|||||||
'Chill\Migrations\Calendar': '@ChillCalendarBundle/migrations'
|
'Chill\Migrations\Calendar': '@ChillCalendarBundle/migrations'
|
||||||
'Chill\Migrations\Budget': '@ChillBudgetBundle/migrations'
|
'Chill\Migrations\Budget': '@ChillBudgetBundle/migrations'
|
||||||
'Chill\Migrations\Report': '@ChillReportBundle/migrations'
|
'Chill\Migrations\Report': '@ChillReportBundle/migrations'
|
||||||
'Chill\Migrations\Ticket': '@ChillTicketBundle/migrations'
|
|
||||||
all_or_nothing:
|
all_or_nothing:
|
||||||
true
|
true
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ framework:
|
|||||||
'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
|
'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
|
||||||
'Chill\MainBundle\Export\Messenger\RemoveExportGenerationMessage': async
|
'Chill\MainBundle\Export\Messenger\RemoveExportGenerationMessage': async
|
||||||
'Chill\MainBundle\Notification\Email\NotificationEmailMessages\ScheduleDailyNotificationDigestMessage': async
|
'Chill\MainBundle\Notification\Email\NotificationEmailMessages\ScheduleDailyNotificationDigestMessage': async
|
||||||
'Chill\TicketBundle\Messenger\PostTicketUpdateMessage': async
|
|
||||||
# end of routes added by chill-bundles recipes
|
# end of routes added by chill-bundles recipes
|
||||||
# Route your messages to the transports
|
# Route your messages to the transports
|
||||||
# 'App\Message\YourMessage': async
|
# 'App\Message\YourMessage': async
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
chill_ticket_bundle:
|
|
||||||
resource: '@ChillTicketBundle/config/routes.yaml'
|
|
||||||
@@ -23,8 +23,8 @@ class "Document" {
|
|||||||
- text description
|
- text description
|
||||||
- ArrayCollection_DocumentCategory categories
|
- ArrayCollection_DocumentCategory categories
|
||||||
- varchar_150 content #link to openstack
|
- varchar_150 content #link to openstack
|
||||||
- Territoire territoire
|
- Center center
|
||||||
- Service service
|
- Cercle cercle
|
||||||
- User user
|
- User user
|
||||||
- DateTime date # Creation date
|
- DateTime date # Creation date
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,94 +11,24 @@
|
|||||||
Create a new bundle
|
Create a new bundle
|
||||||
*******************
|
*******************
|
||||||
|
|
||||||
|
Create your own bundle is not a trivial task.
|
||||||
|
|
||||||
|
The easiest way to achieve this is seems to be :
|
||||||
|
|
||||||
|
1. Prepare a fresh installation of the chill project, in a new directory
|
||||||
|
2. Create a new bundle in this project, in the src directory
|
||||||
|
3. Initialize a git repository **at the root bundle**, and create your initial commit.
|
||||||
|
4. Register the bundle with composer/packagist. If you do not plan to distribute your bundle with packagist, you may use a custom repository for achieve this [#f1]_
|
||||||
|
5. Move to a development installation, made as described in the :ref:`installation-for-development` section, and add your new repository to the composer.json file
|
||||||
|
6. Work as :ref:`usual <editing-code-and-commiting>`
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
|
|
||||||
This part of the doc is not yet tested
|
This part of the doc is not yet tested
|
||||||
|
|
||||||
Create a new directory with Bundle class
|
TODO
|
||||||
----------------------------------------
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
mkdir -p src/Bundle/ChillSomeBundle/src/config
|
|
||||||
mkdir -p src/Bundle/ChillSomeBundle/src/Controller
|
|
||||||
|
|
||||||
Add a bundle file
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
<?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\SomeBundle;
|
|
||||||
|
|
||||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
|
||||||
|
|
||||||
class ChillSomeBundle extends Bundle {}
|
|
||||||
|
|
||||||
And a route file:
|
|
||||||
|
|
||||||
.. code-block:: yaml
|
|
||||||
|
|
||||||
chill_ticket_controller:
|
|
||||||
resource: '@ChillTicketBundle/Controller/'
|
|
||||||
type: annotation
|
|
||||||
|
|
||||||
Register the new psr-4 namespace
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
In composer.json, add the new psr4 namespace
|
|
||||||
|
|
||||||
.. code-block:: diff
|
|
||||||
|
|
||||||
{
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
+ "Chill\\SomeBundle\\": "src/Bundle/ChillSomeBundle/src",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Register the bundle
|
.. rubric:: Footnotes
|
||||||
-------------------
|
|
||||||
|
|
||||||
Register in the file :code:`config/bundles.php`:
|
|
||||||
|
|
||||||
.. code-block:: php
|
|
||||||
|
|
||||||
Vendor\Bundle\YourBundle\YourBundle::class => ['all' => true],
|
|
||||||
|
|
||||||
And import routes in :code:`config/routes/chill_some_bundle.yaml`:
|
|
||||||
|
|
||||||
.. code-block:: yaml
|
|
||||||
|
|
||||||
chill_ticket_bundle:
|
|
||||||
resource: '@ChillSomeBundle/config/routes.yaml'
|
|
||||||
|
|
||||||
Add the doctrine_migration namespace
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
Add the namespace to :code:`config/packages/doctrine_migrations_chill.yaml`
|
|
||||||
|
|
||||||
.. code-block:: diff
|
|
||||||
|
|
||||||
doctrine_migrations:
|
|
||||||
migrations_paths:
|
|
||||||
+ 'Chill\Some\Ticket': '@ChillSomeBundle/migrations'
|
|
||||||
|
|
||||||
Dump autoloading
|
|
||||||
----------------
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
symfony composer dump-autoload
|
|
||||||
|
|
||||||
|
.. [#f1] Be aware that we use the Affero GPL Licence, which ensure that all users must have access to derivative works done with this software.
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ Certaines données sont historisées:
|
|||||||
|
|
||||||
- les référents d'un parcours;
|
- les référents d'un parcours;
|
||||||
- les statuts d'un parcours;
|
- les statuts d'un parcours;
|
||||||
- la liaison entre les territoires et les usagers;
|
- la liaison entre les centres et les usagers;
|
||||||
- etc.
|
- etc.
|
||||||
|
|
||||||
Dans ces cas-là, Chill crée généralement deux colonnes, qui sont habituellement nommées :code:`startDate` et :code:`endDate`. Lorsque la colonne :code:`endDate` est à :code:`NULL`, cela signifie que la période n'est pas "fermée". La colonne :code:`startDate` n'est pas nullable.
|
Dans ces cas-là, Chill crée généralement deux colonnes, qui sont habituellement nommées :code:`startDate` et :code:`endDate`. Lorsque la colonne :code:`endDate` est à :code:`NULL`, cela signifie que la période n'est pas "fermée". La colonne :code:`startDate` n'est pas nullable.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
order,table_schema,table_name,commentaire
|
order,table_schema,table_name,commentaire
|
||||||
1,chill_3party,party_category,Catégorie de tiers
|
1,chill_3party,party_category,Catégorie de tiers
|
||||||
2,chill_3party,party_center,Association entre les tiers et les territoires (déprécié)
|
2,chill_3party,party_center,Association entre les tiers et les centres (déprécié)
|
||||||
3,chill_3party,party_profession,Profession du tiers (déprécié)
|
3,chill_3party,party_profession,Profession du tiers (déprécié)
|
||||||
4,chill_3party,third_party,Tiers
|
4,chill_3party,third_party,Tiers
|
||||||
5,chill_3party,thirdparty_category,association tiers - catégories
|
5,chill_3party,thirdparty_category,association tiers - catégories
|
||||||
@@ -54,7 +54,7 @@ order,table_schema,table_name,commentaire
|
|||||||
53,public,activitytpresence,Présence aux échanges
|
53,public,activitytpresence,Présence aux échanges
|
||||||
54,public,activitytype,Types d'échanges
|
54,public,activitytype,Types d'échanges
|
||||||
55,public,activitytypecategory,Catégories de types d'échanges
|
55,public,activitytypecategory,Catégories de types d'échanges
|
||||||
56,public,centers,"Territoires (territoires, agences, etc.)"
|
56,public,centers,"Centres (territoires, agences, etc.)"
|
||||||
57,public,chill_activity_activity_chill_person_socialaction,
|
57,public,chill_activity_activity_chill_person_socialaction,
|
||||||
58,public,chill_activity_activity_chill_person_socialissue
|
58,public,chill_activity_activity_chill_person_socialissue
|
||||||
59,public,chill_docgen_template,Gabarits de documents
|
59,public,chill_docgen_template,Gabarits de documents
|
||||||
@@ -111,7 +111,7 @@ order,table_schema,table_name,commentaire
|
|||||||
110,public,chill_person_marital_status,Etats civils
|
110,public,chill_person_marital_status,Etats civils
|
||||||
111,public,chill_person_not_duplicate,
|
111,public,chill_person_not_duplicate,
|
||||||
112,public,chill_person_person,Usagers
|
112,public,chill_person_person,Usagers
|
||||||
113,public,chill_person_person_center_history,Historique des territoires d'un usagers
|
113,public,chill_person_person_center_history,Historique des centres d'un usagers
|
||||||
114,public,chill_person_persons_to_addresses,Déprécié
|
114,public,chill_person_persons_to_addresses,Déprécié
|
||||||
115,public,chill_person_phone,Numéros d etéléphone supplémentaires d'un usager
|
115,public,chill_person_phone,Numéros d etéléphone supplémentaires d'un usager
|
||||||
116,public,chill_person_relations,Types de relations de filiation
|
116,public,chill_person_relations,Types de relations de filiation
|
||||||
@@ -142,7 +142,7 @@ order,table_schema,table_name,commentaire
|
|||||||
141,public,permission_groups
|
141,public,permission_groups
|
||||||
142,public,permissionsgroup_rolescope
|
142,public,permissionsgroup_rolescope
|
||||||
143,public,persons_spoken_languages
|
143,public,persons_spoken_languages
|
||||||
144,public,regroupment,Regroupement de territoires
|
144,public,regroupment,Regroupement de centres
|
||||||
145,public,regroupment_center,
|
145,public,regroupment_center,
|
||||||
146,public,role_scopes,
|
146,public,role_scopes,
|
||||||
147,public,scopes,Services
|
147,public,scopes,Services
|
||||||
|
|||||||
|
Can't render this file because it has a wrong number of fields in line 28.
|
@@ -41,7 +41,6 @@
|
|||||||
"typescript": "^5.6.3",
|
"typescript": "^5.6.3",
|
||||||
"typescript-eslint": "^8.13.0",
|
"typescript-eslint": "^8.13.0",
|
||||||
"vue-loader": "^17.0.0",
|
"vue-loader": "^17.0.0",
|
||||||
"vue-tsc": "^3.1.3",
|
|
||||||
"webpack": "^5.75.0",
|
"webpack": "^5.75.0",
|
||||||
"webpack-cli": "^5.0.1"
|
"webpack-cli": "^5.0.1"
|
||||||
},
|
},
|
||||||
@@ -56,7 +55,6 @@
|
|||||||
"@tsconfig/node20": "^20.1.4",
|
"@tsconfig/node20": "^20.1.4",
|
||||||
"@types/dompurify": "^3.0.5",
|
"@types/dompurify": "^3.0.5",
|
||||||
"@types/leaflet": "^1.9.3",
|
"@types/leaflet": "^1.9.3",
|
||||||
"@vueuse/core": "^13.9.0",
|
|
||||||
"bootstrap-icons": "^1.11.3",
|
"bootstrap-icons": "^1.11.3",
|
||||||
"dropzone": "^5.7.6",
|
"dropzone": "^5.7.6",
|
||||||
"es6-promise": "^4.2.8",
|
"es6-promise": "^4.2.8",
|
||||||
@@ -81,12 +79,12 @@
|
|||||||
"dev": "encore dev",
|
"dev": "encore dev",
|
||||||
"watch": "encore dev --watch",
|
"watch": "encore dev --watch",
|
||||||
"build": "encore production --progress",
|
"build": "encore production --progress",
|
||||||
"specs-build": "yaml-merge src/Bundle/ChillMainBundle/chill.api.specs.yaml src/Bundle/ChillPersonBundle/chill.api.specs.yaml src/Bundle/ChillCalendarBundle/chill.api.specs.yaml src/Bundle/ChillThirdPartyBundle/chill.api.specs.yaml src/Bundle/ChillDocStoreBundle/chill.api.specs.yaml src/Bundle/ChillTicketBundle/chill.api.specs.yaml> templates/api/specs.yaml",
|
"specs-build": "yaml-merge src/Bundle/ChillMainBundle/chill.api.specs.yaml src/Bundle/ChillPersonBundle/chill.api.specs.yaml src/Bundle/ChillCalendarBundle/chill.api.specs.yaml src/Bundle/ChillThirdPartyBundle/chill.api.specs.yaml src/Bundle/ChillDocStoreBundle/chill.api.specs.yaml> templates/api/specs.yaml",
|
||||||
"specs-validate": "swagger-cli validate templates/api/specs.yaml",
|
"specs-validate": "swagger-cli validate templates/api/specs.yaml",
|
||||||
"specs-create-dir": "mkdir -p templates/api",
|
"specs-create-dir": "mkdir -p templates/api",
|
||||||
"specs": "yarn run specs-create-dir && yarn run specs-build && yarn run specs-validate",
|
"specs": "yarn run specs-create-dir && yarn run specs-build && yarn run specs-validate",
|
||||||
"version": "node --version",
|
"version": "node --version",
|
||||||
"eslint": "eslint-baseline --fix \"src/**/*.{js,ts,vue}\""
|
"eslint": "npx eslint-baseline --fix \"src/**/*.{js,ts,vue}\""
|
||||||
},
|
},
|
||||||
"private": true
|
"private": true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,10 +58,6 @@
|
|||||||
<!-- temporarily removed, the time to find a fix -->
|
<!-- temporarily removed, the time to find a fix -->
|
||||||
<exclude>src/Bundle/ChillPersonBundle/Tests/Controller/PersonDuplicateControllerViewTest.php</exclude>
|
<exclude>src/Bundle/ChillPersonBundle/Tests/Controller/PersonDuplicateControllerViewTest.php</exclude>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
|
||||||
<testsuite name="TicketBundle">
|
|
||||||
<directory suffix="Test.php">src/Bundle/ChillTicketBundle/tests/</directory>
|
|
||||||
</testsuite>
|
|
||||||
<!--
|
<!--
|
||||||
<testsuite name="ReportBundle">
|
<testsuite name="ReportBundle">
|
||||||
<directory suffix="Test.php">src/Bundle/ChillReportBundle/Tests/</directory>
|
<directory suffix="Test.php">src/Bundle/ChillReportBundle/Tests/</directory>
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
In this directory, you find an example of file for the command `chill:main:ticket_motives_import`.
|
|
||||||
|
|
||||||
This file contains a list of ticket motives to import into the system. Each entry is a dictionary with two keys: `code` and `label`. The `code` key contains the unique code for the ticket motive, and the `label` key contains the human-readable label for the ticket motive.
|
|
||||||
|
|
||||||
The `stored_objects` key contains the documents that will be associated with the tickets. They must be found in the same directory.
|
|
||||||
|
|
||||||
The command `chill:main:ticket_motives_import` uses this file to import the specified ticket motives into the system.
|
|
||||||
|
|
||||||
@@ -1,136 +0,0 @@
|
|||||||
- label:
|
|
||||||
fr: Appel famille pour annonce de décès
|
|
||||||
urgent: false
|
|
||||||
supplementary_informations:
|
|
||||||
- label:
|
|
||||||
fr: Date du décès
|
|
||||||
- label:
|
|
||||||
fr: lieu du décès (domicile ou hôpital)
|
|
||||||
- label:
|
|
||||||
fr: nom de l’hôpital
|
|
||||||
- label:
|
|
||||||
fr: service concerné
|
|
||||||
stored_objects:
|
|
||||||
- label:
|
|
||||||
fr: ☀️ De 07h à 21h
|
|
||||||
filename: 2_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🌙 De 21h à 07h du matin
|
|
||||||
filename: 3_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🗓️ Dimanches et jours fériés
|
|
||||||
filename: 4_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 'Appel famille pour annonce absence : hospitalisation ou consultation'
|
|
||||||
urgent: false
|
|
||||||
supplementary_informations:
|
|
||||||
- label:
|
|
||||||
fr: Quel hôpital
|
|
||||||
- label:
|
|
||||||
fr: quel service
|
|
||||||
- label:
|
|
||||||
fr: pour quelles raisons
|
|
||||||
- label:
|
|
||||||
fr: 'consultation : date et heure'
|
|
||||||
- label:
|
|
||||||
fr: hospitalisation complète ou HDJ
|
|
||||||
stored_objects:
|
|
||||||
- label:
|
|
||||||
fr: ☀️ De 07h à 21h
|
|
||||||
filename: 5_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🌙 De 21h à 07h du matin
|
|
||||||
filename: 6_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🗓️ Dimanches et jours fériés
|
|
||||||
filename: 7_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 'Appel famille pour annonce absence : interruption de prise en charge'
|
|
||||||
urgent: false
|
|
||||||
supplementary_informations:
|
|
||||||
- label:
|
|
||||||
fr: Pour quelles raisons ? Date
|
|
||||||
- label:
|
|
||||||
fr: durée
|
|
||||||
- label:
|
|
||||||
fr: accord médical ?
|
|
||||||
stored_objects:
|
|
||||||
- label:
|
|
||||||
fr: ☀️ De 07h à 21h
|
|
||||||
filename: 8_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🌙 De 21h à 07h du matin
|
|
||||||
filename: 9_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🗓️ Dimanches et jours fériés
|
|
||||||
filename: 10_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 'Appel famille pour annonce absence : changement d’adresse'
|
|
||||||
urgent: false
|
|
||||||
supplementary_informations:
|
|
||||||
- label:
|
|
||||||
fr: Où
|
|
||||||
- label:
|
|
||||||
fr: Pourquoi ? Pour combien de temps ? Besoin d’un relais des soins ? Nouvelle adresse ?
|
|
||||||
stored_objects:
|
|
||||||
- label:
|
|
||||||
fr: ☀️ De 07h à 21h
|
|
||||||
filename: 11_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🌙 De 21h à 07h du matin
|
|
||||||
filename: 12_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🗓️ Dimanches et jours fériés
|
|
||||||
filename: 13_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: Appel famille pour altération de l’état général du patient
|
|
||||||
urgent: true
|
|
||||||
supplementary_informations:
|
|
||||||
- label:
|
|
||||||
fr: Recherche des symptômes
|
|
||||||
- label:
|
|
||||||
fr: Attentes par rapport à la demande
|
|
||||||
stored_objects:
|
|
||||||
- label:
|
|
||||||
fr: ☀️ De 07h à 21h
|
|
||||||
filename: 14_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🌙 De 21h à 07h du matin
|
|
||||||
filename: 15_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🗓️ Dimanches et jours fériés
|
|
||||||
filename: 16_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: Appel famille pour prise en charge de la douleur
|
|
||||||
urgent: true
|
|
||||||
supplementary_informations:
|
|
||||||
- label:
|
|
||||||
fr: Localisation douleur
|
|
||||||
- label:
|
|
||||||
fr: Horaire dernier passage
|
|
||||||
- label:
|
|
||||||
fr: Traitements en cours
|
|
||||||
stored_objects:
|
|
||||||
- label:
|
|
||||||
fr: ☀️ De 07h à 21h
|
|
||||||
filename: 17_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🌙 De 21h à 07h du matin
|
|
||||||
filename: 18_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🗓️ Dimanches et jours fériés
|
|
||||||
filename: 19_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: Appel famille pour information sur la date de prise en charge
|
|
||||||
urgent: false
|
|
||||||
supplementary_informations: []
|
|
||||||
stored_objects:
|
|
||||||
- label:
|
|
||||||
fr: ☀️ De 07h à 21h
|
|
||||||
filename: 20_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🌙 De 21h à 07h du matin
|
|
||||||
filename: 21_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
- label:
|
|
||||||
fr: 🗓️ Dimanches et jours fériés
|
|
||||||
filename: 22_doc_20250402_Pelotons flux externes consolidés.pdf
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
In this directory, you find an example of file for the command `chill:main:override_translation`.
|
|
||||||
|
|
||||||
This file contains a list of translations to override in the translation catalogue. Each entry is a dictionary with two keys: `from` and `to`. The `from` key contains the original translation string, and the `to` key contains the replacement string.
|
|
||||||
|
|
||||||
The command `chill:main:override_translation` uses this file to generate a new translation catalogue with the specified overrides applied.
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
- {from: "de l'usager", to: "du patient"}
|
|
||||||
- {from: "l'usager", to: "le patient"}
|
|
||||||
- {from: "L'usager", to: "Le patient"}
|
|
||||||
- {from: "d'usagers", to: "de patients"}
|
|
||||||
- {from: "usagers", to: "patients"}
|
|
||||||
- {from: "Usagers", to: "Patients"}
|
|
||||||
- {from: "usager", to: "patient"}
|
|
||||||
- {from: "Usager", to: "Patient"}
|
|
||||||
@@ -66,9 +66,6 @@ class ListActivityHelper
|
|||||||
->leftJoin('activity.location', 'location')
|
->leftJoin('activity.location', 'location')
|
||||||
->addSelect('location.name AS locationName')
|
->addSelect('location.name AS locationName')
|
||||||
->addSelect('activity.sentReceived')
|
->addSelect('activity.sentReceived')
|
||||||
->addSelect('activity.comment.comment AS commentText')
|
|
||||||
->addSelect('activity.comment.date AS commentDate')
|
|
||||||
->addSelect('JSON_BUILD_OBJECT(\'uid\', activity.comment.userId, \'d\', activity.comment.date) AS commentUser')
|
|
||||||
->addSelect('JSON_BUILD_OBJECT(\'uid\', IDENTITY(activity.createdBy), \'d\', activity.createdAt) AS createdBy')
|
->addSelect('JSON_BUILD_OBJECT(\'uid\', IDENTITY(activity.createdBy), \'d\', activity.createdAt) AS createdBy')
|
||||||
->addSelect('activity.createdAt')
|
->addSelect('activity.createdAt')
|
||||||
->addSelect('JSON_BUILD_OBJECT(\'uid\', IDENTITY(activity.updatedBy), \'d\', activity.updatedAt) AS updatedBy')
|
->addSelect('JSON_BUILD_OBJECT(\'uid\', IDENTITY(activity.updatedBy), \'d\', activity.updatedAt) AS updatedBy')
|
||||||
@@ -90,8 +87,6 @@ class ListActivityHelper
|
|||||||
'createdAt', 'updatedAt' => $this->dateTimeHelper->getLabel($key),
|
'createdAt', 'updatedAt' => $this->dateTimeHelper->getLabel($key),
|
||||||
'createdBy', 'updatedBy' => $this->userHelper->getLabel($key, $values, $key),
|
'createdBy', 'updatedBy' => $this->userHelper->getLabel($key, $values, $key),
|
||||||
'date' => $this->dateTimeHelper->getLabel(self::MSG_KEY.$key),
|
'date' => $this->dateTimeHelper->getLabel(self::MSG_KEY.$key),
|
||||||
'commentDate' => $this->dateTimeHelper->getLabel(self::MSG_KEY.'comment_date'),
|
|
||||||
'commentUser' => $this->userHelper->getLabel($key, $values, self::MSG_KEY.'comment_user'),
|
|
||||||
'attendeeName' => function ($value) {
|
'attendeeName' => function ($value) {
|
||||||
if ('_header' === $value) {
|
if ('_header' === $value) {
|
||||||
return 'Attendee';
|
return 'Attendee';
|
||||||
@@ -181,9 +176,6 @@ class ListActivityHelper
|
|||||||
'usersNames',
|
'usersNames',
|
||||||
'thirdPartiesIds',
|
'thirdPartiesIds',
|
||||||
'thirdPartiesNames',
|
'thirdPartiesNames',
|
||||||
'commentText',
|
|
||||||
'commentDate',
|
|
||||||
'commentUser',
|
|
||||||
'createdBy',
|
'createdBy',
|
||||||
'createdAt',
|
'createdAt',
|
||||||
'updatedBy',
|
'updatedBy',
|
||||||
|
|||||||
@@ -90,9 +90,7 @@ class ActivityReasonFilter implements ExportElementValidatedInterface, FilterInt
|
|||||||
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
{
|
{
|
||||||
return [
|
return [];
|
||||||
'reasons' => [],
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function describeAction($data, ExportGenerationContext $context): string|\Symfony\Contracts\Translation\TranslatableInterface|array
|
public function describeAction($data, ExportGenerationContext $context): string|\Symfony\Contracts\Translation\TranslatableInterface|array
|
||||||
|
|||||||
@@ -42,8 +42,6 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
|
|||||||
|
|
||||||
public function alterQuery(QueryBuilder $qb, $data, ExportGenerationContext $exportGenerationContext): void
|
public function alterQuery(QueryBuilder $qb, $data, ExportGenerationContext $exportGenerationContext): void
|
||||||
{
|
{
|
||||||
error_log('alterQuery called with data: '.json_encode(array_keys($data)));
|
|
||||||
|
|
||||||
// create a subquery for activity
|
// create a subquery for activity
|
||||||
$sqb = $qb->getEntityManager()->createQueryBuilder();
|
$sqb = $qb->getEntityManager()->createQueryBuilder();
|
||||||
$sqb->select('1')
|
$sqb->select('1')
|
||||||
@@ -61,6 +59,7 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
|
|||||||
if (\in_array('activity', $qb->getAllAliases(), true)) {
|
if (\in_array('activity', $qb->getAllAliases(), true)) {
|
||||||
$sqb->andWhere('activity_person_having_activity.id = activity.id');
|
$sqb->andWhere('activity_person_having_activity.id = activity.id');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($data['reasons']) && [] !== $data['reasons']) {
|
if (isset($data['reasons']) && [] !== $data['reasons']) {
|
||||||
// add clause activity reason
|
// add clause activity reason
|
||||||
$sqb->join('activity_person_having_activity.reasons', 'reasons_person_having_activity');
|
$sqb->join('activity_person_having_activity.reasons', 'reasons_person_having_activity');
|
||||||
@@ -125,38 +124,12 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
|
|||||||
|
|
||||||
public function normalizeFormData(array $formData): array
|
public function normalizeFormData(array $formData): array
|
||||||
{
|
{
|
||||||
$normalized = [
|
return ['date_from_rolling' => $formData['date_from_rolling']->normalize(), 'date_to_rolling' => $formData['date_to_rolling']->normalize()];
|
||||||
'date_from_rolling' => $formData['date_from_rolling']->normalize(),
|
|
||||||
'date_to_rolling' => $formData['date_to_rolling']->normalize(),
|
|
||||||
'reasons' => [],
|
|
||||||
];
|
|
||||||
|
|
||||||
if (isset($formData['reasons']) && [] !== $formData['reasons']) {
|
|
||||||
$normalized['reasons'] = array_map(
|
|
||||||
fn (ActivityReason $reason) => $reason->getId(),
|
|
||||||
$formData['reasons']
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $normalized;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
public function denormalizeFormData(array $formData, int $fromVersion): array
|
||||||
{
|
{
|
||||||
$denormalized = [
|
return ['date_from_rolling' => RollingDate::fromNormalized($formData['date_from_rolling']), 'date_to_rolling' => RollingDate::fromNormalized($formData['date_to_rolling'])];
|
||||||
'date_from_rolling' => RollingDate::fromNormalized($formData['date_from_rolling']),
|
|
||||||
'date_to_rolling' => RollingDate::fromNormalized($formData['date_to_rolling']),
|
|
||||||
'reasons' => [],
|
|
||||||
];
|
|
||||||
|
|
||||||
if (isset($formData['reasons']) && [] !== $formData['reasons']) {
|
|
||||||
$denormalized['reasons'] = array_map(
|
|
||||||
fn ($id) => $this->activityReasonRepository->find($id),
|
|
||||||
$formData['reasons']
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $denormalized;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFormDefaultData(): array
|
public function getFormDefaultData(): array
|
||||||
@@ -170,12 +143,10 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
|
|||||||
|
|
||||||
public function describeAction($data, ExportGenerationContext $context): array
|
public function describeAction($data, ExportGenerationContext $context): array
|
||||||
{
|
{
|
||||||
$reasons = $data['reasons'] ?? [];
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
[] === $reasons ?
|
[] === $data['reasons'] ?
|
||||||
'export.filter.activity.describe_action_with_no_subject'
|
'export.filter.person_between_dates.describe_action_with_no_subject'
|
||||||
: 'export.filter.activity.describe_action_with_subject',
|
: 'export.filter.person_between_dates.describe_action_with_subject',
|
||||||
[
|
[
|
||||||
'date_from' => $this->rollingDateConverter->convert($data['date_from_rolling']),
|
'date_from' => $this->rollingDateConverter->convert($data['date_from_rolling']),
|
||||||
'date_to' => $this->rollingDateConverter->convert($data['date_to_rolling']),
|
'date_to' => $this->rollingDateConverter->convert($data['date_to_rolling']),
|
||||||
@@ -183,7 +154,7 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
|
|||||||
', ',
|
', ',
|
||||||
array_map(
|
array_map(
|
||||||
fn (ActivityReason $r): string => '"'.$this->translatableStringHelper->localize($r->getName()).'"',
|
fn (ActivityReason $r): string => '"'.$this->translatableStringHelper->localize($r->getName()).'"',
|
||||||
$reasons
|
$data['reasons']
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -197,7 +168,6 @@ final readonly class PersonHavingActivityBetweenDateFilter implements ExportElem
|
|||||||
|
|
||||||
public function validateForm($data, ExecutionContextInterface $context): void
|
public function validateForm($data, ExecutionContextInterface $context): void
|
||||||
{
|
{
|
||||||
error_log('validateForm called with data: '.json_encode(array_keys($data)));
|
|
||||||
if ($this->rollingDateConverter->convert($data['date_from_rolling'])
|
if ($this->rollingDateConverter->convert($data['date_from_rolling'])
|
||||||
>= $this->rollingDateConverter->convert($data['date_to_rolling'])) {
|
>= $this->rollingDateConverter->convert($data['date_to_rolling'])) {
|
||||||
$context->buildViolation('export.filter.activity.person_between_dates.date mismatch')
|
$context->buildViolation('export.filter.activity.person_between_dates.date mismatch')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<concerned-groups v-if="hasPerson" />
|
<concerned-groups v-if="hasPerson" />
|
||||||
<social-issues-acc v-if="hasSocialIssues" />
|
<social-issues-acc v-if="hasSocialIssues" />
|
||||||
<location v-if="hasLocation" />
|
<location v-if="hasLocation" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -10,12 +10,12 @@ import SocialIssuesAcc from "./components/SocialIssuesAcc.vue";
|
|||||||
import Location from "./components/Location.vue";
|
import Location from "./components/Location.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "App",
|
name: "App",
|
||||||
props: ["hasSocialIssues", "hasLocation", "hasPerson"],
|
props: ["hasSocialIssues", "hasLocation", "hasPerson"],
|
||||||
components: {
|
components: {
|
||||||
ConcernedGroups,
|
ConcernedGroups,
|
||||||
SocialIssuesAcc,
|
SocialIssuesAcc,
|
||||||
Location,
|
Location,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,43 +1,46 @@
|
|||||||
<template>
|
<template>
|
||||||
<teleport to="#add-persons" v-if="isComponentVisible">
|
<teleport to="#add-persons" v-if="isComponentVisible">
|
||||||
<div class="flex-bloc concerned-groups" :class="getContext">
|
<div class="flex-bloc concerned-groups" :class="getContext">
|
||||||
<persons-bloc
|
<persons-bloc
|
||||||
v-for="bloc in contextPersonsBlocs"
|
v-for="bloc in contextPersonsBlocs"
|
||||||
:key="bloc.key"
|
:key="bloc.key"
|
||||||
:bloc="bloc"
|
:bloc="bloc"
|
||||||
:bloc-width="getBlocWidth"
|
:bloc-width="getBlocWidth"
|
||||||
:set-persons-in-bloc="setPersonsInBloc"
|
:set-persons-in-bloc="setPersonsInBloc"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="getContext === 'accompanyingCourse' && suggestedEntities.length > 0"
|
v-if="
|
||||||
>
|
getContext === 'accompanyingCourse' &&
|
||||||
<ul class="list-suggest add-items inline">
|
suggestedEntities.length > 0
|
||||||
<li
|
"
|
||||||
v-for="(p, i) in suggestedEntities"
|
|
||||||
@click="addSuggestedEntity(p)"
|
|
||||||
:key="`suggestedEntities-${i}`"
|
|
||||||
>
|
>
|
||||||
<person-text v-if="p.type === 'person'" :person="p" />
|
<ul class="list-suggest add-items inline">
|
||||||
<span v-else>{{ p.text }}</span>
|
<li
|
||||||
</li>
|
v-for="(p, i) in suggestedEntities"
|
||||||
</ul>
|
@click="addSuggestedEntity(p)"
|
||||||
</div>
|
:key="`suggestedEntities-${i}`"
|
||||||
|
>
|
||||||
|
<person-text v-if="p.type === 'person'" :person="p" />
|
||||||
|
<span v-else>{{ p.text }}</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li class="add-persons">
|
<li class="add-persons">
|
||||||
<add-persons
|
<add-persons
|
||||||
:buttonTitle="trans(ACTIVITY_ADD_PERSONS)"
|
:buttonTitle="trans(ACTIVITY_ADD_PERSONS)"
|
||||||
:modalTitle="trans(ACTIVITY_ADD_PERSONS)"
|
:modalTitle="trans(ACTIVITY_ADD_PERSONS)"
|
||||||
v-bind:key="addPersons.key"
|
v-bind:key="addPersons.key"
|
||||||
v-bind:options="addPersonsOptions"
|
v-bind:options="addPersonsOptions"
|
||||||
@addNewPersons="addNewPersons"
|
@addNewPersons="addNewPersons"
|
||||||
ref="addPersons"
|
ref="addPersons"
|
||||||
>
|
>
|
||||||
</add-persons>
|
</add-persons>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</teleport>
|
</teleport>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -46,208 +49,208 @@ import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue";
|
|||||||
import PersonsBloc from "./ConcernedGroups/PersonsBloc.vue";
|
import PersonsBloc from "./ConcernedGroups/PersonsBloc.vue";
|
||||||
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
||||||
import {
|
import {
|
||||||
ACTIVITY_BLOC_PERSONS,
|
ACTIVITY_BLOC_PERSONS,
|
||||||
ACTIVITY_BLOC_PERSONS_ASSOCIATED,
|
ACTIVITY_BLOC_PERSONS_ASSOCIATED,
|
||||||
ACTIVITY_BLOC_THIRDPARTY,
|
ACTIVITY_BLOC_THIRDPARTY,
|
||||||
ACTIVITY_BLOC_USERS,
|
ACTIVITY_BLOC_USERS,
|
||||||
ACTIVITY_ADD_PERSONS,
|
ACTIVITY_ADD_PERSONS,
|
||||||
trans,
|
trans,
|
||||||
} from "translator";
|
} from "translator";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ConcernedGroups",
|
name: "ConcernedGroups",
|
||||||
components: {
|
components: {
|
||||||
AddPersons,
|
AddPersons,
|
||||||
PersonsBloc,
|
PersonsBloc,
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
return {
|
return {
|
||||||
trans,
|
trans,
|
||||||
ACTIVITY_ADD_PERSONS,
|
ACTIVITY_ADD_PERSONS,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
personsBlocs: [
|
personsBlocs: [
|
||||||
{
|
{
|
||||||
key: "persons",
|
key: "persons",
|
||||||
title: trans(ACTIVITY_BLOC_PERSONS),
|
title: trans(ACTIVITY_BLOC_PERSONS),
|
||||||
persons: [],
|
persons: [],
|
||||||
included: false,
|
included: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "personsAssociated",
|
||||||
|
title: trans(ACTIVITY_BLOC_PERSONS_ASSOCIATED),
|
||||||
|
persons: [],
|
||||||
|
included: window.activity
|
||||||
|
? window.activity.activityType.personsVisible !== 0
|
||||||
|
: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "personsNotAssociated",
|
||||||
|
title: "activity.bloc_persons_not_associated",
|
||||||
|
persons: [],
|
||||||
|
included: window.activity
|
||||||
|
? window.activity.activityType.personsVisible !== 0
|
||||||
|
: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "thirdparty",
|
||||||
|
title: trans(ACTIVITY_BLOC_THIRDPARTY),
|
||||||
|
persons: [],
|
||||||
|
included: window.activity
|
||||||
|
? window.activity.activityType.thirdPartiesVisible !== 0
|
||||||
|
: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "users",
|
||||||
|
title: trans(ACTIVITY_BLOC_USERS),
|
||||||
|
persons: [],
|
||||||
|
included: window.activity
|
||||||
|
? window.activity.activityType.usersVisible !== 0
|
||||||
|
: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
addPersons: {
|
||||||
|
key: "activity",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
isComponentVisible() {
|
||||||
|
return window.activity
|
||||||
|
? window.activity.activityType.personsVisible !== 0 ||
|
||||||
|
window.activity.activityType.thirdPartiesVisible !== 0 ||
|
||||||
|
window.activity.activityType.usersVisible !== 0
|
||||||
|
: true;
|
||||||
},
|
},
|
||||||
{
|
...mapState({
|
||||||
key: "personsAssociated",
|
persons: (state) => state.activity.persons,
|
||||||
title: trans(ACTIVITY_BLOC_PERSONS_ASSOCIATED),
|
thirdParties: (state) => state.activity.thirdParties,
|
||||||
persons: [],
|
users: (state) => state.activity.users,
|
||||||
included: window.activity
|
accompanyingCourse: (state) => state.activity.accompanyingPeriod,
|
||||||
? window.activity.activityType.personsVisible !== 0
|
}),
|
||||||
: true,
|
...mapGetters(["suggestedEntities"]),
|
||||||
|
getContext() {
|
||||||
|
return this.accompanyingCourse ? "accompanyingCourse" : "person";
|
||||||
},
|
},
|
||||||
{
|
contextPersonsBlocs() {
|
||||||
key: "personsNotAssociated",
|
return this.personsBlocs.filter((bloc) => bloc.included !== false);
|
||||||
title: "activity.bloc_persons_not_associated",
|
|
||||||
persons: [],
|
|
||||||
included: window.activity
|
|
||||||
? window.activity.activityType.personsVisible !== 0
|
|
||||||
: true,
|
|
||||||
},
|
},
|
||||||
{
|
addPersonsOptions() {
|
||||||
key: "thirdparty",
|
let optionsType = [];
|
||||||
title: trans(ACTIVITY_BLOC_THIRDPARTY),
|
if (window.activity) {
|
||||||
persons: [],
|
if (window.activity.activityType.personsVisible !== 0) {
|
||||||
included: window.activity
|
optionsType.push("person");
|
||||||
? window.activity.activityType.thirdPartiesVisible !== 0
|
}
|
||||||
: true,
|
if (window.activity.activityType.thirdPartiesVisible !== 0) {
|
||||||
|
optionsType.push("thirdparty");
|
||||||
|
}
|
||||||
|
if (window.activity.activityType.usersVisible !== 0) {
|
||||||
|
optionsType.push("user");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
optionsType = ["person", "thirdparty", "user"];
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
type: optionsType,
|
||||||
|
priority: null,
|
||||||
|
uniq: false,
|
||||||
|
button: {
|
||||||
|
size: "btn-sm",
|
||||||
|
},
|
||||||
|
};
|
||||||
},
|
},
|
||||||
{
|
getBlocWidth() {
|
||||||
key: "users",
|
return Math.round(100 / this.contextPersonsBlocs.length) + "%";
|
||||||
title: trans(ACTIVITY_BLOC_USERS),
|
|
||||||
persons: [],
|
|
||||||
included: window.activity
|
|
||||||
? window.activity.activityType.usersVisible !== 0
|
|
||||||
: true,
|
|
||||||
},
|
},
|
||||||
],
|
|
||||||
addPersons: {
|
|
||||||
key: "activity",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
isComponentVisible() {
|
|
||||||
return window.activity
|
|
||||||
? window.activity.activityType.personsVisible !== 0 ||
|
|
||||||
window.activity.activityType.thirdPartiesVisible !== 0 ||
|
|
||||||
window.activity.activityType.usersVisible !== 0
|
|
||||||
: true;
|
|
||||||
},
|
},
|
||||||
...mapState({
|
mounted() {
|
||||||
persons: (state) => state.activity.persons,
|
this.setPersonsInBloc();
|
||||||
thirdParties: (state) => state.activity.thirdParties,
|
|
||||||
users: (state) => state.activity.users,
|
|
||||||
accompanyingCourse: (state) => state.activity.accompanyingPeriod,
|
|
||||||
}),
|
|
||||||
...mapGetters(["suggestedEntities"]),
|
|
||||||
getContext() {
|
|
||||||
return this.accompanyingCourse ? "accompanyingCourse" : "person";
|
|
||||||
},
|
},
|
||||||
contextPersonsBlocs() {
|
methods: {
|
||||||
return this.personsBlocs.filter((bloc) => bloc.included !== false);
|
setPersonsInBloc() {
|
||||||
},
|
let groups;
|
||||||
addPersonsOptions() {
|
if (this.accompanyingCourse) {
|
||||||
let optionsType = [];
|
groups = this.splitPersonsInGroups();
|
||||||
if (window.activity) {
|
}
|
||||||
if (window.activity.activityType.personsVisible !== 0) {
|
this.personsBlocs.forEach((bloc) => {
|
||||||
optionsType.push("person");
|
if (this.accompanyingCourse) {
|
||||||
}
|
switch (bloc.key) {
|
||||||
if (window.activity.activityType.thirdPartiesVisible !== 0) {
|
case "personsAssociated":
|
||||||
optionsType.push("thirdparty");
|
bloc.persons = groups.personsAssociated;
|
||||||
}
|
bloc.included = true;
|
||||||
if (window.activity.activityType.usersVisible !== 0) {
|
break;
|
||||||
optionsType.push("user");
|
case "personsNotAssociated":
|
||||||
}
|
bloc.persons = groups.personsNotAssociated;
|
||||||
} else {
|
bloc.included = true;
|
||||||
optionsType = ["person", "thirdparty", "user"];
|
break;
|
||||||
}
|
}
|
||||||
return {
|
} else {
|
||||||
type: optionsType,
|
switch (bloc.key) {
|
||||||
priority: null,
|
case "persons":
|
||||||
uniq: false,
|
bloc.persons = this.persons;
|
||||||
button: {
|
bloc.included = true;
|
||||||
size: "btn-sm",
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (bloc.key) {
|
||||||
|
case "thirdparty":
|
||||||
|
bloc.persons = this.thirdParties;
|
||||||
|
break;
|
||||||
|
case "users":
|
||||||
|
bloc.persons = this.users;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}, groups);
|
||||||
|
},
|
||||||
|
splitPersonsInGroups() {
|
||||||
|
let personsAssociated = [];
|
||||||
|
let personsNotAssociated = this.persons;
|
||||||
|
let participations = this.getCourseParticipations();
|
||||||
|
this.persons.forEach((person) => {
|
||||||
|
participations.forEach((participation) => {
|
||||||
|
if (person.id === participation.id) {
|
||||||
|
//console.log(person.id);
|
||||||
|
personsAssociated.push(person);
|
||||||
|
personsNotAssociated = personsNotAssociated.filter(
|
||||||
|
(p) => p !== person,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
personsAssociated: personsAssociated,
|
||||||
|
personsNotAssociated: personsNotAssociated,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getCourseParticipations() {
|
||||||
|
let participations = [];
|
||||||
|
this.accompanyingCourse.participations.forEach((participation) => {
|
||||||
|
if (!participation.endDate) {
|
||||||
|
participations.push(participation.person);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return participations;
|
||||||
|
},
|
||||||
|
addNewPersons({ selected, modal }) {
|
||||||
|
console.log("@@@ CLICK button addNewPersons", selected);
|
||||||
|
selected.forEach((item) => {
|
||||||
|
this.$store.dispatch("addPersonsInvolved", item);
|
||||||
|
}, this);
|
||||||
|
this.$refs.addPersons.resetSearch(); // to cast child method
|
||||||
|
modal.showModal = false;
|
||||||
|
this.setPersonsInBloc();
|
||||||
|
},
|
||||||
|
addSuggestedEntity(person) {
|
||||||
|
this.$store.dispatch("addPersonsInvolved", {
|
||||||
|
result: person,
|
||||||
|
type: "person",
|
||||||
|
});
|
||||||
|
this.setPersonsInBloc();
|
||||||
},
|
},
|
||||||
};
|
|
||||||
},
|
},
|
||||||
getBlocWidth() {
|
|
||||||
return Math.round(100 / this.contextPersonsBlocs.length) + "%";
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.setPersonsInBloc();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
setPersonsInBloc() {
|
|
||||||
let groups;
|
|
||||||
if (this.accompanyingCourse) {
|
|
||||||
groups = this.splitPersonsInGroups();
|
|
||||||
}
|
|
||||||
this.personsBlocs.forEach((bloc) => {
|
|
||||||
if (this.accompanyingCourse) {
|
|
||||||
switch (bloc.key) {
|
|
||||||
case "personsAssociated":
|
|
||||||
bloc.persons = groups.personsAssociated;
|
|
||||||
bloc.included = true;
|
|
||||||
break;
|
|
||||||
case "personsNotAssociated":
|
|
||||||
bloc.persons = groups.personsNotAssociated;
|
|
||||||
bloc.included = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (bloc.key) {
|
|
||||||
case "persons":
|
|
||||||
bloc.persons = this.persons;
|
|
||||||
bloc.included = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch (bloc.key) {
|
|
||||||
case "thirdparty":
|
|
||||||
bloc.persons = this.thirdParties;
|
|
||||||
break;
|
|
||||||
case "users":
|
|
||||||
bloc.persons = this.users;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}, groups);
|
|
||||||
},
|
|
||||||
splitPersonsInGroups() {
|
|
||||||
let personsAssociated = [];
|
|
||||||
let personsNotAssociated = this.persons;
|
|
||||||
let participations = this.getCourseParticipations();
|
|
||||||
this.persons.forEach((person) => {
|
|
||||||
participations.forEach((participation) => {
|
|
||||||
if (person.id === participation.id) {
|
|
||||||
//console.log(person.id);
|
|
||||||
personsAssociated.push(person);
|
|
||||||
personsNotAssociated = personsNotAssociated.filter(
|
|
||||||
(p) => p !== person,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
personsAssociated: personsAssociated,
|
|
||||||
personsNotAssociated: personsNotAssociated,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
getCourseParticipations() {
|
|
||||||
let participations = [];
|
|
||||||
this.accompanyingCourse.participations.forEach((participation) => {
|
|
||||||
if (!participation.endDate) {
|
|
||||||
participations.push(participation.person);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return participations;
|
|
||||||
},
|
|
||||||
addNewPersons({ selected, modal }) {
|
|
||||||
console.log("@@@ CLICK button addNewPersons", selected);
|
|
||||||
selected.forEach((item) => {
|
|
||||||
this.$store.dispatch("addPersonsInvolved", item);
|
|
||||||
}, this);
|
|
||||||
this.$refs.addPersons.resetSearch(); // to cast child method
|
|
||||||
modal.showModal = false;
|
|
||||||
this.setPersonsInBloc();
|
|
||||||
},
|
|
||||||
addSuggestedEntity(person) {
|
|
||||||
this.$store.dispatch("addPersonsInvolved", {
|
|
||||||
result: person,
|
|
||||||
type: "person",
|
|
||||||
});
|
|
||||||
this.setPersonsInBloc();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
<template>
|
<template>
|
||||||
<li>
|
<li>
|
||||||
<span :title="person.text" @click.prevent="$emit('remove', person)">
|
<span :title="person.text" @click.prevent="$emit('remove', person)">
|
||||||
<span class="chill_denomination">
|
<span class="chill_denomination">
|
||||||
<person-text :person="person" :is-cut="true" />
|
<person-text :person="person" :is-cut="true" />
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "PersonBadge",
|
name: "PersonBadge",
|
||||||
props: ["person"],
|
props: ["person"],
|
||||||
components: {
|
components: {
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
},
|
||||||
// computed: {
|
// computed: {
|
||||||
// textCutted() {
|
// textCutted() {
|
||||||
// let more = (this.person.text.length > 15) ?'…' : '';
|
// let more = (this.person.text.length > 15) ?'…' : '';
|
||||||
// return this.person.text.slice(0,15) + more;
|
// return this.person.text.slice(0,15) + more;
|
||||||
// }
|
// }
|
||||||
// },
|
// },
|
||||||
emits: ["remove"],
|
emits: ["remove"],
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,38 +1,38 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="item-bloc" :style="{ 'flex-basis': blocWidth }">
|
<div class="item-bloc" :style="{ 'flex-basis': blocWidth }">
|
||||||
<div class="item-row">
|
<div class="item-row">
|
||||||
<div class="item-col">
|
<div class="item-col">
|
||||||
<h4>{{ $t(bloc.title) }}</h4>
|
<h4>{{ $t(bloc.title) }}</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-col">
|
<div class="item-col">
|
||||||
<ul class="list-suggest remove-items">
|
<ul class="list-suggest remove-items">
|
||||||
<person-badge
|
<person-badge
|
||||||
v-for="person in bloc.persons"
|
v-for="person in bloc.persons"
|
||||||
:key="person.id"
|
:key="person.id"
|
||||||
:person="person"
|
:person="person"
|
||||||
@remove="removePerson"
|
@remove="removePerson"
|
||||||
/>
|
/>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import PersonBadge from "./PersonBadge.vue";
|
import PersonBadge from "./PersonBadge.vue";
|
||||||
export default {
|
export default {
|
||||||
name: "PersonsBloc",
|
name: "PersonsBloc",
|
||||||
components: {
|
components: {
|
||||||
PersonBadge,
|
PersonBadge,
|
||||||
},
|
},
|
||||||
props: ["bloc", "setPersonsInBloc", "blocWidth"],
|
props: ["bloc", "setPersonsInBloc", "blocWidth"],
|
||||||
methods: {
|
methods: {
|
||||||
removePerson(item) {
|
removePerson(item) {
|
||||||
console.log("@@ CLICK remove person: item", item);
|
console.log("@@ CLICK remove person: item", item);
|
||||||
this.$store.dispatch("removePersonInvolved", item);
|
this.$store.dispatch("removePersonInvolved", item);
|
||||||
this.setPersonsInBloc();
|
this.setPersonsInBloc();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,32 +1,32 @@
|
|||||||
<template>
|
<template>
|
||||||
<teleport to="#location">
|
<teleport to="#location">
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label :class="locationClassList">
|
<label :class="locationClassList">
|
||||||
{{ trans(ACTIVITY_LOCATION) }}
|
{{ trans(ACTIVITY_LOCATION) }}
|
||||||
</label>
|
</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
name="selectLocation"
|
name="selectLocation"
|
||||||
id="selectLocation"
|
id="selectLocation"
|
||||||
label="name"
|
label="name"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
open-direction="top"
|
open-direction="top"
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
:placeholder="trans(ACTIVITY_CHOOSE_LOCATION)"
|
:placeholder="trans(ACTIVITY_CHOOSE_LOCATION)"
|
||||||
:custom-label="customLabel"
|
:custom-label="customLabel"
|
||||||
:select-label="trans(MULTISELECT_SELECT_LABEL)"
|
:select-label="trans(MULTISELECT_SELECT_LABEL)"
|
||||||
:deselect-label="trans(MULTISELECT_DESELECT_LABEL)"
|
:deselect-label="trans(MULTISELECT_DESELECT_LABEL)"
|
||||||
:selected-label="trans(MULTISELECT_SELECTED_LABEL)"
|
:selected-label="trans(MULTISELECT_SELECTED_LABEL)"
|
||||||
:options="availableLocations"
|
:options="availableLocations"
|
||||||
group-values="locations"
|
group-values="locations"
|
||||||
group-label="locationGroup"
|
group-label="locationGroup"
|
||||||
v-model="location"
|
v-model="location"
|
||||||
/>
|
/>
|
||||||
<new-location v-bind:available-locations="availableLocations" />
|
<new-location v-bind:available-locations="availableLocations" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</teleport>
|
</teleport>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -35,60 +35,60 @@ import VueMultiselect from "vue-multiselect";
|
|||||||
import NewLocation from "./Location/NewLocation.vue";
|
import NewLocation from "./Location/NewLocation.vue";
|
||||||
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
||||||
import {
|
import {
|
||||||
trans,
|
trans,
|
||||||
ACTIVITY_LOCATION,
|
ACTIVITY_LOCATION,
|
||||||
ACTIVITY_CHOOSE_LOCATION,
|
ACTIVITY_CHOOSE_LOCATION,
|
||||||
MULTISELECT_SELECT_LABEL,
|
MULTISELECT_SELECT_LABEL,
|
||||||
MULTISELECT_DESELECT_LABEL,
|
MULTISELECT_DESELECT_LABEL,
|
||||||
MULTISELECT_SELECTED_LABEL,
|
MULTISELECT_SELECTED_LABEL,
|
||||||
} from "translator";
|
} from "translator";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Location",
|
name: "Location",
|
||||||
components: {
|
components: {
|
||||||
NewLocation,
|
NewLocation,
|
||||||
VueMultiselect,
|
VueMultiselect,
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
return {
|
|
||||||
trans,
|
|
||||||
ACTIVITY_LOCATION,
|
|
||||||
ACTIVITY_CHOOSE_LOCATION,
|
|
||||||
MULTISELECT_SELECT_LABEL,
|
|
||||||
MULTISELECT_DESELECT_LABEL,
|
|
||||||
MULTISELECT_SELECTED_LABEL,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
locationClassList: `col-form-label col-sm-4 ${document.querySelector("input#chill_activitybundle_activity_location").getAttribute("required") ? "required" : ""}`,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState(["activity", "availableLocations"]),
|
|
||||||
...mapGetters(["suggestedEntities"]),
|
|
||||||
location: {
|
|
||||||
get() {
|
|
||||||
return this.activity.location;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.$store.dispatch("updateLocation", value);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
setup() {
|
||||||
methods: {
|
return {
|
||||||
labelAccompanyingCourseLocation(value) {
|
trans,
|
||||||
return `${value.address.text} (${localizeString(value.locationType.title)})`;
|
ACTIVITY_LOCATION,
|
||||||
|
ACTIVITY_CHOOSE_LOCATION,
|
||||||
|
MULTISELECT_SELECT_LABEL,
|
||||||
|
MULTISELECT_DESELECT_LABEL,
|
||||||
|
MULTISELECT_SELECTED_LABEL,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
customLabel(value) {
|
data() {
|
||||||
return value.locationType
|
return {
|
||||||
? value.name
|
locationClassList: `col-form-label col-sm-4 ${document.querySelector("input#chill_activitybundle_activity_location").getAttribute("required") ? "required" : ""}`,
|
||||||
? value.name === "__AccompanyingCourseLocation__"
|
};
|
||||||
? this.labelAccompanyingCourseLocation(value)
|
},
|
||||||
: `${value.name} (${localizeString(value.locationType.title)})`
|
computed: {
|
||||||
: localizeString(value.locationType.title)
|
...mapState(["activity", "availableLocations"]),
|
||||||
: "";
|
...mapGetters(["suggestedEntities"]),
|
||||||
|
location: {
|
||||||
|
get() {
|
||||||
|
return this.activity.location;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.dispatch("updateLocation", value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
labelAccompanyingCourseLocation(value) {
|
||||||
|
return `${value.address.text} (${localizeString(value.locationType.title)})`;
|
||||||
|
},
|
||||||
|
customLabel(value) {
|
||||||
|
return value.locationType
|
||||||
|
? value.name
|
||||||
|
? value.name === "__AccompanyingCourseLocation__"
|
||||||
|
? this.labelAccompanyingCourseLocation(value)
|
||||||
|
: `${value.name} (${localizeString(value.locationType.title)})`
|
||||||
|
: localizeString(value.locationType.title)
|
||||||
|
: "";
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,114 +1,123 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li>
|
<li>
|
||||||
<a class="btn btn-sm btn-create" @click="openModal">
|
<a class="btn btn-sm btn-create" @click="openModal">
|
||||||
{{ trans(ACTIVITY_CREATE_NEW_LOCATION) }}
|
{{ trans(ACTIVITY_CREATE_NEW_LOCATION) }}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<teleport to="body">
|
<teleport to="body">
|
||||||
<modal
|
<modal
|
||||||
v-if="modal.showModal"
|
v-if="modal.showModal"
|
||||||
:modalDialogClass="modal.modalDialogClass"
|
:modalDialogClass="modal.modalDialogClass"
|
||||||
@close="modal.showModal = false"
|
@close="modal.showModal = false"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<h3 class="modal-title">
|
<h3 class="modal-title">
|
||||||
{{ trans(ACTIVITY_CREATE_NEW_LOCATION) }}
|
{{ trans(ACTIVITY_CREATE_NEW_LOCATION) }}
|
||||||
</h3>
|
</h3>
|
||||||
</template>
|
</template>
|
||||||
<template #body>
|
<template #body>
|
||||||
<form>
|
<form>
|
||||||
<div class="alert alert-warning" v-if="errors.length">
|
<div class="alert alert-warning" v-if="errors.length">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(e, i) in errors" :key="i">
|
<li v-for="(e, i) in errors" :key="i">
|
||||||
{{ e }}
|
{{ e }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-floating mb-3">
|
<div class="form-floating mb-3">
|
||||||
<select
|
<select
|
||||||
class="form-select form-select-lg"
|
class="form-select form-select-lg"
|
||||||
id="type"
|
id="type"
|
||||||
required
|
required
|
||||||
v-model="selectType"
|
v-model="selectType"
|
||||||
>
|
>
|
||||||
<option selected disabled value="">
|
<option selected disabled value="">
|
||||||
{{ trans(ACTIVITY_CHOOSE_LOCATION_TYPE) }}
|
{{ trans(ACTIVITY_CHOOSE_LOCATION_TYPE) }}
|
||||||
</option>
|
</option>
|
||||||
<option v-for="t in locationTypes" :value="t" :key="t.id">
|
<option
|
||||||
{{ localizeString(t.title) }}
|
v-for="t in locationTypes"
|
||||||
</option>
|
:value="t"
|
||||||
</select>
|
:key="t.id"
|
||||||
<label>{{ trans(ACTIVITY_LOCATION_FIELDS_TYPE) }}</label>
|
>
|
||||||
</div>
|
{{ localizeString(t.title) }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
<label>{{
|
||||||
|
trans(ACTIVITY_LOCATION_FIELDS_TYPE)
|
||||||
|
}}</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-floating mb-3">
|
<div class="form-floating mb-3">
|
||||||
<input
|
<input
|
||||||
class="form-control form-control-lg"
|
class="form-control form-control-lg"
|
||||||
id="name"
|
id="name"
|
||||||
v-model="inputName"
|
v-model="inputName"
|
||||||
placeholder
|
placeholder
|
||||||
/>
|
/>
|
||||||
<label for="name">{{
|
<label for="name">{{
|
||||||
trans(ACTIVITY_LOCATION_FIELDS_NAME)
|
trans(ACTIVITY_LOCATION_FIELDS_NAME)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<add-address
|
<add-address
|
||||||
:context="addAddress.context"
|
:context="addAddress.context"
|
||||||
:options="addAddress.options"
|
:options="addAddress.options"
|
||||||
:addressChangedCallback="submitNewAddress"
|
:addressChangedCallback="submitNewAddress"
|
||||||
v-if="showAddAddress"
|
v-if="showAddAddress"
|
||||||
ref="addAddress"
|
ref="addAddress"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="form-floating mb-3" v-if="showContactData">
|
<div class="form-floating mb-3" v-if="showContactData">
|
||||||
<input
|
<input
|
||||||
class="form-control form-control-lg"
|
class="form-control form-control-lg"
|
||||||
id="phonenumber1"
|
id="phonenumber1"
|
||||||
v-model="inputPhonenumber1"
|
v-model="inputPhonenumber1"
|
||||||
placeholder
|
placeholder
|
||||||
/>
|
/>
|
||||||
<label for="phonenumber1">{{
|
<label for="phonenumber1">{{
|
||||||
trans(ACTIVITY_LOCATION_FIELDS_PHONENUMBER1)
|
trans(ACTIVITY_LOCATION_FIELDS_PHONENUMBER1)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-floating mb-3" v-if="hasPhonenumber1">
|
<div class="form-floating mb-3" v-if="hasPhonenumber1">
|
||||||
<input
|
<input
|
||||||
class="form-control form-control-lg"
|
class="form-control form-control-lg"
|
||||||
id="phonenumber2"
|
id="phonenumber2"
|
||||||
v-model="inputPhonenumber2"
|
v-model="inputPhonenumber2"
|
||||||
placeholder
|
placeholder
|
||||||
/>
|
/>
|
||||||
<label for="phonenumber2">{{
|
<label for="phonenumber2">{{
|
||||||
trans(ACTIVITY_LOCATION_FIELDS_PHONENUMBER2)
|
trans(ACTIVITY_LOCATION_FIELDS_PHONENUMBER2)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-floating mb-3" v-if="showContactData">
|
<div class="form-floating mb-3" v-if="showContactData">
|
||||||
<input
|
<input
|
||||||
class="form-control form-control-lg"
|
class="form-control form-control-lg"
|
||||||
id="email"
|
id="email"
|
||||||
v-model="inputEmail"
|
v-model="inputEmail"
|
||||||
placeholder
|
placeholder
|
||||||
/>
|
/>
|
||||||
<label for="email">{{
|
<label for="email">{{
|
||||||
trans(ACTIVITY_LOCATION_FIELDS_EMAIL)
|
trans(ACTIVITY_LOCATION_FIELDS_EMAIL)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<button class="btn btn-save" @click.prevent="saveNewLocation">
|
<button
|
||||||
{{ trans(SAVE) }}
|
class="btn btn-save"
|
||||||
</button>
|
@click.prevent="saveNewLocation"
|
||||||
</template>
|
>
|
||||||
</modal>
|
{{ trans(SAVE) }}
|
||||||
</teleport>
|
</button>
|
||||||
</div>
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -119,236 +128,237 @@ import { getLocationTypes } from "../../api";
|
|||||||
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
||||||
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
||||||
import {
|
import {
|
||||||
SAVE,
|
SAVE,
|
||||||
ACTIVITY_LOCATION_FIELDS_EMAIL,
|
ACTIVITY_LOCATION_FIELDS_EMAIL,
|
||||||
ACTIVITY_LOCATION_FIELDS_PHONENUMBER1,
|
ACTIVITY_LOCATION_FIELDS_PHONENUMBER1,
|
||||||
ACTIVITY_LOCATION_FIELDS_PHONENUMBER2,
|
ACTIVITY_LOCATION_FIELDS_PHONENUMBER2,
|
||||||
ACTIVITY_LOCATION_FIELDS_NAME,
|
ACTIVITY_LOCATION_FIELDS_NAME,
|
||||||
ACTIVITY_LOCATION_FIELDS_TYPE,
|
ACTIVITY_LOCATION_FIELDS_TYPE,
|
||||||
ACTIVITY_CHOOSE_LOCATION_TYPE,
|
ACTIVITY_CHOOSE_LOCATION_TYPE,
|
||||||
ACTIVITY_CREATE_NEW_LOCATION,
|
ACTIVITY_CREATE_NEW_LOCATION,
|
||||||
trans,
|
trans,
|
||||||
} from "translator";
|
} from "translator";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "NewLocation",
|
name: "NewLocation",
|
||||||
components: {
|
components: {
|
||||||
Modal,
|
Modal,
|
||||||
AddAddress,
|
AddAddress,
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
return {
|
|
||||||
trans,
|
|
||||||
SAVE,
|
|
||||||
ACTIVITY_LOCATION_FIELDS_EMAIL,
|
|
||||||
ACTIVITY_LOCATION_FIELDS_PHONENUMBER1,
|
|
||||||
ACTIVITY_LOCATION_FIELDS_PHONENUMBER2,
|
|
||||||
ACTIVITY_LOCATION_FIELDS_NAME,
|
|
||||||
ACTIVITY_LOCATION_FIELDS_TYPE,
|
|
||||||
ACTIVITY_CHOOSE_LOCATION_TYPE,
|
|
||||||
ACTIVITY_CREATE_NEW_LOCATION,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
props: ["availableLocations"],
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
errors: [],
|
|
||||||
selected: {
|
|
||||||
type: null,
|
|
||||||
name: null,
|
|
||||||
addressId: null,
|
|
||||||
phonenumber1: null,
|
|
||||||
phonenumber2: null,
|
|
||||||
email: null,
|
|
||||||
},
|
|
||||||
locationTypes: [],
|
|
||||||
modal: {
|
|
||||||
showModal: false,
|
|
||||||
modalDialogClass: "modal-dialog-scrollable modal-xl",
|
|
||||||
},
|
|
||||||
addAddress: {
|
|
||||||
options: {
|
|
||||||
button: {
|
|
||||||
text: {
|
|
||||||
create: "activity.create_address",
|
|
||||||
edit: "activity.edit_address",
|
|
||||||
},
|
|
||||||
size: "btn-sm",
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
create: "activity.create_address",
|
|
||||||
edit: "activity.edit_address",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
context: {
|
|
||||||
target: {
|
|
||||||
//name, id
|
|
||||||
},
|
|
||||||
edit: false,
|
|
||||||
addressId: null,
|
|
||||||
defaults: window.addaddress,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState(["activity"]),
|
|
||||||
selectType: {
|
|
||||||
get() {
|
|
||||||
return this.selected.type;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.selected.type = value;
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
inputName: {
|
setup() {
|
||||||
get() {
|
return {
|
||||||
return this.selected.name;
|
trans,
|
||||||
},
|
SAVE,
|
||||||
set(value) {
|
ACTIVITY_LOCATION_FIELDS_EMAIL,
|
||||||
this.selected.name = value;
|
ACTIVITY_LOCATION_FIELDS_PHONENUMBER1,
|
||||||
},
|
ACTIVITY_LOCATION_FIELDS_PHONENUMBER2,
|
||||||
},
|
ACTIVITY_LOCATION_FIELDS_NAME,
|
||||||
inputEmail: {
|
ACTIVITY_LOCATION_FIELDS_TYPE,
|
||||||
get() {
|
ACTIVITY_CHOOSE_LOCATION_TYPE,
|
||||||
return this.selected.email;
|
ACTIVITY_CREATE_NEW_LOCATION,
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.selected.email = value;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
inputPhonenumber1: {
|
|
||||||
get() {
|
|
||||||
return this.selected.phonenumber1;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.selected.phonenumber1 = value;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
inputPhonenumber2: {
|
|
||||||
get() {
|
|
||||||
return this.selected.phonenumber2;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.selected.phonenumber2 = value;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
hasPhonenumber1() {
|
|
||||||
return (
|
|
||||||
this.selected.phonenumber1 !== null && this.selected.phonenumber1 !== ""
|
|
||||||
);
|
|
||||||
},
|
|
||||||
showAddAddress() {
|
|
||||||
let cond = false;
|
|
||||||
if (this.selected.type) {
|
|
||||||
if (this.selected.type.addressRequired !== "never") {
|
|
||||||
cond = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cond;
|
|
||||||
},
|
|
||||||
showContactData() {
|
|
||||||
let cond = false;
|
|
||||||
if (this.selected.type) {
|
|
||||||
if (this.selected.type.contactData !== "never") {
|
|
||||||
cond = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cond;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.getLocationTypesList();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
localizeString,
|
|
||||||
checkForm() {
|
|
||||||
let cond = true;
|
|
||||||
this.errors = [];
|
|
||||||
if (!this.selected.type) {
|
|
||||||
this.errors.push("Type de localisation requis");
|
|
||||||
cond = false;
|
|
||||||
} else {
|
|
||||||
if (
|
|
||||||
this.selected.type.addressRequired === "required" &&
|
|
||||||
!this.selected.addressId
|
|
||||||
) {
|
|
||||||
this.errors.push("Adresse requise");
|
|
||||||
cond = false;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
this.selected.type.contactData === "required" &&
|
|
||||||
!this.selected.phonenumber1
|
|
||||||
) {
|
|
||||||
this.errors.push("Numéro de téléphone requis");
|
|
||||||
cond = false;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
this.selected.type.contactData === "required" &&
|
|
||||||
!this.selected.email
|
|
||||||
) {
|
|
||||||
this.errors.push("Adresse email requise");
|
|
||||||
cond = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cond;
|
|
||||||
},
|
|
||||||
getLocationTypesList() {
|
|
||||||
getLocationTypes().then((results) => {
|
|
||||||
this.locationTypes = results.filter(
|
|
||||||
(t) => t.availableForUsers === true,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
openModal() {
|
|
||||||
this.modal.showModal = true;
|
|
||||||
},
|
|
||||||
saveNewLocation() {
|
|
||||||
if (this.checkForm()) {
|
|
||||||
let body = {
|
|
||||||
type: "location",
|
|
||||||
name: this.selected.name,
|
|
||||||
locationType: {
|
|
||||||
id: this.selected.type.id,
|
|
||||||
type: "location-type",
|
|
||||||
},
|
|
||||||
phonenumber1: this.selected.phonenumber1,
|
|
||||||
phonenumber2: this.selected.phonenumber2,
|
|
||||||
email: this.selected.email,
|
|
||||||
};
|
};
|
||||||
if (this.selected.addressId) {
|
},
|
||||||
body = Object.assign(body, {
|
props: ["availableLocations"],
|
||||||
address: {
|
data() {
|
||||||
id: this.selected.addressId,
|
return {
|
||||||
|
errors: [],
|
||||||
|
selected: {
|
||||||
|
type: null,
|
||||||
|
name: null,
|
||||||
|
addressId: null,
|
||||||
|
phonenumber1: null,
|
||||||
|
phonenumber2: null,
|
||||||
|
email: null,
|
||||||
},
|
},
|
||||||
});
|
locationTypes: [],
|
||||||
}
|
modal: {
|
||||||
|
showModal: false,
|
||||||
makeFetch("POST", "/api/1.0/main/location.json", body)
|
modalDialogClass: "modal-dialog-scrollable modal-xl",
|
||||||
.then((response) => {
|
},
|
||||||
this.$store.dispatch("addAvailableLocationGroup", {
|
addAddress: {
|
||||||
locationGroup: "Localisations nouvellement créées",
|
options: {
|
||||||
locations: [response],
|
button: {
|
||||||
});
|
text: {
|
||||||
this.$store.dispatch("updateLocation", response);
|
create: "activity.create_address",
|
||||||
this.modal.showModal = false;
|
edit: "activity.edit_address",
|
||||||
})
|
},
|
||||||
.catch((error) => {
|
size: "btn-sm",
|
||||||
if (error.name === "ValidationException") {
|
},
|
||||||
for (let v of error.violations) {
|
title: {
|
||||||
this.errors.push(v);
|
create: "activity.create_address",
|
||||||
}
|
edit: "activity.edit_address",
|
||||||
} else {
|
},
|
||||||
this.errors.push("An error occurred");
|
},
|
||||||
|
context: {
|
||||||
|
target: {
|
||||||
|
//name, id
|
||||||
|
},
|
||||||
|
edit: false,
|
||||||
|
addressId: null,
|
||||||
|
defaults: window.addaddress,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(["activity"]),
|
||||||
|
selectType: {
|
||||||
|
get() {
|
||||||
|
return this.selected.type;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.selected.type = value;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
inputName: {
|
||||||
|
get() {
|
||||||
|
return this.selected.name;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.selected.name = value;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
inputEmail: {
|
||||||
|
get() {
|
||||||
|
return this.selected.email;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.selected.email = value;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
inputPhonenumber1: {
|
||||||
|
get() {
|
||||||
|
return this.selected.phonenumber1;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.selected.phonenumber1 = value;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
inputPhonenumber2: {
|
||||||
|
get() {
|
||||||
|
return this.selected.phonenumber2;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.selected.phonenumber2 = value;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
hasPhonenumber1() {
|
||||||
|
return (
|
||||||
|
this.selected.phonenumber1 !== null &&
|
||||||
|
this.selected.phonenumber1 !== ""
|
||||||
|
);
|
||||||
|
},
|
||||||
|
showAddAddress() {
|
||||||
|
let cond = false;
|
||||||
|
if (this.selected.type) {
|
||||||
|
if (this.selected.type.addressRequired !== "never") {
|
||||||
|
cond = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
return cond;
|
||||||
}
|
},
|
||||||
|
showContactData() {
|
||||||
|
let cond = false;
|
||||||
|
if (this.selected.type) {
|
||||||
|
if (this.selected.type.contactData !== "never") {
|
||||||
|
cond = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cond;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
submitNewAddress(payload) {
|
mounted() {
|
||||||
this.selected.addressId = payload.addressId;
|
this.getLocationTypesList();
|
||||||
this.addAddress.context.addressId = payload.addressId;
|
},
|
||||||
this.addAddress.context.edit = true;
|
methods: {
|
||||||
|
localizeString,
|
||||||
|
checkForm() {
|
||||||
|
let cond = true;
|
||||||
|
this.errors = [];
|
||||||
|
if (!this.selected.type) {
|
||||||
|
this.errors.push("Type de localisation requis");
|
||||||
|
cond = false;
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
this.selected.type.addressRequired === "required" &&
|
||||||
|
!this.selected.addressId
|
||||||
|
) {
|
||||||
|
this.errors.push("Adresse requise");
|
||||||
|
cond = false;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
this.selected.type.contactData === "required" &&
|
||||||
|
!this.selected.phonenumber1
|
||||||
|
) {
|
||||||
|
this.errors.push("Numéro de téléphone requis");
|
||||||
|
cond = false;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
this.selected.type.contactData === "required" &&
|
||||||
|
!this.selected.email
|
||||||
|
) {
|
||||||
|
this.errors.push("Adresse email requise");
|
||||||
|
cond = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cond;
|
||||||
|
},
|
||||||
|
getLocationTypesList() {
|
||||||
|
getLocationTypes().then((results) => {
|
||||||
|
this.locationTypes = results.filter(
|
||||||
|
(t) => t.availableForUsers === true,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
openModal() {
|
||||||
|
this.modal.showModal = true;
|
||||||
|
},
|
||||||
|
saveNewLocation() {
|
||||||
|
if (this.checkForm()) {
|
||||||
|
let body = {
|
||||||
|
type: "location",
|
||||||
|
name: this.selected.name,
|
||||||
|
locationType: {
|
||||||
|
id: this.selected.type.id,
|
||||||
|
type: "location-type",
|
||||||
|
},
|
||||||
|
phonenumber1: this.selected.phonenumber1,
|
||||||
|
phonenumber2: this.selected.phonenumber2,
|
||||||
|
email: this.selected.email,
|
||||||
|
};
|
||||||
|
if (this.selected.addressId) {
|
||||||
|
body = Object.assign(body, {
|
||||||
|
address: {
|
||||||
|
id: this.selected.addressId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
makeFetch("POST", "/api/1.0/main/location.json", body)
|
||||||
|
.then((response) => {
|
||||||
|
this.$store.dispatch("addAvailableLocationGroup", {
|
||||||
|
locationGroup: "Localisations nouvellement créées",
|
||||||
|
locations: [response],
|
||||||
|
});
|
||||||
|
this.$store.dispatch("updateLocation", response);
|
||||||
|
this.modal.showModal = false;
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
if (error.name === "ValidationException") {
|
||||||
|
for (let v of error.violations) {
|
||||||
|
this.errors.push(v);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.errors.push("An error occurred");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
submitNewAddress(payload) {
|
||||||
|
this.selected.addressId = payload.addressId;
|
||||||
|
this.addAddress.context.addressId = payload.addressId;
|
||||||
|
this.addAddress.context.edit = true;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -136,14 +136,8 @@ export default {
|
|||||||
issueIsLoading: false,
|
issueIsLoading: false,
|
||||||
actionIsLoading: false,
|
actionIsLoading: false,
|
||||||
actionAreLoaded: false,
|
actionAreLoaded: false,
|
||||||
socialIssuesClassList: {
|
socialIssuesClassList: `col-form-label ${document.querySelector("input#chill_activitybundle_activity_socialIssues").getAttribute("required") ? "required" : ""}`,
|
||||||
"col-form-label": true,
|
socialActionsClassList: `col-form-label ${document.querySelector("input#chill_activitybundle_activity_socialActions").getAttribute("required") ? "required" : ""}`,
|
||||||
required: false,
|
|
||||||
},
|
|
||||||
socialActionsClassList: {
|
|
||||||
"col-form-label": true,
|
|
||||||
required: false,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -164,21 +158,6 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
/* Load classNames after element is present */
|
|
||||||
const socialActionsEl = document.querySelector(
|
|
||||||
"input#chill_activitybundle_activity_socialActions",
|
|
||||||
);
|
|
||||||
if (socialActionsEl && socialActionsEl.hasAttribute("required")) {
|
|
||||||
this.socialActionsClassList.required = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const socialIssuesEl = document.querySelector(
|
|
||||||
"input#chill_activitybundle_activity_socialIssues",
|
|
||||||
);
|
|
||||||
if (socialIssuesEl && socialIssuesEl.hasAttribute("required")) {
|
|
||||||
this.socialIssuesClassList.required = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load other issues in multiselect */
|
/* Load other issues in multiselect */
|
||||||
this.issueIsLoading = true;
|
this.issueIsLoading = true;
|
||||||
this.actionAreLoaded = false;
|
this.actionAreLoaded = false;
|
||||||
|
|||||||
@@ -1,38 +1,38 @@
|
|||||||
<template>
|
<template>
|
||||||
<span class="inline-choice">
|
<span class="inline-choice">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input
|
<input
|
||||||
class="form-check-input"
|
class="form-check-input"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
v-model="selected"
|
v-model="selected"
|
||||||
name="action"
|
name="action"
|
||||||
:id="action.id"
|
:id="action.id"
|
||||||
:value="action"
|
:value="action"
|
||||||
/>
|
/>
|
||||||
<label class="form-check-label" :for="action.id">
|
<label class="form-check-label" :for="action.id">
|
||||||
<span class="badge bg-light text-dark" :title="action.text">{{
|
<span class="badge bg-light text-dark" :title="action.text">{{
|
||||||
action.text
|
action.text
|
||||||
}}</span>
|
}}</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "CheckSocialAction",
|
name: "CheckSocialAction",
|
||||||
props: ["action", "selection"],
|
props: ["action", "selection"],
|
||||||
emits: ["updateSelected"],
|
emits: ["updateSelected"],
|
||||||
computed: {
|
computed: {
|
||||||
selected: {
|
selected: {
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$emit("updateSelected", value);
|
this.$emit("updateSelected", value);
|
||||||
},
|
},
|
||||||
get() {
|
get() {
|
||||||
return this.selection;
|
return this.selection;
|
||||||
},
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -41,13 +41,13 @@ export default {
|
|||||||
@import "ChillPersonAssets/chill/scss/mixins";
|
@import "ChillPersonAssets/chill/scss/mixins";
|
||||||
@import "ChillMainAssets/chill/scss/chill_variables";
|
@import "ChillMainAssets/chill/scss/chill_variables";
|
||||||
span.badge {
|
span.badge {
|
||||||
@include badge_social($social-action-color);
|
@include badge_social($social-action-color);
|
||||||
font-size: 95%;
|
font-size: 95%;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
max-width: 100%; /* Adjust as needed */
|
max-width: 100%; /* Adjust as needed */
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,36 +1,38 @@
|
|||||||
<template>
|
<template>
|
||||||
<span class="inline-choice">
|
<span class="inline-choice">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input
|
<input
|
||||||
class="form-check-input"
|
class="form-check-input"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
v-model="selected"
|
v-model="selected"
|
||||||
name="issue"
|
name="issue"
|
||||||
:id="issue.id"
|
:id="issue.id"
|
||||||
:value="issue"
|
:value="issue"
|
||||||
/>
|
/>
|
||||||
<label class="form-check-label" :for="issue.id">
|
<label class="form-check-label" :for="issue.id">
|
||||||
<span class="badge bg-chill-l-gray text-dark">{{ issue.text }}</span>
|
<span class="badge bg-chill-l-gray text-dark">{{
|
||||||
</label>
|
issue.text
|
||||||
</div>
|
}}</span>
|
||||||
</span>
|
</label>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "CheckSocialIssue",
|
name: "CheckSocialIssue",
|
||||||
props: ["issue", "selection"],
|
props: ["issue", "selection"],
|
||||||
emits: ["updateSelected"],
|
emits: ["updateSelected"],
|
||||||
computed: {
|
computed: {
|
||||||
selected: {
|
selected: {
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$emit("updateSelected", value);
|
this.$emit("updateSelected", value);
|
||||||
},
|
},
|
||||||
get() {
|
get() {
|
||||||
return this.selection;
|
return this.selection;
|
||||||
},
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -39,9 +41,9 @@ export default {
|
|||||||
@import "ChillPersonAssets/chill/scss/mixins";
|
@import "ChillPersonAssets/chill/scss/mixins";
|
||||||
@import "ChillMainAssets/chill/scss/chill_variables";
|
@import "ChillMainAssets/chill/scss/chill_variables";
|
||||||
span.badge {
|
span.badge {
|
||||||
@include badge_social($social-issue-color);
|
@include badge_social($social-issue-color);
|
||||||
font-size: 95%;
|
font-size: 95%;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Attendee: Présence de l'usager
|
|||||||
attendee: présence de l'usager
|
attendee: présence de l'usager
|
||||||
list_reasons: liste des sujets
|
list_reasons: liste des sujets
|
||||||
user_username: nom de l'utilisateur
|
user_username: nom de l'utilisateur
|
||||||
circle_name: nom du service
|
circle_name: nom du cercle
|
||||||
Remark: Commentaire
|
Remark: Commentaire
|
||||||
No comments: Aucun commentaire
|
No comments: Aucun commentaire
|
||||||
Add a new activity: Ajouter une nouvel échange
|
Add a new activity: Ajouter une nouvel échange
|
||||||
@@ -20,7 +20,7 @@ not present: absent
|
|||||||
Delete: Supprimer
|
Delete: Supprimer
|
||||||
Update: Mettre à jour
|
Update: Mettre à jour
|
||||||
Update activity: Modifier l'échange
|
Update activity: Modifier l'échange
|
||||||
Scope: Service
|
Scope: Cercle
|
||||||
Activity data: Données de l'échange
|
Activity data: Données de l'échange
|
||||||
Activity location: Localisation de l'échange
|
Activity location: Localisation de l'échange
|
||||||
No reason associated: Aucun sujet
|
No reason associated: Aucun sujet
|
||||||
@@ -398,15 +398,13 @@ export:
|
|||||||
sent received: Envoyé ou reçu
|
sent received: Envoyé ou reçu
|
||||||
emergency: Urgence
|
emergency: Urgence
|
||||||
accompanying course id: Identifiant du parcours
|
accompanying course id: Identifiant du parcours
|
||||||
course circles: Services du parcours
|
course circles: Cercles du parcours
|
||||||
travelTime: Durée de déplacement
|
travelTime: Durée de déplacement
|
||||||
durationTime: Durée
|
durationTime: Durée
|
||||||
id: Identifiant
|
id: Identifiant
|
||||||
List activities linked to an accompanying course: Liste les échanges liés à un parcours en fonction de différents filtres.
|
List activities linked to an accompanying course: Liste les échanges liés à un parcours en fonction de différents filtres.
|
||||||
List activity linked to a course: Liste des échanges liés à un parcours
|
List activity linked to a course: Liste des échanges liés à un parcours
|
||||||
commentText: Commentaire
|
|
||||||
comment_date: Date de la dernière édition du commentaire
|
|
||||||
comment_user: Dernière édition par
|
|
||||||
|
|
||||||
filter:
|
filter:
|
||||||
activity:
|
activity:
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ final class ChillAsideActivityExtension extends Extension implements PrependExte
|
|||||||
$config = $this->processConfiguration($configuration, $configs);
|
$config = $this->processConfiguration($configuration, $configs);
|
||||||
|
|
||||||
$container->setParameter('chill_aside_activity.form.time_duration', $config['form']['time_duration']);
|
$container->setParameter('chill_aside_activity.form.time_duration', $config['form']['time_duration']);
|
||||||
$container->setParameter('chill_aside_activity.show_concerned_persons_count', 'visible' === $config['show_concerned_persons_count']);
|
|
||||||
|
|
||||||
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../config'));
|
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../config'));
|
||||||
$loader->load('services.yaml');
|
$loader->load('services.yaml');
|
||||||
@@ -39,24 +38,6 @@ final class ChillAsideActivityExtension extends Extension implements PrependExte
|
|||||||
{
|
{
|
||||||
$this->prependRoute($container);
|
$this->prependRoute($container);
|
||||||
$this->prependCruds($container);
|
$this->prependCruds($container);
|
||||||
$this->prependTwigConfig($container);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function prependTwigConfig(ContainerBuilder $container)
|
|
||||||
{
|
|
||||||
// Get the configuration for this bundle
|
|
||||||
$chillAsideActivityConfig = $container->getExtensionConfig($this->getAlias());
|
|
||||||
$config = $this->processConfiguration($this->getConfiguration($chillAsideActivityConfig, $container), $chillAsideActivityConfig);
|
|
||||||
|
|
||||||
// Add configuration to twig globals
|
|
||||||
$twigConfig = [
|
|
||||||
'globals' => [
|
|
||||||
'chill_aside_activity_config' => [
|
|
||||||
'show_concerned_persons_count' => 'visible' === $config['show_concerned_persons_count'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
$container->prependExtensionConfig('twig', $twigConfig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function prependCruds(ContainerBuilder $container)
|
protected function prependCruds(ContainerBuilder $container)
|
||||||
|
|||||||
@@ -141,12 +141,6 @@ class Configuration implements ConfigurationInterface
|
|||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
->end()
|
||||||
->end()
|
|
||||||
->enumNode('show_concerned_persons_count')
|
|
||||||
->values(['hidden', 'visible'])
|
|
||||||
->defaultValue('hidden')
|
|
||||||
->info('Show the concerned persons count field in aside activity forms and views')
|
|
||||||
->end()
|
|
||||||
->end();
|
->end();
|
||||||
|
|
||||||
return $treeBuilder;
|
return $treeBuilder;
|
||||||
|
|||||||
@@ -62,10 +62,6 @@ class AsideActivity implements TrackCreationInterface, TrackUpdateInterface
|
|||||||
#[ORM\ManyToOne(targetEntity: User::class)]
|
#[ORM\ManyToOne(targetEntity: User::class)]
|
||||||
private User $updatedBy;
|
private User $updatedBy;
|
||||||
|
|
||||||
#[Assert\GreaterThanOrEqual(0)]
|
|
||||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::INTEGER, nullable: true)]
|
|
||||||
private ?int $concernedPersonsCount = 0;
|
|
||||||
|
|
||||||
public function getAgent(): ?User
|
public function getAgent(): ?User
|
||||||
{
|
{
|
||||||
return $this->agent;
|
return $this->agent;
|
||||||
@@ -190,16 +186,4 @@ class AsideActivity implements TrackCreationInterface, TrackUpdateInterface
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getConcernedPersonsCount(): ?int
|
|
||||||
{
|
|
||||||
return $this->concernedPersonsCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setConcernedPersonsCount(?int $concernedPersonsCount): self
|
|
||||||
{
|
|
||||||
$this->concernedPersonsCount = $concernedPersonsCount;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
<?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\AsideActivityBundle\Export\Aggregator;
|
|
||||||
|
|
||||||
use Chill\AsideActivityBundle\Export\Declarations;
|
|
||||||
use Chill\MainBundle\Export\AggregatorInterface;
|
|
||||||
use Doctrine\ORM\QueryBuilder;
|
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
|
||||||
|
|
||||||
class ByConcernedPersonsCountAggregator implements AggregatorInterface
|
|
||||||
{
|
|
||||||
public function addRole(): ?string
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
|
|
||||||
{
|
|
||||||
$qb->addSelect('aside.concernedPersonsCount AS by_concerned_persons_count_aggregator')
|
|
||||||
->addGroupBy('by_concerned_persons_count_aggregator');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function applyOn(): string
|
|
||||||
{
|
|
||||||
return Declarations::ASIDE_ACTIVITY_TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder): void
|
|
||||||
{
|
|
||||||
// No form needed
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getNormalizationVersion(): int
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function normalizeFormData(array $formData): array
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFormDefaultData(): array
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLabels($key, array $values, $data): callable
|
|
||||||
{
|
|
||||||
return function ($value): string {
|
|
||||||
if ('_header' === $value) {
|
|
||||||
return 'export.aggregator.Concerned persons count';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null === $value) {
|
|
||||||
return 'export.aggregator.No concerned persons count specified';
|
|
||||||
}
|
|
||||||
|
|
||||||
return (string) $value;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getQueryKeys($data): array
|
|
||||||
{
|
|
||||||
return ['by_concerned_persons_count_aggregator'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle(): string
|
|
||||||
{
|
|
||||||
return 'export.aggregator.Group by concerned persons count';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
<?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\AsideActivityBundle\Export\Export;
|
|
||||||
|
|
||||||
use Chill\AsideActivityBundle\Export\Declarations;
|
|
||||||
use Chill\AsideActivityBundle\Repository\AsideActivityRepository;
|
|
||||||
use Chill\AsideActivityBundle\Security\AsideActivityVoter;
|
|
||||||
use Chill\MainBundle\Export\ExportInterface;
|
|
||||||
use Chill\MainBundle\Export\FormatterInterface;
|
|
||||||
use Chill\MainBundle\Export\GroupedExportInterface;
|
|
||||||
use Doctrine\ORM\Query;
|
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
|
||||||
|
|
||||||
class SumConcernedPersonsCountAsideActivity implements ExportInterface, GroupedExportInterface
|
|
||||||
{
|
|
||||||
public function __construct(private readonly AsideActivityRepository $repository) {}
|
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder) {}
|
|
||||||
|
|
||||||
public function getNormalizationVersion(): int
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function normalizeFormData(array $formData): array
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function denormalizeFormData(array $formData, int $fromVersion): array
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFormDefaultData(): array
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAllowedFormattersTypes(): array
|
|
||||||
{
|
|
||||||
return [FormatterInterface::TYPE_TABULAR];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getDescription(): string
|
|
||||||
{
|
|
||||||
return 'export.Sum concerned persons count for aside activities';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getGroup(): string
|
|
||||||
{
|
|
||||||
return 'export.Exports of aside activities';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLabels($key, array $values, $data)
|
|
||||||
{
|
|
||||||
if ('export_sum_concerned_persons_count' !== $key) {
|
|
||||||
throw new \LogicException("the key {$key} is not used by this export");
|
|
||||||
}
|
|
||||||
|
|
||||||
$labels = array_combine($values, $values);
|
|
||||||
$labels['_header'] = $this->getTitle();
|
|
||||||
|
|
||||||
return static fn ($value) => $labels[$value];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getQueryKeys($data): array
|
|
||||||
{
|
|
||||||
return ['export_sum_concerned_persons_count'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getResult($query, $data, \Chill\MainBundle\Export\ExportGenerationContext $context): array
|
|
||||||
{
|
|
||||||
return $query->getQuery()->getResult(Query::HYDRATE_SCALAR);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTitle(): string
|
|
||||||
{
|
|
||||||
return 'export.Sum concerned persons count for aside activities';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getType(): string
|
|
||||||
{
|
|
||||||
return Declarations::ASIDE_ACTIVITY_TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function initiateQuery(array $requiredModifiers, array $acl, array $data, \Chill\MainBundle\Export\ExportGenerationContext $context): \Doctrine\ORM\QueryBuilder
|
|
||||||
{
|
|
||||||
$qb = $this->repository->createQueryBuilder('aside');
|
|
||||||
|
|
||||||
$qb->select('SUM(COALESCE(aside.concernedPersonsCount, 0)) as export_sum_concerned_persons_count');
|
|
||||||
|
|
||||||
return $qb;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function requiredRole(): string
|
|
||||||
{
|
|
||||||
return AsideActivityVoter::STATS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function supportsModifiers(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
Declarations::ASIDE_ACTIVITY_TYPE,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -21,7 +21,6 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
|
|||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
|
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormEvent;
|
use Symfony\Component\Form\FormEvent;
|
||||||
use Symfony\Component\Form\FormEvents;
|
use Symfony\Component\Form\FormEvents;
|
||||||
@@ -30,13 +29,11 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
|||||||
final class AsideActivityFormType extends AbstractType
|
final class AsideActivityFormType extends AbstractType
|
||||||
{
|
{
|
||||||
private readonly array $timeChoices;
|
private readonly array $timeChoices;
|
||||||
private readonly bool $showConcernedPersonsCount;
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
ParameterBagInterface $parameterBag,
|
ParameterBagInterface $parameterBag,
|
||||||
) {
|
) {
|
||||||
$this->timeChoices = $parameterBag->get('chill_aside_activity.form.time_duration');
|
$this->timeChoices = $parameterBag->get('chill_aside_activity.form.time_duration');
|
||||||
$this->showConcernedPersonsCount = $parameterBag->get('chill_aside_activity.show_concerned_persons_count');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||||
@@ -79,16 +76,6 @@ final class AsideActivityFormType extends AbstractType
|
|||||||
->add('location', PickUserLocationType::class)
|
->add('location', PickUserLocationType::class)
|
||||||
;
|
;
|
||||||
|
|
||||||
if ($this->showConcernedPersonsCount) {
|
|
||||||
$builder->add('concernedPersonsCount', IntegerType::class, [
|
|
||||||
'label' => 'Concerned persons count',
|
|
||||||
'required' => false,
|
|
||||||
'attr' => [
|
|
||||||
'min' => 0,
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (['duration'] as $fieldName) {
|
foreach (['duration'] as $fieldName) {
|
||||||
$builder->get($fieldName)
|
$builder->get($fieldName)
|
||||||
->addModelTransformer($durationTimeTransformer);
|
->addModelTransformer($durationTimeTransformer);
|
||||||
|
|||||||
@@ -42,11 +42,6 @@
|
|||||||
{%- if entity.location.name is defined -%}
|
{%- if entity.location.name is defined -%}
|
||||||
<div><i class="fa fa-fw fa-map-marker"></i>{{ entity.location.name }}</div>
|
<div><i class="fa fa-fw fa-map-marker"></i>{{ entity.location.name }}</div>
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
|
|
||||||
{%- if entity.concernedPersonsCount > 0 -%}
|
|
||||||
<div><i class="fa fa-fw fa-user"></i>{{ entity.concernedPersonsCount }}</div>
|
|
||||||
{%- endif -%}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="item-col" style="justify-content: flex-end;">
|
<div class="item-col" style="justify-content: flex-end;">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
|
|||||||
@@ -38,11 +38,6 @@
|
|||||||
<dt class="inline">{{ 'Duration'|trans }}</dt>
|
<dt class="inline">{{ 'Duration'|trans }}</dt>
|
||||||
<dd>{{ entity.duration|date('H:i') }}</dd>
|
<dd>{{ entity.duration|date('H:i') }}</dd>
|
||||||
|
|
||||||
{% if chill_aside_activity_config.show_concerned_persons_count == 'visible' %}
|
|
||||||
<dt class="inline">{{ 'Concerned persons count'|trans }}</dt>
|
|
||||||
<dd>{{ entity.concernedPersonsCount }}</dd>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<dt class="inline">{{ 'Remark'|trans }}</dt>
|
<dt class="inline">{{ 'Remark'|trans }}</dt>
|
||||||
{%- if entity.note is empty -%}
|
{%- if entity.note is empty -%}
|
||||||
<dd>
|
<dd>
|
||||||
@@ -60,6 +55,5 @@
|
|||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content_view_actions_duplicate_link %}{% endblock %}
|
|
||||||
{% endembed %}
|
{% endembed %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
<?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\AsideActivityBundle\Tests\Export\Aggregator;
|
|
||||||
|
|
||||||
use Chill\AsideActivityBundle\Entity\AsideActivity;
|
|
||||||
use Chill\AsideActivityBundle\Export\Aggregator\ByConcernedPersonsCountAggregator;
|
|
||||||
use Chill\MainBundle\Test\Export\AbstractAggregatorTest;
|
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal
|
|
||||||
*
|
|
||||||
* @coversNothing
|
|
||||||
*/
|
|
||||||
class ByConcernedPersonsCountAggregatorTest extends AbstractAggregatorTest
|
|
||||||
{
|
|
||||||
public function getAggregator()
|
|
||||||
{
|
|
||||||
return new ByConcernedPersonsCountAggregator();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getFormData(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
[],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getQueryBuilders(): iterable
|
|
||||||
{
|
|
||||||
self::bootKernel();
|
|
||||||
$em = self::getContainer()->get(EntityManagerInterface::class);
|
|
||||||
|
|
||||||
return [
|
|
||||||
$em->createQueryBuilder()
|
|
||||||
->select('count(aside.id)')
|
|
||||||
->from(AsideActivity::class, 'aside'),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
<?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\AsideActivityBundle\Tests\Export\Export;
|
|
||||||
|
|
||||||
use Chill\AsideActivityBundle\Export\Export\SumConcernedPersonsCountAsideActivity;
|
|
||||||
use Chill\AsideActivityBundle\Repository\AsideActivityRepository;
|
|
||||||
use Chill\MainBundle\Test\Export\AbstractExportTest;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal
|
|
||||||
*
|
|
||||||
* @coversNothing
|
|
||||||
*/
|
|
||||||
final class SumConcernedPersonsCountAsideActivityTest extends AbstractExportTest
|
|
||||||
{
|
|
||||||
protected function setUp(): void
|
|
||||||
{
|
|
||||||
self::bootKernel();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getExport()
|
|
||||||
{
|
|
||||||
$repository = self::getContainer()->get(AsideActivityRepository::class);
|
|
||||||
|
|
||||||
yield new SumConcernedPersonsCountAsideActivity($repository);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getFormData(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
[],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getModifiersCombination(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
['aside_activity'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -20,10 +20,6 @@ services:
|
|||||||
tags:
|
tags:
|
||||||
- { name: chill.export, alias: 'avg_aside_activity_duration' }
|
- { name: chill.export, alias: 'avg_aside_activity_duration' }
|
||||||
|
|
||||||
Chill\AsideActivityBundle\Export\Export\SumConcernedPersonsCountAsideActivity:
|
|
||||||
tags:
|
|
||||||
- { name: chill.export, alias: 'sum_aside_activity_concerned_persons_count' }
|
|
||||||
|
|
||||||
## Filters
|
## Filters
|
||||||
chill.aside_activity.export.date_filter:
|
chill.aside_activity.export.date_filter:
|
||||||
class: Chill\AsideActivityBundle\Export\Filter\ByDateFilter
|
class: Chill\AsideActivityBundle\Export\Filter\ByDateFilter
|
||||||
@@ -74,7 +70,3 @@ services:
|
|||||||
Chill\AsideActivityBundle\Export\Aggregator\ByLocationAggregator:
|
Chill\AsideActivityBundle\Export\Aggregator\ByLocationAggregator:
|
||||||
tags:
|
tags:
|
||||||
- { name: chill.export_aggregator, alias: 'aside_activity_location_aggregator' }
|
- { name: chill.export_aggregator, alias: 'aside_activity_location_aggregator' }
|
||||||
|
|
||||||
Chill\AsideActivityBundle\Export\Aggregator\ByConcernedPersonsCountAggregator:
|
|
||||||
tags:
|
|
||||||
- { name: chill.export_aggregator, alias: 'aside_activity_concerned_persons_count_aggregator' }
|
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
<?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\Migrations\AsideActivity;
|
|
||||||
|
|
||||||
use Doctrine\DBAL\Schema\Schema;
|
|
||||||
use Doctrine\Migrations\AbstractMigration;
|
|
||||||
|
|
||||||
final class Version20251006113048 extends AbstractMigration
|
|
||||||
{
|
|
||||||
public function getDescription(): string
|
|
||||||
{
|
|
||||||
return 'Add concernedPersonsCount property to AsideActivity entity';
|
|
||||||
}
|
|
||||||
|
|
||||||
public function up(Schema $schema): void
|
|
||||||
{
|
|
||||||
$this->addSql('ALTER TABLE chill_asideactivity.asideactivity ADD concernedPersonsCount INT DEFAULT 0');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function down(Schema $schema): void
|
|
||||||
{
|
|
||||||
$this->addSql('ALTER TABLE chill_asideactivity.AsideActivity DROP concernedPersonsCount');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -27,7 +27,6 @@ Emergency: Urgent
|
|||||||
by: "Par "
|
by: "Par "
|
||||||
location: Lieu
|
location: Lieu
|
||||||
Asideactivity location: Localisation de l'activité
|
Asideactivity location: Localisation de l'activité
|
||||||
Concerned persons count: Nombre d'usager concernés
|
|
||||||
|
|
||||||
# Crud
|
# Crud
|
||||||
crud:
|
crud:
|
||||||
@@ -178,7 +177,7 @@ export:
|
|||||||
agent_id: Utilisateur
|
agent_id: Utilisateur
|
||||||
creator_id: Créateur
|
creator_id: Créateur
|
||||||
main_scope: Service principal de l'utilisateur
|
main_scope: Service principal de l'utilisateur
|
||||||
main_center: Territoire principal de l'utilisateur
|
main_center: Centre principal de l'utilisateur
|
||||||
aside_activity_type: Catégorie d'activité annexe
|
aside_activity_type: Catégorie d'activité annexe
|
||||||
date: Date
|
date: Date
|
||||||
duration: Durée
|
duration: Durée
|
||||||
@@ -191,7 +190,6 @@ export:
|
|||||||
Count aside activities by various parameters.: Compte le nombre d'activités annexes selon divers critères
|
Count aside activities by various parameters.: Compte le nombre d'activités annexes selon divers critères
|
||||||
Average aside activities duration: Durée moyenne des activités annexes
|
Average aside activities duration: Durée moyenne des activités annexes
|
||||||
Sum aside activities duration: Durée des activités annexes
|
Sum aside activities duration: Durée des activités annexes
|
||||||
Sum concerned persons count for aside activities: Nombre d'usager concernés par les activités annexes
|
|
||||||
filter:
|
filter:
|
||||||
Filter by aside activity date: Filtrer les activités annexes par date
|
Filter by aside activity date: Filtrer les activités annexes par date
|
||||||
Filter by aside activity type: Filtrer les activités annexes par type d'activité
|
Filter by aside activity type: Filtrer les activités annexes par type d'activité
|
||||||
@@ -212,8 +210,6 @@ export:
|
|||||||
'Filtered by aside activity location: only %location%': "Filtré par localisation: uniquement %location%"
|
'Filtered by aside activity location: only %location%': "Filtré par localisation: uniquement %location%"
|
||||||
aggregator:
|
aggregator:
|
||||||
Group by aside activity type: Grouper les activités annexes par type d'activité
|
Group by aside activity type: Grouper les activités annexes par type d'activité
|
||||||
Group by concerned persons count: Grouper les activités annexes par nombre d'usagers conernés
|
|
||||||
Concerned persons count: Nombre d'usagers concernés
|
|
||||||
Aside activity type: Type d'activité annexe
|
Aside activity type: Type d'activité annexe
|
||||||
by_user_job:
|
by_user_job:
|
||||||
Aggregate by user job: Grouper les activités annexes par métier des utilisateurs
|
Aggregate by user job: Grouper les activités annexes par métier des utilisateurs
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ namespace Chill\CalendarBundle\Controller;
|
|||||||
|
|
||||||
use Chill\CalendarBundle\Entity\Calendar;
|
use Chill\CalendarBundle\Entity\Calendar;
|
||||||
use Chill\CalendarBundle\Form\CalendarType;
|
use Chill\CalendarBundle\Form\CalendarType;
|
||||||
use Chill\CalendarBundle\Form\CancelType;
|
|
||||||
use Chill\CalendarBundle\RemoteCalendar\Connector\RemoteCalendarConnectorInterface;
|
use Chill\CalendarBundle\RemoteCalendar\Connector\RemoteCalendarConnectorInterface;
|
||||||
use Chill\CalendarBundle\Repository\CalendarACLAwareRepositoryInterface;
|
use Chill\CalendarBundle\Repository\CalendarACLAwareRepositoryInterface;
|
||||||
use Chill\CalendarBundle\Security\Voter\CalendarVoter;
|
use Chill\CalendarBundle\Security\Voter\CalendarVoter;
|
||||||
@@ -31,7 +30,6 @@ use Chill\PersonBundle\Repository\PersonRepository;
|
|||||||
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
|
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
|
||||||
use Chill\PersonBundle\Security\Authorization\PersonVoter;
|
use Chill\PersonBundle\Security\Authorization\PersonVoter;
|
||||||
use Chill\ThirdPartyBundle\Entity\ThirdParty;
|
use Chill\ThirdPartyBundle\Entity\ThirdParty;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
|
||||||
use http\Exception\UnexpectedValueException;
|
use http\Exception\UnexpectedValueException;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
@@ -62,7 +60,6 @@ class CalendarController extends AbstractController
|
|||||||
private readonly UserRepositoryInterface $userRepository,
|
private readonly UserRepositoryInterface $userRepository,
|
||||||
private readonly TranslatorInterface $translator,
|
private readonly TranslatorInterface $translator,
|
||||||
private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry,
|
private readonly \Doctrine\Persistence\ManagerRegistry $managerRegistry,
|
||||||
private readonly EntityManagerInterface $em,
|
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -114,55 +111,6 @@ class CalendarController extends AbstractController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[Route(path: '/{_locale}/calendar/calendar/{id}/cancel', name: 'chill_calendar_calendar_cancel')]
|
|
||||||
public function cancelAction(Calendar $calendar, Request $request): Response
|
|
||||||
{
|
|
||||||
// Deal with sms being sent or not
|
|
||||||
// Communicate cancellation with the remote calendar.
|
|
||||||
|
|
||||||
$this->denyAccessUnlessGranted(CalendarVoter::EDIT, $calendar);
|
|
||||||
|
|
||||||
[$person, $accompanyingPeriod] = [$calendar->getPerson(), $calendar->getAccompanyingPeriod()];
|
|
||||||
|
|
||||||
$form = $this->createForm(CancelType::class, $calendar);
|
|
||||||
$form->add('submit', SubmitType::class);
|
|
||||||
|
|
||||||
if ($accompanyingPeriod instanceof AccompanyingPeriod) {
|
|
||||||
$view = '@ChillCalendar/Calendar/cancelCalendarByAccompanyingCourse.html.twig';
|
|
||||||
$redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_period', ['id' => $accompanyingPeriod->getId()]);
|
|
||||||
} elseif ($person instanceof Person) {
|
|
||||||
$view = '@ChillCalendar/Calendar/cancelCalendarByPerson.html.twig';
|
|
||||||
$redirectRoute = $this->generateUrl('chill_calendar_calendar_list_by_person', ['id' => $person->getId()]);
|
|
||||||
} else {
|
|
||||||
throw new \RuntimeException('nor person or accompanying period');
|
|
||||||
}
|
|
||||||
|
|
||||||
$form->handleRequest($request);
|
|
||||||
|
|
||||||
if ($form->isSubmitted() && $form->isValid()) {
|
|
||||||
|
|
||||||
$this->logger->notice('A calendar event has been cancelled', [
|
|
||||||
'by_user' => $this->getUser()->getUsername(),
|
|
||||||
'calendar_id' => $calendar->getId(),
|
|
||||||
]);
|
|
||||||
|
|
||||||
$calendar->setStatus($calendar::STATUS_CANCELED);
|
|
||||||
$calendar->setSmsStatus($calendar::SMS_CANCEL_PENDING);
|
|
||||||
$this->em->flush();
|
|
||||||
|
|
||||||
$this->addFlash('success', $this->translator->trans('chill_calendar.calendar_canceled'));
|
|
||||||
|
|
||||||
return new RedirectResponse($redirectRoute);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->render($view, [
|
|
||||||
'calendar' => $calendar,
|
|
||||||
'form' => $form->createView(),
|
|
||||||
'accompanyingCourse' => $accompanyingPeriod,
|
|
||||||
'person' => $person,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edit a calendar item.
|
* Edit a calendar item.
|
||||||
*/
|
*/
|
||||||
@@ -318,7 +266,7 @@ class CalendarController extends AbstractController
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->getUser() instanceof User) {
|
if (!$this->getUser() instanceof User) {
|
||||||
throw new UnauthorizedHttpException('you are not a user');
|
throw new UnauthorizedHttpException('you are not an user');
|
||||||
}
|
}
|
||||||
|
|
||||||
$view = '@ChillCalendar/Calendar/listByUser.html.twig';
|
$view = '@ChillCalendar/Calendar/listByUser.html.twig';
|
||||||
|
|||||||
@@ -1,58 +0,0 @@
|
|||||||
<?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\CalendarBundle\Controller;
|
|
||||||
|
|
||||||
use Chill\CalendarBundle\Entity\Calendar;
|
|
||||||
use Chill\CalendarBundle\Repository\InviteRepository;
|
|
||||||
use Chill\DocGeneratorBundle\Repository\DocGeneratorTemplateRepositoryInterface;
|
|
||||||
use Chill\MainBundle\Entity\User;
|
|
||||||
use Chill\MainBundle\Pagination\PaginatorFactory;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
|
||||||
use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException;
|
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
|
||||||
|
|
||||||
class MyInvitationsController extends AbstractController
|
|
||||||
{
|
|
||||||
public function __construct(private readonly InviteRepository $inviteRepository, private readonly PaginatorFactory $paginator, private readonly DocGeneratorTemplateRepositoryInterface $docGeneratorTemplateRepository) {}
|
|
||||||
|
|
||||||
#[Route(path: '/{_locale}/calendar/invitations/my', name: 'chill_calendar_invitations_list_my')]
|
|
||||||
public function myInvitations(Request $request): Response
|
|
||||||
{
|
|
||||||
$this->denyAccessUnlessGranted('ROLE_USER');
|
|
||||||
|
|
||||||
$user = $this->getUser();
|
|
||||||
|
|
||||||
if (!$user instanceof User) {
|
|
||||||
throw new UnauthorizedHttpException('you are not a user');
|
|
||||||
}
|
|
||||||
|
|
||||||
$total = count($this->inviteRepository->findBy(['user' => $user]));
|
|
||||||
$paginator = $this->paginator->create($total);
|
|
||||||
|
|
||||||
$invitations = $this->inviteRepository->findBy(
|
|
||||||
['user' => $user],
|
|
||||||
['createdAt' => 'DESC'],
|
|
||||||
$paginator->getItemsPerPage(),
|
|
||||||
$paginator->getCurrentPageFirstItemNumber()
|
|
||||||
);
|
|
||||||
|
|
||||||
$view = '@ChillCalendar/Invitations/listByUser.html.twig';
|
|
||||||
|
|
||||||
return $this->render($view, [
|
|
||||||
'invitations' => $invitations,
|
|
||||||
'paginator' => $paginator,
|
|
||||||
'templates' => $this->docGeneratorTemplateRepository->findByEntity(Calendar::class),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -35,7 +35,7 @@ class LoadCancelReason extends Fixture implements FixtureGroupInterface
|
|||||||
$arr = [
|
$arr = [
|
||||||
['name' => CancelReason::CANCELEDBY_USER],
|
['name' => CancelReason::CANCELEDBY_USER],
|
||||||
['name' => CancelReason::CANCELEDBY_PERSON],
|
['name' => CancelReason::CANCELEDBY_PERSON],
|
||||||
['name' => CancelReason::CANCELEDBY_OTHER],
|
['name' => CancelReason::CANCELEDBY_DONOTCOUNT],
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($arr as $a) {
|
foreach ($arr as $a) {
|
||||||
|
|||||||
@@ -269,11 +269,6 @@ class Calendar implements TrackCreationInterface, TrackUpdateInterface, HasCente
|
|||||||
return $this->cancelReason;
|
return $this->cancelReason;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isCanceled(): bool
|
|
||||||
{
|
|
||||||
return null !== $this->cancelReason;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getCenters(): ?iterable
|
public function getCenters(): ?iterable
|
||||||
{
|
{
|
||||||
return match ($this->getContext()) {
|
return match ($this->getContext()) {
|
||||||
|
|||||||
@@ -18,14 +18,14 @@ use Doctrine\ORM\Mapping as ORM;
|
|||||||
#[ORM\Table(name: 'chill_calendar.cancel_reason')]
|
#[ORM\Table(name: 'chill_calendar.cancel_reason')]
|
||||||
class CancelReason
|
class CancelReason
|
||||||
{
|
{
|
||||||
final public const CANCELEDBY_OTHER = 'CANCELEDBY_OTHER';
|
final public const CANCELEDBY_DONOTCOUNT = 'CANCELEDBY_DONOTCOUNT';
|
||||||
|
|
||||||
final public const CANCELEDBY_PERSON = 'CANCELEDBY_PERSON';
|
final public const CANCELEDBY_PERSON = 'CANCELEDBY_PERSON';
|
||||||
|
|
||||||
final public const CANCELEDBY_USER = 'CANCELEDBY_USER';
|
final public const CANCELEDBY_USER = 'CANCELEDBY_USER';
|
||||||
|
|
||||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::BOOLEAN, options: ['default' => true])]
|
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::BOOLEAN)]
|
||||||
private bool $active = true;
|
private ?bool $active = null;
|
||||||
|
|
||||||
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::STRING, length: 255)]
|
#[ORM\Column(type: \Doctrine\DBAL\Types\Types::STRING, length: 255)]
|
||||||
private ?string $canceledBy = null;
|
private ?string $canceledBy = null;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ use Chill\CalendarBundle\Entity\CancelReason;
|
|||||||
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
|
use Chill\MainBundle\Form\Type\TranslatableStringFormType;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
|
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
@@ -28,14 +28,7 @@ class CancelReasonType extends AbstractType
|
|||||||
->add('active', CheckboxType::class, [
|
->add('active', CheckboxType::class, [
|
||||||
'required' => false,
|
'required' => false,
|
||||||
])
|
])
|
||||||
->add('canceledBy', ChoiceType::class, [
|
->add('canceledBy', TextType::class);
|
||||||
'choices' => [
|
|
||||||
'chill_calendar.canceled_by.user' => CancelReason::CANCELEDBY_USER,
|
|
||||||
'chill_calendar.canceled_by.person' => CancelReason::CANCELEDBY_PERSON,
|
|
||||||
'chill_calendar.canceled_by.other' => CancelReason::CANCELEDBY_OTHER,
|
|
||||||
],
|
|
||||||
'required' => true,
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
<?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\CalendarBundle\Form;
|
|
||||||
|
|
||||||
use Chill\CalendarBundle\Entity\Calendar;
|
|
||||||
use Chill\CalendarBundle\Entity\CancelReason;
|
|
||||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
|
||||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
|
||||||
|
|
||||||
class CancelType extends AbstractType
|
|
||||||
{
|
|
||||||
public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper) {}
|
|
||||||
|
|
||||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
|
||||||
{
|
|
||||||
$builder->add('cancelReason', EntityType::class, [
|
|
||||||
'class' => CancelReason::class,
|
|
||||||
'required' => true,
|
|
||||||
'choice_label' => fn (CancelReason $cancelReason) => $this->translatableStringHelper->localize($cancelReason->getName()),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function configureOptions(OptionsResolver $resolver)
|
|
||||||
{
|
|
||||||
$resolver->setDefaults([
|
|
||||||
'data_class' => Calendar::class,
|
|
||||||
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -25,13 +25,6 @@ class UserMenuBuilder implements LocalMenuBuilderInterface
|
|||||||
if ($this->security->isGranted('ROLE_USER')) {
|
if ($this->security->isGranted('ROLE_USER')) {
|
||||||
$menu->addChild('My calendar list', [
|
$menu->addChild('My calendar list', [
|
||||||
'route' => 'chill_calendar_calendar_list_my',
|
'route' => 'chill_calendar_calendar_list_my',
|
||||||
])
|
|
||||||
->setExtras([
|
|
||||||
'order' => 8,
|
|
||||||
'icon' => 'tasks',
|
|
||||||
]);
|
|
||||||
$menu->addChild('invite.list.title', [
|
|
||||||
'route' => 'chill_calendar_invitations_list_my',
|
|
||||||
])
|
])
|
||||||
->setExtras([
|
->setExtras([
|
||||||
'order' => 9,
|
'order' => 9,
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ namespace Chill\CalendarBundle\Messenger\Doctrine;
|
|||||||
use Chill\CalendarBundle\Entity\Calendar;
|
use Chill\CalendarBundle\Entity\Calendar;
|
||||||
use Chill\CalendarBundle\Messenger\Message\CalendarMessage;
|
use Chill\CalendarBundle\Messenger\Message\CalendarMessage;
|
||||||
use Chill\CalendarBundle\Messenger\Message\CalendarRemovedMessage;
|
use Chill\CalendarBundle\Messenger\Message\CalendarRemovedMessage;
|
||||||
use Chill\MainBundle\Entity\User;
|
|
||||||
use Doctrine\ORM\Event\PostPersistEventArgs;
|
use Doctrine\ORM\Event\PostPersistEventArgs;
|
||||||
use Doctrine\ORM\Event\PostRemoveEventArgs;
|
use Doctrine\ORM\Event\PostRemoveEventArgs;
|
||||||
use Doctrine\ORM\Event\PostUpdateEventArgs;
|
use Doctrine\ORM\Event\PostUpdateEventArgs;
|
||||||
@@ -32,17 +31,6 @@ class CalendarEntityListener
|
|||||||
{
|
{
|
||||||
public function __construct(private readonly MessageBusInterface $messageBus, private readonly Security $security) {}
|
public function __construct(private readonly MessageBusInterface $messageBus, private readonly Security $security) {}
|
||||||
|
|
||||||
private function getAuthenticatedUser(): User
|
|
||||||
{
|
|
||||||
$user = $this->security->getUser();
|
|
||||||
|
|
||||||
if (!$user instanceof User) {
|
|
||||||
throw new \LogicException('Expected an instance of User.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function postPersist(Calendar $calendar, PostPersistEventArgs $args): void
|
public function postPersist(Calendar $calendar, PostPersistEventArgs $args): void
|
||||||
{
|
{
|
||||||
if (!$calendar->preventEnqueueChanges) {
|
if (!$calendar->preventEnqueueChanges) {
|
||||||
@@ -50,7 +38,7 @@ class CalendarEntityListener
|
|||||||
new CalendarMessage(
|
new CalendarMessage(
|
||||||
$calendar,
|
$calendar,
|
||||||
CalendarMessage::CALENDAR_PERSIST,
|
CalendarMessage::CALENDAR_PERSIST,
|
||||||
$this->getAuthenticatedUser()
|
$this->security->getUser()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -62,7 +50,7 @@ class CalendarEntityListener
|
|||||||
$this->messageBus->dispatch(
|
$this->messageBus->dispatch(
|
||||||
new CalendarRemovedMessage(
|
new CalendarRemovedMessage(
|
||||||
$calendar,
|
$calendar,
|
||||||
$this->getAuthenticatedUser()
|
$this->security->getUser()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -70,19 +58,12 @@ class CalendarEntityListener
|
|||||||
|
|
||||||
public function postUpdate(Calendar $calendar, PostUpdateEventArgs $args): void
|
public function postUpdate(Calendar $calendar, PostUpdateEventArgs $args): void
|
||||||
{
|
{
|
||||||
if ($calendar->getStatus() === $calendar::STATUS_CANCELED) {
|
if (!$calendar->preventEnqueueChanges) {
|
||||||
$this->messageBus->dispatch(
|
|
||||||
new CalendarRemovedMessage(
|
|
||||||
$calendar,
|
|
||||||
$this->getAuthenticatedUser()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
} elseif (!$calendar->preventEnqueueChanges) {
|
|
||||||
$this->messageBus->dispatch(
|
$this->messageBus->dispatch(
|
||||||
new CalendarMessage(
|
new CalendarMessage(
|
||||||
$calendar,
|
$calendar,
|
||||||
CalendarMessage::CALENDAR_UPDATE,
|
CalendarMessage::CALENDAR_UPDATE,
|
||||||
$this->getAuthenticatedUser()
|
$this->security->getUser()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,8 +70,6 @@ class CalendarRemovedMessage
|
|||||||
|
|
||||||
public function getRemoteId(): string
|
public function getRemoteId(): string
|
||||||
{
|
{
|
||||||
dump($this->remoteId);
|
|
||||||
|
|
||||||
return $this->remoteId;
|
return $this->remoteId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,7 +191,6 @@ class CalendarRepository implements ObjectRepository
|
|||||||
$qb->expr()->eq('c.mainUser', ':user'),
|
$qb->expr()->eq('c.mainUser', ':user'),
|
||||||
$qb->expr()->gte('c.startDate', ':startDate'),
|
$qb->expr()->gte('c.startDate', ':startDate'),
|
||||||
$qb->expr()->lte('c.endDate', ':endDate'),
|
$qb->expr()->lte('c.endDate', ':endDate'),
|
||||||
$qb->expr()->isNull('c.cancelReason'),
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
->setParameters([
|
->setParameters([
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class InviteRepository implements ObjectRepository
|
|||||||
/**
|
/**
|
||||||
* @return array|Invite[]
|
* @return array|Invite[]
|
||||||
*/
|
*/
|
||||||
public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array
|
public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null)
|
||||||
{
|
{
|
||||||
return $this->entityRepository->findBy($criteria, $orderBy, $limit, $offset);
|
return $this->entityRepository->findBy($criteria, $orderBy, $limit, $offset);
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user