From 0bc5ef0a7fff77a748d6f7dde55b595e216ad626 Mon Sep 17 00:00:00 2001 From: Emmy D'Anello Date: Mon, 22 Apr 2024 23:36:52 +0200 Subject: [PATCH] Add debug feature for problem draw, useful for final tournament Signed-off-by: Emmy D'Anello --- draw/consumers.py | 1 + draw/models.py | 5 +- draw/static/draw.js | 45 +++- draw/templates/draw/tournament_content.html | 61 +++++ draw/views.py | 3 + locale/fr/LC_MESSAGES/django.po | 272 +++++++++++--------- 6 files changed, 253 insertions(+), 134 deletions(-) diff --git a/draw/consumers.py b/draw/consumers.py index b2815fc..d64c888 100644 --- a/draw/consumers.py +++ b/draw/consumers.py @@ -637,6 +637,7 @@ class DrawConsumer(AsyncJsonWebsocketConsumer): and isinstance(kwargs['problem'], int) and (1 <= kwargs['problem'] <= len(settings.PROBLEMS)): # Admins can force the draw problem = int(kwargs['problem']) + break # Check that the user didn't already accept this problem for the first round # if this is the second round diff --git a/draw/models.py b/draw/models.py index c730b19..9e54e25 100644 --- a/draw/models.py +++ b/draw/models.py @@ -292,7 +292,7 @@ class Pool(models.Model): """ Returns a query set ordered by passage index of all team draws in this pool. """ - return self.teamdraw_set.order_by('passage_index').all() + return self.teamdraw_set.all() @property def trigrams(self) -> list[str]: @@ -545,4 +545,5 @@ class TeamDraw(models.Model): class Meta: verbose_name = _('team draw') verbose_name_plural = _('team draws') - ordering = ('round__draw__tournament__name', 'round__number', 'pool__letter', 'passage_index',) + ordering = ('round__draw__tournament__name', 'round__number', 'pool__letter', 'passage_index', + 'choice_dice', 'passage_dice',) diff --git a/draw/static/draw.js b/draw/static/draw.js index 4a385d5..03e17fc 100644 --- a/draw/static/draw.js +++ b/draw/static/draw.js @@ -40,6 +40,20 @@ function drawDice(tid, trigram = null, result = null) { socket.send(JSON.stringify({'tid': tid, 'type': 'dice', 'trigram': trigram, 'result': result})) } +/** + * Fetch the requested dice from the buttons and request to draw it. + * Only available for debug purposes and for admins. + * @param tid The tournament id + */ +function drawDebugDice(tid) { + let dice_10 = parseInt(document.querySelector(`input[name="debug-dice-${tid}-10"]:checked`).value) + let dice_1 = parseInt(document.querySelector(`input[name="debug-dice-${tid}-1"]:checked`).value) + let result = (dice_10 + dice_1) || 100 + let team_div = document.querySelector(`div[id="dices-${tid}"] > div > div[class*="text-bg-warning"]`) + let team = team_div.getAttribute("data-team") + drawDice(tid, team, result) +} + /** * Request to draw a new problem. * @param tid The tournament id @@ -203,6 +217,14 @@ document.addEventListener('DOMContentLoaded', () => { elem.classList.add('text-bg-success') elem.innerText = `${trigram} 🎲 ${result}` } + + let nextTeam = document.querySelector(` div[id="dices-${tid}"] > div > div[class*="text-bg-warning"]`).getAttribute("data-team") + if (nextTeam) { + // If there is one team that does not have launched its dice, then we update the debug section + let debugSpan = document.getElementById(`debug-dice-${tid}-team`) + if (debugSpan) + debugSpan.innerText = nextTeam + } } /** @@ -212,10 +234,15 @@ document.addEventListener('DOMContentLoaded', () => { */ function updateDiceVisibility(tid, visible) { let div = document.getElementById(`launch-dice-${tid}`) - if (visible) + let div_debug = document.getElementById(`debug-dice-form-${tid}`) + if (visible) { div.classList.remove('d-none') - else + div_debug.classList.remove('d-none') + } + else { div.classList.add('d-none') + div_debug.classList.add('d-none') + } } /** @@ -225,10 +252,15 @@ document.addEventListener('DOMContentLoaded', () => { */ function updateBoxVisibility(tid, visible) { let div = document.getElementById(`draw-problem-${tid}`) - if (visible) + let div_debug = document.getElementById(`debug-problem-form-${tid}`) + if (visible) { div.classList.remove('d-none') - else + div_debug.classList.remove('d-none') + } + else { div.classList.add('d-none') + div_debug.classList.add('d-none') + } } /** @@ -582,6 +614,11 @@ document.addEventListener('DOMContentLoaded', () => { let teamLi = document.getElementById(`recap-${tid}-round-${round}-team-${team}`) if (teamLi !== null) teamLi.classList.add('list-group-item-info') + + let debugSpan = document.getElementById(`debug-problem-${tid}-team`) + if (debugSpan && team) { + debugSpan.innerText = team + } } /** diff --git a/draw/templates/draw/tournament_content.html b/draw/templates/draw/tournament_content.html index 462c331..d0f22d8 100644 --- a/draw/templates/draw/tournament_content.html +++ b/draw/templates/draw/tournament_content.html @@ -37,6 +37,7 @@ {% for td in tournament.draw.current_round.team_draws %}
+ + {% if user.registration.is_admin %} +
+
+ +
+
+
+
+ {% trans "Draw dice for" %} + + {% regroup tournament.draw.current_round.team_draws by last_dice as td_dices %} + {% for group in td_dices %} + {% if group.grouper is None %} + {{ group }} + {% with group.list|first as td %} + {{ td.participation.team.trigram }} + {% endwith %} + {% endif %} + {% endfor %} + +
+
+ {% for i in range_100 %} + + + {% endfor %} +
+
+ {% for i in range_10 %} + + + {% endfor %} +
+ +
+ +
+
+
+
+ {% trans "Draw problem for" %} + {{ tournament.draw.current_round.current_pool.current_team.participation.team.trigram }} +
+
+ {% for problem in problems %} + + {% endfor %} +
+
+
+
+ {% endif %}
diff --git a/draw/views.py b/draw/views.py index db8a994..67d4ee6 100644 --- a/draw/views.py +++ b/draw/views.py @@ -40,4 +40,7 @@ class DisplayView(LoginRequiredMixin, TemplateView): context['tournaments_simplified'] = [{'id': t.id, 'name': t.name} for t in tournaments] context['problems'] = settings.PROBLEMS + context['range_100'] = range(0, 100, 10) + context['range_10'] = range(0, 10, 1) + return context diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 33f8263..5043b78 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-04-18 15:04+0200\n" +"POT-Creation-Date: 2024-04-22 23:36+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Emmy D'Anello \n" "Language-Team: LANGUAGE \n" @@ -30,14 +30,14 @@ msgstr "équipes" #: draw/admin.py:53 draw/admin.py:71 draw/admin.py:88 draw/models.py:26 #: participation/admin.py:79 participation/admin.py:140 #: participation/admin.py:171 participation/models.py:693 -#: participation/models.py:717 participation/models.py:937 +#: participation/models.py:717 participation/models.py:935 #: registration/models.py:756 #: registration/templates/registration/payment_form.html:53 msgid "tournament" msgstr "tournoi" #: draw/admin.py:92 draw/models.py:234 draw/models.py:448 -#: participation/models.py:941 +#: participation/models.py:939 msgid "round" msgstr "tour" @@ -76,9 +76,9 @@ msgstr "Le tirage a commencé !" msgid "The draw for the tournament {tournament} will start." msgstr "Le tirage au sort du tournoi {tournament} va commencer." -#: draw/consumers.py:251 draw/consumers.py:277 draw/consumers.py:685 -#: draw/consumers.py:902 draw/consumers.py:991 draw/consumers.py:1013 -#: draw/consumers.py:1103 draw/templates/draw/tournament_content.html:5 +#: draw/consumers.py:251 draw/consumers.py:277 draw/consumers.py:687 +#: draw/consumers.py:904 draw/consumers.py:993 draw/consumers.py:1015 +#: draw/consumers.py:1106 draw/templates/draw/tournament_content.html:5 msgid "The draw has not started yet." msgstr "Le tirage au sort n'a pas encore commencé." @@ -87,8 +87,8 @@ msgstr "Le tirage au sort n'a pas encore commencé." msgid "The draw for the tournament {tournament} is aborted." msgstr "Le tirage au sort du tournoi {tournament} est annulé." -#: draw/consumers.py:304 draw/consumers.py:325 draw/consumers.py:620 -#: draw/consumers.py:690 draw/consumers.py:907 +#: draw/consumers.py:304 draw/consumers.py:325 draw/consumers.py:621 +#: draw/consumers.py:692 draw/consumers.py:909 msgid "This is not the time for this." msgstr "Ce n'est pas le moment pour cela." @@ -106,7 +106,7 @@ msgid "Dices from teams {teams} are identical. Please relaunch your dices." msgstr "" "Les dés des équipes {teams} sont identiques. Merci de relancer vos dés." -#: draw/consumers.py:1016 +#: draw/consumers.py:1018 msgid "This is only available for the final tournament." msgstr "Cela n'est possible que pour la finale." @@ -175,7 +175,7 @@ msgstr "La poule en cours, où les équipes choisissent leurs problèmes" msgid "rounds" msgstr "tours" -#: draw/models.py:257 participation/models.py:949 +#: draw/models.py:257 participation/models.py:947 msgid "letter" msgstr "lettre" @@ -214,17 +214,17 @@ msgid "Pool {letter}{number}" msgstr "Poule {letter}{number}" #: draw/models.py:429 draw/models.py:456 participation/admin.py:136 -#: participation/admin.py:155 participation/models.py:1429 -#: participation/models.py:1438 participation/tables.py:84 +#: participation/admin.py:155 participation/models.py:1434 +#: participation/models.py:1443 participation/tables.py:84 msgid "pool" msgstr "poule" -#: draw/models.py:430 participation/models.py:1430 +#: draw/models.py:430 participation/models.py:1435 msgid "pools" msgstr "poules" -#: draw/models.py:442 participation/models.py:927 participation/models.py:1579 -#: participation/models.py:1609 participation/models.py:1651 +#: draw/models.py:442 participation/models.py:925 participation/models.py:1584 +#: participation/models.py:1614 participation/models.py:1656 msgid "participation" msgstr "participation" @@ -248,8 +248,8 @@ msgid "" msgstr "" "L'ordre de choix dans la poule, entre 0 et la taille de la poule moins 1." -#: draw/models.py:479 draw/models.py:502 participation/models.py:1452 -#: participation/models.py:1616 +#: draw/models.py:479 draw/models.py:502 participation/models.py:1457 +#: participation/models.py:1621 #, python-brace-format msgid "Problem #{problem}" msgstr "Problème n°{problem}" @@ -303,35 +303,56 @@ msgstr "Démarrer !" msgid "Last dices" msgstr "Derniers jets de dés" -#: draw/templates/draw/tournament_content.html:61 +#: draw/templates/draw/tournament_content.html:62 msgid "Cancel last step" msgstr "Annuler la dernière étape" -#: draw/templates/draw/tournament_content.html:136 +#: draw/templates/draw/tournament_content.html:137 msgid "Launch dice" msgstr "Lancer le dé" -#: draw/templates/draw/tournament_content.html:150 +#: draw/templates/draw/tournament_content.html:151 msgid "Draw a problem" msgstr "Tirer un problème" -#: draw/templates/draw/tournament_content.html:161 +#: draw/templates/draw/tournament_content.html:162 msgid "Accept" msgstr "Accepter" -#: draw/templates/draw/tournament_content.html:164 +#: draw/templates/draw/tournament_content.html:165 msgid "Decline" msgstr "Refuser" -#: draw/templates/draw/tournament_content.html:175 +#: draw/templates/draw/tournament_content.html:176 msgid "Export" msgstr "Exporter" -#: draw/templates/draw/tournament_content.html:183 +#: draw/templates/draw/tournament_content.html:184 msgid "Continue draw" msgstr "Continuer le tirage" -#: draw/templates/draw/tournament_content.html:216 participation/admin.py:167 +#: draw/templates/draw/tournament_content.html:196 +msgid "Debug draw" +msgstr "Débugguer le tirage" + +#: draw/templates/draw/tournament_content.html:202 +msgid "Draw dice for" +msgstr "Tirer un dé pour" + +#: draw/templates/draw/tournament_content.html:230 +msgid "Draw dice" +msgstr "Tirer le dé" + +#: draw/templates/draw/tournament_content.html:236 +msgid "Draw problem for" +msgstr "Tirer un problème pour" + +#: draw/templates/draw/tournament_content.html:242 +#: participation/templates/participation/note_form.html:9 +msgid "Pb." +msgstr "Pb." + +#: draw/templates/draw/tournament_content.html:277 participation/admin.py:167 #: participation/models.py:252 participation/models.py:708 #: participation/templates/participation/tournament_harmonize.html:15 #: registration/models.py:157 registration/models.py:747 @@ -340,36 +361,36 @@ msgstr "Continuer le tirage" msgid "team" msgstr "équipe" -#: draw/templates/draw/tournament_content.html:226 -#: draw/templates/draw/tournament_content.html:227 -#: draw/templates/draw/tournament_content.html:228 -#: draw/templates/draw/tournament_content.html:229 -#: draw/templates/draw/tournament_content.html:230 +#: draw/templates/draw/tournament_content.html:287 +#: draw/templates/draw/tournament_content.html:288 +#: draw/templates/draw/tournament_content.html:289 +#: draw/templates/draw/tournament_content.html:290 +#: draw/templates/draw/tournament_content.html:291 msgid "Room" msgstr "Salle" -#: draw/templates/draw/tournament_content.html:334 -#: draw/templates/draw/tournament_content.html:353 +#: draw/templates/draw/tournament_content.html:395 +#: draw/templates/draw/tournament_content.html:414 msgid "Abort" msgstr "Annuler" -#: draw/templates/draw/tournament_content.html:344 +#: draw/templates/draw/tournament_content.html:405 msgid "Are you sure?" msgstr "Êtes-vous sûr⋅e ?" -#: draw/templates/draw/tournament_content.html:348 +#: draw/templates/draw/tournament_content.html:409 msgid "This will reset the draw from the beginning." msgstr "Cela va réinitialiser le tirage au sort depuis le début." -#: draw/templates/draw/tournament_content.html:349 +#: draw/templates/draw/tournament_content.html:410 msgid "This operation is irreversible." msgstr "Cette opération est irréversible." -#: draw/templates/draw/tournament_content.html:350 +#: draw/templates/draw/tournament_content.html:411 msgid "Are you sure you want to abort this draw?" msgstr "Êtes-vous sûr·e de vouloir annuler le tirage au sort ?" -#: draw/templates/draw/tournament_content.html:354 +#: draw/templates/draw/tournament_content.html:415 #: tfjm/templates/base_modal.html:17 msgid "Close" msgstr "Fermer" @@ -453,21 +474,21 @@ msgid "selected for final" msgstr "sélectionnée pour la finale" #: participation/admin.py:124 participation/admin.py:183 -#: participation/models.py:1459 participation/tables.py:112 +#: participation/models.py:1464 participation/tables.py:112 msgid "defender" msgstr "défenseur⋅se" -#: participation/admin.py:128 participation/models.py:1466 -#: participation/models.py:1663 +#: participation/admin.py:128 participation/models.py:1471 +#: participation/models.py:1668 msgid "opponent" msgstr "opposant⋅e" -#: participation/admin.py:132 participation/models.py:1473 -#: participation/models.py:1664 +#: participation/admin.py:132 participation/models.py:1478 +#: participation/models.py:1669 msgid "reporter" msgstr "rapporteur⋅rice" -#: participation/admin.py:187 participation/models.py:1614 +#: participation/admin.py:187 participation/models.py:1619 msgid "problem" msgstr "numéro de problème" @@ -547,17 +568,11 @@ 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:290 -msgid "Can't determine the pool size. Are you sure your file is correct?" -msgstr "" -"Impossible de déterminer la taille de la poule. Êtes-vous sûr⋅e que le " -"fichier est correct ?" - -#: participation/forms.py:310 +#: participation/forms.py:308 msgid "The following note is higher of the maximum expected value:" msgstr "La note suivante est supérieure au maximum attendu :" -#: participation/forms.py:316 +#: participation/forms.py:314 msgid "The following user was not found:" msgstr "L'utilisateur⋅rice suivant n'a pas été trouvé :" @@ -887,7 +902,7 @@ msgstr "" msgid "Draw of solutions" msgstr "Tirage au sort des solutions" -#: participation/models.py:830 +#: participation/models.py:829 #, python-brace-format msgid "" "

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

" -#: participation/models.py:839 participation/models.py:882 +#: participation/models.py:838 participation/models.py:880 #, 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:848 participation/models.py:891 +#: participation/models.py:847 participation/models.py:889 #, python-brace-format msgid "" "

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

" -#: participation/models.py:864 registration/models.py:622 +#: participation/models.py:863 registration/models.py:622 msgid "First round" msgstr "Premier tour" -#: participation/models.py:875 +#: participation/models.py:873 #, python-brace-format msgid "" "

For the second round, you will defend your " @@ -934,11 +949,11 @@ msgstr "" "

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

" -#: participation/models.py:907 registration/models.py:633 +#: participation/models.py:905 registration/models.py:633 msgid "Second round" msgstr "Second tour" -#: participation/models.py:913 +#: participation/models.py:911 #, 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:918 +#: participation/models.py:916 msgid "Tournament ended" msgstr "Tournoi terminé" -#: participation/models.py:928 participation/models.py:971 +#: participation/models.py:926 participation/models.py:969 msgid "participations" msgstr "participations" -#: participation/models.py:943 participation/models.py:944 +#: participation/models.py:941 participation/models.py:942 #, python-brace-format msgid "Round {round}" msgstr "Tour {round}" -#: participation/models.py:959 +#: participation/models.py:957 msgid "room" msgstr "salle" -#: participation/models.py:961 +#: participation/models.py:959 msgid "Room 1" msgstr "Salle 1" -#: participation/models.py:962 +#: participation/models.py:960 msgid "Room 2" msgstr "Salle 2" -#: participation/models.py:965 +#: participation/models.py:963 msgid "For 5-teams pools only" msgstr "Pour les poules de 5 équipe uniquement" -#: participation/models.py:977 +#: participation/models.py:975 msgid "juries" msgstr "jurys" -#: participation/models.py:986 +#: participation/models.py:984 msgid "president of the jury" msgstr "président⋅e du jury" -#: participation/models.py:993 +#: participation/models.py:991 msgid "BigBlueButton URL" msgstr "Lien BigBlueButton" -#: participation/models.py:994 +#: participation/models.py:992 msgid "The link of the BBB visio for this pool." msgstr "Le lien du salon BBB pour cette poule." -#: participation/models.py:999 +#: participation/models.py:997 msgid "results available" msgstr "résultats disponibles" -#: participation/models.py:1000 +#: participation/models.py:998 msgid "" "Check this case when results become accessible to teams. They stay " "accessible to you. Only averages are given." @@ -1005,33 +1020,33 @@ msgstr "" "Ils restent toujours accessibles pour vous. Seules les moyennes sont " "communiquées." -#: participation/models.py:1028 +#: participation/models.py:1026 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:1410 +#: participation/models.py:1415 #, 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:1423 +#: participation/models.py:1428 #, 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:1443 +#: participation/models.py:1448 msgid "position" msgstr "position" -#: participation/models.py:1450 +#: participation/models.py:1455 msgid "defended solution" msgstr "solution défendue" -#: participation/models.py:1478 +#: participation/models.py:1483 msgid "penalties" msgstr "pénalités" -#: participation/models.py:1480 +#: participation/models.py:1485 msgid "" "Number of penalties for the defender. The defender will loose a 0.5 " "coefficient per penalty." @@ -1039,120 +1054,120 @@ msgstr "" "Nombre de pénalités pour l'équipe défenseuse. Elle perd un coefficient 0.5 " "sur sa présentation orale par pénalité." -#: participation/models.py:1549 participation/models.py:1552 -#: participation/models.py:1555 +#: participation/models.py:1554 participation/models.py:1557 +#: participation/models.py:1560 #, 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:1560 +#: participation/models.py:1565 #, python-brace-format msgid "Passage of {defender} for problem {problem}" msgstr "Passage de {defender} pour le problème {problem}" -#: participation/models.py:1564 participation/models.py:1573 -#: participation/models.py:1658 participation/models.py:1700 +#: participation/models.py:1569 participation/models.py:1578 +#: participation/models.py:1663 participation/models.py:1705 msgid "passage" msgstr "passage" -#: participation/models.py:1565 +#: participation/models.py:1570 msgid "passages" msgstr "passages" -#: participation/models.py:1584 +#: participation/models.py:1589 msgid "difference" msgstr "différence" -#: participation/models.py:1585 +#: participation/models.py:1590 msgid "Score to add/remove on the final score" msgstr "Score à ajouter/retrancher au score final" -#: participation/models.py:1592 +#: participation/models.py:1597 msgid "tweak" msgstr "harmonisation" -#: participation/models.py:1593 +#: participation/models.py:1598 msgid "tweaks" msgstr "harmonisations" -#: participation/models.py:1621 +#: participation/models.py:1626 msgid "solution for the final tournament" msgstr "solution pour la finale" -#: participation/models.py:1626 participation/models.py:1669 +#: participation/models.py:1631 participation/models.py:1674 msgid "file" msgstr "fichier" -#: participation/models.py:1636 +#: participation/models.py:1641 #, 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:1638 +#: participation/models.py:1643 msgid "for final" msgstr "pour la finale" -#: participation/models.py:1641 +#: participation/models.py:1646 msgid "solution" msgstr "solution" -#: participation/models.py:1642 +#: participation/models.py:1647 msgid "solutions" msgstr "solutions" -#: participation/models.py:1675 +#: participation/models.py:1680 #, python-brace-format msgid "Synthesis of {team} as {type} for problem {problem} of {defender}" msgstr "" "Note de synthèse de l'équipe {team} en tant que {type} pour le problème " "{problem} de {defender}" -#: participation/models.py:1683 +#: participation/models.py:1688 msgid "synthesis" msgstr "note de synthèse" -#: participation/models.py:1684 +#: participation/models.py:1689 msgid "syntheses" msgstr "notes de synthèse" -#: participation/models.py:1693 +#: participation/models.py:1698 msgid "jury" msgstr "jury" -#: participation/models.py:1705 +#: participation/models.py:1710 msgid "defender writing note" msgstr "note d'écrit défenseur⋅se" -#: participation/models.py:1711 +#: participation/models.py:1716 msgid "defender oral note" msgstr "note d'oral défenseur⋅se" -#: participation/models.py:1717 +#: participation/models.py:1722 msgid "opponent writing note" msgstr "note d'écrit opposant⋅e" -#: participation/models.py:1723 +#: participation/models.py:1728 msgid "opponent oral note" msgstr "note d'oral opposant⋅e" -#: participation/models.py:1729 +#: participation/models.py:1734 msgid "reporter writing note" msgstr "note d'écrit rapporteur⋅rice" -#: participation/models.py:1735 +#: participation/models.py:1740 msgid "reporter oral note" msgstr "note d'oral du rapporteur⋅rice" -#: participation/models.py:1793 +#: participation/models.py:1800 #, python-brace-format msgid "Notes of {jury} for {passage}" msgstr "Notes de {jury} pour le {passage}" -#: participation/models.py:1796 +#: participation/models.py:1803 msgid "note" msgstr "note" -#: participation/models.py:1797 +#: participation/models.py:1804 msgid "notes" msgstr "notes" @@ -1233,10 +1248,6 @@ msgstr "Notes de" msgid "Defense of" msgstr "Défense de" -#: participation/templates/participation/note_form.html:9 -msgid "Pb." -msgstr "Pb." - #: participation/templates/participation/participation_detail.html:6 #: participation/templates/participation/participation_detail.html:21 #: participation/templates/participation/passage_detail.html:6 @@ -2018,84 +2029,84 @@ msgstr "Harmoniser les notes de {tournament} - Jour {round}" msgid "You can't upload a solution after the deadline." msgstr "Vous ne pouvez pas envoyer de solution après la date limite." -#: participation/views.py:1011 +#: participation/views.py:1014 #, python-brace-format msgid "Solutions of team {trigram}.zip" msgstr "Solutions de l'équipe {trigram}.zip" -#: participation/views.py:1011 +#: participation/views.py:1014 #, python-brace-format msgid "Syntheses of team {trigram}.zip" msgstr "Notes de synthèse de l'équipe {trigram}.zip" -#: participation/views.py:1028 participation/views.py:1043 +#: participation/views.py:1031 participation/views.py:1046 #, python-brace-format msgid "Solutions of {tournament}.zip" msgstr "Solutions de {tournament}.zip" -#: participation/views.py:1028 participation/views.py:1043 +#: participation/views.py:1031 participation/views.py:1046 #, python-brace-format msgid "Syntheses of {tournament}.zip" msgstr "Notes de synthèse de {tournament}.zip" -#: participation/views.py:1052 +#: participation/views.py:1055 #, python-brace-format msgid "Solutions for pool {pool} of tournament {tournament}.zip" msgstr "Solutions pour la poule {pool} du tournoi {tournament}.zip" -#: participation/views.py:1053 +#: participation/views.py:1056 #, python-brace-format msgid "Syntheses for pool {pool} of tournament {tournament}.zip" msgstr "Notes de synthèses pour la poule {pool} du tournoi {tournament}.zip" -#: participation/views.py:1095 +#: participation/views.py:1098 #, python-brace-format msgid "Jury of pool {pool} for {tournament} with teams {teams}" msgstr "Jury de la poule {pool} pour {tournament} avec les équipes {teams}" -#: participation/views.py:1111 +#: participation/views.py:1114 #, python-brace-format msgid "The jury {name} is already in the pool!" msgstr "{name} est déjà dans la poule !" -#: participation/views.py:1131 +#: participation/views.py:1134 msgid "New TFJM² jury account" msgstr "Nouveau compte de juré⋅e pour le TFJM²" -#: participation/views.py:1152 +#: participation/views.py:1155 #, python-brace-format msgid "The jury {name} has been successfully added!" msgstr "{name} a été ajouté⋅e avec succès en tant que juré⋅e !" -#: participation/views.py:1188 +#: participation/views.py:1191 #, python-brace-format msgid "The jury {name} has been successfully removed!" msgstr "{name} a été retiré⋅e avec succès du jury !" -#: participation/views.py:1214 +#: participation/views.py:1217 #, python-brace-format msgid "The jury {name} has been successfully promoted president!" msgstr "{name} a été nommé⋅e président⋅e du jury !" -#: participation/views.py:1242 +#: participation/views.py:1245 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 :" -#: participation/views.py:1258 +#: participation/views.py:1261 msgid "Notes were successfully uploaded." msgstr "Les notes ont bien été envoyées." -#: participation/views.py:1825 +#: participation/views.py:1839 #, python-brace-format msgid "Notation sheets of pool {pool} of {tournament}.zip" msgstr "Feuilles de notations pour la poule {pool} du tournoi {tournament}.zip" -#: participation/views.py:1830 +#: participation/views.py:1844 #, python-brace-format msgid "Notation sheets of {tournament}.zip" msgstr "Feuilles de notation de {tournament}.zip" -#: participation/views.py:1995 +#: participation/views.py:2009 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." @@ -3634,3 +3645,8 @@ msgstr "Aucun résultat." #: tfjm/templates/sidebar.html:10 tfjm/templates/sidebar.html:21 msgid "Informations" msgstr "Informations" + +#~ msgid "Can't determine the pool size. Are you sure your file is correct?" +#~ msgstr "" +#~ "Impossible de déterminer la taille de la poule. Êtes-vous sûr⋅e que le " +#~ "fichier est correct ?"