Skip to content
Snippets Groups Projects
Commit 78ee2124 authored by Jiří Setnička's avatar Jiří Setnička
Browse files

Správné počítání odevzdaných řešení u soutěže

Započítáváme jen solution od Participations tohoto contestu.

Také odstraněno již nepotřebné count.

Fix #70
parent 9bf70cfc
Branches
No related tags found
1 merge request!9WIP: Zárodek uživatelské části webu a submitování
...@@ -224,16 +224,18 @@ def org_contest(id: int, site_id: Optional[int] = None): ...@@ -224,16 +224,18 @@ def org_contest(id: int, site_id: Optional[int] = None):
sess = db.get_session() sess = db.get_session()
contest, site, rr = get_contest_site_rr(id, site_id, None) contest, site, rr = get_contest_site_rr(id, site_id, None)
tasks_subq = sess.query(db.Task.task_id).filter_by(round=contest.round)
pions_subq = sess.query(db.Participation.user_id).filter_by(contest=contest)
if site:
pions_subq = pions_subq.filter_by(place=site)
sol_counts_q = ( sol_counts_q = (
sess.query(db.Solution.task_id, func.count(db.Solution.task_id)) sess.query(db.Solution.task_id, func.count(db.Solution.task_id))
.filter(db.Solution.task_id.in_( .filter(
sess.query(db.Task.task_id).filter_by(round=contest.round) db.Solution.task_id.in_(tasks_subq),
)) db.Solution.user_id.in_(pions_subq),
) )
if site: )
sol_counts_q = sol_counts_q.filter(db.Solution.user_id.in_(
sess.query(db.Participation.user_id).filter_by(place=site)
))
sol_counts = {} sol_counts = {}
for task_id, count in sol_counts_q.group_by(db.Solution.task_id).all(): for task_id, count in sol_counts_q.group_by(db.Solution.task_id).all():
sol_counts[task_id] = count sol_counts[task_id] = count
...@@ -243,12 +245,8 @@ def org_contest(id: int, site_id: Optional[int] = None): ...@@ -243,12 +245,8 @@ def org_contest(id: int, site_id: Optional[int] = None):
for task in tasks: for task in tasks:
task.sol_count = sol_counts[task.task_id] if task.task_id in sol_counts else 0 task.sol_count = sol_counts[task.task_id] if task.task_id in sol_counts else 0
count = None
places_counts = None places_counts = None
if site_id: if not site_id:
count = sess.query(db.Participation).filter_by(place_id=site_id).count()
else:
places_counts = ( places_counts = (
sess.query(db.Place, func.count('*')) sess.query(db.Place, func.count('*'))
.select_from(db.Participation).join(db.Place) .select_from(db.Participation).join(db.Place)
...@@ -261,7 +259,7 @@ def org_contest(id: int, site_id: Optional[int] = None): ...@@ -261,7 +259,7 @@ def org_contest(id: int, site_id: Optional[int] = None):
contest=contest, site=site, contest=contest, site=site,
rights=sorted(rr.current_rights, key=lambda r: r. name), rights=sorted(rr.current_rights, key=lambda r: r. name),
can_manage=rr.have_right(Right.manage_contest), can_manage=rr.have_right(Right.manage_contest),
tasks=tasks, places_counts=places_counts, count=count, tasks=tasks, places_counts=places_counts,
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment