Browse Source

Přepsána sčítací funkce

zadavatko_problemu
Jonas Havelka 2 years ago
parent
commit
0d7ec1d90a
  1. 81
      vysledkovky/utils.py

81
vysledkovky/utils.py

@ -258,86 +258,73 @@ class VysledkovkaCisla(Vysledkovka):
) )
@cached_property @cached_property
def problemy_s_body_za_cislo(self): def sectene_body(self):
""" """
TODDO okomentovat a zpřehlednit. Vzniklo slepením dvou funkcí Sečte body za číslo, hlavní problémy a podproblémy
(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() # Body za číslo
for hp in self.hlavni_problemy: body_za_cislo = {ar.id: "" for ar in self.aktivni_resitele}
hlavni_problemy_slovnik[hp.id] = {}
hlavni_problemy_slovnik[-1] = {}
# zakládání prázdných záznamů pro řešitele # Body za hlavní problémy
cislobody = {} body_za_temata = {
for ar in self.aktivni_resitele: hp.id: {ar.id: "" for ar in self.aktivni_resitele}
# řešitele převedeme na řetězec pomocí unikátního id for hp in self.temata_a_spol
cislobody[ar.id] = "" }
for hp in self.temata_a_spol: body_za_temata[-1] = {ar.id: "" for ar in self.aktivni_resitele}
slovnik = hlavni_problemy_slovnik[hp.id]
slovnik[ar.id] = ""
hlavni_problemy_slovnik[-1][ar.id] = "" # 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() problem2nadproblem = dict()
body_slovnik = {}
for tema in self.temata_a_spol: for tema in self.temata_a_spol:
body_slovnik[tema.id] = {}
for problem in self.podproblemy[tema.id]: for problem in self.podproblemy[tema.id]:
body_slovnik[tema.id][problem.id] = {}
problem2nadproblem[problem.id] = tema.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 hodnoceni_do_cisla = self.hodnoceni_do_cisla
# Sečteme hodnocení
for hodnoceni in hodnoceni_do_cisla: for hodnoceni in hodnoceni_do_cisla:
prob = hodnoceni.problem prob = hodnoceni.problem
nadproblem = problem2nadproblem[prob.id] 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(): for resitel in hodnoceni.reseni.resitele.all():
if resitel not in self.aktivni_resitele: if resitel not in self.aktivni_resitele:
continue 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(nadproblem_slovnik, resitel, body)
self.pricti_body(problem_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 @cached_property
def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: 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 @cached_property
def body_za_cislo(self) -> dict[int, str]: def body_za_cislo(self) -> dict[int, str]:
return self.problemy_s_body_za_cislo[1] return self.sectene_body[0]
@cached_property @cached_property
def problemy_slovnik(self): def problemy_slovnik(self):
return self.problemy_s_body_za_cislo[2] return self.sectene_body[2]
@cached_property @cached_property
def temata_a_spol(self) -> list[m.Problem]: def temata_a_spol(self) -> list[m.Problem]:

Loading…
Cancel
Save