diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 75aee92..75fe4d8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,15 +2,6 @@ stages: - test - quality-assurance -py311: - stage: test - image: python:3.11-alpine - before_script: - - apk add --no-cache libmagic - - apk add --no-cache gettext - - pip install tox --no-cache-dir - script: tox -e py311 - py312: stage: test image: python:3.12-alpine 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..75c60a3 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/mails/request_validation.html b/participation/templates/participation/mails/request_validation.html index 29b96d6..cbf75d1 100644 --- a/participation/templates/participation/mails/request_validation.html +++ b/participation/templates/participation/mails/request_validation.html @@ -2,28 +2,28 @@ - Validation request - ETEAM + Demande de validation - TFJM²

-Hi, +Bonjour,

-The team "{{ team.name }}" ({{ team.trigram }}) has just asked to validate his team to take part -in ETEAM. -You can decide whether or not to accept the team by going to the team page: +L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer +au {{ team.participation.get_problem_display }} du TFJM². +Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe : https://{{ domain }}{% url "participation:team_detail" pk=team.pk %}

-Sincerely yours, +Cordialement,

-The ETEAM team +L'organisation du TFJM²

diff --git a/participation/templates/participation/mails/request_validation.txt b/participation/templates/participation/mails/request_validation.txt index fe84e37..d9ff5bf 100644 --- a/participation/templates/participation/mails/request_validation.txt +++ b/participation/templates/participation/mails/request_validation.txt @@ -1,10 +1,10 @@ -Hi {{ user }}, +Bonjour {{ user }}, -The team "{{ team.name }}" ({{ team.trigram }}) has just asked to validate his team to take part -in ETEAM. -You can decide whether or not to accept the team by going to the team page: +L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer +au {{ team.participation.get_problem_display }} du TFJM². +Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe : https://{{ domain }}{% url "participation:team_detail" pk=team.pk %} -Sincerely yours, +Cordialement, -The ETEAM team +L'organisation du TFJM² diff --git a/participation/templates/participation/mails/team_not_validated.html b/participation/templates/participation/mails/team_not_validated.html index 3697650..915a003 100644 --- a/participation/templates/participation/mails/team_not_validated.html +++ b/participation/templates/participation/mails/team_not_validated.html @@ -2,21 +2,21 @@ - Team not validated – ETEAM + Équipe non validée – TFJM² -Hi,
+Bonjour,

-Unfortunately, your team "{{ team.name }}" ({{ team.trigram }}) has not been validated. -Please check that your authorisations are correctly filled in. -The organisers are sending you this message:
+Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos autorisations +de droit à l'image sont correctes. Les organisateurs vous adressent ce message :

{{ message }}

-Please contact us at eteam_moc@proton.me if you need further information. +N'hésitez pas à nous contacter à l'adresse contact@tfjm.org +pour plus d'informations.
-Sincerely yours,
+Cordialement,

-The ETEAM team +Le comité d'organisation du TFJM² diff --git a/participation/templates/participation/mails/team_not_validated.txt b/participation/templates/participation/mails/team_not_validated.txt index 8ed8a4e..9479fba 100644 --- a/participation/templates/participation/mails/team_not_validated.txt +++ b/participation/templates/participation/mails/team_not_validated.txt @@ -1,13 +1,12 @@ -Hi, +Bonjour, -Unfortunately, your team "{{ team.name }}" ({{ team.trigram }}) has not been validated. -Please check that your authorisations are correctly filled in. -The organisers are sending you this message:
+Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos +autorisations de droit à l'image sont correctes. Les organisateurs vous adressent ce message : {{ message }} -Please contact us at eteam_moc@proton.me if you need further information. +N'hésitez pas à nous contacter à l'adresse contact@tfjm.org pour plus d'informations. -Sincerely yours, +Cordialement, -The ETEAM team +Le comité d'organisation du TFJM² diff --git a/participation/templates/participation/mails/team_validated.html b/participation/templates/participation/mails/team_validated.html index 025c64e..9281279 100644 --- a/participation/templates/participation/mails/team_validated.html +++ b/participation/templates/participation/mails/team_validated.html @@ -2,36 +2,37 @@ - Team validated – ETEAM + Équipe validée – TFJM²

- Hello {{ registration }}, + Bonjour {{ registration }},

- Congratulations! Your team "{{ team.name }}" ({{ team.trigram }}) is now validated! You are now ready to - to work on your problems. You can then upload your solutions to the platform. + Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais + apte à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme.

{% if payment %}

- You must now pay your participation fee of € {{ payment.amount }}. - You can pay by credit card or bank transfer. You'll find information - on the payment page which you can find on - your account. - If you have a scholarship, registration is free, but you must submit a justification on the same page. + Vous devez désormais vous acquitter de vos frais de participation, de {{ payment.amount }} € par élève. + Vous pouvez payer par carte bancaire ou par virement bancaire. Vous trouverez les informations + sur la page de paiement. + Si vous disposez d'une bourse, l'inscription est gratuite, mais vous devez soumettre un justificatif + sur la même page.

{% elif registration.is_coach and team.participation.tournament.price %}

- Your team must now pay a participation fee of {{ team.participation.tournament.price }} € per student (supervisors are exempt). Students with scholarships are exempt⋅es from these fees. - You can track the status of payments on - your team page. + Votre équipe doit désormais s'acquitter des frais de participation de {{ team.participation.tournament.price }} € + par élève (les encadrant⋅es sont exonéré⋅es). Les élèves qui disposent d'une bourse sont exonéré⋅es de ces frais. + Vous pouvez suivre l'état des paiements sur + la page de votre équipe.

{% endif %} {% if message %}

- The organisers send you this message: + Les organisateur⋅ices vous adressent ce message :

{{ message }} @@ -39,7 +40,7 @@ {% endif %}

- The ETEAM team + Le comité d'organisation du TFJM²

diff --git a/participation/templates/participation/mails/team_validated.txt b/participation/templates/participation/mails/team_validated.txt index 98b1814..20888c0 100644 --- a/participation/templates/participation/mails/team_validated.txt +++ b/participation/templates/participation/mails/team_validated.txt @@ -1,21 +1,23 @@ -Hello {{registration }}, +Bonjour {{ registration }}, -Congratulations! Your team "{{ team.name }}" ({{ team.trigram }}) is now validated! You are now ready to -to work on your problems. You can then upload your solutions to the platform. -{% if payment %} -You must now pay your participation fee of € {{ payment.amount }}. -You can pay by credit card or bank transfer. You'll find information -on the payment page which you can find on your account: +Félicitations ! Votre équipe « {{ team.name }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte +à travailler sur vos problèmes. Vous pourrez ensuite envoyer vos solutions sur la plateforme. +{% if team.participation.amount %} +Vous devez désormais vous acquitter de vos frais de participation, de {{ team.participation.amount }} €. +Vous pouvez payer par carte bancaire ou par virement bancaire. Vous trouverez les informations +sur la page de paiement que vous pouvez retrouver sur votre compte : https://{{ domain }}{% url 'registration:my_account_detail' %} -If you have a scholarship, registration is free, but you must submit a justification on the same page. +Si vous disposez d'une bourse, l'inscription est gratuite, mais vous devez soumettre un justificatif +sur la même page. {% elif registration.is_coach and team.participation.tournament.price %} -Your team must now pay a participation fee of {{ team.participation.tournament.price }} € per student (supervisors are exempt). Students with scholarships are exempt⋅es from these fees. -You can track the status of payments on your team page: +Votre équipe doit désormais s'acquitter des frais de participation de {{ team.participation.tournament.price }} € +par élève (les encadrant⋅es sont exonéré⋅es). Les élèves qui disposent d'une bourse sont exonéré⋅es de ces frais. +Vous pouvez suivre l'état des paiements sur la page de votre équipe : https://{{ domain }}{% url 'participation:team_detail' pk=team.pk %} {% endif %} {% if message %} -The organisers send you this message: +Les organisateurices vous adressent ce message : {{ message }} {% endif %} -The ETEAM team +Le comité d'organisation du TFJM² 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/registration/templates/registration/mails/payment_confirmation.html b/registration/templates/registration/mails/payment_confirmation.html index 4b6c6f3..279ac6b 100644 --- a/registration/templates/registration/mails/payment_confirmation.html +++ b/registration/templates/registration/mails/payment_confirmation.html @@ -14,7 +14,7 @@

{% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament.name %} - We successfully received the payment of {{ amount }} € for your participation for the ETEAM in the team {{ team }}! + We successfully received the payment of {{ amount }} € for your participation for the TFJM² in the team {{ team }} for the tournament {{ tournament }}! {% endblocktrans %}

@@ -32,13 +32,17 @@

+

+ {% trans "Please note that these dates may be subject to change. If your local organizers gave you different dates, trust them." %} +

+

{% trans "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" %}

--

- {% trans "The ETEAM team." %}
+ {% trans "The TFJM² team." %}

diff --git a/registration/templates/registration/mails/payment_confirmation.txt b/registration/templates/registration/mails/payment_confirmation.txt index baa9b2e..298aebb 100644 --- a/registration/templates/registration/mails/payment_confirmation.txt +++ b/registration/templates/registration/mails/payment_confirmation.txt @@ -2,7 +2,7 @@ {% trans "Hi" %} {{ registration|safe }}, {% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament.name %} -We successfully received the payment of {{ amount }} € for your participation for the ETEAM in the team {{ team }}! +We successfully received the payment of {{ amount }} € for your participation for the TFJM² in the team {{ team }} for the tournament {{ tournament }}! {% endblocktrans %} {% trans "Your registration is now fully completed, and you can work on your solutions." %} @@ -13,8 +13,10 @@ We successfully received the payment of {{ amount }} € for your participation * {% trans "Problems draw:" %} {{ payment.tournament.solutions_draw|date }} * {% trans "Tournament dates:" %} {% trans "From" %} {{ payment.tournament.date_start|date }} {% trans "to" %} {{ payment.tournament.date_end|date }} +{% trans "Please note that these dates may be subject to change. If your local organizers gave you different dates, trust them." %} + {% trans "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" %} -- -{% trans "The ETEAM team" %} +{% trans "The TFJM² team" %} diff --git a/registration/templates/registration/mails/payment_reminder.html b/registration/templates/registration/mails/payment_reminder.html index 18d81ea..7de8452 100644 --- a/registration/templates/registration/mails/payment_reminder.html +++ b/registration/templates/registration/mails/payment_reminder.html @@ -14,7 +14,7 @@

{% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament %} - You are registered for the ETEAM. Your team {{ team }} has been successfully validated. + You are registered for the TFJM² of {{ tournament }}. Your team {{ team }} has been successfully validated. To end your inscription, you must pay the amount of {{ amount }} €. {% endblocktrans %}

@@ -49,7 +49,7 @@ --

- {% trans "The ETEAM team." %}
+ {% trans "The TFJM² team." %}

