Skip to content
Snippets Groups Projects
Commit 2345c941 authored by Jiří Setnička's avatar Jiří Setnička
Browse files

Kola: Základní editace parametrů

parent ec76b632
No related branches found
No related tags found
2 merge requests!10Nastavení kol a úloh,!9WIP: Zárodek uživatelské části webu a submitování
......@@ -11,6 +11,7 @@ class Right(Enum):
assign_rights = auto()
edit_region = auto()
edit_place = auto()
manage_round = auto()
manage_contest = auto()
upload_solutions = auto()
upload_feedback = auto()
......@@ -42,6 +43,7 @@ roles: List[Role] = [
rights={
Right.assign_rights,
Right.edit_place,
Right.manage_round,
Right.manage_contest,
Right.add_users,
Right.edit_users,
......
......@@ -3,8 +3,12 @@ from flask import render_template, g, redirect, url_for, flash, request
import locale
import os
import secrets
from flask_wtf.form import FlaskForm
from sqlalchemy.orm import joinedload
import werkzeug.exceptions
import wtforms
from wtforms import validators
from wtforms.fields.html5 import DateTimeLocalField
import mo
import mo.csv
......@@ -60,7 +64,8 @@ def org_round(id: int):
round=round,
contests=contests,
level_names=mo.db.place_level_names,
can_manage=rr.have_right(mo.rights.Right.manage_contest),
can_manage_round=rr.have_right(mo.rights.Right.manage_round),
can_manage_contestants=rr.have_right(mo.rights.Right.manage_contest),
)
......@@ -125,3 +130,54 @@ def org_round_import(id: int):
form=form,
errs=errs,
)
class RoundEditForm(FlaskForm):
state = wtforms.SelectField("Stav kola", choices=db.RoundState.choices())
# Only the desktop Firefox does not support datetime-local field nowadays,
# other browsers does provide date and time picker UI :(
submit_start = DateTimeLocalField(
"Začátek kola", validators=[validators.Optional()],
description="Ve formátu 2020-01-01 00:00:00"
)
ct_submit_end = DateTimeLocalField(
"Konec odevzdávání pro účastníky", validators=[validators.Optional()],
description="Ve formátu 2020-01-01 00:00:00"
)
pr_submit_end = DateTimeLocalField(
"Konec odevzdávání pro dozor", validators=[validators.Optional()],
description="Ve formátu 2020-01-01 00:00:00"
)
submit = wtforms.SubmitField('Uložit')
@app.route('/org/contest/r/<int:id>/edit', methods=('GET', 'POST'))
def org_round_edit(id: int):
sess = db.get_session()
round, rr = get_round_rr(id, mo.rights.Right.manage_round)
form = RoundEditForm(obj=round)
if form.validate_on_submit():
form.populate_obj(round)
if sess.is_modified(round):
changes = db.get_object_changes(round)
app.logger.info(f"Round {id} modified, changes: {changes}")
mo.util.log(
type=db.LogType.round,
what=id,
details={'action': 'edit', 'changes': changes},
)
sess.commit()
flash('Změny kola uloženy', 'success')
else:
flash(u'Žádné změny k uložení', 'info')
return redirect(url_for('org_round', id=id))
return render_template(
'org_round_edit.html',
round=round,
form=form,
)
......@@ -18,9 +18,12 @@
<div class="btn-group">
{% if can_manage %}
{% if can_manage_contestants %}
<a class="btn btn-primary" href='{{ url_for('org_round_import', id=round.round_id) }}'>Importovat účastníky</a>
{% endif %}
{% if can_manage_round %}
<a class="btn btn-primary" href='{{ url_for('org_round_edit', id=round.round_id) }}'>Editovat nastavení kola</a>
{% endif %}
</div>
<h3>Soutěže</h3>
......
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block body %}
<h2>
<a href='{{ url_for('org_round', id=round.round_id) }}'>Kolo {{ round.round_code() }}</a>­­
» Editace
</h2>
{{ wtf.quick_form(form, form_type='horizontal') }}
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment