From 48cff6ef2bed853f7fe889eeef6e61a25357bee5 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Thu, 8 Sep 2022 19:11:11 +0200
Subject: [PATCH] =?UTF-8?q?Overview:=20Zakl=C3=A1d=C3=A1n=C3=AD=20sout?=
 =?UTF-8?q?=C4=9B=C5=BE=C3=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Viz #282.
---
 mo/web/org.py                   | 10 +++++++++-
 mo/web/org_round.py             | 18 ++++++++++++++++++
 mo/web/templates/org_index.html |  8 +++++++-
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/mo/web/org.py b/mo/web/org.py
index 1cdf8c0f..377f6ab3 100644
--- a/mo/web/org.py
+++ b/mo/web/org.py
@@ -11,6 +11,7 @@ import mo.rights
 import mo.users
 from mo.web import app
 from mo.web.jinja import user_url
+import mo.web.org_round
 from mo.web.table import Table, Row, Column
 
 
@@ -103,7 +104,14 @@ def org_index():
     get_stats(overview)
     overview = filter_overview(overview)
 
-    return render_template('org_index.html', overview=overview, role_type_names=db.role_type_names)
+    form_add_contest = mo.web.org_round.AddContestForm()
+
+    return render_template(
+        'org_index.html',
+        overview=overview,
+        role_type_names=db.role_type_names,
+        form_add_contest=form_add_contest,
+    )
 
 
 def get_stats(overview: List[OrgOverview]) -> None:
diff --git a/mo/web/org_round.py b/mo/web/org_round.py
index ff7c7519..fec02c95 100644
--- a/mo/web/org_round.py
+++ b/mo/web/org_round.py
@@ -81,6 +81,7 @@ def delete_task(round_id: int, form: TaskDeleteForm) -> bool:
     return False
 
 
+# Používá se i přehledu soutěží na orgovské hlavní stránce
 class AddContestForm(FlaskForm):
     place = mo_fields.Place('Nová soutěž v oblasti:', validators=[validators.DataRequired()])
     create_contest = wtforms.SubmitField('Založit')
@@ -702,3 +703,20 @@ def org_round_create_contests(round_id: int):
         form=form,
         num_new_places=len(new_places),
     )
+
+
+# Používá se v zakládacím tlačítku v přehledu soutěží na orgovské hlavní stránce
+@app.route('/org/contests/r/<int:round_id>/create-contest', methods=('POST',))
+def org_round_create_contest(round_id: int):
+    sess = db.get_session()
+    ctx = get_context(round_id=round_id)
+
+    form_add_contest = AddContestForm()
+    if not add_contest(ctx.round, form_add_contest):
+        return redirect(url_for('org_index'))
+
+    # Je jednodušší soutěž znovu najít, než se ji snažit vydolovat z mechanismu
+    # zakládání soutěží v dělených kolech.
+    contest = sess.query(db.Contest).filter_by(round=ctx.round, place=form_add_contest.place.place).first()
+    assert contest is not None
+    return redirect(ctx.url_for('org_contest', ct_id=contest.contest_id))
diff --git a/mo/web/templates/org_index.html b/mo/web/templates/org_index.html
index 75bf0405..a5962c43 100644
--- a/mo/web/templates/org_index.html
+++ b/mo/web/templates/org_index.html
@@ -1,4 +1,5 @@
 {% extends "base.html" %}
+{% import "bootstrap/wtf.html" as wtf %}
 {% block title %}Přístup pro organizátory{% endblock %}
 {% block body %}
 
@@ -61,7 +62,12 @@
 			{% endif %}
 			<td>{% for r in o.role_list %}{{ role_type_names[r] }}{% if not loop.last %}<br>{% endif %}{% endfor %}
 			{% if create %}
-			<td><a class="btn btn-xs btn-success" href='{{ detail_url }}'>Založit</a>
+			<td>
+				<form action="{{ url_for('org_round_create_contest', round_id=o.round.round_id) }}" method="POST" class="form-inline">
+					{{ form_add_contest.csrf_token() }}
+					<input name="place" type=hidden value="{{ o.place.get_code() }}">
+					<input class="btn btn-xs btn-success" name="create_contest" type="submit" value="Založit">
+				</form>
 			{% else %}
 			<td><a class="btn btn-xs btn-primary" href='{{ detail_url }}'>Detail</a>
 			{% endif %}
-- 
GitLab