From 85b3da09f6b380f5ddd585142490dbd5026f587b Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Fri, 7 Jun 2024 14:52:09 +0200 Subject: [PATCH] Add country field in registration Signed-off-by: Emmy D'Anello --- draw/migrations/0004_alter_round_number.py | 27 ++ locale/fr/LC_MESSAGES/django.po | 294 +++++++++--------- .../migrations/0014_alter_team_trigram.py | 31 ++ participation/models.py | 4 +- participation/views.py | 1 + registration/forms.py | 9 +- .../0014_participantregistration_country.py | 23 ++ registration/models.py | 6 + .../templates/registration/user_detail.html | 5 +- 9 files changed, 248 insertions(+), 152 deletions(-) create mode 100644 draw/migrations/0004_alter_round_number.py create mode 100644 participation/migrations/0014_alter_team_trigram.py create mode 100644 registration/migrations/0014_participantregistration_country.py diff --git a/draw/migrations/0004_alter_round_number.py b/draw/migrations/0004_alter_round_number.py new file mode 100644 index 0000000..053c537 --- /dev/null +++ b/draw/migrations/0004_alter_round_number.py @@ -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", + ), + ), + ] diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index e18817e..2f08fb6 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: 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 \n" "Language-Team: LANGUAGE \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.

Vous pouvez envoyer vos solutions sur votre " "page de participation.

" -#: participation/models.py:814 registration/models.py:600 +#: participation/models.py:814 registration/models.py:606 msgid "" "

The draw of the solutions for the tournament {tournament} is planned on " "the {date:%Y-%m-%d %H:%M}. You can join it on this link." @@ -1110,7 +1110,7 @@ msgstr "" "{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur ce lien.

" -#: 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}. Vous pouvez envoyer votre note " "de synthèse sur cette page.

" -#: 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 "" "

Pour le second tour, vous défendrez votre " "solution du problème {problem}.

" -#: 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 create one or ou rejoindre une équipe existante 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 ce lien." -#: 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 ce lien." -#: 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 ce lien." -#: 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 ce lien." -#: 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 ce lien." -#: 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 la page de paiement." -#: 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 ce lien." -#: 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 page de " "l'équipe." -#: 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 liste des paiements." -#: 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 "" "

You are in the jury of the pool {pool} for the tournament of " @@ -2742,7 +2746,7 @@ msgstr "" "

Vous êtes dans le jury de la poule {pool} pour le tournoi {tournament}. " "Vous pouvez trouver la page de la poule ici.

" -#: registration/models.py:641 +#: registration/models.py:647 #, python-brace-format msgid "" "

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 " "ici.

" -#: 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" diff --git a/participation/migrations/0014_alter_team_trigram.py b/participation/migrations/0014_alter_team_trigram.py new file mode 100644 index 0000000..bf105fb --- /dev/null +++ b/participation/migrations/0014_alter_team_trigram.py @@ -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", + ), + ), + ] diff --git a/participation/models.py b/participation/models.py index b592589..66a39c2 100644 --- a/participation/models.py +++ b/participation/models.py @@ -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.")), ], ) diff --git a/participation/views.py b/participation/views.py index 88509d5..8834e2d 100644 --- a/participation/views.py +++ b/participation/views.py @@ -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, diff --git a/registration/forms.py b/registration/forms.py index 1ed5f95..053b2e2 100644 --- a/registration/forms.py +++ b/registration/forms.py @@ -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',) diff --git a/registration/migrations/0014_participantregistration_country.py b/registration/migrations/0014_participantregistration_country.py new file mode 100644 index 0000000..5585d22 --- /dev/null +++ b/registration/migrations/0014_participantregistration_country.py @@ -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" + ), + ), + ] diff --git a/registration/models.py b/registration/models.py index dbef800..be960ea 100644 --- a/registration/models.py +++ b/registration/models.py @@ -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, diff --git a/registration/templates/registration/user_detail.html b/registration/templates/registration/user_detail.html index 9c019ff..a09e6c8 100644 --- a/registration/templates/registration/user_detail.html +++ b/registration/templates/registration/user_detail.html @@ -48,7 +48,10 @@
{{ user_object.registration.get_gender_display }}
{% trans "Address:" %}
-
{{ user_object.registration.address }}, {{ user_object.registration.zip_code|stringformat:'05d' }} {{ user_object.registration.city }}
+
+ {{ user_object.registration.address }}, + {{ user_object.registration.zip_code|stringformat:'05d' }} {{ user_object.registration.city }} ({{ user_object.registration.country }}) +
{% trans "Phone number:" %}
{{ user_object.registration.phone_number }}