Merge branch 'dev' into 'master'

Local organizers validate teams

See merge request animath/si/plateforme-tfjm!13
This commit is contained in:
Yohann D'ANELLO 2021-01-23 20:59:40 +00:00
commit 1b117e9289
9 changed files with 166 additions and 116 deletions

View File

@ -6,7 +6,7 @@
</head> </head>
<body> <body>
<p> <p>
Bonjour {{ user.registration }}, Bonjour,
</p> </p>
<p> <p>

View File

@ -1,4 +1,4 @@
Bonjour {{ user.registration }}, Bonjour {{ user }},
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer
au {{ team.participation.get_problem_display }} du TFJM². au {{ team.participation.get_problem_display }} du TFJM².

View File

@ -321,8 +321,12 @@ class TestStudentParticipation(TestCase):
A team asked for validation. Try to validate it. A team asked for validation. Try to validate it.
""" """
self.team.participation.valid = False self.team.participation.valid = False
self.team.participation.tournament = self.tournament
self.team.participation.save() self.team.participation.save()
self.tournament.organizers.add(self.superuser.registration)
self.tournament.save()
# No right to do that # No right to do that
resp = self.client.post(reverse("participation:team_detail", args=(self.team.pk,)), data=dict( resp = self.client.post(reverse("participation:team_detail", args=(self.team.pk,)), data=dict(
_form_type="ValidateParticipationForm", _form_type="ValidateParticipationForm",
@ -384,6 +388,9 @@ class TestStudentParticipation(TestCase):
self.coach.registration.team = self.team self.coach.registration.team = self.team
self.coach.registration.save() self.coach.registration.save()
self.team.participation.tournament = self.tournament
self.team.participation.save()
response = self.client.get(reverse("participation:update_team", args=(self.team.pk,))) response = self.client.get(reverse("participation:update_team", args=(self.team.pk,)))
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)

View File

@ -5,6 +5,7 @@ from io import BytesIO
import os import os
from zipfile import ZipFile from zipfile import ZipFile
from django.conf import settings
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
@ -20,7 +21,7 @@ from django.views.generic import CreateView, DetailView, FormView, RedirectView,
from django.views.generic.edit import FormMixin, ProcessFormView from django.views.generic.edit import FormMixin, ProcessFormView
from django_tables2 import SingleTableView from django_tables2 import SingleTableView
from magic import Magic from magic import Magic
from registration.models import AdminRegistration, StudentRegistration from registration.models import StudentRegistration
from tfjm.lists import get_sympa_client from tfjm.lists import get_sympa_client
from tfjm.matrix import Matrix from tfjm.matrix import Matrix
from tfjm.views import AdminMixin, VolunteerMixin from tfjm.views import AdminMixin, VolunteerMixin
@ -221,19 +222,21 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView)
self.object.participation.valid = False self.object.participation.valid = False
self.object.participation.save() self.object.participation.save()
for admin in AdminRegistration.objects.all(): mail_context = dict(team=self.object, domain=Site.objects.first().domain)
mail_context = dict(user=admin.user, team=self.object, domain=Site.objects.first().domain) mail_plain = render_to_string("participation/mails/request_validation.txt", mail_context)
mail_plain = render_to_string("participation/mails/request_validation.txt", mail_context) mail_html = render_to_string("participation/mails/request_validation.html", mail_context)
mail_html = render_to_string("participation/mails/request_validation.html", mail_context) send_mail("[TFJM²] Validation d'équipe", mail_plain, [settings.DEFAULT_FROM_EMAIL],
admin.user.email_user("[TFJM²] Validation d'équipe", mail_plain, html_message=mail_html) [self.object.participation.tournament.organizers_email], html_message=mail_html)
return super().form_valid(form) return super().form_valid(form)
def handle_validate_participation(self, form): def handle_validate_participation(self, form):
""" """
An admin validates the team (or not) An admin validates the team (or not)
""" """
if not self.request.user.registration.is_admin: if not self.object.participation.tournament \
form.add_error(None, _("You are not an administrator.")) or self.request.user.registration not in self.object.participation.tournament.organizers.all():
form.add_error(None, _("You are not an organizer of the tournament."))
return self.form_invalid(form) return self.form_invalid(form)
elif self.object.participation.valid is not False: elif self.object.participation.valid is not False:
form.add_error(None, _("This team has no pending validation.")) form.add_error(None, _("This team has no pending validation."))

View File

@ -100,7 +100,7 @@ class StudentRegistrationForm(forms.ModelForm):
""" """
class Meta: class Meta:
model = StudentRegistration model = StudentRegistration
fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'phone_number', fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'phone_number', 'health_issues',
'school', 'responsible_name', 'responsible_phone', 'responsible_email', 'school', 'responsible_name', 'responsible_phone', 'responsible_email',
'give_contact_to_animath', 'email_confirmed',) 'give_contact_to_animath', 'email_confirmed',)
@ -177,7 +177,7 @@ class CoachRegistrationForm(forms.ModelForm):
""" """
class Meta: class Meta:
model = CoachRegistration model = CoachRegistration
fields = ('team', 'birth_date', 'gender', 'address', 'phone_number', 'professional_activity', fields = ('team', 'birth_date', 'gender', 'address', 'phone_number', 'health_issues', 'professional_activity',
'give_contact_to_animath', 'email_confirmed',) 'give_contact_to_animath', 'email_confirmed',)

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.11 on 2021-01-23 20:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('registration', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='participantregistration',
name='health_issues',
field=models.TextField(blank=True, help_text='You can indicate here your allergies or anything that is important to know for organizers', verbose_name='health issues'),
),
]

View File

@ -150,6 +150,12 @@ class ParticipantRegistration(Registration):
blank=True, blank=True,
) )
health_issues = models.TextField(
verbose_name=_("health issues"),
blank=True,
help_text=_("You can indicate here your allergies or anything that is important to know for organizers"),
)
photo_authorization = models.FileField( photo_authorization = models.FileField(
verbose_name=_("photo authorization"), verbose_name=_("photo authorization"),
upload_to=get_random_photo_filename, upload_to=get_random_photo_filename,

View File

@ -51,6 +51,9 @@
<dt class="col-sm-6 text-right">{% trans "Phone number:" %}</dt> <dt class="col-sm-6 text-right">{% trans "Phone number:" %}</dt>
<dd class="col-sm-6">{{ user_object.registration.phone_number }}</dd> <dd class="col-sm-6">{{ user_object.registration.phone_number }}</dd>
<dt class="col-sm-6 text-right">{% trans "Health issues:" %}</dt>
<dd class="col-sm-6">{{ user_object.registration.health_issues|default:any }}</dd>
<dt class="col-sm-6 text-right">{% trans "Photo authorization:" %}</dt> <dt class="col-sm-6 text-right">{% trans "Photo authorization:" %}</dt>
<dd class="col-sm-6"> <dd class="col-sm-6">
{% if user_object.registration.photo_authorization %} {% if user_object.registration.photo_authorization %}

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TFJM\n" "Project-Id-Version: TFJM\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-23 19:56+0100\n" "POT-Creation-Date: 2021-01-23 21:55+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n" "Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -100,7 +100,7 @@ msgid "Changelog of type \"{action}\" for model {model} at {timestamp}"
msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}" msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
#: apps/participation/admin.py:19 apps/participation/models.py:314 #: apps/participation/admin.py:19 apps/participation/models.py:314
#: apps/participation/tables.py:44 apps/registration/models.py:352 #: apps/participation/tables.py:44 apps/registration/models.py:358
msgid "valid" msgid "valid"
msgstr "valide" msgstr "valide"
@ -528,9 +528,9 @@ msgstr "Rejoindre"
#: apps/participation/templates/participation/update_team.html:12 #: apps/participation/templates/participation/update_team.html:12
#: apps/registration/templates/registration/payment_form.html:49 #: apps/registration/templates/registration/payment_form.html:49
#: apps/registration/templates/registration/update_user.html:16 #: apps/registration/templates/registration/update_user.html:16
#: apps/registration/templates/registration/user_detail.html:150 #: apps/registration/templates/registration/user_detail.html:153
#: apps/registration/templates/registration/user_detail.html:159 #: apps/registration/templates/registration/user_detail.html:162
#: apps/registration/templates/registration/user_detail.html:187 #: apps/registration/templates/registration/user_detail.html:190
msgid "Update" msgid "Update"
msgstr "Modifier" msgstr "Modifier"
@ -586,10 +586,10 @@ msgstr "Envoyer une solution"
#: apps/registration/templates/registration/upload_health_sheet.html:17 #: apps/registration/templates/registration/upload_health_sheet.html:17
#: apps/registration/templates/registration/upload_parental_authorization.html:17 #: apps/registration/templates/registration/upload_parental_authorization.html:17
#: apps/registration/templates/registration/upload_photo_authorization.html:18 #: apps/registration/templates/registration/upload_photo_authorization.html:18
#: apps/registration/templates/registration/user_detail.html:165 #: apps/registration/templates/registration/user_detail.html:168
#: apps/registration/templates/registration/user_detail.html:170 #: apps/registration/templates/registration/user_detail.html:173
#: apps/registration/templates/registration/user_detail.html:175 #: apps/registration/templates/registration/user_detail.html:178
#: apps/registration/templates/registration/user_detail.html:180 #: apps/registration/templates/registration/user_detail.html:183
msgid "Upload" msgid "Upload"
msgstr "Téléverser" msgstr "Téléverser"
@ -780,16 +780,16 @@ msgstr "Lettre de motivation :"
#: apps/participation/templates/participation/team_detail.html:94 #: apps/participation/templates/participation/team_detail.html:94
#: apps/registration/templates/registration/upload_health_sheet.html:12 #: apps/registration/templates/registration/upload_health_sheet.html:12
#: apps/registration/templates/registration/upload_parental_authorization.html:12 #: apps/registration/templates/registration/upload_parental_authorization.html:12
#: apps/registration/templates/registration/user_detail.html:57 #: apps/registration/templates/registration/user_detail.html:60
#: apps/registration/templates/registration/user_detail.html:70 #: apps/registration/templates/registration/user_detail.html:73
#: apps/registration/templates/registration/user_detail.html:80 #: apps/registration/templates/registration/user_detail.html:83
msgid "Download" msgid "Download"
msgstr "Télécharger" msgstr "Télécharger"
#: apps/participation/templates/participation/team_detail.html:99 #: apps/participation/templates/participation/team_detail.html:99
#: apps/registration/templates/registration/user_detail.html:60 #: apps/registration/templates/registration/user_detail.html:63
#: apps/registration/templates/registration/user_detail.html:73 #: apps/registration/templates/registration/user_detail.html:76
#: apps/registration/templates/registration/user_detail.html:83 #: apps/registration/templates/registration/user_detail.html:86
msgid "Replace" msgid "Replace"
msgstr "Remplacer" msgstr "Remplacer"
@ -852,7 +852,7 @@ msgid "Invalidate"
msgstr "Invalider" msgstr "Invalider"
#: apps/participation/templates/participation/team_detail.html:169 #: apps/participation/templates/participation/team_detail.html:169
#: apps/participation/views.py:320 #: apps/participation/views.py:323
msgid "Upload motivation letter" msgid "Upload motivation letter"
msgstr "Envoyer la lettre de motivation" msgstr "Envoyer la lettre de motivation"
@ -861,7 +861,7 @@ msgid "Update team"
msgstr "Modifier l'équipe" msgstr "Modifier l'équipe"
#: apps/participation/templates/participation/team_detail.html:179 #: apps/participation/templates/participation/team_detail.html:179
#: apps/participation/views.py:421 #: apps/participation/views.py:424
msgid "Leave team" msgid "Leave team"
msgstr "Quitter l'équipe" msgstr "Quitter l'équipe"
@ -965,49 +965,49 @@ msgstr "Ajouter un tournoi"
msgid "Back to the team detail" msgid "Back to the team detail"
msgstr "Retour aux détails de l'utilisateur" msgstr "Retour aux détails de l'utilisateur"
#: apps/participation/views.py:42 tfjm/templates/base.html:74 #: apps/participation/views.py:43 tfjm/templates/base.html:74
#: tfjm/templates/base.html:239 #: tfjm/templates/base.html:239
msgid "Create team" msgid "Create team"
msgstr "Créer une équipe" msgstr "Créer une équipe"
#: apps/participation/views.py:51 apps/participation/views.py:96 #: apps/participation/views.py:52 apps/participation/views.py:97
msgid "You don't participate, so you can't create a team." msgid "You don't participate, so you can't create a team."
msgstr "Vous ne participez pas, vous ne pouvez pas créer d'équipe." msgstr "Vous ne participez pas, vous ne pouvez pas créer d'équipe."
#: apps/participation/views.py:53 apps/participation/views.py:98 #: apps/participation/views.py:54 apps/participation/views.py:99
msgid "You are already in a team." msgid "You are already in a team."
msgstr "Vous êtes déjà dans une équipe." msgstr "Vous êtes déjà dans une équipe."
#: apps/participation/views.py:87 tfjm/templates/base.html:79 #: apps/participation/views.py:88 tfjm/templates/base.html:79
#: tfjm/templates/base.html:234 #: tfjm/templates/base.html:234
msgid "Join team" msgid "Join team"
msgstr "Rejoindre une équipe" msgstr "Rejoindre une équipe"
#: apps/participation/views.py:149 apps/participation/views.py:427 #: apps/participation/views.py:150 apps/participation/views.py:430
#: apps/participation/views.py:460 #: apps/participation/views.py:463
msgid "You are not in a team." msgid "You are not in a team."
msgstr "Vous n'êtes pas dans une équipe." msgstr "Vous n'êtes pas dans une équipe."
#: apps/participation/views.py:150 apps/participation/views.py:461 #: apps/participation/views.py:151 apps/participation/views.py:464
msgid "You don't participate, so you don't have any team." msgid "You don't participate, so you don't have any team."
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe." msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe."
#: apps/participation/views.py:174 #: apps/participation/views.py:175
#, python-brace-format #, python-brace-format
msgid "Detail of team {trigram}" msgid "Detail of team {trigram}"
msgstr "Détails de l'équipe {trigram}" msgstr "Détails de l'équipe {trigram}"
#: apps/participation/views.py:211 #: apps/participation/views.py:212
msgid "You don't participate, so you can't request the validation of the team." msgid "You don't participate, so you can't request the validation of the team."
msgstr "" msgstr ""
"Vous ne participez pas, vous ne pouvez pas demander la validation de " "Vous ne participez pas, vous ne pouvez pas demander la validation de "
"l'équipe." "l'équipe."
#: apps/participation/views.py:214 #: apps/participation/views.py:215
msgid "The validation of the team is already done or pending." msgid "The validation of the team is already done or pending."
msgstr "La validation de l'équipe est déjà faite ou en cours." msgstr "La validation de l'équipe est déjà faite ou en cours."
#: apps/participation/views.py:217 #: apps/participation/views.py:218
msgid "" msgid ""
"The team can't be validated: missing email address confirmations, " "The team can't be validated: missing email address confirmations, "
"authorizations, people, motivation letter or the tournament is not set." "authorizations, people, motivation letter or the tournament is not set."
@ -1016,66 +1016,66 @@ msgstr ""
"d'adresse e-mail, soit une autorisation, soit des personnes, soit la lettre " "d'adresse e-mail, soit une autorisation, soit des personnes, soit la lettre "
"de motivation, soit le tournoi n'a pas été choisi." "de motivation, soit le tournoi n'a pas été choisi."
#: apps/participation/views.py:236
msgid "You are not an administrator."
msgstr "Vous n'êtes pas administrateur."
#: apps/participation/views.py:239 #: apps/participation/views.py:239
msgid "You are not an organizer of the tournament."
msgstr "Vous n'êtes pas un organisateur du tournoi."
#: apps/participation/views.py:242
msgid "This team has no pending validation." msgid "This team has no pending validation."
msgstr "L'équipe n'a pas de validation en attente." msgstr "L'équipe n'a pas de validation en attente."
#: apps/participation/views.py:269 #: apps/participation/views.py:272
msgid "You must specify if you validate the registration or not." msgid "You must specify if you validate the registration or not."
msgstr "Vous devez spécifier si vous validez l'inscription ou non." msgstr "Vous devez spécifier si vous validez l'inscription ou non."
#: apps/participation/views.py:300 #: apps/participation/views.py:303
#, python-brace-format #, python-brace-format
msgid "Update team {trigram}" msgid "Update team {trigram}"
msgstr "Mise à jour de l'équipe {trigram}" msgstr "Mise à jour de l'équipe {trigram}"
#: apps/participation/views.py:358 apps/participation/views.py:407 #: apps/participation/views.py:361 apps/participation/views.py:410
#, python-brace-format #, python-brace-format
msgid "Motivation letter of {team}.{ext}" msgid "Motivation letter of {team}.{ext}"
msgstr "Lettre de motivation de {team}.{ext}" msgstr "Lettre de motivation de {team}.{ext}"
#: apps/participation/views.py:388 #: apps/participation/views.py:391
#, python-brace-format #, python-brace-format
msgid "Photo authorization of {participant}.{ext}" msgid "Photo authorization of {participant}.{ext}"
msgstr "Autorisation de droit à l'image de {participant}.{ext}" msgstr "Autorisation de droit à l'image de {participant}.{ext}"
#: apps/participation/views.py:394 #: apps/participation/views.py:397
#, python-brace-format #, python-brace-format
msgid "Parental authorization of {participant}.{ext}" msgid "Parental authorization of {participant}.{ext}"
msgstr "Autorisation parentale de {participant}.{ext}" msgstr "Autorisation parentale de {participant}.{ext}"
#: apps/participation/views.py:401 #: apps/participation/views.py:404
#, python-brace-format #, python-brace-format
msgid "Health sheet of {participant}.{ext}" msgid "Health sheet of {participant}.{ext}"
msgstr "Fiche sanitaire de {participant}.{ext}" msgstr "Fiche sanitaire de {participant}.{ext}"
#: apps/participation/views.py:411 #: apps/participation/views.py:414
#, python-brace-format #, python-brace-format
msgid "Photo authorizations of team {trigram}.zip" msgid "Photo authorizations of team {trigram}.zip"
msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip" msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip"
#: apps/participation/views.py:429 #: apps/participation/views.py:432
msgid "The team is already validated or the validation is pending." msgid "The team is already validated or the validation is pending."
msgstr "La validation de l'équipe est déjà faite ou en cours." msgstr "La validation de l'équipe est déjà faite ou en cours."
#: apps/participation/views.py:475 #: apps/participation/views.py:478
msgid "The team is not validated yet." msgid "The team is not validated yet."
msgstr "L'équipe n'est pas encore validée." msgstr "L'équipe n'est pas encore validée."
#: apps/participation/views.py:487 #: apps/participation/views.py:490
#, python-brace-format #, python-brace-format
msgid "Participation of team {trigram}" msgid "Participation of team {trigram}"
msgstr "Participation de l'équipe {trigram}" msgstr "Participation de l'équipe {trigram}"
#: apps/participation/views.py:576 #: apps/participation/views.py:579
msgid "You can't upload a solution after the deadline." msgid "You can't upload a solution after the deadline."
msgstr "Vous ne pouvez pas envoyer de solution après la date limite." msgstr "Vous ne pouvez pas envoyer de solution après la date limite."
#: apps/participation/views.py:757 #: apps/participation/views.py:760
msgid "You can't upload a synthesis after the deadline." msgid "You can't upload a synthesis after the deadline."
msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite." msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite."
@ -1087,7 +1087,7 @@ msgstr "rôle"
msgid "participant" msgid "participant"
msgstr "participant" msgstr "participant"
#: apps/registration/forms.py:24 apps/registration/models.py:253 #: apps/registration/forms.py:24 apps/registration/models.py:259
msgid "coach" msgid "coach"
msgstr "encadrant" msgstr "encadrant"
@ -1095,11 +1095,11 @@ msgstr "encadrant"
msgid "This email address is already used." msgid "This email address is already used."
msgstr "Cette adresse e-mail est déjà utilisée." msgstr "Cette adresse e-mail est déjà utilisée."
#: apps/registration/forms.py:55 apps/registration/models.py:279 #: apps/registration/forms.py:55 apps/registration/models.py:285
msgid "volunteer" msgid "volunteer"
msgstr "bénévole" msgstr "bénévole"
#: apps/registration/forms.py:56 apps/registration/models.py:298 #: apps/registration/forms.py:56 apps/registration/models.py:304
msgid "admin" msgid "admin"
msgstr "admin" msgstr "admin"
@ -1124,7 +1124,7 @@ msgstr "email confirmé"
msgid "Activate your TFJM² account" msgid "Activate your TFJM² account"
msgstr "Activez votre compte du TFJM²" msgstr "Activez votre compte du TFJM²"
#: apps/registration/models.py:99 apps/registration/models.py:319 #: apps/registration/models.py:99 apps/registration/models.py:325
msgid "registration" msgid "registration"
msgstr "inscription" msgstr "inscription"
@ -1161,131 +1161,143 @@ msgid "phone number"
msgstr "numéro de téléphone" msgstr "numéro de téléphone"
#: apps/registration/models.py:154 #: apps/registration/models.py:154
msgid "health issues"
msgstr "problèmes de santé"
#: apps/registration/models.py:156
msgid ""
"You can indicate here your allergies or anything that is important to know "
"for organizers"
msgstr ""
"Vous pouvez indiquer ici vos allergies ou n'importe quoi qui peut être bon à "
"savoir pour les organisateurs"
#: apps/registration/models.py:160
msgid "photo authorization" msgid "photo authorization"
msgstr "autorisation de droit à l'image" msgstr "autorisation de droit à l'image"
#: apps/registration/models.py:186 #: apps/registration/models.py:192
msgid "12th grade" msgid "12th grade"
msgstr "Terminale" msgstr "Terminale"
#: apps/registration/models.py:187 #: apps/registration/models.py:193
msgid "11th grade" msgid "11th grade"
msgstr "Première" msgstr "Première"
#: apps/registration/models.py:188 #: apps/registration/models.py:194
msgid "10th grade or lower" msgid "10th grade or lower"
msgstr "Seconde ou inférieur" msgstr "Seconde ou inférieur"
#: apps/registration/models.py:190 #: apps/registration/models.py:196
msgid "student class" msgid "student class"
msgstr "classe" msgstr "classe"
#: apps/registration/models.py:195 #: apps/registration/models.py:201
msgid "school" msgid "school"
msgstr "école" msgstr "école"
#: apps/registration/models.py:200 #: apps/registration/models.py:206
msgid "responsible name" msgid "responsible name"
msgstr "nom du responsable légal" msgstr "nom du responsable légal"
#: apps/registration/models.py:205 #: apps/registration/models.py:211
msgid "responsible phone number" msgid "responsible phone number"
msgstr "numéro de téléphone du responsable légal" msgstr "numéro de téléphone du responsable légal"
#: apps/registration/models.py:210 #: apps/registration/models.py:216
msgid "responsible email address" msgid "responsible email address"
msgstr "adresse e-mail du responsable légal" msgstr "adresse e-mail du responsable légal"
#: apps/registration/models.py:215 #: apps/registration/models.py:221
msgid "parental authorization" msgid "parental authorization"
msgstr "autorisation parentale" msgstr "autorisation parentale"
#: apps/registration/models.py:222 #: apps/registration/models.py:228
msgid "health sheet" msgid "health sheet"
msgstr "fiche sanitaire" msgstr "fiche sanitaire"
#: apps/registration/models.py:230 #: apps/registration/models.py:236
msgid "student" msgid "student"
msgstr "étudiant" msgstr "étudiant"
#: apps/registration/models.py:238 #: apps/registration/models.py:244
msgid "student registration" msgid "student registration"
msgstr "inscription d'élève" msgstr "inscription d'élève"
#: apps/registration/models.py:239 #: apps/registration/models.py:245
msgid "student registrations" msgid "student registrations"
msgstr "inscriptions d'élève" msgstr "inscriptions d'élève"
#: apps/registration/models.py:248 apps/registration/models.py:270 #: apps/registration/models.py:254 apps/registration/models.py:276
msgid "professional activity" msgid "professional activity"
msgstr "activité professionnelle" msgstr "activité professionnelle"
#: apps/registration/models.py:261 #: apps/registration/models.py:267
msgid "coach registration" msgid "coach registration"
msgstr "inscription d'encadrant" msgstr "inscription d'encadrant"
#: apps/registration/models.py:262 #: apps/registration/models.py:268
msgid "coach registrations" msgid "coach registrations"
msgstr "inscriptions d'encadrants" msgstr "inscriptions d'encadrants"
#: apps/registration/models.py:293 #: apps/registration/models.py:299
msgid "role of the administrator" msgid "role of the administrator"
msgstr "rôle de l'administrateur" msgstr "rôle de l'administrateur"
#: apps/registration/models.py:306 #: apps/registration/models.py:312
msgid "admin registration" msgid "admin registration"
msgstr "inscription d'administrateur" msgstr "inscription d'administrateur"
#: apps/registration/models.py:307 #: apps/registration/models.py:313
msgid "admin registrations" msgid "admin registrations"
msgstr "inscriptions d'administrateur" msgstr "inscriptions d'administrateur"
#: apps/registration/models.py:323 #: apps/registration/models.py:329
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: apps/registration/models.py:326 #: apps/registration/models.py:332
msgid "No payment" msgid "No payment"
msgstr "Pas de paiement" msgstr "Pas de paiement"
#: apps/registration/models.py:328 #: apps/registration/models.py:334
msgid "Scholarship" msgid "Scholarship"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: apps/registration/models.py:329 #: apps/registration/models.py:335
msgid "Bank transfer" msgid "Bank transfer"
msgstr "Virement bancaire" msgstr "Virement bancaire"
#: apps/registration/models.py:330 #: apps/registration/models.py:336
msgid "The tournament is free" msgid "The tournament is free"
msgstr "Le tournoi est gratuit" msgstr "Le tournoi est gratuit"
#: apps/registration/models.py:337 #: apps/registration/models.py:343
msgid "scholarship file" msgid "scholarship file"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: apps/registration/models.py:338 #: apps/registration/models.py:344
msgid "only if you have a scholarship." msgid "only if you have a scholarship."
msgstr "Nécessaire seulement si vous déclarez être boursier." msgstr "Nécessaire seulement si vous déclarez être boursier."
#: apps/registration/models.py:345 #: apps/registration/models.py:351
msgid "additional information" msgid "additional information"
msgstr "informations additionnelles" msgstr "informations additionnelles"
#: apps/registration/models.py:346 #: apps/registration/models.py:352
msgid "To help us to find your payment." msgid "To help us to find your payment."
msgstr "Pour nous aider à retrouver votre paiement, si nécessaire." msgstr "Pour nous aider à retrouver votre paiement, si nécessaire."
#: apps/registration/models.py:361 #: apps/registration/models.py:367
#, python-brace-format #, python-brace-format
msgid "Payment of {registration}" msgid "Payment of {registration}"
msgstr "Paiement de {registration}" msgstr "Paiement de {registration}"
#: apps/registration/models.py:364 #: apps/registration/models.py:370
msgid "payment" msgid "payment"
msgstr "paiement" msgstr "paiement"
#: apps/registration/models.py:365 #: apps/registration/models.py:371
msgid "payments" msgid "payments"
msgstr "paiements" msgstr "paiements"
@ -1572,91 +1584,95 @@ msgid "Phone number:"
msgstr "Numéro de téléphone :" msgstr "Numéro de téléphone :"
#: apps/registration/templates/registration/user_detail.html:54 #: apps/registration/templates/registration/user_detail.html:54
msgid "Health issues:"
msgstr "Problèmes de santé :"
#: apps/registration/templates/registration/user_detail.html:57
msgid "Photo authorization:" msgid "Photo authorization:"
msgstr "Autorisation de droit à l'image" msgstr "Autorisation de droit à l'image"
#: apps/registration/templates/registration/user_detail.html:67 #: apps/registration/templates/registration/user_detail.html:70
msgid "Health sheet:" msgid "Health sheet:"
msgstr "Fiche sanitaire :" msgstr "Fiche sanitaire :"
#: apps/registration/templates/registration/user_detail.html:77 #: apps/registration/templates/registration/user_detail.html:80
msgid "Parental authorization:" msgid "Parental authorization:"
msgstr "Autorisation parentale :" msgstr "Autorisation parentale :"
#: apps/registration/templates/registration/user_detail.html:88 #: apps/registration/templates/registration/user_detail.html:91
msgid "Student class:" msgid "Student class:"
msgstr "Classe :" msgstr "Classe :"
#: apps/registration/templates/registration/user_detail.html:91 #: apps/registration/templates/registration/user_detail.html:94
msgid "School:" msgid "School:"
msgstr "École :" msgstr "École :"
#: apps/registration/templates/registration/user_detail.html:94 #: apps/registration/templates/registration/user_detail.html:97
msgid "Responsible name:" msgid "Responsible name:"
msgstr "Nom du responsable légal :" msgstr "Nom du responsable légal :"
#: apps/registration/templates/registration/user_detail.html:97 #: apps/registration/templates/registration/user_detail.html:100
msgid "Responsible phone number:" msgid "Responsible phone number:"
msgstr "Numéro de téléphone du responsable légal :" msgstr "Numéro de téléphone du responsable légal :"
#: apps/registration/templates/registration/user_detail.html:100 #: apps/registration/templates/registration/user_detail.html:103
msgid "Responsible email address:" msgid "Responsible email address:"
msgstr "Adresse e-mail du responsable légal :" msgstr "Adresse e-mail du responsable légal :"
#: apps/registration/templates/registration/user_detail.html:105 #: apps/registration/templates/registration/user_detail.html:108
msgid "Role:" msgid "Role:"
msgstr "Rôle :" msgstr "Rôle :"
#: apps/registration/templates/registration/user_detail.html:108 #: apps/registration/templates/registration/user_detail.html:111
msgid "Profesional activity:" msgid "Profesional activity:"
msgstr "Activité professionnelle :" msgstr "Activité professionnelle :"
#: apps/registration/templates/registration/user_detail.html:112 #: apps/registration/templates/registration/user_detail.html:115
msgid "Grant Animath to contact me in the future about other actions:" msgid "Grant Animath to contact me in the future about other actions:"
msgstr "Autorise Animath à recontacter à propos d'autres actions :" msgstr "Autorise Animath à recontacter à propos d'autres actions :"
#: apps/registration/templates/registration/user_detail.html:120 #: apps/registration/templates/registration/user_detail.html:123
msgid "Payment information:" msgid "Payment information:"
msgstr "Informations de paiement :" msgstr "Informations de paiement :"
#: apps/registration/templates/registration/user_detail.html:122 #: apps/registration/templates/registration/user_detail.html:125
msgid "yes,no,pending" msgid "yes,no,pending"
msgstr "oui,non,en attente" msgstr "oui,non,en attente"
#: apps/registration/templates/registration/user_detail.html:126
#: apps/registration/templates/registration/user_detail.html:129 #: apps/registration/templates/registration/user_detail.html:129
#: apps/registration/templates/registration/user_detail.html:132
msgid "valid:" msgid "valid:"
msgstr "valide :" msgstr "valide :"
#: apps/registration/templates/registration/user_detail.html:133 #: apps/registration/templates/registration/user_detail.html:136
#: apps/registration/templates/registration/user_detail.html:186 #: apps/registration/templates/registration/user_detail.html:189
msgid "Update payment" msgid "Update payment"
msgstr "Modifier le paiement" msgstr "Modifier le paiement"
#: apps/registration/templates/registration/user_detail.html:139 #: apps/registration/templates/registration/user_detail.html:142
msgid "Download scholarship attestation" msgid "Download scholarship attestation"
msgstr "Télécharger l'attestation de bourse" msgstr "Télécharger l'attestation de bourse"
#: apps/registration/templates/registration/user_detail.html:152 #: apps/registration/templates/registration/user_detail.html:155
msgid "Impersonate" msgid "Impersonate"
msgstr "Impersonifier" msgstr "Impersonifier"
#: apps/registration/templates/registration/user_detail.html:158 #: apps/registration/templates/registration/user_detail.html:161
msgid "Update user" msgid "Update user"
msgstr "Modifier l'utilisateur" msgstr "Modifier l'utilisateur"
#: apps/registration/templates/registration/user_detail.html:164 #: apps/registration/templates/registration/user_detail.html:167
#: apps/registration/views.py:313 #: apps/registration/views.py:313
msgid "Upload photo authorization" msgid "Upload photo authorization"
msgstr "Téléverser l'autorisation de droit à l'image" msgstr "Téléverser l'autorisation de droit à l'image"
#: apps/registration/templates/registration/user_detail.html:169 #: apps/registration/templates/registration/user_detail.html:172
#: apps/registration/views.py:334 #: apps/registration/views.py:334
msgid "Upload health sheet" msgid "Upload health sheet"
msgstr "Téléverser la fiche sanitaire" msgstr "Téléverser la fiche sanitaire"
#: apps/registration/templates/registration/user_detail.html:174 #: apps/registration/templates/registration/user_detail.html:177
#: apps/registration/templates/registration/user_detail.html:179 #: apps/registration/templates/registration/user_detail.html:182
#: apps/registration/views.py:355 #: apps/registration/views.py:355
msgid "Upload parental authorization" msgid "Upload parental authorization"
msgstr "Téléverser l'autorisation parentale" msgstr "Téléverser l'autorisation parentale"
@ -1879,6 +1895,3 @@ msgstr "Résultats"
#: tfjm/templates/search/search.html:25 #: tfjm/templates/search/search.html:25
msgid "No results found." msgid "No results found."
msgstr "Aucun résultat." msgstr "Aucun résultat."
#~ msgid "The code of the form xxx-xxx-xxx at the end of the BBB link."
#~ msgstr "Le code de la forme xxx-xxx-xxx à la fin du lien BBB."