Skip to content
Snippets Groups Projects
Commit f307959e authored by Martin Mareš's avatar Martin Mareš
Browse files

UI pro generování protokolů

parent 93fe1e44
No related branches found
No related tags found
1 merge request!81Generování protokolů a zpracování scanů
This commit is part of merge request !81. Comments created here will be created in the context of that merge request.
......@@ -18,6 +18,7 @@ import mo
import mo.config as config
import mo.db as db
from mo.imports import PointsImport, ContestImport, OrgsImport
import mo.jobs.protocols
import mo.jobs.submit
from mo.rights import Right, RoundRights
import mo.util
......@@ -1629,3 +1630,55 @@ def org_contest_add_user(ct_id: int, site_id: Optional[int] = None):
contest=contest, round=ctx.master_round, site=ctx.site,
form=form
)
class ProtoGenForm(FlaskForm):
num_universal = wtforms.IntegerField(
'Univerzálních listů',
default=0,
validators=[validators.NumberRange(min=0, max=1000)],
description='Počet listů s univerzální hlavičkou, kterými může začínat řešení libovolné úlohy. ' +
'Při scanování se třídí ručně.'
)
num_blank = wtforms.IntegerField(
'Pokračovacích listů',
default=0,
validators=[validators.NumberRange(min=0, max=1000)],
description='Počet listů na pokračování řešení.',
)
gen_protos = wtforms.SubmitField('Vytvořit protokoly')
@app.route('/org/contest/c/<int:ct_id>/protocols', methods=('GET', 'POST'))
@app.route('/org/contest/c/<int:ct_id>/site/<int:site_id>/protocols', methods=('GET', 'POST'))
def org_contest_protocols(ct_id: int, site_id: Optional[int] = None):
ctx = get_context(ct_id=ct_id, site_id=site_id)
round, contest, site = ctx.round, ctx.contest, ctx.site
assert contest
class PGF(ProtoGenForm):
pass
tasks = db.get_session().query(db.Task).filter_by(round=round).order_by(db.Task.code).all()
for t in tasks:
setattr(PGF, f'task_{t.task_id}', wtforms.BooleanField(t.code, default=True))
gen_form = PGF()
gen_task_fields = [f for f in gen_form if f.name.startswith('task_')]
if gen_form.validate_on_submit() and gen_form.gen_protos.data:
mo.jobs.protocols.schedule_create_protocols(
contest, site, g.user,
tasks=[t for t in tasks if getattr(gen_form, f'task_{t.task_id}').data],
num_universal=gen_form.num_universal.data,
num_blank=gen_form.num_blank.data,
)
flash('Výroba prototokolů zahájena.', 'success')
return redirect(url_for('org_jobs'))
return render_template(
'org_contest_protocols.html',
ctx=ctx,
gen_form=gen_form,
gen_task_fields=gen_task_fields,
)
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}
Protokoly pro {{ ctx.round.name|lower }} kategorie {{ ctx.round.category }}
{% endblock %}
{% block breadcrumbs %}
{{ ctx.breadcrumbs(action="Protokoly") }}
{% endblock %}
{% block body %}
<p>Zde je možné vytvořit PDF s formuláři protokolů pro všechny soutěžící. Každý
formulář je opatřen unikátním QR kódem. FIXME: Dovysvětlit.
{% macro field(f) %}
{{ wtf.form_field(f, form_type='horizontal', horizontal_columns=('lg', 3, 7), button_map={'gen_protos': 'primary'}) }}
{% endmacro %}
<form action="" method=POST class="form form-horizontal" role="form">
{{ gen_form.csrf_token }}
{% if gen_task_fields %}
<div class='form-group'>
<label class='control-label col-lg-3' for='{{ gen_task_fields[0].id }}'>Úlohy</label>
<div class='col-lg-7'>
{% for f in gen_task_fields %}
{{ wtf.form_field(f) }}
{% endfor %}
</div>
</div>
{% endif %}
{{ field(gen_form.num_universal) }}
{{ field(gen_form.num_blank) }}
{{ field(gen_form.gen_protos) }}
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment