Skip to content
Snippets Groups Projects
Commit 085db22d authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

Přidán formulář na přidávání účastníků do soutěže

Pro jednoduché případy (přidání maléh počtu účastníků nahrazuje importy).

Closes #141
parent 275f4115
No related branches found
No related tags found
1 merge request!90Formulářová políčka; Přidání účastníka do soutěže; Editace registrace do ročníku
...@@ -23,6 +23,7 @@ from mo.rights import Right, ContestRights ...@@ -23,6 +23,7 @@ from mo.rights import Right, ContestRights
import mo.util import mo.util
from mo.util_format import inflect_number, inflect_by_number from mo.util_format import inflect_number, inflect_by_number
from mo.web import app from mo.web import app
import mo.web.fields as mo_fields
import mo.web.util import mo.web.util
from mo.web.util import MODecimalField, PagerForm from mo.web.util import MODecimalField, PagerForm
from mo.web.table import CellCheckbox, Table, Row, Column, cell_pion_link, cell_place_link, cell_email_link, cell_email_link_flags from mo.web.table import CellCheckbox, Table, Row, Column, cell_pion_link, cell_place_link, cell_email_link, cell_email_link_flags
...@@ -1631,3 +1632,60 @@ def org_contest_edit(id: int): ...@@ -1631,3 +1632,60 @@ def org_contest_edit(id: int):
contest=contest, contest=contest,
form=form, form=form,
) )
class ParticipantAddForm(FlaskForm):
email = mo_fields.Email(validators=[validators.Required()])
first_name = mo_fields.FirstName(validators=[validators.Required()])
last_name = mo_fields.LastName(validators=[validators.Required()])
school = mo_fields.School(validators=[validators.Required()])
grade = mo_fields.Grade(validators=[validators.Required()])
birth_year = mo_fields.BirthYear(validators=[validators.Required()])
participation_place = mo_fields.Place("Kód soutěžního místa")
save = wtforms.SubmitField("Přidat")
def set_descriptions(self, contest: db.Contest):
self.school.description = f'Kód školy najdete v <a href="{url_for("org_place", id=contest.place.place_id)}">katalogu míst</a>.'
self.participation_place.description = f'Pokud účastník soutěží někde jinde než {contest.place.name_locative()}, vyplňte <a href="{url_for("org_place", id=contest.place.place_id)}">kód místa</a>. Dozor na tomto místě pak může za účastníka odevzdávat řešení.'
@app.route('/org/contest/c/<int:id>/ucastnici/pridat', methods=('GET', 'POST'))
@app.route('/org/contest/c/<int:id>/site/<int:site_id>/ucastnici/pridat', methods=('GET', 'POST'))
def org_contest_add_user(id: int, site_id: Optional[int] = None):
contest, master_contest, site, rr = get_contest_site_rr(id, site_id, right_needed=Right.manage_contest)
reason = "form-add-participation"
form = ParticipantAddForm()
if site_id is not None:
if not form.is_submitted():
form.participation_place.process_data(site_id)
form.participation_place.render_kw = {"readonly": True}
form.set_descriptions(master_contest)
if form.validate_on_submit():
try:
user, is_new_user = mo.users.find_or_create_user(form.email.data, form.first_name.data, form.last_name.data, False, reason=reason)
participant, is_new_participant = mo.users.find_or_create_participant(user, contest.round.year, form.school.get_place_id(), form.birth_year.data, form.grade.data, reason=reason)
participation, is_new_participation = mo.users.find_or_create_participation(user, contest, form.participation_place.get_place(), reason=reason)
except mo.CheckError as e:
db.get_session().rollback()
flash(f"{e}", "danger")
else:
db.get_session().commit()
if is_new_user:
flash("Založen nový uživatel.", "info")
if is_new_participant:
flash("Založena nová registrace do ročníku.", "info")
if is_new_participation:
flash("Uživatel přihlášen do soutěže.", "info")
else:
flash("Žádná změna. Uživatel už byl přihlášen.", "info")
return redirect(url_for('org_contest_list', id=id, site_id=site_id))
return render_template(
'org_contest_add_user.html',
contest=master_contest, site=site,
form=form
)
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% set round = contest.round %}
{% block title %}
{{ round.round_code() }}: Přidat účastníka {% if site %}do soutěžního místa {{ site.name }}{% else %}do oblasti {{ contest.place.name }}{% endif %}
{% endblock %}
{% block breadcrumbs %}
{{ contest_breadcrumbs(round=round, contest=contest, site=site, action="Přidat účastníka") }}
{% endblock %}
{% block body %}
{% if errs %}
{% endif %}
{{ wtf.quick_form(form, form_type='simple', button_map={'save': 'primary'}) }}
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment