From ec85f62ab66f0d8bd7e7a43ad902c53d3f8c1810 Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Tue, 14 Jan 2025 19:32:05 +0100 Subject: [PATCH] =?UTF-8?q?Add=20unified=20registration=20for=20=C3=8Ele-d?= =?UTF-8?q?e-France?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locale/fr/LC_MESSAGES/django.po | 561 ++++++++++-------- participation/forms.py | 27 +- .../0023_tournament_unified_registration.py | 21 + participation/models.py | 5 + .../templates/participation/update_team.html | 26 +- tfjm/templates/index_tfjm.html | 9 + 6 files changed, 401 insertions(+), 248 deletions(-) create mode 100644 participation/migrations/0023_tournament_unified_registration.py diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index e4f83f3..25d74ed 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-10-28 20:14+0100\n" +"POT-Creation-Date: 2025-01-14 19:29+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Emmy D'Anello \n" "Language-Team: LANGUAGE \n" @@ -78,8 +78,8 @@ msgstr "Type de permission nécessaire pour écrire un message dans un canal." #: chat/models.py:62 draw/admin.py:53 draw/admin.py:71 draw/admin.py:88 #: draw/models.py:27 participation/admin.py:79 participation/admin.py:144 -#: participation/admin.py:176 participation/models.py:783 -#: participation/models.py:807 participation/models.py:1131 +#: participation/admin.py:176 participation/models.py:788 +#: participation/models.py:812 participation/models.py:1136 #: registration/models.py:763 #: registration/templates/registration/payment_form.html:53 msgid "tournament" @@ -95,7 +95,7 @@ msgstr "" #: chat/models.py:73 draw/models.py:446 draw/models.py:473 #: participation/admin.py:140 participation/admin.py:160 -#: participation/models.py:1666 participation/models.py:1675 +#: participation/models.py:1671 participation/models.py:1680 #: participation/tables.py:84 msgid "pool" msgstr "poule" @@ -109,7 +109,7 @@ msgstr "" #: chat/models.py:84 draw/templates/draw/tournament_content.html:277 #: participation/admin.py:172 participation/models.py:261 -#: participation/models.py:798 +#: participation/models.py:803 #: participation/templates/participation/tournament_harmonize.html:15 #: registration/models.py:158 registration/models.py:754 #: registration/tables.py:39 @@ -265,7 +265,7 @@ msgid "teams" msgstr "équipes" #: draw/admin.py:92 draw/models.py:245 draw/models.py:465 -#: participation/models.py:1135 +#: participation/models.py:1140 msgid "round" msgstr "tour" @@ -644,7 +644,7 @@ msgstr "Le numéro du tour doit être entre 1 et {nb}." msgid "rounds" msgstr "tours" -#: draw/models.py:268 participation/models.py:1143 +#: draw/models.py:268 participation/models.py:1148 msgid "letter" msgstr "lettre" @@ -682,12 +682,12 @@ msgstr "L'instance complète de la poule." msgid "Pool {letter}{number}" msgstr "Poule {letter}{number}" -#: draw/models.py:447 participation/models.py:1667 +#: draw/models.py:447 participation/models.py:1672 msgid "pools" msgstr "poules" -#: draw/models.py:459 participation/models.py:1121 participation/models.py:1886 -#: participation/models.py:1920 participation/models.py:1962 +#: draw/models.py:459 participation/models.py:1126 participation/models.py:1891 +#: participation/models.py:1925 participation/models.py:1967 msgid "participation" msgstr "participation" @@ -711,8 +711,8 @@ msgid "" msgstr "" "L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1." -#: draw/models.py:496 draw/models.py:519 participation/models.py:1252 -#: participation/models.py:1689 participation/models.py:1927 +#: draw/models.py:496 draw/models.py:519 participation/models.py:1257 +#: participation/models.py:1694 participation/models.py:1932 #: participation/views.py:1492 participation/views.py:1757 #, python-brace-format msgid "Problem #{problem}" @@ -985,31 +985,31 @@ msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}" msgid "valid" msgstr "valide" -#: participation/admin.py:87 participation/models.py:819 +#: participation/admin.py:87 participation/models.py:824 msgid "selected for final" msgstr "sélectionnée pour la finale" #: participation/admin.py:124 participation/admin.py:188 -#: participation/models.py:1696 participation/tables.py:114 +#: participation/models.py:1701 participation/tables.py:114 msgid "reporter" msgstr "défenseur⋅se" -#: participation/admin.py:128 participation/models.py:1703 -#: participation/models.py:1974 +#: participation/admin.py:128 participation/models.py:1708 +#: participation/models.py:1979 msgid "opponent" msgstr "opposant⋅e" -#: participation/admin.py:132 participation/models.py:1710 -#: participation/models.py:1975 +#: participation/admin.py:132 participation/models.py:1715 +#: participation/models.py:1980 msgid "reviewer" msgstr "rapporteur⋅rice" -#: participation/admin.py:136 participation/models.py:1717 -#: participation/models.py:1976 +#: participation/admin.py:136 participation/models.py:1722 +#: participation/models.py:1981 msgid "observer" msgstr "observateur⋅rice" -#: participation/admin.py:192 participation/models.py:1925 +#: participation/admin.py:192 participation/models.py:1930 msgid "problem" msgstr "numéro de problème" @@ -1033,7 +1033,25 @@ msgstr "Aucune équipe n'a été trouvée avec ce code d'accès." msgid "The team is already validated or the validation is pending." msgstr "La validation de l'équipe est déjà faite ou en cours." -#: participation/forms.py:94 participation/forms.py:367 +#: participation/forms.py:85 +msgid "IMPORTANT" +msgstr "IMPORTANT" + +#: participation/forms.py:86 +msgid "" +"For the tournaments in the region \"Île-de-France\": registration is\n" +"unified for each tournament. By choosing a tournament \"Île-de-France\",\n" +"you're accepting that your team may be selected for one of these " +"tournaments.\n" +"In case of date conflict, please write them in your motivation letter." +msgstr "" +"Pour les tournois franciliens : l'inscription est unifiée pour chacun des " +"tournois. En choisissant un tournoi « Île-de-France », vous acceptez que " +"votre équipe puisse être sélectionnée pour l'un des tournois concernés. En " +"cas de contraintes de date, merci de les indiquer dans votre lettre de " +"motivation." + +#: participation/forms.py:115 participation/forms.py:388 #: registration/forms.py:141 registration/forms.py:163 #: registration/forms.py:185 registration/forms.py:207 #: registration/forms.py:229 registration/forms.py:251 @@ -1041,7 +1059,7 @@ msgstr "La validation de l'équipe est déjà faite ou en cours." msgid "The uploaded file size must be under 2 Mo." msgstr "Le fichier envoyé doit peser moins de 2 Mo." -#: participation/forms.py:96 registration/forms.py:143 +#: participation/forms.py:117 registration/forms.py:143 #: registration/forms.py:165 registration/forms.py:187 #: registration/forms.py:209 registration/forms.py:231 #: registration/forms.py:253 registration/forms.py:312 @@ -1049,39 +1067,39 @@ msgstr "Le fichier envoyé doit peser moins de 2 Mo." msgid "The uploaded file must be a PDF, PNG of JPEG file." msgstr "Le fichier envoyé doit être au format PDF, PNG ou JPEG." -#: participation/forms.py:114 +#: participation/forms.py:135 msgid "I engage myself to participate to the whole tournament." msgstr "Je m'engage à participer à l'intégralité du tournoi." -#: participation/forms.py:129 +#: participation/forms.py:150 msgid "Message to address to the team:" msgstr "Message à adresser à l'équipe :" -#: participation/forms.py:176 +#: participation/forms.py:197 msgid "The uploaded file size must be under 5 Mo." msgstr "Le fichier envoyé doit peser moins de 5 Mo." -#: participation/forms.py:178 participation/forms.py:369 +#: participation/forms.py:199 participation/forms.py:390 msgid "The uploaded file must be a PDF file." msgstr "Le fichier envoyé doit être au format PDF." -#: participation/forms.py:182 +#: participation/forms.py:203 msgid "The PDF file must not have more than 30 pages." msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages." -#: participation/forms.py:236 +#: participation/forms.py:257 msgid "Add" msgstr "Ajouter" -#: participation/forms.py:251 +#: participation/forms.py:272 msgid "This user already exists, but is a participant." msgstr "Cet⋅te utilisateur⋅rice existe déjà, mais en tant que participant⋅e." -#: participation/forms.py:262 +#: participation/forms.py:283 msgid "Spreadsheet file:" msgstr "Fichier tableur :" -#: participation/forms.py:288 +#: participation/forms.py:309 msgid "" "This file contains non-UTF-8 and non-ISO-8859-1 content. Please send your " "sheet as a CSV file." @@ -1089,24 +1107,24 @@ msgstr "" "Ce fichier contient des éléments non-UTF-8 et non-ISO-8859-1. Merci " "d'envoyer votre tableur au format CSV." -#: participation/forms.py:328 +#: participation/forms.py:349 msgid "The following note is higher of the maximum expected value:" msgstr "La note suivante est supérieure au maximum attendu :" -#: participation/forms.py:334 +#: participation/forms.py:355 msgid "The following user was not found:" msgstr "L'utilisateur⋅rice suivant n'a pas été trouvé :" -#: participation/forms.py:350 +#: participation/forms.py:371 msgid "The reporter, the opponent and the reviewer must be different." msgstr "" "Les équipes défenseuse, opposante et rapportrice doivent être différent⋅es." -#: participation/forms.py:354 +#: participation/forms.py:375 msgid "This reporter did not work on this problem." msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème." -#: participation/forms.py:373 +#: participation/forms.py:394 msgid "The PDF file must not have more than 2 pages." msgstr "Le fichier PDF ne doit pas avoir plus de 2 pages." @@ -1274,189 +1292,204 @@ msgstr "début" msgid "end" msgstr "fin" -#: participation/models.py:288 +#: participation/models.py:287 +msgid "unified registration" +msgstr "inscription unifiée" + +#: participation/models.py:293 #: participation/templates/participation/tournament_detail.html:18 msgid "place" msgstr "lieu" -#: participation/models.py:292 +#: participation/models.py:297 msgid "max team count" msgstr "nombre maximal d'équipes" -#: participation/models.py:297 +#: participation/models.py:302 #: participation/templates/participation/tournament_detail.html:22 msgid "price" msgstr "prix" -#: participation/models.py:302 +#: participation/models.py:307 #: participation/templates/participation/tournament_detail.html:26 msgid "remote" msgstr "à distance" -#: participation/models.py:307 +#: participation/models.py:312 msgid "limit date for registrations" msgstr "date limite d'inscription" -#: participation/models.py:312 +#: participation/models.py:317 msgid "limit date to upload solutions" msgstr "date limite pour envoyer les solutions" -#: participation/models.py:317 +#: participation/models.py:322 msgid "random draw for solutions" msgstr "tirage au sort des solutions" -#: participation/models.py:322 +#: participation/models.py:327 msgid "first phase date" msgstr "date du premier tour" -#: participation/models.py:327 +#: participation/models.py:332 msgid "limit date to upload the written reviews for the first phase" msgstr "date limite pour envoyer les notes de synthèses pour la première phase" -#: participation/models.py:332 +#: participation/models.py:337 msgid "first second date" msgstr "date du second tour" -#: participation/models.py:337 +#: participation/models.py:342 msgid "check this case when solutions for the second round become available" msgstr "" "cocher la case lorsque les solutions pour le second tour sont accessibles" -#: participation/models.py:342 +#: participation/models.py:347 msgid "limit date to upload the written reviews for the second phase" msgstr "date limite d'envoi des notes de synthèse pour la seconde phase" -#: participation/models.py:347 +#: participation/models.py:352 msgid "third phase date" msgstr "date du troisième tour" -#: participation/models.py:352 +#: participation/models.py:357 msgid "check this case when solutions for the third round become available" msgstr "" "cocher la case lorsque les solutions pour le second tour sont accessibles" -#: participation/models.py:357 +#: participation/models.py:362 msgid "limit date to upload the written reviews for the third phase" msgstr "" "date limite pour envoyer les notes de synthèses pour la troisième phase" -#: participation/models.py:362 +#: participation/models.py:367 #: participation/templates/participation/tournament_detail.html:52 msgid "description" msgstr "description" -#: participation/models.py:368 +#: participation/models.py:373 #: participation/templates/participation/tournament_detail.html:12 msgid "organizers" msgstr "organisateur⋅rices" -#: participation/models.py:373 +#: participation/models.py:378 #: participation/templates/participation/team_detail.html:167 msgid "final" msgstr "finale" -#: participation/models.py:381 +#: participation/models.py:386 msgid "Google Sheet ID" msgstr "ID de la feuille Google Sheets" -#: participation/models.py:461 +#: participation/models.py:466 participation/views.py:1811 msgid "Notation sheet" msgstr "Feuille de notation" -#: participation/models.py:473 participation/models.py:474 -#: participation/models.py:476 participation/models.py:716 +#: participation/models.py:478 participation/models.py:479 +#: participation/models.py:481 participation/models.py:721 msgid "Final ranking" msgstr "Classement final" -#: participation/models.py:481 participation/models.py:553 -#: participation/models.py:1327 participation/views.py:1731 +#: participation/models.py:486 participation/models.py:558 +#: participation/models.py:1332 participation/views.py:1731 msgid "Team" msgstr "Équipe" -#: participation/models.py:481 +#: participation/models.py:486 msgid "Scores day 1" msgstr "Scores jour 1" -#: participation/models.py:481 +#: participation/models.py:486 msgid "Tweaks day 1" msgstr "Ajustements 1" -#: participation/models.py:482 +#: participation/models.py:487 msgid "Scores day 2" msgstr "Scores jour 2" -#: participation/models.py:482 +#: participation/models.py:487 msgid "Tweaks day 2" msgstr "Ajustements 2" -#: participation/models.py:483 +#: participation/models.py:488 msgid "Total D1 + D2" msgstr "Total J1 + J2" -#: participation/models.py:483 +#: participation/models.py:488 msgid "Scores day 3" msgstr "Scores jour 3" -#: participation/models.py:483 +#: participation/models.py:488 msgid "Tweaks day 3" msgstr "Ajustements 3" -#: participation/models.py:485 participation/models.py:1327 +#: participation/models.py:490 participation/models.py:1332 #: participation/views.py:1738 msgid "Total" msgstr "Total" -#: participation/models.py:485 participation/models.py:553 -#: participation/models.py:1327 +#: participation/models.py:490 participation/models.py:558 +#: participation/models.py:1332 #: participation/templates/participation/tournament_harmonize.html:14 #: participation/views.py:1741 msgid "Rank" msgstr "Rang" -#: participation/models.py:553 participation/models.py:718 +#: participation/models.py:507 participation/models.py:521 +#: participation/models.py:538 participation/models.py:1248 +#: participation/models.py:1249 participation/models.py:1252 +#: participation/models.py:1355 participation/models.py:1357 +#: participation/models.py:1359 participation/models.py:1366 +#: participation/models.py:1370 participation/models.py:1615 +#: participation/models.py:1637 participation/models.py:2101 +#: participation/views.py:1812 +msgid "Pool" +msgstr "Poule" + +#: participation/models.py:558 participation/models.py:723 msgid "Score" msgstr "Score" -#: participation/models.py:553 +#: participation/models.py:558 msgid "Mention" msgstr "Mention" -#: participation/models.py:698 participation/models.py:1596 +#: participation/models.py:703 participation/models.py:1601 msgid "Don't update the table structure for a better automated integration." msgstr "" "Ne pas mettre à jour la structure de la table pour une meilleure intégration " "automatisée." -#: participation/models.py:784 registration/admin.py:125 +#: participation/models.py:789 registration/admin.py:125 msgid "tournaments" msgstr "tournois" -#: participation/models.py:813 +#: participation/models.py:818 msgid "valid team" msgstr "équipe valide" -#: participation/models.py:814 +#: participation/models.py:819 msgid "The participation got the validation of the organizers." msgstr "La participation a été validée par les organisateur⋅rices." -#: participation/models.py:820 +#: participation/models.py:825 msgid "The team is selected for the final tournament." msgstr "L'équipe est sélectionnée pour la finale." -#: participation/models.py:824 +#: participation/models.py:829 msgid "mention" msgstr "mention" -#: participation/models.py:831 +#: participation/models.py:836 msgid "mention (final)" msgstr "Mention (pour la finale) :" -#: participation/models.py:841 +#: participation/models.py:846 #, python-brace-format msgid "Participation of the team {name} ({trigram})" msgstr "Participation de l'équipe {name} ({trigram})" -#: participation/models.py:848 +#: participation/models.py:853 #, python-brace-format msgid "" "

The team {trigram} has {nb_missing_payments} missing payments. Each " @@ -1469,11 +1502,11 @@ msgstr "" "notification de bourse) pour participer au tournoi.

Les participant⋅es " "qui n'ont pas encore payé sont : {participants}.

" -#: participation/models.py:856 +#: participation/models.py:861 msgid "Missing payments" msgstr "Paiements manquants" -#: participation/models.py:873 +#: participation/models.py:878 msgid "" "

The solutions for the tournament of {tournament} are due on the {date:%Y-" "%m-%d %H:%M}.

You have currently sent {nb_solutions} " @@ -1488,11 +1521,11 @@ msgstr "" "pouvez envoyer vos solutions sur votre page de " "participation.

" -#: participation/models.py:883 participation/models.py:897 +#: participation/models.py:888 participation/models.py:902 msgid "Solutions due" msgstr "Rendu des solutions" -#: participation/models.py:889 +#: participation/models.py:894 msgid "" "

The solutions for the tournament of {tournament} are due on the {date:%Y-" "%m-%d %H:%M}.

Remember that you can only fix minor changes to your " @@ -1505,7 +1538,7 @@ msgstr "" "parties.

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

" -#: participation/models.py:903 registration/models.py:607 +#: participation/models.py:908 registration/models.py:607 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." @@ -1515,11 +1548,11 @@ msgstr "" "{date:%d/%m/%Y %H:%M}. Vous pouvez y participer sur ce lien.

" -#: participation/models.py:909 registration/models.py:614 +#: participation/models.py:914 registration/models.py:614 msgid "Draw of solutions" msgstr "Tirage au sort des solutions" -#: participation/models.py:921 +#: participation/models.py:926 #, python-brace-format msgid "" "

The solutions draw is ended. You can check the result on votre solution du problème " "{problem}.

" -#: participation/models.py:930 participation/models.py:993 -#: participation/models.py:1057 +#: participation/models.py:935 participation/models.py:998 +#: participation/models.py:1062 #, python-brace-format msgid "" "

You will oppose the solution of the team {opponent} on the problème {problem}. Vous pouvez envoyer votre note " "de synthèse sur cette page.

" -#: participation/models.py:939 participation/models.py:1002 -#: participation/models.py:1066 +#: participation/models.py:944 participation/models.py:1007 +#: participation/models.py:1071 #, python-brace-format msgid "" "

You will report the solution of the team {reviewer} on the problème {problem}. Vous pouvez envoyer votre note " "de synthèse sur cette page.

" -#: participation/models.py:949 participation/models.py:1012 -#: participation/models.py:1076 +#: participation/models.py:954 participation/models.py:1017 +#: participation/models.py:1081 #, python-brace-format msgid "" "

You will observe the solution of the team {observer} on the problème {problem}. Vous pouvez envoyer votre note " "de synthèse sur cette page.

" -#: participation/models.py:969 participation/models.py:1032 -#: participation/models.py:1096 +#: participation/models.py:974 participation/models.py:1037 +#: participation/models.py:1101 #: participation/templates/participation/upload_written_review.html:9 msgid "Templates:" msgstr "Modèles :" -#: participation/models.py:974 registration/models.py:629 +#: participation/models.py:979 registration/models.py:629 msgid "First round" msgstr "Premier tour" -#: participation/models.py:986 +#: participation/models.py:991 #, python-brace-format msgid "" "

For the second round, you will present your " @@ -1586,12 +1619,12 @@ msgstr "" "

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

" -#: participation/models.py:1037 participation/models.py:1101 +#: participation/models.py:1042 participation/models.py:1106 #: registration/models.py:640 msgid "Second round" msgstr "Second tour" -#: participation/models.py:1050 +#: participation/models.py:1055 #, python-brace-format msgid "" "

For the third round, you will present your " @@ -1600,7 +1633,7 @@ msgstr "" "

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

" -#: participation/models.py:1107 +#: participation/models.py:1112 #, python-brace-format msgid "" "

The tournament {tournament} is ended. You can check the results on the Le tournoi {tournament} est terminé. Vous pouvez consulter les résultats " "sur la page du tournoi.

" -#: participation/models.py:1112 +#: participation/models.py:1117 msgid "Tournament ended" msgstr "Tournoi terminé" -#: participation/models.py:1122 participation/models.py:1165 +#: participation/models.py:1127 participation/models.py:1170 msgid "participations" msgstr "participations" -#: participation/models.py:1137 participation/models.py:1138 -#: participation/models.py:1139 +#: participation/models.py:1142 participation/models.py:1143 +#: participation/models.py:1144 #, python-brace-format msgid "Round {round}" msgstr "Tour {round}" -#: participation/models.py:1153 +#: participation/models.py:1158 msgid "room" msgstr "salle" -#: participation/models.py:1155 +#: participation/models.py:1160 msgid "Room 1" msgstr "Salle 1" -#: participation/models.py:1156 +#: participation/models.py:1161 msgid "Room 2" msgstr "Salle 2" -#: participation/models.py:1159 +#: participation/models.py:1164 msgid "For 5-teams pools only" msgstr "Pour les poules de 5 équipe uniquement" -#: participation/models.py:1171 +#: participation/models.py:1176 msgid "juries" msgstr "jurys" -#: participation/models.py:1180 +#: participation/models.py:1185 msgid "president of the jury" msgstr "président⋅e du jury" -#: participation/models.py:1187 +#: participation/models.py:1192 msgid "BigBlueButton URL" msgstr "Lien BigBlueButton" -#: participation/models.py:1188 +#: participation/models.py:1193 msgid "The link of the BBB visio for this pool." msgstr "Le lien du salon BBB pour cette poule." -#: participation/models.py:1193 +#: participation/models.py:1198 msgid "results available" msgstr "résultats disponibles" -#: participation/models.py:1194 +#: participation/models.py:1199 msgid "" "Check this case when results become accessible to teams. They stay " "accessible to you. Only averages are given." @@ -1668,91 +1701,95 @@ msgstr "" "Ils restent toujours accessibles pour vous. Seules les moyennes sont " "communiquées." -#: participation/models.py:1226 +#: participation/models.py:1231 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:1253 participation/models.py:1327 +#: participation/models.py:1258 participation/models.py:1332 #: participation/views.py:1486 participation/views.py:1735 msgid "Problem" msgstr "Problème" -#: participation/models.py:1254 participation/views.py:1507 +#: participation/models.py:1259 participation/views.py:1507 msgid "Reporter" msgstr "Défenseur⋅se" -#: participation/models.py:1255 participation/views.py:1513 +#: participation/models.py:1260 participation/views.py:1513 msgid "Opponent" msgstr "Opposant⋅e" -#: participation/models.py:1256 participation/views.py:1520 +#: participation/models.py:1261 participation/views.py:1520 msgid "Reviewer" msgstr "Rapporteur⋅rice" -#: participation/models.py:1257 participation/views.py:1527 +#: participation/models.py:1262 participation/views.py:1527 msgid "Observer" msgstr "Observateur⋅rice" -#: participation/models.py:1258 participation/views.py:1501 +#: participation/models.py:1263 participation/views.py:1501 msgid "Role" msgstr "Rôle" -#: participation/models.py:1259 participation/models.py:1261 -#: participation/models.py:1262 +#: participation/models.py:1264 participation/models.py:1266 +#: participation/models.py:1267 participation/views.py:1543 +#: participation/views.py:1551 participation/views.py:1559 +#: participation/views.py:1569 msgid "Writing" msgstr "Écrit" -#: participation/models.py:1260 participation/models.py:1261 -#: participation/models.py:1262 +#: participation/models.py:1265 participation/models.py:1266 +#: participation/models.py:1267 participation/views.py:1547 +#: participation/views.py:1555 participation/views.py:1564 +#: participation/views.py:1573 msgid "Oral" msgstr "Oral" -#: participation/models.py:1263 participation/views.py:1535 +#: participation/models.py:1268 participation/views.py:1535 #: participation/views.py:1536 msgid "Juree" msgstr "Juré⋅e" -#: participation/models.py:1286 participation/models.py:1612 -#: participation/models.py:1634 participation/views.py:1605 +#: participation/models.py:1291 participation/models.py:1617 +#: participation/models.py:1639 participation/views.py:1605 msgid "Average" msgstr "Moyenne" -#: participation/models.py:1292 participation/views.py:1624 +#: participation/models.py:1297 participation/views.py:1624 msgid "Coefficient" msgstr "Coefficien" -#: participation/models.py:1293 participation/views.py:1667 +#: participation/models.py:1298 participation/views.py:1667 msgid "Subtotal" msgstr "Sous-total" -#: participation/models.py:1559 +#: participation/models.py:1564 #, python-brace-format msgid "Input must be a valid integer between {min_note} and {max_note}." msgstr "L'entrée doit être un entier valide entre {min_note} et {max_note}." -#: participation/models.py:1647 +#: participation/models.py:1652 #, 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:1660 +#: participation/models.py:1665 #, 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:1680 +#: participation/models.py:1685 msgid "position" msgstr "position" -#: participation/models.py:1687 +#: participation/models.py:1692 msgid "reported solution" msgstr "solution défendue" -#: participation/models.py:1725 +#: participation/models.py:1730 msgid "penalties" msgstr "pénalités" -#: participation/models.py:1727 +#: participation/models.py:1732 msgid "" "Number of penalties for the reporter. The reporter will loose a 0.5 " "coefficient per penalty." @@ -1760,128 +1797,128 @@ 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:1853 participation/models.py:1856 -#: participation/models.py:1859 participation/models.py:1862 +#: participation/models.py:1858 participation/models.py:1861 +#: participation/models.py:1864 participation/models.py:1867 #, 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:1867 +#: participation/models.py:1872 #, python-brace-format msgid "Passage of {reporter} for problem {problem}" msgstr "Passage de {reporter} pour le problème {problem}" -#: participation/models.py:1871 participation/models.py:1880 -#: participation/models.py:1969 participation/models.py:2012 +#: participation/models.py:1876 participation/models.py:1885 +#: participation/models.py:1974 participation/models.py:2017 msgid "passage" msgstr "passage" -#: participation/models.py:1872 +#: participation/models.py:1877 msgid "passages" msgstr "passages" -#: participation/models.py:1891 +#: participation/models.py:1896 msgid "difference" msgstr "différence" -#: participation/models.py:1892 +#: participation/models.py:1897 msgid "Score to add/remove on the final score" msgstr "Score à ajouter/retrancher au score final" -#: participation/models.py:1899 +#: participation/models.py:1904 msgid "tweak" msgstr "harmonisation" -#: participation/models.py:1900 +#: participation/models.py:1905 msgid "tweaks" msgstr "harmonisations" -#: participation/models.py:1932 +#: participation/models.py:1937 msgid "solution for the final tournament" msgstr "solution pour la finale" -#: participation/models.py:1937 participation/models.py:1981 +#: participation/models.py:1942 participation/models.py:1986 msgid "file" msgstr "fichier" -#: participation/models.py:1947 +#: participation/models.py:1952 #, 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:1949 +#: participation/models.py:1954 msgid "for final" msgstr "pour la finale" -#: participation/models.py:1952 +#: participation/models.py:1957 msgid "solution" msgstr "solution" -#: participation/models.py:1953 +#: participation/models.py:1958 msgid "solutions" msgstr "solutions" -#: participation/models.py:1987 +#: participation/models.py:1992 #, python-brace-format msgid "Written review of {team} as {type} for problem {problem} of {reporter}" msgstr "" "Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "{problem} de {reporter}" -#: participation/models.py:1995 +#: participation/models.py:2000 msgid "written review" msgstr "note de synthèse" -#: participation/models.py:1996 +#: participation/models.py:2001 msgid "written reviews" msgstr "notes de synthèse" -#: participation/models.py:2005 +#: participation/models.py:2010 msgid "jury" msgstr "jury" -#: participation/models.py:2017 +#: participation/models.py:2022 msgid "reporter writing note" msgstr "note d'écrit défenseur⋅se" -#: participation/models.py:2023 +#: participation/models.py:2028 msgid "reporter oral note" msgstr "note d'oral défenseur⋅se" -#: participation/models.py:2029 +#: participation/models.py:2034 msgid "opponent writing note" msgstr "note d'écrit opposant⋅e" -#: participation/models.py:2035 +#: participation/models.py:2040 msgid "opponent oral note" msgstr "note d'oral opposant⋅e" -#: participation/models.py:2041 +#: participation/models.py:2046 msgid "reviewer writing note" msgstr "note d'écrit rapporteur⋅rice" -#: participation/models.py:2047 +#: participation/models.py:2052 msgid "reviewer oral note" msgstr "note d'oral du rapporteur⋅rice" -#: participation/models.py:2053 +#: participation/models.py:2058 msgid "observer writing note" msgstr "note d'écrit de l'observateur⋅rice" -#: participation/models.py:2059 +#: participation/models.py:2064 msgid "observer oral note" msgstr "note d'oral de l'observateur⋅rice" -#: participation/models.py:2124 +#: participation/models.py:2129 #, python-brace-format msgid "Notes of {jury} for {passage}" msgstr "Notes de {jury} pour le {passage}" -#: participation/models.py:2127 +#: participation/models.py:2132 msgid "note" msgstr "note" -#: participation/models.py:2128 +#: participation/models.py:2133 msgid "notes" msgstr "notes" @@ -1919,7 +1956,7 @@ msgstr "Poule {code}" msgid "No defined team" msgstr "Pas d'équipe définie" -#: participation/tables.py:147 +#: participation/tables.py:147 participation/tables.py:155 #: participation/templates/participation/note_form.html:14 #: participation/templates/participation/passage_detail.html:15 #: participation/templates/participation/passage_detail.html:176 @@ -1930,7 +1967,7 @@ msgstr "Pas d'équipe définie" #: participation/templates/participation/team_detail.html:251 #: participation/templates/participation/tournament_form.html:12 #: participation/templates/participation/update_team.html:12 -#: registration/tables.py:46 +#: registration/tables.py:46 registration/tables.py:57 #: registration/templates/registration/payment_form.html:210 #: registration/templates/registration/update_user.html:16 #: registration/templates/registration/user_detail.html:220 @@ -2697,6 +2734,10 @@ msgstr "" "d'adresse e-mail, soit une autorisation, soit des personnes, soit la lettre " "de motivation, soit le tournoi n'a pas été choisi." +#: participation/views.py:234 +msgid "Team validation" +msgstr "Validation d'équipe" + #: participation/views.py:246 msgid "You are not an organizer of the tournament." msgstr "Vous n'êtes pas un⋅e organisateur⋅rice du tournoi." @@ -2705,6 +2746,14 @@ msgstr "Vous n'êtes pas un⋅e organisateur⋅rice du tournoi." msgid "This team has no pending validation." msgstr "L'équipe n'a pas de validation en attente." +#: participation/views.py:269 +msgid "Team validated" +msgstr "Équipe validée" + +#: participation/views.py:278 +msgid "Team not validated" +msgstr "Équipe non validée" + #: participation/views.py:281 msgid "You must specify if you validate the registration or not." msgstr "Vous devez spécifier si vous validez l'inscription ou non." @@ -2915,26 +2964,18 @@ msgid "This email address is already used." msgstr "Cette adresse e-mail est déjà utilisée." #: registration/forms.py:45 -#, fuzzy -#| msgid "" -#| "Registrations for the tournament of {tournament} are ending on the {date:" -#| "%Y-%m-%d %H:%M}." msgid "" "Registrations are not opened yet. They will open on the {opening_date:%Y-%m-" "%d %H:%M}." msgstr "" -"Les inscriptions pour le tournoi de {tournament} se terminent le {date:%d/%m/" -"%Y %H:%M}." +"Les inscriptions ne sont pas ouvertes pour l'instant. Elles ouvriront le " +"{opening_date:%d/%m/%Y %H:%M}." #: registration/forms.py:49 -#, fuzzy -#| msgid "" -#| "Registrations for the tournament of {tournament} are ending on the {date:" -#| "%Y-%m-%d %H:%M}." msgid "" -"Registrations for this year are closed since {opening_date:%Y-%m-%d %H:%M}." +"Registrations for this year are closed since {closing_date:%Y-%m-%d %H:%M}." msgstr "" -"Les inscriptions pour le tournoi de {tournament} se terminent le {date:%d/%m/" +"Les inscriptions pour cette année sont closes depuis le {closing_date:%d/%m/" "%Y %H:%M}." #: registration/forms.py:301 @@ -2962,8 +3003,8 @@ msgstr "Activez votre compte" #, python-brace-format msgid "" "Your email address is not validated. Please click on the link you received " -"by email. You can resend a mail by clicking on this link." +"by email. You can resend a mail by clicking on this link." msgstr "" "Votre adresse mail n'est pas validée. Merci de cliquer sur le lien que vous " "avez reçu par mail. Vous pouvez renvoyer un mail en cliquant sur team page." +"{tournament}. You can check the status of the team on the team page." msgstr "" "L'équipe {trigram} a demandé à être validée pour le tournoi {tournament}. " "Vous pouvez vérifier le statut de l'équipe sur la page de " @@ -3499,8 +3540,6 @@ msgstr "" #: registration/templates/registration/mails/add_organizer.txt:14 #: registration/templates/registration/mails/email_validation_email.html:39 #: registration/templates/registration/mails/email_validation_email.txt:15 -#: registration/templates/registration/mails/payment_confirmation.html:41 -#: registration/templates/registration/mails/payment_reminder.html:52 msgid "The ETEAM team." msgstr "L'équipe de l'ETEAM" @@ -3546,10 +3585,10 @@ msgstr "Merci" #, python-format msgid "" "We successfully received the payment of %(amount)s € for your participation " -"for the ETEAM in the team %(team)s!" +"for the TFJM² in the team %(team)s for the tournament %(tournament)s!" msgstr "" -"Nous avons bien reçu le paiement de %(amount)s € pour la participation à " -"l'ETEAM dans l'équipe %(team)s !" +"Nous avons bien reçu le paiement de %(amount)s € pour votre participation au " +"TFJM² dans l'équipe %(team)s pour le tournoi %(tournament)s !" #: registration/templates/registration/mails/payment_confirmation.html:22 #: registration/templates/registration/mails/payment_confirmation.txt:8 @@ -3590,6 +3629,15 @@ msgstr "Dates du tournoi :" #: registration/templates/registration/mails/payment_confirmation.html:36 #: registration/templates/registration/mails/payment_confirmation.txt:16 msgid "" +"Please note that these dates may be subject to change. If your local " +"organizers gave you different dates, trust them." +msgstr "" +"Merci de noter que ces dates peuvent évoluer. Si vos organisateur⋅rices " +"régionaux⋅les vous ont donné des dates différentes, croyez-les." + +#: registration/templates/registration/mails/payment_confirmation.html:40 +#: registration/templates/registration/mails/payment_confirmation.txt:18 +msgid "" "NB: This mail don't represent a payment receipt. The payer should receive a " "mail from Hello Asso. If it is not the case, please contact us if necessary" msgstr "" @@ -3597,20 +3645,26 @@ msgstr "" "a payé devrait recevoir un mail de Hello Asso. Si ce n'est pas le cas, merci " "de nous contacter si nécessaire." -#: registration/templates/registration/mails/payment_confirmation.txt:19 -msgid "The ETEAM team" -msgstr "L'équipe de l'ETEAM" +#: registration/templates/registration/mails/payment_confirmation.html:45 +#: registration/templates/registration/mails/payment_reminder.html:52 +msgid "The TFJM² team." +msgstr "L'équipe du TFJM²" + +#: registration/templates/registration/mails/payment_confirmation.txt:21 +msgid "The TFJM² team" +msgstr "L'équipe du TFJM²" #: registration/templates/registration/mails/payment_reminder.html:16 #: registration/templates/registration/mails/payment_reminder.txt:4 #, python-format msgid "" -"You are registered for the ETEAM. Your team %(team)s has been successfully " -"validated. To end your inscription, you must pay the amount of %(amount)s €." +"You are registered for the TFJM² of %(tournament)s. Your team %(team)s has " +"been successfully validated. To end your inscription, you must pay the " +"amount of %(amount)s €." msgstr "" -"Vous êtes inscrit⋅e pour l'ETEAM. Votre équipe %(team)s a été validée avec " -"succès. Pour finaliser votre inscription, vous devez payer le montant de " -"%(amount)s €." +"Vous êtes inscrit⋅e pour le tournoi de %(tournament)s du TFJM². Votre équipe " +"%(team)s a été validée avec succès. Pour finaliser votre inscription, vous " +"devez payer le montant de %(amount)s €." #: registration/templates/registration/mails/payment_reminder.html:24 #: registration/templates/registration/mails/payment_reminder.txt:9 @@ -3931,38 +3985,40 @@ msgstr "" "Votre paiement est en attente de validation par les organisateur⋅rices." #: registration/templates/registration/signup.html:5 -#: registration/templates/registration/signup.html:12 -#: registration/templates/registration/signup.html:39 registration/views.py:48 +#: registration/templates/registration/signup.html:37 registration/views.py:48 msgid "Sign up" msgstr "Inscription" -#: registration/templates/registration/signup.html:17 +#: registration/templates/registration/signup.html:15 msgid "" "Thank you for your great interest, but registrations are not opened yet!" msgstr "" -"Merci pour votre grand intérêt, mais les inscriptions ne sont pas encore ouvertes !" +"Merci pour votre grand intérêt, mais les inscriptions ne sont pas encore " +"ouvertes !" -#: registration/templates/registration/signup.html:18 +#: registration/templates/registration/signup.html:16 msgid "They will open on:" msgstr "Elles ouvriront le :" -#: registration/templates/registration/signup.html:19 +#: registration/templates/registration/signup.html:17 msgid "Please come back at this time to register!" msgstr "Merci de revenir à ce moment-là pour vous inscrire !" -#: registration/templates/registration/signup.html:23 +#: registration/templates/registration/signup.html:21 msgid "Registrations are closed for this year. We hope to see you next year!" -msgstr "Les inscriptions sont closes pour cette année. Nous espérons vous revoir l'année prochaine !" +msgstr "" +"Les inscriptions sont closes pour cette année. Nous espérons vous revoir " +"l'année prochaine !" -#: registration/templates/registration/signup.html:24 +#: registration/templates/registration/signup.html:22 msgid "If needed, you can contact us by mail." msgstr "Si nécessaire, vous pouvez nous contacter par mail." -#: registration/templates/registration/signup.html:34 +#: registration/templates/registration/signup.html:32 msgid "By registering, you certify that you have read and accepted our" msgstr "En vous inscrivant, vous certifiez avoir lu et accepté notre" -#: registration/templates/registration/signup.html:35 +#: registration/templates/registration/signup.html:33 msgid "privacy policy" msgstr "politique de confidentialité" @@ -4420,7 +4476,7 @@ msgstr "Inscris-toi maintenant !" msgid "I already have an account" msgstr "J'ai déjà un compte" -#: tfjm/templates/index_eteam.html:34 tfjm/templates/index_tfjm.html:34 +#: tfjm/templates/index_eteam.html:34 tfjm/templates/index_tfjm.html:43 msgid "How does it work?" msgstr "Comment ça marche ?" @@ -4459,7 +4515,7 @@ msgstr "" "valider votre équipe pour pouvoir travailler sur les problèmes de votre " "choix." -#: tfjm/templates/index_eteam.html:55 tfjm/templates/index_tfjm.html:64 +#: tfjm/templates/index_eteam.html:55 tfjm/templates/index_tfjm.html:73 msgid "I have a question" msgstr "J'ai une question" @@ -4467,16 +4523,16 @@ msgstr "J'ai une question" msgid "" "Do not hesitate to consult the documentation of the site, to check if the answer is " -"not already there. Also refer of course to the ETEAM rules. For any other question, do " -"not hesitate to contact us by email at the address eteam_moc@proton.me ." +"not already there. Also refer of course to the ETEAM rules. For any other " +"question, do not hesitate to contact us by email at the address eteam_moc@proton.me ." msgstr "" "N'hésitez pas à consulter la documentation du site, pour vérifier si la réponse n'y " -"est pas déjà. Référez-vous également bien sûr au règlement de l'ETEAM. Pour toute " -"autre question, n'hésitez pas à nous contacter par mail à l'adresse règlement de l'ETEAM. Pour " +"toute autre question, n'hésitez pas à nous contacter par mail à l'adresse eteam_moc@proton.me ." #: tfjm/templates/index_tfjm.html:20 @@ -4487,7 +4543,25 @@ msgstr " Tu souhaites participer au 𝕋𝔽𝕁𝕄² ?" msgid "Your team is already complete?" msgstr "Ton équipe est déjà formée ?" -#: tfjm/templates/index_tfjm.html:37 +#: tfjm/templates/index_tfjm.html:34 +msgid "New in 2025" +msgstr "Nouveautés 2025" + +#: tfjm/templates/index_tfjm.html:35 +msgid "" +"Registration for Ile-de-France tournaments is now unified. If you live in or " +"near the Ile-de-France region, your registration will be pooled with each of " +"the region's tournaments, and the organizers will take care of team " +"allocation. However, date constraints can be indicated in the motivation " +"letter." +msgstr "" +"L'inscription dans les tournois franciliens est désormais unifiée. Si vous " +"résidez en Île-de-France ou proche, votre inscription sera mise en commun " +"avec chacun des tournois de la région, et les organisateur⋅rices s'occuperont " +"de la répartition des équipes. Les contraintes de date peuvent toutefois " +"être indiquées dans la lettre de motivation." + +#: tfjm/templates/index_tfjm.html:46 #, python-format msgid "" "To participate to the 𝕋𝔽𝕁𝕄², you just need to create an account on the " @@ -4498,7 +4572,7 @@ msgstr "" "page d'inscription. Vous " "devrez ensuite confirmer votre adresse mail." -#: tfjm/templates/index_tfjm.html:45 +#: tfjm/templates/index_tfjm.html:54 #, python-format msgid "" "You can access your account via the Logincontact@tfjm.org so that we can help you get in touch with other " -"participants who are also looking for a team." -msgstr "" -"Vous pouvez nous contacter à l'adresse contact@tfjm.org pour que nous puissions vous mettre en relation " -"avec d'autres participant⋅es qui cherchent également une équipe." - #: tfjm/templates/index_tfjm.html:67 msgid "" +"You can contact us at the address contact@tfjm.org so that we can help " +"you get in touch with other participants who are also looking for a team." +msgstr "" +"Vous pouvez nous contacter à l'adresse contact@tfjm.org pour que nous " +"puissions vous mettre en relation avec d'autres participant⋅es qui cherchent " +"également une équipe." + +#: tfjm/templates/index_tfjm.html:76 +msgid "" "Do not hesitate to consult the documentation of the site, to check if the answer is " "not already there. Also refer of course to the 𝕋𝔽𝕁𝕄² rules. For any other question, do " -"not hesitate to contact us by email at the address contact@tf" -"jm.org ." +"not hesitate to contact us by email at the address " +"contact@tfjm.org " +"." msgstr "" "N'hésitez pas à consulter la documentation du site, pour vérifier si la réponse n'y " "est pas déjà. Référez-vous également bien sûr au règlement du 𝕋𝔽𝕁𝕄². Pour toute autre " "question, n'hésitez pas à nous contacter par mail à l'adresse contact@" -"tfjm.org ." +"href=\"mailto:contact@tfjm.org\"> " +"contact@tfjm.org " +"." -#: tfjm/templates/index_tfjm.html:79 +#: tfjm/templates/index_tfjm.html:88 msgid "Save the dates!" msgstr "Attention aux dates !" -#: tfjm/templates/index_tfjm.html:80 +#: tfjm/templates/index_tfjm.html:89 msgid "" "If you don't end your registration by the indicated deadline, you will " "unfortunately not be able to participate in the 𝕋𝔽𝕁𝕄²." diff --git a/participation/forms.py b/participation/forms.py index 04795d4..5c582ee 100644 --- a/participation/forms.py +++ b/participation/forms.py @@ -5,7 +5,7 @@ from io import StringIO import re from crispy_forms.helper import FormHelper -from crispy_forms.layout import Div, Field, Submit +from crispy_forms.layout import Div, Field, HTML, Layout, Submit from django import forms from django.contrib.auth.models import User from django.core.exceptions import ValidationError @@ -77,9 +77,30 @@ class ParticipationForm(forms.ModelForm): """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - if settings.TFJM_APP == "ETEAM": - # One single tournament only + if settings.SINGLE_TOURNAMENT: del self.fields['tournament'] + self.helper = FormHelper() + idf_warning_banner = f""" +
+
{_("IMPORTANT")}
+{_("""For the tournaments in the region "Île-de-France": registration is +unified for each tournament. By choosing a tournament "Île-de-France", +you're accepting that your team may be selected for one of these tournaments. +In case of date conflict, please write them in your motivation letter.""")} +
+""" + unified_registration_tournament_ids = ",".join(str(tournament.id) + for tournament in Tournament.objects.filter( + unified_registration=True).all()) + self.helper.layout = Layout( + 'tournament', + Div( + HTML(idf_warning_banner), + css_id="idf_warning_banner", + data_tid_unified=unified_registration_tournament_ids, + ), + 'final', + ) class Meta: model = Participation diff --git a/participation/migrations/0023_tournament_unified_registration.py b/participation/migrations/0023_tournament_unified_registration.py new file mode 100644 index 0000000..73cfe67 --- /dev/null +++ b/participation/migrations/0023_tournament_unified_registration.py @@ -0,0 +1,21 @@ +# Generated by Django 5.1.5 on 2025-01-14 18:06 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("participation", "0022_alter_note_observer_oral"), + ] + + operations = [ + migrations.AddField( + model_name="tournament", + name="unified_registration", + field=models.BooleanField( + default=False, verbose_name="unified registration" + ), + ), + ] diff --git a/participation/models.py b/participation/models.py index 8ee43b7..6b91063 100644 --- a/participation/models.py +++ b/participation/models.py @@ -283,6 +283,11 @@ class Tournament(models.Model): default=date.today, ) + unified_registration = models.BooleanField( + verbose_name=_("unified registration"), + default=False, + ) + place = models.CharField( max_length=255, verbose_name=_("place"), diff --git a/participation/templates/participation/update_team.html b/participation/templates/participation/update_team.html index e053da8..63ad727 100644 --- a/participation/templates/participation/update_team.html +++ b/participation/templates/participation/update_team.html @@ -1,15 +1,37 @@ {% extends request.content_only|yesno:"empty.html,base.html" %} -{% load crispy_forms_filters i18n %} +{% load crispy_forms_filters crispy_forms_tags i18n %} {% block content %}
{% csrf_token %} {{ form|crispy }} - {{ participation_form|crispy }} + {% crispy participation_form %}
{% endblock content %} +{% block extrajavascript %} + +{% endblock %} diff --git a/tfjm/templates/index_tfjm.html b/tfjm/templates/index_tfjm.html index ba282d6..ecde2d6 100644 --- a/tfjm/templates/index_tfjm.html +++ b/tfjm/templates/index_tfjm.html @@ -30,6 +30,15 @@ +
+

{% trans "New in 2025" %}

+ {% blocktrans trimmed %} + Registration for Ile-de-France tournaments is now unified. + If you live in or near the Ile-de-France region, your registration will be pooled with each of the region's tournaments, + and the organizers will take care of team allocation. However, date constraints can be indicated in the motivation letter. + {% endblocktrans %} +
+
{% trans "How does it work?" %}