Fix tests

This commit is contained in:
Yohann D'ANELLO 2021-01-18 22:28:43 +01:00
parent d05a8339fe
commit ef4d74545a
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
7 changed files with 164 additions and 128 deletions

View File

@ -1,5 +1,7 @@
# Generated by Django 3.0.11 on 2020-12-30 12:02
from datetime import date
import django.core.validators
from django.db import migrations, models
import django.utils.timezone
@ -78,8 +80,8 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255, unique=True, verbose_name='name')),
('date_start', models.DateField(default=django.utils.timezone.now, verbose_name='start')),
('date_end', models.DateField(default=django.utils.timezone.now, verbose_name='end')),
('date_start', models.DateField(default=date.today, verbose_name='start')),
('date_end', models.DateField(default=date.today, verbose_name='end')),
('inscription_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date for registrations')),
('solution_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload solutions')),
('syntheses_first_phase_limit', models.DateTimeField(default=django.utils.timezone.now, verbose_name='limit date to upload the syntheses for the first phase')),

View File

@ -1,6 +1,7 @@
# Copyright (C) 2020 by Animath
# SPDX-License-Identifier: GPL-3.0-or-later
from datetime import date
import os
from address.models import AddressField
@ -123,12 +124,12 @@ class Tournament(models.Model):
date_start = models.DateField(
verbose_name=_("start"),
default=timezone.now,
default=date.today,
)
date_end = models.DateField(
verbose_name=_("end"),
default=timezone.now,
default=date.today,
)
place = AddressField(

View File

@ -9,7 +9,7 @@ from django.test import TestCase
from django.urls import reverse
from registration.models import CoachRegistration, StudentRegistration
from .models import Participation, Team
from .models import Participation, Team, Tournament
class TestStudentParticipation(TestCase):
@ -67,6 +67,11 @@ class TestStudentParticipation(TestCase):
)
CoachRegistration.objects.create(user=self.coach)
self.tournament = Tournament.objects.create(
name="France",
place="Here",
)
def test_admin_pages(self):
"""
Load Django-admin pages.
@ -347,6 +352,7 @@ class TestStudentParticipation(TestCase):
))
self.assertEqual(resp.status_code, 200)
self.team.participation.tournament = self.tournament
self.team.participation.valid = False
self.team.participation.save()

View File

@ -174,10 +174,10 @@ class TeamDetailView(LoginRequiredMixin, FormMixin, ProcessFormView, DetailView)
# A team is complete when there are at least 4 members plus a coache that have sent their authorizations,
# their health sheet, they confirmed their email address and under-18 people sent their parental authorization.
context["can_validate"] = team.students.count() >= 4 and team.coaches.exists() and \
all(r.email_confirmed for r in team.students.all()) and \
all(r.photo_authorization for r in team.participants.all()) and \
all(r.health_sheet for r in team.participants.all()) and \
all(r.parental_authorization for r in team.students.all() if r.under_18)
all(r.email_confirmed for r in team.students.all()) and \
all(r.photo_authorization for r in team.participants.all()) and \
all(r.health_sheet for r in team.participants.all()) and \
all(r.parental_authorization for r in team.students.all() if r.under_18)
return context

View File

@ -340,6 +340,9 @@ class Payment(models.Model):
def get_absolute_url(self):
return reverse_lazy("registration:user_detail", args=(self.registration.user.id,))
def __str__(self):
return _("Payment of {registration}").format(registration=self.registration)
class Meta:
verbose_name = _("payment")
verbose_name_plural = _("payments")

View File

@ -3,7 +3,6 @@
from django.contrib.auth.models import User
from tfjm.lists import get_sympa_client
from tfjm.matrix import Matrix
from .models import AdminRegistration, Payment, Registration

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: TFJM\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-18 17:59+0100\n"
"POT-Creation-Date: 2021-01-18 22:27+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Yohann D'ANELLO <yohann.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -99,12 +99,12 @@ msgstr "changelogs"
msgid "Changelog of type \"{action}\" for model {model} at {timestamp}"
msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
#: apps/participation/admin.py:19 apps/participation/models.py:297
#: apps/participation/tables.py:44 apps/registration/models.py:336
#: apps/participation/admin.py:19 apps/participation/models.py:298
#: apps/participation/tables.py:44 apps/registration/models.py:335
msgid "valid"
msgstr "valide"
#: apps/participation/forms.py:22 apps/participation/models.py:36
#: apps/participation/forms.py:22 apps/participation/models.py:37
msgid "The trigram must be composed of three uppercase letters."
msgstr "Le trigramme doit être composé de trois lettres majuscules."
@ -128,279 +128,279 @@ msgstr "Le défenseur, l'opposant et le rapporteur doivent être différents."
msgid "This defender did not work on this problem."
msgstr "Ce défenseur ne travaille pas sur ce problème."
#: apps/participation/models.py:29 apps/participation/models.py:120
#: apps/participation/models.py:30 apps/participation/models.py:121
#: apps/participation/tables.py:17 apps/participation/tables.py:34
msgid "name"
msgstr "nom"
#: apps/participation/models.py:35 apps/participation/tables.py:39
#: apps/participation/models.py:36 apps/participation/tables.py:39
msgid "trigram"
msgstr "trigramme"
#: apps/participation/models.py:43
#: apps/participation/models.py:44
msgid "access code"
msgstr "code d'accès"
#: apps/participation/models.py:44
#: apps/participation/models.py:45
msgid "The access code let other people to join the team."
msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe."
#: apps/participation/models.py:107
#: apps/participation/models.py:108
#, python-brace-format
msgid "Team {name} ({trigram})"
msgstr "Équipe {name} ({trigram})"
#: apps/participation/models.py:110 apps/participation/models.py:282
#: apps/participation/models.py:111 apps/participation/models.py:283
#: apps/registration/models.py:123
msgid "team"
msgstr "équipe"
#: apps/participation/models.py:111 apps/participation/tables.py:84
#: apps/participation/models.py:112 apps/participation/tables.py:84
msgid "teams"
msgstr "équipes"
#: apps/participation/models.py:125
#: apps/participation/models.py:126
msgid "start"
msgstr "début"
#: apps/participation/models.py:130
#: apps/participation/models.py:131
msgid "end"
msgstr "fin"
#: apps/participation/models.py:135 apps/participation/models.py:376
#: apps/participation/models.py:136 apps/participation/models.py:377
#: apps/participation/templates/participation/tournament_detail.html:18
msgid "place"
msgstr "lieu"
#: apps/participation/models.py:139
#: apps/participation/models.py:140
msgid "max team count"
msgstr "nombre maximal d'équipes"
#: apps/participation/models.py:144
#: apps/participation/models.py:145
#: apps/participation/templates/participation/tournament_detail.html:21
msgid "price"
msgstr "prix"
#: apps/participation/models.py:149
#: apps/participation/models.py:150
msgid "limit date for registrations"
msgstr "date limite d'inscription"
#: apps/participation/models.py:154
#: apps/participation/models.py:155
msgid "limit date to upload solutions"
msgstr "date limite pour envoyer les solutions"
#: apps/participation/models.py:159
#: apps/participation/models.py:160
msgid "random draw for solutions"
msgstr "tirage au sort des solutions"
#: apps/participation/models.py:164
#: apps/participation/models.py:165
msgid "limit date to upload the syntheses for the first phase"
msgstr "date limite pour envoyer les notes de synthèses pour la première phase"
#: apps/participation/models.py:169
#: apps/participation/models.py:170
msgid "date when the solutions for the second round become available"
msgstr "date à laquelle les solutions pour le second tour sont accessibles"
#: apps/participation/models.py:174
#: apps/participation/models.py:175
msgid "limit date to upload the syntheses for the second phase"
msgstr "date limite d'envoi des notes de synthèse pour la seconde phase"
#: apps/participation/models.py:179
#: apps/participation/models.py:180
#: apps/participation/templates/participation/tournament_detail.html:45
msgid "description"
msgstr "description"
#: apps/participation/models.py:185
#: apps/participation/models.py:186
#: apps/participation/templates/participation/tournament_detail.html:12
msgid "organizers"
msgstr "organisateurs"
#: apps/participation/models.py:190
#: apps/participation/models.py:191
msgid "final"
msgstr "finale"
#: apps/participation/models.py:267 apps/participation/models.py:291
#: apps/participation/models.py:323
#: apps/participation/models.py:268 apps/participation/models.py:292
#: apps/participation/models.py:324
msgid "tournament"
msgstr "tournoi"
#: apps/participation/models.py:268
#: apps/participation/models.py:269
msgid "tournaments"
msgstr "tournois"
#: apps/participation/models.py:298
#: apps/participation/models.py:299
msgid "The participation got the validation of the organizers."
msgstr "La participation a été validée par les organisateurs."
#: apps/participation/models.py:303
#: apps/participation/models.py:304
msgid "selected for final"
msgstr "sélectionnée pour la finale"
#: apps/participation/models.py:304
#: apps/participation/models.py:305
msgid "The team is selected for the final tournament."
msgstr "L'équipe est sélectionnée pour la finale."
#: apps/participation/models.py:311
#: apps/participation/models.py:312
#, python-brace-format
msgid "Participation of the team {name} ({trigram})"
msgstr "Participation de l'équipe {name} ({trigram})"
#: apps/participation/models.py:314 apps/participation/models.py:498
#: apps/participation/models.py:536
#: apps/participation/models.py:315 apps/participation/models.py:499
#: apps/participation/models.py:537
msgid "participation"
msgstr "participation"
#: apps/participation/models.py:315 apps/participation/models.py:337
#: apps/participation/models.py:316 apps/participation/models.py:338
msgid "participations"
msgstr "participations"
#: apps/participation/models.py:327
#: apps/participation/models.py:328
msgid "round"
msgstr "tour"
#: apps/participation/models.py:329 apps/participation/models.py:330
#: apps/participation/models.py:330 apps/participation/models.py:331
#, python-brace-format
msgid "Round {round}"
msgstr "Tour {round}"
#: apps/participation/models.py:343
#: apps/participation/models.py:344
msgid "juries"
msgstr "jurys"
#: apps/participation/models.py:357
#: apps/participation/models.py:358
#, python-brace-format
msgid "Pool {round} for tournament {tournament} with teams {teams}"
msgstr "Poule {round} du tournoi {tournament} avec les équipes {teams}"
#: apps/participation/models.py:363 apps/participation/models.py:371
#: apps/participation/models.py:364 apps/participation/models.py:372
msgid "pool"
msgstr "poule"
#: apps/participation/models.py:364
#: apps/participation/models.py:365
msgid "pools"
msgstr "poules"
#: apps/participation/models.py:378
#: apps/participation/models.py:379
msgid "Where the solution is presented?"
msgstr "Où est-ce que les solutions sont défendues ?"
#: apps/participation/models.py:383
#: apps/participation/models.py:384
msgid "defended solution"
msgstr "solution défendue"
#: apps/participation/models.py:385 apps/participation/models.py:505
#: apps/participation/models.py:386 apps/participation/models.py:506
#, python-brace-format
msgid "Problem #{problem}"
msgstr "Problème n°{problem}"
#: apps/participation/models.py:392 apps/participation/tables.py:105
#: apps/participation/models.py:393 apps/participation/tables.py:105
msgid "defender"
msgstr "défenseur"
#: apps/participation/models.py:399 apps/participation/models.py:548
#: apps/participation/models.py:400 apps/participation/models.py:549
msgid "opponent"
msgstr "opposant"
#: apps/participation/models.py:406 apps/participation/models.py:549
#: apps/participation/models.py:407 apps/participation/models.py:550
msgid "reporter"
msgstr "rapporteur"
#: apps/participation/models.py:466 apps/participation/models.py:469
#: apps/participation/models.py:472
#: apps/participation/models.py:467 apps/participation/models.py:470
#: apps/participation/models.py:473
#, python-brace-format
msgid "Team {trigram} is not registered in the pool."
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
#: apps/participation/models.py:477
#: apps/participation/models.py:478
#, python-brace-format
msgid "Passage of {defender} for problem {problem}"
msgstr "Passage de {defender} pour le problème {problem}"
#: apps/participation/models.py:481 apps/participation/models.py:543
#: apps/participation/models.py:581
#: apps/participation/models.py:482 apps/participation/models.py:544
#: apps/participation/models.py:582
msgid "passage"
msgstr "passage"
#: apps/participation/models.py:482
#: apps/participation/models.py:483
msgid "passages"
msgstr "passages"
#: apps/participation/models.py:503
#: apps/participation/models.py:504
msgid "problem"
msgstr "numéro de problème"
#: apps/participation/models.py:510
#: apps/participation/models.py:511
msgid "solution for the final tournament"
msgstr "solution pour la finale"
#: apps/participation/models.py:515 apps/participation/models.py:554
#: apps/participation/models.py:516 apps/participation/models.py:555
msgid "file"
msgstr "fichier"
#: apps/participation/models.py:523
#: apps/participation/models.py:524
#, python-brace-format
msgid "Solution of team {team} for problem {problem}"
msgstr "Solution de l'équipe {team} pour le problème {problem}"
#: apps/participation/models.py:527
#: apps/participation/models.py:528
msgid "solution"
msgstr "solution"
#: apps/participation/models.py:528
#: apps/participation/models.py:529
msgid "solutions"
msgstr "solutions"
#: apps/participation/models.py:562
#: apps/participation/models.py:563
#, python-brace-format
msgid "Synthesis for the {type} of the {passage}"
msgstr "Synthèse pour {type} du {passage}"
#: apps/participation/models.py:565
#: apps/participation/models.py:566
msgid "synthesis"
msgstr "note de synthèse"
#: apps/participation/models.py:566
#: apps/participation/models.py:567
msgid "syntheses"
msgstr "notes de synthèse"
#: apps/participation/models.py:574
#: apps/participation/models.py:575
msgid "jury"
msgstr "jury"
#: apps/participation/models.py:586
#: apps/participation/models.py:587
msgid "defender writing note"
msgstr "note d'écrit du défenseur"
#: apps/participation/models.py:592
#: apps/participation/models.py:593
msgid "defender oral note"
msgstr "note d'oral du défenseur"
#: apps/participation/models.py:598
#: apps/participation/models.py:599
msgid "opponent writing note"
msgstr "note d'écrit de l'opposant"
#: apps/participation/models.py:604
#: apps/participation/models.py:605
msgid "opponent oral note"
msgstr "note d'oral de l'opposant"
#: apps/participation/models.py:610
#: apps/participation/models.py:611
msgid "reporter writing note"
msgstr "not d'écrit du rapporteur"
#: apps/participation/models.py:616
#: apps/participation/models.py:617
msgid "reporter oral note"
msgstr "note d'oral du rapporteur"
#: apps/participation/models.py:625
#: apps/participation/models.py:626
#, python-brace-format
msgid "Notes of {jury} for {passage}"
msgstr "Notes de {jury} pour le {passage}"
#: apps/participation/models.py:632
#: apps/participation/models.py:633
msgid "note"
msgstr "note"
#: apps/participation/models.py:633
#: apps/participation/models.py:634
msgid "notes"
msgstr "notes"
@ -485,9 +485,11 @@ msgstr "Rejoindre"
#: apps/participation/templates/participation/team_detail.html:148
#: apps/participation/templates/participation/tournament_form.html:12
#: apps/participation/templates/participation/update_team.html:12
#: apps/registration/templates/registration/payment_form.html:11
#: apps/registration/templates/registration/update_user.html:16
#: apps/registration/templates/registration/user_detail.html:127
#: apps/registration/templates/registration/user_detail.html:136
#: apps/registration/templates/registration/user_detail.html:140
#: apps/registration/templates/registration/user_detail.html:149
#: apps/registration/templates/registration/user_detail.html:177
msgid "Update"
msgstr "Modifier"
@ -541,9 +543,10 @@ msgstr "Envoyer une solution"
#: apps/registration/templates/registration/upload_health_sheet.html:17
#: apps/registration/templates/registration/upload_parental_authorization.html:17
#: apps/registration/templates/registration/upload_photo_authorization.html:18
#: apps/registration/templates/registration/user_detail.html:141
#: apps/registration/templates/registration/user_detail.html:146
#: apps/registration/templates/registration/user_detail.html:151
#: apps/registration/templates/registration/user_detail.html:155
#: apps/registration/templates/registration/user_detail.html:160
#: apps/registration/templates/registration/user_detail.html:165
#: apps/registration/templates/registration/user_detail.html:170
msgid "Upload"
msgstr "Téléverser"
@ -781,7 +784,7 @@ msgid "Update team"
msgstr "Modifier l'équipe"
#: apps/participation/templates/participation/team_detail.html:152
#: apps/participation/views.py:351
#: apps/participation/views.py:359
msgid "Leave team"
msgstr "Quitter l'équipe"
@ -887,12 +890,12 @@ msgstr "Vous êtes déjà dans une équipe."
msgid "Join team"
msgstr "Rejoindre une équipe"
#: apps/participation/views.py:146 apps/participation/views.py:357
#: apps/participation/views.py:390
#: apps/participation/views.py:146 apps/participation/views.py:365
#: apps/participation/views.py:398
msgid "You are not in a team."
msgstr "Vous n'êtes pas dans une équipe."
#: apps/participation/views.py:147 apps/participation/views.py:391
#: apps/participation/views.py:147 apps/participation/views.py:399
msgid "You don't participate, so you don't have any team."
msgstr "Vous ne participez pas, vous n'avez donc pas d'équipe."
@ -928,44 +931,44 @@ msgstr "Vous n'êtes pas administrateur."
msgid "This team has no pending validation."
msgstr "L'équipe n'a pas de validation en attente."
#: apps/participation/views.py:254
#: apps/participation/views.py:262
msgid "You must specify if you validate the registration or not."
msgstr "Vous devez spécifier si vous validez l'inscription ou non."
#: apps/participation/views.py:285
#: apps/participation/views.py:293
#, python-brace-format
msgid "Update team {trigram}"
msgstr "Mise à jour de l'équipe {trigram}"
#: apps/participation/views.py:324
#: apps/participation/views.py:332
#, python-brace-format
msgid "Photo authorization of {participant}.{ext}"
msgstr "Autorisation de droit à l'image de {participant}.{ext}"
#: apps/participation/views.py:330
#: apps/participation/views.py:338
#, python-brace-format
msgid "Parental authorization of {participant}.{ext}"
msgstr "Autorisation parentale de {participant}.{ext}"
#: apps/participation/views.py:337
#: apps/participation/views.py:345
#, python-brace-format
msgid "Health sheet of {participant}.{ext}"
msgstr "Fiche sanitaire de {participant}.{ext}"
#: apps/participation/views.py:341
#: apps/participation/views.py:349
#, python-brace-format
msgid "Photo authorizations of team {trigram}.zip"
msgstr "Autorisations de droit à l'image de l'équipe {trigram}.zip"
#: apps/participation/views.py:359
#: apps/participation/views.py:367
msgid "The team is already validated or the validation is pending."
msgstr "La validation de l'équipe est déjà faite ou en cours."
#: apps/participation/views.py:405
#: apps/participation/views.py:413
msgid "The team is not validated yet."
msgstr "L'équipe n'est pas encore validée."
#: apps/participation/views.py:417
#: apps/participation/views.py:425
#, python-brace-format
msgid "Participation of team {trigram}"
msgstr "Participation de l'équipe {trigram}"
@ -995,15 +998,23 @@ msgid "admin"
msgstr "admin"
#: apps/registration/forms.py:116 apps/registration/forms.py:138
#: apps/registration/forms.py:160
#: apps/registration/forms.py:160 apps/registration/forms.py:214
msgid "The uploaded file size must be under 2 Mo."
msgstr "Le fichier envoyé doit peser moins de 2 Mo."
#: apps/registration/forms.py:118 apps/registration/forms.py:140
#: apps/registration/forms.py:162
#: apps/registration/forms.py:162 apps/registration/forms.py:216
msgid "The uploaded file must be a PDF, PNG of JPEG file."
msgstr "Le fichier envoyé doit être au format PDF, PNG ou JPEG."
#: apps/registration/forms.py:208
msgid "Pending"
msgstr "En attente"
#: apps/registration/forms.py:224
msgid "You must upload your scholarship attestation."
msgstr "Vous devez envoyer votre attestation de bourse."
#: apps/registration/models.py:35
msgid "Grant Animath to contact me in the future about other actions"
msgstr ""
@ -1145,19 +1156,24 @@ msgstr "Notification de bourse"
msgid "only if you have a scholarship."
msgstr "Nécessaire seulement si vous déclarez être boursier."
#: apps/registration/models.py:329
#: apps/registration/models.py:328
msgid "additional information"
msgstr "informations additionnelles"
#: apps/registration/models.py:330
#: apps/registration/models.py:329
msgid "To help us to find your payment."
msgstr "Pour nous aider à retrouver votre paiement, si nécessaire."
#: apps/registration/models.py:342
#: apps/registration/models.py:344
#, python-brace-format
msgid "Payment of {registration}"
msgstr "Paiement de {registration}"
#: apps/registration/models.py:347
msgid "payment"
msgstr "paiement"
#: apps/registration/models.py:343
#: apps/registration/models.py:348
msgid "payments"
msgstr "paiements"
@ -1169,7 +1185,7 @@ msgstr "nom de famille"
#: apps/registration/templates/registration/add_organizer.html:12
#: apps/registration/templates/registration/add_organizer.html:19
#: apps/registration/templates/registration/user_list.html:8
#: apps/registration/views.py:86
#: apps/registration/views.py:85
msgid "Add organizer"
msgstr "Ajouter un organisateur"
@ -1324,7 +1340,7 @@ msgstr "Réinitialiser mon mot de passe"
#: apps/registration/templates/registration/signup.html:5
#: apps/registration/templates/registration/signup.html:12
#: apps/registration/templates/registration/signup.html:19
#: apps/registration/views.py:42
#: apps/registration/views.py:41
msgid "Sign up"
msgstr "Inscription"
@ -1456,78 +1472,87 @@ msgstr "Informations de paiement :"
msgid "yes,no,pending"
msgstr "oui,non,en attente"
#: apps/registration/templates/registration/user_detail.html:120
#: apps/registration/templates/registration/user_detail.html:123
#: apps/registration/templates/registration/user_detail.html:126
msgid "valid:"
msgstr "valide :"
#: apps/registration/templates/registration/user_detail.html:129
#: apps/registration/templates/registration/user_detail.html:130
#: apps/registration/templates/registration/user_detail.html:176
#, fuzzy
#| msgid "Update team"
msgid "Update payment"
msgstr "Modifier l'équipe"
#: apps/registration/templates/registration/user_detail.html:142
msgid "Impersonate"
msgstr "Impersonifier"
#: apps/registration/templates/registration/user_detail.html:135
#: apps/registration/templates/registration/user_detail.html:148
msgid "Update user"
msgstr "Modifier l'utilisateur"
#: apps/registration/templates/registration/user_detail.html:140
#: apps/registration/views.py:313
#: apps/registration/templates/registration/user_detail.html:154
#: apps/registration/views.py:312
msgid "Upload photo authorization"
msgstr "Téléverser l'autorisation de droit à l'image"
#: apps/registration/templates/registration/user_detail.html:145
#: apps/registration/views.py:339
#: apps/registration/templates/registration/user_detail.html:159
#: apps/registration/views.py:338
msgid "Upload health sheet"
msgstr "Téléverser la fiche sanitaire"
#: apps/registration/templates/registration/user_detail.html:150
#: apps/registration/views.py:365
#: apps/registration/templates/registration/user_detail.html:164
#: apps/registration/templates/registration/user_detail.html:169
#: apps/registration/views.py:364
msgid "Upload parental authorization"
msgstr "Téléverser l'autorisation parentale"
#: apps/registration/views.py:125
#: apps/registration/views.py:124
msgid "New TFJM² organizer account"
msgstr "Nouveau compte organisateur pour le TFJM²"
#: apps/registration/views.py:147
#: apps/registration/views.py:146
msgid "Email validation"
msgstr "Validation de l'adresse mail"
#: apps/registration/views.py:149
#: apps/registration/views.py:148
msgid "Validate email"
msgstr "Valider l'adresse mail"
#: apps/registration/views.py:188
#: apps/registration/views.py:187
msgid "Email validation unsuccessful"
msgstr "Échec de la validation de l'adresse mail"
#: apps/registration/views.py:199
#: apps/registration/views.py:198
msgid "Email validation email sent"
msgstr "Mail de confirmation de l'adresse mail envoyé"
#: apps/registration/views.py:207
#: apps/registration/views.py:206
msgid "Resend email validation link"
msgstr "Renvoyé le lien de validation de l'adresse mail"
#: apps/registration/views.py:247
#: apps/registration/views.py:246
#, python-brace-format
msgid "Detail of user {user}"
msgstr "Détails de l'utilisateur {user}"
#: apps/registration/views.py:277
#: apps/registration/views.py:276
#, python-brace-format
msgid "Update user {user}"
msgstr "Mise à jour de l'utilisateur {user}"
#: apps/registration/views.py:403
#: apps/registration/views.py:427
#, python-brace-format
msgid "Photo authorization of {student}.{ext}"
msgstr "Autorisation de droit à l'image de {student}.{ext}"
#: apps/registration/views.py:426
#: apps/registration/views.py:450
#, python-brace-format
msgid "Health sheet of {student}.{ext}"
msgstr "Fiche sanitaire de {student}.{ext}"
#: apps/registration/views.py:449
#: apps/registration/views.py:473
#, python-brace-format
msgid "Parental authorization of {student}.{ext}"
msgstr "Autorisation parentale de {student}.{ext}"