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

View File

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

View File

@ -106,9 +106,10 @@ class StudentRegistrationForm(forms.ModelForm):
class Meta:
model = StudentRegistration
fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'zip_code', 'city', 'phone_number',
'school', 'health_issues', 'housing_constraints', 'responsible_name', 'responsible_phone',
'responsible_email', 'give_contact_to_animath', 'email_confirmed',)
fields = ('team', 'student_class', 'birth_date', 'gender', 'address', 'zip_code', 'city', 'country',
'phone_number', 'school', 'health_issues', 'housing_constraints',
'responsible_name', 'responsible_phone', 'responsible_email', 'give_contact_to_animath',
'email_confirmed',)
class PhotoAuthorizationForm(forms.ModelForm):
@ -249,7 +250,7 @@ class CoachRegistrationForm(forms.ModelForm):
"""
class Meta:
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',
'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"),
)
country = models.CharField(
max_length=255,
verbose_name=_("country"),
default="France",
)
phone_number = PhoneNumberField(
verbose_name=_("phone number"),
blank=True,

View File

@ -48,7 +48,10 @@
<dd class="col-sm-6">{{ user_object.registration.get_gender_display }}</dd>
<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>
<dd class="col-sm-6">{{ user_object.registration.phone_number }}</dd>