diff --git a/apps/participation/migrations/0002_initial.py b/apps/participation/migrations/0002_initial.py new file mode 100644 index 0000000..ba58fde --- /dev/null +++ b/apps/participation/migrations/0002_initial.py @@ -0,0 +1,108 @@ +# Generated by Django 3.2.13 on 2023-01-10 19:22 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('participation', '0001_initial'), + ('registration', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='tournament', + name='organizers', + field=models.ManyToManyField(related_name='organized_tournaments', to='registration.VolunteerRegistration', verbose_name='organizers'), + ), + migrations.AddIndex( + model_name='team', + index=models.Index(fields=['trigram'], name='participati_trigram_239255_idx'), + ), + migrations.AddField( + model_name='synthesis', + name='participation', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='participation.participation', verbose_name='participation'), + ), + migrations.AddField( + model_name='synthesis', + name='passage', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='syntheses', to='participation.passage', verbose_name='passage'), + ), + migrations.AddField( + model_name='solution', + name='participation', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='solutions', to='participation.participation', verbose_name='participation'), + ), + migrations.AddField( + model_name='pool', + name='juries', + field=models.ManyToManyField(related_name='jury_in', to='registration.VolunteerRegistration', verbose_name='juries'), + ), + migrations.AddField( + model_name='pool', + name='participations', + field=models.ManyToManyField(related_name='pools', to='participation.Participation', verbose_name='participations'), + ), + migrations.AddField( + model_name='pool', + name='tournament', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pools', to='participation.tournament', verbose_name='tournament'), + ), + migrations.AddField( + model_name='passage', + name='defender', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.participation', verbose_name='defender'), + ), + migrations.AddField( + model_name='passage', + name='opponent', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.participation', verbose_name='opponent'), + ), + migrations.AddField( + model_name='passage', + name='pool', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='passages', to='participation.pool', verbose_name='pool'), + ), + migrations.AddField( + model_name='passage', + name='reporter', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='participation.participation', verbose_name='reporter'), + ), + migrations.AddField( + model_name='participation', + name='team', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='participation.team', verbose_name='team'), + ), + migrations.AddField( + model_name='participation', + name='tournament', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='participation.tournament', verbose_name='tournament'), + ), + migrations.AddField( + model_name='note', + name='jury', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='registration.volunteerregistration', verbose_name='jury'), + ), + migrations.AddField( + model_name='note', + name='passage', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='participation.passage', verbose_name='passage'), + ), + migrations.AddIndex( + model_name='tournament', + index=models.Index(fields=['name', 'date_start', 'date_end'], name='participati_name_b43174_idx'), + ), + migrations.AlterUniqueTogether( + name='synthesis', + unique_together={('participation', 'passage', 'type')}, + ), + migrations.AlterUniqueTogether( + name='solution', + unique_together={('participation', 'problem', 'final_solution')}, + ), + ] diff --git a/apps/registration/forms.py b/apps/registration/forms.py index 2ff428a..7e64053 100644 --- a/apps/registration/forms.py +++ b/apps/registration/forms.py @@ -101,8 +101,8 @@ class StudentRegistrationForm(forms.ModelForm): """ class Meta: model = StudentRegistration - fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'phone_number', 'health_issues', - 'school', 'responsible_name', 'responsible_phone', 'responsible_email', + fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'zip_code', 'city', 'phone_number', + 'health_issues', 'school', 'responsible_name', 'responsible_phone', 'responsible_email', 'give_contact_to_animath', 'email_confirmed',) @@ -178,8 +178,8 @@ class CoachRegistrationForm(forms.ModelForm): """ class Meta: model = CoachRegistration - fields = ('team', 'birth_date', 'gender', 'address', 'phone_number', 'health_issues', 'professional_activity', - 'give_contact_to_animath', 'email_confirmed',) + fields = ('team', 'gender', 'address', 'zip_code', 'city', 'phone_number', 'health_issues', + 'professional_activity', 'give_contact_to_animath', 'email_confirmed',) class VolunteerRegistrationForm(forms.ModelForm): diff --git a/apps/registration/migrations/0002_auto_20230110_2031.py b/apps/registration/migrations/0002_auto_20230110_2031.py new file mode 100644 index 0000000..868f319 --- /dev/null +++ b/apps/registration/migrations/0002_auto_20230110_2031.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.13 on 2023-01-10 19:31 + +import datetime +from django.db import migrations, models +import phonenumber_field.modelfields + + +class Migration(migrations.Migration): + + dependencies = [ + ('registration', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='participantregistration', + name='birth_date', + ), + migrations.AddField( + model_name='studentregistration', + name='birth_date', + field=models.DateField(default=datetime.date.today, verbose_name='birth date'), + ), + migrations.AlterField( + model_name='studentregistration', + name='responsible_phone', + field=phonenumber_field.modelfields.PhoneNumberField(default='', max_length=128, region=None, verbose_name='responsible phone number'), + ), + ] diff --git a/apps/registration/models.py b/apps/registration/models.py index f8b35d6..a3f1d4c 100644 --- a/apps/registration/models.py +++ b/apps/registration/models.py @@ -123,11 +123,6 @@ class ParticipantRegistration(Registration): verbose_name=_("team"), ) - birth_date = models.DateField( - verbose_name=_("birth date"), - default=date.today, - ) - gender = models.CharField( max_length=6, verbose_name=_("gender"), @@ -174,6 +169,8 @@ class ParticipantRegistration(Registration): @property def under_18(self): + if isinstance(self, CoachRegistration): + return False # In normal case important_date = timezone.now().date() if self.team and self.team.participation.tournament: important_date = self.team.participation.tournament.date_start @@ -196,6 +193,11 @@ class StudentRegistration(ParticipantRegistration): Specific registration for students. They have a team, a student class and a school. """ + birth_date = models.DateField( + verbose_name=_("birth date"), + default=date.today, + ) + student_class = models.IntegerField( choices=[ (12, _("12th grade")), @@ -218,7 +220,7 @@ class StudentRegistration(ParticipantRegistration): responsible_phone = PhoneNumberField( verbose_name=_("responsible phone number"), - blank=True, + default="", ) responsible_email = models.EmailField( diff --git a/apps/registration/templates/registration/user_detail.html b/apps/registration/templates/registration/user_detail.html index b64080a..f977dd8 100644 --- a/apps/registration/templates/registration/user_detail.html +++ b/apps/registration/templates/registration/user_detail.html @@ -39,8 +39,10 @@ -
{% trans "Birth date:" %}
-
{{ user_object.registration.birth_date }}
+ {% if user_object.registration.studentregistration %} +
{% trans "Birth date:" %}
+
{{ user_object.registration.birth_date }}
+ {% endif %}
{% trans "Gender:" %}
{{ user_object.registration.get_gender_display }}
diff --git a/apps/registration/templates/search/indexes/registration/coachregistration_text.txt b/apps/registration/templates/search/indexes/registration/coachregistration_text.txt index e08b187..65e6e95 100644 --- a/apps/registration/templates/search/indexes/registration/coachregistration_text.txt +++ b/apps/registration/templates/search/indexes/registration/coachregistration_text.txt @@ -3,8 +3,9 @@ {{ object.user.email }} {{ object.type }} {{ object.professional_activity }} -{{ object.birth_date }} {{ object.address }} +{{ object.zip_code }} +{{ object.city }} {{ object.phone_number }} {{ object.team.name }} {{ object.team.trigram }} diff --git a/apps/registration/templates/search/indexes/registration/studentregistration_text.txt b/apps/registration/templates/search/indexes/registration/studentregistration_text.txt index 9eefe38..b1c088e 100644 --- a/apps/registration/templates/search/indexes/registration/studentregistration_text.txt +++ b/apps/registration/templates/search/indexes/registration/studentregistration_text.txt @@ -6,6 +6,8 @@ {{ object.school }} {{ object.birth_date }} {{ object.address }} +{{ object.zip_code }} +{{ object.city }} {{ object.phone_number }} {{ object.responsible_name }} {{ object.reponsible_phone }} diff --git a/apps/registration/tests.py b/apps/registration/tests.py index 0c87e0a..064b10b 100644 --- a/apps/registration/tests.py +++ b/apps/registration/tests.py @@ -178,7 +178,6 @@ class TestRegistration(TestCase): password1="azertyuiopazertyuiop", password2="azertyuiopazertyuiop", role="coach", - birth_date="1980-01-01", gender="other", address="1 Rue de Rivoli", zip_code=75001, @@ -264,8 +263,8 @@ class TestRegistration(TestCase): gender="female", address="1 Rue de Rivoli", zip_code=75001, city="Paris", responsible_name="Toto", responsible_email="toto@example.com")), - (self.coach, dict(professional_activity="God", birth_date="2001-01-01", - gender="male", address="1 Rue de Rivoli", zip_code=75001, city="Paris"))]: + (self.coach, dict(professional_activity="God", gender="male", + address="1 Rue de Rivoli", zip_code=75001, city="Paris"))]: response = self.client.get(reverse("registration:update_user", args=(user.pk,))) self.assertEqual(response.status_code, 200) diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 9231acd..7194b64 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: TFJM\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 20:22+0100\n" +"POT-Creation-Date: 2023-01-10 20:31+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Yohann D'ANELLO \n" "Language-Team: LANGUAGE \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}" #: apps/participation/admin.py:19 apps/participation/models.py:314 -#: apps/participation/tables.py:44 apps/registration/models.py:368 +#: apps/participation/tables.py:44 apps/registration/models.py:370 msgid "valid" msgstr "valide" @@ -599,8 +599,8 @@ msgstr "Rejoindre" #: apps/participation/templates/participation/update_team.html:12 #: apps/registration/templates/registration/payment_form.html:49 #: apps/registration/templates/registration/update_user.html:16 -#: apps/registration/templates/registration/user_detail.html:153 -#: apps/registration/templates/registration/user_detail.html:185 +#: apps/registration/templates/registration/user_detail.html:155 +#: apps/registration/templates/registration/user_detail.html:187 msgid "Update" msgstr "Modifier" @@ -665,10 +665,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:163 -#: apps/registration/templates/registration/user_detail.html:168 -#: apps/registration/templates/registration/user_detail.html:173 -#: apps/registration/templates/registration/user_detail.html:178 +#: apps/registration/templates/registration/user_detail.html:165 +#: apps/registration/templates/registration/user_detail.html:170 +#: apps/registration/templates/registration/user_detail.html:175 +#: apps/registration/templates/registration/user_detail.html:180 msgid "Upload" msgstr "Téléverser" @@ -867,16 +867,16 @@ msgstr "Lettre de motivation :" #: apps/participation/templates/participation/team_detail.html:94 #: apps/registration/templates/registration/upload_health_sheet.html:12 #: apps/registration/templates/registration/upload_parental_authorization.html:12 -#: apps/registration/templates/registration/user_detail.html:60 -#: apps/registration/templates/registration/user_detail.html:73 -#: apps/registration/templates/registration/user_detail.html:83 +#: apps/registration/templates/registration/user_detail.html:62 +#: apps/registration/templates/registration/user_detail.html:75 +#: apps/registration/templates/registration/user_detail.html:85 msgid "Download" msgstr "Télécharger" #: apps/participation/templates/participation/team_detail.html:99 -#: apps/registration/templates/registration/user_detail.html:63 -#: apps/registration/templates/registration/user_detail.html:76 -#: apps/registration/templates/registration/user_detail.html:86 +#: apps/registration/templates/registration/user_detail.html:65 +#: apps/registration/templates/registration/user_detail.html:78 +#: apps/registration/templates/registration/user_detail.html:88 msgid "Replace" msgstr "Remplacer" @@ -1190,7 +1190,7 @@ msgstr "rôle" msgid "participant" msgstr "participant⋅e" -#: apps/registration/forms.py:25 apps/registration/models.py:268 +#: apps/registration/forms.py:25 apps/registration/models.py:270 msgid "coach" msgstr "encadrant⋅e" @@ -1198,11 +1198,11 @@ msgstr "encadrant⋅e" msgid "This email address is already used." msgstr "Cette adresse e-mail est déjà utilisée." -#: apps/registration/forms.py:56 apps/registration/models.py:294 +#: apps/registration/forms.py:56 apps/registration/models.py:296 msgid "volunteer" msgstr "bénévole" -#: apps/registration/forms.py:57 apps/registration/models.py:313 +#: apps/registration/forms.py:57 apps/registration/models.py:315 msgid "admin" msgstr "admin" @@ -1227,7 +1227,7 @@ msgstr "email confirmé" msgid "Activate your TFJM² account" msgstr "Activez votre compte du TFJM²" -#: apps/registration/models.py:99 apps/registration/models.py:334 +#: apps/registration/models.py:99 apps/registration/models.py:336 msgid "registration" msgstr "inscription" @@ -1235,47 +1235,43 @@ msgstr "inscription" msgid "registrations" msgstr "inscriptions" -#: apps/registration/models.py:127 -msgid "birth date" -msgstr "date de naissance" - -#: apps/registration/models.py:133 +#: apps/registration/models.py:128 msgid "gender" msgstr "genre" -#: apps/registration/models.py:135 +#: apps/registration/models.py:130 msgid "Female" msgstr "Femme" -#: apps/registration/models.py:136 +#: apps/registration/models.py:131 msgid "Male" msgstr "Homme" -#: apps/registration/models.py:137 +#: apps/registration/models.py:132 msgid "Other" msgstr "Autre" -#: apps/registration/models.py:144 +#: apps/registration/models.py:139 msgid "address" msgstr "adresse" -#: apps/registration/models.py:148 +#: apps/registration/models.py:143 msgid "zip code" msgstr "code postal" -#: apps/registration/models.py:154 +#: apps/registration/models.py:149 msgid "city" msgstr "ville" -#: apps/registration/models.py:158 +#: apps/registration/models.py:153 msgid "phone number" msgstr "numéro de téléphone" -#: apps/registration/models.py:163 +#: apps/registration/models.py:158 msgid "health issues" msgstr "problèmes de santé" -#: apps/registration/models.py:165 +#: apps/registration/models.py:160 msgid "" "You can indicate here your allergies or anything that is important to know " "for organizers" @@ -1283,136 +1279,140 @@ msgstr "" "Vous pouvez indiquer ici vos allergies ou n'importe quoi qui peut être bon à " "savoir pour les organisateur⋅rices" -#: apps/registration/models.py:169 +#: apps/registration/models.py:164 msgid "photo authorization" msgstr "autorisation de droit à l'image" -#: apps/registration/models.py:201 +#: apps/registration/models.py:197 +msgid "birth date" +msgstr "date de naissance" + +#: apps/registration/models.py:203 msgid "12th grade" msgstr "Terminale" -#: apps/registration/models.py:202 +#: apps/registration/models.py:204 msgid "11th grade" msgstr "Première" -#: apps/registration/models.py:203 +#: apps/registration/models.py:205 msgid "10th grade or lower" msgstr "Seconde ou inférieur" -#: apps/registration/models.py:205 +#: apps/registration/models.py:207 msgid "student class" msgstr "classe" -#: apps/registration/models.py:210 +#: apps/registration/models.py:212 msgid "school" msgstr "école" -#: apps/registration/models.py:215 +#: apps/registration/models.py:217 msgid "responsible name" msgstr "nom de læ responsable légal⋅e" -#: apps/registration/models.py:220 +#: apps/registration/models.py:222 msgid "responsible phone number" msgstr "numéro de téléphone de læ responsable légal⋅e" -#: apps/registration/models.py:225 +#: apps/registration/models.py:227 msgid "responsible email address" msgstr "adresse e-mail de læ responsable légal⋅e" -#: apps/registration/models.py:230 +#: apps/registration/models.py:232 msgid "parental authorization" msgstr "autorisation parentale" -#: apps/registration/models.py:237 +#: apps/registration/models.py:239 msgid "health sheet" msgstr "fiche sanitaire" -#: apps/registration/models.py:245 +#: apps/registration/models.py:247 msgid "student" msgstr "étudiant⋅e" -#: apps/registration/models.py:253 +#: apps/registration/models.py:255 msgid "student registration" msgstr "inscription d'élève" -#: apps/registration/models.py:254 +#: apps/registration/models.py:256 msgid "student registrations" msgstr "inscriptions d'élève" -#: apps/registration/models.py:263 apps/registration/models.py:285 +#: apps/registration/models.py:265 apps/registration/models.py:287 msgid "professional activity" msgstr "activité professionnelle" -#: apps/registration/models.py:276 +#: apps/registration/models.py:278 msgid "coach registration" msgstr "inscription d'encadrant⋅e" -#: apps/registration/models.py:277 +#: apps/registration/models.py:279 msgid "coach registrations" msgstr "inscriptions d'encadrant⋅es" -#: apps/registration/models.py:308 +#: apps/registration/models.py:310 msgid "role of the administrator" msgstr "rôle de l'administrateur⋅rice" -#: apps/registration/models.py:321 +#: apps/registration/models.py:323 msgid "admin registration" msgstr "inscription d'administrateur⋅rice" -#: apps/registration/models.py:322 +#: apps/registration/models.py:324 msgid "admin registrations" msgstr "inscriptions d'administrateur⋅rices" -#: apps/registration/models.py:338 +#: apps/registration/models.py:340 msgid "type" msgstr "type" -#: apps/registration/models.py:341 +#: apps/registration/models.py:343 msgid "No payment" msgstr "Pas de paiement" -#: apps/registration/models.py:343 +#: apps/registration/models.py:345 msgid "Scholarship" msgstr "Notification de bourse" -#: apps/registration/models.py:344 +#: apps/registration/models.py:346 msgid "Bank transfer" msgstr "Virement bancaire" -#: apps/registration/models.py:345 +#: apps/registration/models.py:347 msgid "Other (please indicate)" msgstr "Autre (veuillez spécifier)" -#: apps/registration/models.py:346 +#: apps/registration/models.py:348 msgid "The tournament is free" msgstr "Le tournoi est gratuit" -#: apps/registration/models.py:353 +#: apps/registration/models.py:355 msgid "scholarship file" msgstr "Notification de bourse" -#: apps/registration/models.py:354 +#: apps/registration/models.py:356 msgid "only if you have a scholarship." msgstr "Nécessaire seulement si vous déclarez être boursier." -#: apps/registration/models.py:361 +#: apps/registration/models.py:363 msgid "additional information" msgstr "informations additionnelles" -#: apps/registration/models.py:362 +#: apps/registration/models.py:364 msgid "To help us to find your payment." msgstr "Pour nous aider à retrouver votre paiement, si nécessaire." -#: apps/registration/models.py:377 +#: apps/registration/models.py:379 #, python-brace-format msgid "Payment of {registration}" msgstr "Paiement de {registration}" -#: apps/registration/models.py:380 +#: apps/registration/models.py:382 msgid "payment" msgstr "paiement" -#: apps/registration/models.py:381 +#: apps/registration/models.py:383 msgid "payments" msgstr "paiements" @@ -1683,108 +1683,108 @@ msgstr "Mot de passe :" msgid "Change password" msgstr "Changer mon mot de passe" -#: apps/registration/templates/registration/user_detail.html:42 +#: apps/registration/templates/registration/user_detail.html:43 msgid "Birth date:" msgstr "Date de naissance :" -#: apps/registration/templates/registration/user_detail.html:45 +#: apps/registration/templates/registration/user_detail.html:47 msgid "Gender:" msgstr "Genre :" -#: apps/registration/templates/registration/user_detail.html:48 +#: apps/registration/templates/registration/user_detail.html:50 msgid "Address:" msgstr "Adresse :" -#: apps/registration/templates/registration/user_detail.html:51 +#: apps/registration/templates/registration/user_detail.html:53 msgid "Phone number:" msgstr "Numéro de téléphone :" -#: apps/registration/templates/registration/user_detail.html:54 +#: apps/registration/templates/registration/user_detail.html:56 msgid "Health issues:" msgstr "Problèmes de santé :" -#: apps/registration/templates/registration/user_detail.html:57 +#: apps/registration/templates/registration/user_detail.html:59 msgid "Photo authorization:" msgstr "Autorisation de droit à l'image" -#: apps/registration/templates/registration/user_detail.html:70 +#: apps/registration/templates/registration/user_detail.html:72 msgid "Health sheet:" msgstr "Fiche sanitaire :" -#: apps/registration/templates/registration/user_detail.html:80 +#: apps/registration/templates/registration/user_detail.html:82 msgid "Parental authorization:" msgstr "Autorisation parentale :" -#: apps/registration/templates/registration/user_detail.html:91 +#: apps/registration/templates/registration/user_detail.html:93 msgid "Student class:" msgstr "Classe :" -#: apps/registration/templates/registration/user_detail.html:94 +#: apps/registration/templates/registration/user_detail.html:96 msgid "School:" msgstr "École :" -#: apps/registration/templates/registration/user_detail.html:97 +#: apps/registration/templates/registration/user_detail.html:99 msgid "Responsible name:" msgstr "Nom de læ responsable légal⋅e :" -#: apps/registration/templates/registration/user_detail.html:100 +#: apps/registration/templates/registration/user_detail.html:102 msgid "Responsible phone number:" msgstr "Numéro de téléphone de læ responsable légal⋅e :" -#: apps/registration/templates/registration/user_detail.html:103 +#: apps/registration/templates/registration/user_detail.html:105 msgid "Responsible email address:" msgstr "Adresse e-mail de læ responsable légal⋅e :" -#: apps/registration/templates/registration/user_detail.html:108 +#: apps/registration/templates/registration/user_detail.html:110 msgid "Role:" msgstr "Rôle :" -#: apps/registration/templates/registration/user_detail.html:111 +#: apps/registration/templates/registration/user_detail.html:113 msgid "Profesional activity:" msgstr "Activité professionnelle :" -#: apps/registration/templates/registration/user_detail.html:115 +#: apps/registration/templates/registration/user_detail.html:117 msgid "Grant Animath to contact me in the future about other actions:" msgstr "Autorise Animath à recontacter à propos d'autres actions :" -#: apps/registration/templates/registration/user_detail.html:123 +#: apps/registration/templates/registration/user_detail.html:125 msgid "Payment information:" msgstr "Informations de paiement :" -#: apps/registration/templates/registration/user_detail.html:125 +#: apps/registration/templates/registration/user_detail.html:127 msgid "yes,no,pending" msgstr "oui,non,en attente" -#: apps/registration/templates/registration/user_detail.html:129 -#: apps/registration/templates/registration/user_detail.html:132 +#: apps/registration/templates/registration/user_detail.html:131 +#: apps/registration/templates/registration/user_detail.html:134 msgid "valid:" msgstr "valide :" -#: apps/registration/templates/registration/user_detail.html:136 -#: apps/registration/templates/registration/user_detail.html:184 +#: apps/registration/templates/registration/user_detail.html:138 +#: apps/registration/templates/registration/user_detail.html:186 msgid "Update payment" msgstr "Modifier le paiement" -#: apps/registration/templates/registration/user_detail.html:142 +#: apps/registration/templates/registration/user_detail.html:144 msgid "Download scholarship attestation" msgstr "Télécharger l'attestation de bourse" -#: apps/registration/templates/registration/user_detail.html:155 +#: apps/registration/templates/registration/user_detail.html:157 msgid "Impersonate" msgstr "Impersonifier" -#: apps/registration/templates/registration/user_detail.html:162 +#: apps/registration/templates/registration/user_detail.html:164 #: apps/registration/views.py:315 msgid "Upload photo authorization" msgstr "Téléverser l'autorisation de droit à l'image" -#: apps/registration/templates/registration/user_detail.html:167 +#: apps/registration/templates/registration/user_detail.html:169 #: apps/registration/views.py:336 msgid "Upload health sheet" msgstr "Téléverser la fiche sanitaire" -#: apps/registration/templates/registration/user_detail.html:172 -#: apps/registration/templates/registration/user_detail.html:177 +#: apps/registration/templates/registration/user_detail.html:174 +#: apps/registration/templates/registration/user_detail.html:179 #: apps/registration/views.py:357 msgid "Upload parental authorization" msgstr "Téléverser l'autorisation parentale"