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

Protokoly: UI na objednání zpracování scanů

parent aef43e44
No related branches found
No related tags found
No related merge requests found
This commit is part of merge request !81. Comments created here will be created in the context of that merge request.
......@@ -1663,7 +1663,7 @@ def org_contest_add_user(ct_id: int, site_id: Optional[int] = None):
)
class ProtoGenForm(FlaskForm):
class GenProtoForm(FlaskForm):
num_universal = wtforms.IntegerField(
'Univerzálních listů',
default=0,
......@@ -1680,6 +1680,11 @@ class ProtoGenForm(FlaskForm):
gen_protos = wtforms.SubmitField('Vytvořit protokoly')
class ProcessScansForm(FlaskForm):
files = wtforms.MultipleFileField('Soubory PDF se scany', validators=[validators.required()])
process_scans = wtforms.SubmitField('Zpracovat scany')
@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):
......@@ -1687,16 +1692,23 @@ def org_contest_protocols(ct_id: int, site_id: Optional[int] = None):
round, contest, site = ctx.round, ctx.contest, ctx.site
assert contest
class PGF(ProtoGenForm):
class GPF(GenProtoForm):
pass
class PSF(ProcessScansForm):
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))
setattr(GPF, f'task_{t.task_id}', wtforms.BooleanField(t.code, default=True))
setattr(PSF, f'task_{t.task_id}', wtforms.BooleanField(t.code, default=True))
gen_form = PGF()
gen_form = GPF()
gen_task_fields = [f for f in gen_form if f.name.startswith('task_')]
proc_form = PSF()
proc_task_fields = [f for f in proc_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,
......@@ -1707,9 +1719,21 @@ def org_contest_protocols(ct_id: int, site_id: Optional[int] = None):
flash('Výroba prototokolů zahájena.', 'success')
return redirect(url_for('org_jobs'))
if proc_form.validate_on_submit() and proc_form.process_scans.data:
files = request.files.getlist(proc_form.files.name)
mo.jobs.protocols.schedule_process_scans(
contest, site, g.user,
tasks=[t for t in tasks if getattr(proc_form, f'task_{t.task_id}').data],
in_file_names=[f.stream.name for f in files],
)
flash('Zpracování scanů zahájeno.', '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,
proc_form=proc_form,
proc_task_fields=proc_task_fields,
)
......@@ -12,8 +12,10 @@ Protokoly pro {{ ctx.round.name|lower }} kategorie {{ ctx.round.category }}
<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.
<h3>Formuláře protokolů</h3>
{% macro field(f) %}
{{ wtf.form_field(f, form_type='horizontal', horizontal_columns=('lg', 3, 7), button_map={'gen_protos': 'primary'}) }}
{{ wtf.form_field(f, form_type='horizontal', horizontal_columns=('lg', 3, 7), button_map={'gen_protos': 'primary', 'process_scans': 'primary'}) }}
{% endmacro %}
<form action="" method=POST class="form form-horizontal" role="form">
......@@ -31,4 +33,24 @@ formulář je opatřen unikátním QR kódem. FIXME: Dovysvětlit.
{{ field(gen_form.num_universal) }}
{{ field(gen_form.num_blank) }}
{{ field(gen_form.gen_protos) }}
</form>
<h3>Zpracování scanů</h3>
<form action="" method=POST class="form form-horizontal" role="form" enctype='multipart/form-data'>
{{ proc_form.csrf_token }}
{% if proc_task_fields %}
<div class='form-group'>
<label class='control-label col-lg-3' for='{{ proc_task_fields[0].id }}'>Úlohy</label>
<div class='col-lg-7'>
{% for f in proc_task_fields %}
{{ wtf.form_field(f) }}
{% endfor %}
</div>
</div>
{% endif %}
{{ field(proc_form.files) }}
{{ field(proc_form.process_scans) }}
</form>
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment