Skip to content
Snippets Groups Projects
Commit 7145eb72 authored by Martin Mareš's avatar Martin Mareš
Browse files

Hierarchie: Správa účastníků

parent 754adc40
No related branches found
No related tags found
1 merge request!95Reforma orgovského rozhraní ke kolům a soutěžím
This commit is part of merge request !95. Comments created here will be created in the context of that merge request.
...@@ -7,6 +7,7 @@ from sqlalchemy import func, and_, select ...@@ -7,6 +7,7 @@ from sqlalchemy import func, and_, select
from sqlalchemy.orm import joinedload, aliased from sqlalchemy.orm import joinedload, aliased
from sqlalchemy.orm.query import Query from sqlalchemy.orm.query import Query
from sqlalchemy.dialects.postgresql import insert as pgsql_insert from sqlalchemy.dialects.postgresql import insert as pgsql_insert
import sqlalchemy.sql.schema
from typing import Any, List, Tuple, Optional, Dict from typing import Any, List, Tuple, Optional, Dict
import urllib.parse import urllib.parse
import werkzeug.exceptions import werkzeug.exceptions
...@@ -483,8 +484,11 @@ def org_generic_import(round_id: Optional[int] = None, ct_id: Optional[int] = No ...@@ -483,8 +484,11 @@ def org_generic_import(round_id: Optional[int] = None, ct_id: Optional[int] = No
@app.route('/org/contest/c/<int:ct_id>/site/<int:site_id>/participants/emails', endpoint="org_generic_list_emails") @app.route('/org/contest/c/<int:ct_id>/site/<int:site_id>/participants/emails', endpoint="org_generic_list_emails")
@app.route('/org/contest/r/<int:round_id>/participants', methods=('GET', 'POST')) @app.route('/org/contest/r/<int:round_id>/participants', methods=('GET', 'POST'))
@app.route('/org/contest/r/<int:round_id>/participants/emails', endpoint="org_generic_list_emails") @app.route('/org/contest/r/<int:round_id>/participants/emails', endpoint="org_generic_list_emails")
def org_generic_list(round_id: Optional[int] = None, ct_id: Optional[int] = None, site_id: Optional[int] = None): @app.route('/org/contest/r/<int:round_id>/h/<int:hier_id>/participants', methods=('GET', 'POST'))
ctx = get_context(round_id=round_id, ct_id=ct_id, site_id=site_id, right_needed=Right.view_contestants) @app.route('/org/contest/r/<int:round_id>/h/<int:hier_id>/participants/emails', endpoint="org_generic_list_emails")
def org_generic_list(round_id: Optional[int] = None, hier_id: Optional[int] = None,
ct_id: Optional[int] = None, site_id: Optional[int] = None):
ctx = get_context(round_id=round_id, hier_id=hier_id, ct_id=ct_id, site_id=site_id, right_needed=Right.view_contestants)
round, contest = ctx.master_round, ctx.master_contest round, contest = ctx.master_round, ctx.master_contest
rr = ctx.rights rr = ctx.rights
can_edit = rr.have_right(Right.manage_contest) and request.endpoint != 'org_generic_list_emails' can_edit = rr.have_right(Right.manage_contest) and request.endpoint != 'org_generic_list_emails'
...@@ -495,7 +499,7 @@ def org_generic_list(round_id: Optional[int] = None, ct_id: Optional[int] = None ...@@ -495,7 +499,7 @@ def org_generic_list(round_id: Optional[int] = None, ct_id: Optional[int] = None
filter.validate() filter.validate()
query = get_contestants_query( query = get_contestants_query(
round=round, contest=contest, site=ctx.site, ctx=ctx,
school=filter.school.place, school=filter.school.place,
contest_place=filter.contest_place.place, contest_place=filter.contest_place.place,
participation_place=filter.participation_place.place, participation_place=filter.participation_place.place,
...@@ -550,8 +554,7 @@ contest_list_columns = ( ...@@ -550,8 +554,7 @@ contest_list_columns = (
def get_contestants_query( def get_contestants_query(
round: db.Round, contest: Optional[db.Contest] = None, ctx: Context,
site: Optional[db.Place] = None,
contest_place: Optional[db.Place] = None, contest_place: Optional[db.Place] = None,
participation_place: Optional[db.Place] = None, participation_place: Optional[db.Place] = None,
participation_state: Optional[db.PartState] = None, participation_state: Optional[db.PartState] = None,
...@@ -561,15 +564,18 @@ def get_contestants_query( ...@@ -561,15 +564,18 @@ def get_contestants_query(
.select_from(db.Participation) .select_from(db.Participation)
.join(db.Participant, db.Participant.user_id == db.Participation.user_id) .join(db.Participant, db.Participant.user_id == db.Participation.user_id)
.join(db.User, db.User.user_id == db.Participation.user_id) .join(db.User, db.User.user_id == db.Participation.user_id)
.filter(db.Participant.year == round.year)) .join(db.Contest)
if contest: .filter(db.Participant.year == ctx.round.year)
query = query.join(db.Contest, db.Contest.contest_id == contest.contest_id) .filter(db.Participation.contest_id == db.Contest.contest_id))
if ctx.contest:
query = query.filter(db.Contest.contest_id == ctx.contest.contest_id)
if ctx.site:
query = query.filter(db.Participation.place_id == ctx.site.place_id)
else: else:
query = query.filter(db.Contest.round == round) query = query.filter(db.Contest.round == ctx.round)
if ctx.hier_place:
query = db.filter_place_nth_parent(query, db.Contest.place_id, ctx.round.level - ctx.hier_place.level, ctx.hier_place.place_id)
query = query.options(joinedload(db.Contest.place)) query = query.options(joinedload(db.Contest.place))
query = query.filter(db.Participation.contest_id == db.Contest.contest_id)
if site:
query = query.filter(db.Participation.place_id == site.place_id)
if contest_place: if contest_place:
query = query.filter(db.Contest.place_id == contest_place.place_id) query = query.filter(db.Contest.place_id == contest_place.place_id)
if participation_place: if participation_place:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment