mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2024-12-24 17:42:23 +00:00
Add debug feature for problem draw, useful for final tournament
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
parent
943276ef71
commit
0bc5ef0a7f
@ -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
|
||||
|
@ -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',)
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -37,6 +37,7 @@
|
||||
{% for td in tournament.draw.current_round.team_draws %}
|
||||
<div class="col-md-1" style="order: {{ forloop.counter }};">
|
||||
<div id="dice-{{ tournament.id }}-{{ td.participation.team.trigram }}"
|
||||
data-team="{{ td.participation.team.trigram }}"
|
||||
class="badge rounded-pill text-bg-{% if td.last_dice %}success{% else %}warning{% endif %}"
|
||||
{% if request.user.registration.is_volunteer %}
|
||||
{# Volunteers can click on dices to launch the dice of a team #}
|
||||
@ -186,6 +187,66 @@
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if user.registration.is_admin %}
|
||||
<div class="card my-3">
|
||||
<div class="card-header">
|
||||
<div style="cursor: pointer;" data-bs-toggle="collapse" data-bs-target="#debug-draw-{{ tournament.id }}-body"
|
||||
aria-controls="debug-draw-{{ tournament.id }}-body" aria-expanded="false">
|
||||
<h4>{% trans "Debug draw" %}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body collapse" id="debug-draw-{{ tournament.id }}-body">
|
||||
<div id="debug-dice-form-{{ tournament.id }}" {% if tournament.draw.get_state != 'DICE_SELECT_POULES' and tournament.draw.get_state != 'DICE_ORDER_POULE' %}class="d-none"{% endif %}>
|
||||
<h5>
|
||||
{% trans "Draw dice for" %}
|
||||
<span id="debug-dice-{{ tournament.id }}-team">
|
||||
{% 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 %}
|
||||
</span>
|
||||
</h5>
|
||||
<div class="btn-group w-100" role="group">
|
||||
{% for i in range_100 %}
|
||||
<input type="radio" class="btn-check" name="debug-dice-{{ tournament.id }}-10" id="debug-dice-{{ tournament.id }}-{{ i|stringformat:"02d" }}" value="{{ i }}" {% if i == 0 %}checked{% endif %}>
|
||||
<label class="btn btn-outline-warning" for="debug-dice-{{ tournament.id }}-{{ i|stringformat:"02d" }}">{{ i|stringformat:"02d" }}</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="btn-group w-100" role="group">
|
||||
{% for i in range_10 %}
|
||||
<input type="radio" class="btn-check" name="debug-dice-{{ tournament.id }}-1" id="debug-dice-{{ tournament.id }}-{{ i }}" value="{{ i }}" {% if i == 0 %}checked{% endif %}>
|
||||
<label class="btn btn-outline-warning" for="debug-dice-{{ tournament.id }}-{{ i }}">{{ i }}</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<div class="my-2 text-center">
|
||||
<button class="btn btn-success" onclick="drawDebugDice({{ tournament.id }})">
|
||||
{% trans "Draw dice" %} 🎲
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="debug-problem-form-{{ tournament.id }}" {% if tournament.draw.get_state != 'WAITING_DRAW_PROBLEM' %}class="d-none"{% endif %}>
|
||||
<h5>
|
||||
{% trans "Draw problem for" %}
|
||||
<span id="debug-problem-{{ tournament.id }}-team">{{ tournament.draw.current_round.current_pool.current_team.participation.team.trigram }}</span>
|
||||
</h5>
|
||||
<div class="btn-group w-100" role="group">
|
||||
{% for problem in problems %}
|
||||
<button class="btn btn-outline-info" id="debug-problem-{{ tournament.id }}-{{ forloop.counter }}" onclick="drawProblem({{ tournament.id }}, {{ forloop.counter }})">
|
||||
{% trans "Pb." %} {{ forloop.counter }}
|
||||
</button>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 <emmy.danello@animath.fr>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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 ""
|
||||
"<p>The solutions draw is ended. You can check the result on <a "
|
||||
@ -899,7 +914,7 @@ msgstr ""
|
||||
"tour, vous défendrez <a href='{solution_url}'>votre solution du problème "
|
||||
"{problem}</a>.</p>"
|
||||
|
||||
#: participation/models.py:839 participation/models.py:882
|
||||
#: participation/models.py:838 participation/models.py:880
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"<p>You will oppose the solution of the team {opponent} on the <a "
|
||||
@ -910,7 +925,7 @@ msgstr ""
|
||||
"href='{solution_url}'>problème {problem}</a>. Vous pouvez envoyer votre note "
|
||||
"de synthèse sur <a href='{passage_url}'>cette page</a>.</p>"
|
||||
|
||||
#: participation/models.py:848 participation/models.py:891
|
||||
#: participation/models.py:847 participation/models.py:889
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"<p>You will report the solution of the team {reporter} on the <a "
|
||||
@ -921,11 +936,11 @@ msgstr ""
|
||||
"href='{solution_url}'>problème {problem}</a>. Vous pouvez envoyer votre note "
|
||||
"de synthèse sur <a href='{passage_url}'>cette page</a>.</p>"
|
||||
|
||||
#: 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 ""
|
||||
"<p>For the second round, you will defend <a href='{solution_url}'>your "
|
||||
@ -934,11 +949,11 @@ msgstr ""
|
||||
"<p>Pour le second tour, vous défendrez <a href='{solution_url}'>votre "
|
||||
"solution du problème {problem}</a>.</p>"
|
||||
|
||||
#: 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 ""
|
||||
"<p>The tournament {tournament} is ended. You can check the results on the <a "
|
||||
@ -947,56 +962,56 @@ msgstr ""
|
||||
"<p>Le tournoi {tournament} est terminé. Vous pouvez consulter les résultats "
|
||||
"sur la <a href='{url}'>page du tournoi</a>.</p>"
|
||||
|
||||
#: 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 ?"
|
||||
|
Loading…
Reference in New Issue
Block a user