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