1
0
mirror of https://gitlab.com/animath/si/plateforme.git synced 2025-02-24 11:01:20 +00:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Emmy D'Anello
6595409df0
Add Google Sheets link on tournament and pool pages
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
2024-03-30 19:15:21 +01:00
Emmy D'Anello
f1012efcaa
Consider tweaks in notation sheet
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
2024-03-30 18:57:05 +01:00
5 changed files with 238 additions and 157 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-03-29 19:18+0100\n" "POT-Creation-Date: 2024-03-30 19: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,22 +22,22 @@ msgid "API"
msgstr "API" msgstr "API"
#: draw/admin.py:39 draw/admin.py:57 draw/admin.py:75 #: draw/admin.py:39 draw/admin.py:57 draw/admin.py:75
#: participation/admin.py:109 participation/models.py:250 #: participation/admin.py:109 participation/models.py:254
#: participation/tables.py:88 #: participation/tables.py:88
msgid "teams" msgid "teams"
msgstr "équipes" msgstr "équipes"
#: draw/admin.py:53 draw/admin.py:71 draw/admin.py:88 draw/models.py:24 #: draw/admin.py:53 draw/admin.py:71 draw/admin.py:88 draw/models.py:24
#: participation/admin.py:79 participation/admin.py:140 #: participation/admin.py:79 participation/admin.py:140
#: participation/admin.py:171 participation/models.py:419 #: participation/admin.py:171 participation/models.py:638
#: participation/models.py:443 participation/models.py:513 #: participation/models.py:662 participation/models.py:732
#: registration/models.py:618 #: registration/models.py:618
#: registration/templates/registration/payment_form.html:53 #: registration/templates/registration/payment_form.html:53
msgid "tournament" msgid "tournament"
msgstr "tournoi" msgstr "tournoi"
#: draw/admin.py:92 draw/models.py:232 draw/models.py:427 #: draw/admin.py:92 draw/models.py:232 draw/models.py:427
#: participation/models.py:517 #: participation/models.py:736
msgid "round" msgid "round"
msgstr "tour" msgstr "tour"
@ -175,7 +175,7 @@ msgstr "La poule en cours, où les équipes choisissent leurs problèmes"
msgid "rounds" msgid "rounds"
msgstr "tours" msgstr "tours"
#: draw/models.py:255 participation/models.py:531 #: draw/models.py:255 participation/models.py:750
msgid "letter" msgid "letter"
msgstr "lettre" msgstr "lettre"
@ -214,17 +214,17 @@ msgid "Pool {letter}{number}"
msgstr "Poule {letter}{number}" msgstr "Poule {letter}{number}"
#: draw/models.py:408 draw/models.py:435 participation/admin.py:136 #: draw/models.py:408 draw/models.py:435 participation/admin.py:136
#: participation/admin.py:155 participation/models.py:601 #: participation/admin.py:155 participation/models.py:1227
#: participation/models.py:610 participation/tables.py:84 #: participation/models.py:1236 participation/tables.py:84
msgid "pool" msgid "pool"
msgstr "poule" msgstr "poule"
#: draw/models.py:409 participation/models.py:602 #: draw/models.py:409 participation/models.py:1228
msgid "pools" msgid "pools"
msgstr "poules" msgstr "poules"
#: draw/models.py:421 participation/models.py:503 participation/models.py:771 #: draw/models.py:421 participation/models.py:722 participation/models.py:1397
#: participation/models.py:801 participation/models.py:843 #: participation/models.py:1427 participation/models.py:1469
msgid "participation" msgid "participation"
msgstr "participation" msgstr "participation"
@ -248,8 +248,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:458 draw/models.py:481 participation/models.py:624 #: draw/models.py:458 draw/models.py:481 participation/models.py:1250
#: participation/models.py:808 #: participation/models.py:1434
#, python-brace-format #, python-brace-format
msgid "Problem #{problem}" msgid "Problem #{problem}"
msgstr "Problème n°{problem}" msgstr "Problème n°{problem}"
@ -332,7 +332,7 @@ msgid "Continue draw"
msgstr "Continuer le tirage" msgstr "Continuer le tirage"
#: draw/templates/draw/tournament_content.html:216 participation/admin.py:167 #: draw/templates/draw/tournament_content.html:216 participation/admin.py:167
#: participation/models.py:249 participation/models.py:434 #: participation/models.py:253 participation/models.py:653
#: registration/models.py:156 registration/models.py:609 #: registration/models.py:156 registration/models.py:609
#: registration/tables.py:39 #: registration/tables.py:39
#: registration/templates/registration/payment_form.html:52 #: registration/templates/registration/payment_form.html:52
@ -344,10 +344,10 @@ msgstr "équipe"
#: draw/templates/draw/tournament_content.html:228 #: draw/templates/draw/tournament_content.html:228
#: draw/templates/draw/tournament_content.html:229 #: draw/templates/draw/tournament_content.html:229
#: draw/templates/draw/tournament_content.html:230 #: draw/templates/draw/tournament_content.html:230
#: participation/templates/participation/pool_detail.html:85 #: participation/templates/participation/pool_detail.html:97
#: participation/templates/participation/pool_detail.html:89 #: participation/templates/participation/pool_detail.html:101
#: participation/templates/participation/pool_detail.html:94 #: participation/templates/participation/pool_detail.html:106
#: participation/templates/participation/pool_detail.html:98 #: participation/templates/participation/pool_detail.html:110
msgid "Room" msgid "Room"
msgstr "Salle" msgstr "Salle"
@ -451,26 +451,26 @@ msgstr "Changelog de type \"{action}\" pour le modèle {model} le {timestamp}"
msgid "valid" msgid "valid"
msgstr "valide" msgstr "valide"
#: participation/admin.py:87 participation/models.py:455 #: participation/admin.py:87 participation/models.py:674
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:124 participation/admin.py:183 #: participation/admin.py:124 participation/admin.py:183
#: participation/models.py:631 participation/tables.py:112 #: participation/models.py:1257 participation/tables.py:112
msgid "defender" msgid "defender"
msgstr "défenseur⋅se" msgstr "défenseur⋅se"
#: participation/admin.py:128 participation/models.py:638 #: participation/admin.py:128 participation/models.py:1264
#: participation/models.py:855 #: participation/models.py:1481
msgid "opponent" msgid "opponent"
msgstr "opposant⋅e" msgstr "opposant⋅e"
#: participation/admin.py:132 participation/models.py:645 #: participation/admin.py:132 participation/models.py:1271
#: participation/models.py:856 #: participation/models.py:1482
msgid "reporter" msgid "reporter"
msgstr "rapporteur⋅e" msgstr "rapporteur⋅e"
#: participation/admin.py:187 participation/models.py:806 #: participation/admin.py:187 participation/models.py:1432
msgid "problem" msgid "problem"
msgstr "numéro de problème" msgstr "numéro de problème"
@ -478,7 +478,7 @@ msgstr "numéro de problème"
msgid "This name is already used." msgid "This name is already used."
msgstr "Ce nom est déjà utilisé." msgstr "Ce nom est déjà utilisé."
#: participation/forms.py:37 participation/models.py:39 #: participation/forms.py:37 participation/models.py:43
msgid "The trigram must be composed of three uppercase letters." msgid "The trigram must be composed of three uppercase letters."
msgstr "Le trigramme doit être composé de trois lettres majuscules." msgstr "Le trigramme doit être composé de trois lettres majuscules."
@ -529,7 +529,7 @@ msgid "The PDF file must not have more than 30 pages."
msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages." msgstr "Le fichier PDF ne doit pas avoir plus de 30 pages."
#: participation/forms.py:236 #: participation/forms.py:236
#: participation/templates/participation/pool_detail.html:130 #: participation/templates/participation/pool_detail.html:142
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
@ -576,32 +576,32 @@ 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:260 #: participation/models.py:36 participation/models.py:264
#: participation/tables.py:18 participation/tables.py:34 #: participation/tables.py:18 participation/tables.py:34
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
#: participation/models.py:38 participation/tables.py:39 #: participation/models.py:42 participation/tables.py:39
msgid "trigram" msgid "trigram"
msgstr "trigramme" msgstr "trigramme"
#: participation/models.py:44 #: participation/models.py:48
msgid "This trigram is forbidden." msgid "This trigram is forbidden."
msgstr "Ce trigramme est interdit." msgstr "Ce trigramme est interdit."
#: participation/models.py:50 #: participation/models.py:54
msgid "access code" msgid "access code"
msgstr "code d'accès" msgstr "code d'accès"
#: participation/models.py:51 #: participation/models.py:55
msgid "The access code let other people to join the team." msgid "The access code let other people to join the team."
msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe." msgstr "Le code d'accès permet aux autres participants de rejoindre l'équipe."
#: participation/models.py:55 #: participation/models.py:59
msgid "motivation letter" msgid "motivation letter"
msgstr "lettre de motivation" msgstr "lettre de motivation"
#: participation/models.py:96 #: participation/models.py:100
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} is not registered to any tournament. You can register the " "The team {trigram} is not registered to any tournament. You can register the "
@ -610,11 +610,11 @@ msgstr ""
"L'équipe {trigram} n'est inscrite à aucun tournoi. Vous pouvez inscrire " "L'équipe {trigram} n'est inscrite à aucun tournoi. Vous pouvez inscrire "
"l'équipe à un tournoi en cliquant sur <a href='{url}'>ce lien</a>." "l'équipe à un tournoi en cliquant sur <a href='{url}'>ce lien</a>."
#: participation/models.py:101 #: participation/models.py:105
msgid "No tournament" msgid "No tournament"
msgstr "Pas de tournoi" msgstr "Pas de tournoi"
#: participation/models.py:107 #: participation/models.py:111
msgid "" msgid ""
"Registrations for the tournament of {tournament} are ending on the {date:%Y-" "Registrations for the tournament of {tournament} are ending on the {date:%Y-"
"%m-%d %H:%M}." "%m-%d %H:%M}."
@ -622,11 +622,11 @@ msgstr ""
"Les inscriptions pour le tournoi de {tournament} se terminent le {date:%d/%m/" "Les inscriptions pour le tournoi de {tournament} se terminent le {date:%d/%m/"
"%Y %H:%M}." "%Y %H:%M}."
#: participation/models.py:112 #: participation/models.py:116
msgid "Registrations closure" msgid "Registrations closure"
msgstr "Clôture des inscriptions" msgstr "Clôture des inscriptions"
#: participation/models.py:119 #: participation/models.py:123
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has not uploaded a motivation letter. You can upload your " "The team {trigram} has not uploaded a motivation letter. You can upload your "
@ -636,11 +636,11 @@ msgstr ""
"envoyer votre lettre de motivation en cliquant sur <a href='{url}'>ce lien</" "envoyer votre lettre de motivation en cliquant sur <a href='{url}'>ce lien</"
"a>." "a>."
#: participation/models.py:124 #: participation/models.py:128
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:137
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has less than 4 students ({nb_students}). You can invite " "The team {trigram} has less than 4 students ({nb_students}). You can invite "
@ -650,11 +650,11 @@ msgstr ""
"plus d'élèves à rejoindre l'équipe en utilisant le code d'invitation " "plus 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:142
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:149
#, 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 {trigram} has no coach. You can invite a coach to join the team "
@ -664,11 +664,11 @@ msgstr ""
"encadrant⋅e à rejoindre l'équipe en utilisant le code d'invitation " "encadrant⋅e à rejoindre l'équipe en utilisant le code d'invitation "
"<strong>{code}</strong>." "<strong>{code}</strong>."
#: participation/models.py:149 #: participation/models.py:153
msgid "No coach" msgid "No coach"
msgstr "Pas d'encadrant⋅e" msgstr "Pas d'encadrant⋅e"
#: participation/models.py:156 #: participation/models.py:160
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has more than 6 students ({nb_students}) or more than 2 " "The team {trigram} has more than 6 students ({nb_students}) or more than 2 "
@ -679,11 +679,11 @@ msgstr ""
"encadrant⋅es ({nb_coaches}). Vous devez restreindre le nombre d'élèves et " "encadrant⋅es ({nb_coaches}). Vous devez restreindre le nombre d'élèves et "
"d'encadrant⋅es à 6 et 2, respectivement." "d'encadrant⋅es à 6 et 2, respectivement."
#: participation/models.py:161 #: participation/models.py:165
msgid "Too many members" msgid "Too many members"
msgstr "Trop de membres" msgstr "Trop de membres"
#: participation/models.py:168 #: participation/models.py:172
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} is ready to be validated. You can request validation on " "The team {trigram} is ready to be validated. You can request validation on "
@ -692,11 +692,11 @@ msgstr ""
"L'équipe {trigram} est prête à être validée. Vous pouvez demander la " "L'équipe {trigram} est prête à être validée. Vous pouvez demander la "
"validation sur <a href='{url}'>la page de votre équipe</a>." "validation sur <a href='{url}'>la page de votre équipe</a>."
#: participation/models.py:173 participation/models.py:184 #: participation/models.py:177 participation/models.py:188
msgid "Validate team" msgid "Validate team"
msgstr "Valider l'équipe" msgstr "Valider l'équipe"
#: participation/models.py:179 #: participation/models.py:183
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has enough participants, but is not ready to be " "The team {trigram} has enough participants, but is not ready to be "
@ -709,7 +709,7 @@ msgstr ""
"documents requis. Pour inviter plus de participant⋅es, utilisez le code " "documents requis. Pour inviter plus de participant⋅es, utilisez le code "
"d'invitation <strong>{code}</strong>." "d'invitation <strong>{code}</strong>."
#: participation/models.py:190 #: participation/models.py:194
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"The team {trigram} has not been validated by the organizers yet. Please be " "The team {trigram} has not been validated by the organizers yet. Please be "
@ -718,103 +718,107 @@ msgstr ""
"L'équipe {trigram} n'a pas encore été validée par les organisateurices. " "L'équipe {trigram} n'a pas encore été validée par les organisateurices. "
"Merci de patienter." "Merci de patienter."
#: participation/models.py:193 registration/models.py:492 #: participation/models.py:197 registration/models.py:492
msgid "Pending validation" msgid "Pending validation"
msgstr "Validation en attente" msgstr "Validation en attente"
#: participation/models.py:246 #: participation/models.py:250
#, 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:265 #: participation/models.py:269
msgid "start" msgid "start"
msgstr "début" msgstr "début"
#: participation/models.py:270 #: participation/models.py:274
msgid "end" msgid "end"
msgstr "fin" msgstr "fin"
#: participation/models.py:276 #: participation/models.py:280
#: 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:280 #: participation/models.py:284
msgid "max team count" msgid "max team count"
msgstr "nombre maximal d'équipes" msgstr "nombre maximal d'équipes"
#: participation/models.py:285 #: participation/models.py:289
#: 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:290 #: participation/models.py:294
#: 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:295 #: participation/models.py:299
msgid "limit date for registrations" msgid "limit date for registrations"
msgstr "date limite d'inscription" msgstr "date limite d'inscription"
#: participation/models.py:300 #: participation/models.py:304
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:305 #: participation/models.py:309
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:310 #: participation/models.py:314
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:315 #: participation/models.py:319
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:320 #: participation/models.py:324
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:325 #: participation/models.py:329
#: 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:331 #: participation/models.py:335
#: 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:336 #: participation/models.py:340
#: participation/templates/participation/team_detail.html:133 #: participation/templates/participation/team_detail.html:133
msgid "final" msgid "final"
msgstr "finale" msgstr "finale"
#: participation/models.py:420 registration/admin.py:125 #: participation/models.py:348
msgid "Google Sheet ID"
msgstr "ID de la feuille Google Sheets"
#: participation/models.py:639 registration/admin.py:125
msgid "tournaments" msgid "tournaments"
msgstr "tournois" msgstr "tournois"
#: participation/models.py:449 #: participation/models.py:668
msgid "valid team" msgid "valid team"
msgstr "équipe valide" msgstr "équipe valide"
#: participation/models.py:450 #: participation/models.py:669
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:456 #: participation/models.py:675
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:463 #: participation/models.py:682
#, 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:470 #: participation/models.py:689
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"<p>The team {trigram} has {nb_missing_payments} missing payments. Each " "<p>The team {trigram} has {nb_missing_payments} missing payments. Each "
@ -827,11 +831,11 @@ msgstr ""
"notification de bourse) pour participer au tournoi.</p><p>Les participant⋅es " "notification de bourse) pour participer au tournoi.</p><p>Les participant⋅es "
"qui n'ont pas encore payé sont : {participants}.</p>" "qui n'ont pas encore payé sont : {participants}.</p>"
#: participation/models.py:478 #: participation/models.py:697
msgid "Missing payments" msgid "Missing payments"
msgstr "Paiements manquants" msgstr "Paiements manquants"
#: participation/models.py:485 #: participation/models.py:704
msgid "" msgid ""
"<p>The solutions for the tournament of {tournament} are due on the {date:%Y-" "<p>The solutions for the tournament of {tournament} are due on the {date:%Y-"
"%m-%d %H:%M}.</p><p>You have currently sent <strong>{nb_solutions}</strong> " "%m-%d %H:%M}.</p><p>You have currently sent <strong>{nb_solutions}</strong> "
@ -846,40 +850,40 @@ msgstr ""
"pouvez envoyer vos solutions sur <a href='{url}'>votre page de " "pouvez envoyer vos solutions sur <a href='{url}'>votre page de "
"participation</a>.</p>" "participation</a>.</p>"
#: participation/models.py:494 #: participation/models.py:713
msgid "Solutions due" msgid "Solutions due"
msgstr "Rendu des solutions" msgstr "Rendu des solutions"
#: participation/models.py:504 participation/models.py:537 #: participation/models.py:723 participation/models.py:756
msgid "participations" msgid "participations"
msgstr "participations" msgstr "participations"
#: participation/models.py:519 participation/models.py:520 #: participation/models.py:738 participation/models.py:739
#, python-brace-format #, python-brace-format
msgid "Round {round}" msgid "Round {round}"
msgstr "Tour {round}" msgstr "Tour {round}"
#: participation/models.py:543 #: participation/models.py:762
msgid "juries" msgid "juries"
msgstr "jurys" msgstr "jurys"
#: participation/models.py:552 #: participation/models.py:771
msgid "president of the jury" msgid "president of the jury"
msgstr "président⋅e du jury" msgstr "président⋅e du jury"
#: participation/models.py:559 #: participation/models.py:778
msgid "BigBlueButton URL" msgid "BigBlueButton URL"
msgstr "Lien BigBlueButton" msgstr "Lien BigBlueButton"
#: participation/models.py:560 #: participation/models.py:779
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:565 #: participation/models.py:784
msgid "results available" msgid "results available"
msgstr "résultats disponibles" msgstr "résultats disponibles"
#: participation/models.py:566 #: participation/models.py:785
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."
@ -888,32 +892,37 @@ 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:591 #: participation/models.py:810
msgid "The president of the jury must be part of the jury." msgid "The president of the jury must be part of the jury."
msgstr "Læ président⋅e du jury doit faire partie du jury." msgstr "Læ président⋅e du jury doit faire partie du jury."
#: participation/models.py:595 #: participation/models.py:1206
#, 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:1221
#, 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:615 #: participation/models.py:1241
msgid "position" msgid "position"
msgstr "position" msgstr "position"
#: participation/models.py:622 #: participation/models.py:1248
msgid "defended solution" msgid "defended solution"
msgstr "solution défendue" msgstr "solution défendue"
#: participation/models.py:655 #: participation/models.py:1281
msgid "observer" msgid "observer"
msgstr "observateur⋅rice" msgstr "observateur⋅rice"
#: participation/models.py:660 #: participation/models.py:1286
msgid "penalties" msgid "penalties"
msgstr "pénalités" msgstr "pénalités"
#: participation/models.py:662 #: participation/models.py:1288
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."
@ -921,124 +930,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:738 participation/models.py:741 #: participation/models.py:1364 participation/models.py:1367
#: participation/models.py:744 participation/models.py:747 #: participation/models.py:1370 participation/models.py:1373
#, 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:752 #: participation/models.py:1378
#, 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:756 participation/models.py:765 #: participation/models.py:1382 participation/models.py:1391
#: participation/models.py:850 participation/models.py:892 #: participation/models.py:1476 participation/models.py:1518
msgid "passage" msgid "passage"
msgstr "passage" msgstr "passage"
#: participation/models.py:757 #: participation/models.py:1383
msgid "passages" msgid "passages"
msgstr "passages" msgstr "passages"
#: participation/models.py:776 #: participation/models.py:1402
msgid "difference" msgid "difference"
msgstr "différence" msgstr "différence"
#: participation/models.py:777 #: participation/models.py:1403
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:784 #: participation/models.py:1410
msgid "tweak" msgid "tweak"
msgstr "harmonisation" msgstr "harmonisation"
#: participation/models.py:785 #: participation/models.py:1411
msgid "tweaks" msgid "tweaks"
msgstr "harmonisations" msgstr "harmonisations"
#: participation/models.py:813 #: participation/models.py:1439
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:818 participation/models.py:861 #: participation/models.py:1444 participation/models.py:1487
msgid "file" msgid "file"
msgstr "fichier" msgstr "fichier"
#: participation/models.py:828 #: participation/models.py:1454
#, 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:830 #: participation/models.py:1456
msgid "for final" msgid "for final"
msgstr "pour la finale" msgstr "pour la finale"
#: participation/models.py:833 #: participation/models.py:1459
msgid "solution" msgid "solution"
msgstr "solution" msgstr "solution"
#: participation/models.py:834 #: participation/models.py:1460
msgid "solutions" msgid "solutions"
msgstr "solutions" msgstr "solutions"
#: participation/models.py:867 #: participation/models.py:1493
#, 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:875 #: participation/models.py:1501
msgid "synthesis" msgid "synthesis"
msgstr "note de synthèse" msgstr "note de synthèse"
#: participation/models.py:876 #: participation/models.py:1502
msgid "syntheses" msgid "syntheses"
msgstr "notes de synthèse" msgstr "notes de synthèse"
#: participation/models.py:885 #: participation/models.py:1511
msgid "jury" msgid "jury"
msgstr "jury" msgstr "jury"
#: participation/models.py:897 #: participation/models.py:1523
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:903 #: participation/models.py:1529
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:909 #: participation/models.py:1535
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:915 #: participation/models.py:1541
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:921 #: participation/models.py:1547
msgid "reporter writing note" msgid "reporter writing note"
msgstr "note d'écrit du rapportage" msgstr "note d'écrit du rapportage"
#: participation/models.py:927 #: participation/models.py:1553
msgid "reporter oral note" msgid "reporter oral note"
msgstr "note d'oral du rapportage" msgstr "note d'oral du rapportage"
#: participation/models.py:933 #: participation/models.py:1559
msgid "observer note" msgid "observer note"
msgstr "note de l'observation" msgstr "note de l'observation"
#: participation/models.py:969 #: participation/models.py:1620
#, 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:972 #: participation/models.py:1623
msgid "note" msgid "note"
msgstr "note" msgstr "note"
#: participation/models.py:973 #: participation/models.py:1624
msgid "notes" msgid "notes"
msgstr "notes" msgstr "notes"
@ -1077,9 +1086,9 @@ msgstr "Pas d'équipe définie"
#: participation/templates/participation/passage_detail.html:54 #: participation/templates/participation/passage_detail.html:54
#: participation/templates/participation/passage_detail.html:153 #: participation/templates/participation/passage_detail.html:153
#: participation/templates/participation/passage_detail.html:159 #: participation/templates/participation/passage_detail.html:159
#: participation/templates/participation/pool_detail.html:117 #: participation/templates/participation/pool_detail.html:129
#: participation/templates/participation/pool_detail.html:135 #: participation/templates/participation/pool_detail.html:147
#: participation/templates/participation/pool_detail.html:140 #: participation/templates/participation/pool_detail.html:152
#: participation/templates/participation/team_detail.html:151 #: participation/templates/participation/team_detail.html:151
#: participation/templates/participation/team_detail.html:215 #: participation/templates/participation/team_detail.html:215
#: participation/templates/participation/tournament_form.html:12 #: participation/templates/participation/tournament_form.html:12
@ -1180,7 +1189,7 @@ msgstr "Envoyer une solution"
#: participation/templates/participation/participation_detail.html:65 #: participation/templates/participation/participation_detail.html:65
#: participation/templates/participation/passage_detail.html:165 #: participation/templates/participation/passage_detail.html:165
#: participation/templates/participation/pool_detail.html:145 #: participation/templates/participation/pool_detail.html:157
#: participation/templates/participation/team_detail.html:210 #: participation/templates/participation/team_detail.html:210
#: participation/templates/participation/upload_motivation_letter.html:13 #: participation/templates/participation/upload_motivation_letter.html:13
#: participation/templates/participation/upload_notes.html:17 #: participation/templates/participation/upload_notes.html:17
@ -1336,47 +1345,55 @@ msgstr "Tout télécharger"
msgid "BigBlueButton link:" msgid "BigBlueButton link:"
msgstr "Lien BigBlueButton :" msgstr "Lien BigBlueButton :"
#: participation/templates/participation/pool_detail.html:71 #: participation/templates/participation/pool_detail.html:70
msgid "Notation sheet:"
msgstr "Feuille de notation :"
#: participation/templates/participation/pool_detail.html:74
msgid "Go to the Google Sheets page of the pool"
msgstr "Aller à la page Google Sheets de la poule"
#: participation/templates/participation/pool_detail.html:83
#: participation/templates/participation/tournament_detail.html:98 #: participation/templates/participation/tournament_detail.html:98
msgid "Ranking" msgid "Ranking"
msgstr "Classement" msgstr "Classement"
#: participation/templates/participation/pool_detail.html:85 #: participation/templates/participation/pool_detail.html:97
msgid "Download the scale sheet" msgid "Download the scale sheet"
msgstr "Télécharger la feuille de barème" msgstr "Télécharger la feuille de barème"
#: participation/templates/participation/pool_detail.html:94 #: participation/templates/participation/pool_detail.html:106
msgid "Download the final notation sheet" msgid "Download the final notation sheet"
msgstr "Télécharger la fiche de notation finale" msgstr "Télécharger la fiche de notation finale"
#: participation/templates/participation/pool_detail.html:103 #: participation/templates/participation/pool_detail.html:115
msgid "Download all notation sheets" msgid "Download all notation sheets"
msgstr "Télécharger toutes les fiches de notation" msgstr "Télécharger toutes les fiches de notation"
#: participation/templates/participation/pool_detail.html:108 #: participation/templates/participation/pool_detail.html:120
msgid "Upload notes from a CSV file" msgid "Upload notes from a CSV file"
msgstr "Soumettre les notes à partir d'un fichier CSV" msgstr "Soumettre les notes à partir d'un fichier CSV"
#: participation/templates/participation/pool_detail.html:116 #: participation/templates/participation/pool_detail.html:128
#: participation/templates/participation/pool_detail.html:129 #: participation/templates/participation/pool_detail.html:141
msgid "Add passage" msgid "Add passage"
msgstr "Ajouter un passage" msgstr "Ajouter un passage"
#: participation/templates/participation/pool_detail.html:118 #: participation/templates/participation/pool_detail.html:130
#: participation/templates/participation/pool_detail.html:139 #: participation/templates/participation/pool_detail.html:151
msgid "Update teams" msgid "Update teams"
msgstr "Modifier les équipes" msgstr "Modifier les équipes"
#: participation/templates/participation/pool_detail.html:125 #: participation/templates/participation/pool_detail.html:137
msgid "Passages" msgid "Passages"
msgstr "Passages" msgstr "Passages"
#: participation/templates/participation/pool_detail.html:134 #: participation/templates/participation/pool_detail.html:146
#: participation/templates/participation/pool_form.html:11 #: participation/templates/participation/pool_form.html:11
msgid "Update pool" msgid "Update pool"
msgstr "Modifier la poule" msgstr "Modifier la poule"
#: participation/templates/participation/pool_detail.html:144 #: participation/templates/participation/pool_detail.html:156
msgid "Upload notes" msgid "Upload notes"
msgstr "Envoyer les notes" msgstr "Envoyer les notes"
@ -1870,35 +1887,35 @@ msgstr "Nouveau compte de juré⋅e pour le TFJM²"
msgid "The jury {name} has been successfully added!" msgid "The jury {name} has been successfully added!"
msgstr "{name} a été ajouté⋅e avec succès en tant que juré⋅e !" msgstr "{name} a été ajouté⋅e avec succès en tant que juré⋅e !"
#: participation/views.py:1038 #: participation/views.py:1039
#, python-brace-format #, python-brace-format
msgid "The jury {name} has been successfully removed!" msgid "The jury {name} has been successfully removed!"
msgstr "{name} a été retiré⋅e avec succès du jury !" msgstr "{name} a été retiré⋅e avec succès du jury !"
#: participation/views.py:1064 #: participation/views.py:1065
#, python-brace-format #, python-brace-format
msgid "The jury {name} has been successfully promoted president!" msgid "The jury {name} has been successfully promoted president!"
msgstr "{name} a été nommé⋅e président⋅e du jury !" msgstr "{name} a été nommé⋅e président⋅e du jury !"
#: participation/views.py:1092 #: participation/views.py:1093
msgid "The following user is not registered as a jury:" msgid "The following user is not registered as a jury:"
msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :" msgstr "L'utilisateur⋅rice suivant n'est pas inscrit⋅e en tant que juré⋅e :"
#: participation/views.py:1106 #: participation/views.py:1107
msgid "Notes were successfully uploaded." msgid "Notes were successfully uploaded."
msgstr "Les notes ont bien été envoyées." msgstr "Les notes ont bien été envoyées."
#: participation/views.py:1739 #: participation/views.py:1740
#, python-brace-format #, python-brace-format
msgid "Notation sheets of pool {pool} of {tournament}.zip" msgid "Notation sheets of pool {pool} of {tournament}.zip"
msgstr "Feuilles de notations pour la poule {pool} du tournoi {tournament}.zip" msgstr "Feuilles de notations pour la poule {pool} du tournoi {tournament}.zip"
#: participation/views.py:1744 #: participation/views.py:1745
#, python-brace-format #, python-brace-format
msgid "Notation sheets of {tournament}.zip" msgid "Notation sheets of {tournament}.zip"
msgstr "Feuilles de notation de {tournament}.zip" msgstr "Feuilles de notation de {tournament}.zip"
#: participation/views.py:1922 #: participation/views.py:1924
msgid "You can't upload a synthesis after the deadline." msgid "You can't upload a synthesis after the deadline."
msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite." msgstr "Vous ne pouvez pas envoyer de note de synthèse après la date limite."

