diff --git a/vysledkovky/utils.py b/vysledkovky/utils.py index 19163e93..5a22a447 100644 --- a/vysledkovky/utils.py +++ b/vysledkovky/utils.py @@ -258,86 +258,73 @@ class VysledkovkaCisla(Vysledkovka): ) @cached_property - def problemy_s_body_za_cislo(self): + def sectene_body(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š.) + Sečte body za číslo, hlavní problémy a podproblémy """ - hlavni_problemy_slovnik = dict() - for hp in self.hlavni_problemy: - hlavni_problemy_slovnik[hp.id] = {} - - hlavni_problemy_slovnik[-1] = {} - - # zakládání prázdných záznamů pro řešitele - cislobody = {} - for ar in self.aktivni_resitele: - # řešitele převedeme na řetězec pomocí unikátního id - cislobody[ar.id] = "" - for hp in self.temata_a_spol: - slovnik = hlavni_problemy_slovnik[hp.id] - slovnik[ar.id] = "" - - hlavni_problemy_slovnik[-1][ar.id] = "" - + # Body za číslo + body_za_cislo = {ar.id: "" for ar in self.aktivni_resitele} + + # Body za hlavní problémy + body_za_temata = { + hp.id: {ar.id: "" for ar in self.aktivni_resitele} + for hp in self.temata_a_spol + } + body_za_temata[-1] = {ar.id: "" for ar in self.aktivni_resitele} + + # Body za podproblémy + body_za_problemy = { + tema.id: { + problem.id: {ar.id: "" for ar in self.aktivni_resitele} + for problem in self.podproblemy[tema.id] + } + for tema in self.temata_a_spol + } + body_za_problemy[-1] = { + problem.id: {ar.id: "" for ar in self.aktivni_resitele} + for problem in self.podproblemy[-1] + } + + # Mapování podproblémů na problémy 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] = "" - + # Získáme query všech sčítaných hodnocení hodnoceni_do_cisla = self.hodnoceni_do_cisla + # Sečteme hodnocení for hodnoceni in hodnoceni_do_cisla: prob = hodnoceni.problem nadproblem = problem2nadproblem[prob.id] - nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem] - body = hodnoceni.body + problem_slovnik = body_za_problemy[nadproblem][prob.id] + nadproblem_slovnik = body_za_temata[nadproblem] - problem_slovnik = body_slovnik[nadproblem][prob.id] + body = hodnoceni.body - # a mít více řešitelů + # Může 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(body_za_cislo, resitel, body) self.pricti_body(nadproblem_slovnik, resitel, body) self.pricti_body(problem_slovnik, resitel, body) - return hlavni_problemy_slovnik, cislobody, body_slovnik + return body_za_cislo, body_za_temata, body_za_problemy @cached_property def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: - return self.problemy_s_body_za_cislo[0] + return self.sectene_body[1] @cached_property def body_za_cislo(self) -> dict[int, str]: - return self.problemy_s_body_za_cislo[1] + return self.sectene_body[0] @cached_property def problemy_slovnik(self): - return self.problemy_s_body_za_cislo[2] + return self.sectene_body[2] @cached_property def temata_a_spol(self) -> list[m.Problem]: