Add country field in registration

Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
Emmy D'Anello 2024-06-07 14:52:09 +02:00
parent 2c15774185
commit 85b3da09f6
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
9 changed files with 248 additions and 152 deletions

View File

@ -0,0 +1,27 @@
# Generated by Django 5.0.6 on 2024-06-07 12:46
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("draw", "0003_alter_teamdraw_options"),
]
operations = [
migrations.AlterField(
model_name="round",
name="number",
field=models.PositiveSmallIntegerField(
choices=[(1, "Round 1"), (2, "Round 2")],
help_text="The number of the round, 1 or 2 (or 3 for ETEAM)",
validators=[
django.core.validators.MinValueValidator(1),
django.core.validators.MaxValueValidator(2),
],
verbose_name="number",
),
),
]

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: 2024-06-07 14:13+0200\n" "POT-Creation-Date: 2024-06-07 14:45+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n" "Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -80,7 +80,7 @@ msgstr "Type de permission nécessaire pour écrire un message dans un canal."
#: draw/models.py:26 participation/admin.py:79 participation/admin.py:140 #: draw/models.py:26 participation/admin.py:79 participation/admin.py:140
#: participation/admin.py:171 participation/models.py:694 #: participation/admin.py:171 participation/models.py:694
#: participation/models.py:718 participation/models.py:936 #: participation/models.py:718 participation/models.py:936
#: registration/models.py:756 #: registration/models.py:762
#: registration/templates/registration/payment_form.html:53 #: registration/templates/registration/payment_form.html:53
msgid "tournament" msgid "tournament"
msgstr "tournoi" msgstr "tournoi"
@ -95,7 +95,7 @@ msgstr ""
#: chat/models.py:73 draw/models.py:429 draw/models.py:456 #: chat/models.py:73 draw/models.py:429 draw/models.py:456
#: participation/admin.py:136 participation/admin.py:155 #: participation/admin.py:136 participation/admin.py:155
#: participation/models.py:1435 participation/models.py:1444 #: participation/models.py:1439 participation/models.py:1448
#: participation/tables.py:84 #: participation/tables.py:84
msgid "pool" msgid "pool"
msgstr "poule" msgstr "poule"
@ -111,7 +111,7 @@ msgstr ""
#: participation/admin.py:167 participation/models.py:253 #: participation/admin.py:167 participation/models.py:253
#: participation/models.py:709 #: participation/models.py:709
#: participation/templates/participation/tournament_harmonize.html:15 #: participation/templates/participation/tournament_harmonize.html:15
#: registration/models.py:157 registration/models.py:747 #: registration/models.py:157 registration/models.py:753
#: registration/tables.py:39 #: registration/tables.py:39
#: registration/templates/registration/payment_form.html:52 #: registration/templates/registration/payment_form.html:52
msgid "team" msgid "team"
@ -440,12 +440,12 @@ msgstr "L'instance complète de la poule."
msgid "Pool {letter}{number}" msgid "Pool {letter}{number}"
msgstr "Poule {letter}{number}" msgstr "Poule {letter}{number}"
#: draw/models.py:430 participation/models.py:1436 #: draw/models.py:430 participation/models.py:1440
msgid "pools" msgid "pools"
msgstr "poules" msgstr "poules"
#: draw/models.py:442 participation/models.py:926 participation/models.py:1585 #: draw/models.py:442 participation/models.py:926 participation/models.py:1589
#: participation/models.py:1615 participation/models.py:1657 #: participation/models.py:1619 participation/models.py:1661
msgid "participation" msgid "participation"
msgstr "participation" msgstr "participation"
@ -469,8 +469,8 @@ msgid ""
msgstr "" msgstr ""
"L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1." "L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1."
#: draw/models.py:479 draw/models.py:502 participation/models.py:1458 #: draw/models.py:479 draw/models.py:502 participation/models.py:1462
#: participation/models.py:1622 #: participation/models.py:1626
#, python-brace-format #, python-brace-format
msgid "Problem #{problem}" msgid "Problem #{problem}"
msgstr "Problème n°{problem}" msgstr "Problème n°{problem}"
@ -686,21 +686,21 @@ msgid "selected for final"
msgstr "sélectionnée pour la finale" msgstr "sélectionnée pour la finale"
#: participation/admin.py:124 participation/admin.py:183 #: participation/admin.py:124 participation/admin.py:183
#: participation/models.py:1465 participation/tables.py:112 #: participation/models.py:1469 participation/tables.py:112
msgid "defender" msgid "defender"
msgstr "défenseur⋅se" msgstr "défenseur⋅se"
#: participation/admin.py:128 participation/models.py:1472 #: participation/admin.py:128 participation/models.py:1476
#: participation/models.py:1669 #: participation/models.py:1673
msgid "opponent" msgid "opponent"
msgstr "opposant⋅e" msgstr "opposant⋅e"
#: participation/admin.py:132 participation/models.py:1479 #: participation/admin.py:132 participation/models.py:1483
#: participation/models.py:1670 #: participation/models.py:1674
msgid "reporter" msgid "reporter"
msgstr "rapporteur⋅rice" msgstr "rapporteur⋅rice"
#: participation/admin.py:187 participation/models.py:1620 #: participation/admin.py:187 participation/models.py:1624
msgid "problem" msgid "problem"
msgstr "numéro de problème" msgstr "numéro de problème"
@ -811,8 +811,8 @@ msgid "The code must be composed of {nb_letters} uppercase letters."
msgstr "Le code doit être composé de {nb_letters} lettres majuscules." msgstr "Le code doit être composé de {nb_letters} lettres majuscules."
#: participation/models.py:48 #: participation/models.py:48
msgid "This trigram is forbidden." msgid "This team code is forbidden."
msgstr "Ce trigramme est interdit." msgstr "Ce code d'équipe est interdit."
#: participation/models.py:54 #: participation/models.py:54
msgid "access code" msgid "access code"
@ -943,7 +943,7 @@ msgstr ""
"L'équipe {trigram} n'a pas encore été validée par les organisateurices. " "L'équipe {trigram} n'a pas encore été validée par les organisateurices. "
"Merci de patienter." "Merci de patienter."
#: participation/models.py:197 registration/models.py:575 #: participation/models.py:197 registration/models.py:581
msgid "Pending validation" msgid "Pending validation"
msgstr "Validation en attente" msgstr "Validation en attente"
@ -1100,7 +1100,7 @@ msgstr ""
"parties.</p><p>Vous pouvez envoyer vos solutions sur <a href='{url}'>votre " "parties.</p><p>Vous pouvez envoyer vos solutions sur <a href='{url}'>votre "
"page de participation</a>.</p>" "page de participation</a>.</p>"
#: participation/models.py:814 registration/models.py:600 #: participation/models.py:814 registration/models.py:606
msgid "" msgid ""
"<p>The draw of the solutions for the tournament {tournament} is planned on " "<p>The draw of the solutions for the tournament {tournament} is planned on "
"the {date:%Y-%m-%d %H:%M}. You can join it on <a href='{url}'>this link</a>." "the {date:%Y-%m-%d %H:%M}. You can join it on <a href='{url}'>this link</a>."
@ -1110,7 +1110,7 @@ msgstr ""
"{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur <a href='{url}'>ce lien</" "{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur <a href='{url}'>ce lien</"
"a>.</p>" "a>.</p>"
#: participation/models.py:820 registration/models.py:607 #: participation/models.py:820 registration/models.py:613
msgid "Draw of solutions" msgid "Draw of solutions"
msgstr "Tirage au sort des solutions" msgstr "Tirage au sort des solutions"
@ -1148,7 +1148,7 @@ msgstr ""
"href='{solution_url}'>problème {problem}</a>. Vous pouvez envoyer votre note " "href='{solution_url}'>problème {problem}</a>. Vous pouvez envoyer votre note "
"de synthèse sur <a href='{passage_url}'>cette page</a>.</p>" "de synthèse sur <a href='{passage_url}'>cette page</a>.</p>"
#: participation/models.py:864 registration/models.py:622 #: participation/models.py:864 registration/models.py:628
msgid "First round" msgid "First round"
msgstr "Premier tour" msgstr "Premier tour"
@ -1161,7 +1161,7 @@ msgstr ""
"<p>Pour le second tour, vous défendrez <a href='{solution_url}'>votre " "<p>Pour le second tour, vous défendrez <a href='{solution_url}'>votre "
"solution du problème {problem}</a>.</p>" "solution du problème {problem}</a>.</p>"
#: participation/models.py:906 registration/models.py:633 #: participation/models.py:906 registration/models.py:639
msgid "Second round" msgid "Second round"
msgstr "Second tour" msgstr "Second tour"
@ -1233,33 +1233,33 @@ msgstr ""
"Ils restent toujours accessibles pour vous. Seules les moyennes sont " "Ils restent toujours accessibles pour vous. Seules les moyennes sont "
"communiquées." "communiquées."
#: participation/models.py:1027 #: participation/models.py:1031
msgid "The president of the jury must be part of the jury." msgid "The president of the jury must be part of the jury."
msgstr "Læ président⋅e du jury doit faire partie du jury." msgstr "Læ président⋅e du jury doit faire partie du jury."
#: participation/models.py:1416 #: participation/models.py:1420
#, python-brace-format #, python-brace-format
msgid "The jury {jury} is not part of the jury for this pool." msgid "The jury {jury} is not part of the jury for this pool."
msgstr "{jury} ne fait pas partie du jury pour cette poule." msgstr "{jury} ne fait pas partie du jury pour cette poule."
#: participation/models.py:1429 #: participation/models.py:1433
#, python-brace-format #, python-brace-format
msgid "Pool {code} for tournament {tournament} with teams {teams}" msgid "Pool {code} for tournament {tournament} with teams {teams}"
msgstr "Poule {code} du tournoi {tournament} avec les équipes {teams}" msgstr "Poule {code} du tournoi {tournament} avec les équipes {teams}"
#: participation/models.py:1449 #: participation/models.py:1453
msgid "position" msgid "position"
msgstr "position" msgstr "position"
#: participation/models.py:1456 #: participation/models.py:1460
msgid "defended solution" msgid "defended solution"
msgstr "solution défendue" msgstr "solution défendue"
#: participation/models.py:1484 #: participation/models.py:1488
msgid "penalties" msgid "penalties"
msgstr "pénalités" msgstr "pénalités"
#: participation/models.py:1486 #: participation/models.py:1490
msgid "" msgid ""
"Number of penalties for the defender. The defender will loose a 0.5 " "Number of penalties for the defender. The defender will loose a 0.5 "
"coefficient per penalty." "coefficient per penalty."
@ -1267,120 +1267,120 @@ msgstr ""
"Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 " "Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 "
"sur sa présentation orale par pénalité." "sur sa présentation orale par pénalité."
#: participation/models.py:1555 participation/models.py:1558 #: participation/models.py:1559 participation/models.py:1562
#: participation/models.py:1561 #: participation/models.py:1565
#, python-brace-format #, python-brace-format
msgid "Team {trigram} is not registered in the pool." msgid "Team {trigram} is not registered in the pool."
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule." msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
#: participation/models.py:1566 #: participation/models.py:1570
#, python-brace-format #, python-brace-format
msgid "Passage of {defender} for problem {problem}" msgid "Passage of {defender} for problem {problem}"
msgstr "Passage de {defender} pour le problème {problem}" msgstr "Passage de {defender} pour le problème {problem}"
#: participation/models.py:1570 participation/models.py:1579 #: participation/models.py:1574 participation/models.py:1583
#: participation/models.py:1664 participation/models.py:1706 #: participation/models.py:1668 participation/models.py:1710
msgid "passage" msgid "passage"
msgstr "passage" msgstr "passage"
#: participation/models.py:1571 #: participation/models.py:1575
msgid "passages" msgid "passages"
msgstr "passages" msgstr "passages"
#: participation/models.py:1590 #: participation/models.py:1594
msgid "difference" msgid "difference"
msgstr "différence" msgstr "différence"
#: participation/models.py:1591 #: participation/models.py:1595
msgid "Score to add/remove on the final score" msgid "Score to add/remove on the final score"
msgstr "Score à ajouter/retrancher au score final" msgstr "Score à ajouter/retrancher au score final"
#: participation/models.py:1598 #: participation/models.py:1602
msgid "tweak" msgid "tweak"
msgstr "harmonisation" msgstr "harmonisation"
#: participation/models.py:1599 #: participation/models.py:1603
msgid "tweaks" msgid "tweaks"
msgstr "harmonisations" msgstr "harmonisations"
#: participation/models.py:1627 #: participation/models.py:1631
msgid "solution for the final tournament" msgid "solution for the final tournament"
msgstr "solution pour la finale" msgstr "solution pour la finale"
#: participation/models.py:1632 participation/models.py:1675 #: participation/models.py:1636 participation/models.py:1679
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: participation/models.py:1642 #: participation/models.py:1646
#, python-brace-format #, python-brace-format
msgid "Solution of team {team} for problem {problem}" msgid "Solution of team {team} for problem {problem}"
msgstr "Solution de l'équipe {team} pour le problème {problem}" msgstr "Solution de l'équipe {team} pour le problème {problem}"
#: participation/models.py:1644 #: participation/models.py:1648
msgid "for final" msgid "for final"
msgstr "pour la finale" msgstr "pour la finale"
#: participation/models.py:1647 #: participation/models.py:1651
msgid "solution" msgid "solution"
msgstr "solution" msgstr "solution"
#: participation/models.py:1648 #: participation/models.py:1652
msgid "solutions" msgid "solutions"
msgstr "solutions" msgstr "solutions"
#: participation/models.py:1681 #: participation/models.py:1685
#, python-brace-format #, python-brace-format
msgid "Synthesis of {team} as {type} for problem {problem} of {defender}" msgid "Synthesis of {team} as {type} for problem {problem} of {defender}"
msgstr "" msgstr ""
"Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "Note de synthèse de l'équipe {team} en tant que {type} pour le problème "
"{problem} de {defender}" "{problem} de {defender}"
#: participation/models.py:1689 #: participation/models.py:1693
msgid "synthesis" msgid "synthesis"
msgstr "note de synthèse" msgstr "note de synthèse"
#: participation/models.py:1690 #: participation/models.py:1694
msgid "syntheses" msgid "syntheses"
msgstr "notes de synthèse" msgstr "notes de synthèse"
#: participation/models.py:1699 #: participation/models.py:1703
msgid "jury" msgid "jury"
msgstr "jury" msgstr "jury"
#: participation/models.py:1711 #: participation/models.py:1715
msgid "defender writing note" msgid "defender writing note"
msgstr "note d'écrit défenseur⋅se" msgstr "note d'écrit défenseur⋅se"
#: participation/models.py:1717 #: participation/models.py:1721
msgid "defender oral note" msgid "defender oral note"
msgstr "note d'oral défenseur⋅se" msgstr "note d'oral défenseur⋅se"
#: participation/models.py:1723 #: participation/models.py:1727
msgid "opponent writing note" msgid "opponent writing note"
msgstr "note d'écrit opposant⋅e" msgstr "note d'écrit opposant⋅e"
#: participation/models.py:1729 #: participation/models.py:1733
msgid "opponent oral note" msgid "opponent oral note"
msgstr "note d'oral opposant⋅e" msgstr "note d'oral opposant⋅e"
#: participation/models.py:1735 #: participation/models.py:1739
msgid "reporter writing note" msgid "reporter writing note"
msgstr "note d'écrit rapporteur⋅rice" msgstr "note d'écrit rapporteur⋅rice"
#: participation/models.py:1741 #: participation/models.py:1745
msgid "reporter oral note" msgid "reporter oral note"
msgstr "note d'oral du rapporteur⋅rice" msgstr "note d'oral du rapporteur⋅rice"
#: participation/models.py:1801 #: participation/models.py:1805
#, python-brace-format #, python-brace-format
msgid "Notes of {jury} for {passage}" msgid "Notes of {jury} for {passage}"
msgstr "Notes de {jury} pour le {passage}" msgstr "Notes de {jury} pour le {passage}"
#: participation/models.py:1804 #: participation/models.py:1808
msgid "note" msgid "note"
msgstr "note" msgstr "note"
#: participation/models.py:1805 #: participation/models.py:1809
msgid "notes" msgid "notes"
msgstr "notes" msgstr "notes"
@ -1845,7 +1845,7 @@ msgid "Payment of"
msgstr "Paiement de" msgstr "Paiement de"
#: participation/templates/participation/team_detail.html:160 #: participation/templates/participation/team_detail.html:160
#: registration/models.py:677 #: registration/models.py:683
msgid "grouped" msgid "grouped"
msgstr "groupé" msgstr "groupé"
@ -2048,7 +2048,7 @@ msgid "Rank"
msgstr "Rang" msgstr "Rang"
#: participation/templates/participation/tournament_harmonize.html:16 #: participation/templates/participation/tournament_harmonize.html:16
#: registration/models.py:648 #: registration/models.py:654
msgid "Note" msgid "Note"
msgstr "Note" msgstr "Note"
@ -2352,7 +2352,7 @@ msgstr "rôle"
msgid "participant" msgid "participant"
msgstr "participant⋅e" msgstr "participant⋅e"
#: registration/forms.py:25 registration/models.py:509 #: registration/forms.py:25 registration/models.py:515
msgid "coach" msgid "coach"
msgstr "encadrant⋅e" msgstr "encadrant⋅e"
@ -2396,7 +2396,7 @@ msgstr ""
msgid "registration" msgid "registration"
msgstr "inscription" msgstr "inscription"
#: registration/models.py:130 registration/models.py:673 #: registration/models.py:130 registration/models.py:679
msgid "registrations" msgid "registrations"
msgstr "inscriptions" msgstr "inscriptions"
@ -2429,15 +2429,19 @@ msgstr "code postal"
msgid "city" msgid "city"
msgstr "ville" msgstr "ville"
#: registration/models.py:187 #: registration/models.py:188
msgid "country"
msgstr "pays"
#: registration/models.py:193
msgid "phone number" msgid "phone number"
msgstr "numéro de téléphone" msgstr "numéro de téléphone"
#: registration/models.py:192 #: registration/models.py:198
msgid "health issues" msgid "health issues"
msgstr "problèmes de santé" msgstr "problèmes de santé"
#: registration/models.py:194 #: registration/models.py:200
msgid "" msgid ""
"You can indicate here your allergies or anything that is important to know " "You can indicate here your allergies or anything that is important to know "
"for organizers." "for organizers."
@ -2445,11 +2449,11 @@ msgstr ""
"Vous pouvez indiquer ici vos allergies ou n'importe quoi qui peut être bon à " "Vous pouvez indiquer ici vos allergies ou n'importe quoi qui peut être bon à "
"savoir pour les organisateur⋅rices." "savoir pour les organisateur⋅rices."
#: registration/models.py:198 #: registration/models.py:204
msgid "housing constraints" msgid "housing constraints"
msgstr "contraintes de logement" msgstr "contraintes de logement"
#: registration/models.py:200 #: registration/models.py:206
msgid "" msgid ""
"You can fill in something here if you have any housing constraints, e.g. " "You can fill in something here if you have any housing constraints, e.g. "
"medical problems, scheduling issues, gender issues, or anything else you " "medical problems, scheduling issues, gender issues, or anything else you "
@ -2462,15 +2466,15 @@ msgstr ""
"organisateur⋅rices. Laissez vide si vous n'avez rien de spécifique à " "organisateur⋅rices. Laissez vide si vous n'avez rien de spécifique à "
"déclarer." "déclarer."
#: registration/models.py:207 #: registration/models.py:213
msgid "photo authorization" msgid "photo authorization"
msgstr "autorisation de droit à l'image" msgstr "autorisation de droit à l'image"
#: registration/models.py:214 #: registration/models.py:220
msgid "photo authorization (final)" msgid "photo authorization (final)"
msgstr "autorisation de droit à l'image (finale)" msgstr "autorisation de droit à l'image (finale)"
#: registration/models.py:258 #: registration/models.py:264
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You are not in a team. You can <a href=\"{create_url}\">create one</a> or <a " "You are not in a team. You can <a href=\"{create_url}\">create one</a> or <a "
@ -2480,11 +2484,11 @@ msgstr ""
"a> ou <a href=\"{join_url}\">rejoindre une équipe existante</a> pour " "a> ou <a href=\"{join_url}\">rejoindre une équipe existante</a> pour "
"participer." "participer."
#: registration/models.py:264 #: registration/models.py:270
msgid "No team" msgid "No team"
msgstr "Pas d'équipe" msgstr "Pas d'équipe"
#: registration/models.py:272 #: registration/models.py:278
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your photo authorization. You can do it by clicking on " "You have not uploaded your photo authorization. You can do it by clicking on "
@ -2493,11 +2497,11 @@ msgstr ""
"Vous n'avez pas envoyé votre autorisation de droit à l'image. Vous pouvez le " "Vous n'avez pas envoyé votre autorisation de droit à l'image. Vous pouvez le "
"faire en cliquant sur <a href=\"{photo_url}\">ce lien</a>." "faire en cliquant sur <a href=\"{photo_url}\">ce lien</a>."
#: registration/models.py:277 registration/models.py:290 #: registration/models.py:283 registration/models.py:296
msgid "Photo authorization" msgid "Photo authorization"
msgstr "Autorisation de droit à l'image" msgstr "Autorisation de droit à l'image"
#: registration/models.py:285 #: registration/models.py:291
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your photo authorization for the final tournament. You " "You have not uploaded your photo authorization for the final tournament. You "
@ -2506,75 +2510,75 @@ msgstr ""
"Vous n'avez pas envoyé votre autorisation de droit à l'image pour la finale. " "Vous n'avez pas envoyé votre autorisation de droit à l'image pour la finale. "
"Vous pouvez le faire en cliquant sur <a href=\"{photo_url}\">ce lien</a>." "Vous pouvez le faire en cliquant sur <a href=\"{photo_url}\">ce lien</a>."
#: registration/models.py:305 #: registration/models.py:311
msgid "Team selected for the final tournament" msgid "Team selected for the final tournament"
msgstr "Équipe sélectionnée pour la finale" msgstr "Équipe sélectionnée pour la finale"
#: registration/models.py:327 #: registration/models.py:333
msgid "participant registration" msgid "participant registration"
msgstr "inscription de participant⋅e" msgstr "inscription de participant⋅e"
#: registration/models.py:328 #: registration/models.py:334
msgid "participant registrations" msgid "participant registrations"
msgstr "inscriptions de participant⋅es" msgstr "inscriptions de participant⋅es"
#: registration/models.py:337 #: registration/models.py:343
msgid "birth date" msgid "birth date"
msgstr "date de naissance" msgstr "date de naissance"
#: registration/models.py:343 #: registration/models.py:349
msgid "12th grade" msgid "12th grade"
msgstr "Terminale" msgstr "Terminale"
#: registration/models.py:344 #: registration/models.py:350
msgid "11th grade" msgid "11th grade"
msgstr "Première" msgstr "Première"
#: registration/models.py:345 #: registration/models.py:351
msgid "10th grade or lower" msgid "10th grade or lower"
msgstr "Seconde ou inférieur" msgstr "Seconde ou inférieur"
#: registration/models.py:347 #: registration/models.py:353
msgid "student class" msgid "student class"
msgstr "classe" msgstr "classe"
#: registration/models.py:352 #: registration/models.py:358
msgid "school" msgid "school"
msgstr "école" msgstr "école"
#: registration/models.py:357 #: registration/models.py:363
msgid "responsible name" msgid "responsible name"
msgstr "nom d'un⋅e responsable légal⋅e" msgstr "nom d'un⋅e responsable légal⋅e"
#: registration/models.py:362 #: registration/models.py:368
msgid "responsible phone number" msgid "responsible phone number"
msgstr "numéro de téléphone d'un⋅e responsable légal⋅e" msgstr "numéro de téléphone d'un⋅e responsable légal⋅e"
#: registration/models.py:367 #: registration/models.py:373
msgid "responsible email address" msgid "responsible email address"
msgstr "adresse e-mail d'un⋅e responsable légal⋅e" msgstr "adresse e-mail d'un⋅e responsable légal⋅e"
#: registration/models.py:372 #: registration/models.py:378
msgid "parental authorization" msgid "parental authorization"
msgstr "autorisation parentale" msgstr "autorisation parentale"
#: registration/models.py:379 #: registration/models.py:385
msgid "parental authorization (final)" msgid "parental authorization (final)"
msgstr "autorisation parentale (finale)" msgstr "autorisation parentale (finale)"
#: registration/models.py:386 #: registration/models.py:392
msgid "health sheet" msgid "health sheet"
msgstr "fiche sanitaire" msgstr "fiche sanitaire"
#: registration/models.py:393 #: registration/models.py:399
msgid "vaccine sheet" msgid "vaccine sheet"
msgstr "carnet de vaccination" msgstr "carnet de vaccination"
#: registration/models.py:401 #: registration/models.py:407
msgid "student" msgid "student"
msgstr "élève" msgstr "élève"
#: registration/models.py:412 #: registration/models.py:418
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your parental authorization. You can do it by clicking " "You have not uploaded your parental authorization. You can do it by clicking "
@ -2583,11 +2587,11 @@ msgstr ""
"Vous n'avez pas envoyé votre autorisation parentale. Vous pouvez le faire en " "Vous n'avez pas envoyé votre autorisation parentale. Vous pouvez le faire en "
"cliquant sur <a href=\"{parental_url}\">ce lien</a>." "cliquant sur <a href=\"{parental_url}\">ce lien</a>."
#: registration/models.py:417 registration/models.py:477 #: registration/models.py:423 registration/models.py:483
msgid "Parental authorization" msgid "Parental authorization"
msgstr "Autorisation parentale" msgstr "Autorisation parentale"
#: registration/models.py:423 #: registration/models.py:429
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your health sheet. You can do it by clicking on <a " "You have not uploaded your health sheet. You can do it by clicking on <a "
@ -2596,11 +2600,11 @@ msgstr ""
"Vous n'avez pas envoyé votre fiche sanitaire. Vous pouvez le faire en " "Vous n'avez pas envoyé votre fiche sanitaire. Vous pouvez le faire en "
"cliquant sur <a href=\"{health_url}\">ce lien</a>." "cliquant sur <a href=\"{health_url}\">ce lien</a>."
#: registration/models.py:428 #: registration/models.py:434
msgid "Health sheet" msgid "Health sheet"
msgstr "Fiche sanitaire" msgstr "Fiche sanitaire"
#: registration/models.py:434 #: registration/models.py:440
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your vaccine sheet. You can do it by clicking on <a " "You have not uploaded your vaccine sheet. You can do it by clicking on <a "
@ -2609,11 +2613,11 @@ msgstr ""
"Vous n'avez pas envoyé votre carnet de vaccination. Vous pouvez le faire en " "Vous n'avez pas envoyé votre carnet de vaccination. Vous pouvez le faire en "
"cliquant sur <a href=\"{vaccine_url}\">ce lien</a>." "cliquant sur <a href=\"{vaccine_url}\">ce lien</a>."
#: registration/models.py:439 #: registration/models.py:445
msgid "Vaccine sheet" msgid "Vaccine sheet"
msgstr "Carnet de vaccination" msgstr "Carnet de vaccination"
#: registration/models.py:448 #: registration/models.py:454
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have to pay {amount} € for your registration, or send a scholarship " "You have to pay {amount} € for your registration, or send a scholarship "
@ -2624,15 +2628,15 @@ msgstr ""
"notification de bourse ou un justificatif de paiement. Vous pouvez le faire " "notification de bourse ou un justificatif de paiement. Vous pouvez le faire "
"sur <a href=\"{url}\">la page de paiement</a>." "sur <a href=\"{url}\">la page de paiement</a>."
#: registration/models.py:454 registration/models.py:463 #: registration/models.py:460 registration/models.py:469
msgid "Payment" msgid "Payment"
msgstr "Paiement" msgstr "Paiement"
#: registration/models.py:460 #: registration/models.py:466
msgid "Your payment is under approval." msgid "Your payment is under approval."
msgstr "Votre paiement est en cours de validation." msgstr "Votre paiement est en cours de validation."
#: registration/models.py:471 #: registration/models.py:477
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"You have not uploaded your parental authorization for the final tournament. " "You have not uploaded your parental authorization for the final tournament. "
@ -2641,19 +2645,19 @@ msgstr ""
"Vous n'avez pas envoyé votre autorisation parentale pour la finale. Vous " "Vous n'avez pas envoyé votre autorisation parentale pour la finale. Vous "
"pouvez le faire en cliquant sur <a href=\"{parental_url}\">ce lien</a>." "pouvez le faire en cliquant sur <a href=\"{parental_url}\">ce lien</a>."
#: registration/models.py:486 #: registration/models.py:492
msgid "student registration" msgid "student registration"
msgstr "inscription d'élève" msgstr "inscription d'élève"
#: registration/models.py:487 #: registration/models.py:493
msgid "student registrations" msgid "student registrations"
msgstr "inscriptions d'élève" msgstr "inscriptions d'élève"
#: registration/models.py:498 #: registration/models.py:504
msgid "most recent degree in mathematics, computer science or physics" msgid "most recent degree in mathematics, computer science or physics"
msgstr "Dernier diplôme obtenu en mathématiques, informatique ou physique" msgstr "Dernier diplôme obtenu en mathématiques, informatique ou physique"
#: registration/models.py:499 #: registration/models.py:505
msgid "" msgid ""
"Your most recent degree in maths, computer science or physics, or your last " "Your most recent degree in maths, computer science or physics, or your last "
"entrance exam (CAPES, Agrégation,…)" "entrance exam (CAPES, Agrégation,…)"
@ -2661,23 +2665,23 @@ msgstr ""
"Votre dernier diplôme en mathématiques, informatique ou physique, ou votre " "Votre dernier diplôme en mathématiques, informatique ou physique, ou votre "
"dernier concours obtenu (CAPES, Agrégation, …)" "dernier concours obtenu (CAPES, Agrégation, …)"
#: registration/models.py:504 registration/models.py:526 #: registration/models.py:510 registration/models.py:532
msgid "professional activity" msgid "professional activity"
msgstr "activité professionnelle" msgstr "activité professionnelle"
#: registration/models.py:517 #: registration/models.py:523
msgid "coach registration" msgid "coach registration"
msgstr "inscription d'encadrant⋅e" msgstr "inscription d'encadrant⋅e"
#: registration/models.py:518 #: registration/models.py:524
msgid "coach registrations" msgid "coach registrations"
msgstr "inscriptions d'encadrant⋅es" msgstr "inscriptions d'encadrant⋅es"
#: registration/models.py:530 #: registration/models.py:536
msgid "administrator" msgid "administrator"
msgstr "administrateur⋅rice" msgstr "administrateur⋅rice"
#: registration/models.py:531 #: registration/models.py:537
msgid "" msgid ""
"An administrator has all rights. Please don't give this right to all juries " "An administrator has all rights. Please don't give this right to all juries "
"and volunteers." "and volunteers."
@ -2685,15 +2689,15 @@ msgstr ""
"Un⋅e administrateur⋅rice a tous les droits. Merci de ne pas donner ce droit " "Un⋅e administrateur⋅rice a tous les droits. Merci de ne pas donner ce droit "
"à toustes les juré⋅es et bénévoles." "à toustes les juré⋅es et bénévoles."
#: registration/models.py:541 #: registration/models.py:547
msgid "admin" msgid "admin"
msgstr "admin" msgstr "admin"
#: registration/models.py:541 #: registration/models.py:547
msgid "volunteer" msgid "volunteer"
msgstr "bénévole" msgstr "bénévole"
#: registration/models.py:554 #: registration/models.py:560
msgid "" msgid ""
"Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:" "Registrations for tournament {tournament} are closing on {date:%Y-%m-%d %H:"
"%M}. There are for now {validated_teams} validated teams (+ {pending_teams} " "%M}. There are for now {validated_teams} validated teams (+ {pending_teams} "
@ -2703,11 +2707,11 @@ msgstr ""
"%M}. Il y a pour l'instant {validated_teams} équipes validées (+ " "%M}. Il y a pour l'instant {validated_teams} équipes validées (+ "
"{pending_teams} en attente) sur {max_teams} attendues." "{pending_teams} en attente) sur {max_teams} attendues."
#: registration/models.py:562 #: registration/models.py:568
msgid "Registrations" msgid "Registrations"
msgstr "Inscriptions" msgstr "Inscriptions"
#: registration/models.py:569 #: registration/models.py:575
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} requested to be validated for the tournament of " "The team {trigram} requested to be validated for the tournament of "
@ -2718,7 +2722,7 @@ msgstr ""
"Vous pouvez vérifier le statut de l'équipe sur la <a href=\"{url}\">page de " "Vous pouvez vérifier le statut de l'équipe sur la <a href=\"{url}\">page de "
"l'équipe</a>." "l'équipe</a>."
#: registration/models.py:586 #: registration/models.py:592
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"There are {valid} validated payments, {pending} pending and {invalid} " "There are {valid} validated payments, {pending} pending and {invalid} "
@ -2729,11 +2733,11 @@ msgstr ""
"invalides pour le tournoi {tournament}. Vous pouvez vérifier le statut des " "invalides pour le tournoi {tournament}. Vous pouvez vérifier le statut des "
"paiements sur la <a href=\"{url}\">liste des paiements</a>." "paiements sur la <a href=\"{url}\">liste des paiements</a>."
#: registration/models.py:593 #: registration/models.py:599
msgid "Payments" msgid "Payments"
msgstr "Paiements" msgstr "Paiements"
#: registration/models.py:617 registration/models.py:628 #: registration/models.py:623 registration/models.py:634
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"<p>You are in the jury of the pool {pool} for the tournament of " "<p>You are in the jury of the pool {pool} for the tournament of "
@ -2742,7 +2746,7 @@ msgstr ""
"<p>Vous êtes dans le jury de la poule {pool} pour le tournoi {tournament}. " "<p>Vous êtes dans le jury de la poule {pool} pour le tournoi {tournament}. "
"Vous pouvez trouver la page de la poule <a href='{pool_url}'>ici</a>.</p>" "Vous pouvez trouver la page de la poule <a href='{pool_url}'>ici</a>.</p>"
#: registration/models.py:641 #: registration/models.py:647
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"<p>You don't have given any note as a jury for the passage {passage} in the " "<p>You don't have given any note as a jury for the passage {passage} in the "
@ -2753,15 +2757,15 @@ msgstr ""
"{passage} dans la poule {pool} de {tournament}. Vous pouvez donner vos notes " "{passage} dans la poule {pool} de {tournament}. Vous pouvez donner vos notes "
"<a href='{passage_url}'>ici</a>.</p>" "<a href='{passage_url}'>ici</a>.</p>"
#: registration/models.py:657 #: registration/models.py:663
msgid "volunteer registration" msgid "volunteer registration"
msgstr "inscription de bénévole" msgstr "inscription de bénévole"
#: registration/models.py:658 #: registration/models.py:664
msgid "volunteer registrations" msgid "volunteer registrations"
msgstr "inscriptions de bénévoles" msgstr "inscriptions de bénévoles"
#: registration/models.py:679 #: registration/models.py:685
msgid "" msgid ""
"If set to true, then one payment is made for the full team, for example if " "If set to true, then one payment is made for the full team, for example if "
"the school pays for all." "the school pays for all."
@ -2769,100 +2773,100 @@ msgstr ""
"Si vrai, alors un seul paiement est fait pour toute l'équipe, par exemple si " "Si vrai, alors un seul paiement est fait pour toute l'équipe, par exemple si "
"le lycée paie pour tout le monde." "le lycée paie pour tout le monde."
#: registration/models.py:684 #: registration/models.py:690
msgid "total amount" msgid "total amount"
msgstr "montant total" msgstr "montant total"
#: registration/models.py:685 #: registration/models.py:691
msgid "Corresponds to the total required amount to pay, in euros." msgid "Corresponds to the total required amount to pay, in euros."
msgstr "Correspond au montant total à payer, en euros." msgstr "Correspond au montant total à payer, en euros."
#: registration/models.py:690 #: registration/models.py:696
msgid "token" msgid "token"
msgstr "jeton" msgstr "jeton"
#: registration/models.py:693 #: registration/models.py:699
msgid "A token to authorize external users to make this payment." msgid "A token to authorize external users to make this payment."
msgstr "Un jeton pour autoriser des utilisateurs externes à faire ce paiement." msgstr "Un jeton pour autoriser des utilisateurs externes à faire ce paiement."
#: registration/models.py:697 #: registration/models.py:703
msgid "for final tournament" msgid "for final tournament"
msgstr "pour la finale" msgstr "pour la finale"
#: registration/models.py:702 #: registration/models.py:708
msgid "type" msgid "type"
msgstr "type" msgstr "type"
#: registration/models.py:705 #: registration/models.py:711
msgid "No payment" msgid "No payment"
msgstr "Pas de paiement" msgstr "Pas de paiement"
#: registration/models.py:706 #: registration/models.py:712
#: registration/templates/registration/payment_form.html:72 #: registration/templates/registration/payment_form.html:72
msgid "Credit card" msgid "Credit card"
msgstr "Carte bancaire" msgstr "Carte bancaire"
#: registration/models.py:707 #: registration/models.py:713
msgid "Scholarship" msgid "Scholarship"
msgstr "Notification de bourse" msgstr "Notification de bourse"
#: registration/models.py:708 #: registration/models.py:714
#: registration/templates/registration/payment_form.html:77 #: registration/templates/registration/payment_form.html:77
msgid "Bank transfer" msgid "Bank transfer"
msgstr "Virement bancaire" msgstr "Virement bancaire"
#: registration/models.py:709 #: registration/models.py:715
msgid "Other (please indicate)" msgid "Other (please indicate)"
msgstr "Autre (veuillez spécifier)" msgstr "Autre (veuillez spécifier)"
#: registration/models.py:710 #: registration/models.py:716
msgid "The tournament is free" msgid "The tournament is free"
msgstr "Le tournoi est gratuit" msgstr "Le tournoi est gratuit"
#: registration/models.py:717 #: registration/models.py:723
msgid "Hello Asso checkout intent ID" msgid "Hello Asso checkout intent ID"
msgstr "ID de l'intention de paiement Hello Asso" msgstr "ID de l'intention de paiement Hello Asso"
#: registration/models.py:724 #: registration/models.py:730
msgid "receipt" msgid "receipt"
msgstr "justificatif" msgstr "justificatif"
#: registration/models.py:725 #: registration/models.py:731
msgid "only if you have a scholarship or if you chose a bank transfer." msgid "only if you have a scholarship or if you chose a bank transfer."
msgstr "" msgstr ""
"Nécessaire seulement si vous déclarez être boursièr⋅e ou si vous payez par " "Nécessaire seulement si vous déclarez être boursièr⋅e ou si vous payez par "
"virement bancaire." "virement bancaire."
#: registration/models.py:732 #: registration/models.py:738
msgid "additional information" msgid "additional information"
msgstr "informations additionnelles" msgstr "informations additionnelles"
#: registration/models.py:733 #: registration/models.py:739
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."
#: registration/models.py:739 #: registration/models.py:745
msgid "payment valid" msgid "payment valid"
msgstr "paiement valide" msgstr "paiement valide"
#: registration/models.py:799 #: registration/models.py:805
msgid "Reminder for your payment" msgid "Reminder for your payment"
msgstr "Rappel pour votre paiement" msgstr "Rappel pour votre paiement"
#: registration/models.py:810 #: registration/models.py:816
msgid "Payment confirmation" msgid "Payment confirmation"
msgstr "Confirmation de paiement" msgstr "Confirmation de paiement"
#: registration/models.py:832 #: registration/models.py:838
#, python-brace-format #, python-brace-format
msgid "Payment of {registrations}" msgid "Payment of {registrations}"
msgstr "Paiements de {registrations}" msgstr "Paiements de {registrations}"
#: registration/models.py:835 #: registration/models.py:841
msgid "payment" msgid "payment"
msgstr "paiement" msgstr "paiement"
#: registration/models.py:836 #: registration/models.py:842
msgid "payments" msgid "payments"
msgstr "paiements" msgstr "paiements"

