diff --git a/odevzdavatko/templates/odevzdavatko/tabulka.html b/odevzdavatko/templates/odevzdavatko/tabulka.html
index c108c7d8..6f3a0540 100644
--- a/odevzdavatko/templates/odevzdavatko/tabulka.html
+++ b/odevzdavatko/templates/odevzdavatko/tabulka.html
@@ -36,13 +36,16 @@ Do data (včetně): {{ filtr.reseni_do }}
{# TODO: Chceme mít view i na řešení konkrétního řešitele ke všem problémům? #}
{{ resitel }}
- {% for bunka in hodnoty %}
+ {% for soucet,bunka in hodnoty %}
{% for reseni,hodnoceni in bunka %}
- {{reseni.cas_doruceni | date:"j. n."}} ({{ hodnoceni.body|default:"🔨"}}b)
+ {{reseni.cas_doruceni | date:"j. n."}} ({{ hodnoceni.body|default_if_none:"🔨"}} b)
{% endfor %}
+ {% if bunka|length > 1 %}
+ Σ: {{soucet}} b
+ {% endif %}
|
{% endfor %}
diff --git a/odevzdavatko/views.py b/odevzdavatko/views.py
index 9fda18a8..d5c7e4bc 100644
--- a/odevzdavatko/views.py
+++ b/odevzdavatko/views.py
@@ -13,6 +13,7 @@ from django.db.models import Q
from dataclasses import dataclass
import datetime
+from decimal import Decimal
from itertools import groupby
import logging
@@ -119,6 +120,7 @@ class TabulkaOdevzdanychReseniView(ListView):
ctx['problemy'] = self.problemy
ctx['resitele'] = self.resitele
tabulka: dict[m.Problem, dict[m.Resitel, list[tuple[m.Reseni, m.Hodnoceni]]]] = dict()
+ soucty: dict[m.Problem, dict[m.Resitel, Decimal]] = dict()
def pridej_reseni(resitel, hodnoceni):
problem = hodnoceni.problem
@@ -127,26 +129,29 @@ class TabulkaOdevzdanychReseniView(ListView):
reseni = hodnoceni.reseni
if problem not in tabulka:
tabulka[problem] = dict()
+ soucty[problem] = dict()
if resitel not in tabulka[problem]:
tabulka[problem][resitel] = [(reseni, hodnoceni)]
+ soucty[problem][resitel] = hodnoceni.body or 0 # Neobodované neřešíme
else:
tabulka[problem][resitel].append((reseni, hodnoceni))
+ soucty[problem][resitel] += hodnoceni.body or 0 # Neobodované neřešíme
for hodnoceni in self.get_queryset():
for resitel in hodnoceni.reseni.resitele.all():
pridej_reseni(resitel, hodnoceni)
- hodnoty: list[list[list[tuple[m.Reseni, m.Hodnoceni]]]] = [] # Seznam řádků výsledné tabulky podle self.resitele, v každém řádku buňky v pořadí podle self.problemy, v každé buňce seznam řešení k danému řešiteli a problému.
+ hodnoty: list[list[tuple[Decimal,list[tuple[m.Reseni, m.Hodnoceni]]]]] = [] # Seznam řádků výsledné tabulky podle self.resitele, v každém řádku buňky v pořadí podle self.problemy + jejich součty, v každé buňce seznam řešení k danému řešiteli a problému.
resitele_do_tabulky: list[m.Resitel] = []
for resitel in self.resitele:
dostal_body = False
- resiteluv_radek: list[list[tuple[m.Resitel, m.Hodnoceni]]] = [] # podle pořadí v self.problemy
+ resiteluv_radek: list[tuple[Decimal,list[tuple[m.Resitel, m.Hodnoceni]]]] = [] # podle pořadí v self.problemy
for problem in self.problemy:
if problem in tabulka and resitel in tabulka[problem]:
- resiteluv_radek.append(tabulka[problem][resitel])
+ resiteluv_radek.append((soucty[problem][resitel], tabulka[problem][resitel]))
dostal_body = True
else:
- resiteluv_radek.append([])
+ resiteluv_radek.append((Decimal(0),[]))
if self.chteni_resitele != FiltrForm.RESITELE_RELEVANTNI or dostal_body:
hodnoty.append(resiteluv_radek)
resitele_do_tabulky.append(resitel)