From bed79af58559cf1690c7b4919ede0393f6e9ea04 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Mon, 12 Apr 2021 17:06:22 +0200
Subject: [PATCH] =?UTF-8?q?Dokud=20neexistuj=C3=AD=20=C5=BE=C3=A1dn=C3=A9?=
 =?UTF-8?q?=20=C3=BAlohy,=20kolo=20nesm=C3=AD=20opustit=20stav=20"p=C5=99i?=
 =?UTF-8?q?pravuje=20se"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #198.
---
 mo/web/org_round.py | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/mo/web/org_round.py b/mo/web/org_round.py
index c0c69847..5966b90a 100644
--- a/mo/web/org_round.py
+++ b/mo/web/org_round.py
@@ -416,6 +416,8 @@ class MODateTimeField(wtforms.DateTimeField):
 
 
 class RoundEditForm(FlaskForm):
+    _for_round: Optional[db.Round] = None
+
     name = wtforms.StringField("Název", render_kw={'autofocus': True})
     state = wtforms.SelectField(
         "Stav kola", choices=db.RoundState.choices(), coerce=db.RoundState.coerce,
@@ -445,8 +447,13 @@ class RoundEditForm(FlaskForm):
     submit = wtforms.SubmitField('Uložit')
 
     def validate_state(self, field):
-        if field.data != db.RoundState.preparing and self.ct_tasks_start.data is None:
-            raise ValidationError('Není-li nastaven času začátku soutěže, stav musí být "připravuje se"')
+        if field.data != db.RoundState.preparing:
+            if self.ct_tasks_start.data is None:
+                raise ValidationError('Není-li nastaven času začátku soutěže, stav musí být "připravuje se"')
+            if self._for_round is not None:
+                num_tasks = db.get_session().query(db.Task).filter_by(round=self._for_round).count()
+                if num_tasks == 0:
+                    raise ValidationError('Nejsou-li definovány žádné úlohy, stav musí být "připravuje se"')
 
 
 @app.route('/org/contest/r/<int:id>/edit', methods=('GET', 'POST'))
@@ -455,6 +462,7 @@ def org_round_edit(id: int):
     round, _, rr = get_round_rr(id, Right.manage_round, True)
 
     form = RoundEditForm(obj=round)
+    form._for_round = round
     if round.is_subround():
         # podkolo nemá nastavení výsledkové listiny
         del form.score_mode
-- 
GitLab