From 78ee212471aebf85aaa59f25529e48d4d2418532 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Mon, 11 Jan 2021 19:31:31 +0100
Subject: [PATCH] =?UTF-8?q?Spr=C3=A1vn=C3=A9=20po=C4=8D=C3=ADt=C3=A1n?=
 =?UTF-8?q?=C3=AD=20odevzdan=C3=BDch=20=C5=99e=C5=A1en=C3=AD=20u=20sout?=
 =?UTF-8?q?=C4=9B=C5=BEe?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

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

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

Fix #70
---
 mo/web/org_contest.py | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 2ded03e9..eee4493d 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -224,16 +224,18 @@ def org_contest(id: int, site_id: Optional[int] = None):
     sess = db.get_session()
     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 = (
         sess.query(db.Solution.task_id, func.count(db.Solution.task_id))
-        .filter(db.Solution.task_id.in_(
-            sess.query(db.Task.task_id).filter_by(round=contest.round)
-        ))
+        .filter(
+            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 = {}
     for task_id, count in sol_counts_q.group_by(db.Solution.task_id).all():
         sol_counts[task_id] = count
@@ -243,12 +245,8 @@ def org_contest(id: int, site_id: Optional[int] = None):
     for task in tasks:
         task.sol_count = sol_counts[task.task_id] if task.task_id in sol_counts else 0
 
-
-    count = None
     places_counts = None
-    if site_id:
-        count = sess.query(db.Participation).filter_by(place_id=site_id).count()
-    else:
+    if not site_id:
         places_counts = (
             sess.query(db.Place, func.count('*'))
             .select_from(db.Participation).join(db.Place)
@@ -261,7 +259,7 @@ def org_contest(id: int, site_id: Optional[int] = None):
         contest=contest, site=site,
         rights=sorted(rr.current_rights, key=lambda r: r. name),
         can_manage=rr.have_right(Right.manage_contest),
-        tasks=tasks, places_counts=places_counts, count=count,
+        tasks=tasks, places_counts=places_counts,
     )
 
 
-- 
GitLab