mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-11-29 15:14:34 +00:00
Compare commits
245 Commits
dutch-tran
...
ticket-app
| Author | SHA1 | Date | |
|---|---|---|---|
| d21d03d407 | |||
| 2f930ac138 | |||
| 65bbdc283d | |||
|
|
f0b3e63d66 | ||
| 41a31944b3 | |||
| 51607572de | |||
| 1fc5530707 | |||
|
|
b31778c068 | ||
|
305c6deb24
|
|||
|
d691098a21
|
|||
| a22cbe0239 | |||
| 98902bdeb8 | |||
| 4765d4fe28 | |||
|
|
30bcb85549 | ||
|
6d2e78ce55
|
|||
| 61ca700bbe | |||
|
|
b43aeebc3c | ||
| 056e2dcc5f | |||
| e57d1ac696 | |||
| 0eff1d2e79 | |||
| 3928b2cc7a | |||
|
4f51ef81ad
|
|||
|
4637dc692c
|
|||
| 38935edb93 | |||
|
|
e1ef65d4ca | ||
| ec9d0be70b | |||
|
|
0ba2cbc1e8 | ||
| e87429933a | |||
|
8e2e676e3d
|
|||
| e12ad563a3 | |||
|
|
711aa8db9b | ||
| e78d44953f | |||
| 18f67801c7 | |||
|
c815e6bc69
|
|||
| 807f2711fe | |||
|
|
cd594cd580 | ||
|
fb6b26bfb5
|
|||
|
c5cedb8bd6
|
|||
|
2665e43a61
|
|||
|
25561cdf63
|
|||
| 10b73e06e1 | |||
|
|
e7c04e34a9 | ||
| 164beee7c6 | |||
|
|
4d96eb9457 | ||
| fe2eba3b29 | |||
|
|
61d1232e31 | ||
| 6594d4f6a6 | |||
| 1a66a9e864 | |||
| 1b74c119dc | |||
| 14d88810f3 | |||
| 445a2c9358 | |||
| c8baf0a8aa | |||
| faed443a96 | |||
| bbf387d96f | |||
|
|
b7c9b60744 | ||
|
2bd303bbbe
|
|||
|
c5e6122d2c
|
|||
| 088b876e20 | |||
| 3400656d7c | |||
|
568c8be7fd
|
|||
|
538ecc42ea
|
|||
|
15d26d4b06
|
|||
|
d8bd9bd7cd
|
|||
|
dcdfba5ccd
|
|||
|
0204bdd38d
|
|||
|
392fd01b56
|
|||
| 35844f3b73 | |||
| 7506b918d7 | |||
| cfba291f2c | |||
|
|
04438c09d3 | ||
| 2a54d1b909 | |||
|
|
628eeac5e0 | ||
| a2263b3fa1 | |||
| 74796d0fb0 | |||
|
c19481e40a
|
|||
|
|
6eeb717b1a | ||
|
beb7c462da
|
|||
|
|
dbf363a9e8 | ||
|
64a2f7c9ed
|
|||
| f26d9739c8 | |||
|
afa5edc1d8
|
|||
|
42d6c9e672
|
|||
|
2b22d4cb7c
|
|||
|
c8e5d0eb37
|
|||
| 2bf8ad5d6c | |||
| 11698a52e3 | |||
| 70955573e8 | |||
|
|
3df4043eb9 | ||
|
06e8264dde
|
|||
| b451d2c4a3 | |||
| 4f93150874 | |||
| 0566ab0910 | |||
|
|
f4eeee1598 | ||
| 33cf16fc13 | |||
| 0a331aab37 | |||
| d43b739654 | |||
| c72432efae | |||
|
95975fae55
|
|||
|
95a7efa138
|
|||
|
45e193ff6d
|
|||
|
dfc146ff3f
|
|||
| b41fcf66a9 | |||
|
|
a8dd1b3548 | ||
|
2b99a480ac
|
|||
|
7633e587bb
|
|||
|
fc61dfdf3a
|
|||
|
f1a5b5c49e
|
|||
|
ec685dcd47
|
|||
|
631ae3eedd
|
|||
|
440a7837ac
|
|||
|
e0abf34784
|
|||
|
377ae9a9dc
|
|||
|
034dc30e30
|
|||
|
d615111a0f
|
|||
|
ffb756c712
|
|||
|
69daccb860
|
|||
|
16435423cf
|
|||
|
697b4ab436
|
|||
|
67d804e28e
|
|||
|
cf41fa9574
|
|||
|
b8b325f7d7
|
|||
|
e97bd8c4ef
|
|||
|
e28d7df533
|
|||
|
4b20b1bc01
|
|||
|
b15733076c
|
|||
|
25be5c9ea3
|
|||
|
b035020c6f
|
|||
|
128101dc46
|
|||
|
5f2711023e
|
|||
|
bdf2ed4bbd
|
|||
|
1df542603e
|
|||
|
80bcc68ce5
|
|||
|
154fc3e2f6
|
|||
|
e45af94c78
|
|||
|
166a6fde20
|
|||
|
631f047338
|
|||
|
a777588bb8
|
|||
|
ca78d112c2
|
|||
|
bcfd317d83
|
|||
|
348740f073
|
|||
|
0d74f0980f
|
|||
|
be19dc00db
|
|||
|
643028ffd6
|
|||
|
ac4e2e5bf2
|
|||
|
498572b96e
|
|||
|
d2a61ce69b
|
|||
|
a9c0567ee1
|
|||
|
76cec5b5a8
|
|||
|
efe8a67697
|
|||
|
26dfa9b028
|
|||
|
50025044d3
|
|||
|
e6202a2e34
|
|||
|
b863bd967d
|
|||
|
e65bcf7275
|
|||
|
e00ece4200
|
|||
|
640fd71402
|
|||
|
aae50ca290
|
|||
|
1fa483598b
|
|||
|
e4b6a468f8
|
|||
|
|
66c7758023 | ||
|
|
4750d2c24e | ||
|
|
ca05e3d979 | ||
|
|
a20f9b4f86 | ||
|
|
c73c1eb8d5 | ||
|
|
8778bb0731 | ||
|
|
c7d20eebc5 | ||
|
|
b9e130c159 | ||
|
|
3e8bc94af3 | ||
|
|
0c914c9f9f | ||
|
|
580a60c939 | ||
|
|
4996ac3b7c | ||
|
|
2a23bf19cb | ||
|
|
650d2596d9 | ||
|
|
2bdd5a329e | ||
|
78d1776733
|
|||
|
66dc603c85
|
|||
|
3a8154ecce
|
|||
|
c81828e04f
|
|||
|
|
ec17dd7de2 | ||
| 76c076a5f3 | |||
|
|
f0045edd6c | ||
|
|
d00b76ffcd | ||
|
|
8991f0ef3f | ||
|
|
d6f5eae0c9 | ||
|
|
821fce3dd8 | ||
|
|
1d33ae1e39 | ||
|
|
19af0feb57 | ||
|
|
1c09e9a692 | ||
|
|
d72e748388 | ||
|
|
ab850b7b70 | ||
|
|
3f9745d8cf | ||
|
|
473765366a | ||
|
|
6500c24a7f | ||
|
|
1d00457141 | ||
|
|
eb0bf56cff | ||
|
|
7b8cd90cf1 | ||
|
|
a27d92aba0 | ||
|
|
85bdfb9e21 | ||
|
|
4cffcf4de1 | ||
|
|
b2587a688f | ||
|
|
c9f0e9843b | ||
|
|
b40ad9e445 | ||
|
|
3e10e47e29 | ||
|
|
2a1963e993 | ||
| 34c171659b | |||
|
2d8b960d9e
|
|||
| 831ae03431 | |||
|
45828174d1
|
|||
|
ed45f14a45
|
|||
|
fa67835690
|
|||
|
b434d38091
|
|||
|
|
800a952532 | ||
|
9f355032a8
|
|||
|
0bc6e62d4d
|
|||
|
46fb1c04b5
|
|||
| 3b2c3d1464 | |||
|
|
0bd6038160 | ||
|
|
baab8e94ce | ||
|
e2deb55fdb
|
|||
|
|
2cdfb50058 | ||
|
39d701feb2
|
|||
|
613ee8b186
|
|||
|
56a1a488de
|
|||
| 3f789ad0f4 | |||
|
467bea7cde
|
|||
|
670b8eb82b
|
|||
|
a9760b323f
|
|||
|
71a3a1924a
|
|||
|
ecdc1e25bf
|
|||
|
dd37427be1
|
|||
|
c8467df1b1
|
|||
|
4c89a954fa
|
|||
|
7c1f3b114d
|
|||
|
36bc4dab24
|
|||
|
4b30d92282
|
|||
|
75fbec5489
|
|||
|
912fdd6349
|
|||
|
5832542978
|
|||
|
5c3585a1ed
|
|||
|
a2f1e20ddf
|
|||
|
4d67702a76
|
|||
| 18e442db29 | |||
|
|
deb3d92189 | ||
|
a59ea7db31
|
|||
|
a738b0cac9
|
7
.changes/unreleased/DX-20251027-150053.yaml
Normal file
7
.changes/unreleased/DX-20251027-150053.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
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
|
||||
6
.changes/unreleased/Feature-20240530-160003.yaml
Normal file
6
.changes/unreleased/Feature-20240530-160003.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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: ""
|
||||
6
.changes/unreleased/Feature-20240531-190242.yaml
Normal file
6
.changes/unreleased/Feature-20240531-190242.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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-20250808-120802.yaml
Normal file
6
.changes/unreleased/Feature-20250808-120802.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
6
.changes/unreleased/Feature-20251007-155945.yaml
Normal file
6
.changes/unreleased/Feature-20251007-155945.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
kind: Feature
|
||||
body: Admin interface for Motive entity
|
||||
time: 2025-10-07T15:59:45.597029709+02:00
|
||||
custom:
|
||||
Issue: ""
|
||||
SchemaChange: No schema change
|
||||
6
.changes/unreleased/Feature-20251022-111552.yaml
Normal file
6
.changes/unreleased/Feature-20251022-111552.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
6
.changes/unreleased/Feature-20251029-152510.yaml
Normal file
6
.changes/unreleased/Feature-20251029-152510.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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-20251029-124355.yaml
Normal file
6
.changes/unreleased/Fixed-20251029-124355.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
6
.changes/unreleased/Fixed-20251029-143836.yaml
Normal file
6
.changes/unreleased/Fixed-20251029-143836.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
6
.changes/unreleased/Fixed-20251104-135108.yaml
Normal file
6
.changes/unreleased/Fixed-20251104-135108.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
6
.changes/unreleased/Fixed-20251106-161605.yaml
Normal file
6
.changes/unreleased/Fixed-20251106-161605.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
@@ -1,7 +0,0 @@
|
||||
kind: Fixed
|
||||
body: |
|
||||
Associate activity's creator as a participant by default, and retro-actively append the creator to each activity
|
||||
time: 2025-11-18T14:05:59.904993123+01:00
|
||||
custom:
|
||||
Issue: "466"
|
||||
SchemaChange: Add columns or tables
|
||||
6
.changes/unreleased/UX-20251006-123932.yaml
Normal file
6
.changes/unreleased/UX-20251006-123932.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
6
.changes/unreleased/UX-20251029-110804.yaml
Normal file
6
.changes/unreleased/UX-20251029-110804.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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
|
||||
6
.changes/unreleased/UX-20251030-180919.yaml
Normal file
6
.changes/unreleased/UX-20251030-180919.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
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,6 +0,0 @@
|
||||
kind: UX
|
||||
body: Alphabetically order userJobs and mainLocations within user creation form
|
||||
time: 2025-11-19T15:37:06.393470745+01:00
|
||||
custom:
|
||||
Issue: "470"
|
||||
SchemaChange: No schema change
|
||||
@@ -1,6 +0,0 @@
|
||||
kind: UX
|
||||
body: Change position and color of confirm parcours button
|
||||
time: 2025-11-24T15:11:15.960279853+01:00
|
||||
custom:
|
||||
Issue: "437"
|
||||
SchemaChange: No schema change
|
||||
@@ -1,21 +0,0 @@
|
||||
## v4.7.0 - 2025-11-10
|
||||
### Feature
|
||||
* ([#385](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/385)) Create invitation list in user menu
|
||||
* ([#404](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/404)) Add columns for comments linked to an activity in the activity list export
|
||||
### Fixed
|
||||
* ([#451](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/451)) Fix: display also social actions linked to parents of the selected social issue
|
||||
* ([#453](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/453)) Fix: export actions and their results in csv even when action does not have any goals attached to it.
|
||||
* Fix the possibility to delete a workflow
|
||||
|
||||
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
|
||||
* ([#457](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/457)) Fix the fusion of thirdparty properties that are located in another schema than public for TO_ONE relations + add extra loop for MANY_TO_MANY relations where thirdparty is the source instead of the target
|
||||
* ([#428](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/428)) Fix suggestion of referrer when creating notification for accompanyingPeriodWorkDocument
|
||||
### DX
|
||||
* Send notifications log to dedicated channel, if it exists
|
||||
|
||||
### UX
|
||||
* ([#425](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/425)) Change the terms 'cercle' and 'centre' to 'service', and 'territoire' respectively.
|
||||
* ([#542](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/542)) Improve the ux for selecting whether user wants to be notified of the final step of a workflow or all steps
|
||||
* Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'
|
||||
* ([#455](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/455)) Change the order of display for results and objectives in the social work/action form
|
||||
* Wrap text when it is too long within badges
|
||||
@@ -1,9 +0,0 @@
|
||||
## v4.8.0 - 2025-11-17
|
||||
### Feature
|
||||
* ([#461](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/461)) Make a calendar item on the 'mes rendez-vous' page clickable. Clicking will navigate to the edit page of the calendar item.
|
||||
### Fixed
|
||||
* ([#463](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/463)) Display calendar items for which an invite was accepted on the mes rendez-vous page
|
||||
* Improve accessibility on login page
|
||||
|
||||
### UX
|
||||
* ([#449](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/449)) Remove the label if there is only one scope and no scope picking field is displayed.
|
||||
@@ -1,6 +0,0 @@
|
||||
## v4.8.1 - 2025-11-20
|
||||
### Fixed
|
||||
* Insert name of file as the document title when uploading
|
||||
* Add missing path paramater 'id' for editing multiple participations
|
||||
* ([#471](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/471)) Hide the display of inactive user groups in the api
|
||||
|
||||
@@ -19,11 +19,11 @@ max_line_length = 80
|
||||
[COMMIT_EDITMSG]
|
||||
max_line_length = 0
|
||||
|
||||
[*.{js, vue, ts}]
|
||||
[*.{js,vue,ts}]
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
|
||||
[.rst]
|
||||
ident_size = 3
|
||||
ident_style = space
|
||||
[*.rst]
|
||||
indent_size = 3
|
||||
indent_style = space
|
||||
|
||||
|
||||
4
.env
4
.env
@@ -92,7 +92,3 @@ REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}
|
||||
###> symfony/ovh-cloud-notifier ###
|
||||
# OVHCLOUD_DSN=ovhcloud://APPLICATION_KEY:APPLICATION_SECRET@default?consumer_key=CONSUMER_KEY&service_name=SERVICE_NAME
|
||||
###< symfony/ovh-cloud-notifier ###
|
||||
|
||||
###> symfony/loco-translation-provider ###
|
||||
#LOCO_DSN=loco://API_KEY@default
|
||||
###< symfony/loco-translation-provider ###
|
||||
|
||||
@@ -234,11 +234,9 @@ This must be a decision made by a human, not by an AI. Every AI task must abort
|
||||
|
||||
#### Running Tests
|
||||
|
||||
The tests are run from the project's root (not from the bundle's root).
|
||||
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).
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
vendor/bin/phpunit
|
||||
|
||||
# Run a specific test file
|
||||
vendor/bin/phpunit path/to/TestFile.php
|
||||
|
||||
4
.prettierrc
Normal file
4
.prettierrc
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"tabWidth": 2,
|
||||
"useTabs": false
|
||||
}
|
||||
30
.vscode/launch.json
vendored
Normal file
30
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
// 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
Normal file
23
.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
43
CHANGELOG.md
43
CHANGELOG.md
@@ -6,45 +6,6 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
||||
and is generated by [Changie](https://github.com/miniscruff/changie).
|
||||
|
||||
|
||||
## v4.8.1 - 2025-11-20
|
||||
### Fixed
|
||||
* Insert name of file as the document title when uploading
|
||||
* Add missing path paramater 'id' for editing multiple participations
|
||||
* ([#471](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/471)) Hide the display of inactive user groups in the api
|
||||
|
||||
|
||||
## v4.8.0 - 2025-11-17
|
||||
### Feature
|
||||
* ([#461](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/461)) Make a calendar item on the 'mes rendez-vous' page clickable. Clicking will navigate to the edit page of the calendar item.
|
||||
### Fixed
|
||||
* ([#463](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/463)) Display calendar items for which an invite was accepted on the mes rendez-vous page
|
||||
* Improve accessibility on login page
|
||||
|
||||
### UX
|
||||
* ([#449](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/449)) Remove the label if there is only one scope and no scope picking field is displayed.
|
||||
|
||||
## v4.7.0 - 2025-11-10
|
||||
### Feature
|
||||
* ([#385](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/385)) Create invitation list in user menu
|
||||
* ([#404](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/404)) Add columns for comments linked to an activity in the activity list export
|
||||
### Fixed
|
||||
* ([#451](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/451)) Fix: display also social actions linked to parents of the selected social issue
|
||||
* ([#453](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/453)) Fix: export actions and their results in csv even when action does not have any goals attached to it.
|
||||
* Fix the possibility to delete a workflow
|
||||
|
||||
**Schema Change**: Drop or rename table or columns, or enforce new constraint that must be manually fixed
|
||||
* ([#457](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/457)) Fix the fusion of thirdparty properties that are located in another schema than public for TO_ONE relations + add extra loop for MANY_TO_MANY relations where thirdparty is the source instead of the target
|
||||
* ([#428](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/428)) Fix suggestion of referrer when creating notification for accompanyingPeriodWorkDocument
|
||||
### DX
|
||||
* Send notifications log to dedicated channel, if it exists
|
||||
|
||||
### UX
|
||||
* ([#425](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/425)) Change the terms 'cercle' and 'centre' to 'service', and 'territoire' respectively.
|
||||
* ([#542](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/542)) Improve the ux for selecting whether user wants to be notified of the final step of a workflow or all steps
|
||||
* Expand timeSpent choices for evaluation document and translate them to user locale or fallback 'fr'
|
||||
* ([#455](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/455)) Change the order of display for results and objectives in the social work/action form
|
||||
* Wrap text when it is too long within badges
|
||||
|
||||
## v4.6.1 - 2025-10-27
|
||||
### Fixed
|
||||
* Fix export case where no 'reason' is picked within the PersonHavingActivityBetweenDateFilter.php
|
||||
@@ -819,7 +780,7 @@ Fix color of Chill footer
|
||||
- ajout d'un filtre et regroupement par usager participant sur les échanges
|
||||
- ajout d'un regroupement: par type d'activité associé au parcours;
|
||||
- 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 centre dans les exports
|
||||
- ajout d'un paramètre qui permet de désactiver le filtre par territoire dans les exports
|
||||
- correction de l'interface de date dans les filtres et regroupements "par statut du parcours à la date"
|
||||
|
||||
## v2.9.2 - 2023-10-17
|
||||
@@ -999,7 +960,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 service des intervenants sur un parcours;
|
||||
- ajout d'un regroupement par utilisateur intervenant sur un parcours
|
||||
- ajout d'un regroupement "par centre de l'usager";
|
||||
- ajout d'un regroupement "par territoire de l'usager";
|
||||
- ajout d'un filtre "par métier 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);
|
||||
|
||||
@@ -54,7 +54,7 @@ Arborescence:
|
||||
- person
|
||||
- personvendee
|
||||
- household_edit_metadata
|
||||
- index.js
|
||||
- index.ts
|
||||
```
|
||||
|
||||
## Organisation des feuilles de styles
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import { trans, setLocale, setLocaleFallbacks } from "./ux-translator";
|
||||
import {
|
||||
trans,
|
||||
setLocale,
|
||||
getLocale,
|
||||
setLocaleFallbacks,
|
||||
} from "./ux-translator";
|
||||
|
||||
setLocaleFallbacks({"en": "fr", "nl": "fr", "fr": "en"});
|
||||
setLocale('fr');
|
||||
setLocaleFallbacks({ en: "fr", nl: "fr", fr: "en" });
|
||||
setLocale("fr");
|
||||
|
||||
export { trans };
|
||||
export * from '../var/translations';
|
||||
export { trans, getLocale };
|
||||
export * from "../var/translations";
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
"symfony/http-client": "^5.4",
|
||||
"symfony/http-foundation": "^5.4",
|
||||
"symfony/intl": "^5.4",
|
||||
"symfony/loco-translation-provider": "^6.0",
|
||||
"symfony/mailer": "^5.4",
|
||||
"symfony/messenger": "^5.4",
|
||||
"symfony/mime": "^5.4",
|
||||
@@ -134,6 +133,7 @@
|
||||
"Chill\\TaskBundle\\": "src/Bundle/ChillTaskBundle",
|
||||
"Chill\\ThirdPartyBundle\\": "src/Bundle/ChillThirdPartyBundle",
|
||||
"Chill\\WopiBundle\\": "src/Bundle/ChillWopiBundle/src",
|
||||
"Chill\\TicketBundle\\": "src/Bundle/ChillTicketBundle/src",
|
||||
"Chill\\Utils\\Rector\\": "utils/rector/src"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -34,6 +34,7 @@ return [
|
||||
Chill\ThirdPartyBundle\ChillThirdPartyBundle::class => ['all' => true],
|
||||
Chill\BudgetBundle\ChillBudgetBundle::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\UX\Translator\UxTranslatorBundle::class => ['all' => true],
|
||||
loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true],
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
chill_main:
|
||||
available_languages: [ '%env(resolve:LOCALE)%', 'en', 'nl' ]
|
||||
available_languages: [ '%env(resolve:LOCALE)%', 'en' ]
|
||||
available_countries: ['BE', 'FR']
|
||||
top_banner:
|
||||
visible: false
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
chill_doc_store:
|
||||
use_driver: openstack
|
||||
use_driver: local_storage
|
||||
local_storage:
|
||||
storage_path: '%kernel.project_dir%/var/storage'
|
||||
openstack:
|
||||
|
||||
5
config/packages/chill_ticket.yaml
Normal file
5
config/packages/chill_ticket.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
chill_ticket:
|
||||
ticket:
|
||||
person_per_ticket: one # One of "one"; "many"
|
||||
response_time_exceeded_delay: PT12H
|
||||
|
||||
@@ -14,6 +14,7 @@ doctrine_migrations:
|
||||
'Chill\Migrations\Calendar': '@ChillCalendarBundle/migrations'
|
||||
'Chill\Migrations\Budget': '@ChillBudgetBundle/migrations'
|
||||
'Chill\Migrations\Report': '@ChillReportBundle/migrations'
|
||||
'Chill\Migrations\Ticket': '@ChillTicketBundle/migrations'
|
||||
all_or_nothing:
|
||||
true
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ framework:
|
||||
'Chill\MainBundle\Export\Messenger\ExportRequestGenerationMessage': priority
|
||||
'Chill\MainBundle\Export\Messenger\RemoveExportGenerationMessage': async
|
||||
'Chill\MainBundle\Notification\Email\NotificationEmailMessages\ScheduleDailyNotificationDigestMessage': async
|
||||
'Chill\TicketBundle\Messenger\PostTicketUpdateMessage': async
|
||||
# end of routes added by chill-bundles recipes
|
||||
# Route your messages to the transports
|
||||
# 'App\Message\YourMessage': async
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
# config/packages/translation.yaml
|
||||
framework:
|
||||
default_locale: '%env(resolve:LOCALE)%' # LOCALE=fr in .env
|
||||
default_locale: en
|
||||
translator:
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
fallbacks:
|
||||
- '%env(resolve:LOCALE)%' # fr
|
||||
- en
|
||||
providers:
|
||||
loco:
|
||||
dsn: '%env(LOCO_DSN)%'
|
||||
domains: [ 'messages' ]
|
||||
locales: [ 'fr', 'nl' ]
|
||||
|
||||
4
config/packages/translation_chill.yaml
Normal file
4
config/packages/translation_chill.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
framework:
|
||||
default_locale: '%env(resolve:LOCALE)%'
|
||||
translator:
|
||||
fallbacks: [ '%env(resolve:LOCALE)%' ]
|
||||
2
config/routes/chill_ticket.yaml
Normal file
2
config/routes/chill_ticket.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
chill_ticket_bundle:
|
||||
resource: '@ChillTicketBundle/config/routes.yaml'
|
||||
@@ -11,24 +11,94 @@
|
||||
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::
|
||||
|
||||
This part of the doc is not yet tested
|
||||
|
||||
TODO
|
||||
Create a new directory with Bundle class
|
||||
----------------------------------------
|
||||
|
||||
.. 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",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.. rubric:: Footnotes
|
||||
Register the bundle
|
||||
-------------------
|
||||
|
||||
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.
|
||||
|
||||
@@ -1,419 +0,0 @@
|
||||
============================================
|
||||
Directives for creating new translation keys
|
||||
============================================
|
||||
|
||||
These directives are meant to ensure better consistency across bundles, avoid duplication, and make keys more predictable.
|
||||
|
||||
|
||||
General Principles
|
||||
==================
|
||||
|
||||
1. **Use lowercase snake_case for all keys**
|
||||
|
||||
2. **Use dot-separated namespaces**
|
||||
The dot is used to reflect:
|
||||
- bundle
|
||||
- feature
|
||||
- sub-feature
|
||||
- key type
|
||||
|
||||
3. **Do not use spaces in keys**
|
||||
|
||||
4. **Avoid duplicating the same text in multiple places**
|
||||
When a translation is needed, try a search for the translation value first and see if it exists elsewhere
|
||||
|
||||
5. **If a key is used across multiple bundles, it must live in ChillMainBundle.**
|
||||
|
||||
6. **If a key is used across multiple bundles and is a generic term, it must be placed in the ``common`` namespace.**
|
||||
|
||||
|
||||
Key Structure
|
||||
=============
|
||||
|
||||
We use the following structure:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
<scope>.<feature>.<sub-feature>.<key-type>
|
||||
|
||||
Where:
|
||||
|
||||
* ``<>`` identifies the bundle or shared context
|
||||
* ``<feature>`` identifies the part of the module using the translation
|
||||
* ``<element>`` describes the text purpose
|
||||
* ``<subelement>`` for a multi-level element ( eg. activity.export.person.count.description)
|
||||
|
||||
Examples of scopes
|
||||
------------------
|
||||
|
||||
* ``activity`` — ChillActivityBundle
|
||||
* ``person`` — ChillPersonBundle
|
||||
* ``common`` — neutral shared translation values
|
||||
|
||||
|
||||
Naming Scopes
|
||||
=============
|
||||
|
||||
1. **Bundle-specific keys**
|
||||
|
||||
For most things inside a bundle:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.<feature>.<element>
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.form.save
|
||||
activity.list.title
|
||||
activity.entity.type
|
||||
activity.menu.activities
|
||||
activity.controller.success_created
|
||||
|
||||
2. **Shared UI elements (buttons, labels, generic text)**
|
||||
|
||||
These belong in the ``common`` namespace in ChillMainBundle:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
common.save
|
||||
common.delete
|
||||
common.edit
|
||||
common.filter
|
||||
common.duration_time
|
||||
|
||||
Translation workflow
|
||||
====================
|
||||
|
||||
Use the following workflow when deciding where a key belongs:
|
||||
|
||||
1. **Is this text used in more than one bundle?**
|
||||
→ Place in ``main`` or ``common``
|
||||
|
||||
2. **Is this text generic UI (button, label, pagination, yes/no)?**
|
||||
→ Place in ``common``
|
||||
|
||||
3. **Is this text specific to one bundle and one feature?**
|
||||
→ Place in ``<bundle>.feature.<element>``
|
||||
|
||||
4. **Is this text related to an entity or value object?**
|
||||
→ Place in ``<bundle>.entity.<entityname>.<field>``
|
||||
|
||||
5. **Is this text used in forms?**
|
||||
→ ``<bundle>.form.<field>`` or ``<bundle>.form.<action>``
|
||||
|
||||
6. **Is this text related to exports?**
|
||||
→ ``<bundle>.export.<feature>.<column>``
|
||||
|
||||
7. **Is it related to filtering, searching or parameters?**
|
||||
→ ``<bundle>.filter.<name>`` or
|
||||
→ ``<bundle>.filter.<feature>.<field>`` for nested filters
|
||||
|
||||
|
||||
Examples based on translations within ChillActivityBundle
|
||||
=========================================================
|
||||
|
||||
Below are concrete examples from ``ChillActivityBundle``,
|
||||
refactored according to the guidelines.
|
||||
|
||||
|
||||
General activity keys
|
||||
---------------------
|
||||
|
||||
Instead of scattered keys like::
|
||||
|
||||
Show the activity
|
||||
Edit the activity
|
||||
Activity
|
||||
Duration time
|
||||
...
|
||||
|
||||
We use:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.general.show
|
||||
activity.general.edit
|
||||
activity.general.title
|
||||
activity.general.duration
|
||||
activity.general.travel_time
|
||||
activity.general.attendee
|
||||
activity.general.remark
|
||||
activity.general.no_comments
|
||||
|
||||
|
||||
Forms
|
||||
-----
|
||||
|
||||
Instead of keys like::
|
||||
|
||||
Activity creation
|
||||
Save activity
|
||||
Reset form
|
||||
Choose a type
|
||||
|
||||
Use:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.form.title_create
|
||||
activity.form.save
|
||||
activity.form.reset
|
||||
activity.form.choose_type
|
||||
activity.form.choose_duration
|
||||
|
||||
Long lists (like durations) should be grouped:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.form.duration.5min
|
||||
activity.form.duration.10min
|
||||
activity.form.duration.15min
|
||||
activity.form.duration.1h
|
||||
activity.form.duration.1h30
|
||||
activity.form.duration.2h
|
||||
...
|
||||
|
||||
Entities
|
||||
--------
|
||||
|
||||
Entity fields should follow:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.entity.activity.date
|
||||
activity.entity.activity.comment
|
||||
activity.entity.activity.deleted
|
||||
activity.entity.location.name
|
||||
activity.entity.location.type
|
||||
|
||||
|
||||
Controller messages
|
||||
-------------------
|
||||
|
||||
Instead of strings as keys::
|
||||
|
||||
'Success : activity created!'
|
||||
'The form is not valid. The activity has not been created !'
|
||||
|
||||
Use:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.controller.success_created
|
||||
activity.controller.error_invalid_create
|
||||
activity.controller.success_updated
|
||||
activity.controller.error_invalid_update
|
||||
|
||||
|
||||
Roles
|
||||
-----
|
||||
|
||||
Access control keys should be:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.role.create
|
||||
activity.role.update
|
||||
activity.role.see
|
||||
activity.role.see_details
|
||||
activity.role.delete
|
||||
activity.role.stats
|
||||
activity.role.list
|
||||
|
||||
|
||||
Admin
|
||||
-----
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.admin.configuration
|
||||
activity.admin.types
|
||||
activity.admin.reasons
|
||||
activity.admin.reason_category
|
||||
activity.admin.presence
|
||||
|
||||
|
||||
CRUD
|
||||
----
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.crud.type.title_new
|
||||
activity.crud.type.title_edit
|
||||
activity.crud.presence.title_new
|
||||
|
||||
|
||||
Activity Reason
|
||||
---------------
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.reason.list
|
||||
activity.reason.create
|
||||
activity.reason.active
|
||||
activity.reason.category
|
||||
activity.reason.entity_title
|
||||
|
||||
|
||||
Exports
|
||||
-------
|
||||
|
||||
Group them logically:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.export.person.count.title
|
||||
activity.export.person.count.description
|
||||
activity.export.person.count.header
|
||||
|
||||
activity.export.period.sum_duration.title
|
||||
activity.export.period.sum_duration.description
|
||||
activity.export.period.sum_duration.header
|
||||
|
||||
|
||||
Filters
|
||||
-------
|
||||
|
||||
Use hierarchical filters:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.filter.by_reason
|
||||
activity.filter.by_type
|
||||
activity.filter.by_date
|
||||
activity.filter.by_location
|
||||
activity.filter.by_sent_received
|
||||
activity.filter.by_user
|
||||
|
||||
|
||||
Aggregators
|
||||
-----------
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.aggregator.reason.by_category
|
||||
activity.aggregator.reason.level
|
||||
activity.aggregator.user.by_scope
|
||||
activity.aggregator.user.by_job
|
||||
|
||||
|
||||
Global/Shared Keys
|
||||
==================
|
||||
|
||||
Keys like the following **must not be redeclared** in each bundle:
|
||||
|
||||
- First name
|
||||
- Last name
|
||||
- Username
|
||||
- ID
|
||||
- Type
|
||||
- Duration
|
||||
- Comment
|
||||
- Date
|
||||
- Location
|
||||
- Present / Not present
|
||||
- Add / Edit / Delete / Save / Update
|
||||
|
||||
These belong in ``common`` or ``main``:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
common.firstname
|
||||
common.lastname
|
||||
common.username
|
||||
common.id
|
||||
common.type
|
||||
common.comment
|
||||
common.date
|
||||
common.location
|
||||
common.present
|
||||
common.absent
|
||||
common.add
|
||||
common.edit
|
||||
common.delete
|
||||
common.save
|
||||
common.update
|
||||
|
||||
|
||||
Naming directives summary
|
||||
==========================
|
||||
|
||||
* **snake_case**
|
||||
* **namespaced with dots**
|
||||
* **bundle prefix for bundle-specific concepts**
|
||||
* **common or main for shared concepts**
|
||||
* **avoid free-floating keys (without namespace)**
|
||||
* **reuse common keys wherever possible**
|
||||
|
||||
|
||||
Migration Strategy (Optional)
|
||||
=============================
|
||||
|
||||
To apply this structure progressively:
|
||||
|
||||
1. New keys must follow these guidelines.
|
||||
2. Existing keys may remain as-is until refactored.
|
||||
3. When refactoring:
|
||||
- Move cross-bundle keys to ChillMainBundle and possible `common` namespace.
|
||||
- Replace duplicated keys with shared ones.
|
||||
|
||||
===========================================
|
||||
Avoiding duplicate translations
|
||||
===========================================
|
||||
|
||||
1. Use Shared Namespaces
|
||||
========================
|
||||
|
||||
Two namespaces must be used for shared translations:
|
||||
|
||||
* ``common.*`` — generic UI concepts (save, delete, date, name, etc.)
|
||||
|
||||
If a translation may be reused in multiple bundles, it must be placed
|
||||
in the ``common`` namespace or in ChillMainBundle.
|
||||
|
||||
2. Bundle-Specific Keys
|
||||
=======================
|
||||
|
||||
Keys belonging only to one bundle or one feature are namespaced inside that
|
||||
bundle:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
activity.<feature>.<element>
|
||||
person.<feature>.<element>
|
||||
|
||||
3. Search Before Creating
|
||||
=========================
|
||||
|
||||
Before adding a new translation key, developers must:
|
||||
|
||||
1. For common translations like: "enregistrer/opslaan" look in the `common` namespace.
|
||||
3. Search in Loco or translations for existing values.
|
||||
|
||||
If a suitable key exists, reuse it.
|
||||
|
||||
4. Only Create a New Key When Necessary
|
||||
=======================================
|
||||
|
||||
Create a new key only when the text is:
|
||||
|
||||
* specific to the bundle
|
||||
* specific to the feature
|
||||
* not reusable elsewhere
|
||||
|
||||
6. Progressive Cleanup
|
||||
======================
|
||||
|
||||
Old duplicates may remain temporarily. When updating code in an area, clean
|
||||
duplicate values by moving them into ``common`` or ``main``.
|
||||
|
||||
General workflow
|
||||
================
|
||||
|
||||
* **Reuse shared keys** within ``common`` namespace.
|
||||
* **Search before creating** new keys.
|
||||
* **Namespace bundle-specific keys** under their bundle.
|
||||
* **Refactor progressively** when touching old code.
|
||||
@@ -1,148 +0,0 @@
|
||||
=======================================================================
|
||||
Managing translations within CHILL using Loco as a translation provider
|
||||
=======================================================================
|
||||
|
||||
Within CHILL we make use of Symfony's translation component together with *Loco* as an external
|
||||
translation provider. Using this setup centralise translations in a single online
|
||||
location (Loco), while still allowing developers to create and update
|
||||
translation keys locally in the project (YAML files).
|
||||
|
||||
Workflow
|
||||
========
|
||||
|
||||
We use the following workflow:
|
||||
|
||||
* Developers create translation keys in YAML files inside each bundle.
|
||||
* Keys are written in **English**.
|
||||
* Application UI defaults to **French**, with **Dutch** as an additional locale (other languages can be added in the future).
|
||||
* Loco acts as the central translation memory and synchronisation source.
|
||||
* Loco Symfony package was installed so that built-in translation commands can be used to push/pull content
|
||||
between Loco and the local project.
|
||||
|
||||
|
||||
Translation directory structure
|
||||
===============================
|
||||
|
||||
Each bundle contains its own ``translations`` directory, for example::
|
||||
|
||||
chill-bundles/
|
||||
ChillCoreBundle/
|
||||
translations/
|
||||
messages.fr.yml
|
||||
messages.nl.yml
|
||||
ChillPersonBundle/
|
||||
translations/
|
||||
messages.fr.yml
|
||||
messages.nl.yml
|
||||
...
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
The translation configuration is defined in
|
||||
``config/packages/translation.yaml``::
|
||||
|
||||
framework:
|
||||
default_locale: '%env(resolve:LOCALE)%'
|
||||
translator:
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
fallbacks:
|
||||
- '%env(resolve:LOCALE)%'
|
||||
- 'en'
|
||||
providers:
|
||||
loco:
|
||||
dsn: '%env(LOCO_DSN)%'
|
||||
domains: [ 'messages' ]
|
||||
locales: [ 'fr', 'nl' ]
|
||||
|
||||
Note:
|
||||
|
||||
* ``en`` is the **source locale** in Loco.
|
||||
* ``fr`` and ``nl`` are the **application locales**.
|
||||
* ``domains: [messages]`` means only ``messages.*.yml`` files are pushed.
|
||||
|
||||
|
||||
Environment variables
|
||||
---------------------
|
||||
|
||||
In ``.env``::
|
||||
|
||||
LOCALE=fr
|
||||
|
||||
In ``.env.local``::
|
||||
|
||||
LOCO_DSN="loco://API_KEY@default"
|
||||
|
||||
Replace ``API_KEY`` with the key provided by Loco.
|
||||
|
||||
|
||||
Working with Loco
|
||||
=================
|
||||
|
||||
Loco shows all translation keys under three languages:
|
||||
|
||||
* **English (source)** — keys are listed but remain “untranslated”
|
||||
* **French** — translated strings for French users
|
||||
* **Dutch** — translated strings for Dutch users
|
||||
|
||||
Note: Don't add translations directly in the English column.
|
||||
This column simply represents the *key*.
|
||||
|
||||
|
||||
Pushing translations to Loco
|
||||
============================
|
||||
|
||||
You can push local translations to Loco using:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
symfony console translation:push loco --locales=fr --locales=nl --force
|
||||
|
||||
This will:
|
||||
|
||||
* Upload all French and Dutch translation values from ``*.fr.yml`` and
|
||||
``*.nl.yml`` files
|
||||
* Ensures Loco stays in sync with local YAML files
|
||||
* Creates any missing keys in Loco
|
||||
|
||||
|
||||
Pulling translations from Loco
|
||||
==============================
|
||||
|
||||
When translators update strings in Loco, developers can fetch updates with:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
symfony console translation:pull loco --locales=fr --locales=nl --force
|
||||
|
||||
This will:
|
||||
|
||||
* Download the latest French and Dutch translations
|
||||
* Overwrite the local YAML files with Loco’s content
|
||||
* Keep everything consistent across the team
|
||||
|
||||
|
||||
Adding new translation keys (Developer workflow)
|
||||
================================================
|
||||
|
||||
1. Add a new key directly in the appropriate YAML file, for example::
|
||||
|
||||
chill-bundles/ChillPersonBundle/translations/messages.fr.yml
|
||||
|
||||
Example key::
|
||||
|
||||
person.form.submit: "Envoyer"
|
||||
|
||||
2. Add Dutch translation as well if you can (otherwise leave empty to be translated within Loco later)::
|
||||
|
||||
person.form.submit: "Verzenden"
|
||||
|
||||
3. Run a push to send the new key to Loco:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
symfony console translation:push loco --locales=fr --locales=nl --force
|
||||
|
||||
4. The key will now appear in Loco for translation management.
|
||||
|
||||
Note: English appears as “untranslated”, because it is merely the source language
|
||||
@@ -41,6 +41,7 @@
|
||||
"typescript": "^5.6.3",
|
||||
"typescript-eslint": "^8.13.0",
|
||||
"vue-loader": "^17.0.0",
|
||||
"vue-tsc": "^3.1.3",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack-cli": "^5.0.1"
|
||||
},
|
||||
@@ -80,12 +81,12 @@
|
||||
"dev": "encore dev",
|
||||
"watch": "encore dev --watch",
|
||||
"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> 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 src/Bundle/ChillTicketBundle/chill.api.specs.yaml> templates/api/specs.yaml",
|
||||
"specs-validate": "swagger-cli validate templates/api/specs.yaml",
|
||||
"specs-create-dir": "mkdir -p templates/api",
|
||||
"specs": "yarn run specs-create-dir && yarn run specs-build && yarn run specs-validate",
|
||||
"version": "node --version",
|
||||
"eslint": "npx eslint-baseline --fix \"src/**/*.{js,ts,vue}\""
|
||||
"eslint": "eslint-baseline --fix \"src/**/*.{js,ts,vue}\""
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
|
||||
@@ -58,6 +58,10 @@
|
||||
<!-- temporarily removed, the time to find a fix -->
|
||||
<exclude>src/Bundle/ChillPersonBundle/Tests/Controller/PersonDuplicateControllerViewTest.php</exclude>
|
||||
</testsuite>
|
||||
|
||||
<testsuite name="TicketBundle">
|
||||
<directory suffix="Test.php">src/Bundle/ChillTicketBundle/tests/</directory>
|
||||
</testsuite>
|
||||
<!--
|
||||
<testsuite name="ReportBundle">
|
||||
<directory suffix="Test.php">src/Bundle/ChillReportBundle/Tests/</directory>
|
||||
|
||||
8
resources/ticket_motives_import/README.md
Normal file
8
resources/ticket_motives_import/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
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.
|
||||
|
||||
136
resources/ticket_motives_import/motives.yaml
Normal file
136
resources/ticket_motives_import/motives.yaml
Normal file
@@ -0,0 +1,136 @@
|
||||
- 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
|
||||
6
resources/translation_override/README.md
Normal file
6
resources/translation_override/README.md
Normal file
@@ -0,0 +1,6 @@
|
||||
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.
|
||||
|
||||
8
resources/translation_override/overrides.yaml
Normal file
8
resources/translation_override/overrides.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
- {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"}
|
||||
@@ -382,7 +382,6 @@ final class ActivityController extends AbstractController
|
||||
|
||||
$entity = new Activity();
|
||||
$entity->setUser($this->security->getUser());
|
||||
$entity->addUser($this->security->getUser());
|
||||
|
||||
if ($person instanceof Person) {
|
||||
$entity->setPerson($person);
|
||||
|
||||
@@ -88,8 +88,8 @@ class ActivityType extends AbstractType
|
||||
|
||||
if (null !== $options['data']->getPerson()) {
|
||||
$builder->add('scope', ScopePickerType::class, [
|
||||
'role' => ActivityVoter::CREATE === (string) $options['role'] ? ActivityVoter::CREATE_PERSON : (string) $options['role'],
|
||||
'center' => $options['center'],
|
||||
'role' => ActivityVoter::CREATE === (string) $options['role'] ? ActivityVoter::CREATE_PERSON : (string) $options['role'],
|
||||
'required' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -10,10 +10,7 @@
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
getContext === 'accompanyingCourse' &&
|
||||
suggestedEntities.length > 0
|
||||
"
|
||||
v-if="getContext === 'accompanyingCourse' && suggestedEntities.length > 0"
|
||||
>
|
||||
<ul class="list-suggest add-items inline">
|
||||
<li
|
||||
|
||||
@@ -39,17 +39,11 @@
|
||||
<option selected disabled value="">
|
||||
{{ trans(ACTIVITY_CHOOSE_LOCATION_TYPE) }}
|
||||
</option>
|
||||
<option
|
||||
v-for="t in locationTypes"
|
||||
:value="t"
|
||||
:key="t.id"
|
||||
>
|
||||
<option v-for="t in locationTypes" :value="t" :key="t.id">
|
||||
{{ localizeString(t.title) }}
|
||||
</option>
|
||||
</select>
|
||||
<label>{{
|
||||
trans(ACTIVITY_LOCATION_FIELDS_TYPE)
|
||||
}}</label>
|
||||
<label>{{ trans(ACTIVITY_LOCATION_FIELDS_TYPE) }}</label>
|
||||
</div>
|
||||
|
||||
<div class="form-floating mb-3">
|
||||
@@ -108,10 +102,7 @@
|
||||
</form>
|
||||
</template>
|
||||
<template #footer>
|
||||
<button
|
||||
class="btn btn-save"
|
||||
@click.prevent="saveNewLocation"
|
||||
>
|
||||
<button class="btn btn-save" @click.prevent="saveNewLocation">
|
||||
{{ trans(SAVE) }}
|
||||
</button>
|
||||
</template>
|
||||
@@ -244,8 +235,7 @@ export default {
|
||||
},
|
||||
hasPhonenumber1() {
|
||||
return (
|
||||
this.selected.phonenumber1 !== null &&
|
||||
this.selected.phonenumber1 !== ""
|
||||
this.selected.phonenumber1 !== null && this.selected.phonenumber1 !== ""
|
||||
);
|
||||
},
|
||||
showAddAddress() {
|
||||
|
||||
@@ -43,23 +43,11 @@ export default {
|
||||
span.badge {
|
||||
@include badge_social($social-action-color);
|
||||
font-size: 95%;
|
||||
white-space: normal;
|
||||
word-wrap: break-word;
|
||||
word-break: break-word;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
margin-bottom: 5px;
|
||||
margin-right: 1em;
|
||||
text-align: left;
|
||||
line-height: 1.2em;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
left: 11px;
|
||||
top: 0;
|
||||
margin: 0 0.3em 0 -0.75em;
|
||||
}
|
||||
position: relative;
|
||||
padding-left: 1.5em;
|
||||
max-width: 100%; /* Adjust as needed */
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -10,9 +10,7 @@
|
||||
:value="issue"
|
||||
/>
|
||||
<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">{{ issue.text }}</span>
|
||||
</label>
|
||||
</div>
|
||||
</span>
|
||||
@@ -43,22 +41,7 @@ export default {
|
||||
span.badge {
|
||||
@include badge_social($social-issue-color);
|
||||
font-size: 95%;
|
||||
white-space: normal;
|
||||
word-wrap: break-word;
|
||||
word-break: break-word;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
margin-bottom: 5px;
|
||||
margin-right: 1em;
|
||||
text-align: left;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
left: 11px;
|
||||
top: 0;
|
||||
margin: 0 0.3em 0 -0.75em;
|
||||
}
|
||||
position: relative;
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -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\Migrations\Activity;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Migration fixing the automatic association of users to activities (exchanges).
|
||||
*
|
||||
* Originally, the user who created an exchange was not automatically associated
|
||||
* to it (the "TMS" column), which led to incomplete data and biased statistics.
|
||||
*
|
||||
* This migration:
|
||||
* - retroactively associates the creator of each exchange to the corresponding
|
||||
* activity;
|
||||
* - flags these backfilled associations with a temporary column so it is clear
|
||||
* they were added by this data correction and can be safely cleaned up later.
|
||||
*/
|
||||
final class Version20251118124241 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Insert the creator of activity into the activity_user table';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
$this->addSql('ALTER TABLE activity_user ADD COLUMN by_migration BOOL DEFAULT FALSE');
|
||||
$this->addSql("COMMENT ON COLUMN activity_user.by_migration IS 'For backup purpose - can be safely deleted after a while. See migration \\Chill\\Migrations\\Activity\\Version20251118124241'");
|
||||
|
||||
$this->addSql('INSERT INTO activity_user (activity_id, user_id, by_migration)
|
||||
SELECT id, user_id, true FROM activity
|
||||
ON CONFLICT DO NOTHING');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
$this->addSql('ALTER TABLE activity_user DROP COLUMN by_migration');
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
export:
|
||||
filter:
|
||||
activity:
|
||||
course_having_activity_between_date:
|
||||
Only course having an activity between from and to: Alleen trajecten met een activiteit tussen {from, date, short} en {to, date, short}
|
||||
|
||||
acp_by_activity_type:
|
||||
'acp_containing_at_least_one_activitytypes': >-
|
||||
Gefilterde trajecten: alleen die welke ten minste één activiteit bevatten van een van de volgende types: {activitytypes}
|
||||
{has_date_after, select, 1 {, na {date_after, date}} other {}}
|
||||
{has_date_before, select, 1 {, voor {date_before, date}} other {}}
|
||||
describe_action_with_no_subject: >-
|
||||
Gefilterd op persoon die een activiteit had tussen {date_from, date} en {date_to, date}
|
||||
describe_action_with_subject: >-
|
||||
Gefilterd op persoon die een activiteit had tussen {date_from, date} en {date_to, date}, en een van deze gekozen onderwerpen: {reasons}
|
||||
|
||||
activity:
|
||||
title: Activiteit van {date, date, long} - {type}
|
||||
@@ -1,500 +1,234 @@
|
||||
#general
|
||||
Show the activity: Uitwisseling bekijken
|
||||
Edit the activity: Uitwisseling bewerken
|
||||
Activity: Uitwisseling
|
||||
Show the activity: Toon activiteit
|
||||
Edit the activity: Wijzig activiteit
|
||||
Activity: Activiteit
|
||||
Duration time: Duur
|
||||
Duration Time: Duur
|
||||
durationTime: duur
|
||||
Travel time: Reisduur
|
||||
Attendee: Aanwezigheid van de gebruiker
|
||||
attendee: aanwezigheid van de gebruiker
|
||||
list_reasons: lijst van onderwerpen
|
||||
user_username: naam van de gebruiker
|
||||
circle_name: naam van de dienst
|
||||
Travel time: Duur van verplaatsing
|
||||
Attendee: Aanwezigheden
|
||||
attendee: aanwezigheden
|
||||
list_reasons: Onderwerpen
|
||||
user_username: gebruikersnaam
|
||||
circle_name: naam kring
|
||||
Remark: Opmerking
|
||||
No comments: Geen opmerking
|
||||
Add a new activity: Nieuwe uitwisseling toevoegen
|
||||
Activity list: Lijst van uitwisselingen
|
||||
No comments: Geen opmerkingen
|
||||
Add a new activity: Voeg een nieuwe activiteit toe
|
||||
Activity list: Lijst van activiteiten
|
||||
present: aanwezig
|
||||
not present: afwezig
|
||||
Delete: Verwijderen
|
||||
Update: Bijwerken
|
||||
Update activity: Uitwisseling bewerken
|
||||
Scope: Dienst
|
||||
Activity data: Gegevens van de uitwisseling
|
||||
Activity location: Locatie van de uitwisseling
|
||||
Update activity: Activieit bijwerken
|
||||
Scope: Werkingsgebied
|
||||
Activity data: Gegevens activiteit
|
||||
Activity location: Locatie activiteit
|
||||
No reason associated: Geen onderwerp
|
||||
No social issues associated: Geen sociale problematiek
|
||||
No social actions associated: Geen begeleidingsactie
|
||||
There isn't any activities.: Geen uitwisseling geregistreerd.
|
||||
type_name: type van de uitwisseling
|
||||
No social issues associated: Geen sociaal vraagstuk
|
||||
No social actions associated: Geen maatschappelijke actie
|
||||
There isn't any activities.: Er zijn geen activiteiten
|
||||
type_name: Soort activiteit
|
||||
person_firstname: voornaam
|
||||
person_lastname: achternaam
|
||||
person_id: identificatie van de gebruiker
|
||||
Type: Type
|
||||
person_lastname: familienaam
|
||||
person_id: Identificatienummer persoon
|
||||
Type: Soort
|
||||
Invisible: Onzichtbaar
|
||||
Optional: Optioneel
|
||||
Required: Verplicht
|
||||
Persons: Gebruikers
|
||||
Persons: Personen
|
||||
Users: Gebruikers
|
||||
Emergency: Urgent
|
||||
Emergency: Dringend
|
||||
Sent received: Inkomend / Uitgaand
|
||||
Sent: Verzenden
|
||||
Received: Ontvangen
|
||||
by: 'Door '
|
||||
location: Plaats
|
||||
Reasons: Onderwerpen
|
||||
Private comment: Privé opmerking
|
||||
sent: Verzonden
|
||||
received: Ontvangen
|
||||
|
||||
|
||||
#forms
|
||||
Activity creation: Nieuwe uitwisseling
|
||||
Create: Aanmaken
|
||||
Back to the list: Terug naar de lijst
|
||||
Save activity: Uitwisseling opslaan
|
||||
Reset form: Formulier resetten
|
||||
Choose the duration: Duur kiezen
|
||||
Choose a type: Type kiezen
|
||||
5 minutes: 5 minuten
|
||||
10 minutes: 10 minuten
|
||||
15 minutes: 15 minuten
|
||||
20 minutes: 20 minuten
|
||||
25 minutes: 25 minuten
|
||||
30 minutes: 30 minuten
|
||||
45 minutes: 45 minuten
|
||||
1 hour: 1 uur
|
||||
1 hour 15: 1 uur 15
|
||||
1 hour 30: 1 uur 30
|
||||
1 hour 45: 1 uur 45
|
||||
2 hours: 2 uur
|
||||
2 hours 15: 2 uur 15
|
||||
2 hours 30: 2 uur 30
|
||||
2 hours 45: 2 uur 45
|
||||
3 hours: 3 uur
|
||||
3 hours 30: 3 uur 30
|
||||
4 hours: 4 uur
|
||||
4 hours 30: 4 uur 30
|
||||
5 hours: 5 uur
|
||||
5 hours 30: 5 uur 30
|
||||
6 hours: 6 uur
|
||||
6 hours 30: 6 uur 30
|
||||
7 hours: 7 uur
|
||||
7 hours 30: 7 uur 30
|
||||
8 hours: 8 uur
|
||||
8 hours 30: 8 uur 30
|
||||
9 hours: 9 uur
|
||||
9 hours 30: 9 uur 30
|
||||
10 hours: 10 uur
|
||||
11 hours: 11 uur
|
||||
12 hours: 12 uur
|
||||
Concerned groups: Betrokken partijen bij de uitwisseling
|
||||
Persons in accompanying course: Gebruikers van het traject
|
||||
Third persons: Niet-prof. derden
|
||||
Others persons: Gebruikers
|
||||
Third parties: Professionele derden
|
||||
Activity creation: Nouvel échange
|
||||
Create: Créer
|
||||
Back to the list: Retour à la liste
|
||||
Save activity: Sauver l'échange
|
||||
Reset form: Remise à zéro du formulaire
|
||||
Choose the duration: Choisir la durée
|
||||
Choose a type: Choisir un type
|
||||
5 minutes: 5 minutes
|
||||
10 minutes: 10 minutes
|
||||
15 minutes: 15 minutes
|
||||
20 minutes: 20 minutes
|
||||
25 minutes: 25 minutes
|
||||
30 minutes: 30 minutes
|
||||
45 minutes: 45 minutes
|
||||
1 hour: 1 heure
|
||||
1 hour 15: 1 heure 15
|
||||
1 hour 30: 1 heure 30
|
||||
1 hour 45: 1 heure 45
|
||||
2 hours: 2 heures
|
||||
Concerned groups: Parties concernées
|
||||
Persons in accompanying course: Usagers du parcours
|
||||
Third persons: Tiers non-pro.
|
||||
Others persons: Usagers
|
||||
Third parties: Tiers professionnels
|
||||
Users concerned: T(M)S
|
||||
|
||||
activity:
|
||||
date: Datum van de uitwisseling
|
||||
Insert a document: Document invoegen
|
||||
Remove a document: Document verwijderen
|
||||
comment: Opmerking
|
||||
deleted: Uitwisseling verwijderd
|
||||
|
||||
errors: Het formulier bevat fouten
|
||||
social_issues: Sociale problematieken
|
||||
choose_other_social_issue: Andere sociale problematiek toevoegen...
|
||||
social_actions: Begeleidingsacties
|
||||
select_first_a_social_issue: Selecteer eerst een sociale problematiek
|
||||
social_action_list_empty: Geen sociale actie beschikbaar
|
||||
add_persons: Betrokken personen toevoegen
|
||||
bloc_persons: Gebruikers
|
||||
bloc_persons_associated: Gebruikers van het traject
|
||||
bloc_persons_not_associated: Niet-prof. derden
|
||||
bloc_thirdparty: Professionele derden
|
||||
bloc_users: T(M)S
|
||||
location: Locatie
|
||||
choose_location: Kies een locatie
|
||||
choose_location_type: Kies een type locatie
|
||||
create_new_location: Nieuwe locatie aanmaken
|
||||
location_fields:
|
||||
name: Naam
|
||||
type: Type
|
||||
phonenumber1: Telefoon
|
||||
phonenumber2: Andere telefoon
|
||||
email: E-mailadres
|
||||
create_address: Adres aanmaken
|
||||
edit_address: Adres bewerken
|
||||
|
||||
No documents: Geen document
|
||||
|
||||
# activity filter in list page
|
||||
activity_filter:
|
||||
My activities: Mijn uitwisselingen (waar ik aan deelneem)
|
||||
Types: Op type uitwisseling
|
||||
Jobs: Op betrokken beroep
|
||||
Insert a document: Insérer un document
|
||||
Remove a document: Supprimer le document
|
||||
comment: Commentaire
|
||||
No documents: Aucun document
|
||||
|
||||
#timeline
|
||||
'%user% has done an %activity_type%': '%user% heeft een uitwisseling van type "%activity_type%" uitgevoerd'
|
||||
'%user% has done an %activity_type%': '%user% a effectué un échange de type "%activity_type%"'
|
||||
|
||||
#controller
|
||||
'Success : activity created!': De uitwisseling is aangemaakt.
|
||||
'The form is not valid. The activity has not been created !': Het formulier is ongeldig. De uitwisseling is niet aangemaakt.
|
||||
'Success : activity updated!': De uitwisseling is bijgewerkt.
|
||||
'The form is not valid. The activity has not been updated !': Het formulier is ongeldig. De uitwisseling is niet bijgewerkt.
|
||||
'Success : activity created!': L'échange a été créé.
|
||||
'The form is not valid. The activity has not been created !': Le formulaire est invalide. L'échange n'a pas été créé.
|
||||
'Success : activity updated!': L'échange a été mis à jour.
|
||||
'The form is not valid. The activity has not been updated !': Le formulaire est invalide. L'échange n'a pas été mis à jour.
|
||||
|
||||
# ROLES
|
||||
CHILL_ACTIVITY_CREATE: Uitwisseling aanmaken
|
||||
CHILL_ACTIVITY_UPDATE: Uitwisseling bewerken
|
||||
CHILL_ACTIVITY_SEE: Uitwisseling bekijken
|
||||
CHILL_ACTIVITY_SEE_DETAILS: Detail van uitwisselingen bekijken
|
||||
CHILL_ACTIVITY_DELETE: Uitwisseling verwijderen
|
||||
CHILL_ACTIVITY_STATS: Statistieken van uitwisselingen
|
||||
CHILL_ACTIVITY_LIST: Lijst van uitwisselingen
|
||||
CHILL_ACTIVITY_CREATE_PERSON: Uitwisseling aanmaken gekoppeld aan een gebruiker
|
||||
CHILL_ACTIVITY_CREATE_ACCOMPANYING_COURSE: Uitwisseling aanmaken gekoppeld aan een traject
|
||||
CHILL_ACTIVITY_FULL: Details bekijken, aanmaken, verwijderen en bijwerken van een uitwisseling
|
||||
CHILL_ACTIVITY_CREATE: Créer un échange
|
||||
CHILL_ACTIVITY_UPDATE: Modifier un échange
|
||||
CHILL_ACTIVITY_SEE: Voir un échange
|
||||
CHILL_ACTIVITY_SEE_DETAILS: Voir le détail des échanges
|
||||
CHILL_ACTIVITY_DELETE: Supprimer un échange
|
||||
CHILL_ACTIVITY_STATS: Statistique des échanges
|
||||
CHILL_ACTIVITY_LIST: Liste des échanges
|
||||
|
||||
# admin
|
||||
Activities: Uitwisselingen
|
||||
Activity configuration: Configuratie van uitwisselingen
|
||||
Activity configuration menu: Configuratie van uitwisselingen
|
||||
Activity types: Types uitwisseling
|
||||
Activity type configuration: Configuratie van categorieën van uitwisselingen
|
||||
Activity Reasons: Onderwerpen van een uitwisseling
|
||||
Activity Reasons Category: Categorieën van onderwerpen van uitwisselingen
|
||||
Activity Types Categories: Categorieën van types uitwisseling
|
||||
Activity Presences: Aanwezigheden bij uitwisselingen
|
||||
Associated activity reason category is inactive: De gekoppelde onderwerpscategorie is inactief
|
||||
Activities: Échanges
|
||||
Activity configuration: Configuration des échanges
|
||||
Activity configuration menu: Configuration des échanges
|
||||
Activity types: Types d'échange
|
||||
Activity type configuration: Configuration des categories d'échanges
|
||||
Activity Reasons: Sujets d'un échange
|
||||
Activity Reasons Category: Catégories de sujet d'échanges
|
||||
Activity Types Categories: Catégories des types d'échanges
|
||||
Activity Presences: Presences des échanges
|
||||
|
||||
|
||||
# Crud
|
||||
crud:
|
||||
activity_type:
|
||||
title_new: Nieuw type uitwisseling
|
||||
title_edit: Type uitwisseling bewerken
|
||||
title_new: Nouveau type d'échange
|
||||
title_edit: Edition d'un type d'échange
|
||||
activity_type_category:
|
||||
title_new: Nieuwe categorie van type uitwisseling
|
||||
title_edit: Categorie van type uitwisseling bewerken
|
||||
activity_presence:
|
||||
title_new: Nieuwe aanwezigheid bij uitwisselingen
|
||||
title_edit: Aanwezigheid bij uitwisselingen bewerken
|
||||
title_new: Nouvelle catégorie de type d'échange
|
||||
title_edit: Edition d'une catégorie de type d'échange
|
||||
|
||||
# activity reason admin
|
||||
ActivityReason list: Lijst van onderwerpen
|
||||
Create a new activity reason: Nieuw onderwerp aanmaken
|
||||
Active: Actief
|
||||
Category: Categorie
|
||||
ActivityReason creation: Nieuw onderwerp
|
||||
ActivityReason edit: Onderwerp bewerken
|
||||
ActivityReason: Onderwerp van uitwisseling
|
||||
The entity is inactive and won't be proposed: Het onderwerp is inactief en zal niet worden voorgesteld
|
||||
The entity is active and will be proposed: Het onderwerp is actief en zal worden voorgesteld
|
||||
ActivityReason list: Liste des sujets
|
||||
Create a new activity reason: Créer un nouveau sujet
|
||||
Active: Actif
|
||||
Category: Catégorie
|
||||
ActivityReason creation: Nouveau sujet
|
||||
ActivityReason edit: Modification d'un sujet
|
||||
ActivityReason: Sujet d'échange
|
||||
The entity is inactive and won't be proposed: Le sujet est inactif et ne sera pas proposé
|
||||
The entity is active and will be proposed: Le sujet est actif et sera proposé
|
||||
|
||||
#activity reason category admin
|
||||
ActivityReasonCategory list: Categorieën van onderwerpen
|
||||
Create a new activity category reason: Nieuwe categorie aanmaken
|
||||
ActivityReasonCategory creation: Nieuwe categorie van onderwerp
|
||||
ActivityReasonCategory edit: Categorie van onderwerp bewerken
|
||||
ActivityReasonCategory: Categorie van onderwerp van uitwisseling
|
||||
ActivityReasonCategory is active and will be proposed: De categorie is actief en zal worden voorgesteld
|
||||
ActivityReasonCategory is inactive and won't be proposed: De categorie is inactief en zal niet worden voorgesteld
|
||||
|
||||
#activity presence admin
|
||||
ActivityPresence list: Lijst van aanwezigheden bij uitwisselingen
|
||||
Create a new activity presence: Nieuwe "Aanwezigheid bij uitwisselingen" aanmaken
|
||||
ActivityReasonCategory list: Catégories de sujets
|
||||
Create a new activity category reason: Créer une nouvelle catégorie
|
||||
ActivityReasonCategory creation: Nouvelle catégorie de sujet
|
||||
ActivityReasonCategory edit: Modification d'une catégorie de sujet
|
||||
ActivityReasonCategory: Catégorie de sujet d'échange
|
||||
ActivityReasonCategory is active and will be proposed: La catégorie est active et sera proposée
|
||||
ActivityReasonCategory is inactive and won't be proposed: La catégorie est inactive et ne sera pas proposée
|
||||
|
||||
# activity type type admin
|
||||
ActivityType list: Types uitwisselingen
|
||||
Create a new activity type: Nieuw type uitwisseling aanmaken
|
||||
Persons visible: Zichtbaarheid van het veld Gebruikers
|
||||
Persons label: Label van het veld Gebruikers
|
||||
User visible: Zichtbaarheid van het veld Gebruiker
|
||||
User label: Label van het veld Gebruiker
|
||||
Date visible: Zichtbaarheid van het veld Datum
|
||||
Date label: Label van het veld Datum
|
||||
Location visible: Zichtbaarheid van het veld Plaats
|
||||
Location label: Label van het veld Plaats
|
||||
Third parties visible: Zichtbaarheid van het veld Derden
|
||||
Third parties label: Label van het veld Derden
|
||||
Duration time visible: Zichtbaarheid van het veld Duur
|
||||
Duration time label: Label van het veld Duur
|
||||
Travel time visible: Zichtbaarheid van het veld Reisduur
|
||||
Travel time label: Label van het veld Reisduur
|
||||
Attendee visible: Zichtbaarheid van het veld Aanwezigheid van de gebruiker
|
||||
Attendee label: Label van het veld Aanwezigheid van de gebruiker
|
||||
Reasons visible: Zichtbaarheid van het veld Onderwerp
|
||||
Reasons label: Label van het veld Onderwerp
|
||||
Comment visible: Zichtbaarheid van het veld Opmerking
|
||||
Comment label: Label van het veld Opmerking
|
||||
Private comment visible: Zichtbaarheid van het veld Privé Opmerking
|
||||
Private comment label: Label van het veld Privé Opmerking
|
||||
Emergency visible: Zichtbaarheid van het veld Urgent
|
||||
Emergency label: Label van het veld Urgent
|
||||
Accompanying period visible: Zichtbaarheid van het veld begeleidingstraject
|
||||
Accompanying period label: Label van het veld begeleidingstraject
|
||||
Social issues visible: Zichtbaarheid van het veld Sociale problematieken
|
||||
Social issues label: Label van het veld Sociale problematieken
|
||||
Social actions visible: Zichtbaarheid van het veld Sociale actie
|
||||
Social actions label: Label van het veld Sociale actie
|
||||
Users visible: Zichtbaarheid van het veld Gebruikers
|
||||
Users label: Label van het veld Gebruikers
|
||||
Sent received visible: Zichtbaarheid van het veld Inkomend / Uitgaand
|
||||
Sent received label: Label van het veld Inkomend / Uitgaand
|
||||
Documents visible: Zichtbaarheid van het veld Documenten
|
||||
Documents label: Label van het veld Documenten
|
||||
ActivityType list: Types d'échanges
|
||||
Create a new activity type: Créer un nouveau type d'échange
|
||||
Persons visible: Visibilité du champ Personnes
|
||||
Persons label: Libellé du champ Personnes
|
||||
User visible: Visibilité du champ Utilisateur
|
||||
User label: Libellé du champ Utilisateur
|
||||
Date visible: Visibilité du champ Date
|
||||
Date label: Libellé du champ Date
|
||||
Location visible: Visibilité du champ Lieu
|
||||
Location label: Libellé du champ Lieu
|
||||
Third parties visible: Visibilité du champ Tiers
|
||||
Third parties label: Libellé du champ Tiers
|
||||
Duration time visible: Visibilité du champ Durée
|
||||
Duration time label: Libellé du champ Durée
|
||||
Travel time visible: Visibilité du champ Durée de déplacement
|
||||
Travel time label: Libellé du champ Durée de déplacement
|
||||
Attendee visible: Visibilité du champ Présence de l'usager
|
||||
Attendee label: Libellé du champ Présence de l'usager
|
||||
Reasons visible: Visibilité du champ Sujet
|
||||
Reasons label: Libellé du champ Sujet
|
||||
Comment visible: Visibilité du champ Commentaire
|
||||
Comment label: Libellé du champ Commentaire
|
||||
Emergency visible: Visibilité du champ Urgent
|
||||
Emergency label: Libellé du champ Urgent
|
||||
Accompanying period visible: Visibilité du champ Période d'accompagnement
|
||||
Accompanying period label: Libellé du champ Période d'accompagnement
|
||||
Social issues visible: Visibilité du champ Problématiques sociales
|
||||
Social issues label: Libellé du champ Problématiques sociales
|
||||
Social actions visible: Visibilité du champ Action sociale
|
||||
Social actions label: Libellé du champ Action sociale
|
||||
Users visible: Visibilité du champ Utilisateurs
|
||||
Users label: Libellé du champ Utilisateurs
|
||||
Sent received visible: Visibilité du champ Entrant / Sortant
|
||||
Sent received label: Libellé du champ Entrant / Sortant
|
||||
Documents visible: Visibilité du champ Documents
|
||||
Documents label: Libellé du champ Documents
|
||||
|
||||
# activity type category admin
|
||||
ActivityTypeCategory list: Lijst van categorieën van types uitwisseling
|
||||
Create a new activity type category: Nieuwe categorie van type uitwisseling aanmaken
|
||||
Create a new activity in accompanying course: Uitwisseling aanmaken in het traject
|
||||
ActivityTypeCategory list: Liste des catégories des types d'activité
|
||||
Create a new activity type category: Créer une nouvelle catégorie de type d'échange
|
||||
|
||||
# activity delete
|
||||
Remove activity: Uitwisseling verwijderen
|
||||
Are you sure you want to remove the activity about "%name%" ?: Weet u zeker dat u een uitwisseling wilt verwijderen die betrekking heeft op "%name%"?
|
||||
The activity has been successfully removed.: De uitwisseling is verwijderd.
|
||||
Remove activity: Supprimer un échange
|
||||
Are you sure you want to remove the activity about "%name%" ?: Êtes-vous sûr de vouloir supprimer un échange qui concerne "%name%" ?
|
||||
The activity has been successfully removed.: L'échange a été supprimée.
|
||||
|
||||
# exports
|
||||
Exports of activities linked to a person: Exports van uitwisselingen gekoppeld aan een gebruiker
|
||||
Number of activities linked to a person: Aantal uitwisselingen gekoppeld aan een gebruiker
|
||||
Count activities linked to a person: Aantal uitwisselingen
|
||||
Count activities linked to a person by various parameters.: Telt het aantal geregistreerde uitwisselingen gekoppeld aan een gebruiker op basis van verschillende parameters.
|
||||
Sum activity linked to a person duration: Duur van uitwisselingen
|
||||
Sum activities linked to a person duration: Duur van uitwisselingen gekoppeld aan een gebruiker
|
||||
Sum activities linked to a person duration by various parameters.: Telt de duur van uitwisselingen op basis van verschillende parameters.
|
||||
List activity linked to a person: Uitwisselingen opsommen
|
||||
List activities linked to a person: Lijst van uitwisselingen gekoppeld aan een gebruiker
|
||||
List activities linked to a person description: Maakt de lijst van uitwisselingen op basis van verschillende parameters.
|
||||
|
||||
Exports of activities linked to an accompanying period: Exports van uitwisselingen gekoppeld aan een traject
|
||||
Number of activities linked to an accompanying period: Aantal uitwisselingen gekoppeld aan een traject
|
||||
Count activities linked to an accompanying period: Aantal uitwisselingen
|
||||
Count activities linked to an accompanying period by various parameters.: Telt het aantal geregistreerde uitwisselingen gekoppeld aan een traject op basis van verschillende parameters.
|
||||
Sum activity linked to an accompanying period duration: Som van de duur van uitwisselingen
|
||||
Sum activities linked to an accompanying period duration: Som van de duur van uitwisselingen gekoppeld aan een traject
|
||||
Sum activities linked to an accompanying period duration by various parameters.: Telt de duur van uitwisselingen op basis van verschillende parameters.
|
||||
Sum activity linked to an accompanying period visit duration: Som van de reisduur van uitwisselingen
|
||||
Sum activities linked to an accompanying period visit duration: Som van de reisduur van uitwisselingen gekoppeld aan een traject
|
||||
Sum activities linked to an accompanying period visit duration by various parameters.: Telt de reisduur van uitwisselingen op basis van verschillende parameters.
|
||||
Average activity linked to an accompanying period duration: Gemiddelde van de duur van uitwisselingen
|
||||
Average activities linked to an accompanying period duration: Gemiddelde van de duur van uitwisselingen gekoppeld aan een traject
|
||||
Average activities linked to an accompanying period duration by various parameters.: Gemiddelde van de duur van uitwisselingen op basis van verschillende parameters.
|
||||
Average activity linked to an accompanying period visit duration: Gemiddelde van de reisduur van uitwisselingen
|
||||
Average activities linked to an accompanying period visit duration: Gemiddelde van de reisduur van uitwisselingen gekoppeld aan een traject
|
||||
Average activities linked to an accompanying period visit duration by various parameters.: Gemiddelde van de reisduur van uitwisselingen op basis van verschillende parameters.
|
||||
Count activities: Nombre d'échanges
|
||||
Count activities by various parameters.: Compte le nombre d'échanges enregistrées en fonction de différents paramètres.
|
||||
Sum activity duration: Total de la durée des échanges
|
||||
Sum activities duration by various parameters.: Additionne la durée des échanges en fonction de différents paramètres.
|
||||
List activities: Liste les échanges
|
||||
Number of activities: Nombre d'échanges
|
||||
|
||||
#filters
|
||||
Filter by reason: Uitwisselingen filteren op onderwerp
|
||||
'Filtered by reasons: only %list%': 'Gefilterd op onderwerp: alleen %list%'
|
||||
'Filtered by activity type: only %list%': "Gefilterd op type uitwisseling: alleen %list%"
|
||||
Filtered by date activity: Uitwisselingen filteren op datum
|
||||
Activities after this date: Uitwisselingen na deze datum
|
||||
Activities before this date: Uitwisselingen vóór deze datum
|
||||
"Filtered by date of activity: only between %date_from% and %date_to%": "Gefilterd op datum van de uitwisseling: alleen tussen %date_from% en %date_to%"
|
||||
This date should be after the date given in "Implied in an activity after this date" field: Deze datum moet later zijn dan de datum in het veld "uitwisselingen na deze datum"
|
||||
Filter by reason: Filtrer par sujet d'activité
|
||||
'Filtered by reasons: only %list%': 'Filtré par sujet: seulement %list%'
|
||||
'Filtered by activity type: only %list%': "Filtré par type d'activity: uniquement %list%"
|
||||
Filtered by date activity: Filtrer par date d'activité
|
||||
Activities after this date: Activités après cette date
|
||||
Activities before this date: Activités avant cette date
|
||||
"Filtered by date of activity: only between %date_from% and %date_to%": "Filtré par date de l'activité: uniquement entre %date_from% et %date_to%"
|
||||
This date should be after the date given in "Implied in an activity after this date" field: Cette date devrait être postérieure à la date donnée dans le champ "activités après cette date"
|
||||
|
||||
Filtered by person having an activity in a period: Uniquement les personnes ayant eu une activité dans la période donnée
|
||||
Implied in an activity after this date: Impliqué dans une activité après cette date
|
||||
Implied in an activity before this date: Impliqué dans une activité avant cette date
|
||||
Filtered by person having an activity between %date_from% and %date_to% with reasons %reasons_name%: Filtré par personnes associées à une activité entre %date_from% et %date_to% avec les sujets %reasons_name%
|
||||
Activity reasons for those activities: Sujets de ces activités
|
||||
|
||||
Filter by activity type: Uitwisselingen filteren op type
|
||||
|
||||
Filter activity by location: Uitwisselingen filteren op locatie
|
||||
'Filtered activity by location: only %locations%': "Gefilterd op locatie: alleen %locations%"
|
||||
Filter activity by locationtype: Uitwisselingen filteren op type locatie
|
||||
'Filtered activity by locationtype: only %types%': "Gefilterd op type locatie: alleen %types%"
|
||||
Accepted locationtype: Types locatie
|
||||
Accepted users: TMS(en)
|
||||
Filter activity by emergency: Uitwisselingen filteren op urgentie
|
||||
'Filtered activity by emergency: only %emergency%': "Gefilterd op urgentie: alleen als %emergency%"
|
||||
activity is emergency: de uitwisseling is urgent
|
||||
activity is not emergency: de uitwisseling is niet urgent
|
||||
Filter activity by sentreceived: Uitwisselingen filteren op verzonden/ontvangen
|
||||
'Filtered activity by sentreceived: only %sentreceived%': "Gefilterd op verzonden/ontvangen: alleen %sentreceived%"
|
||||
Accepted sentreceived: ''
|
||||
Filter activity by linked socialaction: Uitwisselingen filteren op gekoppelde actie
|
||||
'Filtered activity by linked socialaction: only %actions%': "Gefilterd op gekoppelde actie: alleen %actions%"
|
||||
Filter activity by linked socialissue: Uitwisselingen filteren op gekoppelde problematiek
|
||||
'Filtered activity by linked socialissue: only %issues%': "Gefilterd op gekoppelde problematiek: alleen %issues%"
|
||||
Filter activity by user: Uitwisselingen filteren op hoofdgebruiker
|
||||
Filter activity by users: Uitwisselingen filteren op deelnemende gebruiker
|
||||
Filter activity by creator: Uitwisselingen filteren op aanmaker van de uitwisseling
|
||||
'Filtered activity by user: only %users%': "Gefilterd op referent: alleen %users%"
|
||||
'Filtered activity by users: only %users%': "Gefilterd op deelnemende gebruikers: alleen %users%"
|
||||
'Filtered activity by creator: only %users%': "Gefilterd op aanmaker: alleen %users%"
|
||||
Creators: Aanmakers
|
||||
Accepted userscope: Diensten
|
||||
|
||||
Filter acp which has no activity: Trajecten filteren die geen uitwisseling hebben
|
||||
Filtered acp which has no activities: Trajecten zonder gekoppelde uitwisseling filteren
|
||||
Group acp by activity number: Trajecten groeperen op aantal uitwisselingen
|
||||
Filter by activity type: Filtrer par type d'activité
|
||||
|
||||
#aggregators
|
||||
Activity type: Type uitwisseling
|
||||
Activity user: Gebruiker gekoppeld aan de uitwisseling
|
||||
By reason: Op onderwerp
|
||||
By category of reason: Op categorie van onderwerp
|
||||
Reason's level: Niveau van het onderwerp
|
||||
Group by reasons: Onderwerp van uitwisseling
|
||||
Aggregate by activity user: Uitwisselingen groeperen op referent
|
||||
Aggregate by activity users: Uitwisselingen groeperen op deelnemende gebruikers
|
||||
Aggregate by activity type: Uitwisselingen groeperen op type
|
||||
Aggregate by activity reason: Uitwisselingen groeperen op onderwerp
|
||||
Activity type: Type d'activité
|
||||
Activity user: Utilisateur lié à l'activity
|
||||
By reason: Par sujet
|
||||
By category of reason: Par catégorie de sujet
|
||||
Reason's level: Niveau du sujet
|
||||
Group by reasons: Sujet d'activité
|
||||
Aggregate by activity user: Grouper par utilisateur lié à l'activité
|
||||
Aggregate by activity type: Grouper par type d'activité
|
||||
Aggregate by activity reason: Grouper par sujet de l'activité
|
||||
|
||||
Group activity by locationtype: Uitwisselingen groeperen op type locatie
|
||||
Group activity by date: Uitwisselingen groeperen op datum
|
||||
Frequency: Frequentie
|
||||
by month: Per maand
|
||||
by week: Per week
|
||||
for week: Week
|
||||
by year: Per jaar
|
||||
in year: In
|
||||
Group activity by creator: Uitwisselingen groeperen op aanmaker van de uitwisseling
|
||||
Group activity by linked thirdparties: Uitwisselingen groeperen op betrokken derde
|
||||
Accepted thirdparty: Betrokken derde
|
||||
Group activity by linked socialaction: Uitwisselingen groeperen op gekoppelde actie
|
||||
Group activity by linked socialissue: Uitwisselingen groeperen op gekoppelde problematiek
|
||||
Group activity by userscope: Uitwisselingen groeperen op dienst van de aanmaker
|
||||
Last activities: Les dernières activités
|
||||
|
||||
Last activities: De laatste uitwisselingen
|
||||
See activity in accompanying course context: Voir l'activité dans le contexte du parcours d'accompagnement
|
||||
|
||||
See activity in accompanying course context: Uitwisseling bekijken in de context van het begeleidingstraject
|
||||
|
||||
You get notified of an activity which does not exists any more: Deze melding komt niet overeen met een geldige uitwisseling.
|
||||
you are not allowed to see it details: De melding verwijst naar een uitwisseling waartoe u geen toegang hebt.
|
||||
This is the minimal activity data: Uitwisseling nr.
|
||||
You get notified of an activity which does not exists any more: Cette notification ne correspond pas à une activité valide.
|
||||
you are not allowed to see it details: La notification fait référence à une activité à laquelle vous n'avez pas accès.
|
||||
This is the minimal activity data: Activité n°
|
||||
|
||||
docgen:
|
||||
Activity basic: Uitwisseling
|
||||
A basic context for activity: Context voor uitwisselingen
|
||||
Accompanying period with a list of activities: Begeleidingstraject met lijst van uitwisselingen
|
||||
Accompanying period with a list of activities description: Deze context neemt de informatie van het traject over, en alle uitwisselingen voor een traject. De uitwisselingen worden niet gefilterd.
|
||||
myActivitiesOnly: Alleen rekening houden met uitwisselingen waarin ik heb deelgenomen
|
||||
myWorksOnly: Alleen rekening houden met begeleidingsacties waarvan ik referent ben
|
||||
|
||||
export:
|
||||
export:
|
||||
count_person_on_activity:
|
||||
title: Aantal betrokken gebruikers bij uitwisselingen
|
||||
description: Telt het aantal betrokken gebruikers bij uitwisselingen. Als een gebruiker aanwezig is in meerdere uitwisselingen, wordt hij slechts één keer geteld.
|
||||
header: Aantal betrokken gebruikers bij uitwisselingen
|
||||
count_household_on_activity:
|
||||
title: Aantal betrokken huishoudens bij uitwisselingen
|
||||
description: Telt het aantal betrokken huishoudens bij uitwisselingen. Als een huishouden aanwezig is in meerdere uitwisselingen, wordt het slechts één keer geteld. Gebruikers zonder huishouden worden niet geteld.
|
||||
header: Aantal betrokken huishoudens bij uitwisselingen
|
||||
count_household_on_activity_person:
|
||||
title: Aantal betrokken huishoudens bij uitwisselingen
|
||||
description: Telt het aantal betrokken huishoudens bij uitwisselingen. Als een huishouden aanwezig is in meerdere uitwisselingen, wordt het slechts één keer geteld. Gebruikers zonder huishouden worden niet geteld. Wanneer een gebruiker van huishouden verandert, wordt elk huishouden één keer geteld.
|
||||
header: Aantal betrokken huishoudens bij uitwisselingen
|
||||
list:
|
||||
activity:
|
||||
users name: Naam van de gebruikers
|
||||
users ids: Identificatie van de gebruikers
|
||||
third parties ids: Identificatie van de derden
|
||||
persons ids: Identificatie van de gebruikers
|
||||
persons name: Naam van de gebruikers
|
||||
thirds parties: Derden
|
||||
date: Datum van de uitwisseling
|
||||
locationName: Locatie
|
||||
sent received: Verzonden of ontvangen
|
||||
emergency: Urgentie
|
||||
accompanying course id: Identificatie van het traject
|
||||
course circles: Diensten van het traject
|
||||
travelTime: Reisduur
|
||||
durationTime: Duur
|
||||
id: Identificatie
|
||||
List activities linked to an accompanying course: Somt uitwisselingen op gekoppeld aan een traject op basis van verschillende filters.
|
||||
List activity linked to a course: Lijst van uitwisselingen gekoppeld aan een traject
|
||||
commentText: Opmerking
|
||||
comment_date: Datum van de laatste bewerking van de opmerking
|
||||
comment_user: Laatste bewerking door
|
||||
|
||||
filter:
|
||||
activity:
|
||||
by_users_job:
|
||||
Filter by users job: Uitwisselingen filteren op beroep van ten minste één deelnemende gebruiker
|
||||
'Filtered activity by users job: only %jobs%': 'Gefilterd op beroep van ten minste één deelnemende gebruiker: alleen %jobs%'
|
||||
by_users_scope:
|
||||
Filter by users scope: Uitwisselingen filteren op dienst van ten minste één deelnemende gebruiker
|
||||
'Filtered activity by users scope: only %scopes%': 'Gefilterd op dienst van ten minste één deelnemende gebruiker: alleen %scopes%'
|
||||
course_having_activity_between_date:
|
||||
Title: Trajecten filteren die een uitwisseling hebben ontvangen tussen twee data
|
||||
Receiving an activity after: Die een uitwisseling hebben ontvangen na
|
||||
Receiving an activity before: Die een uitwisseling hebben ontvangen vóór
|
||||
acp_by_activity_type:
|
||||
'activity after': Uitwisselingen na
|
||||
activity after help: Indien leeg gelaten, wordt er geen rekening mee gehouden
|
||||
activity before: Uitwisselingen vóór
|
||||
activity before help: Indien leeg gelaten, wordt er geen rekening mee gehouden
|
||||
person_between_dates:
|
||||
Implied in an activity after this date: Betrokken bij een uitwisseling na deze datum
|
||||
Implied in an activity before this date: Betrokken bij een uitwisseling vóór deze datum
|
||||
Activity reasons for those activities: Onderwerpen van deze uitwisselingen
|
||||
if no reasons: Als geen enkel onderwerp is aangevinkt, worden alle onderwerpen in aanmerking genomen
|
||||
title: Gebruikers filteren die gekoppeld zijn geweest aan een uitwisseling tijdens de periode
|
||||
date mismatch: De einddatum van de periode moet later zijn dan de startdatum
|
||||
by_creator_scope:
|
||||
Filter activity by user scope: Uitwisselingen filteren op dienst van de aanmaker van de uitwisseling
|
||||
'Filtered activity by user scope: only %scopes%': "Gefilterd op dienst van de aanmaker van de uitwisseling: alleen %scopes%"
|
||||
by_creator_job:
|
||||
job_form_label: Beroepen
|
||||
Filter activity by user job: Uitwisselingen filteren op beroep van de aanmaker van de uitwisseling
|
||||
'Filtered activity by user job: only %jobs%': "Gefilterd op beroep van de aanmaker van de uitwisseling: alleen %jobs%"
|
||||
by_persons:
|
||||
Filter activity by persons: Uitwisselingen filteren op deelnemende gebruiker
|
||||
'Filtered activity by persons: only %persons%': 'Uitwisselingen gefilterd op deelnemende gebruikers: alleen %persons%'
|
||||
persons taking part on the activity: Gebruikers deelnemend aan de uitwisseling
|
||||
by_sent_received:
|
||||
Sent or received: Verzonden of ontvangen
|
||||
is sent: verzonden
|
||||
is received: ontvangen
|
||||
by_presence:
|
||||
Filter activity by activity presence: Uitwisselingen filteren op aanwezigheid van de gebruiker
|
||||
presences: Aanwezigheden
|
||||
'Filtered by activity presence: only %presences%': 'Gefilterd op aanwezigheid van de gebruiker: alleen %presences%'
|
||||
|
||||
aggregator:
|
||||
person:
|
||||
by_person:
|
||||
title: Uitwisselingen groeperen op gebruiker (gebruikersdossier waarin de uitwisseling is geregistreerd)
|
||||
person: Gebruiker
|
||||
by_household:
|
||||
title: Uitwisselingen groeperen op huishouden
|
||||
household: Identificatie huishouden
|
||||
acp:
|
||||
by_activity_type:
|
||||
title: Trajecten groeperen op type uitwisseling
|
||||
after_date: Alleen uitwisselingen na deze datum
|
||||
before_date: Alleen uitwisselingen vóór deze datum
|
||||
activity_type: Types uitwisseling
|
||||
activity:
|
||||
by_sent_received:
|
||||
Sent or received: Verzonden of ontvangen
|
||||
is sent: verzonden
|
||||
is received: ontvangen
|
||||
Group activity by sentreceived: Uitwisselingen groeperen op verzonden / ontvangen
|
||||
by_location:
|
||||
Activity Location: Locatie van de uitwisseling
|
||||
Title: Uitwisselingen groeperen op locatie van de uitwisseling
|
||||
by_user_job:
|
||||
Users 's job: Beroep van de gebruikers deelnemend aan de uitwisseling
|
||||
Aggregate by users job: Uitwisselingen groeperen op beroep van de deelnemende gebruikers
|
||||
by_user_scope:
|
||||
Users 's scope: Hoofddienst van de gebruikers deelnemend aan de uitwisseling
|
||||
Aggregate by users scope: Uitwisselingen groeperen op hoofddienst van de gebruiker
|
||||
by_creator_scope:
|
||||
Group activity by creator scope: Uitwisselingen groeperen op dienst van de aanmaker van de uitwisseling
|
||||
Calc date: Berekeningsdatum van de dienst van de aanmaker van de uitwisseling
|
||||
by_creator_job:
|
||||
Group activity by creator job: Uitwisselingen groeperen op beroep van de aanmaker van de uitwisseling
|
||||
Calc date: Berekeningsdatum van het beroep van de aanmaker van de uitwisseling
|
||||
by_persons:
|
||||
Group activity by persons: Uitwisselingen groeperen op deelnemende gebruiker
|
||||
Persons: Deelnemende gebruikers
|
||||
by_activity_presence:
|
||||
Group activity by presence: Uitwisselingen groeperen op aanwezigheid van de gebruiker
|
||||
header: Aanwezigheid van gebruiker(s)
|
||||
|
||||
generic_doc:
|
||||
filter:
|
||||
keys:
|
||||
accompanying_period_activity_document: Document van uitwisselingen van trajecten
|
||||
Activity basic: Echange
|
||||
A basic context for activity: Contexte pour les activités
|
||||
|
||||
@@ -165,60 +165,3 @@ Phonecall: "Telefoon oproep"
|
||||
Aside activities: Nevenactiviteiten
|
||||
Aside activity types: Types nevenactiviteiten
|
||||
Aside activity type configuration: Configuratie categorieën nevenactiviteiten
|
||||
|
||||
# exports
|
||||
export:
|
||||
aside_activity:
|
||||
List of aside activities: Lijst van nevenactiviteiten
|
||||
createdAt: Aanmaak
|
||||
updatedAt: Laatste update
|
||||
agent_id: Gebruiker
|
||||
creator_id: Aanmaker
|
||||
main_scope: Hoofddienst van de gebruiker
|
||||
main_center: Hoofdterritorium van de gebruiker
|
||||
aside_activity_type: Categorie nevenactiviteit
|
||||
date: Datum
|
||||
duration: Duur
|
||||
note: Notitie
|
||||
id: Identificatie
|
||||
location: Locatie
|
||||
|
||||
Exports of aside activities: Exports van nevenactiviteiten
|
||||
Count aside activities: Aantal nevenactiviteiten
|
||||
Count aside activities by various parameters.: Telt het aantal nevenactiviteiten volgens diverse criteria
|
||||
Average aside activities duration: Gemiddelde duur van nevenactiviteiten
|
||||
Sum aside activities duration: Duur van nevenactiviteiten
|
||||
Sum concerned persons count for aside activities: Aantal betrokken gebruikers bij nevenactiviteiten
|
||||
filter:
|
||||
Filter by aside activity date: Nevenactiviteiten filteren op datum
|
||||
Filter by aside activity type: Nevenactiviteiten filteren op type activiteit
|
||||
'Filtered by aside activity type: only %type%': "Gefilterd op type nevenactiviteit: alleen %type%"
|
||||
Filtered by aside activities between %dateFrom% and %dateTo%: Gefilterd op datum van nevenactiviteit, tussen %dateFrom% en %dateTo%
|
||||
This date should be after the date given in "Implied in an aside activity after this date" field: Deze datum moet later zijn dan de datum in het veld "nevenactiviteiten na deze datum"
|
||||
Aside activities after this date: Nevenactiviteiten na deze datum
|
||||
Aside activities before this date: Nevenactiviteiten vóór deze datum
|
||||
'Filtered aside activity by user: only %users%': "Gefilterd op gebruiker: alleen %users%"
|
||||
Filter aside activity by user: Filteren op gebruiker
|
||||
by_user_job:
|
||||
'Filtered aside activities by user jobs: only %jobs%': "Gefilterd op beroep van gebruikers: alleen %jobs%"
|
||||
Filter by user jobs: Nevenactiviteiten filteren op beroep van gebruikers
|
||||
by_user_scope:
|
||||
'Filtered aside activities by user scope: only %scopes%': "Gefilterd op dienst van gebruikers: alleen %scopes%"
|
||||
Filter by user scope: Nevenactiviteiten filteren op dienst van gebruiker
|
||||
Filter by aside activity location: Nevenactiviteiten filteren op locatie
|
||||
'Filtered by aside activity location: only %location%': "Gefilterd op locatie: alleen %location%"
|
||||
aggregator:
|
||||
Group by aside activity type: Nevenactiviteiten groeperen op type activiteit
|
||||
Group by concerned persons count: Nevenactiviteiten groeperen op aantal betrokken gebruikers
|
||||
Concerned persons count: Aantal betrokken gebruikers
|
||||
Aside activity type: Type nevenactiviteit
|
||||
by_user_job:
|
||||
Aggregate by user job: Nevenactiviteiten groeperen op beroep van gebruikers
|
||||
by_user_scope:
|
||||
Aggregate by user scope: Nevenactiviteiten groeperen op dienst van gebruikers
|
||||
Aside activity location: Locatie van nevenactiviteiten
|
||||
Group by aside activity location: Nevenactiviteiten groeperen op locatie
|
||||
Aside activity localisation: Locatie
|
||||
|
||||
# ROLES
|
||||
CHILL_ASIDE_ACTIVITY_STATS: Statistieken voor nevenactiviteiten
|
||||
|
||||
@@ -74,42 +74,3 @@ The balance: Verschil tussen inkomsten en onkosten
|
||||
|
||||
Valid since %startDate% until %endDate%: Geldig sinds %startDate% tot %endDate%
|
||||
Valid since %startDate%: Geldig sinds %startDate%
|
||||
|
||||
budget:
|
||||
admin:
|
||||
form:
|
||||
Charge_kind_key: Identificatiesleutel
|
||||
Resource_kind_key: Identificatiesleutel
|
||||
This kind must contains only alphabeticals characters, and dashes. This string is in use during document generation. Changes may have side effect on document: Deze sleutel dient om het type last of inkomen te identificeren bij het genereren van documenten. Alleen alfanumerieke tekens zijn toegestaan. Het wijzigen van deze sleutel kan een effect hebben bij het genereren van nieuwe documenten.
|
||||
|
||||
# ROLES
|
||||
Budget elements: Budget
|
||||
CHILL_BUDGET_ELEMENT_CREATE: Inkomsten/last aanmaken
|
||||
CHILL_BUDGET_ELEMENT_DELETE: Inkomsten/last verwijderen
|
||||
CHILL_BUDGET_ELEMENT_SEE: Inkomstenen/lasten bekijken
|
||||
CHILL_BUDGET_ELEMENT_UPDATE: Inkomsten/last bewerken
|
||||
|
||||
## admin
|
||||
|
||||
crud:
|
||||
resource_kind:
|
||||
title_new: Nieuw type inkomsten
|
||||
title_edit: Type inkomsten bewerken
|
||||
charge_kind:
|
||||
title_new: Nieuw type last
|
||||
title_edit: Type last bewerken
|
||||
|
||||
admin:
|
||||
menu:
|
||||
Resource types: Types inkomsten
|
||||
Charge types: Types last
|
||||
title:
|
||||
Charge Type List: Lijst van types last
|
||||
Resource Type List: Lijst van types inkomsten
|
||||
Budget configuration: Configuratie van budgetelementen
|
||||
new:
|
||||
Create a new charge type: Nieuw type last aanmaken
|
||||
Create a new resource type: Nieuw type inkomsten aanmaken
|
||||
form:
|
||||
Choose the type of resource: Kies een type inkomsten
|
||||
Choose the type of charge: Kies een type last
|
||||
|
||||
@@ -1,8 +1,2 @@
|
||||
The amount cannot be empty: Het bedrag mag niet nul of leeg zijn
|
||||
The budget element's end date must be after the start date: De einddatum moet later vallen dan de begindatum
|
||||
|
||||
budget:
|
||||
admin:
|
||||
form:
|
||||
kind:
|
||||
enkel_alphanumeriek
|
||||
The amount cannot be empty: Le montant ne peut pas être vide ou égal à zéro
|
||||
The budget element's end date must be after the start date: La date de fin doit être après la date de début
|
||||
@@ -12,7 +12,6 @@ declare(strict_types=1);
|
||||
namespace Chill\CalendarBundle\Controller;
|
||||
|
||||
use Chill\CalendarBundle\Repository\CalendarRepository;
|
||||
use Chill\CalendarBundle\Repository\InviteRepository;
|
||||
use Chill\MainBundle\CRUD\Controller\ApiController;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Chill\MainBundle\Serializer\Model\Collection;
|
||||
@@ -24,10 +23,7 @@ use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class CalendarAPIController extends ApiController
|
||||
{
|
||||
public function __construct(
|
||||
private readonly CalendarRepository $calendarRepository,
|
||||
private readonly InviteRepository $inviteRepository,
|
||||
) {}
|
||||
public function __construct(private readonly CalendarRepository $calendarRepository) {}
|
||||
|
||||
#[Route(path: '/api/1.0/calendar/calendar/by-user/{id}.{_format}', name: 'chill_api_single_calendar_list_by-user', requirements: ['_format' => 'json'])]
|
||||
public function listByUser(User $user, Request $request, string $_format): JsonResponse
|
||||
@@ -56,37 +52,16 @@ class CalendarAPIController extends ApiController
|
||||
throw new BadRequestHttpException('dateTo not parsable');
|
||||
}
|
||||
|
||||
// Get calendar items where user is the main user
|
||||
$ownCalendars = $this->calendarRepository->findByUser(
|
||||
$total = $this->calendarRepository->countByUser($user, $dateFrom, $dateTo);
|
||||
$paginator = $this->getPaginatorFactory()->create($total);
|
||||
$ranges = $this->calendarRepository->findByUser(
|
||||
$user,
|
||||
$dateFrom,
|
||||
$dateTo
|
||||
$dateTo,
|
||||
$paginator->getItemsPerPage(),
|
||||
$paginator->getCurrentPageFirstItemNumber()
|
||||
);
|
||||
|
||||
// Get calendar items from accepted invites
|
||||
$acceptedInvites = $this->inviteRepository->findAcceptedInvitesByUserAndDateRange($user, $dateFrom, $dateTo);
|
||||
$inviteCalendars = array_map(fn ($invite) => $invite->getCalendar(), $acceptedInvites);
|
||||
|
||||
// Merge
|
||||
$allCalendars = array_merge($ownCalendars, $inviteCalendars);
|
||||
$uniqueCalendars = [];
|
||||
$seenIds = [];
|
||||
|
||||
foreach ($allCalendars as $calendar) {
|
||||
$id = $calendar->getId();
|
||||
if (!in_array($id, $seenIds, true)) {
|
||||
$seenIds[] = $id;
|
||||
$uniqueCalendars[] = $calendar;
|
||||
}
|
||||
}
|
||||
|
||||
$total = count($uniqueCalendars);
|
||||
$paginator = $this->getPaginatorFactory()->create($total);
|
||||
|
||||
$offset = $paginator->getCurrentPageFirstItemNumber();
|
||||
$limit = $paginator->getItemsPerPage();
|
||||
$ranges = array_slice($uniqueCalendars, $offset, $limit);
|
||||
|
||||
$collection = new Collection($ranges, $paginator);
|
||||
|
||||
return $this->json($collection, Response::HTTP_OK, [], ['groups' => ['calendar:light']]);
|
||||
|
||||
@@ -12,7 +12,6 @@ declare(strict_types=1);
|
||||
namespace Chill\CalendarBundle\Repository;
|
||||
|
||||
use Chill\CalendarBundle\Entity\Invite;
|
||||
use Chill\MainBundle\Entity\User;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
use Doctrine\Persistence\ObjectRepository;
|
||||
@@ -52,52 +51,6 @@ class InviteRepository implements ObjectRepository
|
||||
return $this->entityRepository->findOneBy($criteria);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find accepted invites for a user within a date range.
|
||||
*
|
||||
* @return array|Invite[]
|
||||
*/
|
||||
public function findAcceptedInvitesByUserAndDateRange(User $user, \DateTimeImmutable $from, \DateTimeImmutable $to): array
|
||||
{
|
||||
return $this->buildAcceptedInviteByUserAndDateRangeQuery($user, $from, $to)
|
||||
->getQuery()
|
||||
->getResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* Count accepted invites for a user within a date range.
|
||||
*/
|
||||
public function countAcceptedInvitesByUserAndDateRange(User $user, \DateTimeImmutable $from, \DateTimeImmutable $to): int
|
||||
{
|
||||
return $this->buildAcceptedInviteByUserAndDateRangeQuery($user, $from, $to)
|
||||
->select('COUNT(c)')
|
||||
->getQuery()
|
||||
->getSingleScalarResult();
|
||||
}
|
||||
|
||||
public function buildAcceptedInviteByUserAndDateRangeQuery(User $user, \DateTimeImmutable $from, \DateTimeImmutable $to)
|
||||
{
|
||||
$qb = $this->entityRepository->createQueryBuilder('i');
|
||||
|
||||
return $qb
|
||||
->join('i.calendar', 'c')
|
||||
->where(
|
||||
$qb->expr()->andX(
|
||||
$qb->expr()->eq('i.user', ':user'),
|
||||
$qb->expr()->eq('i.status', ':status'),
|
||||
$qb->expr()->gte('c.startDate', ':startDate'),
|
||||
$qb->expr()->lte('c.endDate', ':endDate'),
|
||||
$qb->expr()->isNull('c.cancelReason')
|
||||
)
|
||||
)
|
||||
->setParameters([
|
||||
'user' => $user,
|
||||
'status' => Invite::ACCEPTED,
|
||||
'startDate' => $from,
|
||||
'endDate' => $to,
|
||||
]);
|
||||
}
|
||||
|
||||
public function getClassName(): string
|
||||
{
|
||||
return Invite::class;
|
||||
|
||||
@@ -68,9 +68,7 @@ export type EventInputCalendarRange = EventInput & {
|
||||
export function isEventInputCalendarRange(
|
||||
toBeDetermined: EventInputCalendarRange | EventInput,
|
||||
): toBeDetermined is EventInputCalendarRange {
|
||||
return (
|
||||
typeof toBeDetermined.is === "string" && toBeDetermined.is === "range"
|
||||
);
|
||||
return typeof toBeDetermined.is === "string" && toBeDetermined.is === "range";
|
||||
}
|
||||
|
||||
export {};
|
||||
|
||||
@@ -4,18 +4,9 @@
|
||||
{{ user.text }}
|
||||
<template v-if="invite !== null">
|
||||
<i v-if="invite.status === 'accepted'" class="fa fa-check" />
|
||||
<i
|
||||
v-else-if="invite.status === 'declined'"
|
||||
class="fa fa-times"
|
||||
/>
|
||||
<i
|
||||
v-else-if="invite.status === 'pending'"
|
||||
class="fa fa-question-o"
|
||||
/>
|
||||
<i
|
||||
v-else-if="invite.status === 'tentative'"
|
||||
class="fa fa-question"
|
||||
/>
|
||||
<i v-else-if="invite.status === 'declined'" class="fa fa-times" />
|
||||
<i v-else-if="invite.status === 'pending'" class="fa fa-question-o" />
|
||||
<i v-else-if="invite.status === 'tentative'" class="fa fa-question" />
|
||||
<span v-else="">{{ invite.status }}</span>
|
||||
</template>
|
||||
</span>
|
||||
@@ -69,8 +60,7 @@ export default {
|
||||
computed: {
|
||||
style() {
|
||||
return {
|
||||
backgroundColor: this.$store.getters.getUserData(this.user)
|
||||
.mainColor,
|
||||
backgroundColor: this.$store.getters.getUserData(this.user).mainColor,
|
||||
};
|
||||
},
|
||||
rangeShow: {
|
||||
@@ -81,9 +71,7 @@ export default {
|
||||
});
|
||||
},
|
||||
get() {
|
||||
return this.$store.getters.isRangeShownOnCalendarForUser(
|
||||
this.user,
|
||||
);
|
||||
return this.$store.getters.isRangeShownOnCalendarForUser(this.user);
|
||||
},
|
||||
},
|
||||
remoteShow: {
|
||||
@@ -94,9 +82,7 @@ export default {
|
||||
});
|
||||
},
|
||||
get() {
|
||||
return this.$store.getters.isRemoteShownOnCalendarForUser(
|
||||
this.user,
|
||||
);
|
||||
return this.$store.getters.isRemoteShownOnCalendarForUser(this.user);
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -22,33 +22,25 @@
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="btnGroupDrop1">
|
||||
<li v-if="status !== Statuses.ACCEPTED">
|
||||
<a
|
||||
class="dropdown-item"
|
||||
@click="changeStatus(Statuses.ACCEPTED)"
|
||||
><i class="fa fa-check" aria-hidden="true"></i>
|
||||
{{ $t("Accept") }}</a
|
||||
<a class="dropdown-item" @click="changeStatus(Statuses.ACCEPTED)"
|
||||
><i class="fa fa-check" aria-hidden="true"></i> {{ $t("Accept") }}</a
|
||||
>
|
||||
</li>
|
||||
<li v-if="status !== Statuses.DECLINED">
|
||||
<a
|
||||
class="dropdown-item"
|
||||
@click="changeStatus(Statuses.DECLINED)"
|
||||
><i class="fa fa-times" aria-hidden="true"></i>
|
||||
{{ $t("Decline") }}</a
|
||||
<a class="dropdown-item" @click="changeStatus(Statuses.DECLINED)"
|
||||
><i class="fa fa-times" aria-hidden="true"></i> {{ $t("Decline") }}</a
|
||||
>
|
||||
</li>
|
||||
<li v-if="status !== Statuses.TENTATIVELY_ACCEPTED">
|
||||
<a
|
||||
class="dropdown-item"
|
||||
@click="changeStatus(Statuses.TENTATIVELY_ACCEPTED)"
|
||||
><i class="fa fa-question"></i>
|
||||
{{ $t("Tentatively_accept") }}</a
|
||||
><i class="fa fa-question"></i> {{ $t("Tentatively_accept") }}</a
|
||||
>
|
||||
</li>
|
||||
<li v-if="status !== Statuses.PENDING">
|
||||
<a class="dropdown-item" @click="changeStatus(Statuses.PENDING)"
|
||||
><i class="fa fa-hourglass-o"></i>
|
||||
{{ $t("Set_pending") }}</a
|
||||
><i class="fa fa-hourglass-o"></i> {{ $t("Set_pending") }}</a
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -91,9 +83,7 @@ export default defineComponent({
|
||||
},
|
||||
},
|
||||
emits: {
|
||||
statusChanged(
|
||||
payload: "accepted" | "declined" | "pending" | "tentative",
|
||||
) {
|
||||
statusChanged(payload: "accepted" | "declined" | "pending" | "tentative") {
|
||||
return true;
|
||||
},
|
||||
},
|
||||
|
||||
@@ -108,12 +108,9 @@
|
||||
{{ formatDate(event.endStr, "time") }}:
|
||||
{{ event.extendedProps.locationName }}</b
|
||||
>
|
||||
<a
|
||||
:href="calendarLink(event.id)"
|
||||
v-else-if="event.extendedProps.is === 'local'"
|
||||
>
|
||||
<b>{{ event.title }}</b>
|
||||
</a>
|
||||
<b v-else-if="event.extendedProps.is === 'local'">{{
|
||||
event.title
|
||||
}}</b>
|
||||
<b v-else>no 'is'</b>
|
||||
<a
|
||||
v-if="event.extendedProps.is === 'range'"
|
||||
@@ -489,12 +486,6 @@ function copyWeek() {
|
||||
});
|
||||
}
|
||||
|
||||
const calendarLink = (calendarId: string) => {
|
||||
const idStr = calendarId.match(/_(\d+)$/)?.[1];
|
||||
|
||||
return `/fr/calendar/calendar/${idStr}/edit`;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
copyFromWeek.value = dateToISO(getMonday(0));
|
||||
copyToWeek.value = dateToISO(getMonday(1));
|
||||
|
||||
@@ -41,9 +41,7 @@ const futureStore = function (): Promise<Store<State>> {
|
||||
});
|
||||
|
||||
store.commit("me/setWhoAmi", user, { root: true });
|
||||
store
|
||||
.dispatch("locations/getLocations", null, { root: true })
|
||||
.then((_) => {
|
||||
store.dispatch("locations/getLocations", null, { root: true }).then((_) => {
|
||||
return store.dispatch("locations/getCurrentLocation", null, {
|
||||
root: true,
|
||||
});
|
||||
|
||||
@@ -29,10 +29,7 @@ export default {
|
||||
(state: CalendarLocalsState) =>
|
||||
({ start, end }: { start: Date; end: Date }): boolean => {
|
||||
for (const range of state.localsLoaded) {
|
||||
if (
|
||||
start.getTime() === range.start &&
|
||||
end.getTime() === range.end
|
||||
) {
|
||||
if (start.getTime() === range.start && end.getTime() === range.end) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -54,10 +51,7 @@ export default {
|
||||
});
|
||||
state.key = state.key + toAdd.length;
|
||||
},
|
||||
addLoaded(
|
||||
state: CalendarLocalsState,
|
||||
payload: { start: Date; end: Date },
|
||||
) {
|
||||
addLoaded(state: CalendarLocalsState, payload: { start: Date; end: Date }) {
|
||||
state.localsLoaded.push({
|
||||
start: payload.start.getTime(),
|
||||
end: payload.end.getTime(),
|
||||
@@ -85,11 +79,7 @@ export default {
|
||||
end: end,
|
||||
});
|
||||
|
||||
return fetchCalendarLocalForUser(
|
||||
ctx.rootGetters["me/getMe"],
|
||||
start,
|
||||
end,
|
||||
)
|
||||
return fetchCalendarLocalForUser(ctx.rootGetters["me/getMe"], start, end)
|
||||
.then((remotes: CalendarLight[]) => {
|
||||
// to be add when reactivity problem will be solve ?
|
||||
//ctx.commit('addRemotes', remotes);
|
||||
|
||||
@@ -40,10 +40,7 @@ export default {
|
||||
(state: CalendarRangesState) =>
|
||||
({ start, end }: { start: Date; end: Date }): boolean => {
|
||||
for (const range of state.rangesLoaded) {
|
||||
if (
|
||||
start.getTime() === range.start &&
|
||||
end.getTime() === range.end
|
||||
) {
|
||||
if (start.getTime() === range.start && end.getTime() === range.end) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -110,9 +107,7 @@ export default {
|
||||
state: CalendarRangesState,
|
||||
externalEvents: (EventInput & { id: string })[],
|
||||
) {
|
||||
const toAdd = externalEvents.filter(
|
||||
(r) => !state.rangesIndex.has(r.id),
|
||||
);
|
||||
const toAdd = externalEvents.filter((r) => !state.rangesIndex.has(r.id));
|
||||
|
||||
toAdd.forEach((r) => {
|
||||
state.rangesIndex.add(r.id);
|
||||
@@ -120,10 +115,7 @@ export default {
|
||||
});
|
||||
state.key = state.key + toAdd.length;
|
||||
},
|
||||
addLoaded(
|
||||
state: CalendarRangesState,
|
||||
payload: { start: Date; end: Date },
|
||||
) {
|
||||
addLoaded(state: CalendarRangesState, payload: { start: Date; end: Date }) {
|
||||
state.rangesLoaded.push({
|
||||
start: payload.start.getTime(),
|
||||
end: payload.end.getTime(),
|
||||
@@ -142,17 +134,12 @@ export default {
|
||||
},
|
||||
removeRange(state: CalendarRangesState, calendarRangeId: number) {
|
||||
const found = state.ranges.find(
|
||||
(r) =>
|
||||
r.calendarRangeId === calendarRangeId && r.is === "range",
|
||||
(r) => r.calendarRangeId === calendarRangeId && r.is === "range",
|
||||
);
|
||||
|
||||
if (found !== undefined) {
|
||||
state.ranges = state.ranges.filter(
|
||||
(r) =>
|
||||
!(
|
||||
r.calendarRangeId === calendarRangeId &&
|
||||
r.is === "range"
|
||||
),
|
||||
(r) => !(r.calendarRangeId === calendarRangeId && r.is === "range"),
|
||||
);
|
||||
|
||||
if (typeof found.id === "string") {
|
||||
@@ -211,11 +198,7 @@ export default {
|
||||
},
|
||||
createRange(
|
||||
ctx: Context,
|
||||
{
|
||||
start,
|
||||
end,
|
||||
location,
|
||||
}: { start: Date; end: Date; location: Location },
|
||||
{ start, end, location }: { start: Date; end: Date; location: Location },
|
||||
): Promise<null> {
|
||||
const url = `/api/1.0/calendar/calendar-range.json?`;
|
||||
|
||||
@@ -240,11 +223,7 @@ export default {
|
||||
},
|
||||
} as CalendarRangeCreate;
|
||||
|
||||
return makeFetch<CalendarRangeCreate, CalendarRange>(
|
||||
"POST",
|
||||
url,
|
||||
body,
|
||||
)
|
||||
return makeFetch<CalendarRangeCreate, CalendarRange>("POST", url, body)
|
||||
.then((newRange) => {
|
||||
ctx.commit("addRange", newRange);
|
||||
|
||||
@@ -281,11 +260,7 @@ export default {
|
||||
},
|
||||
} as CalendarRangeEdit;
|
||||
|
||||
return makeFetch<CalendarRangeEdit, CalendarRange>(
|
||||
"PATCH",
|
||||
url,
|
||||
body,
|
||||
)
|
||||
return makeFetch<CalendarRangeEdit, CalendarRange>("PATCH", url, body)
|
||||
.then((range) => {
|
||||
ctx.commit("updateRange", range);
|
||||
return Promise.resolve(null);
|
||||
@@ -310,11 +285,7 @@ export default {
|
||||
},
|
||||
} as CalendarRangeEdit;
|
||||
|
||||
return makeFetch<CalendarRangeEdit, CalendarRange>(
|
||||
"PATCH",
|
||||
url,
|
||||
body,
|
||||
)
|
||||
return makeFetch<CalendarRangeEdit, CalendarRange>("PATCH", url, body)
|
||||
.then((range) => {
|
||||
ctx.commit("updateRange", range);
|
||||
return Promise.resolve(null);
|
||||
@@ -334,20 +305,14 @@ export default {
|
||||
|
||||
for (const r of rangesToCopy) {
|
||||
const start = new Date(ISOToDatetime(r.start) as Date);
|
||||
start.setFullYear(
|
||||
to.getFullYear(),
|
||||
to.getMonth(),
|
||||
to.getDate(),
|
||||
);
|
||||
start.setFullYear(to.getFullYear(), to.getMonth(), to.getDate());
|
||||
const end = new Date(ISOToDatetime(r.end) as Date);
|
||||
end.setFullYear(to.getFullYear(), to.getMonth(), to.getDate());
|
||||
const location = ctx.rootGetters["locations/getLocationById"](
|
||||
r.locationId,
|
||||
);
|
||||
|
||||
promises.push(
|
||||
ctx.dispatch("createRange", { start, end, location }),
|
||||
);
|
||||
promises.push(ctx.dispatch("createRange", { start, end, location }));
|
||||
}
|
||||
|
||||
return Promise.all(promises).then(() => Promise.resolve(null));
|
||||
@@ -369,9 +334,7 @@ export default {
|
||||
r.locationId,
|
||||
);
|
||||
|
||||
promises.push(
|
||||
ctx.dispatch("createRange", { start, end, location }),
|
||||
);
|
||||
promises.push(ctx.dispatch("createRange", { start, end, location }));
|
||||
}
|
||||
|
||||
return Promise.all(promises).then(() => Promise.resolve(null));
|
||||
|
||||
@@ -29,10 +29,7 @@ export default {
|
||||
(state: CalendarRemotesState) =>
|
||||
({ start, end }: { start: Date; end: Date }): boolean => {
|
||||
for (const range of state.remotesLoaded) {
|
||||
if (
|
||||
start.getTime() === range.start &&
|
||||
end.getTime() === range.end
|
||||
) {
|
||||
if (start.getTime() === range.start && end.getTime() === range.end) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -85,11 +82,7 @@ export default {
|
||||
end: end,
|
||||
});
|
||||
|
||||
return fetchCalendarRemoteForUser(
|
||||
ctx.rootGetters["me/getMe"],
|
||||
start,
|
||||
end,
|
||||
)
|
||||
return fetchCalendarRemoteForUser(ctx.rootGetters["me/getMe"], start, end)
|
||||
.then((remotes: CalendarRemote[]) => {
|
||||
// to be add when reactivity problem will be solve ?
|
||||
//ctx.commit('addRemotes', remotes);
|
||||
|
||||
@@ -112,11 +112,8 @@ export default {
|
||||
|
||||
results.forEach((i) => {
|
||||
if (!users.some((j) => i.user.id === j.id)) {
|
||||
let ratio = Math.floor(
|
||||
users.length / COLORS.length,
|
||||
);
|
||||
let colorIndex =
|
||||
users.length - ratio * COLORS.length;
|
||||
let ratio = Math.floor(users.length / COLORS.length);
|
||||
let colorIndex = users.length - ratio * COLORS.length;
|
||||
users.push({
|
||||
id: i.user.id,
|
||||
username: i.user.username,
|
||||
@@ -153,45 +150,29 @@ export default {
|
||||
(me) =>
|
||||
new Promise((resolve, reject) => {
|
||||
this.users.logged = me;
|
||||
let currentUser = users.find(
|
||||
(u) => u.id === me.id,
|
||||
);
|
||||
let currentUser = users.find((u) => u.id === me.id);
|
||||
this.value = currentUser;
|
||||
|
||||
fetchCalendar(currentUser.id).then(
|
||||
(calendar) =>
|
||||
new Promise(
|
||||
(resolve, reject) => {
|
||||
let results =
|
||||
calendar.results;
|
||||
let events =
|
||||
results.map(
|
||||
(i) => ({
|
||||
start: i
|
||||
.startDate
|
||||
.datetime,
|
||||
end: i
|
||||
.endDate
|
||||
.datetime,
|
||||
}),
|
||||
);
|
||||
let calendarEventsCurrentUser =
|
||||
{
|
||||
new Promise((resolve, reject) => {
|
||||
let results = calendar.results;
|
||||
let events = results.map((i) => ({
|
||||
start: i.startDate.datetime,
|
||||
end: i.endDate.datetime,
|
||||
}));
|
||||
let calendarEventsCurrentUser = {
|
||||
events: events,
|
||||
color: "darkblue",
|
||||
id: 1000,
|
||||
editable: false,
|
||||
};
|
||||
this.calendarEvents.user =
|
||||
calendarEventsCurrentUser;
|
||||
this.calendarEvents.user = calendarEventsCurrentUser;
|
||||
|
||||
this.selectUsers(
|
||||
currentUser,
|
||||
);
|
||||
this.selectUsers(currentUser);
|
||||
|
||||
resolve();
|
||||
},
|
||||
),
|
||||
}),
|
||||
);
|
||||
|
||||
resolve();
|
||||
@@ -209,9 +190,7 @@ export default {
|
||||
return `${value.username}`;
|
||||
},
|
||||
coloriseSelectedValues() {
|
||||
let tags = document.querySelectorAll(
|
||||
"div.multiselect__tags-wrap",
|
||||
)[0];
|
||||
let tags = document.querySelectorAll("div.multiselect__tags-wrap")[0];
|
||||
|
||||
if (tags.hasChildNodes()) {
|
||||
let children = tags.childNodes;
|
||||
@@ -232,8 +211,8 @@ export default {
|
||||
},
|
||||
selectEvents() {
|
||||
let selectedUsersId = this.users.selected.map((a) => a.id);
|
||||
this.calendarEvents.selected = this.calendarEvents.loaded.filter(
|
||||
(a) => selectedUsersId.includes(a.id),
|
||||
this.calendarEvents.selected = this.calendarEvents.loaded.filter((a) =>
|
||||
selectedUsersId.includes(a.id),
|
||||
);
|
||||
},
|
||||
selectUsers(value) {
|
||||
@@ -243,9 +222,7 @@ export default {
|
||||
this.updateEventsSource();
|
||||
},
|
||||
unSelectUsers(value) {
|
||||
this.users.selected = this.users.selected.filter(
|
||||
(a) => a.id != value.id,
|
||||
);
|
||||
this.users.selected = this.users.selected.filter((a) => a.id != value.id);
|
||||
this.selectEvents();
|
||||
this.updateEventsSource();
|
||||
},
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
chill_calendar:
|
||||
There are count ignored calendars by date filter: >-
|
||||
{nbIgnored, plural,
|
||||
=0 {Er zijn geen afspraken genegeerd door de datumfilter.}
|
||||
one {Er is een afspraak genegeerd door de datumfilter. Wijzig de datumfilter om deze te laten verschijnen.}
|
||||
few {# afspraken zijn genegeerd door de datumfilter. Wijzig de datumfilter om deze te laten verschijnen.}
|
||||
other {# afspraken zijn genegeerd door de datumfilter. Wijzig de datumfilter om deze te laten verschijnen.}
|
||||
}
|
||||
@@ -26,149 +26,3 @@ The calendar item has been successfully removed.: De afspraak is verwijdert
|
||||
From the day: Vanaf
|
||||
to the day: tot
|
||||
Transform to activity: In activiteit omzetten
|
||||
Create a new calendar in accompanying course: Afspraak aanmaken in het traject
|
||||
Will send SMS: Er zal een herinnerings-sms worden verzonden
|
||||
Will not send SMS: Er wordt geen herinnerings-sms verzonden
|
||||
SMS already sent: Er is een sms verzonden
|
||||
|
||||
Canceled by: Geannuleerd door
|
||||
Calendar configuration: Beheer van afspraken
|
||||
|
||||
crud:
|
||||
calendar_cancel-reason:
|
||||
index:
|
||||
title: Lijst van annuleringsredenen
|
||||
add_new: Nieuwe toevoegen
|
||||
title_new: Nieuwe annuleringsreden
|
||||
title_edit: Annuleringsreden bewerken
|
||||
|
||||
chill_calendar:
|
||||
canceled: Geannuleerd
|
||||
cancel_reason: Reden van annulering
|
||||
cancel_calendar_item: Afspraak annuleren
|
||||
calendar_canceled: De afspraak is geannuleerd
|
||||
canceled_by:
|
||||
user: Gebruiker
|
||||
person: Gebruiker
|
||||
other: Andere
|
||||
Document: Document van een afspraak
|
||||
form:
|
||||
The main user is mandatory. He will organize the appointment.: De hoofdgebruiker is verplicht. Hij is de organisator van de gebeurtenis.
|
||||
Create for referrer: Aanmaken voor de referent
|
||||
start date filter: Begin van de afspraak
|
||||
From: Van
|
||||
To: Tot
|
||||
Next calendars: Volgende afspraken
|
||||
Add a document: Document toevoegen
|
||||
Documents: Documenten
|
||||
Create and add a document: Aanmaken en document toevoegen
|
||||
Save and add a document: Opslaan en document toevoegen
|
||||
Create for me: Afspraak aanmaken voor mezelf
|
||||
Edit a document: Document bewerken
|
||||
Document title: Titel
|
||||
Document object: Document
|
||||
Add a document from template: Document toevoegen vanaf sjabloon
|
||||
Upload a document: Document uploaden
|
||||
Remove a calendar document: Document van een afspraak verwijderen
|
||||
Are you sure you want to remove the doc?: Weet u zeker dat u het gekoppelde document wilt verwijderen?
|
||||
Document outdated: De datum en tijd van de afspraak zijn gewijzigd na het aanmaken van het document
|
||||
|
||||
|
||||
|
||||
remote_ms_graph:
|
||||
freebusy_statuses:
|
||||
busy: Bezet
|
||||
free: Vrij
|
||||
tentative: In afwachting van bevestiging
|
||||
oof: Buiten kantoor
|
||||
workingElsewhere: Werkt elders
|
||||
unknown: Onbekend
|
||||
cancel_event_because_main_user_is_%label%: De gebeurtenis is overgedragen aan gebruiker %label%
|
||||
|
||||
remote_calendar:
|
||||
calendar_range_title: Chill-beschikbaarheidsperiode
|
||||
|
||||
invite:
|
||||
accepted: Geaccepteerd
|
||||
declined: Geweigerd
|
||||
pending: In afwachting
|
||||
tentative: Voorlopig geaccepteerd
|
||||
list:
|
||||
none: Er is geen uitnodiging
|
||||
title: Mijn uitnodigingen
|
||||
|
||||
# exports
|
||||
Exports of calendar: Exports van afspraken
|
||||
Count calendars: Aantal afspraken
|
||||
Count calendars by various parameters.: Telt het aantal afspraken op basis van verschillende parameters.
|
||||
|
||||
Average appointment duration: Gemiddelde duur van afspraken
|
||||
Get the average of appointment duration according to various filters: Berekent het gemiddelde van de duur van afspraken op basis van verschillende parameters.
|
||||
|
||||
Sum of appointment durations: Som van de duur van afspraken
|
||||
Get the sum of appointment durations according to various filters: Berekent de som van de duur van afspraken op basis van verschillende parameters.
|
||||
|
||||
'Filtered by agent: only %agents%': "Gefilterd op agenten: alleen %agents%"
|
||||
Filter calendars by agent: Afspraken filteren op agenten
|
||||
Filter calendars between certain dates: Afspraken filteren op datum van de afspraak
|
||||
'Filtered by calendars between %dateFrom% and %dateTo%': 'Gefilterd op afspraken tussen %dateFrom% en %dateTo%'
|
||||
'Filtered by calendar range: only %calendarRange%': 'Gefilterd op afspraken per beschikbaarheidsperiode: alleen de %calendarRange%'
|
||||
Filter by calendar range: Filteren op afspraken binnen een beschikbaarheidsperiode of niet
|
||||
|
||||
Group calendars by agent: Afspraken groeperen op agent
|
||||
Group calendars by location type: Afspraken groeperen op type locatie
|
||||
Group calendars by location: Afspraken groeperen op afspraaklocatie
|
||||
Group calendars by cancel reason: Afspraken groeperen op annuleringsreden
|
||||
Group calendars by month and year: Afspraken groeperen op maand en jaar
|
||||
Group calendars by urgency: Afspraken groeperen op urgent of niet
|
||||
|
||||
export:
|
||||
aggregator.calendar:
|
||||
agent_job:
|
||||
Group calendars by agent job: Afspraken groeperen op beroep van de agent
|
||||
agent_scope:
|
||||
Group calendars by agent scope: Afspraken groeperen op dienst van de agent
|
||||
filter.calendar:
|
||||
agent_job:
|
||||
Filter calendars by agent job: Afspraken filteren op beroepen van de agenten (hoofdgebruikers)
|
||||
'Filtered by agent job: only %jobs%': 'Gefilterd op beroepen van de agenten (hoofdgebruikers): alleen de %jobs%'
|
||||
agent_scope:
|
||||
Filter calendars by agent scope: Afspraken filteren op diensten van de agenten (hoofdgebruikers)
|
||||
'Filtered by agent scope: only %scopes%': 'Gefilterd op diensten van de agenten (hoofdgebruikers): alleen de diensten %scopes%'
|
||||
|
||||
Scope: Dienst
|
||||
Job: Beroep
|
||||
Location type: Type locatie
|
||||
Location: Afspraaklocatie
|
||||
by month and year: Per maand en jaar
|
||||
|
||||
is urgent: Urgent
|
||||
is not urgent: Niet urgent
|
||||
has calendar range: Binnen een beschikbaarheidsperiode?
|
||||
Not made within a calendar range: Afspraak binnen een beschikbaarheidsperiode
|
||||
Made within a calendar range: Afspraak buiten een beschikbaarheidsperiode
|
||||
|
||||
docgen:
|
||||
calendar:
|
||||
Base context for calendar: 'Afspraak: basiscontext'
|
||||
A base context for generating document on calendar: Context voor het genereren van documenten op basis van afspraken
|
||||
Track changes on datetime and warn user if date time is updated after the doc generation: Wijzigingen in het document volgen en gebruikers waarschuwen dat de datum en tijd zijn gewijzigd na het genereren van het document
|
||||
Ask main person: Vragen om een gebruiker te kiezen uit de deelnemers aan de afspraken
|
||||
Main person label: Label om de gebruiker te kiezen
|
||||
Ask third party: Vragen om een derde te kiezen uit de deelnemers aan de afspraken
|
||||
Third party label: Label om de derde te kiezen
|
||||
Destinee: Geadresseerde
|
||||
None: Geen keuze
|
||||
title of the generated document: Titel van het gegenereerde document
|
||||
|
||||
CHILL_CALENDAR_CALENDAR_CREATE: Afspraken aanmaken
|
||||
CHILL_CALENDAR_CALENDAR_EDIT: Afspraken bewerken
|
||||
CHILL_CALENDAR_CALENDAR_DELETE: Afspraken verwijderen
|
||||
CHILL_CALENDAR_CALENDAR_SEE: Afspraken bekijken
|
||||
|
||||
|
||||
generic_doc:
|
||||
filter:
|
||||
keys:
|
||||
accompanying_period_calendar_document: Document van afspraken van trajecten
|
||||
person_calendar_document: Document van afspraken van de gebruiker
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
calendar:
|
||||
At least {{ limit }} person is required.: Minimaal {{ limit }} persoon is vereist voor deze afspraak
|
||||
An end date is required: Geef een einddatum en -tijd op
|
||||
A start date is required: Geef een startdatum en -tijd op
|
||||
A location is required: Geef een locatie op
|
||||
A main user is mandator: Geef een hoofdgebruiker op
|
||||
@@ -1,103 +1,3 @@
|
||||
'Not available in your language': 'Vertaling niet mogelijk in het Nederlands'
|
||||
'Other value': 'Andere mogelijkheid'
|
||||
'None': 'Niet gespecifieerd'
|
||||
|
||||
#customfieldsgroup rendering
|
||||
Empty data: Lege gegevens
|
||||
No data to show: Geen waarden om te tonen
|
||||
|
||||
#customfieldsgroup administration
|
||||
CustomFieldsGroup list: Groepen van aangepaste velden
|
||||
CustomFieldsGroup creation: Nieuwe groep van aangepaste velden
|
||||
Entity: Entiteit
|
||||
"Is default ?": "Standaard?"
|
||||
"Some module select default groups for some usage. Example: the default person group is shown under person page.": "Sommige modules selecteren standaardgroepen voor bepaald gebruik. Voorbeeld: de standaard persoonsgroep wordt getoond op de persoonspagina"
|
||||
Make default: Groep standaard maken
|
||||
Create a new group: Nieuwe groep aanmaken
|
||||
CustomFieldsGroup details: Details van de groep aangepaste velden
|
||||
Fields associated with this group: Velden geassocieerd met deze groep
|
||||
Any field is currently associated with this group: Geen veld is momenteel geassocieerd met deze groep
|
||||
Create a new field: Nieuw aangepast veld aanmaken
|
||||
Add a new field: Aangepast veld toevoegen
|
||||
ordering: volgorde
|
||||
label_field: label van het veld
|
||||
active: actief
|
||||
No value defined for this option: Geen waarde gedefinieerd voor deze optie
|
||||
CustomFieldsGroup edit: Bewerken van een groep aangepaste velden
|
||||
type: type
|
||||
The custom fields group has been created: De groep aangepaste velden is aangemaakt
|
||||
The custom fields group has been updated: De groep aangepaste velden is bijgewerkt
|
||||
The custom fields group form contains errors: Het formulier bevat fouten
|
||||
The default custom fields group has been changed: De standaardgroep is gewijzigd
|
||||
|
||||
|
||||
#menu entries
|
||||
Custom fields configuration: Aangepaste velden
|
||||
CustomFields List: Lijst van aangepaste velden
|
||||
CustomFields Groups: Groep van aangepaste velden
|
||||
|
||||
#customfield administration
|
||||
Custom fields: Aangepaste velden
|
||||
CustomFields configuration: Beheer van aangepaste velden
|
||||
CustomField edit: Wijziging van een aangepast veld
|
||||
CustomField creation: Nieuw aangepast veld
|
||||
General informations: Algemene informatie
|
||||
Options: Opties
|
||||
Custom fields group: Groep van aangepaste velden
|
||||
Ordering: Volgorde van verschijning
|
||||
Required field: Verplicht veld
|
||||
An answer is required: Een antwoord is vereist
|
||||
Any answer is required: Geen antwoord is vereist
|
||||
Back to the group: Terug naar de groep aangepaste velden
|
||||
Slug: Tekstuele identificatie
|
||||
The custom field has been created: Het aangepaste veld is aangemaakt
|
||||
The custom field form contains errors: Het formulier bevat fouten
|
||||
The custom field has been updated: Het aangepaste veld is bijgewerkt
|
||||
|
||||
#custom field name
|
||||
choice: keuze
|
||||
Title: Titel
|
||||
text: tekst
|
||||
Text field: Tekstveld
|
||||
Date field: Datumveld
|
||||
|
||||
#custom field choice
|
||||
Multiplicity: Multipliciteit
|
||||
Multiple: Meerdere
|
||||
Unique: Slechts één keuze mogelijk
|
||||
Choice display: Weergave van keuzes
|
||||
Expanded: Uitgebreide keuzes (radioknoppen)
|
||||
Non expanded: Gegroepeerde keuzes
|
||||
Allow other: Andere waarde toestaan
|
||||
No: Nee
|
||||
Yes: Ja
|
||||
Other value label (empty if use by default): Label van het veld "andere waarde"
|
||||
Choices: Keuzes
|
||||
Add an element: Element toevoegen
|
||||
|
||||
#custom field text
|
||||
Max length: Maximale lengte
|
||||
Box appearance: Verschijning van het veld
|
||||
Multiple boxes on the line: Meerdere velden op de lijn
|
||||
One box on the line: Slechts één veld op de lijn
|
||||
|
||||
#custom field title
|
||||
Title level: Titelniveau
|
||||
Main title: Hoofdtitel
|
||||
Subtitle: Ondertitel
|
||||
|
||||
#custom field number
|
||||
Greater or equal than: Groter dan of gelijk aan
|
||||
Lesser or equal than: Kleiner dan of gelijk aan
|
||||
Precision: Precisie
|
||||
Text after the field: Tekst na het veld
|
||||
Number field: Nummerveld
|
||||
|
||||
#custom field long choice
|
||||
Options key: Sleutel van opties
|
||||
Choose a value: Kies een waarde
|
||||
Long choice field: Veld met vooraf geregistreerde keuzes
|
||||
|
||||
#Custom field date
|
||||
Greater or equal than (expression like 1 day ago, 2 years ago, +1 month, today, tomorrow, or date with format YYYY-mm-dd): Datum na (geef een PHP-expressie op zoals '1 day ago', '2 years ago', '+1 month', 'today', 'tomorrow', ...)
|
||||
Lesser or equal than (expression like 1 day ago, 2 years ago, +1 month, today, tomorrow, or date with format YYYY-mm-dd): Datum voor (geef een PHP-expressie op zoals '1 day ago', '2 years ago', '+1 month', 'today', 'tomorrow', ...)
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
Characters not allowed. Only lowercase letters, numbers and "-" are allowed.: Tekens niet toegestaan. Alleen kleine letters, cijfers en "-" zijn toegestaan.
|
||||
'This date must be after or equal to %date%': Deze datum moet gelijk zijn aan of na %date%
|
||||
'This date must be before or equal to %date%': Deze datum moet voor of gelijk zijn aan %date%
|
||||
@@ -20,10 +20,7 @@
|
||||
</option>
|
||||
<template v-for="t in templates" :key="t.id">
|
||||
<option :value="t.id">
|
||||
{{
|
||||
localizeString(t.name) ||
|
||||
"Aucun nom défini"
|
||||
}}
|
||||
{{ localizeString(t.name) || "Aucun nom défini" }}
|
||||
</option>
|
||||
</template>
|
||||
</select>
|
||||
@@ -31,9 +28,7 @@
|
||||
v-if="canGenerate"
|
||||
class="btn btn-update btn-sm change-icon"
|
||||
:href="buildUrlGenerate"
|
||||
@click.prevent="
|
||||
clickGenerate($event, buildUrlGenerate)
|
||||
"
|
||||
@click.prevent="clickGenerate($event, buildUrlGenerate)"
|
||||
><i class="fa fa-fw fa-cog"
|
||||
/></a>
|
||||
<a
|
||||
|
||||
@@ -25,8 +25,6 @@ use Symfony\Component\Mailer\MailerInterface;
|
||||
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
// use Symfony\Component\Translation\LocaleSwitcher;
|
||||
|
||||
/**
|
||||
* @see OnGenerationFailsTest for test suite
|
||||
*/
|
||||
@@ -42,7 +40,6 @@ final readonly class OnGenerationFails implements EventSubscriberInterface
|
||||
private StoredObjectRepositoryInterface $storedObjectRepository,
|
||||
private TranslatorInterface $translator,
|
||||
private UserRepositoryInterface $userRepository,
|
||||
// private LocaleSwitcher $localeSwitcher,
|
||||
) {}
|
||||
|
||||
public static function getSubscribedEvents()
|
||||
@@ -121,25 +118,6 @@ final readonly class OnGenerationFails implements EventSubscriberInterface
|
||||
return;
|
||||
}
|
||||
|
||||
// Implementation with LocaleSwitcher (commented out - to be activated after migration to sf7.2):
|
||||
/*
|
||||
$this->localeSwitcher->runWithLocale($creator->getLocale(), function () use ($message, $errors, $template, $creator) {
|
||||
$email = (new TemplatedEmail())
|
||||
->to($message->getSendResultToEmail())
|
||||
->subject($this->translator->trans('docgen.failure_email.The generation of a document failed'))
|
||||
->textTemplate('@ChillDocGenerator/Email/on_generation_failed_email.txt.twig')
|
||||
->context([
|
||||
'errors' => $errors,
|
||||
'template' => $template,
|
||||
'creator' => $creator,
|
||||
'stored_object_id' => $message->getDestinationStoredObjectId(),
|
||||
]);
|
||||
|
||||
$this->mailer->send($email);
|
||||
});
|
||||
*/
|
||||
|
||||
// Current implementation:
|
||||
$email = (new TemplatedEmail())
|
||||
->to($message->getSendResultToEmail())
|
||||
->subject($this->translator->trans('docgen.failure_email.The generation of a document failed'))
|
||||
|
||||
@@ -27,8 +27,6 @@ use Symfony\Component\Messenger\Exception\UnrecoverableMessageHandlingException;
|
||||
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
// use Symfony\Component\Translation\LocaleSwitcher;
|
||||
|
||||
/**
|
||||
* Handle the request of document generation.
|
||||
*/
|
||||
@@ -48,7 +46,6 @@ class RequestGenerationHandler implements MessageHandlerInterface
|
||||
private readonly MailerInterface $mailer,
|
||||
private readonly TranslatorInterface $translator,
|
||||
private readonly StoredObjectManagerInterface $storedObjectManager,
|
||||
// private readonly LocaleSwitcher $localeSwitcher,
|
||||
) {}
|
||||
|
||||
public function __invoke(RequestGenerationMessage $message)
|
||||
@@ -125,30 +122,6 @@ class RequestGenerationHandler implements MessageHandlerInterface
|
||||
|
||||
private function sendDataDump(StoredObject $destinationStoredObject, RequestGenerationMessage $message): void
|
||||
{
|
||||
// Implementation with LocaleSwitcher (commented out - to be activated after migration to sf7.2):
|
||||
// Note: This method sends emails to admin addresses, not user addresses, so locale switching may not be needed
|
||||
/*
|
||||
$this->localeSwitcher->runWithLocale('fr', function () use ($destinationStoredObject, $message) {
|
||||
// Get the content of the document
|
||||
$content = $this->storedObjectManager->read($destinationStoredObject);
|
||||
$filename = $destinationStoredObject->getFilename();
|
||||
$contentType = $destinationStoredObject->getType();
|
||||
|
||||
// Create the email with the document as an attachment
|
||||
$email = (new TemplatedEmail())
|
||||
->to($message->getSendResultToEmail())
|
||||
->textTemplate('@ChillDocGenerator/Email/send_data_dump_to_admin.txt.twig')
|
||||
->context([
|
||||
'filename' => $filename,
|
||||
])
|
||||
->subject($this->translator->trans('docgen.data_dump_email.subject'))
|
||||
->attach($content, $filename, $contentType);
|
||||
|
||||
$this->mailer->send($email);
|
||||
});
|
||||
*/
|
||||
|
||||
// Current implementation:
|
||||
// Get the content of the document
|
||||
$content = $this->storedObjectManager->read($destinationStoredObject);
|
||||
$filename = $destinationStoredObject->getFilename();
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
docgen:
|
||||
# Geen ICU berichten nodig voor data_dump_email meer
|
||||
@@ -1,51 +0,0 @@
|
||||
docgen:
|
||||
Generate a document: Document genereren
|
||||
Generate: Genereren
|
||||
Document generation: Documentgeneratie
|
||||
Manage templates and document generation: Beheer van gegenereerde documenten en hun sjablonen
|
||||
Pick template context: Context kiezen
|
||||
Context: Context
|
||||
New template: Nieuw sjabloon
|
||||
Edit template: Sjabloon bewerken
|
||||
test generate: Generatie testen
|
||||
With context %name%: 'Met context "%name%"'
|
||||
|
||||
Doc generation failed: Het genereren van dit document is mislukt
|
||||
Doc generation is pending: Het genereren van dit document is bezig
|
||||
Come back later: Kom later terug
|
||||
|
||||
Send report to: Rapport verzenden naar
|
||||
Send report errors to this email address: Foutrapporten worden verzonden naar het opgegeven e-mailadres
|
||||
Generate as creator: Genereren als
|
||||
The document will be generated as the given creator: Het document wordt gegenereerd namens de opgegeven gebruiker
|
||||
Show data instead of generating: Gegevens tonen in plaats van document genereren
|
||||
|
||||
Any template configured: Geen documentsjabloon geconfigureerd
|
||||
|
||||
entity_id_placeholder: Identificatie van de entiteit
|
||||
|
||||
failure_email:
|
||||
The generation of a document failed: Het genereren van een document is mislukt
|
||||
The generation of the document %template_name% failed: Het genereren van een document op basis van sjabloon {{ template_name }} is mislukt.
|
||||
The following errors were encoutered: De volgende fouten zijn opgetreden
|
||||
Forward this email to your administrator for solving: Stuur dit bericht door naar uw beheerder voor probleemoplossing.
|
||||
References: Referenties
|
||||
|
||||
data_dump_email:
|
||||
subject: Inhoud van documentgeneratiegegevens beschikbaar
|
||||
Dear: Beste
|
||||
data_dump_ready_and_attached: >-
|
||||
De inhoud van de gegevens is beschikbaar. U vindt deze als bijlage bij deze e-mail.
|
||||
filename: >-
|
||||
Bestandsnaam: %filename%
|
||||
|
||||
|
||||
|
||||
crud:
|
||||
docgen_template:
|
||||
index:
|
||||
title: Documentgeneratie
|
||||
add_new: Aanmaken
|
||||
|
||||
|
||||
Template file: Sjabloonbestand
|
||||
@@ -94,7 +94,7 @@ class StoredObject implements Document, TrackCreationInterface
|
||||
/**
|
||||
* @var Collection<int, StoredObjectVersion>&Selectable<int, StoredObjectVersion>
|
||||
*/
|
||||
#[ORM\OneToMany(mappedBy: 'storedObject', targetEntity: StoredObjectVersion::class, cascade: ['persist'], orphanRemoval: true)]
|
||||
#[ORM\OneToMany(mappedBy: 'storedObject', targetEntity: StoredObjectVersion::class, cascade: ['persist'], orphanRemoval: true, fetch: 'EAGER')]
|
||||
private Collection&Selectable $versions;
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,7 @@ use Chill\DocStoreBundle\Entity\PersonDocument;
|
||||
use Chill\MainBundle\Form\Type\ChillDateType;
|
||||
use Chill\MainBundle\Form\Type\ChillTextareaType;
|
||||
use Chill\MainBundle\Form\Type\ScopePickerType;
|
||||
use Chill\MainBundle\Security\Resolver\CenterResolverDispatcher;
|
||||
use Chill\MainBundle\Security\Resolver\ScopeResolverDispatcher;
|
||||
use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
|
||||
use Doctrine\ORM\EntityRepository;
|
||||
@@ -29,7 +30,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class PersonDocumentType extends AbstractType
|
||||
{
|
||||
public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly ScopeResolverDispatcher $scopeResolverDispatcher, private readonly ParameterBagInterface $parameterBag) {}
|
||||
public function __construct(private readonly TranslatableStringHelperInterface $translatableStringHelper, private readonly ScopeResolverDispatcher $scopeResolverDispatcher, private readonly ParameterBagInterface $parameterBag, private readonly CenterResolverDispatcher $centerResolverDispatcher) {}
|
||||
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
@@ -56,8 +57,8 @@ class PersonDocumentType extends AbstractType
|
||||
|
||||
if ($isScopeConcerned && $this->parameterBag->get('chill_main')['acl']['form_show_scopes']) {
|
||||
$builder->add('scope', ScopePickerType::class, [
|
||||
'center' => $this->centerResolverDispatcher->resolveCenter($document),
|
||||
'role' => $options['role'],
|
||||
'subject' => $document,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,9 @@ const startApp = (
|
||||
|
||||
const inputTitle = collectionEntry?.querySelector("input[type='text']");
|
||||
|
||||
const input_stored_object: HTMLInputElement | null =
|
||||
divElement.querySelector("input[data-stored-object]");
|
||||
const input_stored_object: HTMLInputElement | null = divElement.querySelector(
|
||||
"input[data-stored-object]",
|
||||
);
|
||||
if (null === input_stored_object) {
|
||||
throw new Error("input to stored object not found");
|
||||
}
|
||||
@@ -53,9 +54,7 @@ const startApp = (
|
||||
console.log("version added", stored_object_version);
|
||||
this.$data.existingDoc = stored_object;
|
||||
this.$data.existingDoc.currentVersion = stored_object_version;
|
||||
input_stored_object.value = JSON.stringify(
|
||||
this.$data.existingDoc,
|
||||
);
|
||||
input_stored_object.value = JSON.stringify(this.$data.existingDoc);
|
||||
if (this.$data.inputTitle) {
|
||||
if (!this.$data.inputTitle?.value) {
|
||||
this.$data.inputTitle.value = file_name;
|
||||
|
||||
@@ -49,9 +49,7 @@
|
||||
<li v-if="isHistoryViewable">
|
||||
<history-button
|
||||
:stored-object="props.storedObject"
|
||||
:can-edit="
|
||||
canEdit && props.storedObject._permissions.canEdit
|
||||
"
|
||||
:can-edit="canEdit && props.storedObject._permissions.canEdit"
|
||||
></history-button>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -129,9 +127,7 @@ const props = withDefaults(defineProps<DocumentActionButtonsGroupConfig>(), {
|
||||
canDownload: true,
|
||||
canConvertPdf: true,
|
||||
returnPath:
|
||||
window.location.pathname +
|
||||
window.location.search +
|
||||
window.location.hash,
|
||||
window.location.pathname + window.location.search + window.location.hash,
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,9 +29,7 @@
|
||||
</modal>
|
||||
</teleport>
|
||||
<div class="col-12 m-auto sticky-top">
|
||||
<div
|
||||
class="row justify-content-center border-bottom pdf-tools d-md-none"
|
||||
>
|
||||
<div class="row justify-content-center border-bottom pdf-tools d-md-none">
|
||||
<div class="col-5 text-center turn-page">
|
||||
<select
|
||||
class="form-select form-select-sm"
|
||||
@@ -92,10 +90,7 @@
|
||||
v-if="signature.zones.length === 1 && signedState !== 'signed'"
|
||||
class="col-5 p-0 text-center turnSignature"
|
||||
>
|
||||
<button
|
||||
class="btn btn-light btn-sm"
|
||||
@click="goToSignatureZoneUnique"
|
||||
>
|
||||
<button class="btn btn-light btn-sm" @click="goToSignatureZoneUnique">
|
||||
{{ trans(SIGNATURES_GO_TO_SIGNATURE_UNIQUE) }}
|
||||
</button>
|
||||
</div>
|
||||
@@ -150,10 +145,7 @@
|
||||
:title="trans(SIGNATURES_ADD_SIGN_ZONE)"
|
||||
>
|
||||
<template v-if="canvasEvent === 'add'">
|
||||
<div
|
||||
class="spinner-border spinner-border-sm"
|
||||
role="status"
|
||||
>
|
||||
<div class="spinner-border spinner-border-sm" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
</template>
|
||||
@@ -207,10 +199,7 @@
|
||||
v-if="signature.zones.length === 1 && signedState !== 'signed'"
|
||||
class="col-4 d-xl-none text-center turnSignature p-0"
|
||||
>
|
||||
<button
|
||||
class="btn btn-light btn-sm"
|
||||
@click="goToSignatureZoneUnique"
|
||||
>
|
||||
<button class="btn btn-light btn-sm" @click="goToSignatureZoneUnique">
|
||||
{{ trans(SIGNATURES_GO_TO_SIGNATURE_UNIQUE) }}
|
||||
</button>
|
||||
</div>
|
||||
@@ -238,10 +227,7 @@
|
||||
v-if="signature.zones.length === 1 && signedState !== 'signed'"
|
||||
class="col-4 d-none d-xl-flex p-0 text-center turnSignature"
|
||||
>
|
||||
<button
|
||||
class="btn btn-light btn-sm"
|
||||
@click="goToSignatureZoneUnique"
|
||||
>
|
||||
<button class="btn btn-light btn-sm" @click="goToSignatureZoneUnique">
|
||||
{{ trans(SIGNATURES_GO_TO_SIGNATURE_UNIQUE) }}
|
||||
</button>
|
||||
</div>
|
||||
@@ -299,10 +285,7 @@
|
||||
</template>
|
||||
<template v-else>
|
||||
{{ trans(SIGNATURES_CLICK_ON_DOCUMENT) }}
|
||||
<div
|
||||
class="spinner-border spinner-border-sm"
|
||||
role="status"
|
||||
>
|
||||
<div class="spinner-border spinner-border-sm" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
</template>
|
||||
@@ -562,14 +545,8 @@ const addCanvasEvents = () => {
|
||||
);
|
||||
});
|
||||
} else {
|
||||
const canvas = document.querySelectorAll(
|
||||
"canvas",
|
||||
)[0] as HTMLCanvasElement;
|
||||
canvas.addEventListener(
|
||||
"pointerup",
|
||||
(e) => canvasClick(e, canvas),
|
||||
false,
|
||||
);
|
||||
const canvas = document.querySelectorAll("canvas")[0] as HTMLCanvasElement;
|
||||
canvas.addEventListener("pointerup", (e) => canvasClick(e, canvas), false);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -605,11 +582,7 @@ const hitSignature = (
|
||||
scaleYToCanvas(zone.y, canvas.height, zone.PDFPage.height) <
|
||||
xy[1] &&
|
||||
xy[1] <
|
||||
scaleYToCanvas(
|
||||
zone.height - zone.y,
|
||||
canvas.height,
|
||||
zone.PDFPage.height,
|
||||
) +
|
||||
scaleYToCanvas(zone.height - zone.y, canvas.height, zone.PDFPage.height) +
|
||||
zone.PDFPage.height * zoom.value;
|
||||
|
||||
const selectZone = async (z: SignatureZone, canvas: HTMLCanvasElement) => {
|
||||
@@ -625,8 +598,7 @@ const selectZoneEvent = (e: PointerEvent, canvas: HTMLCanvasElement) =>
|
||||
signature.zones
|
||||
.filter(
|
||||
(z) =>
|
||||
(z.PDFPage.index + 1 === getCanvasId(canvas) &&
|
||||
multiPage.value) ||
|
||||
(z.PDFPage.index + 1 === getCanvasId(canvas) && multiPage.value) ||
|
||||
(z.PDFPage.index + 1 === page.value && !multiPage.value),
|
||||
)
|
||||
.map((z) => {
|
||||
|
||||
@@ -153,12 +153,10 @@ const handleFile = async (file: File): Promise<void> => {
|
||||
</p>
|
||||
<!-- todo i18n -->
|
||||
<p v-if="has_existing_doc">
|
||||
Déposez un document ou cliquez ici pour remplacer le document
|
||||
existant
|
||||
Déposez un document ou cliquez ici pour remplacer le document existant
|
||||
</p>
|
||||
<p v-else>
|
||||
Déposez un document ou cliquez ici pour ouvrir le navigateur de
|
||||
fichier
|
||||
Déposez un document ou cliquez ici pour ouvrir le navigateur de fichier
|
||||
</p>
|
||||
</div>
|
||||
<div v-else class="waiting">
|
||||
|
||||
@@ -35,9 +35,7 @@ async function download_and_open(event: Event): Promise<void> {
|
||||
if (null === state.content) {
|
||||
event.preventDefault();
|
||||
|
||||
const raw = await download_doc(
|
||||
build_convert_link(props.storedObject.uuid),
|
||||
);
|
||||
const raw = await download_doc(build_convert_link(props.storedObject.uuid));
|
||||
state.content = window.URL.createObjectURL(raw);
|
||||
|
||||
button.href = window.URL.createObjectURL(raw);
|
||||
|
||||
@@ -42,9 +42,7 @@ const editionUntilFormatted = computed<string>(() => {
|
||||
<modal v-if="state.modalOpened" @close="state.modalOpened = false">
|
||||
<template v-slot:body>
|
||||
<div class="desktop-edit">
|
||||
<p class="center">
|
||||
Veuillez enregistrer vos modifications avant le
|
||||
</p>
|
||||
<p class="center">Veuillez enregistrer vos modifications avant le</p>
|
||||
<p>
|
||||
<strong>{{ editionUntilFormatted }}</strong>
|
||||
</p>
|
||||
@@ -57,23 +55,21 @@ const editionUntilFormatted = computed<string>(() => {
|
||||
|
||||
<p>
|
||||
<small
|
||||
>Le document peut être édité uniquement en utilisant
|
||||
Libre Office.</small
|
||||
>Le document peut être édité uniquement en utilisant Libre
|
||||
Office.</small
|
||||
>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<small
|
||||
>En cas d'échec lors de l'enregistrement, sauver le
|
||||
document sur le poste de travail avant de le déposer
|
||||
à nouveau ici.</small
|
||||
>En cas d'échec lors de l'enregistrement, sauver le document sur
|
||||
le poste de travail avant de le déposer à nouveau ici.</small
|
||||
>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<small
|
||||
>Vous pouvez naviguez sur d'autres pages pendant
|
||||
l'édition.</small
|
||||
>Vous pouvez naviguez sur d'autres pages pendant l'édition.</small
|
||||
>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -95,10 +95,7 @@ async function download_and_open(): Promise<void> {
|
||||
let raw;
|
||||
|
||||
try {
|
||||
raw = await download_and_decrypt_doc(
|
||||
props.storedObject,
|
||||
props.atVersion,
|
||||
);
|
||||
raw = await download_and_decrypt_doc(props.storedObject, props.atVersion);
|
||||
} catch (e) {
|
||||
console.error("error while downloading and decrypting document");
|
||||
console.error(e);
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
<a
|
||||
:class="Object.assign(props.classes, { btn: true })"
|
||||
@click="beforeLeave($event)"
|
||||
:href="
|
||||
build_wopi_editor_link(props.storedObject.uuid, props.returnPath)
|
||||
"
|
||||
:href="build_wopi_editor_link(props.storedObject.uuid, props.returnPath)"
|
||||
>
|
||||
<i class="fa fa-paragraph"></i>
|
||||
Editer en ligne
|
||||
|
||||
@@ -145,9 +145,7 @@ async function download_info_link(
|
||||
function build_wopi_editor_link(uuid: string, returnPath?: string) {
|
||||
if (returnPath === undefined) {
|
||||
returnPath =
|
||||
window.location.pathname +
|
||||
window.location.search +
|
||||
window.location.hash;
|
||||
window.location.pathname + window.location.search + window.location.hash;
|
||||
}
|
||||
|
||||
return (
|
||||
@@ -177,8 +175,6 @@ async function download_and_decrypt_doc(
|
||||
throw new Error("no version associated to stored object");
|
||||
}
|
||||
|
||||
// sometimes, the downloadInfo may be embedded into the storedObject
|
||||
console.log("storedObject", storedObject);
|
||||
let downloadInfo;
|
||||
if (
|
||||
typeof storedObject._links !== "undefined" &&
|
||||
@@ -186,10 +182,7 @@ async function download_and_decrypt_doc(
|
||||
) {
|
||||
downloadInfo = storedObject._links.downloadLink;
|
||||
} else {
|
||||
downloadInfo = await download_info_link(
|
||||
storedObject,
|
||||
atVersionToDownload,
|
||||
);
|
||||
downloadInfo = await download_info_link(storedObject, atVersionToDownload);
|
||||
}
|
||||
|
||||
const rawResponse = await window.fetch(downloadInfo.url);
|
||||
@@ -244,10 +237,7 @@ async function download_doc_as_pdf(storedObject: StoredObject): Promise<Blob> {
|
||||
}
|
||||
|
||||
if (storedObject.currentVersion?.type === "application/pdf") {
|
||||
return download_and_decrypt_doc(
|
||||
storedObject,
|
||||
storedObject.currentVersion,
|
||||
);
|
||||
return download_and_decrypt_doc(storedObject, storedObject.currentVersion);
|
||||
}
|
||||
|
||||
const convertLink = build_convert_link(storedObject.uuid);
|
||||
|
||||
@@ -43,11 +43,17 @@ class StoredObjectVersionNormalizer implements NormalizerInterface, NormalizerAw
|
||||
'createdBy' => $this->normalizer->normalize($object->getCreatedBy(), $format, [...$context, UserNormalizer::AT_DATE => $object->getCreatedAt()]),
|
||||
];
|
||||
|
||||
if (in_array(self::WITH_POINT_IN_TIMES_CONTEXT, $context[AbstractNormalizer::GROUPS] ?? [], true)) {
|
||||
$normalizationGroups = $context[AbstractNormalizer::GROUPS] ?? [];
|
||||
|
||||
if (is_string($normalizationGroups)) {
|
||||
$normalizationGroups = [$normalizationGroups];
|
||||
}
|
||||
|
||||
if (in_array(self::WITH_POINT_IN_TIMES_CONTEXT, $normalizationGroups, true)) {
|
||||
$data['point-in-times'] = $this->normalizer->normalize($object->getPointInTimes(), $format, $context);
|
||||
}
|
||||
|
||||
if (in_array(self::WITH_RESTORED_CONTEXT, $context[AbstractNormalizer::GROUPS] ?? [], true)) {
|
||||
if (in_array(self::WITH_RESTORED_CONTEXT, $normalizationGroups, true)) {
|
||||
$data['from-restored'] = $this->normalizer->normalize($object->getCreatedFrom(), $format, [AbstractNormalizer::GROUPS => ['read']]);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
acc_course_document:
|
||||
duplicated_at: >-
|
||||
Gedupliceerd op {at, date, long} om {at, time, short}
|
||||
|
||||
workflow:
|
||||
public_link:
|
||||
doc_shared_by_at_explanation: >-
|
||||
Het document is met u gedeeld door {byUser}, op {at, date, long} om {at, time, short}.
|
||||
doc_shared_automatically_at_explanation: >-
|
||||
Het document is met u gedeeld op {at, date, long} om {at, time, short}
|
||||
|
||||
@@ -1,130 +1,2 @@
|
||||
Document: Document
|
||||
Documents: Documenten
|
||||
Documents for %name%: Documenten van %name%
|
||||
Preparing: In voorbereiding
|
||||
Ready to show: Klaar om te bekijken
|
||||
Download: Downloaden
|
||||
Download existing file: Bestaand bestand downloaden
|
||||
Create new document: Nieuw document aanmaken
|
||||
New document for %name%: Nieuw document voor %name%
|
||||
Editing document for %name%: Document bewerken voor %name%
|
||||
Edit Document: Document bewerken
|
||||
Update document: Document bijwerken
|
||||
Edit attributes: Documenteigenschappen bewerken
|
||||
Existing document: Bestaand document
|
||||
No document to download: Geen document om te downloaden
|
||||
"Choose a document category": Kies een documentcategorie
|
||||
No document found: Geen document gevonden
|
||||
The document is successfully registered: Het document is geregistreerd
|
||||
The document is successfully updated: Het document is bijgewerkt
|
||||
Any description: Geen beschrijving
|
||||
Document from person %name%: Document van gebruiker %name%
|
||||
See the document: Document bekijken
|
||||
|
||||
document:
|
||||
Any title: Geen titel
|
||||
replace: Vervangen
|
||||
Add: Document toevoegen
|
||||
|
||||
generic_doc:
|
||||
filter:
|
||||
keys:
|
||||
accompanying_course_document: Document van het traject
|
||||
person_document: Documenten van de gebruiker
|
||||
date-range: Datum van het document
|
||||
|
||||
# delete
|
||||
Delete document ?: Document verwijderen?
|
||||
Are you sure you want to remove this document ?: Weet u zeker dat u dit document wilt verwijderen?
|
||||
The document is successfully removed: Het document is verwijderd
|
||||
|
||||
# dropzone upload
|
||||
File too big: Bestand te groot
|
||||
Drop your file or click here: Klik hier of sleep uw nieuwe bestand naar deze zone
|
||||
Remove file in order to upload a new one: Verwijder dit bestand om een nieuw bestand in te voegen
|
||||
Max files exceeded. Remove previous files: Maximum aantal bestanden bereikt. Verwijder de vorige
|
||||
Cancel upload: Upload annuleren
|
||||
Are you sure you want to cancel this upload ?: Weet u zeker dat u deze upload wilt annuleren?
|
||||
Upload canceled: Upload geannuleerd
|
||||
Remove existing file: Bestaand document verwijderen
|
||||
|
||||
stored_object:
|
||||
Insert a document: Document toevoegen
|
||||
|
||||
# ROLES
|
||||
PersonDocument: Documenten
|
||||
CHILL_PERSON_DOCUMENT_CREATE: Document toevoegen
|
||||
CHILL_PERSON_DOCUMENT_DELETE: Document verwijderen
|
||||
CHILL_PERSON_DOCUMENT_SEE: Document bekijken
|
||||
CHILL_PERSON_DOCUMENT_SEE_DETAILS: Details van een document bekijken
|
||||
CHILL_PERSON_DOCUMENT_UPDATE: Document bewerken
|
||||
|
||||
# Admin
|
||||
Documents configuration: Documentenconfiguratie
|
||||
Documents configuration menu: Documenten
|
||||
Documents categories: Documentcategorieën
|
||||
|
||||
Document category list: Documentcategorieën
|
||||
Document category show: Documentcategorie bekijken
|
||||
Document category edit: Documentcategorie bewerken
|
||||
Creator bundle id: Module
|
||||
Bundle id: Module
|
||||
Internal id inside creator bundle: Identificatie
|
||||
Id inside bundle: Identificatie
|
||||
Document class: Documentklasse
|
||||
no records found:
|
||||
Create new category: Nieuwe categorie aanmaken
|
||||
Back to the category list: Terug naar de lijst
|
||||
Create new DocumentCategory: Nieuwe documentcategorie aanmaken
|
||||
Accompanying period document: Begeleidingstrajectdocument
|
||||
Person document: Persoonsdocument
|
||||
|
||||
# WOPI EDIT
|
||||
online_edit_document: Online bewerken
|
||||
|
||||
workflow:
|
||||
Document deleted: Document verwijderd
|
||||
public_link:
|
||||
shared_doc: Gedeeld document
|
||||
title: Gedeeld document
|
||||
main_document: Hoofddocument
|
||||
attachment: Bijlage
|
||||
|
||||
# ROLES
|
||||
accompanyingCourseDocument: Documenten in begeleidingstrajecten
|
||||
CHILL_ACCOMPANYING_COURSE_DOCUMENT_CREATE: Document aanmaken
|
||||
CHILL_ACCOMPANYING_COURSE_DOCUMENT_DELETE: Document verwijderen
|
||||
CHILL_ACCOMPANYING_COURSE_DOCUMENT_SEE: Documenten bekijken
|
||||
CHILL_ACCOMPANYING_COURSE_DOCUMENT_SEE_DETAILS: Details van een document bekijken
|
||||
CHILL_ACCOMPANYING_COURSE_DOCUMENT_UPDATE: Document bewerken
|
||||
|
||||
entity_display_title:
|
||||
Document (n°%doc%): "Document (nr. %doc%)"
|
||||
Doc for evaluation (n°%eval%): Document van evaluatie nr. %eval%
|
||||
|
||||
|
||||
# SIGNATURES
|
||||
|
||||
signatures:
|
||||
yes: Ja
|
||||
are_you_sure: Weet u het zeker?
|
||||
you_are_going_to_sign: U gaat het document ondertekenen
|
||||
signature_confirmation: Bevestiging van de ondertekening
|
||||
sign: Ondertekenen
|
||||
choose_another_signature: Een andere zone kiezen
|
||||
cancel: Annuleren
|
||||
last_sign_zone: Vorige ondertekeningszone
|
||||
next_sign_zone: Volgende ondertekeningszone
|
||||
add_sign_zone: Ondertekeningszone toevoegen
|
||||
click_on_document: Klik op het document
|
||||
last_zone: Vorige zone
|
||||
next_zone: Volgende zone
|
||||
add_zone: Zone toevoegen
|
||||
another_zone: Andere zone
|
||||
electronic_signature_in_progress: Elektronische ondertekening bezig...
|
||||
loading: Laden...
|
||||
remove_sign_zone: Zone verwijderen
|
||||
return: Terug
|
||||
see_all_pages: Alle pagina's bekijken
|
||||
all_pages: Alle pagina's
|
||||
go_to_signature_unique: Naar de ondertekeningszone gaan
|
||||
Doc for evaluation (n°%eval%): Evaluatiedocument (n°%eval%)
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
The file is not stored properly: Het bestand is niet correct geüpload
|
||||
Upload a document: Upload een document
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
<ul class="record_actions">
|
||||
<li>
|
||||
<a href="{{ path('chill_event__event_show', { 'id' : event.id } ) }}" class="btn btn-cancel">
|
||||
<a href="{{ path('chill_event__event_show', { 'event_id' : event.id } ) }}" class="btn btn-cancel">
|
||||
{{ 'Back to the event'|trans }}
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
total events match the search: >-
|
||||
{ total, plural,
|
||||
=0 {Geen gebeurtenis komt overeen met de zoektermen}
|
||||
one {Eén gebeurtenis komt overeen met de zoektermen}
|
||||
other {# gebeurtenissen komen overeen met de zoektermen}
|
||||
}
|
||||
|
||||
count participations to this event: >-
|
||||
{ count, plural,
|
||||
=0 {Geen deelnemer aan de gebeurtenis}
|
||||
one {Eén deelnemer aan de gebeurtenis}
|
||||
other {# deelnemers aan de gebeurtenis}
|
||||
}
|
||||
|
||||
events:
|
||||
and_other_count_participants: >-
|
||||
{ count, plural,
|
||||
=0 {Geen andere deelnemer}
|
||||
one {en één andere deelnemer}
|
||||
other {en # andere deelnemers}
|
||||
}
|
||||
|
||||
ignored_participations: >-
|
||||
{ count, plural,
|
||||
one {De volgende persoon is genegeerd omdat hij/zij al deelneemt aan de gebeurtenis}
|
||||
other {De volgende personen zijn genegeerd omdat zij al deelnemen aan de gebeurtenis}
|
||||
}
|
||||
@@ -1,198 +0,0 @@
|
||||
#events
|
||||
Event type : Type evenement
|
||||
Event: Evenement
|
||||
Events: Evenementen
|
||||
'Event : %label%': Evenement "%label%"
|
||||
Participation: Deelname
|
||||
Participations: Deelnames
|
||||
Status: Status
|
||||
Last update: Laatste update
|
||||
Moderator: Verantwoordelijke
|
||||
Animators: Animatoren
|
||||
|
||||
#CRUD event
|
||||
Details of an event: Details van een evenement
|
||||
See details of the event: Details van het evenement bekijken
|
||||
Back to details of the event: Terug naar details van het evenement
|
||||
New event: Nieuw evenement
|
||||
Back to the most recent events: Terug naar de laatste evenementen
|
||||
'Back to %person% events': Terug naar evenementen van %person%
|
||||
Event creation: Evenement aanmaken
|
||||
Add an event: Evenement toevoegen
|
||||
Event edit: Evenement bewerken
|
||||
Edit the event: Evenement bewerken
|
||||
The event was updated: Het evenement is bijgewerkt
|
||||
The event was created: Het evenement is aangemaakt
|
||||
List of events: Lijst van evenementen
|
||||
Any location for this event: Geen locatie voor dit evenement
|
||||
|
||||
#crud participation
|
||||
Edit all the participations: Alle deelnames bewerken
|
||||
Edit the participation: Deelname aan het evenement bewerken
|
||||
Participation Edit: Deelname bewerken
|
||||
Add a participation: Deelnemer toevoegen
|
||||
Participation creation: Deelname toevoegen
|
||||
Associated person: Gekoppelde gebruiker
|
||||
Associated event: Gekoppeld evenement
|
||||
Back to the event: Terug naar het evenement
|
||||
The participation was created: De deelname is aangemaakt
|
||||
The participation was updated: De deelname is bijgewerkt
|
||||
'None of the requested people may participate the event: they are maybe already participating.': 'Geen van de aangegeven personen kan worden toegevoegd aan het evenement: zij nemen mogelijk al deel.'
|
||||
There are no participation to edit for this event: Er zijn geen deelnames voor dit evenement
|
||||
The participations have been successfully updated.: De deelnames zijn bijgewerkt.
|
||||
The participation has been sucessfully removed: De deelname is correct verwijderd.
|
||||
The event has been sucessfully removed: Het evenement en alle bijbehorende deelnames zijn correct verwijderd.
|
||||
The participations were created: De deelnames zijn aangemaakt
|
||||
Events participation: Deelname aan evenementen
|
||||
Remove participation: Deelname verwijderen
|
||||
Delete event: Evenement verwijderen
|
||||
Are you sure you want to remove that participation ?: Weet u zeker dat u deze deelname wilt verwijderen?
|
||||
Are you sure you want to remove that event ?: Weet u zeker dat u dit evenement en alle bijbehorende deelnames wilt verwijderen?
|
||||
Any participation for this person: Deze gebruiker neemt niet deel aan evenementen
|
||||
|
||||
#search
|
||||
Event search: Evenementen zoeken
|
||||
|
||||
CHILL_EVENT_UPDATE: Evenement bewerken
|
||||
CHILL_EVENT_CREATE: Evenement aanmaken
|
||||
CHILL_EVENT_SEE: Evenement bekijken
|
||||
CHILL_EVENT_SEE_DETAILS: Details van een evenement bekijken
|
||||
CHILL_EVENT_PARTICIPATION_CREATE: Deelname aanmaken
|
||||
CHILL_EVENT_PARTICIPATION_UPDATE: Deelname bewerken
|
||||
CHILL_EVENT_PARTICIPATION_SEE: Deelname bekijken
|
||||
CHILL_EVENT_PARTICIPATION_SEE_DETAILS: Details van een deelname bekijken
|
||||
|
||||
# TODO check place to put this
|
||||
Next step: Volgende stap
|
||||
To which territory should the event be associated ?: Aan welk territorium moet het evenement worden gekoppeld?
|
||||
|
||||
# timeline
|
||||
past: verleden
|
||||
futur: toekomst
|
||||
'subscribed by %user% to event "%event%" (%event_type%)': ingeschreven door %user% voor evenement "%event%" (%event_type%)
|
||||
Show the event: Evenement bekijken
|
||||
|
||||
Subscribe an event: Evenement toevoegen
|
||||
Pick an event: Evenement kiezen
|
||||
Pick a type of event: Type evenement kiezen
|
||||
Pick a moderator: Verantwoordelijke kiezen
|
||||
|
||||
# exports
|
||||
Select a format: Formaat kiezen
|
||||
Export: Exporteren
|
||||
|
||||
Count events: Aantal evenementen
|
||||
Count events by various parameters.: Telt het aantal evenementen volgens diverse criteria
|
||||
Exports of events: Exports van evenementen
|
||||
|
||||
Filtered by event date: Filteren op datum van evenement
|
||||
'Filtered by date of event: only between %date_from% and %date_to%': "Gefilterd op datum van evenement: alleen tussen %date_from% en %date_to%"
|
||||
Events after this date: Evenementen na deze datum
|
||||
Events before this date: Evenementen voor deze datum
|
||||
Filtered by event type: Filteren op type evenement
|
||||
'Filtered by event type: only %list%': "Gefilterd op type: alleen %list%"
|
||||
Group event by date: Groeperen op datum van evenement
|
||||
Group by event type: Groeperen op type evenement
|
||||
|
||||
Count event participants: Aantal deelnames
|
||||
Count participants to an event by various parameters.: Telt het aantal deelnames volgens diverse criteria
|
||||
Exports of event participants: Exports van deelnames
|
||||
'Filtered by participant roles: only %list%': "Gefilterd op deelnemersrollen: alleen %list%"
|
||||
Filter by participant roles: Filteren op deelnemersrollen
|
||||
Part roles: Deelnemersrollen
|
||||
Group by participant role: Groeperen op deelnemersrol
|
||||
|
||||
|
||||
Events configuration: Configuratie van evenementen
|
||||
Events configuration menu: Menu van evenementen
|
||||
Event status: Statussen per type evenement
|
||||
Event roles: Rollen per type evenement
|
||||
Event types: Types evenementen
|
||||
EventType list: Lijst van types evenementen
|
||||
EventType: Types evenementen
|
||||
EventType creation: Nieuw type evenement
|
||||
EventType edit: Type evenement bewerken
|
||||
Status list: Lijst van statussen
|
||||
Status creation: Nieuwe status
|
||||
Status edit: Status bewerken
|
||||
Role list: Lijst van rollen
|
||||
Role: Rollen
|
||||
Role creation: Nieuwe rol
|
||||
Role edit: Rol bewerken
|
||||
|
||||
xlsx: xlsx
|
||||
ods: ods
|
||||
csv: csv
|
||||
|
||||
Create a new role: Nieuwe rol aanmaken
|
||||
Create a new type: Nieuw type aanmaken
|
||||
Create a new status: Nieuwe status aanmaken
|
||||
|
||||
event:
|
||||
admin:
|
||||
title:
|
||||
Event budget element list: Lijst van budgetelementen voor een evenement
|
||||
Select budget type: Selecteer het type budgetelement
|
||||
new:
|
||||
Create a new budget kind: Nieuw budgetelement aanmaken
|
||||
theme:
|
||||
label: Thema's
|
||||
fields:
|
||||
organizationCost: Organisatiekosten
|
||||
location: Locatie
|
||||
documents: Documenten
|
||||
internal animators: Interne animatoren
|
||||
external animators: Externe animatoren
|
||||
form:
|
||||
organisationCost_help: Organisatiekosten voor de structuur. Nuttig voor statistieken.
|
||||
add_document: Document toevoegen
|
||||
remove_document: Document verwijderen
|
||||
Select one or more themes: Selecteer één of meerdere thema's
|
||||
filter:
|
||||
event_types: Op types evenement
|
||||
event_dates: Op datum van evenement
|
||||
center: Op territorium
|
||||
by_responsable: Op verantwoordelijke
|
||||
pick_responsable: Filteren op verantwoordelijken
|
||||
budget:
|
||||
resources: Middelen
|
||||
charges: Lasten
|
||||
label: Budgetelementen van een evenement
|
||||
Select a budget element kind: Selecteer een budgetelement
|
||||
no elements: Er zijn geen elementen
|
||||
resource type: Middel
|
||||
charge type: Last
|
||||
amount: Bedrag
|
||||
comment: Opmerking
|
||||
animators:
|
||||
intern: Interne animatoren
|
||||
extern: Externe animatoren
|
||||
|
||||
crud:
|
||||
event_theme:
|
||||
title_new: Nieuw thema aanmaken
|
||||
title_edit: Thema bewerken
|
||||
index:
|
||||
title: Lijst van thema's
|
||||
add_new: Nieuw thema aanmaken
|
||||
event_budget_kind:
|
||||
title_new: Nieuw budgetelement aanmaken
|
||||
|
||||
export:
|
||||
event:
|
||||
list:
|
||||
title: Lijst van evenementen
|
||||
description: Maakt de lijst van evenementen aan op basis van verschillende parameters.
|
||||
|
||||
event_id: Identificatie
|
||||
event_name: Naam
|
||||
event_date: Datum
|
||||
event_type: Type evenement
|
||||
event_center: Territorium
|
||||
event_moderator: Verantwoordelijke
|
||||
event_participants_count: Aantal deelnemers
|
||||
event_location: Locatie
|
||||
event_budget_resources: Middelen
|
||||
event_budget_charges: Lasten
|
||||
event_animators: Animatoren
|
||||
event_themes: Thema's
|
||||
@@ -1,3 +0,0 @@
|
||||
event:
|
||||
validation:
|
||||
person_already_participate_to_event: De gebruiker is al ingeschreven voor dit evenement
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user