diff --git a/mo/web/org_round.py b/mo/web/org_round.py index c0c698479301cd02961fc08c3b8450ab752e14d6..5966b90ad9fc07c2c1496500da501115f5528dd6 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