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