From 46c04ad089637ac6d3759d117a9a1e09db534991 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Sun, 7 Mar 2021 20:32:24 +0100
Subject: [PATCH] =?UTF-8?q?Postup=20z=20minul=C3=A9ho=20kola=20po=C4=8D?=
=?UTF-8?q?=C3=ADt=C3=A1=20s=20d=C4=9Blen=C3=BDmi=20koly?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Pro vybírání minulého kola bere jen master kolo, úlohy pro počítání bodů
vybíráme z celé skupiny kol.
Issue #178
---
mo/web/org_contest.py | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 7b49f572..a4855052 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -1413,11 +1413,14 @@ def org_contest_advance(contest_id: int):
flash('Aktuální kolo není ve stavu přípravy', 'danger')
return redirect_back()
- prev_round = sess.query(db.Round).filter_by(year=round.year, category=round.category, seq=round.seq - 1).one_or_none()
+ prev_round = sess.query(db.Round).filter_by(
+ year=round.year, category=round.category, seq=round.seq - 1
+ ).filter(db.Round.master_round_id == db.Round.round_id).one_or_none()
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:
@@ -1449,7 +1452,8 @@ def org_contest_advance(contest_id: int):
if form.boundary.data > 0:
accept_uids = (sess.query(db.Solution.user_id)
.select_from(db.Solution)
- .join(db.Task, and_(db.Task.task_id == db.Solution.task_id, db.Task.round == prev_round))
+ # Vybíráme úlohy, jejich round patří do stejné skupiny kol jako prev_round
+ .join(db.Task, and_(db.Task.task_id == db.Solution.task_id, db.Task.round.master_round_id == prev_round.round_id))
.filter(db.Solution.user_id.in_(prev_pion_query.with_entities(db.Participation.user_id).subquery()))
.group_by(db.Solution.user_id)
.having(func.sum(db.Solution.points) >= form.boundary.data)
@@ -1460,10 +1464,10 @@ def org_contest_advance(contest_id: int):
want_execute = form.execute.data
if want_execute:
- app.logger.info(f'Postup: Z kola #{prev_round.round_id} do #{round.round_id}, soutěž #{contest_id}')
+ app.logger.info(f'Postup: Z kola #{prev_round.round_id} do #{round.master_round_id}, soutěž #{master_contest.contest_id}')
mo.util.log(
type=db.LogType.contest,
- what=contest_id,
+ what=master_contest.contest_id,
details={'action': 'advance'},
)
--
GitLab