Přepsána sčítací funkce
This commit is contained in:
parent
af4b802354
commit
0d7ec1d90a
1 changed files with 34 additions and 47 deletions
|
@ -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] = {}
|
||||
# Body za číslo
|
||||
body_za_cislo = {ar.id: "" for ar in self.aktivni_resitele}
|
||||
|
||||
hlavni_problemy_slovnik[-1] = {}
|
||||
# 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}
|
||||
|
||||
# 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 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]
|
||||
|
||||
problem_slovnik = body_za_problemy[nadproblem][prob.id]
|
||||
nadproblem_slovnik = body_za_temata[nadproblem]
|
||||
|
||||
body = hodnoceni.body
|
||||
|
||||
problem_slovnik = body_slovnik[nadproblem][prob.id]
|
||||
|
||||
# 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]:
|
||||
|
|
Loading…
Reference in a new issue