From 2ce3bcf80d1615df70fe934c82b0d4cdafa8342b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Pracha=C5=99?= <jan.prachar@gmail.com> Date: Wed, 27 Apr 2022 12:44:03 +0200 Subject: [PATCH] =?UTF-8?q?Zad=C3=A1v=C3=A1n=C3=AD=20bod=C5=AF:=20Zobrazov?= =?UTF-8?q?at=20i=20=C5=A1kolu,=20kv=C5=AFli=20duplicit=C3=A1m=20ve=20jm?= =?UTF-8?q?=C3=A9nech?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/web/org_contest.py | 21 +++++++++++-------- .../templates/parts/org_solution_table.html | 16 +++++++++++--- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py index 909c5255..2f58eaf8 100644 --- a/mo/web/org_contest.py +++ b/mo/web/org_contest.py @@ -976,9 +976,10 @@ def get_solutions_query( for_contest: Optional[db.Contest] = None, for_site: Optional[db.Place] = None) -> Query: sess = db.get_session() - query = (sess.query(db.Participation, db.Solution) + query = (sess.query(db.Participation, db.Solution, db.Participant) .select_from(db.Participation) .outerjoin(db.Solution, and_(db.Solution.task_id == task.task_id, db.Solution.user_id == db.Participation.user_id)) + .join(db.Participant, and_(db.Participant.user_id == db.Participation.user_id, db.Participant.year == task.round.year)) .options(joinedload(db.Solution.user), joinedload(db.Solution.final_submit_obj), joinedload(db.Solution.final_feedback_obj))) @@ -1010,7 +1011,7 @@ def org_contest_task(ct_id: int, task_id: int, site_id: Optional[int] = None): sess = db.get_session() q = get_solutions_query(ctx.task, for_contest=ctx.master_contest, for_site=ctx.site) - rows: List[Tuple[db.Participation, db.Solution]] = q.all() + rows: List[Tuple[db.Participation, db.Solution, db.Participant]] = q.all() rows.sort(key=lambda r: r[0].user.sort_key()) edit_form: Optional[TaskPointsEditForm] = None @@ -1021,7 +1022,7 @@ def org_contest_task(ct_id: int, task_id: int, site_id: Optional[int] = None): # Založení řešení: new_sols: List[db.Solution] = [] all_sols: List[db.Solution] = [] - for pion, sol in rows: + for pion, sol, pant in rows: if sol: all_sols.append(sol) continue # již existuje @@ -1442,12 +1443,14 @@ def org_contest_user(ct_id: int, user_id: int): if not pant: raise werkzeug.exceptions.NotFound() - task_sols = sess.query(db.Task, db.Solution).select_from(db.Task).outerjoin( - db.Solution, and_(db.Solution.task_id == db.Task.task_id, db.Solution.user == ctx.user) - ).filter(db.Task.round == ctx.round).options( - joinedload(db.Solution.final_submit_obj), - joinedload(db.Solution.final_feedback_obj) - ).order_by(db.Task.code).all() + task_sols = (sess.query(db.Task, db.Solution, db.Participant) + .select_from(db.Task) + .outerjoin(db.Solution, and_(db.Solution.task_id == db.Task.task_id, db.Solution.user == ctx.user)) + .join(db.Participant, and_(db.Participant.user_id == ctx.user.user_id, db.Participant.year == ctx.round.year)) + .filter(db.Task.round == ctx.round) + .options(joinedload(db.Solution.final_submit_obj), joinedload(db.Solution.final_feedback_obj)) + .order_by(db.Task.code) + .all()) task_sols.sort(key=lambda t: mo.util.sortby_task_code(t[0])) # Count papers for each task and solution diff --git a/mo/web/templates/parts/org_solution_table.html b/mo/web/templates/parts/org_solution_table.html index fc4e8867..65ff06ce 100644 --- a/mo/web/templates/parts/org_solution_table.html +++ b/mo/web/templates/parts/org_solution_table.html @@ -28,7 +28,10 @@ finální (ve výchozím stavu poslední nahrané).{% elif rights.can_upload_sol <thead> <tr> <th>{% if for_user %}Úloha{% else %}Účastník{% endif %} - {% if for_task %}<th>Stav účasti{% endif %} + {% if for_task %} + <th>Stav účasti + <th>Škola + {% endif %} <th>Finální řešení <th>Finální oprava <th>Poznámky @@ -40,7 +43,7 @@ finální (ve výchozím stavu poslední nahrané).{% elif rights.can_upload_sol </tr> </thead> {% set tabindex = namespace(value=1) %} -{% for obj, sol in rows %} +{% for obj, sol, pant in rows %} {% set u = for_user or obj.user %} {% set task = for_task or obj %} {% if for_task %} @@ -53,7 +56,14 @@ finální (ve výchozím stavu poslední nahrané).{% elif rights.can_upload_sol {% else %} {{ u|pion_link(contest.contest_id) }}{{ u|user_flags }}</a> {% endif %} - {% if for_task %}<td>{{ obj.state.friendly_name() }}{% endif %} + {% if for_task %} + <td>{{ obj.state.friendly_name() }} + <td> + <a href="{{ url_for('org_place', id=pant.school_place.place_id) }}" + title="{{ pant.school_place.name }}"> + {{ pant.school_place.get_code() }} + </a> + {% endif %} {% if sol %} <td>{% if sol.final_submit_obj %} {% set p = sol.final_submit_obj %} -- GitLab