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): ...@@ -11,6 +11,7 @@ class Right(Enum):
assign_rights = auto() assign_rights = auto()
edit_region = auto() edit_region = auto()
edit_place = auto() edit_place = auto()
manage_round = auto()
manage_contest = auto() manage_contest = auto()
upload_solutions = auto() upload_solutions = auto()
upload_feedback = auto() upload_feedback = auto()
...@@ -42,6 +43,7 @@ roles: List[Role] = [ ...@@ -42,6 +43,7 @@ roles: List[Role] = [
rights={ rights={
Right.assign_rights, Right.assign_rights,
Right.edit_place, Right.edit_place,
Right.manage_round,
Right.manage_contest, Right.manage_contest,
Right.add_users, Right.add_users,
Right.edit_users, Right.edit_users,
......
...@@ -3,8 +3,12 @@ from flask import render_template, g, redirect, url_for, flash, request ...@@ -3,8 +3,12 @@ from flask import render_template, g, redirect, url_for, flash, request
import locale import locale
import os import os
import secrets import secrets
from flask_wtf.form import FlaskForm
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
import werkzeug.exceptions import werkzeug.exceptions
import wtforms
from wtforms import validators
from wtforms.fields.html5 import DateTimeLocalField
import mo import mo
import mo.csv import mo.csv
...@@ -60,7 +64,8 @@ def org_round(id: int): ...@@ -60,7 +64,8 @@ def org_round(id: int):
round=round, round=round,
contests=contests, contests=contests,
level_names=mo.db.place_level_names, 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): ...@@ -125,3 +130,54 @@ def org_round_import(id: int):
form=form, form=form,
errs=errs, 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 @@ ...@@ -18,9 +18,12 @@
<div class="btn-group"> <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> <a class="btn btn-primary" href='{{ url_for('org_round_import', id=round.round_id) }}'>Importovat účastníky</a>
{% endif %} {% 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> </div>
<h3>Soutěže</h3> <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