diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d9a0da1c..2ed9cdebf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/composer.json b/composer.json index ac27e39e5..4814e80ff 100644 --- a/composer.json +++ b/composer.json @@ -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": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 89cb80635..8f157fcc5 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -40,6 +40,9 @@ src/Bundle/ChillDocGeneratorBundle/tests/ + + src/Bundle/ChillWopiBundle/tests/ + diff --git a/src/Bundle/ChillActivityBundle/translations/messages.nl.yaml b/src/Bundle/ChillActivityBundle/translations/messages.nl.yaml new file mode 100644 index 000000000..8d7cc293a --- /dev/null +++ b/src/Bundle/ChillActivityBundle/translations/messages.nl.yaml @@ -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 diff --git a/src/Bundle/ChillActivityBundle/translations/validators.nl.yaml b/src/Bundle/ChillActivityBundle/translations/validators.nl.yaml new file mode 100644 index 000000000..a334ae523 --- /dev/null +++ b/src/Bundle/ChillActivityBundle/translations/validators.nl.yaml @@ -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". diff --git a/src/Bundle/ChillAsideActivityBundle/src/translations/messages.nl.yaml b/src/Bundle/ChillAsideActivityBundle/src/translations/messages.nl.yaml new file mode 100644 index 000000000..cae3cd059 --- /dev/null +++ b/src/Bundle/ChillAsideActivityBundle/src/translations/messages.nl.yaml @@ -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 diff --git a/src/Bundle/ChillAsideActivityBundle/src/translations/validators.nl.yaml b/src/Bundle/ChillAsideActivityBundle/src/translations/validators.nl.yaml new file mode 100644 index 000000000..5e6933bd5 --- /dev/null +++ b/src/Bundle/ChillAsideActivityBundle/src/translations/validators.nl.yaml @@ -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) diff --git a/src/Bundle/ChillBudgetBundle/translations/messages+intl-icu.nl.yml b/src/Bundle/ChillBudgetBundle/translations/messages+intl-icu.nl.yml new file mode 100644 index 000000000..b38b157da --- /dev/null +++ b/src/Bundle/ChillBudgetBundle/translations/messages+intl-icu.nl.yml @@ -0,0 +1,8 @@ +budget: + number of elements: >- + {nb_items, plural, + =0 {Geen element} + one {Één element} + many {# elementen} + other {# elementen} + } diff --git a/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml b/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml index 1ccdcf1e6..299fa295e 100644 --- a/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillBudgetBundle/translations/messages.fr.yml @@ -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 diff --git a/src/Bundle/ChillBudgetBundle/translations/messages.nl.yml b/src/Bundle/ChillBudgetBundle/translations/messages.nl.yml new file mode 100644 index 000000000..5fd21520d --- /dev/null +++ b/src/Bundle/ChillBudgetBundle/translations/messages.nl.yml @@ -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% diff --git a/src/Bundle/ChillBudgetBundle/translations/validators.nl.yml b/src/Bundle/ChillBudgetBundle/translations/validators.nl.yml new file mode 100644 index 000000000..7281b6380 --- /dev/null +++ b/src/Bundle/ChillBudgetBundle/translations/validators.nl.yml @@ -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 \ No newline at end of file diff --git a/src/Bundle/ChillCalendarBundle/translations/messages.nl.yml b/src/Bundle/ChillCalendarBundle/translations/messages.nl.yml new file mode 100644 index 000000000..c832138a8 --- /dev/null +++ b/src/Bundle/ChillCalendarBundle/translations/messages.nl.yml @@ -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 diff --git a/src/Bundle/ChillDocStoreBundle/Service/StoredObjectManager.php b/src/Bundle/ChillDocStoreBundle/Service/StoredObjectManager.php index 7ff9b2ea8..0f867e0de 100644 --- a/src/Bundle/ChillDocStoreBundle/Service/StoredObjectManager.php +++ b/src/Bundle/ChillDocStoreBundle/Service/StoredObjectManager.php @@ -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) { diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue index 9dd85fa73..292b0de16 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/components/AddAddress/CitySelection.vue @@ -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(); diff --git a/src/Bundle/ChillMainBundle/translations/messages.nl.yml b/src/Bundle/ChillMainBundle/translations/messages.nl.yml index 2d036d849..4412ad015 100644 --- a/src/Bundle/ChillMainBundle/translations/messages.nl.yml +++ b/src/Bundle/ChillMainBundle/translations/messages.nl.yml @@ -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 GNU Affero General Public License": "Ce programme est un logiciel libre: vous pouvez le redistribuer et/ou le modifier selon les termes de la licence GNU Affero GPL" +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% -Welcome to %installation_name%: Welkom bij %installation_name% \ No newline at end of file +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 + diff --git a/src/Bundle/ChillPersonBundle/EventListener/AccompanyingPeriodWorkEventListener.php b/src/Bundle/ChillPersonBundle/EventListener/AccompanyingPeriodWorkEventListener.php index 5fbf4b9ee..83f9ca460 100644 --- a/src/Bundle/ChillPersonBundle/EventListener/AccompanyingPeriodWorkEventListener.php +++ b/src/Bundle/ChillPersonBundle/EventListener/AccompanyingPeriodWorkEventListener.php @@ -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()); } } } diff --git a/src/Bundle/ChillPersonBundle/translations/messages.nl.yml b/src/Bundle/ChillPersonBundle/translations/messages.nl.yml index 74b99aab8..2ecbd41a0 100644 --- a/src/Bundle/ChillPersonBundle/translations/messages.nl.yml +++ b/src/Bundle/ChillPersonBundle/translations/messages.nl.yml @@ -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. diff --git a/src/Bundle/ChillWopiBundle/src/Resources/config/services.php b/src/Bundle/ChillWopiBundle/src/Resources/config/services.php index ff741d492..0df482135 100644 --- a/src/Bundle/ChillWopiBundle/src/Resources/config/services.php +++ b/src/Bundle/ChillWopiBundle/src/Resources/config/services.php @@ -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'); diff --git a/src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentLockManager.php b/src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentLockManager.php new file mode 100644 index 000000000..debf63c70 --- /dev/null +++ b/src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentLockManager.php @@ -0,0 +1,66 @@ +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()); + } +} diff --git a/src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillWopi.php b/src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillWopi.php index b1ab63e8c..72ee221d7 100644 --- a/src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillWopi.php +++ b/src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillWopi.php @@ -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 diff --git a/src/Bundle/ChillWopiBundle/tests/Service/Wopi/ChillDocumentLockManagerTest.php b/src/Bundle/ChillWopiBundle/tests/Service/Wopi/ChillDocumentLockManagerTest.php new file mode 100644 index 000000000..ac086e75f --- /dev/null +++ b/src/Bundle/ChillWopiBundle/tests/Service/Wopi/ChillDocumentLockManagerTest.php @@ -0,0 +1,99 @@ +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); + } +}