View File

@ -0,0 +1,31 @@
# Generated by Django 5.0.6 on 2024-06-07 12:46
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("participation", "0013_alter_pool_options_pool_room"),
]
operations = [
migrations.AlterField(
model_name="team",
name="trigram",
field=models.CharField(
help_text="The code must be composed of 3 uppercase letters.",
max_length=3,
unique=True,
validators=[
django.core.validators.RegexValidator("^[A-Z]{3}$"),
django.core.validators.RegexValidator(
"^(?!BIT$|CNO$|CRO$|CUL$|FTG$|FCK$|FUC$|FUK$|FYS$|HIV$|IST$|MST$|KKK$|KYS$|SEX$)",
message="This team code is forbidden.",
),
],
verbose_name="code",
),
),
]

View File

@ -43,9 +43,9 @@ class Team(models.Model):
nb_letters=settings.TEAM_CODE_LENGTH), nb_letters=settings.TEAM_CODE_LENGTH),
unique=True, unique=True,
validators=[ validators=[
RegexValidator(fr"^[A-Z]{{f'{settings.TEAM_CODE_LENGTH}'}}$"), RegexValidator("^[A-Z]{" + str(settings.TEAM_CODE_LENGTH) + "}$"),
RegexValidator(fr"^(?!{'|'.join(f'{t}$' for t in settings.FORBIDDEN_TRIGRAMS)})", RegexValidator(fr"^(?!{'|'.join(f'{t}$' for t in settings.FORBIDDEN_TRIGRAMS)})",
message=_("This trigram is forbidden.")), message=_("This team code is forbidden.")),
], ],
) )

