Součty
Hnusně, ale přece…
This commit is contained in:
parent
bef932345c
commit
86f6d47f10
2 changed files with 14 additions and 6 deletions
|
@ -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 }}
|
||||
</td>
|
||||
{% for bunka in hodnoty %}
|
||||
{% for soucet,bunka in hodnoty %}
|
||||
<td>
|
||||
{% for reseni,hodnoceni in bunka %}
|
||||
<a href="{% url 'odevzdavatko_detail_reseni' pk=reseni.id %}">
|
||||
{{reseni.cas_doruceni | date:"j. n."}} ({{ hodnoceni.body|default:"🔨"}}b)
|
||||
{{reseni.cas_doruceni | date:"j. n."}} ({{ hodnoceni.body|default_if_none:"🔨"}} b)
|
||||
</a><br>
|
||||
{% endfor %}
|
||||
{% if bunka|length > 1 %}
|
||||
<b>Σ: {{soucet}} b</b>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue