From 8087c3473ef8129e9039172643b8737a80a2b98d Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sun, 27 Aug 2023 15:39:28 +0200
Subject: [PATCH] =?UTF-8?q?Form=C3=A1tov=C3=A1n=C3=AD=20a=20parsov=C3=A1n?=
 =?UTF-8?q?=C3=AD=20bod=C5=AF=20zohled=C5=88uje=20is=5Fempty?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Filtr sol_display_points také umí režim pro účastnické rozhraní.
---
 mo/util.py      |  4 ++++
 mo/web/jinja.py | 11 +++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/mo/util.py b/mo/util.py
index f146deaf..b61bda90 100644
--- a/mo/util.py
+++ b/mo/util.py
@@ -159,12 +159,16 @@ def parse_gen_points(
 ) -> Tuple[str, Optional[decimal.Decimal], Optional[str]]:
     """Zobecnění parse_points(). Naparsuje generalizované body používané při editaci.
     Vrátí typ hodnocení, body (decimal.Decimal nebo None) a případný error."""
+    gen_points = gen_points.upper()
     if gen_points is None or gen_points == 'X':
         # Řešení nemá existovat
         return 'X', None, None
     elif gen_points == "" or gen_points == '?':
         # Řešení má existovat, ale nemá přidělené body
         return 'N', None, None
+    elif gen_points == 'P':
+        # Prázdný protokol
+        return 'P', decimal.Decimal(0), None
     else:
         # Řešení je ohodnoceno
         try:
diff --git a/mo/web/jinja.py b/mo/web/jinja.py
index 3ea87cdb..ad4c519d 100644
--- a/mo/web/jinja.py
+++ b/mo/web/jinja.py
@@ -141,6 +141,8 @@ def user_flags(u: db.User) -> Markup:
 def sol_editable_points(s: Optional[db.Solution]) -> str:
     if s is None:
         return 'X'
+    elif s.is_empty:
+        return 'P'
     elif s.points is None:
         return ""
     else:
@@ -148,10 +150,15 @@ def sol_editable_points(s: Optional[db.Solution]) -> str:
 
 
 @app.template_filter()
-def sol_display_points(s: Optional[db.Solution]) -> Union[str, Markup]:
+def sol_display_points(s: Optional[db.Solution], user: bool = False) -> Union[str, Markup]:
     if s is None:
         return '–'
+    elif s.is_empty:
+        return Markup('<span title="Prázdný protokol">∅</span>')
     elif s.points is None:
-        return Markup('<span class="unknown">?</span>')
+        if user:
+            return '–'
+        else:
+            return Markup('<span class="unknown">?</span>')
     else:
         return util_format.format_decimal(s.points)
-- 
GitLab