View File

@ -711,6 +711,7 @@ class TournamentExportCSVView(VolunteerMixin, DetailView):
'Adresse': registration.address, 'Adresse': registration.address,
'Code postal': registration.zip_code, 'Code postal': registration.zip_code,
'Ville': registration.city, 'Ville': registration.city,
'Pays': registration.country,
'Téléphone': registration.phone_number, 'Téléphone': registration.phone_number,
'Classe': registration.get_student_class_display() if registration.is_student 'Classe': registration.get_student_class_display() if registration.is_student
else registration.last_degree, else registration.last_degree,

View File

@ -106,9 +106,10 @@ class StudentRegistrationForm(forms.ModelForm):
class Meta: class Meta:
model = StudentRegistration model = StudentRegistration
fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'zip_code', 'city', 'phone_number', fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'zip_code', 'city', 'country',
'school', 'health_issues', 'housing_constraints', 'responsible_name', 'responsible_phone', 'phone_number', 'school', 'health_issues', 'housing_constraints',
'responsible_email', 'give_contact_to_animath', 'email_confirmed',) 'responsible_name', 'responsible_phone', 'responsible_email', 'give_contact_to_animath',
'email_confirmed',)
class PhotoAuthorizationForm(forms.ModelForm): class PhotoAuthorizationForm(forms.ModelForm):
@ -249,7 +250,7 @@ class CoachRegistrationForm(forms.ModelForm):
""" """
class Meta: class Meta:
model = CoachRegistration model = CoachRegistration
fields = ('team', 'gender', 'address', 'zip_code', 'city', 'phone_number', fields = ('team', 'gender', 'address', 'zip_code', 'city', 'country', 'phone_number',
'last_degree', 'professional_activity', 'health_issues', 'housing_constraints', 'last_degree', 'professional_activity', 'health_issues', 'housing_constraints',
'give_contact_to_animath', 'email_confirmed',) 'give_contact_to_animath', 'email_confirmed',)

