Zrušen SourhnReseni
Už není potřeba, v tabulce stejně jsou už přímo řešení.
This commit is contained in:
parent
659ad62b52
commit
96bc21a727
1 changed files with 8 additions and 17 deletions
|
@ -37,14 +37,6 @@ logger = logging.getLogger(__name__)
|
||||||
# Taky se může hodit:
|
# Taky se může hodit:
|
||||||
# - Tabulka všech řešitelů x všech problémů?
|
# - Tabulka všech řešitelů x všech problémů?
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class SouhrnReseni:
|
|
||||||
"""Dataclass reprezentující data o odevzdaných řešeních pro zobrazení v tabulce."""
|
|
||||||
pocet_reseni : int
|
|
||||||
posledni_odevzdani : datetime.datetime
|
|
||||||
body : float
|
|
||||||
|
|
||||||
|
|
||||||
class TabulkaOdevzdanychReseniView(ListView):
|
class TabulkaOdevzdanychReseniView(ListView):
|
||||||
template_name = 'odevzdavatko/tabulka.html'
|
template_name = 'odevzdavatko/tabulka.html'
|
||||||
model = m.Hodnoceni
|
model = m.Hodnoceni
|
||||||
|
@ -120,26 +112,25 @@ class TabulkaOdevzdanychReseniView(ListView):
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
|
# TODO: refactor asi. Přepisoval jsem to jen syntakticky, nejspíš půlka kódu přestala dávat smysl…
|
||||||
# self.resitele, self.reseni a self.problemy jsou již nastavené
|
# self.resitele, self.reseni a self.problemy jsou již nastavené
|
||||||
|
|
||||||
ctx = super().get_context_data(*args, **kwargs)
|
ctx = super().get_context_data(*args, **kwargs)
|
||||||
ctx['problemy'] = self.problemy
|
ctx['problemy'] = self.problemy
|
||||||
ctx['resitele'] = self.resitele
|
ctx['resitele'] = self.resitele
|
||||||
tabulka: dict[m.Problem, dict[m.Resitel, SouhrnReseni]] = dict()
|
tabulka: dict[m.Problem, dict[m.Resitel, list[m.Reseni]]] = dict()
|
||||||
|
|
||||||
def pridej_reseni(resitel, hodnoceni):
|
def pridej_reseni(resitel, hodnoceni):
|
||||||
problem = hodnoceni.problem
|
problem = hodnoceni.problem
|
||||||
body = hodnoceni.body
|
body = hodnoceni.body
|
||||||
cas = hodnoceni.reseni.cas_doruceni
|
cas = hodnoceni.reseni.cas_doruceni
|
||||||
|
reseni = hodnoceni.reseni
|
||||||
if problem not in tabulka:
|
if problem not in tabulka:
|
||||||
tabulka[problem] = dict()
|
tabulka[problem] = dict()
|
||||||
if resitel not in tabulka[problem]:
|
if resitel not in tabulka[problem]:
|
||||||
tabulka[problem][resitel] = SouhrnReseni(pocet_reseni=1, posledni_odevzdani=cas, body=body)
|
tabulka[problem][resitel] = [reseni]
|
||||||
else:
|
else:
|
||||||
tabulka[problem][resitel].posledni_odevzdani = max(tabulka[problem][resitel].posledni_odevzdani, cas)
|
tabulka[problem][resitel].append(reseni)
|
||||||
# Zvětšení počtu bodů o aktuální počet, pokud se tam někde nevyskytuje None – pak je součet taky None ("Pozor, nezadané body")
|
|
||||||
tabulka[problem][resitel].body = tabulka[problem][resitel].body + body if body is not None and tabulka[problem][resitel].body is not None else None
|
|
||||||
tabulka[problem][resitel].pocet_reseni += 1
|
|
||||||
# Pro jednoduchost template si ještě poznamenáme ID problému a řešitele
|
# Pro jednoduchost template si ještě poznamenáme ID problému a řešitele
|
||||||
tabulka[problem][resitel].problem_id = problem.id
|
tabulka[problem][resitel].problem_id = problem.id
|
||||||
tabulka[problem][resitel].resitel_id = resitel.id
|
tabulka[problem][resitel].resitel_id = resitel.id
|
||||||
|
@ -148,17 +139,17 @@ class TabulkaOdevzdanychReseniView(ListView):
|
||||||
for resitel in hodnoceni.reseni.resitele.all():
|
for resitel in hodnoceni.reseni.resitele.all():
|
||||||
pridej_reseni(resitel, hodnoceni)
|
pridej_reseni(resitel, hodnoceni)
|
||||||
|
|
||||||
hodnoty: list[list[SouhrnReseni]] = []
|
hodnoty: list[list[list[m.Reseni]]] = [] # 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.
|
||||||
resitele_do_tabulky: list[m.Resitel] = []
|
resitele_do_tabulky: list[m.Resitel] = []
|
||||||
for resitel in self.resitele:
|
for resitel in self.resitele:
|
||||||
dostal_body = False
|
dostal_body = False
|
||||||
resiteluv_radek: list[SourhnReseni] = [] # podle pořadí v self.problemy, pokud daný problém neřešil, pak None
|
resiteluv_radek: list[list[m.Resitel]] = [] # podle pořadí v self.problemy
|
||||||
for problem in self.problemy:
|
for problem in self.problemy:
|
||||||
if problem in tabulka and resitel in tabulka[problem]:
|
if problem in tabulka and resitel in tabulka[problem]:
|
||||||
resiteluv_radek.append(tabulka[problem][resitel])
|
resiteluv_radek.append(tabulka[problem][resitel])
|
||||||
dostal_body = True
|
dostal_body = True
|
||||||
else:
|
else:
|
||||||
resiteluv_radek.append(None)
|
resiteluv_radek.append([])
|
||||||
if self.chteni_resitele != FiltrForm.RESITELE_RELEVANTNI or dostal_body:
|
if self.chteni_resitele != FiltrForm.RESITELE_RELEVANTNI or dostal_body:
|
||||||
hodnoty.append(resiteluv_radek)
|
hodnoty.append(resiteluv_radek)
|
||||||
resitele_do_tabulky.append(resitel)
|
resitele_do_tabulky.append(resitel)
|
||||||
|
|
Loading…
Reference in a new issue