From c7fd9fedcc9e8467f9811ba903dbf4c7d8340fd6 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sun, 27 Aug 2023 15:41:44 +0200
Subject: [PATCH] =?UTF-8?q?Formul=C3=A1=C5=99=20na=20editaci=20bod=C5=AF?=
 =?UTF-8?q?=20um=C3=AD=20pr=C3=A1zdn=C3=A9=20protokoly?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/org_contest.py                          | 8 +++++---
 mo/web/templates/parts/org_solution_table.html | 3 ++-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 7c8979a5..57c6d5c9 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -1106,7 +1106,6 @@ def org_contest_task(ct_id: int, task_id: int, site_id: Optional[int] = None):
         changed_sols: List[db.Solution] = []
 
         def update_sol(pion, sol, action, points) -> Optional[str]:
-            print(f'update_sol: action={action} points={points}')
             # Aktualizuje řešení, zkontroluje práva a případně vrátí chybovou hlašku.
             # Vyhýbáme se všemu, co nejde rollbacknout, takže logování do souboru necháme na později.
             if not sol:
@@ -1144,17 +1143,20 @@ def org_contest_task(ct_id: int, task_id: int, site_id: Optional[int] = None):
                 deleted_sols.append(sol)
                 return None
 
-            if sol.points != points:
-                # Chceme změnit počet bodů (po případném založení řešení)
+            is_empty = (action == 'P')
+            if sol.points != points or sol.is_empty != is_empty:
+                # Chceme změnit počet bodů nebo prázdnost protokolu (po případném založení řešení)
                 if not ctx.rights.can_edit_points():
                     return 'Nemáte právo k zadávání bodů, můžete jen zakládat řešení'
                 sol.points = points
+                sol.is_empty = is_empty
                 sess.add(db.PointsHistory(
                     task=ctx.task,
                     participant=sol.user,
                     user=g.user,
                     points_at=mo.now,
                     points=points,
+                    is_empty=is_empty,
                 ))
                 changed_sols.append(sol)
 
diff --git a/mo/web/templates/parts/org_solution_table.html b/mo/web/templates/parts/org_solution_table.html
index dc9619d0..83e28d1b 100644
--- a/mo/web/templates/parts/org_solution_table.html
+++ b/mo/web/templates/parts/org_solution_table.html
@@ -25,7 +25,8 @@ Zde můžete bodovat odevzdaná řešení.
 Zde můžete zakládat a rušit odevzdaná řešení.
 {% endif %}
 Prázdná hodnota ve sloupečku „Přidělené body“ znamená „neobodováno“,
-hodnota X znamená „řešení nebylo odevzdáno“.
+hodnota X znamená „řešení nebylo odevzdáno“,
+P znamená „prázdný protokol, který neobsahuje řešení“.
 {% if edit_create %}
 Smazáním X založíte nové řešení – to se hodí, pokud se nechystáte do systému nahrávat soubory řešení,
 ale jen chcete řešení vytvořit, aby jim bylo možné vyplnit body.
-- 
GitLab