From 9238ddd732b14d122e474c796a4379d4392c90a3 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sat, 27 Nov 2021 22:53:00 +0100
Subject: [PATCH] =?UTF-8?q?Postup:=20Kontrolujeme=20stav=20sout=C4=9B?=
=?UTF-8?q?=C5=BE=C3=AD,=20nikoliv=20kol?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Taktéž "předchozí kolo nebylo ukončeno" je pouze varování.
---
mo/web/org_contest.py | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 228469b6..60f7c92f 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -1398,8 +1398,8 @@ def org_contest_advance(ct_id: int):
def redirect_back():
return redirect(ctx.url_for('org_contest'))
- if round.state != db.RoundState.preparing:
- flash('Aktuální kolo není ve stavu přípravy', 'danger')
+ if contest.state != db.RoundState.preparing:
+ flash('Tato soutěž není ve stavu přípravy', 'danger')
return redirect_back()
prev_round = sess.query(db.Round).filter_by(
@@ -1408,10 +1408,6 @@ def org_contest_advance(ct_id: int):
if prev_round is None:
flash('Předchozí kolo nenalezeno', 'danger')
return redirect_back()
- elif prev_round.state != db.RoundState.closed:
- # FIXME: Možná kontrolovat stav uzavření všech kol ve skupině kol?
- flash('Předchozí kolo dosud nebylo ukončeno', 'danger')
- return redirect_back()
elif prev_round.level < round.level:
flash('Předchozí kolo se koná ve vyšší oblasti než toto kolo', 'danger')
return redirect_back()
@@ -1421,19 +1417,19 @@ def org_contest_advance(ct_id: int):
reject_by_place_id: Dict[int, int] = {}
prev_pions_by_place_id: Dict[int, List[Tuple[db.Participation, Optional[decimal.Decimal], bool]]] = {}
+ desc_cte = db.place_descendant_cte(contest.place, max_level=prev_round.level)
+ prev_contests = (sess.query(db.Contest)
+ .filter(db.Contest.round == prev_round)
+ .filter(db.Contest.place_id.in_(select([desc_cte])))
+ .options(joinedload(db.Contest.place))
+ .all())
+ prev_contests.sort(key=lambda c: locale.strxfrm(c.place.name or ""))
+
form = AdvanceForm()
if form.validate_on_submit():
want_select = form.select.data or form.execute_select.data
want_execute = form.execute.data or form.execute_select.data
- desc_cte = db.place_descendant_cte(contest.place, max_level=prev_round.level)
- prev_contests = (sess.query(db.Contest)
- .filter(db.Contest.round == prev_round)
- .filter(db.Contest.place_id.in_(select([desc_cte])))
- .options(joinedload(db.Contest.place))
- .all())
- prev_contests.sort(key=lambda c: locale.strxfrm(c.place.name or ""))
-
accept_by_place_id = {c.place_id: 0 for c in prev_contests}
reject_by_place_id = {c.place_id: 0 for c in prev_contests}
prev_pions_by_place_id = {c.place_id: [] for c in prev_contests}
@@ -1528,6 +1524,9 @@ def org_contest_advance(ct_id: int):
for place_id in prev_pions_by_place_id:
prev_pions_by_place_id[place_id].sort(key=lambda x: (x[1] or 0, x[0].user.sort_key()), reverse=True)
+ if any(pc.state != db.RoundState.closed for pc in prev_contests):
+ flash('Předchozí kolo dosud nebylo ukončeno. Počty bodů nemusí být finální.', 'warning')
+
return render_template(
'org_contest_advance.html',
ctx=ctx,
--
GitLab