Skip to content
Snippets Groups Projects
Commit 01dfc3ab authored by Jiří Setnička's avatar Jiří Setnička
Browse files

Jinja: Zaveden filter decimal, použit pro body

Pokud je decimal celé číslo, tak nezobrazuje desetinnou část.
parent e980a029
No related branches found
No related tags found
1 merge request!51Desetinné body
# Utils that do not depend on any other in mo (to avoid circular dependency)
from datetime import datetime
import decimal
from typing import Optional
import mo
......@@ -120,3 +121,12 @@ def data_size(bytes: int) -> str:
return f'{bytes/(1<<20):.1f} MiB'
else:
return f'{bytes/(1<<10):.1f} KiB'
def format_decimal(points: Optional[decimal.Decimal]) -> Optional[str]:
if points is None:
return None
elif points % 1 == 0:
return str(int(points))
else:
return str(points)
......@@ -27,6 +27,7 @@ app.jinja_env.filters.update(inflected=util_format.inflect_number)
app.jinja_env.filters.update(timedelta=util_format.timedelta)
app.jinja_env.filters.update(time_and_timedelta=util_format.time_and_timedelta)
app.jinja_env.filters.update(data_size=util_format.data_size)
app.jinja_env.filters.update(decimal=util_format.format_decimal)
# Exporty proměnných
......
......@@ -10,6 +10,7 @@ from mo.rights import Right
from mo.score import Score
from mo.web import app
from mo.web.table import Cell, CellLink, Column, Row, Table, cell_pion_link
from mo.util_format import format_decimal
class OrderCell(Cell):
......@@ -52,7 +53,7 @@ class SolPointsCell(Cell):
return ''
elif self.sol.points is None:
return '?'
return str(self.sol.points)
return format_decimal(self.sol.points)
def to_html(self) -> str:
if not self.sol:
......@@ -60,7 +61,7 @@ class SolPointsCell(Cell):
elif self.sol.points is None:
points = '<span class="unknown">?</span></a>'
else:
points = str(self.sol.points)
points = format_decimal(self.sol.points)
if self.sol.final_feedback_obj:
url = mo.web.util.org_paper_link(self.contest_id, None, self.user, self.sol.final_feedback_obj)
......@@ -180,7 +181,7 @@ def org_score(round_id: Optional[int] = None, contest_id: Optional[int] = None):
'pion_place': pion.place.name,
'school': CellLink(school.name or "?", url_for('org_place', id=school.place_id)),
'grade': pant.grade,
'total_points': result.get_total_points(),
'total_points': format_decimal(result.get_total_points()),
'birth_year': pant.birth_year,
'order_key': result._order_key,
})
......
......@@ -113,7 +113,7 @@
<td>{{ task.code }}
<td>{{ task.name }}
<td>{{ task.sol_count }}
<td>{{ task.max_points|none_value('–') }}
<td>{{ task.max_points|decimal|none_value('–') }}
<td><div class="btn-group">
<a class="btn btn-xs btn-primary" href="{{ url_for('org_contest_task', contest_id=contest.contest_id, task_id=task.task_id, site_id=site_id) }}">Odevzdaná řešení</a>
{% if not site and can_edit_points %}
......
......@@ -93,7 +93,7 @@ konkrétní úlohu. Symbol <span class="icon">🗐</span> značí, že existuje
{% endif %}
<td class="sol">
{% if sol.points is not none %}
{{ sol.points }}
{{ sol.points|decimal }}
{% if sum_points.append(sol.points) %}{% endif %}
{% else %}
<span class="unknown">?</span>
......@@ -111,7 +111,7 @@ konkrétní úlohu. Symbol <span class="icon">🗐</span> značí, že existuje
{% endif %}
<a class="btn btn-xs btn-link icon" title="Detail řešení" href="{{ url_for('org_submit_list', contest_id=contest.contest_id, user_id=u.user_id, task_id=task.task_id, site_id=site_id) }}">🔍</a>
{% endfor %}
<th>{{ sum_points|sum }}</th>
<th>{{ sum_points|sum|decimal }}</th>
</tr>
{% endfor %}
<tfoot>
......
......@@ -140,7 +140,7 @@
<td>{{ task.code }}
<td>{{ task.name }}
<td>{{ task.sol_count }}
<td>{{ task.max_points|none_value('–') }}
<td>{{ task.max_points|decimal|none_value('–') }}
{% if can_manage_round %}
<td><div class="btn-group">
<a class="btn btn-xs btn-primary" href="{{ url_for('org_round_task_edit', id=round.round_id, task_id=task.task_id) }}">Editovat</a>
......
......@@ -13,8 +13,8 @@
<tr><th>Úloha<td><a href='{{ url_for('org_contest_task', contest_id=sc.contest.contest_id, site_id=site_id, task_id=sc.task.task_id) }}'>{{ sc.task.code }} {{ sc.task.name }}</a>
{% if solution %}
<tr><th>Body<td>
{% if solution.points is not none %}{{solution.points}}{% else %}<span class="unknown">?</span>{% endif %}
{% if sc.task.max_points is not none %}<span class="hint"> / {{ sc.task.max_points }}</span>{% endif %}
{{ solution.points|decimal|none_value(Markup('<span class="unknown">?</span>')) }}
{% if sc.task.max_points is not none %}<span class="hint"> / {{ sc.task.max_points|decimal }}</span>{% endif %}
<tr title="Viditelná účastníkovi po uzavření kola">
<th>Poznámka k řešení:<td style="white-space: pre;">{{ solution.note|or_dash }}</td>
<tr title="Viditelná jen organizátorům">
......@@ -153,7 +153,7 @@ Existuje více než jedna verze oprav, finální je podbarvená.
{% for p in points_history %}
<tr {% if loop.index == 1 %} class='sol-active'{% endif %}>
<td>{{ p.points_at|timeformat }}
<td>{% if p.points is not none %}{{ p.points }}{% else %}–{% endif %}
<td>{{ p.points|decimal|none_value('–') }}
<td>{{ p.user|user_link }}
</tr>
{% endfor %}
......
......@@ -89,7 +89,7 @@ finální (ve výchozím stavu poslední nahrané).{% elif sc.allow_upload_solut
<input type="number" min=0 {% if task.max_points is not none %}max={{ task.max_points }}{% endif %} class="form-control" name="points_{{u.user_id}}" value="{{ request_form.get("points_{}".format(u.user_id)) or sol.points }}" size="4" tabindex={{ tabindex.value }} autofocus>
{% set tabindex.value = tabindex.value + 1%}
{% else %}
{% if sol.points is not none %}{{ sol.points}}{% else %}<span class="unknown">?</span>{% endif %}
{{ sol.points|decimal|none_value(Markup('<span class="unknown">?</span>')) }}
{% endif %}
{% else %}
<td colspan="4" class="text-center">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment