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