From 13db23d7bf9b013211ba9fbdd4b54daf84a553c8 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sun, 19 Nov 2023 23:20:39 +0100
Subject: [PATCH] WIP: Statistiky

---
 mo/web/org_export.py | 45 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/mo/web/org_export.py b/mo/web/org_export.py
index 280d0aba..904aaf25 100644
--- a/mo/web/org_export.py
+++ b/mo/web/org_export.py
@@ -2,7 +2,7 @@
 
 from flask import request, g
 import locale
-from sqlalchemy import and_
+from sqlalchemy import and_, func
 from sqlalchemy.orm import aliased, joinedload
 import werkzeug.exceptions
 
@@ -134,3 +134,46 @@ def org_export_school_orgs(region: str):
         filename='skoly-organizatori',
     )
     return table.send_as(format, streaming=True)
+
+
+@app.route('/org/export/z-stats/<int:year>/<int:seq>')
+def org_export_z_stats(year: int, seq: int):
+    format = request.args.get('format', 'en_csv')
+    sess = db.get_session()
+
+    regions = (sess.query(db.Place)
+               .filter_by(level=1)
+               .all())
+
+    rounds = (sess.query(db.Round)
+              .filter(db.Round.category.like('Z%'))
+              .filter_by(year=year, seq=seq)
+              .all())
+
+    print(rounds)
+
+    table = {}
+
+    for rnd in rounds:
+        # FIXME: Check rights
+        reg = aliased(db.Place)
+        print('=========', rnd.round_code())
+        pions = (sess.query(reg.place_id, reg.code, func.count(db.Participation.user_id))
+                 .select_from(db.Participation)
+                 .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() > 0)
+                 .group_by(reg.place_id)
+                 .all())
+        print(pions)
+
+    return ""
-- 
GitLab