View File

@ -0,0 +1,23 @@
# Generated by Django 5.0.6 on 2024-06-07 12:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
(
"registration",
"0013_participantregistration_photo_authorization_final_and_more",
),
]
operations = [
migrations.AddField(
model_name="participantregistration",
name="country",
field=models.CharField(
default="France", max_length=255, verbose_name="country"
),
),
]

View File

@ -183,6 +183,12 @@ class ParticipantRegistration(Registration):
verbose_name=_("city"), verbose_name=_("city"),
) )
country = models.CharField(
max_length=255,
verbose_name=_("country"),
default="France",
)
phone_number = PhoneNumberField( phone_number = PhoneNumberField(
verbose_name=_("phone number"), verbose_name=_("phone number"),
blank=True, blank=True,

View File

@ -48,7 +48,10 @@
<dd class="col-sm-6">{{ user_object.registration.get_gender_display }}</dd> <dd class="col-sm-6">{{ user_object.registration.get_gender_display }}</dd>
<dt class="col-sm-6 text-sm-end">{% trans "Address:" %}</dt> <dt class="col-sm-6 text-sm-end">{% trans "Address:" %}</dt>
<dd class="col-sm-6">{{ user_object.registration.address }}, {{ user_object.registration.zip_code|stringformat:'05d' }} {{ user_object.registration.city }}</dd> <dd class="col-sm-6">
{{ user_object.registration.address }},
{{ user_object.registration.zip_code|stringformat:'05d' }} {{ user_object.registration.city }} ({{ user_object.registration.country }})
</dd>
<dt class="col-sm-6 text-sm-end">{% trans "Phone number:" %}</dt> <dt class="col-sm-6 text-sm-end">{% 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>