From 0d425d10d12260d53c7942a2aa8af96599eff1d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Sun, 7 Mar 2021 20:26:25 +0100
Subject: [PATCH] =?UTF-8?q?D=C3=A1vkov=C3=A9=20operace=20(import,=20downlo?=
 =?UTF-8?q?ad,=20upload)=20upraveny=20pro=20d=C4=9Blen=C3=A1=20kola?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Issue #178
---
 mo/jobs/submit.py     |  4 ++--
 mo/web/org_contest.py | 13 ++++++++-----
 mo/web/org_round.py   |  2 +-
 3 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/mo/jobs/submit.py b/mo/jobs/submit.py
index 019b9074..3f40f738 100644
--- a/mo/jobs/submit.py
+++ b/mo/jobs/submit.py
@@ -51,7 +51,7 @@ def handle_download_submits(the_job: TheJob):
               .join(db.User, db.User.user_id == db.Paper.for_user)
               .join(db.Task, db.Task.task_id == db.Paper.for_task)
               .join(db.Participation, db.Participation.user_id == db.Paper.for_user)
-              .join(db.Contest, and_(db.Contest.contest_id == db.Participation.contest_id, db.Contest.round_id == db.Task.round_id))
+              .join(db.Contest, and_(db.Contest.master_contest_id == db.Participation.contest_id, db.Contest.round_id == db.Task.round_id))
               .join(db.Place, db.Place.place_id == db.Contest.place_id)
               .all())
     papers.sort(key=lambda p: (p[1].sort_key(), p[2]))
@@ -216,7 +216,7 @@ def handle_upload_feedback(the_job: TheJob):
         rows = (sess.query(db.User, db.Participation, db.Contest)
                 .select_from(db.Participation)
                 .join(db.User, db.User.user_id == db.Participation.user_id)
-                .join(db.Contest, db.Contest.contest_id == db.Participation.contest_id)
+                .join(db.Contest, db.Contest.master_contest_id == db.Participation.contest_id)
                 .filter(db.Contest.round == round)
                 .filter(db.Participation.user_id.in_(user_dict.keys()))
                 .all())
diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index c8963755..7b49f572 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -370,7 +370,7 @@ def org_contest(id: int, site_id: Optional[int] = None):
     )
 
 
-def generic_import(round: db.Round, contest: Optional[db.Contest]):
+def generic_import(round: db.Round, master_round: db.Round, contest: Optional[db.Contest], master_contest: Optional[db.Contest]):
     """Společná funkce pro importování do soutěží a kol"""
 
     form = ImportForm()
@@ -378,7 +378,7 @@ def generic_import(round: db.Round, contest: Optional[db.Contest]):
     warnings = []
     if form.validate_on_submit():
         fmt = form.fmt.data
-        imp = create_import(user=g.user, type=form.typ.data, fmt=fmt, round=round, contest=contest)
+        imp = create_import(user=g.user, type=form.typ.data, fmt=fmt, round=master_round, contest=master_contest)
         if form.submit.data:
             if form.file.data is not None:
                 file = form.file.data.stream
@@ -423,7 +423,10 @@ def doc_import():
 @app.route('/org/contest/c/<int:id>/import', methods=('GET', 'POST'))
 def org_contest_import(id: int):
     contest, master_contest, rr = get_contest_rr(id, Right.manage_contest)
-    return generic_import(contest.round, contest)
+    return generic_import(
+        round=contest.round, master_round=master_contest.round,
+        contest=contest, master_contest=master_contest
+    )
 
 
 @app.route('/org/contest/c/<int:id>/ucastnici', methods=('GET', 'POST'))
@@ -1188,11 +1191,11 @@ def generic_batch_download(round: db.Round, contest: Optional[db.Contest], site:
 
     pion_query = sess.query(db.Participation.user_id).select_from(db.Participation)
     if contest is not None:
-        pion_query = pion_query.filter_by(contest=contest)
+        pion_query = pion_query.filter_by(contest_id=contest.master_contest_id)
         if site is not None:
             pion_query = pion_query.filter_by(place=site)
     else:
-        pion_query = pion_query.join(db.Contest).filter(db.Contest.round == round)
+        pion_query = pion_query.join(db.Contest).filter(db.Contest.round_id == round.master_round_id)
 
     sol_query = (sess.query(db.Solution)
                  .select_from(db.Solution)
diff --git a/mo/web/org_round.py b/mo/web/org_round.py
index 70e44ad6..6a5e74c2 100644
--- a/mo/web/org_round.py
+++ b/mo/web/org_round.py
@@ -363,7 +363,7 @@ def org_round_list(id: int):
 @app.route('/org/contest/r/<int:id>/import', methods=('GET', 'POST'))
 def org_round_import(id: int):
     round, master_round, rr = get_round_rr(id, Right.manage_contest, True)
-    return generic_import(round, None)
+    return generic_import(round, master_round, None, None)
 
 
 class MODateTimeField(wtforms.DateTimeField):
-- 
GitLab