1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2025-02-25 20:26:29 +00:00

Compare commits

..

No commits in common. "bc67d1cf1fc3052e9e4fb3257aeb99511839e258" and "ca9652cc607e2703f5b21e0f0b8ab8df43e07172" have entirely different histories.

5 changed files with 174 additions and 278 deletions

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: TFJM\n" "Project-Id-Version: TFJM\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-11 22:18+0100\n" "POT-Creation-Date: 2024-02-11 20:13+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n" "Last-Translator: Emmy D'Anello <emmy.danello@animath.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -22,19 +22,19 @@ msgid "API"
msgstr "API" msgstr "API"
#: draw/admin.py:16 draw/admin.py:28 draw/admin.py:44 participation/admin.py:44 #: draw/admin.py:16 draw/admin.py:28 draw/admin.py:44 participation/admin.py:44
#: participation/models.py:248 participation/tables.py:87 #: participation/models.py:198 participation/tables.py:87
msgid "teams" msgid "teams"
msgstr "équipes" msgstr "équipes"
#: draw/admin.py:40 draw/admin.py:56 draw/models.py:24 #: draw/admin.py:40 draw/admin.py:56 draw/models.py:24
#: participation/admin.py:16 participation/admin.py:73 #: participation/admin.py:16 participation/admin.py:73
#: participation/admin.py:104 participation/models.py:417 #: participation/admin.py:104 participation/models.py:367
#: participation/models.py:441 participation/models.py:474 #: participation/models.py:391 participation/models.py:424
msgid "tournament" msgid "tournament"
msgstr "tournoi" msgstr "tournoi"
#: draw/admin.py:60 draw/models.py:231 draw/models.py:426 #: draw/admin.py:60 draw/models.py:231 draw/models.py:426
#: participation/models.py:478 #: participation/models.py:428
msgid "round" msgid "round"
msgstr "tour" msgstr "tour"
@ -168,7 +168,7 @@ msgstr "La poule en cours, où les équipes choisissent leurs problèmes"
msgid "rounds" msgid "rounds"
msgstr "tours" msgstr "tours"
#: draw/models.py:254 participation/models.py:492 #: draw/models.py:254 participation/models.py:442
msgid "letter" msgid "letter"
msgstr "lettre" msgstr "lettre"
@ -207,17 +207,17 @@ msgid "Pool {letter}{number}"
msgstr "Poule {letter}{number}" msgstr "Poule {letter}{number}"
#: draw/models.py:407 draw/models.py:434 participation/admin.py:69 #: draw/models.py:407 draw/models.py:434 participation/admin.py:69
#: participation/admin.py:88 participation/models.py:544 #: participation/admin.py:88 participation/models.py:494
#: participation/models.py:553 participation/tables.py:83 #: participation/models.py:503 participation/tables.py:83
msgid "pool" msgid "pool"
msgstr "poule" msgstr "poule"
#: draw/models.py:408 participation/models.py:545 #: draw/models.py:408 participation/models.py:495
msgid "pools" msgid "pools"
msgstr "poules" msgstr "poules"
#: draw/models.py:420 participation/models.py:464 participation/models.py:714 #: draw/models.py:420 participation/models.py:414 participation/models.py:664
#: participation/models.py:744 participation/models.py:782 #: participation/models.py:694 participation/models.py:732
msgid "participation" msgid "participation"
msgstr "participation" msgstr "participation"
@ -241,8 +241,8 @@ msgid ""
msgstr "" msgstr ""
"L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1." "L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1."
#: draw/models.py:457 draw/models.py:480 participation/models.py:567 #: draw/models.py:457 draw/models.py:480 participation/models.py:517
#: participation/models.py:751 #: participation/models.py:701
#, python-brace-format #, python-brace-format
msgid "Problem #{problem}" msgid "Problem #{problem}"
msgstr "Problème n°{problem}" msgstr "Problème n°{problem}"
@ -325,7 +325,7 @@ msgid "Continue draw"
msgstr "Continuer le tirage" msgstr "Continuer le tirage"
#: draw/templates/draw/tournament_content.html:216 participation/admin.py:100 #: draw/templates/draw/tournament_content.html:216 participation/admin.py:100
#: participation/models.py:247 participation/models.py:432 #: participation/models.py:197 participation/models.py:382
#: registration/models.py:146 #: registration/models.py:146
msgid "team" msgid "team"
msgstr "équipe" msgstr "équipe"
@ -442,26 +442,26 @@ msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
msgid "valid" msgid "valid"
msgstr "valide" msgstr "valide"
#: participation/admin.py:24 participation/models.py:453 #: participation/admin.py:24 participation/models.py:403
msgid "selected for final" msgid "selected for final"
msgstr "sélectionnée pour la finale" msgstr "sélectionnée pour la finale"
#: participation/admin.py:57 participation/admin.py:116 #: participation/admin.py:57 participation/admin.py:116
#: participation/models.py:574 participation/tables.py:111 #: participation/models.py:524 participation/tables.py:111
msgid "defender" msgid "defender"
msgstr "défenseur⋅se" msgstr "défenseur⋅se"
#: participation/admin.py:61 participation/models.py:581 #: participation/admin.py:61 participation/models.py:531
#: participation/models.py:794 #: participation/models.py:744
msgid "opponent" msgid "opponent"
msgstr "opposant⋅e" msgstr "opposant⋅e"
#: participation/admin.py:65 participation/models.py:588 #: participation/admin.py:65 participation/models.py:538
#: participation/models.py:795 #: participation/models.py:745
msgid "reporter" msgid "reporter"
msgstr "rapporteur⋅e" msgstr "rapporteur⋅e"
#: participation/admin.py:120 participation/models.py:749 #: participation/admin.py:120 participation/models.py:699
msgid "problem" msgid "problem"
msgstr "numéro de problème" msgstr "numéro de problème"
@ -568,7 +568,7 @@ msgstr "Ce⋅tte défenseur⋅se ne travaille pas sur ce problème."
msgid "The PDF file must not have more than 2 pages." msgid "The PDF file must not have more than 2 pages."
msgstr "Le fichier PDF ne doit pas avoir plus de 2 pages." msgstr "Le fichier PDF ne doit pas avoir plus de 2 pages."
#: participation/models.py:32 participation/models.py:258 #: participation/models.py:32 participation/models.py:208
#: participation/tables.py:17 participation/tables.py:33 #: participation/tables.py:17 participation/tables.py:33
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
@ -593,244 +593,191 @@ msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe."
msgid "motivation letter" msgid "motivation letter"
msgstr "lettre de motivation" msgstr "lettre de motivation"
#: participation/models.py:96 #: participation/models.py:94
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} is not registered to any tournament. You can register the " "The team is not registered to any tournament. You can register the team to a "
"team to a tournament using <a href='{url}'>this link</a>." "tournament using <a href='{url}'>this link</a>."
msgstr "" msgstr ""
"L'équipe {trigram} n'est inscrite à aucun tournoi. Vous pouvez inscrire " "L'équipe n'est inscrite à aucun tournoi. Vous pouvez inscrire l'équipe à un "
"l'équipe à un tournoi en cliquant sur <a href='{url}'>ce lien</a>." "tournoi en cliquant sur <a href='{url}'>ce lien</a>."
#: participation/models.py:101 #: participation/models.py:99
msgid "No tournament" msgid "No tournament"
msgstr "Pas de tournoi" msgstr "Pas de tournoi"
#: participation/models.py:107 #: participation/models.py:105
msgid ""
"Registrations for the tournament of {tournament} are ending on the {date:%Y-"
"%m-%d %H:%M}."
msgstr ""
"Les inscriptions pour le tournoi de {tournament} se terminent le {date:%d/%m/"
"%Y %H:%M}."
#: participation/models.py:112
msgid "Registrations closure"
msgstr "Clôture des inscriptions"
#: participation/models.py:119
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has not uploaded a motivation letter. You can upload your " "The team has not uploaded a motivation letter. You can upload your "
"motivation letter using <a href='{url}'>this link</a>." "motivation letter using <a href='{url}'>this link</a>."
msgstr "" msgstr ""
"L'équipe {trigram} n'a pas envoyé de lettre de motivation. Vous pouvez " "L'équipe n'a pas envoyé de lettre de motivation. Vous pouvez envoyer votre "
"envoyer votre lettre de motivation en cliquant sur <a href='{url}'>ce lien</" "lettre de motivation en cliquant sur <a href='{url}'>ce lien</a>."
"a>."
#: participation/models.py:124 #: participation/models.py:110
msgid "No motivation letter" msgid "No motivation letter"
msgstr "Pas de lettre de motivation" msgstr "Pas de lettre de motivation"
#: participation/models.py:133 #: participation/models.py:117
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has less than 4 students ({nb_students}). You can invite " "The team has less than 4 students ({nb_students}).You can invite more "
"more students to join the team using the invite code <strong>{code}</strong>." "students to join the team using the invite code <strong>{code}</strong>."
msgstr "" msgstr ""
"L'équipe {trigram} a moins de 4 élèves ({nb_students}). Vous pouvez inviter " "L'équipe a moins de 4 élèves ({nb_students}). Vous pouvez inviter plus "
"plus d'élèves à rejoindre l'équipe en utilisant le code d'invitation " "d'élèves à rejoindre l'équipe en utilisant le code d'invitation "
"<strong>{code}</strong>." "<strong>{code}</strong>."
#: participation/models.py:138 #: participation/models.py:121
msgid "Not enough students" msgid "Not enough students"
msgstr "Pas assez d'élèves" msgstr "Pas assez d'élèves"
#: participation/models.py:145 #: participation/models.py:128
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has no coach. You can invite a coach to join the team " "The team has no coach.You can invite a coach to join the team using "
"using the invite code <strong>{code}</strong>." "the invite code <strong>{code}</strong>."
msgstr "" msgstr ""
"L'équipe {trigram} n'a pas d'encadrant⋅e. Vous pouvez invite un⋅e " "L'équipe n'a pas d'encadrant⋅e. Vous pouvez invite un⋅e encadrant⋅e à rejoindre "
"encadrant⋅e à rejoindre l'équipe en utilisant le code d'invitation " "l'équipe en utilisant le code d'invitation <strong>{code}</strong>."
"<strong>{code}</strong>."
#: participation/models.py:149 #: participation/models.py:132
msgid "No coach" msgid "No coach"
msgstr "Pas d'encadrant⋅e" msgstr "Pas d'encadrant⋅e"
#: participation/models.py:156 #: participation/models.py:139
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has more than 6 students ({nb_students}) or more than 2 " "The team has more than 6 students ({nb_students}) or more than 2 coaches "
"coaches ({nb_coaches}).You have to restrict the number of students and " "({nb_coaches}).You have to restrict the number of students and coaches to 6 "
"coaches to 6 and 2, respectively." "and 2, respectively."
msgstr "" msgstr ""
"L'équipe {trigram} a plus de 6 élèves ({nb_students}) ou plus de 2 " "L'équipe a plus de 6 élèves ({nb_students}) ou plus de 2 encadrant⋅es "
"encadrant⋅es ({nb_coaches}). Vous devez restreindre le nombre d'élèves et " "({nb_coaches}). Vous devez restreindre le nombre d'élèves et d'encadrant⋅es "
"d'encadrant⋅es à 6 et 2, respectivement." "à 6 et 2, respectivement."
#: participation/models.py:161 #: participation/models.py:143
msgid "Too many members" msgid "Too many members"
msgstr "Trop de membres" msgstr "Trop de membres"
#: participation/models.py:168 #: participation/models.py:194
#, python-brace-format
msgid ""
"The team {trigram} is ready to be validated. You can request validation on "
"<a href='{url}'>the page of your team</a>."
msgstr ""
"L'équipe {trigram} est prête à être validée. Vous pouvez demander la "
"validation sur <a href='{url}'>la page de votre équipe</a>."
#: participation/models.py:173 participation/models.py:184
msgid "Validate team"
msgstr "Valider l'équipe"
#: participation/models.py:179
#, python-brace-format
msgid ""
"The team {trigram} has enough participants, but is not ready to be "
"validated. Please make sure that all the participants have uploaded the "
"required documents. To invite more participants, use the invite code "
"<strong>{code}</strong>."
msgstr ""
"L'équipe {trigram} a assez de participant⋅es, mais n'est pas prête à être "
"validée. Assurez-vous que tou⋅tes les participant⋅es ont envoyé les "
"documents requis. Pour inviter plus de participant⋅es, utilisez le code "
"d'invitation <strong>{code}</strong>."
#: participation/models.py:190
#, python-brace-format
msgid ""
"The team {trigram} has not been validated by the organizers yet. Please be "
"patient."
msgstr ""
"L'équipe {trigram} n'a pas encore été validée par les organisateurices. "
"Merci de patienter."
#: participation/models.py:193
msgid "Pending validation"
msgstr "Validation en attente"
#: participation/models.py:244
#, python-brace-format #, python-brace-format
msgid "Team {name} ({trigram})" msgid "Team {name} ({trigram})"
msgstr "Équipe {name} ({trigram})" msgstr "Équipe {name} ({trigram})"
#: participation/models.py:263 #: participation/models.py:213
msgid "start" msgid "start"
msgstr "début" msgstr "début"
#: participation/models.py:268 #: participation/models.py:218
msgid "end" msgid "end"
msgstr "fin" msgstr "fin"
#: participation/models.py:274 #: participation/models.py:224
#: participation/templates/participation/tournament_detail.html:18 #: participation/templates/participation/tournament_detail.html:18
msgid "place" msgid "place"
msgstr "lieu" msgstr "lieu"
#: participation/models.py:278 #: participation/models.py:228
msgid "max team count" msgid "max team count"
msgstr "nombre maximal d'équipes" msgstr "nombre maximal d'équipes"
#: participation/models.py:283 #: participation/models.py:233
#: participation/templates/participation/tournament_detail.html:21 #: participation/templates/participation/tournament_detail.html:21
msgid "price" msgid "price"
msgstr "prix" msgstr "prix"
#: participation/models.py:288 #: participation/models.py:238
#: participation/templates/participation/tournament_detail.html:24 #: participation/templates/participation/tournament_detail.html:24
msgid "remote" msgid "remote"
msgstr "à distance" msgstr "à distance"
#: participation/models.py:293 #: participation/models.py:243
msgid "limit date for registrations" msgid "limit date for registrations"
msgstr "date limite d'inscription" msgstr "date limite d'inscription"
#: participation/models.py:298 #: participation/models.py:248
msgid "limit date to upload solutions" msgid "limit date to upload solutions"
msgstr "date limite pour envoyer les solutions" msgstr "date limite pour envoyer les solutions"
#: participation/models.py:303 #: participation/models.py:253
msgid "random draw for solutions" msgid "random draw for solutions"
msgstr "tirage au sort des solutions" msgstr "tirage au sort des solutions"
#: participation/models.py:308 #: participation/models.py:258
msgid "limit date to upload the syntheses for the first phase" msgid "limit date to upload the syntheses for the first phase"
msgstr "date limite pour envoyer les notes de synthèses pour la première phase" msgstr "date limite pour envoyer les notes de synthèses pour la première phase"
#: participation/models.py:313 #: participation/models.py:263
msgid "date when the solutions for the second round become available" msgid "date when the solutions for the second round become available"
msgstr "date à laquelle les solutions pour le second tour sont accessibles" msgstr "date à laquelle les solutions pour le second tour sont accessibles"
#: participation/models.py:318 #: participation/models.py:268
msgid "limit date to upload the syntheses for the second phase" msgid "limit date to upload the syntheses for the second phase"
msgstr "date limite d'envoi des notes de synthèse pour la seconde phase" msgstr "date limite d'envoi des notes de synthèse pour la seconde phase"
#: participation/models.py:323 #: participation/models.py:273
#: participation/templates/participation/tournament_detail.html:48 #: participation/templates/participation/tournament_detail.html:48
msgid "description" msgid "description"
msgstr "description" msgstr "description"
#: participation/models.py:329 #: participation/models.py:279
#: participation/templates/participation/tournament_detail.html:12 #: participation/templates/participation/tournament_detail.html:12
msgid "organizers" msgid "organizers"
msgstr "organisateur⋅rices" msgstr "organisateur⋅rices"
#: participation/models.py:334 #: participation/models.py:284
msgid "final" msgid "final"
msgstr "finale" msgstr "finale"
#: participation/models.py:418 registration/admin.py:93 #: participation/models.py:368 registration/admin.py:93
msgid "tournaments" msgid "tournaments"
msgstr "tournois" msgstr "tournois"
#: participation/models.py:447 #: participation/models.py:397
msgid "valid team" msgid "valid team"
msgstr "équipe valide" msgstr "équipe valide"
#: participation/models.py:448 #: participation/models.py:398
msgid "The participation got the validation of the organizers." msgid "The participation got the validation of the organizers."
msgstr "La participation a été validée par les organisateur⋅rices." msgstr "La participation a été validée par les organisateur⋅rices."
#: participation/models.py:454 #: participation/models.py:404
msgid "The team is selected for the final tournament." msgid "The team is selected for the final tournament."
msgstr "L'équipe est sélectionnée pour la finale." msgstr "L'équipe est sélectionnée pour la finale."
#: participation/models.py:461 #: participation/models.py:411
#, python-brace-format #, python-brace-format
msgid "Participation of the team {name} ({trigram})" msgid "Participation of the team {name} ({trigram})"
msgstr "Participation de l'équipe {name} ({trigram})" msgstr "Participation de l'équipe {name} ({trigram})"
#: participation/models.py:465 participation/models.py:498 #: participation/models.py:415 participation/models.py:448
msgid "participations" msgid "participations"
msgstr "participations" msgstr "participations"
#: participation/models.py:480 participation/models.py:481 #: participation/models.py:430 participation/models.py:431
#, python-brace-format #, python-brace-format
msgid "Round {round}" msgid "Round {round}"
msgstr "Tour {round}" msgstr "Tour {round}"
#: participation/models.py:504 #: participation/models.py:454
msgid "juries" msgid "juries"
msgstr "jurys" msgstr "jurys"
#: participation/models.py:511 #: participation/models.py:461
msgid "BigBlueButton URL" msgid "BigBlueButton URL"
msgstr "Lien BigBlueButton" msgstr "Lien BigBlueButton"
#: participation/models.py:512 #: participation/models.py:462
msgid "The link of the BBB visio for this pool." msgid "The link of the BBB visio for this pool."
msgstr "Le lien du salon BBB pour cette poule." msgstr "Le lien du salon BBB pour cette poule."
#: participation/models.py:517 #: participation/models.py:467
msgid "results available" msgid "results available"
msgstr "résultats disponibles" msgstr "résultats disponibles"
#: participation/models.py:518 #: participation/models.py:468
msgid "" msgid ""
"Check this case when results become accessible to teams. They stay " "Check this case when results become accessible to teams. They stay "
"accessible to you. Only averages are given." "accessible to you. Only averages are given."
@ -839,28 +786,28 @@ msgstr ""
"Ils restent toujours accessibles pour vous. Seules les moyennes sont " "Ils restent toujours accessibles pour vous. Seules les moyennes sont "
"communiquées." "communiquées."
#: participation/models.py:538 #: participation/models.py:488
#, python-brace-format #, python-brace-format
msgid "Pool of day {round} for tournament {tournament} with teams {teams}" msgid "Pool of day {round} for tournament {tournament} with teams {teams}"
msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}" msgstr "Poule du jour {round} du tournoi {tournament} avec les équipes {teams}"
#: participation/models.py:558 #: participation/models.py:508
msgid "position" msgid "position"
msgstr "position" msgstr "position"
#: participation/models.py:565 #: participation/models.py:515
msgid "defended solution" msgid "defended solution"
msgstr "solution défendue" msgstr "solution défendue"
#: participation/models.py:598 #: participation/models.py:548
msgid "observer" msgid "observer"
msgstr "observateur⋅rice" msgstr "observateur⋅rice"
#: participation/models.py:603 #: participation/models.py:553
msgid "penalties" msgid "penalties"
msgstr "pénalités" msgstr "pénalités"
#: participation/models.py:605 #: participation/models.py:555
msgid "" msgid ""
"Number of penalties for the defender. The defender will loose a 0.5 " "Number of penalties for the defender. The defender will loose a 0.5 "
"coefficient per penalty." "coefficient per penalty."
@ -868,124 +815,124 @@ msgstr ""
"Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 " "Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 "
"sur sa présentation orale par pénalité." "sur sa présentation orale par pénalité."
#: participation/models.py:681 participation/models.py:684 #: participation/models.py:631 participation/models.py:634
#: participation/models.py:687 participation/models.py:690 #: participation/models.py:637 participation/models.py:640
#, python-brace-format #, python-brace-format
msgid "Team {trigram} is not registered in the pool." msgid "Team {trigram} is not registered in the pool."
msgstr "L'équipe {trigram} n'est pas inscrite dans la poule." msgstr "L'équipe {trigram} n'est pas inscrite dans la poule."
#: participation/models.py:695 #: participation/models.py:645
#, python-brace-format #, python-brace-format
msgid "Passage of {defender} for problem {problem}" msgid "Passage of {defender} for problem {problem}"
msgstr "Passage de {defender} pour le problème {problem}" msgstr "Passage de {defender} pour le problème {problem}"
#: participation/models.py:699 participation/models.py:708 #: participation/models.py:649 participation/models.py:658
#: participation/models.py:789 participation/models.py:831 #: participation/models.py:739 participation/models.py:781
msgid "passage" msgid "passage"
msgstr "passage" msgstr "passage"
#: participation/models.py:700 #: participation/models.py:650
msgid "passages" msgid "passages"
msgstr "passages" msgstr "passages"
#: participation/models.py:719 #: participation/models.py:669
msgid "difference" msgid "difference"
msgstr "différence" msgstr "différence"
#: participation/models.py:720 #: participation/models.py:670
msgid "Score to add/remove on the final score" msgid "Score to add/remove on the final score"
msgstr "Score à ajouter/retrancher au score final" msgstr "Score à ajouter/retrancher au score final"
#: participation/models.py:727 #: participation/models.py:677
msgid "tweak" msgid "tweak"
msgstr "harmonisation" msgstr "harmonisation"
#: participation/models.py:728 #: participation/models.py:678
msgid "tweaks" msgid "tweaks"
msgstr "harmonisations" msgstr "harmonisations"
#: participation/models.py:756 #: participation/models.py:706
msgid "solution for the final tournament" msgid "solution for the final tournament"
msgstr "solution pour la finale" msgstr "solution pour la finale"
#: participation/models.py:761 participation/models.py:800 #: participation/models.py:711 participation/models.py:750
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: participation/models.py:767 #: participation/models.py:717
#, python-brace-format #, python-brace-format
msgid "Solution of team {team} for problem {problem}" msgid "Solution of team {team} for problem {problem}"
msgstr "Solution de l'équipe {team} pour le problème {problem}" msgstr "Solution de l'équipe {team} pour le problème {problem}"
#: participation/models.py:769 #: participation/models.py:719
msgid "for final" msgid "for final"
msgstr "pour la finale" msgstr "pour la finale"
#: participation/models.py:772 #: participation/models.py:722
msgid "solution" msgid "solution"
msgstr "solution" msgstr "solution"
#: participation/models.py:773 #: participation/models.py:723
msgid "solutions" msgid "solutions"
msgstr "solutions" msgstr "solutions"
#: participation/models.py:806 #: participation/models.py:756
#, python-brace-format #, python-brace-format
msgid "Synthesis of {team} as {type} for problem {problem} of {defender}" msgid "Synthesis of {team} as {type} for problem {problem} of {defender}"
msgstr "" msgstr ""
"Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "Note de synthèse de l'équipe {team} en tant que {type} pour le problème "
"{problem} de {defender}" "{problem} de {defender}"
#: participation/models.py:814 #: participation/models.py:764
msgid "synthesis" msgid "synthesis"
msgstr "note de synthèse" msgstr "note de synthèse"
#: participation/models.py:815 #: participation/models.py:765
msgid "syntheses" msgid "syntheses"
msgstr "notes de synthèse" msgstr "notes de synthèse"
#: participation/models.py:824 #: participation/models.py:774
msgid "jury" msgid "jury"
msgstr "jury" msgstr "jury"
#: participation/models.py:836 #: participation/models.py:786
msgid "defender writing note" msgid "defender writing note"
msgstr "note d'écrit de la défense" msgstr "note d'écrit de la défense"
#: participation/models.py:842 #: participation/models.py:792
msgid "defender oral note" msgid "defender oral note"
msgstr "note d'oral de la défense" msgstr "note d'oral de la défense"
#: participation/models.py:848 #: participation/models.py:798
msgid "opponent writing note" msgid "opponent writing note"
msgstr "note d'écrit de l'opposition" msgstr "note d'écrit de l'opposition"
#: participation/models.py:854 #: participation/models.py:804
msgid "opponent oral note" msgid "opponent oral note"
msgstr "note d'oral de l'opposition" msgstr "note d'oral de l'opposition"
#: participation/models.py:860 #: participation/models.py:810
msgid "reporter writing note" msgid "reporter writing note"
msgstr "note d'écrit du rapportage" msgstr "note d'écrit du rapportage"
#: participation/models.py:866 #: participation/models.py:816
msgid "reporter oral note" msgid "reporter oral note"
msgstr "note d'oral du rapportage" msgstr "note d'oral du rapportage"
#: participation/models.py:872 #: participation/models.py:822
msgid "observer note" msgid "observer note"
msgstr "note de l'observation" msgstr "note de l'observation"
#: participation/models.py:901 #: participation/models.py:851
#, python-brace-format #, python-brace-format
msgid "Notes of {jury} for {passage}" msgid "Notes of {jury} for {passage}"
msgstr "Notes de {jury} pour le {passage}" msgstr "Notes de {jury} pour le {passage}"
#: participation/models.py:908 #: participation/models.py:858
msgid "note" msgid "note"
msgstr "note" msgstr "note"
#: participation/models.py:909 #: participation/models.py:859
msgid "notes" msgid "notes"
msgstr "notes" msgstr "notes"
@ -2277,8 +2224,8 @@ msgid ""
"your scholarship attestation." "your scholarship attestation."
msgstr "" msgstr ""
"Le prix du tournoi est de %(price)s €. Les frais de participation sont " "Le prix du tournoi est de %(price)s €. Les frais de participation sont "
"offerts pour les encadrant⋅es et les élèves boursièr⋅es. Si c'est le cas, " "offerts pour les encadrant⋅es et les élèves boursièr⋅es. Si c'est le "
"merci de nous transmettre votre notification de bourse." "cas, merci de nous transmettre votre notification de bourse."
#: registration/templates/registration/payment_form.html:17 #: registration/templates/registration/payment_form.html:17
msgid "" msgid ""
@ -2480,23 +2427,23 @@ msgid "Impersonate"
msgstr "Impersonifier" msgstr "Impersonifier"
#: registration/templates/registration/user_detail.html:188 #: registration/templates/registration/user_detail.html:188
#: registration/views.py:313 #: registration/views.py:312
msgid "Upload photo authorization" msgid "Upload photo authorization"
msgstr "Téléverser l'autorisation de droit à l'image" msgstr "Téléverser l'autorisation de droit à l'image"
#: registration/templates/registration/user_detail.html:193 #: registration/templates/registration/user_detail.html:193
#: registration/views.py:334 #: registration/views.py:333
msgid "Upload health sheet" msgid "Upload health sheet"
msgstr "Téléverser la fiche sanitaire" msgstr "Téléverser la fiche sanitaire"
#: registration/templates/registration/user_detail.html:198 #: registration/templates/registration/user_detail.html:198
#: registration/views.py:355 #: registration/views.py:354
msgid "Upload vaccine sheet" msgid "Upload vaccine sheet"
msgstr "Téléverser le carnet de vaccination" msgstr "Téléverser le carnet de vaccination"
#: registration/templates/registration/user_detail.html:203 #: registration/templates/registration/user_detail.html:203
#: registration/templates/registration/user_detail.html:208 #: registration/templates/registration/user_detail.html:208
#: registration/views.py:376 #: registration/views.py:375
msgid "Upload parental authorization" msgid "Upload parental authorization"
msgstr "Téléverser l'autorisation parentale" msgstr "Téléverser l'autorisation parentale"
@ -2529,32 +2476,32 @@ msgstr "Renvoyé le lien de validation de l'adresse mail"
msgid "Detail of user {user}" msgid "Detail of user {user}"
msgstr "Détails de l'utilisateur⋅rice {user}" msgstr "Détails de l'utilisateur⋅rice {user}"
#: registration/views.py:273 #: registration/views.py:272
#, python-brace-format #, python-brace-format
msgid "Update user {user}" msgid "Update user {user}"
msgstr "Mise à jour de l'utilisateur⋅rice {user}" msgstr "Mise à jour de l'utilisateur⋅rice {user}"
#: registration/views.py:488 #: registration/views.py:487
#, python-brace-format #, python-brace-format
msgid "Photo authorization of {student}.{ext}" msgid "Photo authorization of {student}.{ext}"
msgstr "Autorisation de droit à l'image de {student}.{ext}" msgstr "Autorisation de droit à l'image de {student}.{ext}"
#: registration/views.py:511 #: registration/views.py:510
#, python-brace-format #, python-brace-format
msgid "Health sheet of {student}.{ext}" msgid "Health sheet of {student}.{ext}"
msgstr "Fiche sanitaire de {student}.{ext}" msgstr "Fiche sanitaire de {student}.{ext}"
#: registration/views.py:534 #: registration/views.py:533
#, python-brace-format #, python-brace-format
msgid "Vaccine sheet of {student}.{ext}" msgid "Vaccine sheet of {student}.{ext}"
msgstr "Carnet de vaccination de {student}.{ext}" msgstr "Carnet de vaccination de {student}.{ext}"
#: registration/views.py:557 #: registration/views.py:556
#, python-brace-format #, python-brace-format
msgid "Parental authorization of {student}.{ext}" msgid "Parental authorization of {student}.{ext}"
msgstr "Autorisation parentale de {student}.{ext}" msgstr "Autorisation parentale de {student}.{ext}"
#: registration/views.py:579 #: registration/views.py:578
#, python-brace-format #, python-brace-format
msgid "Scholarship attestation of {user}.{ext}" msgid "Scholarship attestation of {user}.{ext}"
msgstr "Notification de bourse de {user}.{ext}" msgstr "Notification de bourse de {user}.{ext}"
@ -2717,6 +2664,6 @@ msgstr "Résultats"
msgid "No results found." msgid "No results found."
msgstr "Aucun résultat." msgstr "Aucun résultat."
#: tfjm/templates/sidebar.html:10 tfjm/templates/sidebar.html:21 #: tfjm/templates/sidebar.html:6
msgid "Informations" msgid "Informations"
msgstr "Informations" msgstr "Informations"

View File

@ -67,8 +67,6 @@ class Team(models.Model):
return self.participants.filter(coachregistration__isnull=False) return self.participants.filter(coachregistration__isnull=False)
def can_validate(self): def can_validate(self):
if any(not r.email_confirmed for r in self.participants.all()):
return False
if self.students.count() < 4: if self.students.count() < 4:
return False return False
if not self.coaches.exists(): if not self.coaches.exists():
@ -93,33 +91,21 @@ class Team(models.Model):
if self.participation.valid is None: if self.participation.valid is None:
if not self.participation.tournament: if not self.participation.tournament:
text = _("The team {trigram} is not registered to any tournament. " text = _("The team is not registered to any tournament. "
"You can register the team to a tournament using <a href='{url}'>this link</a>.") "You can register the team to a tournament using <a href='{url}'>this link</a>.")
url = reverse_lazy("participation:update_team", args=(self.pk,)) url = reverse_lazy("participation:update_team", args=(self.pk,))
content = format_lazy(text, trigram=self.trigram, url=url) content = format_lazy(text, url=url)
informations.append({ informations.append({
'title': _("No tournament"), 'title': _("No tournament"),
'type': "danger", 'type': "danger",
'priority': 4, 'priority': 4,
'content': content, 'content': content,
}) })
else: elif not self.motivation_letter:
text = _("Registrations for the tournament of {tournament} are ending on the {date:%Y-%m-%d %H:%M}.") text = _("The team has not uploaded a motivation letter. "
content = format_lazy(text,
tournament=self.participation.tournament.name,
date=self.participation.tournament.inscription_limit)
informations.append({
'title': _("Registrations closure"),
'type': "info",
'priority': 1,
'content': content,
})
if not self.motivation_letter:
text = _("The team {trigram} has not uploaded a motivation letter. "
"You can upload your motivation letter using <a href='{url}'>this link</a>.") "You can upload your motivation letter using <a href='{url}'>this link</a>.")
url = reverse_lazy("participation:upload_team_motivation_letter", args=(self.pk,)) url = reverse_lazy("participation:upload_team_motivation_letter", args=(self.pk,))
content = format_lazy(text, trigram=self.trigram, url=url) content = format_lazy(text, url=url)
informations.append({ informations.append({
'title': _("No motivation letter"), 'title': _("No motivation letter"),
'type': "danger", 'type': "danger",
@ -127,13 +113,10 @@ class Team(models.Model):
'content': content, 'content': content,
}) })
nb_students = self.students.count() if (nb_students := self.students.count()) < 4:
nb_coaches = self.coaches.count() text = _("The team has less than 4 students ({nb_students})."
if nb_students < 4: "You can invite more students to join the team using the invite code <strong>{code}</strong>.")
text = _("The team {trigram} has less than 4 students ({nb_students}). " content = format_lazy(text, nb_students=nb_students, code=self.access_code)
"You can invite more students to join the team using "
"the invite code <strong>{code}</strong>.")
content = format_lazy(text, trigram=self.trigram, nb_students=nb_students, code=self.access_code)
informations.append({ informations.append({
'title': _("Not enough students"), 'title': _("Not enough students"),
'type': "warning", 'type': "warning",
@ -141,10 +124,10 @@ class Team(models.Model):
'content': content, 'content': content,
}) })
if not nb_coaches: if not self.coaches.exists():
text = _("The team {trigram} has no coach. " text = _("The team has no coach."
"You can invite a coach to join the team using the invite code <strong>{code}</strong>.") "You can invite a coach to join the team using the invite code <strong>{code}</strong>.")
content = format_lazy(text, trigram=self.trigram, nb_students=nb_students, code=self.access_code) content = format_lazy(text, nb_students=nb_students, code=self.access_code)
informations.append({ informations.append({
'title': _("No coach"), 'title': _("No coach"),
'type': "warning", 'type': "warning",
@ -152,49 +135,16 @@ class Team(models.Model):
'content': content, 'content': content,
}) })
if nb_students > 6 or nb_coaches > 2: if (nb_students := self.students.count()) > 6 or self.coaches.count() > 2:
text = _("The team {trigram} has more than 6 students ({nb_students}) " text = _("The team has more than 6 students ({nb_students}) or more than 2 coaches ({nb_coaches})."
"or more than 2 coaches ({nb_coaches})."
"You have to restrict the number of students and coaches to 6 and 2, respectively.") "You have to restrict the number of students and coaches to 6 and 2, respectively.")
content = format_lazy(text, trigram=self.trigram, nb_students=nb_students, nb_coaches=nb_coaches) content = format_lazy(text, nb_students=nb_students, nb_coaches=self.coaches.count())
informations.append({ informations.append({
'title': _("Too many members"), 'title': _("Too many members"),
'type': "warning", 'type': "warning",
'priority': 7, 'priority': 7,
'content': content, 'content': content,
}) })
elif nb_students >= 4 and nb_coaches >= 1:
if self.can_validate():
text = _("The team {trigram} is ready to be validated. "
"You can request validation on <a href='{url}'>the page of your team</a>.")
url = reverse_lazy("participation:team_detail", args=(self.pk,))
content = format_lazy(text, trigram=self.trigram, url=url)
informations.append({
'title': _("Validate team"),
'type': "success",
'priority': 2,
'content': content,
})
else:
text = _("The team {trigram} has enough participants, but is not ready to be validated. "
"Please make sure that all the participants have uploaded the required documents. "
"To invite more participants, use the invite code <strong>{code}</strong>.")
content = format_lazy(text, trigram=self.trigram, code=self.access_code)
informations.append({
'title': _("Validate team"),
'type': "warning",
'priority': 10,
'content': content,
})
elif self.participation.valid is False:
text = _("The team {trigram} has not been validated by the organizers yet. Please be patient.")
content = format_lazy(text, trigram=self.trigram)
informations.append({
'title': _("Pending validation"),
'type': "warning",
'priority': 2,
'content': content,
})
return informations return informations

View File

@ -90,7 +90,7 @@ class JoinTeamView(LoginRequiredMixin, FormView):
model = Team model = Team
form_class = JoinTeamForm form_class = JoinTeamForm
extra_context = dict(title=_("Join team")) extra_context = dict(title=_("Join team"))
template_name = "participation/join_team.html" template_name = "participation/create_team.html"
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
user = request.user user = request.user

View File

@ -263,7 +263,6 @@ class UserUpdateView(UserMixin, UpdateView):
Update the detail about a user and its registration. Update the detail about a user and its registration.
""" """
model = User model = User
context_object_name = "user_object"
form_class = UserForm form_class = UserForm
template_name = "registration/update_user.html" template_name = "registration/update_user.html"

View File

@ -4,13 +4,13 @@
<footer class="text-primary mt-lg-auto"> <footer class="text-primary mt-lg-auto">
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-sm-2 col-lg-1"> <div class="col-sm-1">
<span class="text-muted mr-1"> <span class="text-muted mr-1">
<a target="_blank" href="mailto:&#99;&#111;&#110;&#116;&#97;&#99;&#116;&#64;&#116;&#102;&#106;&#109;&#46;&#111;&#114;&#103;" <a target="_blank" href="mailto:&#99;&#111;&#110;&#116;&#97;&#99;&#116;&#64;&#116;&#102;&#106;&#109;&#46;&#111;&#114;&#103;"
class="text-muted"><i class="fas fa-envelope"></i> {% trans "Contact us" %}</a> class="text-muted"><i class="fas fa-envelope"></i> {% trans "Contact us" %}</a>
</span> </span>
</div> </div>
<div class="col-sm-2 col-lg-1"> <div class="col-sm-1">
<form action="{% url 'set_language' %}" method="post" <form action="{% url 'set_language' %}" method="post"
class="form-inline"> class="form-inline">
{% csrf_token %} {% csrf_token %}
@ -32,7 +32,7 @@
</noscript> </noscript>
</form> </form>
</div> </div>
<div class="col-sm-7 col-lg-9"> <div class="col-sm-9">
<a target="_blank" class="text-muted" href="{% url "about" %}">{% trans "About" %}</a> &nbsp; &mdash; &nbsp; <a target="_blank" class="text-muted" href="{% url "about" %}">{% trans "About" %}</a> &nbsp; &mdash; &nbsp;
<a target="_blank" class="text-muted" href="/doc/">Documentation</a> &nbsp; &mdash; &nbsp; <a target="_blank" class="text-muted" href="/doc/">Documentation</a> &nbsp; &mdash; &nbsp;