|
|
@ -259,6 +259,13 @@ class VysledkovkaCisla(Vysledkovka): |
|
|
|
|
|
|
|
@cached_property |
|
|
|
def problemy_s_body_za_cislo(self): |
|
|
|
""" |
|
|
|
TODDO okomentovat a zpřehlednit. Vzniklo slepením dvou funkcí |
|
|
|
(výpočet bodů hlavních problémů a výpočet bodů podproblémů) |
|
|
|
pro zrychlení výpočtu bodů ve výsledkovce. |
|
|
|
|
|
|
|
Což asi zpomalilo výsledkovku v TeXu. Co s tím? (Tu nevidí řeš.) |
|
|
|
""" |
|
|
|
|
|
|
|
hlavni_problemy_slovnik = dict() |
|
|
|
for hp in self.hlavni_problemy: |
|
|
@ -277,25 +284,48 @@ class VysledkovkaCisla(Vysledkovka): |
|
|
|
|
|
|
|
hlavni_problemy_slovnik[-1][ar.id] = "" |
|
|
|
|
|
|
|
problem2nadproblem = dict() |
|
|
|
|
|
|
|
body_slovnik = {} |
|
|
|
for tema in self.temata_a_spol: |
|
|
|
body_slovnik[tema.id] = {} |
|
|
|
for problem in self.podproblemy[tema.id]: |
|
|
|
body_slovnik[tema.id][problem.id] = {} |
|
|
|
problem2nadproblem[problem.id] = tema.id |
|
|
|
body_slovnik[-1] = {} |
|
|
|
for problem in self.podproblemy[-1]: |
|
|
|
body_slovnik[-1][problem.id] = {} |
|
|
|
problem2nadproblem[problem.id] = -1 |
|
|
|
|
|
|
|
# zakládání prázdných záznamů pro řešitele |
|
|
|
for ar in self.aktivni_resitele: |
|
|
|
for tema in self.temata_a_spol: |
|
|
|
for problem in self.podproblemy[tema.id]: |
|
|
|
body_slovnik[tema.id][problem.id][ar.id] = "" |
|
|
|
|
|
|
|
for problem in self.podproblemy[-1]: |
|
|
|
body_slovnik[-1][problem.id][ar.id] = "" |
|
|
|
|
|
|
|
|
|
|
|
hodnoceni_do_cisla = self.hodnoceni_do_cisla |
|
|
|
|
|
|
|
for hodnoceni in hodnoceni_do_cisla: |
|
|
|
prob = hodnoceni.problem |
|
|
|
nadproblem = hlavni_problem(prob) |
|
|
|
if self.ne_clanek_ne_konfera(nadproblem): |
|
|
|
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] |
|
|
|
else: |
|
|
|
nadproblem_slovnik = hlavni_problemy_slovnik[-1] |
|
|
|
nadproblem = problem2nadproblem[prob.id] |
|
|
|
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem] |
|
|
|
|
|
|
|
body = hodnoceni.body |
|
|
|
|
|
|
|
problem_slovnik = body_slovnik[nadproblem][prob.id] |
|
|
|
|
|
|
|
# a mít více řešitelů |
|
|
|
for resitel in hodnoceni.reseni.resitele.all(): |
|
|
|
if resitel not in self.aktivni_resitele: |
|
|
|
continue |
|
|
|
self.pricti_body(cislobody, resitel, body) |
|
|
|
self.pricti_body(nadproblem_slovnik, resitel, body) |
|
|
|
return hlavni_problemy_slovnik, cislobody |
|
|
|
self.pricti_body(problem_slovnik, resitel, body) |
|
|
|
return hlavni_problemy_slovnik, cislobody, body_slovnik |
|
|
|
|
|
|
|
@cached_property |
|
|
|
def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: |
|
|
@ -305,6 +335,10 @@ class VysledkovkaCisla(Vysledkovka): |
|
|
|
def body_za_cislo(self) -> dict[int, str]: |
|
|
|
return self.problemy_s_body_za_cislo[1] |
|
|
|
|
|
|
|
@cached_property |
|
|
|
def problemy_slovnik(self): |
|
|
|
return self.problemy_s_body_za_cislo[2] |
|
|
|
|
|
|
|
@cached_property |
|
|
|
def temata_a_spol(self) -> list[m.Problem]: |
|
|
|
if self.rocnik.rocnik < ROCNIK_ZRUSENI_TEMAT: |
|
|
@ -328,53 +362,6 @@ class VysledkovkaCisla(Vysledkovka): |
|
|
|
def podproblemy_iter(self) -> FixedIterator: |
|
|
|
return FixedIterator(self.podproblemy_seznam.__iter__()) |
|
|
|
|
|
|
|
@cached_property |
|
|
|
def problemy_slovnik(self): |
|
|
|
# získáme body u jednotlivých témat |
|
|
|
""" Spočítá u řešitelů body za číslo za úlohy v jednotlivých hlavních |
|
|
|
problémech (témata). """ |
|
|
|
|
|
|
|
body_slovnik = {} |
|
|
|
for tema in self.temata_a_spol: |
|
|
|
body_slovnik[tema.id] = {} |
|
|
|
for problem in self.podproblemy[tema.id]: |
|
|
|
body_slovnik[tema.id][problem.id] = {} |
|
|
|
body_slovnik[-1] = {} |
|
|
|
for problem in self.podproblemy[-1]: |
|
|
|
body_slovnik[-1][problem.id] = {} |
|
|
|
|
|
|
|
# zakládání prázdných záznamů pro řešitele |
|
|
|
for ar in self.aktivni_resitele: |
|
|
|
for tema in self.temata_a_spol: |
|
|
|
for problem in self.podproblemy[tema.id]: |
|
|
|
body_slovnik[tema.id][problem.id][ar.id] = "" |
|
|
|
|
|
|
|
for problem in self.podproblemy[-1]: |
|
|
|
body_slovnik[-1][problem.id][ar.id] = "" |
|
|
|
|
|
|
|
temata = set(t.id for t in self.temata_a_spol) |
|
|
|
|
|
|
|
hodnoceni_do_cisla = self.hodnoceni_do_cisla |
|
|
|
|
|
|
|
for hodnoceni in hodnoceni_do_cisla: |
|
|
|
prob = hodnoceni.problem |
|
|
|
nadproblem = hlavni_problem(prob) |
|
|
|
if nadproblem.id in temata: |
|
|
|
nadproblem_slovnik = body_slovnik[nadproblem.id] |
|
|
|
else: |
|
|
|
nadproblem_slovnik = body_slovnik[-1] |
|
|
|
|
|
|
|
problem_slovnik = nadproblem_slovnik[prob.id] |
|
|
|
|
|
|
|
body = hodnoceni.body |
|
|
|
|
|
|
|
# a mít více řešitelů |
|
|
|
for resitel in hodnoceni.reseni.resitele.all(): |
|
|
|
if resitel not in self.aktivni_resitele: |
|
|
|
continue |
|
|
|
self.pricti_body(problem_slovnik, resitel, body) |
|
|
|
return body_slovnik |
|
|
|
|
|
|
|
class RadekVysledkovkyCisla(object): |
|
|
|
"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky. |
|
|
|
Umožňuje snazší práci v templatu (lepší, než seznam).""" |
|
|
|