From b2ade683d27599bb8ce62fc52baceefa59fd4b15 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 2 Jul 2021 23:40:48 +0200
Subject: [PATCH] Protokoly: UI
---
mo/web/org_contest.py | 32 +++++++++++++++++++--
mo/web/templates/org_contest_protocols.html | 19 +++++++++++-
2 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 66439652..7d02b875 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -1638,6 +1638,19 @@ def org_contest_edit(id: int):
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')
@@ -1646,9 +1659,23 @@ class ProtoGenForm(FlaskForm):
def org_contest_protocols(id: int, site_id: Optional[int] = None):
sc = get_solution_context(id, None, None, site_id)
- gen_form = ProtoGenForm()
+ class PGF(ProtoGenForm):
+ pass
+
+ tasks = db.get_session().query(db.Task).filter_by(round=sc.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(sc.contest, sc.site, g.user)
+ mo.jobs.protocols.schedule_create_protocols(
+ sc.contest, sc.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'))
@@ -1658,4 +1685,5 @@ def org_contest_protocols(id: int, site_id: Optional[int] = None):
round=sc.round,
site=sc.site,
gen_form=gen_form,
+ gen_task_fields=gen_task_fields,
)
diff --git a/mo/web/templates/org_contest_protocols.html b/mo/web/templates/org_contest_protocols.html
index 92e768ef..550aa5d9 100644
--- a/mo/web/templates/org_contest_protocols.html
+++ b/mo/web/templates/org_contest_protocols.html
@@ -13,6 +13,23 @@ Protokoly pro {{ round.name|lower }} kategorie {{ 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.
-{{ wtf.quick_form(gen_form, button_map={'gen_protos': 'primary'}) }}
+{% 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 %}
--
GitLab