From 0e57dd4766c522efeff204f2b7feefb297674600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Pracha=C5=99?= <jan.prachar@gmail.com> Date: Mon, 9 May 2022 20:25:15 +0200 Subject: [PATCH] =?UTF-8?q?mo/score:=20=C5=98azen=C3=AD=20podle=20roku=20n?= =?UTF-8?q?arozen=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/score.py | 24 ++++++++++++++++++++++++ mo/web/templates/org_score.html | 4 ++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/mo/score.py b/mo/score.py index 513e8037..4972d6e4 100644 --- a/mo/score.py +++ b/mo/score.py @@ -1,4 +1,5 @@ import decimal +from flask import url_for from fractions import Fraction from sqlalchemy import and_ from sqlalchemy.orm import joinedload @@ -490,6 +491,7 @@ class Score: result._order_key.append(-modif_points) # Na konec třídícího klíče přidáme ročník (menší ročník první) + # a dotřiďovací klíč for result in self._results.values(): grade = normalize_grade(result.pant.grade) if grade == -1: @@ -500,5 +502,27 @@ class Score: result._order_key.append(grade) result._order_key.append(result.pion.score_suborder or 0) + # Pokud stále existují sdílená místa, pokusíme se použít rok narození + same_order = set() + last = None + for result in sorted(self._results.values(), key=lambda result: result._order_key): + if last and result._order_key == last._order_key: + same_order.add(last) + same_order.add(result) + last = result + if len(same_order) > 0: + if all(result.pant.birth_year for result in same_order): + links = [f"{result.user.first_name} {result.user.last_name} ({result.pant.birth_year})" for result in same_order] + self._add_message("info", f"K řazení některých soutěžících byl použit rok narození: {', '.join(links)}.") + + for result in self._results.values(): + result._order_key.append(-result.pant.birth_year if result.pant.birth_year else 0) + else: + links = [f"<a href='{url_for('org_user_participant_edit', user_id=result.user.user_id, year=result.pant.year)}'>{result.user.first_name} {result.user.last_name}</a>" for result in same_order if not result.pant.birth_year] + self._add_message( + "error", + "Doplňte prosím těmto soutežícím rok narození, aby mohl být použit pro řazení na sdílených místech: "+(", ".join(links))+"." + ) + if self._exists_same_order_key(): self.shared_places = "O pořadí na sdílených místech rozhoduje datum narození, případně je třeba ho určit losem." diff --git a/mo/web/templates/org_score.html b/mo/web/templates/org_score.html index 5175736b..aac498b9 100644 --- a/mo/web/templates/org_score.html +++ b/mo/web/templates/org_score.html @@ -66,8 +66,8 @@ Výsledky {{ round.name|round_genitive|lower }}{% if public %} {{ round.year }}. {% endif %} </p> {% for (type, msg) in messages %} - {% if type == "error" %}<p class="text-danger"><b>{{ msg }}</b></p> - {% elif type == "warning" %}<p class="text-warning">{{ msg }}</p> + {% if type == "error" %}<p class="text-danger"><b>{{ msg | safe }}</b></p> + {% elif type == "warning" %}<p class="text-warning">{{ msg | safe }}</p> {% else %}<p>{{ msg | safe }}{% endif %}</p> {% endfor %} {% endif %} -- GitLab