View File

@ -36,4 +36,6 @@ class Command(BaseCommand):
self.stdout.write(f"Parsing notation sheet for pool {pool.short_name} for {tournament}") self.stdout.write(f"Parsing notation sheet for pool {pool.short_name} for {tournament}")
pool.parse_spreadsheet() pool.parse_spreadsheet()
tournament.parse_tweaks_spreadskeets()
sleep(1) sleep(1)

View File

@ -439,10 +439,10 @@ class Tournament(models.Model):
else: else:
worksheet = spreadsheet.worksheet("Classement final") worksheet = spreadsheet.worksheet("Classement final")
if worksheet.index < 100: if worksheet.index != self.pools.count():
worksheet.update_index(self.pools.count() + 1) worksheet.update_index(self.pools.count())
header = [["Équipe", "Points jour 1", "Points jour 2", "Total", "Harmonisation", "Total final", "Rang"]] header = [["Équipe", "Score jour 1", "Harmonisation 1", "Score jour 2", "Harmonisation 2", "Total", "Rang"]]
lines = [] lines = []
participations = self.participations.filter(pools__round=1, pools__tournament=self).all() participations = self.participations.filter(pools__round=1, pools__tournament=self).all()
for i, participation in enumerate(participations): for i, participation in enumerate(participations):
@ -451,13 +451,19 @@ class Tournament(models.Model):
pool1 = self.pools.get(round=1, participations=participation) pool1 = self.pools.get(round=1, participations=participation)
passage1 = pool1.passages.get(defender=participation) passage1 = pool1.passages.get(defender=participation)
tweak1_qs = Tweak.objects.filter(pool=pool1, participation=participation)
tweak1 = tweak1_qs.get() if tweak1_qs.exists() else None
pool2 = self.pools.get(round=2, participations=participation) pool2 = self.pools.get(round=2, participations=participation)
passage2 = pool2.passages.get(defender=participation) passage2 = pool2.passages.get(defender=participation)
tweak2_qs = Tweak.objects.filter(pool=pool2, participation=participation)
tweak2 = tweak2_qs.get() if tweak2_qs.exists() else None
line.append(f"=SIERREUR('Poule {pool1.short_name}'!$D{pool1.juries.count() + 10 + passage1.position}; 0)") line.append(f"=SIERREUR('Poule {pool1.short_name}'!$D{pool1.juries.count() + 10 + passage1.position}; 0)")
line.append(tweak1.diff if tweak1 else 0)
line.append(f"=SIERREUR('Poule {pool2.short_name}'!$D{pool2.juries.count() + 10 + passage2.position}; 0)") line.append(f"=SIERREUR('Poule {pool2.short_name}'!$D{pool2.juries.count() + 10 + passage2.position}; 0)")
line.append(f"=$B{i + 2} + $C{i + 2}") line.append(tweak2.diff if tweak2 else 0)
line.append(0) line.append(f"=$B{i + 2} + $C{i + 2} + $D{i + 2} + E{i + 2}")
line.append(f"=$D{i + 2} + $E{i + 2}")
line.append(f"=RANG($F{i + 2}; $F$2:$F${participations.count() + 1})") line.append(f"=RANG($F{i + 2}; $F$2:$F${participations.count() + 1})")
final_ranking = [["", "", ""], ["", "", ""], ["Équipe", "Score", "Rang"], final_ranking = [["", "", ""], ["", "", ""], ["Équipe", "Score", "Rang"],
@ -475,7 +481,7 @@ class Tournament(models.Model):
format_requests = [] format_requests = []
# Set the width of the columns # Set the width of the columns
column_widths = [("A", 250), ("B", 100), ("C", 100), ("D", 100), ("E", 100), ("F", 100), ("G", 100)] column_widths = [("A", 300), ("B", 120), ("C", 120), ("D", 120), ("E", 120), ("F", 120), ("G", 120)]
for column, width in column_widths: for column, width in column_widths:
grid_range = a1_range_to_grid_range(column, worksheet.id) grid_range = a1_range_to_grid_range(column, worksheet.id)
format_requests.append({ format_requests.append({
@ -531,7 +537,9 @@ class Tournament(models.Model):
# Set background color for headers and footers # Set background color for headers and footers
bg_colors = [("A1:AF", (1, 1, 1)), bg_colors = [("A1:AF", (1, 1, 1)),
(f"A1:G1", (0.8, 0.8, 0.8)), (f"A1:G1", (0.8, 0.8, 0.8)),
(f"A2:D{participations.count() + 1}", (0.9, 0.9, 0.9)), (f"A2:B{participations.count() + 1}", (0.9, 0.9, 0.9)),
(f"C2:C{participations.count() + 1}", (1, 1, 1)),
(f"D2:D{participations.count() + 1}", (0.9, 0.9, 0.9)),
(f"E2:E{participations.count() + 1}", (1, 1, 1)), (f"E2:E{participations.count() + 1}", (1, 1, 1)),
(f"F2:G{participations.count() + 1}", (0.9, 0.9, 0.9)), (f"F2:G{participations.count() + 1}", (0.9, 0.9, 0.9)),
(f"A{participations.count() + 4}:C{participations.count() + 4}", (0.8, 0.8, 0.8)), (f"A{participations.count() + 4}:C{participations.count() + 4}", (0.8, 0.8, 0.8)),
@ -547,13 +555,19 @@ class Tournament(models.Model):
}) })
# Set number format, display only one decimal # Set number format, display only one decimal
number_format_ranges = [f"B2:D{participations.count() + 1}", f"F2:F{participations.count() + 1}", number_format_ranges = [(f"B2:B{participations.count() + 1}", "0.0"),
f"B{participations.count() + 5}:B{2 * participations.count() + 5}", ] (f"C2:C{participations.count() + 1}", "0"),
for number_format_range in number_format_ranges: (f"D2:D{participations.count() + 1}", "0.0"),
(f"E2:E{participations.count() + 1}", "0"),
(f"F2:F{participations.count() + 1}", "0.0"),
(f"G2:G{participations.count() + 1}", "0"),
(f"B{participations.count() + 5}:B{2 * participations.count() + 5}", "0.0"),
(f"C{participations.count() + 5}:C{2 * participations.count() + 5}", "0"), ]
for number_format_range, pattern in number_format_ranges:
format_requests.append({ format_requests.append({
"repeatCell": { "repeatCell": {
"range": a1_range_to_grid_range(number_format_range, worksheet.id), "range": a1_range_to_grid_range(number_format_range, worksheet.id),
"cell": {"userEnteredFormat": {"numberFormat": {"type": "NUMBER", "pattern": "0.0"}}}, "cell": {"userEnteredFormat": {"numberFormat": {"type": "NUMBER", "pattern": pattern}}},
"fields": "userEnteredFormat.numberFormat", "fields": "userEnteredFormat.numberFormat",
} }
}) })
@ -567,7 +581,8 @@ class Tournament(models.Model):
}) })
# Protect the header, the juries list, the footer and the ranking # Protect the header, the juries list, the footer and the ranking
protected_ranges = [f"A1:G1", f"A2:D{participations.count() + 1}", f"F2:G{participations.count() + 1}", protected_ranges = [f"A1:G1", f"A2:B{participations.count() + 1}",
f"D2:D{participations.count() + 1}", f"F2:G{participations.count() + 1}",
f"A{participations.count() + 4}:C{2 * participations.count() + 4}", ] f"A{participations.count() + 4}:C{2 * participations.count() + 4}", ]
for protected_range in protected_ranges: for protected_range in protected_ranges:
format_requests.append({ format_requests.append({
@ -584,6 +599,35 @@ class Tournament(models.Model):
body = {"requests": format_requests} body = {"requests": format_requests}
worksheet.client.batch_update(spreadsheet.id, body) worksheet.client.batch_update(spreadsheet.id, body)
def parse_tweaks_spreadskeets(self):
gc = gspread.service_account_from_dict(settings.GOOGLE_SERVICE_CLIENT)
spreadsheet = gc.open_by_key(self.notes_sheet_id)
worksheet = spreadsheet.worksheet("Classement final")
score_cell = worksheet.find("Score")
max_row = score_cell.row - 3
data = worksheet.get_values(f"A2:E{max_row}")
for line in data:
trigram = line[0][-4:-1]
participation = self.participations.get(team__trigram=trigram)
pool1 = self.pools.get(round=1, participations=participation)
pool2 = self.pools.get(round=2, participations=participation)
tweak1_qs = Tweak.objects.filter(pool=pool1, participation=participation)
tweak2_qs = Tweak.objects.filter(pool=pool2, participation=participation)
tweak1_nb, tweak2_nb = int(line[2]), int(line[4])
if not tweak1_nb:
tweak1_qs.delete()
else:
tweak1_qs.update_or_create(defaults={'diff': tweak1_nb},
create_defaults={'diff': tweak1_nb, 'pool': pool1,
'participation': participation})
if not tweak2_nb:
tweak2_qs.delete()
else:
tweak2_qs.update_or_create(defaults={'diff': tweak2_nb},
create_defaults={'diff': tweak2_nb, 'pool': pool2,
'participation': participation})
def get_absolute_url(self): def get_absolute_url(self):
return reverse_lazy("participation:tournament_detail", args=(self.pk,)) return reverse_lazy("participation:tournament_detail", args=(self.pk,))
@ -969,7 +1013,7 @@ class Pool(models.Model):
}) })
# Set the width of the columns # Set the width of the columns
column_widths = [("A", 250), ("B", 30)] column_widths = [("A", 300), ("B", 30)]
for passage in passages: for passage in passages:
column_widths.append((f"{getcol(3 + passage_width * (passage.position - 1))}" column_widths.append((f"{getcol(3 + passage_width * (passage.position - 1))}"
f":{getcol(8 + passage_width * (passage.position - 1))}", 75)) f":{getcol(8 + passage_width * (passage.position - 1))}", 75))

View File

@ -64,6 +64,18 @@
<dt class="col-sm-3">{% trans "BigBlueButton link:" %}</dt> <dt class="col-sm-3">{% trans "BigBlueButton link:" %}</dt>
<dd class="col-sm-9">{{ pool.bbb_url|urlize }}</dd> <dd class="col-sm-9">{{ pool.bbb_url|urlize }}</dd>
{% if user.registration.is_admin or user.registration.is_volunteer %}
{% if user.registration.is_admin or user.registration in pool.tournament.organizers.all or user.registration == pool.jury_president %}
<dt class="col-sm-3">{% trans "Notation sheet:" %}</dt>
<dd class="col-sm-9">
<a class="btn btn-success" href="https://docs.google.com/spreadsheets/d/{{ pool.tournament.notes_sheet_id }}/edit">
<i class="fas fa-table"></i>
{% trans "Go to the Google Sheets page of the pool" %}
</a>
</dd>
{% endif %}
{% endif %}
</dl> </dl>
<div class="card bg-body shadow"> <div class="card bg-body shadow">

View File

@ -194,6 +194,12 @@
Archive de toutes les notes de synthèse triées par poule et par passage Archive de toutes les notes de synthèse triées par poule et par passage
</a> </a>
</li> </li>
<li>
<a href="https://docs.google.com/spreadsheets/d/{{ tournament.notes_sheet_id }}/edit">
<i class="fas fa-table"></i>
Tableur de notes sur Google Sheets
</a>
</li>
<li> <li>
<a href="{% url "participation:tournament_notation_sheets" tournament_id=tournament.id %}"> <a href="{% url "participation:tournament_notation_sheets" tournament_id=tournament.id %}">
Archive de toutes les feuilles de notes à imprimer triées par poule Archive de toutes les feuilles de notes à imprimer triées par poule