diff --git a/registration/templates/registration/mails/payment_reminder.txt b/registration/templates/registration/mails/payment_reminder.txt index 1062a9a..18e2be7 100644 --- a/registration/templates/registration/mails/payment_reminder.txt +++ b/registration/templates/registration/mails/payment_reminder.txt @@ -2,7 +2,7 @@ {% trans "Hi" %} {{ registration|safe }}, {% blocktrans trimmed with amount=payment.amount team=payment.team.trigram tournament=payment.tournament %} -You are registered for the ETEAM. Your team {{ team }} has been successfully validated. +You are registered for the TFJM² of {{ tournament }}. Your team {{ team }} has been successfully validated. To end your inscription, you must pay the amount of {{ amount }} €. {% endblocktrans %} {% if payment.grouped %} @@ -19,4 +19,4 @@ https://{{ domain }}{% url "registration:update_payment" pk=payment.pk %} {% trans "If you have any problem, feel free to contact us." %} -- -The ETEAM team +The TFJM² team diff --git a/registration/templates/registration/tex/Autorisation_droit_image_majeur.tex b/registration/templates/registration/tex/Autorisation_droit_image_majeur.tex index 82d5ff1..b3b09f1 100644 --- a/registration/templates/registration/tex/Autorisation_droit_image_majeur.tex +++ b/registration/templates/registration/tex/Autorisation_droit_image_majeur.tex @@ -17,6 +17,7 @@ % Specials \newcommand{\writingsep}{\vrule height 4ex width 0pt} +\newcommand{\cdt}{\kern-0.5pt\ensuremath\cdot\kern-0.5pt} % Page formating \hoffset -1in @@ -56,19 +57,23 @@ Autorisation d'enregistrement et de diffusion de l'image ({{ tournament.name }}) -Je soussign\'e {{ registration|safe|default:"\dotfill" }}\\ +Je soussign\'e\cdt{}e {{ registration|safe|default:"\dotfill" }}\\ demeurant au {{ registration.address|safe|default:"\dotfill" }} \medskip Cochez la/les cases correspondantes.\\ \medskip -\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ de {{ tournament.name }} -du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, \`a me photographier ou \`a me -filmer et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites -partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser mon image sur tous ses supports -d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des droits -pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\ +\fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ +{% if tournament.unified_registration %} dans +l'un des tournois d'Île-de-France (selon sélection : du 26 au 27 avril 2025, du 3 au 4 mai 2025, ou du 10 au 11 mai 2025) +{% else %} de +{{ tournament.name }} du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, +{% endif %} \`a +me photographier ou \`a me filmer et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion +sur son site et sur les sites partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser mon +image sur tous ses supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, +cessionnaire des droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\ \medskip Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la @@ -98,7 +103,7 @@ Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\ \bigskip -Signature pr\'ec\'ed\'ee de la mention \og lu et approuv\'e \fg{} +Signature pr\'ec\'ed\'ee de la mention « lu et approuv\'e » \medskip @@ -106,7 +111,7 @@ Signature pr\'ec\'ed\'ee de la mention \og lu et approuv\'e \fg{} \begin{minipage}[c]{0.5\textwidth} -\underline{Le participant :}\\ +\underline{La/le participant\cdt{}e :}\\ Fait \`a :\\ le diff --git a/registration/templates/registration/tex/Autorisation_droit_image_mineur.tex b/registration/templates/registration/tex/Autorisation_droit_image_mineur.tex index 64985ec..c0f21b1 100644 --- a/registration/templates/registration/tex/Autorisation_droit_image_mineur.tex +++ b/registration/templates/registration/tex/Autorisation_droit_image_mineur.tex @@ -17,6 +17,7 @@ % Specials \newcommand{\writingsep}{\vrule height 4ex width 0pt} +\newcommand{\cdt}{\kern-0.5pt\ensuremath\cdot\kern-0.5pt} % Page formating \hoffset -1in @@ -57,20 +58,25 @@ Autorisation d'enregistrement et de diffusion de l'image -Je soussign\'e \dotfill (p\`ere, m\`ere, responsable l\'egal) \\ -agissant en qualit\'e de repr\'esentant de {{ registration|safe|default:"\dotfill" }}\\ +Je soussign\'e\cdt{}e \dotfill (p\`ere, m\`ere, responsable l\'egal) \\ +agissant en qualit\'e de repr\'esentant\cdt{}e de {{ registration|safe|default:"\dotfill" }}\\ demeurant au {{ registration.address|safe|default:"\dotfill" }} \medskip Cochez la/les cases correspondantes.\\ \medskip - \fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ de {{ tournament.name }} - du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, \`a photographier ou \`a filmer - l'enfant et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion sur son site et sur les sites - partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser l'image de l'enfant sur tous ses - supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la pr\'esente, cessionnaire des - droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de ces photographies.\\ + \fbox{\textcolor{white}{A}} Autorise l'association Animath, \`a l'occasion du $\mathbb{TFJM}^2$ + {% if tournament.unified_registration %} dans + l'un des tournois d'Île-de-France (selon sélection : du 26 au 27 avril 2025, du 3 au 4 mai 2025, ou du 10 au 11 mai 2025) + {% else %} de + {{ tournament.name }} du {{ tournament.date_start }} au {{ tournament.date_end }} à : {{ tournament.place }}, + {% endif %} \`a + photographier ou \`a filmer l'enfant et \`a diffuser les photos et/ou les vid\'eos r\'ealis\'ees \`a cette occasion + sur son site et sur les sites partenaires. D\'eclare c\'eder \`a titre gracieux \`a Animath le droit d’utiliser l'image + de l'enfant sur tous ses supports d'information : brochures, sites web, r\'eseaux sociaux. Animath devient, par la + pr\'esente, cessionnaire des droits pendant toute la dur\'ee pour laquelle ont \'et\'e acquis les droits d'auteur de +ces photographies.\\ \medskip Animath s'engage, conform\'ement aux dispositions l\'egales en vigueur relatives au droit \`a l'image, \`a ce que la @@ -100,14 +106,14 @@ Animath, IHP, 11 rue Pierre et Marie Curie, 75231 Paris cedex 05.\\ \bigskip -Signatures pr\'ec\'ed\'ees de la mention \og lu et approuv\'e \fg{} +Signatures pr\'ec\'ed\'ees de la mention « lu et approuv\'e » \medskip \begin{minipage}[c]{0.5\textwidth} -\underline{Le responsable l\'egal :}\\ +\underline{La/le responsable l\'egal\cdt{}e :}\\ Fait \`a :\\ le : diff --git a/registration/templates/registration/tex/Autorisation_parentale.tex b/registration/templates/registration/tex/Autorisation_parentale.tex index 5a4cf09..1460bce 100644 --- a/registration/templates/registration/tex/Autorisation_parentale.tex +++ b/registration/templates/registration/tex/Autorisation_parentale.tex @@ -17,6 +17,7 @@ % Specials \newcommand{\writingsep}{\vrule height 4ex width 0pt} +\newcommand{\cdt}{\kern-0.5pt\ensuremath\cdot\kern-0.5pt} % Page formating \hoffset -1in @@ -45,16 +46,25 @@ \Large \bf Autorisation parentale pour les mineurs ({{ tournament.name }}) \end{center} -Je soussigné(e) \hrulefill,\\ -responsable légal, demeurant \writingsep\hrulefill\\ +Je soussigné\cdt{}e \hrulefill,\\ +responsable légal\cdt{}e, demeurant \writingsep\hrulefill\\ \writingsep\hrulefill,\\ \writingsep autorise {{ registration|default:"\hrulefill" }},\\ -né(e) le {{ registration.birth_date }}, -à participer au Tournoi Français des Jeunes Mathématiciennes et Mathématiciens ($\mathbb{TFJM}^2$) organisé \`a : +né\cdt{}e le {{ registration.birth_date|default:"\underline{\phantom{dd/mm/aaaa} }" }}, +à participer au Tournoi Français des Jeunes Mathématiciennes et Mathématiciens ($\mathbb{TFJM}^2$) +{% if tournament.unified_registration %} dans l'un des tournois d'Île-de-France selon sélection : +\begin{itemize} + \item Île-de-France 1, du 26 au 27 avril 2025 ; + \item Île-de-France 2, du 3 au 4 mai 2025 ; + \item Île-de-France 3, du 10 au 11 mai 2025. +\end{itemize} +{% else %} +organisé \`a : {{ tournament.place }}, du {{ tournament.date_start }} au {{ tournament.date_end }}. +{% endif %} Iel se rendra au lieu indiqu\'e ci-dessus le samedi matin et quittera les lieux l'après-midi du dimanche par -ses propres moyens et sous la responsabilité du représentant légal. +ses propres moyens et sous la responsabilité du/de la représentant\cdt{}e légal\cdt{}e. 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?" %}

diff --git a/tox.ini b/tox.ini index 81eb10c..4e659b8 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,5 @@ [tox] envlist = - py311 py312 py313