Merge branch 'master' into calendar/my-calendar-fixes-with-ts

This commit is contained in:
Julien Fastré 2022-06-28 10:33:00 +02:00
commit 809a0a38ab
21 changed files with 1849 additions and 73 deletions

View File

@ -16,7 +16,6 @@ and this project adheres to
* [person-thirdparty]: fix quick-add of names that consist of multiple parts (eg. De Vlieger) within onthefly modal person/thirdparty
* [search]: Order of birthdate fields changed in advanced search to avoid confusion.
* [workflow]: Constraint added to workflow (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/675)
* [action]: Agents traitants should be prefilled with referrer of the parcours or left empty if there is no referrer (https://gitlab.com/champs-libres/departement-de-la-vendee/accent-suivi-developpement/-/issues/696)
## Test releases

View File

@ -99,7 +99,8 @@
"autoload-dev": {
"psr-4": {
"App\\": "tests/app/src/",
"Chill\\DocGeneratorBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests"
"Chill\\DocGeneratorBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests",
"Chill\\WopiBundle\\Tests\\": "src/Bundle/ChillDocGeneratorBundle/tests"
}
},
"config": {

View File

@ -40,6 +40,9 @@
<testsuite name="DocGeneratorBundle">
<directory suffix="Test.php">src/Bundle/ChillDocGeneratorBundle/tests/</directory>
</testsuite>
<testsuite name="WopiBundle">
<directory suffix="Test.php">src/Bundle/ChillWopiBundle/tests/</directory>
</testsuite>
</testsuites>
<listeners>

View File

@ -0,0 +1,234 @@
#general
Show the activity: Toon activiteit
Edit the activity: Wijzig activiteit
Activity: Activiteit
Duration time: Duur
Duration Time: Duur
durationTime: duur
Travel time: Duur van verplaatsing
Attendee: Aanwezigheden
attendee: aanwezigheden
list_reasons: Onderwerpen
user_username: gebruikersnaam
circle_name: naam kring
Remark: Opmerking
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: Activieit bijwerken
Scope: Werkingsgebied
Activity data: Gegevens activiteit
Activity location: Locatie activiteit
No reason associated: Geen onderwerp
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: familienaam
person_id: Identificatienummer persoon
Type: Soort
Invisible: Onzichtbaar
Optional: Optioneel
Required: Verplicht
Persons: Personen
Users: Gebruikers
Emergency: Dringend
Sent received: Inkomend / Uitgaand
Sent: Verzenden
Received: Ontvangen
by: 'Door '
location: Plaats
Reasons: Onderwerpen
#forms
Activity creation: Nouvelle activité
Create: Créer
Back to the list: Retour à la liste
Save activity: Sauver l'activité
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:
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% a effectué une activité de type "%activity_type%"'
#controller
'Success : activity created!': L'activité a été créée.
'The form is not valid. The activity has not been created !': Le formulaire est invalide. L'activité n'a pas été créée.
'Success : activity updated!': L'activité a été mise à jour.
'The form is not valid. The activity has not been updated !': Le formulaire est invalide. L'activité n'a pas été mise à jour.
# ROLES
CHILL_ACTIVITY_CREATE: Créer une activité
CHILL_ACTIVITY_UPDATE: Modifier une activité
CHILL_ACTIVITY_SEE: Voir une activité
CHILL_ACTIVITY_SEE_DETAILS: Voir le détail des activités
CHILL_ACTIVITY_DELETE: Supprimer une activité
CHILL_ACTIVITY_STATS: Statistique des activités
CHILL_ACTIVITY_LIST: Liste des activités
# admin
Activities: Activités
Activity configuration: Configuration des activités
Activity configuration menu: Configuration des activités
Activity types: Types d'activité
Activity type configuration: Configuration des categories d'activités
Activity Reasons: Sujets d'une activité
Activity Reasons Category: Catégories de sujet d'activités
Activity Types Categories: Catégories des types d'activité
Activity Presences: Presences des activités
# Crud
crud:
activity_type:
title_new: Nouveau type d'activité
title_edit: Edition d'un type d'activité
activity_type_category:
title_new: Nouvelle catégorie de type d'activité
title_edit: Edition d'une catégorie de type d'activité
# activity reason admin
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'activité
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: 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'activité
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 d'activités
Create a new activity type: Créer un nouveau type d'activité
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: Liste des catégories des types d'activité
Create a new activity type category: Créer une nouvelle catégorie de type d'activité
# activity delete
Remove activity: Supprimer une activité
Are you sure you want to remove the activity about "%name%" ?: Êtes-vous sûr de vouloir supprimer une activité qui concerne "%name%" ?
The activity has been successfully removed.: L'activité a été supprimée.
# exports
Count activities: Nombre d'activités
Count activities by various parameters.: Compte le nombre d'activités enregistrées en fonction de différents paramètres.
Sum activity duration: Total de la durée des activités
Sum activities duration by various parameters.: Additionne la durée des activités en fonction de différents paramètres.
List activities: Liste les activités
Number of activities: Nombre d'activités
#filters
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: seulement %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: Filtrer par type d'activité
#aggregators
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: Aggréger par utilisateur lié à l'activité
Aggregate by activity type: Aggréger par type d'activité
Aggregate by activity reason: Aggréger par sujet de l'activité
Last activities: Les dernières activités
See activity in accompanying course context: Voir l'activité dans le contexte du parcours d'accompagnement
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: Echange
A basic context for activity: Contexte pour les échanges

View File

@ -0,0 +1,23 @@
The reasons's level should not be empty: Het onderwerp niveau mag niet leeg zijn.
At least one reason must be choosen: Kies minstens één onderwerp
For this type of activity, you must add at least one person: Voor dit soort activiteit dient u minstens één persoon toe te voegen.
For this type of activity, you must add at least one user: Voor dit soort activiteit dient u minstens één gebruiker toe te voegen.
For this type of activity, you must add at least one third party: Voor dit soort activiteit dient u minstens één externe partner toe te voegen.
For this type of activity, user is required: Voor dit soort activiteit, dient u een gebruiker in te vullen.
For this type of activity, date is required: Voor dit soort activiteit, dient u een datum in te vullen.
For this type of activity, location is required: Voor dit soort activiteit, dient u een locatie in te vullen.
For this type of activity, attendee is required: Voor dit soort activiteit, dient u minstend één 'aanwezige persoon' in te vullen.
For this type of activity, duration time is required: Voor dit soort activiteit, dient u een duur in te vullen.
For this type of activity, travel time is required: Voor dit soort activiteit, dient u een verplaatsingsduur in te vullen.
For this type of activity, reasons is required: Voor dit soort activiteit, dient u een onderwerp in te vullen.
For this type of activity, comment is required: Voor dit soort activiteit, dient u een opmerking in te vullen.
For this type of activity, sent/received is required: Voor dit soort activiteit, dient u het veld 'inkomend/uitgaand' in te vullen.
For this type of activity, document is required: Voor dit soort activiteit, dient u een document toe te voegen.
For this type of activity, emergency is required: Voor dit soort activiteit, is het veld 'dringend' verplicht.
For this type of activity, accompanying period is required: Voor dit soort activiteit, dient u een begeleidingstraject in te vullen.
For this type of activity, you must add at least one social issue: Voor dit soort activiteit, dient u een sociaal vraagstuk aan te duiden.
For this type of activity, you must add at least one social action: Voor dit soort activiteit, dient u een maatschappelijke actie toe te voegen.
# admin
This parameter must be equal to social issue parameter: Deze parameter moet gelijk zijn aan de parameter "zichtbaarheid veld sociaal vraagstuk".
The socialActionsVisible value is not compatible with the socialIssuesVisible value: De waarde van de parameter "zichtbaarheid veld maatschappelijke actie" is niet compatibel met de waarde van de parameter "zichtbaarheid veld sociaal vraagstuk".

View File

@ -0,0 +1,167 @@
#general
Show the aside activity: Toon de nevenactiviteit
Edit the aside activity: Wijzig de nevenactiviteit
Remove aside activity: Verwijder de nevenactiviteit
Aside activity: Nevenactiviteit
Aside Activity Type List: Lijst van nevenactiviteiten
Duration time: Duur
durationTime: duur
user_username: gebruikersnaam
Remark: Opmerking
No comments: Geen opmerkingen
Add a new aside activity: Nevenactiviteit toeveogen
Aside activity list: Nevenactiviteiten
present: aanwezig
not present: afwezig
Delete: Verwijderen
Update: Bijwerken
Aside activity data: Gegevens van nevenactiviteit
There aren't any aside activities.: Geen nevenactiviteiten om weer te geven
Type: Type
Invisible: Onzichtbaar
Optional: Optioneel
Required: Verplicht
Persons: Personen
Users: Gebruikers
Emergency: Dringend
by: "Door "
location: Plaats
# Crud
crud:
aside_activity:
title_view: Details nevenactiviteit
title_new: Nieuwe nevenactiviteit
title_edit: Wijzig nevenactiviteit
title_delete: Verwijder nevenactiviteit
button_delete: Verwijderen
confirm_message_delete: Bent u zeker deze nevenactiviteit te willen verwijderen?
aside_activity_category:
title_new: Nieuwe categorie nevenactiviteiten
title_edit: Wijzigen categorie nevenactiviteiten
#forms
Create a new aside activity type: Nieuwe categorie nevenactiviteiten
Back to the list: Terug naar de lijst
Choose the duration: Kies een duur
Choose a category: Kies een categorie
Is active: Actief
For agent: Voor de gebruiker
date: Datum
Duration: Duur
Note: Opmerking
Choose the agent for whom this activity is created: Kies de gebruiker voor wie deze nevenactiviteit wordt aangemaakt.
Choose the activity category: Kies een categorie
#Duration
minutes: minuten
hour: uur
hours: uren
day: dag
days: dagen
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 uren
2 hours 30: 2 uur 30
3 hours: 3 uren
3 hours 30: 3 uur 30
4 hours: 4 uren
4 hours 30: 4 uur 30
5 hours: 5 uren
5 hours 30: 5 uur 30
6 hours: 6 uren
6 hours 30: 6 uur 30
7 hours: 7 uren
7 hours 30: 7 uur 30
8 hours: 8 uren
8 hours 30: 8 uur 30
9 hours: 9 uren
9 hours 30: 9 uur 30
10 hours: 10 uren
1/2 day: 1/2 dag
1 day: 1 dag
1 1/2 days: 1 1/2 dagen
2 days: 2 dagen
2 1/2 days: 2 1/2 dagen
3 days: 3 dagen
3 1/2 days: 3 1/2 dagen
4 days: 4 dagen
4 1/2 days: 4 1/2 dagen
5 days: 5 dagen
5 1/2 days: 5 1/2 dagen
6 days: 6 dagen
6 1/2 days: 6 1/2 dagen
7 days: 7 dagen
7 1/2 days: 7 1/2 dagen
8 days: 8 dagen
8 1/2 days: 8 1/2 dagen
9 days: 9 dagen
9 1/2 days: 9 1/2 dagen
10 days: 10 dagen
10 1/2 days: 10 1/2 dagen
11 days: 11 dagen
11 1/2 days: 11 1/2 dagen
12 days: 12 dagen
12 1/2 days: 12 1/2 dagen
13 days: 13 dagen
13 1/2 days: 13 1/2 dagen
14 days: 14 dagen
14 1/2 days: 14 1/2 dagen
15 days: 15 dagen
15 1/2 days: 15 1/2 dagen
16 days: 16 dagen
16 1/2 days: 16 1/2 dagen
17 days: 17 dagen
17 1/2 days: 17 1/2 dagen
18 days: 18 dagen
18 1/2 days: 18 1/2 dagen
19 days: 19 dagen
19 1/2 days: 19 1/2 dagen
20 days: 20 dagen
20 1/2 days: 20 1/2 dagen
21 days: 21 dagen
21 1/2 days: 21 1/2 dagen
22 days: 22 dagen
22 1/2 days: 22 1/2 dagen
23 days: 23 dagen
23 1/2 days: 23 1/2 dagen
24 days: 24 dagen
24 1/2 days: 24 1/2 dagen
25 days: 25 dagen
25 1/2 days: 25 1/2 dagen
26 days: 26 dagen
26 1/2 days: 26 1/2 dagen
27 days: 27 dagen
27 1/2 days: 27 1/2 dagen
28 days: 28 dagen
28 1/2 days: 28 1/2 dagen
29 days: 29 dagen
29 1/2 days: 29 1/2 dagen
30 days: 30 dagen
#list
My aside activities: Mijn nevenactiviteiten
#Aside activity delete
Delete aside activity: Verwijder een nevenactiviteit
Are you sure you want to remove the aside activity concerning "%name%" ?: Bent u zeker deze nevenactiviteit voor "%name%" te willen verwijderen ?
The activity has been successfully removed.: De nevenactiviteit werd verwijdert.
#Menu
Create an aside activity: "Maak een nevenactiviteit aan"
Aside activity categories: Categorieën van nevenactiviteiten
Aside activity configuration menu: "Configuratie menu voor nevenactiviteiten"
Phonecall: "Telefoon oproep"
# admin
Aside activities: Nevenactiviteiten
Aside activity types: Types nevenactiviteiten
Aside activity type configuration: Configuratie categorieën nevenactiviteiten

View File

@ -0,0 +1 @@
You must not add twice the same category in the parent tree (previous result returned): Je mag niet tweemaal dezelfde entiteit aanduiden in de stamboom. (Het vorige resultaat werd hersteld)

View File

@ -0,0 +1,8 @@
budget:
number of elements: >-
{nb_items, plural,
=0 {Geen element}
one {Één element}
many {# elementen}
other {# elementen}
}

View File

@ -37,7 +37,7 @@ No charges registered: Aucune charge enregistrée
No past resources registered: Aucune ressource passée
No past charges registered: Aucune charge passée
No future resources registered: Aucune ressource future enregistrée
No future charges registered: Aucune ressource future enregistrée
No future charges registered: Aucune charge future enregistrée
No current budget element registered: Pas des éléments de budget actuelles enregistrés
New resource: Nouvelle ressource

View File

@ -0,0 +1,76 @@
Budget: Budget
Resource: Inkomsten
Charge: Onkosten
Budget for %name%: Budget van %name%
Budget for household %household%: Budget van gezin
Current budget household members: Actuele budget van gezinsleden
Show budget of %name%: Toon budget van %name%
See complete budget: Toon volledige budget
Hide budget: Verbergen
Hide budget of %name%: Verberg budget van %name%
Resource element type: Type inkomsten
Actual budget: Actuele elementen budget
Actual resources: Actuele inkomsten
Actual resources for %name%: Actuele inkomsten van %name%
Actual charges for %name%: Actuele onkosten van %name%
Actual charges: Actuele onkosten
Past budget: Elementen van afgelopen budget
Show past budget: Toon afgelopen budget
Show future budget: Toon toekomstig budget
Past resources: Afgelopen inkomsten
Past charges: Afgelopen onkosten
Future budget: Toekomstige elementen van budget
Future resources: Toekomstige inkomsten
Future charges: Toekomstige onkosten
Budget element type: Type
Validity period: Geldigheidsperiod
Start of validity period: Begin geldigheidsperiode
End of validity period: Eind geldigheidsperiode
Total: Totaal
Create new resource: Nieuwe inkomsten toevoegen
Create new charge: Nieuwe onkosten toevoegen
See person: Toon persoon
There isn't any element recorded: Geen budget elementen geregistreerd
No resources registered: Geen inkomsten geregistreerd
No charges registered: Geen onkosten geregistreerd
No past resources registered: Geen afgelopen inkomsten geregistreerd
No past charges registered: Geen afgelopen onkosten geregistreerd
No future resources registered: Geen toekomstige inkomsten geregistreerd
No future charges registered: Geen toekomste onkosten geregistreerd
No current budget element registered: Geen actuele budget elementen geregistreerd
New resource: Nieuwe inkomsten
New charge: Nieuwe onkosten
Edit resource: Wijzig inkomsten
Edit: Wijzigen
Edit charge: Wijzig onkosten
Remove resource: Verwijder inkomsten
Remove charge: Verwijder onkosten
Are you sure you want to remove the ressource "%type%" associated to "%name%" ?: Bent u zeker de inkomsten van het type "%type%" en geassocieerd met %name% te willen verwijderen?
Are you sure you want to remove the charge "%type%" associated to "%name%" ?: Bent u zeker de onkosten van het type "%type%" en geassocieerd met %name% te willen verwijderen?
Resource deleted: Inkomsten verwijdert
Charge deleted: Onkosten verwijdert
Charge created: Onkosten toegevoegd
Resource created: Inkomsten toegevoegd
Resource updated: Inkomsten bijgewerkt
Charge updated: Onkosten bijgewerkt
Choose a resource type: Kies een type inkomsten
Choose a charge type: Kies een type onkosten
Amount: Bedrag
Comment: Opmerking
Help to pay charges: Hulp bij afbetaling onkosten
Choose a status: Kies een status
charge.help.running: In uitvoering
charge.help.no: Niet gevraagd
charge.help.yes: Ja
charge.help.not-concerned: Niet betrokken
Budget calculator: Berekeningen en indicatoren van budget
Budget calculator result: Resultaten
The balance: Verschil tussen inkomsten en onkosten
Valid since %startDate% until %endDate%: Geldig sinds %startDate% tot %endDate%
Valid since %startDate%: Geldig sinds %startDate%

View File

@ -0,0 +1,2 @@
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

View File

@ -0,0 +1,28 @@
Calendar: Afspraken
Calendar list: Lijst van afspraken
My calendar list: Mijn afspraken
There is no calendar items.: Er zijn geen afspraken
Remove calendar item: Verwijder afspraak
Are you sure you want to remove the calendar item?: Bent u zeker deze afspraak te willen verwijderen
Concerned groups: Betrokken partijen
Calendar data: Gegevens afspraak
Update calendar: Wijzig afspraak
main user concerned: Betrokken gebruiker
Main user: Hoofdgebruiker
Calendar item creation: Maak afspraak aan
start date: Begin afspraak
end date: Einde afspraak
cancel reason: reden van annulatie
status: Status van afspraak
calendar location: Locatie afspraak
calendar comment: Opmerkingen over afspraak
sendSMS: Verzenden sms
Send s m s: Sms verzenden?
Cancel reason: Reden van annulatie
Add a new calendar: Nieuwe afspraak toevoegen
"Success : calendar item updated!": "Afspraak bijgewerkt"
"Success : calendar item created!": "Afspraak aangemaakt"
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

View File

@ -17,11 +17,12 @@ use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\DocStoreBundle\Exception\StoredObjectManagerException;
use DateTimeImmutable;
use DateTimeInterface;
use DateTimeZone;
use RuntimeException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;
use Throwable;
@ -150,7 +151,8 @@ final class StoredObjectManager implements StoredObjectManagerInterface
$date = DateTimeImmutable::createFromFormat(
DateTimeImmutable::RFC7231,
$lastModifiedString
$lastModifiedString,
new DateTimeZone('GMT')
);
if (false === $date) {

View File

@ -121,7 +121,9 @@ export default {
this.entity.selected.city = value;
this.entity.selected.postcode.name = value.name;
this.entity.selected.postcode.code = value.code;
this.entity.selected.postcode.coordinates = value.center.coordinates;
if (value.center) {
this.entity.selected.postcode.coordinates = value.center.coordinates;
}
this.entity.selected.writeNew.postcode = false;
this.$emit('getReferenceAddresses', value);
this.focusOnAddress();

View File

@ -1,9 +1,459 @@
Search: Zoek
'Search persons, ...': 'Zoek persoons, ...'
Search a person: Zoek een persoon
Login: Log in
Logout: Log out
"This program is free software: you can redistribute it and/or modify it under the terms of the <strong>GNU Affero General Public License</strong>": "Ce programme est un logiciel libre: vous pouvez le redistribuer et/ou le modifier selon les termes de la licence <strong>GNU Affero GPL</strong>"
User manual: Gebruikershandleiding
Search: Zoeken
"Search persons, ...": "Zoek personen, ..."
Person name: Naam / voornaam persoon
Login: Inloggen
Logout: Uitloggen
Bad credentials.: Een verkeerd wachtwoord of gebruikersnaam werd opgegeven.
Invalid CSRF token.: Uw sessie is verlopen.
Username: Gebruikersnaam
Password: Wachtworrd
Login to %installation_name%: Log in bij %installation_name%
username: gebruikersnaam
Password: Wachtwoord
Welcome to %installation_name%: Welkom bij %installation_name%
Login to %installation_name%: Inloggen op %installation_name%
Enabled: Ingeschakeld
enabled: ingeschakeld
disabled: uitgeschakeld
Disabled: Uitgeschakeld
Id: Id
Homepage: Hoofdpagina
Welcome: Welkom
Export Menu: Export
Admin Menu: Admin menu
Details: Details
yes: ja
no: nee
valid: geldig
Valid: Geldig
Not valid: Ongeldig
not valid: ongeldig
Confirm: Bevestigen
Cancel: Annuleren
Save: Opslaan
This form contains errors: Dit formulier bevat fouten
Choose an user: Kies een gebruiker
"You are going to leave a page with unsubmitted data. Are you sure you want to leave ?": "U verlaat een pagina waarvan de gegevens niet werden opgeslagen. Bent u zeker deze pagina te willen verlaten?"
No value: Geen informatie
Last updated by: Laatste update door
on: "op "
Last updated on: Laatste update op
by_user: "door "
Edit: Bewerken
Update: Updaten
Back to the list: Terug naar overzicht
#interval
Years: Jaren
# misc date
Since %date%: Sinds %date%
since %date%: sinds %date%
Until %date%: Tot %date%
until %date%: tot %date%
Since: Sinds
Until: Tot
#elements used in software
centers: centra
Centers: Centra
comment: opmerkingen
Comment: Opmerkingen
Pinned comment: Gepinde opmerking
Any comment: Geen opmerkingen
Read more: Meer lezen
# comment embeddable
No comment associated: Geen opmerkingen
#pagination
Previous: Vorige
Next: Volgende
#addresses
Street address1: Adres regel 1
Street address2: Adres regel 2
Postal code: Postcode
Valid from: Geldig vanaf
Choose a postal code: Kies een postcode
address:
address_homeless: Betreft dit een domicilie adres ?
real address: Domicilie adres
consider homeless: Dit adres is onvolledig
address more:
floor: verd.
corridor: gang
steps: trap
flat: appart.
buildingName: residentie
extra: ""
distribution: cedex
Create a new address: Maak een nieuw adres aan
Create an address: Maak een adres aan
Update address: Bewerk het adres
City or postal code: Stad of postcode
# contact
Part of the phonenumber: Deel van het telefoonnummer
#serach
Your search is empty. Please provide search terms.: De zoekopdracht is leeg. Gelieve een zoekterm op te geven.
The domain %domain% is unknow. Please check your search.: Het zoekgebied "%domain%" is ongekend. Gelieve uw zoekopdracht te verifiëren.
Invalid terms: Ongeldige zoekopdracht
You should not have more than one domain.: Gelieve slechts één zoekgebied op te geven.
#used for page title
Search %pattern%: Zoek "%pattern%"
Results %start%-%end% of %total%: Resultaten %start%-%end% van %total%
See all results: Alle resultaten zien
Advanced search: Geavanceerde zoekopdracht
results: resultaten
# timeline
Global timeline: Globale tijdslijn
#admin
Create: Aanmaken
show: bekijken
Show: Bekijken
edit: bewerken
Main admin menu: Hoofdmenu admin
Actions: Acties
Users and permissions: Gebruikers en rechten
Location and location type: Vestigingen en vestiging types
#permissions
Permissions Menu: Beheer rechten
Permissions management of your chill installation: Beheer rechten voor deze Chill installatie.
#location
Location Menu: Vestigingen en vestiging types
Management of location: Beheer vestigingen en vestiging types
#admin section
"Administration interface": Admin paneel
Welcome to the admin section !: >
Welkom op het admin paneel !
#admin section for center's administration
Create a new center: Maak een nieuw centrum aan
Center list: Overzicht centra
Center edit: Bewerk een centrum
Center creation: Aanmaak centrum
New center: Nieuw centrum
Center: Centrum
#admin section for permissions group
Permissions group list: Groepsrechten
Create a new permissions group: Maak een nieuw groepsrecht aan
Permission group "%name%": Groepsrecht "%name%"
Grant those permissions: Rechten toekennen
Which implies: Wat impliceert
Permission group: Groepsrecht
Permissionsgroup: Groepsrecht
New permission group: Nieuw groepsrecht
PermissionsGroup "%name%" edit: Bewerk groepsrecht '%name%'
Role: Rol
Choose amongst roles: Kies een rol
Add permission: Rechten toevoegen
This group does not provide any permission: Deze groep kent geen rechten toe.
The role '%role%' has been removed: De rol "%role%" werd verwijdert uit dit groepsrecht.
The role '%role%' on circle '%scope%' has been removed: De rol "%role%" binnen de cirkel "%scope%" werd verwijdert uit dit groepsrecht.
#admin section for users
User edit: Gebruiker bewerken
User'status: Gebruikersstatuut
Disabled, the user is not allowed to login: Uitgeschakeld, de gebruiker krijgt geen toestemming om in te loggen.
Enabled, the user is active: Ingeschakeld, de gebruiker kan zich inloggen.
Edit password: Wachtwoord aanpassen
Repeat the password: Wachtwoord herhalen
Permissions granted: Rechten toegekend
Any permissions granted to this user: Geen enkele rechten werden toegekend aan deze gebruiker
Grant new permissions: Rechten toevoegen
Add a new groupCenter: Rechten toevoegen
The permissions have been successfully added to the user: De rechten werden toegekend aan de gebruiker
The permissions where removed.: De rechten werden verwijdert voor dze gebruiker
Center & groups: Centra en groepen
User %username%: Gebruiker %username%
Add a new user: Nieuwe gebruiker toevoegen
The permissions have been added: De rechten werden toegevoegd
Edit password for %username%: Wachtwoord voor %username% aanpassen
Change password: Wachtwoord aanpassen
Back to the user edition: Terugkeren naar bewerkingsformulier
Password successfully updated!: Wachtwoord opgeslagen
Flags: Vlaggen
# admin section for users jobs
User jobs: Beroepen
# user page for current location
Current location: Huidige vestiging
Edit my current location: Mijn huidige vestiging bewerken
Change current location: CMijn huidige vestiging vernanderen
Set a location: Een vestiging instellen
Current location successfully updated: Huidige vestiging werd opgeslagen
Pick a location: Kies een vestiging.
#admin section for circles (old: scopes)
List circles: Cirkels
New circle: Nieuwe cirkel
Circle: Cirkel
Circle edit: Cirkel bewerken
Circle creation: Cirkel aanmaken
Create a new circle: Nieuwe cirkel aanmaken
#admin section for location
Location: Vestigingen
Location type list: Vestiging types
Create a new location type: Nieuwe type vestiging aanmaken
Available for users: Beschikbaar voor gebruikers
Editable by users: Bewerkbaar door gebruikers
Address required: Adres vereist?
Contact data: Contactgegevens?
optional: optioneel
required: vereist
never: nooit
Create a new location: Nieuwe vestiging aanmaken
Location list: Overzicht vestigingen
Location type: Type vestiging
Phonenumber1: Telefoonnummer 1
Phonenumber2: Telefoonnummer 2
Configure location and location type: Configureer vestigingen en types vestiging
Default for: Standaard vestiging
none: geen
person: gebruiker
thirdparty: externe partner
# circles / scopes
Choose the circle: Kies een cirkel
Scopes: Diensten
#export
# export creation step 0 : list of exports
Exports list: Overzicht rapporten
Create an export: Maak een rapport aan
#export creation step 'center' : pick a center
Pick centers: Kies centra
Pick a center: Kies een centrum
The export will contains only data from the picked centers.: het rapport zal enkel data bevatten voor het geselecteerde centrum.
This will eventually restrict your possibilities in filtering the data.: De filterkeuzes zullen worden aangepast aan de rechten tot raadpleging van de geselecteerde centra.
Go to export options: Ga naar de rapport opties
Pick aggregated centers: Hergroepering centra
# export creation step 'export' : choose aggregators, filtering and formatter
Formatter: Formateren
Choose the formatter: Kies het gewenste formaat voor dit rapport.
Export parameters: Rapport parameters
Filters: Filters
Aggregators: Aggregaten
Go to formatter options: Naar de formateeropties
Choose a format: Kies een formaat
#export creation step 'formatter' : choose formatter option
Generate the report: Rapport genereren
No options availables. Your report is fully configured.: Geen beschikbare opties. Dit rapport werd volledig geconfigureerd.
Ungrouped exports: Overige expor
#export download
Download export: Téléchargement du rapport
Waiting for your report: En attente de votre rapport
Download your report: Télécharger votre rapport
Problem during download: Problème durant le téléchargement
# sans valeur
without data: sans valeur
#CSV List Formatter
Add a number on first column: La première colonne est un numéro
Number: Numéro
# the label which appears in the UI
CSV vertical list: Liste verticale au format CSV
CSV horizontal list: Liste horizontale au format CSV
Spreadsheet list formatter (.xlsx, .ods): Liste au format tableur (.xlsx, .ods)
Order: Ordre
Position: Position
row: ligne
column: colonne
Comma separated values (CSV): Valeurs séparées par des virgules (CSV - tableur)
# spreadsheet formatter
Choose the format: Choisir le format
# select2
"select2.no_results": Aucun résultat
"select2.error_loading": Erreur de chargement des résultats
"select2.searching": Recherche en cours...
# change password
Change my password: Modification du mot de passe
Your actual password: Mot de passe actuel
# recover password
Forgot your password ?: Mot de passe oublié ?
Recover password: Remplacement du mot de passe
Username or email: Nom d'utilisateur ou email
Request recover: Demande de remplacement
Check your email: Vérifiez votre courriel
An email has been sent to your address. Click on the link inside this email to confirm that you are the owner of this account.: Un courriel a été envoyé à votre adresse. Cliquez sur le lien de cet email pour confirmer que vous êtes bien le propriétaire de ce compte.
You requested to recover your password: Vous avez demandé à renouveler votre mot de passe.
Click on the link below to recover your password: Cliquez sur le lien ci-dessous pour re-générer votre mot de passe
Regards,: Cordialement,
Your administrator: Votre administrateur
Recover your password: Regénération du mot de passe
New password set: Le nouveau mot de passe est enregistré
Your password has been set.: Votre mot de passe a été changé.
Log in with your new password: Connectez-vous avec votre nouveau mot de passe
# impersonate
Exit impersonation: Retour Administrateur
Impersonate: Incarner l'utilisateur
Impersonate mode: Mode fantôme
crud:
# general items
new:
button_action_form: Créer
link_edit: Modifier
save_and_close: Créer & fermer
save_and_show: Créer & voir
save_and_new: Créer & nouveau
success: Les données ont été créées
edit:
button_action_form: Enregistrer
back_to_view: Voir
save_and_close: Enregistrer & fermer
save_and_show: Enregistrer & voir
success: Les données ont été modifiées
delete:
success: Les données ont été supprimées
link_to_form: Supprimer
default:
success: Les données ont été enregistrées
view:
link_duplicate: Dupliquer
admin_user:
index:
title: Utilisateurs
add_new: Créer
admin_user_job:
index:
title: Métiers
add_new: Créer
title_new: Nouveau métier
title_edit: Modifier un métier
main_location_type:
title_new: Nouveau type de localisation
title_edit: Modifier un type de localisation
main_location:
title_new: Nouvelle localisation
title_edit: Modifier une localisation
No entities: Aucun élément
CHILL_FOO_SEE: Voir un élément
CHILL_FOO_EDIT: Modifier un élément
#Show templates
Date: Date
By: Par
For: Pour
Created for: Créé pour
Created by: Créé par
Created on: Créé le
# Workflows 💊
Workflow: Workflow — chemin de décision
Workflow n°%id%: 'Workflow (n°%id%)'
workflow_: Workflow
target: ' (cible)'
Decision: Décision
Join a comment: Laisser un commentaire
Follow workflow: Suivre la décision
Workflow history: Historique de la décision
workflow:
Created by: Créé par
My decision: Ma décision
Next step: Prochaine étape
dest for next steps: Utilisateurs qui valideront la prochaine étape
Freeze: Geler
Freezed: Gelé
freezed document: Le document est gelé
The associated element will be freezed: L'élément associé sera gelé et ne pourra plus être modifié après cette décision.
Finalize: Étape finale
The workflow will be finalized: Le suivi est clôturé lors de cette décision.
No transitions: Aucune transition
Comment added: Commentaire ajouté
This workflow is finalized: Ce suivi est finalisé.
You are not allowed to apply a transition on this workflow: Vous n'êtes pas autorisé à appliquer une décision pour ce suivi
Only those users are allowed: Seuls ces utilisateurs sont autorisés
My workflows: Mes workflows
No workflow: Aucun workflow
Evaluation (n°%eval%): "Évaluation (n°%eval%)"
Document (n°%doc%): "Document (n°%doc%)"
Work (n°%w%): "Action d'accompagnement (n°%w%)"
subscribed: Workflows suivis
dest: Workflows en attente d'action
you subscribed to all steps: Vous recevrez une notification à chaque étape
you subscribed to final step: Vous recevrez une notification à l'étape finale
Current step: Étape actuelle
Comment on last change: Commentaire à la transition précédente
Users allowed to apply transition: Utilisateurs pouvant valider cette étape
Workflow deleted with success: Le workflow a été supprimé
Delete workflow ?: Supprimer le workflow ?
Are you sure you want to delete this workflow ?: Êtes-vous sûr·e de vouloir supprimer ce workflow ?
Delete workflow: Supprimer le workflow
Steps is not waiting for transition. Maybe someone apply the transition before you ?: L'étape que vous cherchez a déjà été modifiée par un autre utilisateur. Peut-être quelqu'un a-t-il modifié cette étape avant vous ?
You get access to this step: Vous avez acquis les droits pour appliquer une transition sur ce workflow.
Those users are also granted to apply a transition by using an access key: Ces utilisateurs peuvent également valider cette étape, grâce à un lien d'accès
dest by email: Liens d'autorisation par email
dest by email help: Les adresses email mentionnées ici recevront un lien d'accès. Ce lien d'accès permettra à l'utilisateur de valider cette étape.
Add an email: Ajouter une adresse email
Remove an email: Enlever cette adresse email
Any email: Aucune adresse email
Previous dest without reaction: Workflows clotûrés après action d'un autre utilisateur
Previous workflow without reaction help: Liste des workflows où vous avez été cité comme pouvant réagir à une étape, mais où un autre utilisateur a exécuté une action avant vous.
Previous transitionned: Anciens workflows
Previous workflow transitionned help: Workflows où vous avez exécuté une action.
For: Pour
Subscribe final: Recevoir une notification à l'étape finale
Subscribe all steps: Recevoir une notification à chaque étape
notification:
Notification: Notification
Notifications: Notifications
My own notifications: Mes notifications
Notify: Envoyer une notification
Send: Envoyer
Edit notification: Modifier une notification
Notification created: Notification envoyée
Notification updated: La notification a été mise à jour
Any notification received: Aucune notification reçue
Any notification sent: Aucune notification envoyée
Notifications received: Notifications reçues
Notifications sent: Notifications envoyées
comment_appended: Commentaire ajouté
append_comment: Ajouter un commentaire
comment_updated: Commentaire mis à jour
comments_list: Fil de commentaires
show notification from %sender%: Voir la notification de %sender%
is_unread: Non-lue
is_system: notification automatique
list: Notifications
Sent: Envoyé
to: À
sent_to: Destinataire(s)
from: De
received_from: Expéditeur
you were notified by %sender%: Vous avez été notifié par %sender%
you were notified by system: Vous avez été notifié automatiquement
subject: Objet
see_comments_thread: Voir le fil de commentaires associé
object_prefix: "[CHILL] notification - "
dest by email: Lien d'accès par email
Any email: Aucun email
Add an email: Ajouter un email
dest by email help: Les adresses email mentionnées ici recevront un lien d'accès. Un compte utilisateur sera toujours nécessaire.
Remove an email: Supprimer l'adresse email
Email with access link: Adresse email ayant reçu un lien d'accès

View File

@ -11,6 +11,7 @@ declare(strict_types=1);
namespace Chill\PersonBundle\EventListener;
use Chill\MainBundle\Entity\User;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Symfony\Component\Security\Core\Security;
@ -25,10 +26,8 @@ class AccompanyingPeriodWorkEventListener
public function prePersistAccompanyingPeriodWork(AccompanyingPeriodWork $work): void
{
$referrer = $work->getAccompanyingPeriod()->getUser();
if (null !== $referrer) {
$work->addReferrer($referrer);
if ($this->security->getUser() instanceof User) {
$work->addReferrer($this->security->getUser());
}
}
}

View File

@ -1,69 +1,587 @@
Edit: Wijzigen
'First name': Voornaam
firstname: voornaam
firstName: voornaam
'Last name': Familienaam
lastname: familienaam
lastName: familienaam
Name: Naam
First name or Last name: Voornaam of familienaam
id: identificatienummer
Birthdate: Geboortedatum
'Date of birth': Geboortedatum
'Unknown date of birth': 'Geboortedatum onbekend'
birthdate: geboortedatum
deathdate: sterfdatum
Date of death: Sterfdatum
'Date of birth': 'Geboortedatum'
dateOfBirth: geboortedatum
dateofbirth: geboortedatum
'Unknown date of birth': 'Geboortedatum ongekend'
Birthdate before: Geboortedatum voor
Birthdate after: Geboortedatum na
Nationality: Nationaliteit
nationality: nationaliteit
'Without nationality': 'Zonder nationaliteit'
Gender: Geslacht
'Creation date': Opmaakdatum
'Not given': 'Niet gegeven'
'Place of birth': Geboorteplaats
'Country of birth': Geboorteland
Gender: Gender
gender: gender
Gender comment: Opmerkingen gender
'Creation date': Aanmaakdatum
'Not given': 'Niet opgegeven'
'Place of birth': 'Geboorteplaats'
placeOfBirth: geboorteplaats
'Country of birth': 'Geboorteland'
'Continent of birth': Continent van geboorte
countryOfBirth: 'Geboorteland'
'Unknown country of birth': 'Geboorteland onbekend'
'Marital status': 'Burgerlijke staat'
Date of last marital status change: Burgerlijke staat sinds
Comment on the marital status: Opmerkingen burgerlijke staat
'Number of children': 'Aantal kinderen'
'{0} No child|{1} One child | ]1,Inf] %nb% children': '{0} geen kinderen|{1} 1 kind | ]1,Inf] %nb% kinderen'
'National number': 'Nationale nummer'
Email: Emailadres
'{0} No child|{1} One child | ]1,Inf] %nb% children': '{0} Geen kinderen|{1} Één kind | ]1,Inf] %nb% kinderen'
'National number': 'Rijksregisternummer'
Email: 'Email'
Accept emails ?: Accepteert emails?
Accept emails: Mag per mail gecontacteerd worden
Address: Adres
Memo: Memo
Phonenumber: Telefoonnummer
'{0} Born the %date% | {1} Born the %date%': '{0} Geboren op %date% | {1} Geboren op %date%'
'Spoken languages': Spreektalen
'Unkown spoken language': 'Spreektalen onbekend'
Memo: Mémo
Phonenumber: 'Telefoonnummer'
phonenumber: telefoonnummer
Mobilenumber: 'Gsm nummer'
mobilenumber: gsm nummer
Accept short text message ?: Persoon geeft toestemming om berichten te ontvangen op dit nummer?
Accept short text message: Persoon geeft toestemming om berichten te ontvangen op dit nummer.
Other phonenumber: Andere telefoonnummers
Others phone numbers: Andere telefoonnummers
No additional phone numbers: Geen andere telefoonnummers
Description: beschrijving
Add new phone: Voeg een nieuw telefoonnummer toe
Remove phone: Verwijderen
'Notes on contact information': 'Opmerkingen contactinformatie'
'Remarks': 'Opmerkingen'
'Spoken languages': 'Gesproken talen'
'Unknown spoken languages': 'Gesproken talen ongekend'
Male: Man
Female: Vrouw
Neuter: Non-binair
man: Man
woman: Vrouw
Divorced: 'Officieel gescheiden'
Separated: 'Feitelijk gescheiden'
Widow: Weduwschap
'Unknow marital status': Onbekend
'Legal cohabitant': 'Wettige samenwoonst'
Single: Alleenstaand
Married: Gehuwd
'General information': 'Algemene informatie'
'Birth information': Geboorte
'Family information': Familie
'Contact information': Contactgegevens
'Administrative information': 'Administratieve gegevens'
'Alreay existing person': 'Geregistreerd dossier'
'Add the person': 'Maak nieuw personendossier aan'
'Confirm the creation': 'Bevestig de aanmaak'
'You will create this person': 'U hebt volgend dossier aangemaakt'
Return: Vorige
Submit: Opslaan
Reset: Delete
'The person data has been updated': 'De persoongegevens zijn aangepast'
'Add a person': 'Voeg een persoon toe'
'Person Menu': Personenmenu
'Your query is empty. Be more explicive': 'Er ontbreekt informatie. Gelieve meer informatie in te vullen.'
'The person data are not valid': 'De gegevens zijn niet correct'
'%nb% person with similar name. Please verify that this is a new person': '%nb% meerdere personen met dezelfde naam. Check of dit echt een nieuw dossier is.'
'The person has been created': 'Dossier is aangemaakt'
'Person search results': Personengezocht
'No persons matching search %pattern%': 'Geen personen stemmen met het gezocht "%pattern%" overeen.'
'%total% persons matching the search %pattern%': '{0} Geen personen stemmen met het gezocht "%pattern%" overeen. | {1} Één persoon stemd met het gezocht "%pattern%" overeen. | ]1,Inf] %total% personen stemmen met het gezocht "%pattern%" overeen.'
'Person details': 'Details van de persoon'
'Last opening since %last_opening%': '__Last opening since %last_opening%'
'Person accompanying period - %name%': '__Person accompanying period - %name%'
'Opening date': '__Opening date'
'Closing date': '__Closing date'
'Still open': '__Still open'
'Create accompanying period': '__Create accompanying period'
'Close accompanying period ': '__Close accompanying period '
'Open accompanying period': '__Open accompanying period'
'Unknown spoken languages': 'Spreektalen onbekend'
neuter: Non-binair
Man: Man
Woman: Vrouw
both: Onbepaald
Both: Onbepaald
Divorced: Gescheiden
Separated: Uit elkaar
Widow: Weduwe/weduwnaar
'Unknow marital status': Burgerlijke staat ongekend
'Legal cohabitant': 'Wettelijk samenwonend'
Single: Single
Married: Getrouwd
'General information': Algemene informatie
'Birth information': Geboortegegevens
'Family information': Familiale gegevens
'Contact information': 'Contactinformatie'
'Administrative information': Administratieve gegevens
Course number: Traject n°
Civility: Aanspreektitel
choose civility: --
All genders: alle genderkeuzes
Any person selected: Geen persoon geselecteerd
# dédoublonnage
Old person: Dubbel
Old person explain: zal verwijdert worden na de samenvoeging
New person: Doelpersoon
New person explain: zal bewaard worden na de samenvoeging
I confirm the merger of these 2 people : Ik bevestig de fusie van deze twee persoonsdossiers.
Person duplicate explained: Chill heeft mogelijke duplicaten gedetecteerd! U kunt bevestigen, weigeren, of handmatig een ander duplicaat aanwijzen.
Person flaged as duplicate: Dossiers gesignaleerd als vals-positief
Person flaged as duplicate explained: De volgende dossiers werden gesignaleerd als vals-positieven en zijn geen duplicaten!
Associate manually a duplicate person: Manueel een duplicaat aanduiden
Invert: Richting fusie omkeren.
Find duplicate: Duplicaten zoeken
Person duplicate: Duplicaten behandelen
Open in another window: Openen in een nieuw scherm
Deleted datas: Gegevens verwijderen
Keeped datas: Gegevens bewaren
Moved links: Verplaatste relaties
Keeped links: Bewaarde relaties
Merge duplicate persons folders: Samenvoegen van dossiers
Merge: Samenvoegen
duplicate: Duplicaat
not-duplicate: Vals-positief
Switch to truefalse: Aanduiden als vals-positief
Switch to duplicate: Aanduiden als een duplicaat
No duplicate candidates: Er werden geen duplicaten of vals-positieve dossiers gedetecteerd
# addresses part
address_street_address_1: Adres regel 1
address_street_address_2: Adres regel 2
address_valid_from: Begindatum validiteit adres
address_postcode_label: Gemeente
address_postcode_code: Postcode
address_country_name: Land
address_country_code: Landscode
'Alreay existing person': 'Reeds bestaand persoonsdossier'
'Add the person': 'Persoon toevoegen'
'Add the person and create an accompanying period': "Persoon & hulpverleningstraject aanmaken"
'Add the person and create a household': "Persoon & gezin aanmaken"
Show person: Toon persoonsdossier
'Confirm the creation': 'Aanmaak dossier bevestigen'
'You will create this person': 'U zal het volgende dossier aanmaken'
Return: Terugkeren
Submit: Versturen
Reset: 'Resetten'
'The person data has been updated': 'De gegevens zijn bijgewerkt'
'The person data provided are not valid': 'De ingevoerde gegevens zijn niet geldig'
'{1} The person field %field% is incorrect. Please check. | ]1, Inf] Several person fields are incorrect. Please check.': '{1} Het veld %field% is niet correct. Gelieve deze te corrigeren. | ]1, Inf] Verschillende velden zijn niet correct. Gelieve deze te verifiëren.'
'Add a person': 'Persoon toevoegen'
'Person Menu': 'Menu persoon'
'The person data are not valid': 'De gegevens van het formulier zijn ongeldig'
'%nb% person with similar name. Please verify that this is a new person': '{1} Een persoon werd gevonden met dezelfde naam. Verifieer dat het niet om dezelfde persoon gaat. | ]1, Inf] %nb% personen werden gevonden met eenzelfde naam. Verifieer dat het niet om dezelfde personen gaat.'
'The person has been created': 'Het dossier werd aangemaakt'
'Person search results': 'Resultaten zoekactie'
Person search results by phonenumber: Zoek personen aan de hand van een telefoonnummer
'Search within persons': 'Persoon zoeken'
Open person file: Open persoonsdossier.
and %number% other: '{0} en geen andere| {1} en één andere |]1, Inf] en %number% anderen'
'%total% persons matching the search pattern:': '{0} Geen enkele persoon voldoet aan de zoekcriteria : | {1} Één persoon werd gevonden die voldoet aan de zoekcriteria : | ]1,Inf] %total% werden gevonden die voldoen aan de zoekcriteria :'
'Last opening since %last_opening%': 'Laatste opening %last_opening%.'
'Person accompanying period - %name%': 'Geschiedenis traject - %name%'
'Opening date': 'Openingsdatum'
'Closing date': 'Afrondingsdatum'
'Period opened': 'Open periode'
'Close accompanying period': 'Hulpverleningstraject afsluiten'
'Open accompanying period': 'Hulpverleningstraject openen'
Period number %number%: 'Hulpverleningstraject n° %number%'
'Add an accompanying period in the past': Hulpverleningstraject in het verleden aanmaken
Begin a new accompanying period: Nieuw hulpverleningstraject starten
Create an accompanying period: Nieuw hulpverleningstraject aanmaken
'A period has been created.': Een hulpverleningstraject werd aangemaakt
'Error! Period not created!': Foutmelding! Dit hulpverleningstraject werd niet aangemaakt.
Update accompanying period: Hulpverleningstraject bijwerken
'An accompanying period has been updated.': Een hulpverleningstraject werd bijgewerkt
'Error when updating the period': Foutmelding tijdens bijwerken van hulpverleningstraject
'An accompanying period has been closed.': Een hulpverleningstraject werd afgesloten.
'Error! Period not closed!': "Foutmelding: het hulpverleningstraject werd niet afgesloten"
'An accompanying period has been opened.': Een hulpverleningstraject werd geopend.
'No remark': Geen opmerkingen
'Period not opened': "Het hulpverleningstraject werd niet geopend"
"Period not opened : form is invalid": "Het hulpverleningstraject werd niet geopend, het formulier bevat fouten"
'Closing motive': 'Reden van afsluiten'
Close accompanying course: Hulpverleningstraject sluiten
Re-open accompanying course: Hulpverleningstraject heropenen
'Person details': 'Details persoon'
'Update details for %name%': 'Gegevens van %name% bijwerken'
An accompanying period ends: Een hulpverleningstraject loopt op zijn einde
An accompanying period starts: Een hulpverleningstraject gaat van start
Any accompanying periods are open: Geen enkel hulpverleningstraject open
An accompanying period is open: Een hulpverleningstraject staat open
Accompanying period list: Hulpverleningstraject
Accompanying period list for person: Hulpverleningstrajecten van persoon
Accompanying period: Hulpverleningstraject
Any accompanying period: Geen enkel hulpverleningstraject
period: Hulpverleningstraject
New accompanying course: Nieuw hulpverleningstraject
Choose a motive: Reden van afsluiten
Re-open accompanying period: Heropenen
Re-Open a period: Heropenen
Are you sure you want to re-open this period ?: Bent u zeker dit hulpverleningstraject terug te willen openen?
'The period has been re-opened': Het hulpverleningstraject is terug geopend
Pediod closing form is not valid: Het formulier is niet leeg
Accompanying user: Begeleiding
No accompanying user: Geen begeleiding
No data given: Geen informatie
Participants: Betrokken personen
Create an accompanying course: Een hulpverleningstraject aanmaken
Accompanying courses of users: Hulpverleningstrajecten gebruiker
This accompanying course is still a draft: Dit hulpverleningstraject is nog in de ontwerpfase.
Associated peoples: Betrokken personen
Resources: Hulpverlening partners
Any requestor to this accompanying course: Er is geen aanvrager voor dit hulpverleningstraject
Social actions: Ondersteuningsmaatregelen
Last social actions: Laatste ondersteuningsmaatregelen
Social issue: Hulpvraag
Social issues: Hulpvragen
Last events on accompanying course: Laatste follow-up maatregelen
Edit & activate accompanying course: Bijwerken en valideren
See accompanying periods: Alle hulpverleningstrajecten bekijken
See accompanying period: Hulpverleningstraject bekijken
Edit accompanying period: Hulpverleningstraject bijwerken
See this period: Dit hulpverleningstraject bekijken
Requestor: Aanvrager
No requestor: Geen aanvrager
No resources: "Geen hulpverlening partners"
Persons associated: Betrokken personen
Referrer: Doorverwijzer
Referrers: Doorverwijzers
Some peoples does not belong to any household currently. Add them to an household soon: Sommige personen maken nog geen deel uit van een gezin. Voeg ze zo snel mogelijk aan gezin toe.
Add to household now: Toevoegen aan een gezin
Any resource for this accompanying course: Geen enkele hulpverlening partner
course.draft: Ontwerp
course.closed: Afgesloten
Origin: Oorsprong van de aanvraag
Delete accompanying period: Hulpverleningstraject verwijderen
Are you sure you want to remove the accompanying period "%id%" ?: Bent u zeker het hulpverleningstraject %id% te willen verwijderen?
The accompanying course has been successfully removed.: Het hulpverleningstraject werd verwijdert.
Concerned scopes: Betrokken werkingen
# person resource
person_resources_menu: "Steunfiguren"
Person resources: "Steunfiguren persoon"
Add a person resource: "Steunfiguur toevoegen"
edit resource: "Steunfiguur bijwerken"
Remove resource: "Steunfiguur verwijderen"
Are you sure you want to remove the resource for "%name%" ?: Bent u zeker dat u %name% wil verwijderen als steunfiguur?
The resource has been successfully removed.: "De steunfiguur werd verwijdert"
List of resources: "Overzicht steunfiguren"
There are no available resources: "Nog geen steunfiguur"
no comment found: "Geen enkele opmerking"
Select a type: "Kies een type"
Select a person: "Kies een persoon"
Select a thirdparty: "Kies een externe partner"
Contact person: "Kies een contactpersoon"
Kind: "Type"
# pickAPersonType
Pick a person: Kies een persoon
# Address
No address given: Geen adres toegewezen
The address has been successfully updated: Het adres werd succesvol bijgewerkt
Update address for %name%: Adres voor %name% bijwerken
Modify address for %name%: Adres voor %name% bijwerken
Edit an address: Adres bijwerken
Edit address: Adres bijwerken
Addresses history for %name%: Historiek adressen voor %name%
Addresses history: Historiek van adressen
New address : Nieuw adres
New address for %name% : Nieuw adres voor %name%
The new address was created successfully: Het nieuwe adres werd aangemaakt
Add an address: Een adres toevoegen
Back to the person details: Terugkeren naar persoonsgegevens
# Residential address
Residential addresses history for %name%: Historiek verblijfsadressen voor %name%
Residential addresses history: Historiek verblijfsadressen
Add a residential address: Verblijfsadres toevoegen
Which kind of residential address would you create ?: Welk type verblijfsadres wil u toevoegen?
The address of another person: Het adres van een ander persoon
The address of a third party: Het adres van een externe partner
A new address: Een nieuw adres
residential_address_person_explanation: Het adres wordt gelinked aan dat van een persoon. Zodra deze persoon verhuist zal het verblijfsadres deze persoon volgen.
residential_address_third_party_explanation: Het adres wordt gelinked aan dat van een externe partner.
residential_address_new_address_explanation: Nieuw adres aanmaken. Dit zal een vast adres zijn.
New residential address: Nieuw verblijfsadres
Host person: Kies het adres van een persoon
Host third party: Kies het adres van een externe partner
The new residential address was created successfully: Het nieuwe verblijfsadres werd aangemaakt
Edit a residential address: Verblijfsadres bijwerken
The residential address was updated successfully: Het verblijfsadres werd bijgewerkt.
Residential addresses: Verblijfsadres
Address of: Adres van
Delete residential address: Verwijder het verblijfsadres
Delete residential address ?: Het verblijfsadres verwijderen ?
Are you sure you want to remove this residential address for %name% ?: Bent u zeker het verblijfsadres van %name% te willen verwijderen?
Residential address had been deleted: Het verblijfsadres werd verwijdert.
#timeline
Timeline: Historiek
Closing the accompanying period: Afsluiting hulpverleningstraject
Opening the accompanying period: Opening hulpverleningstraject
'Timeline for %name%': 'Historiek van %name%'
#roles
CHILL_PERSON_SEE: Personen bekijken
CHILL_PERSON_UPDATE: Personen bijwerken
CHILL_PERSON_CREATE: Personen toevoegen
CHILL_PERSON_STATS: Statistieken van personen
CHILL_PERSON_LISTS: Overzicht van personen
CHILL_PERSON_DUPLICATE: Duplicaten persoon behandelen
CHILL_PERSON_ACCOMPANYING_PERIOD_SEE: Hulpverleningstrajecten bekijken
#period
Period closed!: Hulpverleningstraject afgesloten!
Pediod closing form is not valide: Het formulier voor het afsluiten van het hulpverleningstraject is niet geldig.
#widget
## widget person_list
Accompanyied people: Begeleide personen
## exports
Count peoples by various parameters.: Aantal personen tellen die voldoen aan vershillende criteria.
Count peoples: Aantal personen
List peoples: Overzicht personen
Create a list of people according to various filters.: Overzicht geven van personen die voldoen aan bepaalde criteria.
Fields to include in export: Velden die toegevoegd moeten worden in de export van gegevens.
Address valid at this date: Adres dat geldig is op deze datum.
## filters
Filter by person gender: Filteren op basis van gender
Accepted genders: Aanvaarde genderkeuzes
'Filtering by genders: only %genders%': 'Filteren op basis van gender: enkel %genders%'
Filter by person's nationality: Filteren op basis van nationaliteit
Nationalities: Nationaliteiten
Choose countries: Nationaliteiten kiezen
'Filtered by nationality : %nationalities%': 'Filteren op basis van nationaliteit: enkel %nationalities%'
Filter by person's birthdate: Filteren op basis van geboortedatum
Born after this date: Geboren na
Born before this date: Geboren voor
This field should not be empty: Dit veld mag niet leeg zijn
This date should be after the date given in "born after" field: Deze datum moet vallen na de datum in het veld 'geboren na'
"Filtered by person's birtdate: between %date_from% and %date_to%": "Filteren op basis van geboortedatum: enkel geboren tussen %date_from% en %date_to%"
"Filter by accompanying period: active period": "Filteren op basis van actieve hulpverleningstrajecten"
Having an accompanying period opened after this date: Met een hulpverleningstraject dat geopend werd na deze datum
Having an accompanying period ending before this date, or still opened at this date: Met een hulpverleningstraject dat gesloten werd voor deze datum, of nog steeds actief op deze datum
"Filtered by accompanying period: persons having an accompanying period opened after the %date_from% and closed before the %date_to% (or still opened at the %date_to%)": "Filteren op basis van hulpverleningstraject: personen die een actief hulpverleningstraject hebben na %date_from%, en gesloten voor %date_to% (of nog steeds actief op %date_to%)"
"Filter by accompanying period: starting between two dates": "Filteren op basis van hulpverleningstraject: start van traject tussen twee data"
"Having an accompanying period opened before this date": "Met een hulpverleningstraject actief voor deze datum"
"Filtered by accompanying period: persons having an accompanying period opened between the %date_from% and %date_to%": "Filteren op basis van hulpverleningstraject: actief tussen %date_from% en %date_to%"
"Filter by accompanying period: closed between two dates": "Filteren op basis van hulpverleningstraject: traject afgesloten tussen twee data"
Having an accompanying period closed after this date: Met een hulpverleningstraject afgesloten na deze datum
"Having an accompanying period closed before this date": "Met een hulpverleningstraject afgesloten voor deze datum"
"Filtered by accompanying period: persons having an accompanying period closed between the %date_from% and %date_to%": "Filteren op basis van hulpverleningstraject: met een traject dat afgesloten werd tussen %date_from% en %date_to%"
## aggregators
Group people by nationality: Personen groeperen per nationaliteit
Group by level: Groeperen per niveau
Group by continents: Groeperen per continent
Group by country: Groeperen per land
Group people by gender: Groeperen op basis van gender
Aggregate by age: Groeperen op basis van
Calculate age in relation to this date: Leeftijd bereken relatief tot deze datum
Group people by country of birth: Personen groeperen op bais van geboorteland
Similar persons: Gelijkaardige personen
crud:
closing_motive:
index:
title: Overzicht redenen tot afsluiten
add_new: Een nieuwe toevoegen
title_new: Nieuwe reden tot afsluiten
title_edit: Reden tot afsluiten bijwerken
marital_status:
index:
title: Overzicht burgerlijke staat
add_new: Een nieuwe toevoegen
title_new: Nieuwe burgerlijke staat
title_edit: Burgerlijke staat bijwerken
social_issue:
index:
title: Overzicht hulpverleningsvragen
add_new: Een nieuwe hulpverleningsvraag toevoegen
title_new: Nieuwe hulpverleningsvraag
title_edit: hulpverleningsvraag bijwerken
social_action:
index:
title: Overzicht hulpverleningsmaatregelen
add_new: Nieuwe hulpverleningsmaatregel toevoegen
title_new: Nieuwe hulpverleningsmaatregel
title_edit: Hulpverleningsmaatregel bijwerken
title_link: Hulpverleningsmaatregel bekijken
social_goal:
index:
title: Overzicht objectieven hulpverleningsmaatregel
add_new: Nieuw objectief hulpverleningsmaatregel toevoegen
title_new: Nieuw objectief
title_edit: Objectief bijwerken
social_result:
index:
title: Overzicht resultaten hulpverleningsmaatregel
add_new: Nieuw resultaat hulpverleningsmaatregel toevoegen
title_new: Nieuw resultaat
title_edit: Resultaat bijwerken
# specific to closing motive
closing_motive:
any parent: Geen ouder
new child: Nieuw kind
Configuration of person bundle: Configuratie module "Persoon"
person_admin:
What would you like to configure ?: Wat wil u graag configureren ?
closing motives: Redenen tot afsluiten
closing motives list: Overzicht redenen tot afsluiten
closing motive explanation: >
De redenen tot afsluiten geven een indicatie over waarom een hulpverleningstraject werd afgesloten.
marital status: Burgerlijke staat
marital status list: Overzicht burgerlijke staat
marital status explanation: >
Configureer lijst voor het aanduiden van de burgerlijke staat
social_issue: Hulpverleningsvragen
social_action: Hulpverleningsmaatregelen
social_goal: Doelen
social_result: Resultaten
social_evaluation: Evaluaties
# specific to accompanying period
accompanying_period:
dates: Periode
dates_from_%opening_date%: Actief sinds %opening_date%
dates_from_%opening_date%_to_%closing_date%: Actief van %opening_date% tot %closing_date%
DRAFT: Ontwerp
CONFIRMED: Bevestigd
CLOSED: Afgesloten
emergency: Dringend
occasional: éénmalig
regular: regelmatig
Confidential: vertrouwelijk
confidential: vertrouwelijk
Draft: ontwerp
Confirmed: actief
Closed: Afgesloten
# Accompanying Course
Accompanying Course: Hulpverleningstraject
Accompanying Course History: Historiek hulpverleningstraject
Resume Accompanying Course: Samenvatting hulpverleningstraject
Show Accompanying Course: Hulpverleningstraject bekijken
Edit Accompanying Course: Hulpverleningstraject bijwerken
Close Accompanying Course: Hulpverleningstraject afsluiten
Create Accompanying Course: Nieuw hulpverleningstraject aanmaken
Drop Accompanying Course: Hulpverleningstraject verwijderen
This course is located at a temporarily address. You should locate this course to an user: Het hulpverleningstraject is een voorlopig adres toegewezen. Het zou toegewezen moeten worden aan het adres van een persoon.
Accompanying course location: Locatie van hulpverleningstraject
This course is located by: Locatie bij
This course has a temporarily location: Voorlopige locatie
Choose a person to locate by: Adres van persoon toewijzen
Associate at least one member with an household, and set an address to this household: Associeer minstens één betrokken persoon in dit hulpverleningstraject met een gezin en wijs een adres toe aan dit gezin.
Locate by: Adres toewijzen
fix it: Aanvullen
accompanying_course:
administrative_location: Administratieve locatie
comment is pinned: Deze opmerking is gepinned
# Accompanying Course comments
Accompanying Course Comment: Opmerking
Accompanying Course Comment list: Opmerkingen hulpverleningstraject
pinned: pinnen
Pin comment: Pinnen
Post a new comment: Een nieuwe opmerking posten
Write a new comment: Een nieuwe opmerking schrijven
Edit a comment: Opmerking bijwerken
accompanying_course_comment:
Comment removed: Opmerking verwijdert
Remove comment: Opmerking verwijdert
Are you sure you want to remove comment ?: Bent u zeker deze opmerking te willen verwijderen?
Read more: Meer lezen..
# Household
Household: Gezin
Summary: Samenvatting
Members: Gezinsleden
Addresses: Addressen
Move household: Nieuwe verhuis
Addresses history for household: Historiek adressen
Household accompanying period: Hulpverleningstrajecten van gezin
Household summary: Samenvatting gezin
Edit household address: Adres gezin bijwerken
Show household: Gezin bekijken
Back to household: Terugkeren naar gezin
Remove household composition: Gezinssamenstelling verwijderen
Are you sure you want to remove this composition?: Bent u zeker deze gezinssamenstelling te willen verwijderen?
Concerns household n°%id%: Betrokken gezin n°%id%
Composition: Gezinssamenstelling
Budget: Budget
The composition has been successfully removed.: De gezinssamenstelling werd verwijdert.
# accompanying course work
Accompanying Course Actions: Hulpverleningsmaatregelen
Accompanying Course Action: Hulpverleningsmaatregel
Are you sure you want to remove this work of the accompanying period %name% ?: Bent u zeker de hulpverleningsmaatregel voor het traject %name% te willen verwijderen?
The accompanying period work has been successfully removed.: De hulpverleningsmaatregel werd verwijdert
accompanying_course_work:
create: Voeg een hulpverleningsmaatregel toe
Create accompanying course work: Voeg een hulpverleningsmaatregel toe
Edit accompanying course work: Hulpverleningsmaatregel bijwerken
List accompanying course work: Overzicht hulpverleningsmaatregelen
action: Hulpverleningsmaatregel
create_date: Aanmaakdatum
start_date: Aanvangsdatum
end_date: Einddatum
max_date: Vervaldatum
warning_interval: Herinnering
'%days% days before max_date': "%days% dag(en) voor de vervaldatum"
results without objective: Geen enkel objectief - motief
no_results: Geen enkel resultaat - oriëntering
results: Resultaten - oriënteringen
goal: Objectieven - motieven
evaluations: Evaluaties
Any work: Geen enkele hulpverleningsmaatregel
remove: Hulpverleningsmaatregel verwijderen
social_evaluation: Evaluatie
#
Person addresses: Verblijfsadres
Household addresses: Domicilie adres
Insert an address: Insérer une adresse
see social issues: Hulpverleningsvragen bekijken
see persons associated: Betrokken personen bekijken
docgen:
Accompanying Period basic: "Hulpverleningstraject (basis)"
Accompanying period work: "Hulpverleningsmaatregel"
Accompanying period work context: "Evaluatie hulpverleningsmaatregel"
Main person: Hoofdpersoon
person 1: Persoon één
person 2: Persoon twee
Ask for main person: Vraag aan de gebruiker om de hoofdpersoon te identificeren
Ask for person 1: Vraag aan de gebruiker om de eerste persoon te identificeren
Ask for person 2: Vraag aan de gebruiker om de tweede persoon te identificeren
A basic context for accompanying period: context van het hulpverleningstraject
A context for accompanying period work: Context voor de hulpverleningsmaatregelen
A context for accompanying period work evaluation: Context voor de evaluatie van de hulpverleningsmaatregel
Person basic: Persoon (basis)
A basic context for person: Context voor de personen
period_notification:
period_designated_subject: U bent de doorverwijzer voor dit huplverleningstraject
You are designated to a new period: U bent de doorverwijzer voor dit huplverleningstraject
Persons are: De betrokken personen zijn de volgende
Social issues are: De hulpverleningsvragen zijn de volgende
See it online: Het hulpverleningstraject bekijken
Person locating period has moved: De persoon aan wie dit hulpverleningstraject werd toegewezen is verhuisd.
You are getting a notification for a period which does not exists any more: Deze notificatie komt niet overeen met een bestaand hulpverleningstraject.
You are getting a notification for a period you are not allowed to see: De notificatie verwijst naar een hulpverleningstraject waartoe u geen toegang heeft.
This is the minimal period details: Hulpverleningstraject n°
household_composition:
No composition yet: Geen enkele gezinssamenstelling toegewezen
Compositions: Gezinssamenstelling
endDate: Einddatum
numberOfChildren: Aantal kinderen in het gezin
Household composition: Gezinssamenstelling
Composition added: Informatie over de gezinssamenstelling toegevoegd
Currently no composition: Geen enkele gezinssamenstelling toegewezen
Add a composition: Een gezinssamenstelling toevoegen
Update composition: Gezinssamenstelling bijwerken
Create: Een nieuwe gezinssamenstelling toewijzen
# docgen
Linked evaluations: Gerelateerde evaluaties
# Accompanying period per user
My accompanying periods: Mijn hulpverleningstrajecten
My accompanying periods in draft: Mijn hulpverleningstrajecten in ontwerp
workflow:
Doc for evaluation (n°%eval%): Evaluatiedocument n°%eval%
period_by_user_list:
Period by user: Hulpverleningstrajecten per gebruiker
Pick a user: Selecteer een gebruiker om zijn/haar hulpverleningstrajecten te zien
Any course or no authorization to see them: Deze gebruiker heeft geen hulpverleningstrajecten of geen waartoe u toegang heeft.

View File

@ -13,7 +13,9 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use ChampsLibres\AsyncUploaderBundle\TempUrl\TempUrlGeneratorInterface;
use ChampsLibres\WopiBundle\Service\Wopi as CLWopi;
use ChampsLibres\WopiLib\Contract\Service\DocumentLockManagerInterface;
use ChampsLibres\WopiLib\Contract\Service\DocumentManagerInterface;
use Chill\WopiBundle\Service\Wopi\ChillDocumentLockManager;
use Chill\WopiBundle\Service\Wopi\ChillDocumentManager;
use Chill\WopiBundle\Service\Wopi\ChillWopi;
@ -41,6 +43,10 @@ return static function (ContainerConfigurator $container) {
$services
->alias(DocumentManagerInterface::class, ChillDocumentManager::class);
$services
->set(ChillDocumentLockManager::class)
->decorate(DocumentLockManagerInterface::class);
// TODO: Move this into the async bundle (low priority)
$services
->alias(TempUrlGeneratorInterface::class, 'async_uploader.temp_url_generator');

View File

@ -0,0 +1,66 @@
<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\WopiBundle\Service\Wopi;
use ChampsLibres\WopiLib\Contract\Entity\Document;
use ChampsLibres\WopiLib\Contract\Service\DocumentLockManagerInterface;
use Chill\MainBundle\Redis\ChillRedis;
use Psr\Http\Message\RequestInterface;
use RuntimeException;
class ChillDocumentLockManager implements DocumentLockManagerInterface
{
private const LOCK_DURATION = 60 * 30;
private int $postDeleteLockDurationMs;
private ChillRedis $redis;
public function __construct(ChillRedis $redis)
{
$this->redis = $redis;
}
public function deleteLock(Document $document, RequestInterface $request): bool
{
$this->redis->del($this->getCacheId($document));
return true;
}
public function getLock(Document $document, RequestInterface $request): string
{
if (false !== $value = $this->redis->get($this->getCacheId($document))) {
return $value;
}
throw new RuntimeException('wopi key does not exists');
}
public function hasLock(Document $document, RequestInterface $request): bool
{
return $this->redis->exists($this->getCacheId($document)) > 0;
}
public function setLock(Document $document, string $lockId, RequestInterface $request): bool
{
$key = $this->getCacheId($document);
$this->redis->setex($key, self::LOCK_DURATION, $lockId);
return true;
}
private function getCacheId(Document $document): string
{
return sprintf('wopi_lib_lock_%s', $document->getWopiDocId());
}
}

View File

@ -13,6 +13,7 @@ namespace Chill\WopiBundle\Service\Wopi;
use ChampsLibres\WopiLib\Contract\Service\DocumentManagerInterface;
use ChampsLibres\WopiLib\Contract\Service\WopiInterface;
use DateTimeImmutable;
use DateTimeInterface;
use loophp\psr17\Psr17Interface;
use Psr\Cache\CacheItemPoolInterface;
@ -20,6 +21,7 @@ use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use function strlen;
final class ChillWopi implements WopiInterface
{
@ -150,7 +152,97 @@ final class ChillWopi implements WopiInterface
string $xWopiEditors,
RequestInterface $request
): ResponseInterface {
return $this->wopi->putFile($fileId, $accessToken, $xWopiLock, $xWopiEditors, $request);
$document = $this->documentManager->findByDocumentId($fileId);
$version = $this->documentManager->getVersion($document);
// File is unlocked, we must reject the document, except if collabora is autosaving
if (false === $this->documentManager->hasLock($document) && 'true' !== ($request->getHeader('x-lool-wopi-isexitsave') ?? ['false'])[0]) {
if (0 !== $this->documentManager->getSize($document)) {
return $this
->psr17
->createResponse(409)
->withHeader(
WopiInterface::HEADER_ITEM_VERSION,
sprintf('v%s', $version)
);
}
}
// File is locked, we check for the lock
if ($this->documentManager->hasLock($document)) {
if ($xWopiLock !== $currentLock = $this->documentManager->getLock($document)) {
return $this
->psr17
->createResponse(409)
->withHeader(
WopiInterface::HEADER_LOCK,
$currentLock
)
->withHeader(
WopiInterface::HEADER_ITEM_VERSION,
sprintf('v%s', $version)
);
}
}
// for collabora online editor, check timestamp if present
/* delete because it seems that collabora send always the first wopi-timestamp, not the last known one
// example:
// load the doc: the last-wopi is 12:00 in FileInfo
// save the doc: x-cool-wopi-timestamp is 12:00, but we replace the ts with the time of save (12:05)
// save the doc again: x-cool-wopi-timestamp is still 12:00...
if ($request->hasHeader('x-cool-wopi-timestamp')) {
$date = DateTimeImmutable::createFromFormat(
DateTimeImmutable::ATOM,
$request->getHeader('x-cool-wopi-timestamp')[0]
);
if (false === $date) {
throw new RuntimeException('Error parsing date: ' . implode('', DateTimeImmutable::getLastErrors()));
}
if ($this->documentManager->getLastModifiedDate($document)->getTimestamp() < $date->getTimestamp()) {
return $this
->psr17
->createResponse(409)
->withHeader(
WopiInterface::HEADER_LOCK,
$currentLock
)
->withHeader(
WopiInterface::HEADER_ITEM_VERSION,
sprintf('v%s', $version)
)
->withBody(
$this->psr17->createStream(
json_encode(['COOLStatusCode' => 1010])
)
);
}
}
*/
$body = (string) $request->getBody();
$this->documentManager->write(
$document,
[
'content' => $body,
'size' => (string) strlen($body),
]
);
$version = $this->documentManager->getVersion($document);
return $this
->psr17
->createResponse()
->withHeader(
WopiInterface::HEADER_LOCK,
$xWopiLock
)
->withHeader(
WopiInterface::HEADER_ITEM_VERSION,
sprintf('v%s', $version)
);
}
public function putRelativeFile(string $fileId, string $accessToken, ?string $suggestedTarget, ?string $relativeTarget, bool $overwriteRelativeTarget, int $size, RequestInterface $request): ResponseInterface

View File

@ -0,0 +1,99 @@
<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\WopiBundle\Tests\Service\Wopi;
use Chill\DocStoreBundle\Entity\StoredObject;
use Chill\MainBundle\Redis\ChillRedis;
use Chill\WopiBundle\Service\Wopi\ChillDocumentLockManager;
use Prophecy\PhpUnit\ProphecyTrait;
use Psr\Http\Message\RequestInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
/**
* @internal
* @coversNothing
*/
final class ChillDocumentLockManagerTest extends KernelTestCase
{
use ProphecyTrait;
protected function setUp(): void
{
self::bootKernel();
}
public function testMultipleLoops()
{
$manager = $this->makeManager(1);
$document = new StoredObject();
$request = $this->prophesize(RequestInterface::class);
$i = 0;
while (50 > ++$i) {
$this->assertFalse($manager->hasLock($document, $request->reveal()));
$this->assertTrue($manager->setLock($document, 'dummy', $request->reveal()));
$this->assertEquals('dummy', $manager->getLock($document, $request->reveal()));
$this->assertTrue($manager->deleteLock($document, $request->reveal()));
$this->assertFalse($manager->hasLock($document, $request->reveal()));
}
}
public function testRelock()
{
$manager = $this->makeManager(1);
$document = new StoredObject();
$request = $this->prophesize(RequestInterface::class);
$this->assertFalse($manager->hasLock($document, $request->reveal()));
$this->assertTrue($manager->setLock($document, 'dummy', $request->reveal()));
$this->assertEquals('dummy', $manager->getLock($document, $request->reveal()));
$this->assertTrue($manager->setLock($document, 'bar', $request->reveal()));
$this->assertEquals('bar', $manager->getLock($document, $request->reveal()));
$this->assertTrue($manager->deleteLock($document, $request->reveal()));
$this->assertFalse($manager->hasLock($document, $request->reveal()));
}
public function testSingleLock()
{
$manager = $this->makeManager(1);
$document = new StoredObject();
$request = $this->prophesize(RequestInterface::class);
$this->assertFalse($manager->hasLock($document, $request->reveal()));
$this->assertTrue($manager->setLock($document, 'dummy', $request->reveal()));
$this->assertEquals('dummy', $manager->getLock($document, $request->reveal()));
$this->assertTrue($manager->deleteLock($document, $request->reveal()));
$this->assertFalse($manager->hasLock($document, $request->reveal()));
}
private function makeManager(int $ttlAfterDeleteSeconds): ChillDocumentLockManager
{
$redis = self::$container->get(ChillRedis::class);
return new ChillDocumentLockManager($redis, $ttlAfterDeleteSeconds);
}
}