mirror of
https://gitlab.com/animath/si/plateforme.git
synced 2025-06-23 22:28:51 +02:00
Reporter -> reviewer
Signed-off-by: Emmy D'Anello <emmy.danello@animath.fr>
This commit is contained in:
@ -858,7 +858,7 @@ class Participation(models.Model):
|
||||
elif timezone.now() <= tournament.syntheses_first_phase_limit + timedelta(hours=2):
|
||||
defender_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=1, defender=self)
|
||||
opponent_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=1, opponent=self)
|
||||
reporter_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=1, reporter=self)
|
||||
reviewer_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=1, reviewer=self)
|
||||
|
||||
defender_text = _("<p>The solutions draw is ended. You can check the result on "
|
||||
"<a href='{draw_url}'>this page</a>.</p>"
|
||||
@ -878,21 +878,21 @@ class Participation(models.Model):
|
||||
solution_url=solution_url,
|
||||
problem=opponent_passage.solution_number, passage_url=passage_url)
|
||||
|
||||
reporter_text = _("<p>You will report the solution of the team {reporter} on the "
|
||||
reviewer_text = _("<p>You will report the solution of the team {reviewer} on the "
|
||||
"<a href='{solution_url}'>problem {problem}. "
|
||||
"You can upload your synthesis sheet on <a href='{passage_url}'>this page</a>.</p>")
|
||||
solution_url = reporter_passage.defended_solution.file.url
|
||||
passage_url = reverse_lazy("participation:passage_detail", args=(reporter_passage.pk,))
|
||||
reporter_content = format_lazy(reporter_text, reporter=reporter_passage.defender.team.trigram,
|
||||
solution_url = reviewer_passage.defended_solution.file.url
|
||||
passage_url = reverse_lazy("participation:passage_detail", args=(reviewer_passage.pk,))
|
||||
reviewer_content = format_lazy(reviewer_text, reviewer=reviewer_passage.defender.team.trigram,
|
||||
solution_url=solution_url,
|
||||
problem=reporter_passage.solution_number, passage_url=passage_url)
|
||||
problem=reviewer_passage.solution_number, passage_url=passage_url)
|
||||
|
||||
syntheses_template_begin = f"{settings.STATIC_URL}Fiche_synthèse."
|
||||
syntheses_templates = " — ".join(f"<a href='{syntheses_template_begin}{ext}'>{ext.upper()}</a>"
|
||||
for ext in ["pdf", "tex", "odt", "docx"])
|
||||
syntheses_templates_content = f"<p>{_('Templates:')} {syntheses_templates}</p>"
|
||||
|
||||
content = defender_content + opponent_content + reporter_content + syntheses_templates_content
|
||||
content = defender_content + opponent_content + reviewer_content + syntheses_templates_content
|
||||
informations.append({
|
||||
'title': _("First round"),
|
||||
'type': "info",
|
||||
@ -902,7 +902,7 @@ class Participation(models.Model):
|
||||
elif timezone.now() <= tournament.syntheses_second_phase_limit + timedelta(hours=2):
|
||||
defender_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=2, defender=self)
|
||||
opponent_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=2, opponent=self)
|
||||
reporter_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=2, reporter=self)
|
||||
reviewer_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=2, reviewer=self)
|
||||
|
||||
defender_text = _("<p>For the second round, you will defend "
|
||||
"<a href='{solution_url}'>your solution of the problem {problem}</a>.</p>")
|
||||
@ -920,21 +920,21 @@ class Participation(models.Model):
|
||||
solution_url=solution_url,
|
||||
problem=opponent_passage.solution_number, passage_url=passage_url)
|
||||
|
||||
reporter_text = _("<p>You will report the solution of the team {reporter} on the "
|
||||
reviewer_text = _("<p>You will report the solution of the team {reviewer} on the "
|
||||
"<a href='{solution_url}'>problem {problem}. "
|
||||
"You can upload your synthesis sheet on <a href='{passage_url}'>this page</a>.</p>")
|
||||
solution_url = reporter_passage.defended_solution.file.url
|
||||
passage_url = reverse_lazy("participation:passage_detail", args=(reporter_passage.pk,))
|
||||
reporter_content = format_lazy(reporter_text, reporter=reporter_passage.defender.team.trigram,
|
||||
solution_url = reviewer_passage.defended_solution.file.url
|
||||
passage_url = reverse_lazy("participation:passage_detail", args=(reviewer_passage.pk,))
|
||||
reviewer_content = format_lazy(reviewer_text, reviewer=reviewer_passage.defender.team.trigram,
|
||||
solution_url=solution_url,
|
||||
problem=reporter_passage.solution_number, passage_url=passage_url)
|
||||
problem=reviewer_passage.solution_number, passage_url=passage_url)
|
||||
|
||||
syntheses_template_begin = f"{settings.STATIC_URL}Fiche_synthèse."
|
||||
syntheses_templates = " — ".join(f"<a href='{syntheses_template_begin}{ext}'>{ext.upper()}</a>"
|
||||
for ext in ["pdf", "tex", "odt", "docx"])
|
||||
syntheses_templates_content = f"<p>{_('Templates:')} {syntheses_templates}</p>"
|
||||
|
||||
content = defender_content + opponent_content + reporter_content + syntheses_templates_content
|
||||
content = defender_content + opponent_content + reviewer_content + syntheses_templates_content
|
||||
informations.append({
|
||||
'title': _("Second round"),
|
||||
'type': "info",
|
||||
@ -945,7 +945,7 @@ class Participation(models.Model):
|
||||
and timezone.now() <= tournament.syntheses_third_phase_limit + timedelta(hours=2):
|
||||
defender_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=3, defender=self)
|
||||
opponent_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=3, opponent=self)
|
||||
reporter_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=3, reporter=self)
|
||||
reviewer_passage = Passage.objects.get(pool__tournament=self.tournament, pool__round=3, reviewer=self)
|
||||
|
||||
defender_text = _("<p>For the third round, you will defend "
|
||||
"<a href='{solution_url}'>your solution of the problem {problem}</a>.</p>")
|
||||
@ -963,21 +963,21 @@ class Participation(models.Model):
|
||||
solution_url=solution_url,
|
||||
problem=opponent_passage.solution_number, passage_url=passage_url)
|
||||
|
||||
reporter_text = _("<p>You will report the solution of the team {reporter} on the "
|
||||
reviewer_text = _("<p>You will report the solution of the team {reviewer} on the "
|
||||
"<a href='{solution_url}'>problem {problem}. "
|
||||
"You can upload your synthesis sheet on <a href='{passage_url}'>this page</a>.</p>")
|
||||
solution_url = reporter_passage.defended_solution.file.url
|
||||
passage_url = reverse_lazy("participation:passage_detail", args=(reporter_passage.pk,))
|
||||
reporter_content = format_lazy(reporter_text, reporter=reporter_passage.defender.team.trigram,
|
||||
solution_url = reviewer_passage.defended_solution.file.url
|
||||
passage_url = reverse_lazy("participation:passage_detail", args=(reviewer_passage.pk,))
|
||||
reviewer_content = format_lazy(reviewer_text, reviewer=reviewer_passage.defender.team.trigram,
|
||||
solution_url=solution_url,
|
||||
problem=reporter_passage.solution_number, passage_url=passage_url)
|
||||
problem=reviewer_passage.solution_number, passage_url=passage_url)
|
||||
|
||||
syntheses_template_begin = f"{settings.STATIC_URL}Fiche_synthèse."
|
||||
syntheses_templates = " — ".join(f"<a href='{syntheses_template_begin}{ext}'>{ext.upper()}</a>"
|
||||
for ext in ["pdf", "tex", "odt", "docx"])
|
||||
syntheses_templates_content = f"<p>{_('Templates:')} {syntheses_templates}</p>"
|
||||
|
||||
content = defender_content + opponent_content + reporter_content + syntheses_templates_content
|
||||
content = defender_content + opponent_content + reviewer_content + syntheses_templates_content
|
||||
informations.append({
|
||||
'title': _("Second round"),
|
||||
'type': "info",
|
||||
@ -1132,7 +1132,7 @@ class Pool(models.Model):
|
||||
for passage in passages), start=["Problème", ""]),
|
||||
sum(([f"Défenseur⋅se ({passage.defender.team.trigram})", "",
|
||||
f"Opposant⋅e ({passage.opponent.team.trigram})", "",
|
||||
f"Rapporteur⋅rice ({passage.reporter.team.trigram})", ""]
|
||||
f"Rapporteur⋅rice ({passage.reviewer.team.trigram})", ""]
|
||||
for passage in passages), start=["Rôle", ""]),
|
||||
sum((["Écrit (/20)", "Oral (/20)", "Écrit (/10)", "Oral (/10)", "Écrit (/10)", "Oral (/10)"]
|
||||
for _passage in passages), start=["Juré⋅e", ""]),
|
||||
@ -1144,7 +1144,7 @@ class Pool(models.Model):
|
||||
for passage in passages:
|
||||
note = passage.notes.filter(jury=jury).first()
|
||||
line.extend([note.defender_writing, note.defender_oral, note.opponent_writing, note.opponent_oral,
|
||||
note.reporter_writing, note.reporter_oral])
|
||||
note.reviewer_writing, note.reviewer_oral])
|
||||
notes.append(line)
|
||||
notes.append([]) # Add empty line to ensure pretty design
|
||||
|
||||
@ -1204,18 +1204,18 @@ class Pool(models.Model):
|
||||
opponent_row = 5 + opponent_passage.pool.juries.count()
|
||||
opponent_col = opponent_passage.position - 1
|
||||
|
||||
reporter_passage = Passage.objects.get(reporter=participation,
|
||||
reviewer_passage = Passage.objects.get(reviewer=participation,
|
||||
pool__tournament=self.tournament, pool__round=self.round)
|
||||
reporter_row = 5 + reporter_passage.pool.juries.count()
|
||||
reporter_col = reporter_passage.position - 1
|
||||
reviewer_row = 5 + reviewer_passage.pool.juries.count()
|
||||
reviewer_col = reviewer_passage.position - 1
|
||||
|
||||
formula = "="
|
||||
formula += (f"'Poule {defender_passage.pool.short_name}'"
|
||||
f"!{getcol(min_column + defender_col * passage_width)}{defender_row + 3}") # Defender
|
||||
formula += (f" + 'Poule {opponent_passage.pool.short_name}'"
|
||||
f"!{getcol(min_column + opponent_col * passage_width + 2)}{opponent_row + 3}") # Opponent
|
||||
formula += (f" + 'Poule {reporter_passage.pool.short_name}'"
|
||||
f"!{getcol(min_column + reporter_col * passage_width + 4)}{reporter_row + 3}") # Reporter
|
||||
formula += (f" + 'Poule {reviewer_passage.pool.short_name}'"
|
||||
f"!{getcol(min_column + reviewer_col * passage_width + 4)}{reviewer_row + 3}") # reviewer
|
||||
ranking.append([f"{participation.team.name} ({participation.team.trigram})", "",
|
||||
f"='Poule {defender_passage.pool.short_name}'"
|
||||
f"!${getcol(3 + defender_col * passage_width)}$1",
|
||||
@ -1553,10 +1553,10 @@ class Passage(models.Model):
|
||||
related_name="+",
|
||||
)
|
||||
|
||||
reporter = models.ForeignKey(
|
||||
reviewer = models.ForeignKey(
|
||||
Participation,
|
||||
on_delete=models.PROTECT,
|
||||
verbose_name=_("reporter"),
|
||||
verbose_name=_("reviewer"),
|
||||
related_name="+",
|
||||
)
|
||||
|
||||
@ -1603,16 +1603,16 @@ class Passage(models.Model):
|
||||
return 0.9 * self.average_opponent_writing + 2 * self.average_opponent_oral
|
||||
|
||||
@property
|
||||
def average_reporter_writing(self) -> float:
|
||||
return self.avg(note.reporter_writing for note in self.notes.all())
|
||||
def average_reviewer_writing(self) -> float:
|
||||
return self.avg(note.reviewer_writing for note in self.notes.all())
|
||||
|
||||
@property
|
||||
def average_reporter_oral(self) -> float:
|
||||
return self.avg(note.reporter_oral for note in self.notes.all())
|
||||
def average_reviewer_oral(self) -> float:
|
||||
return self.avg(note.reviewer_oral for note in self.notes.all())
|
||||
|
||||
@property
|
||||
def average_reporter(self) -> float:
|
||||
return 0.9 * self.average_reporter_writing + self.average_reporter_oral
|
||||
def average_reviewer(self) -> float:
|
||||
return 0.9 * self.average_reviewer_writing + self.average_reviewer_oral
|
||||
|
||||
@property
|
||||
def averages(self):
|
||||
@ -1620,12 +1620,12 @@ class Passage(models.Model):
|
||||
yield self.average_defender_oral
|
||||
yield self.average_opponent_writing
|
||||
yield self.average_opponent_oral
|
||||
yield self.average_reporter_writing
|
||||
yield self.average_reporter_oral
|
||||
yield self.average_reviewer_writing
|
||||
yield self.average_reviewer_oral
|
||||
|
||||
def average(self, participation):
|
||||
return self.average_defender if participation == self.defender else self.average_opponent \
|
||||
if participation == self.opponent else self.average_reporter if participation == self.reporter else 0
|
||||
if participation == self.opponent else self.average_reviewer if participation == self.reviewer else 0
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse_lazy("participation:passage_detail", args=(self.pk,))
|
||||
@ -1637,9 +1637,9 @@ class Passage(models.Model):
|
||||
if self.opponent not in self.pool.participations.all():
|
||||
raise ValidationError(_("Team {trigram} is not registered in the pool.")
|
||||
.format(trigram=self.opponent.team.trigram))
|
||||
if self.reporter not in self.pool.participations.all():
|
||||
if self.reviewer not in self.pool.participations.all():
|
||||
raise ValidationError(_("Team {trigram} is not registered in the pool.")
|
||||
.format(trigram=self.reporter.team.trigram))
|
||||
.format(trigram=self.reviewer.team.trigram))
|
||||
return super().clean()
|
||||
|
||||
def __str__(self):
|
||||
@ -1747,7 +1747,7 @@ class Synthesis(models.Model):
|
||||
type = models.PositiveSmallIntegerField(
|
||||
choices=[
|
||||
(1, _("opponent"), ),
|
||||
(2, _("reporter"), ),
|
||||
(2, _("reviewer"), ),
|
||||
]
|
||||
)
|
||||
|
||||
@ -1811,14 +1811,14 @@ class Note(models.Model):
|
||||
default=0,
|
||||
)
|
||||
|
||||
reporter_writing = models.PositiveSmallIntegerField(
|
||||
verbose_name=_("reporter writing note"),
|
||||
reviewer_writing = models.PositiveSmallIntegerField(
|
||||
verbose_name=_("reviewer writing note"),
|
||||
choices=[(i, i) for i in range(0, 11)],
|
||||
default=0,
|
||||
)
|
||||
|
||||
reporter_oral = models.PositiveSmallIntegerField(
|
||||
verbose_name=_("reporter oral note"),
|
||||
reviewer_oral = models.PositiveSmallIntegerField(
|
||||
verbose_name=_("reviewer oral note"),
|
||||
choices=[(i, i) for i in range(0, 11)],
|
||||
default=0,
|
||||
)
|
||||
@ -1828,17 +1828,17 @@ class Note(models.Model):
|
||||
yield self.defender_oral
|
||||
yield self.opponent_writing
|
||||
yield self.opponent_oral
|
||||
yield self.reporter_writing
|
||||
yield self.reporter_oral
|
||||
yield self.reviewer_writing
|
||||
yield self.reviewer_oral
|
||||
|
||||
def set_all(self, defender_writing: int, defender_oral: int, opponent_writing: int, opponent_oral: int,
|
||||
reporter_writing: int, reporter_oral: int):
|
||||
reviewer_writing: int, reviewer_oral: int):
|
||||
self.defender_writing = defender_writing
|
||||
self.defender_oral = defender_oral
|
||||
self.opponent_writing = opponent_writing
|
||||
self.opponent_oral = opponent_oral
|
||||
self.reporter_writing = reporter_writing
|
||||
self.reporter_oral = reporter_oral
|
||||
self.reviewer_writing = reviewer_writing
|
||||
self.reviewer_oral = reviewer_oral
|
||||
|
||||
def update_spreadsheet(self):
|
||||
if not self.has_any_note():
|
||||
|
Reference in New Issue
Block a user