From c5a48174678075ef1a2d3c162b88452e55757fb2 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sun, 26 Nov 2023 23:21:07 +0100
Subject: [PATCH] =?UTF-8?q?Statistiky=20Z:=20Po=C4=8D=C3=ADt=C3=A1me=20v?=
 =?UTF-8?q?=C5=A1echny=20aktivn=C3=AD=20=C3=BA=C4=8Dastn=C3=ADky?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/org_export.py | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/mo/web/org_export.py b/mo/web/org_export.py
index 82a69208..ebfaa58a 100644
--- a/mo/web/org_export.py
+++ b/mo/web/org_export.py
@@ -158,26 +158,25 @@ def org_export_z_stats(year: int, seq: int):
         if not g.gatekeeper.rights_for_round(rnd).have_right(Right.view_contestants):
             continue
         for successful in [False, True]:
-            min_pts = rnd.points_step
-            if successful and rnd.score_successful_limit is not None:
-                min_pts = rnd.score_successful_limit
             reg = aliased(db.Place)
-            stats = (sess.query(reg, func.count(db.Participation.user_id))
+            query = (sess.query(reg, func.count(db.Participation.user_id))
                      .select_from(db.Participation)
+                     .filter(db.Participation.state == db.PartState.active)
                      .join(db.Contest, db.Contest.contest_id == db.Participation.contest_id)
                      .filter(db.Contest.round == rnd)
                      .join(db.RegionDescendant, db.RegionDescendant.descendant == db.Contest.place_id)
                      .join(reg, reg.place_id == db.RegionDescendant.region)
-                     .filter(reg.level == 1)
-                     .filter(sess.query(db.Solution)
-                             .with_entities(func.sum(db.Solution.points))
-                             .select_from(db.Solution)
-                             .filter(db.Solution.user_id == db.Participation.user_id)
-                             .join(db.Task, db.Task.round == rnd)
-                             .filter(db.Solution.task_id == db.Task.task_id)
-                             .scalar_subquery() >= min_pts)
-                     .group_by(reg.place_id)
-                     .all())
+                     .filter(reg.level == 1))
+            if successful and rnd.score_successful_limit is not None:
+                query = query.filter(sess.query(db.Solution)
+                                     .with_entities(func.sum(db.Solution.points))
+                                     .select_from(db.Solution)
+                                     .filter(db.Solution.user_id == db.Participation.user_id)
+                                     .join(db.Task, db.Task.round == rnd)
+                                     .filter(db.Solution.task_id == db.Task.task_id)
+                                     .scalar_subquery() >= rnd.score_successful_limit)
+            query = query.group_by(reg.place_id)
+            stats = query.all()
             for reg, cnt in stats:
                 data[rnd, reg, successful] = cnt
 
-- 
GitLab