Browse Source

Fix výsledkovky

middleware_test
Jonas Havelka 3 years ago
parent
commit
0e92bc760b
  1. 91
      seminar/views/vysledkovka.py

91
seminar/views/vysledkovka.py

@ -278,36 +278,29 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None):
slovnik[ar.id] = "" slovnik[ar.id] = ""
hlavni_problemy_slovnik[-1][ar.id] = "" hlavni_problemy_slovnik[-1][ar.id] = ""
# vezmeme všechna řešení s body do daného čísla
reseni_do_cisla = m.Reseni.objects.prefetch_related('problem', 'resitele',
'hodnoceni_set').filter(hodnoceni__cislo_body=cislo)
reseni_do_cisla = set(reseni_do_cisla) # odstranění duplikátů (pokud má řešení více ohodnocení) hodnoceni_do_cisla = m.Hodnoceni.objects.prefetch_related('problem', 'resitele',
'hodnoceni_set').filter(cislo_body=cislo)
start = time.time() start = time.time()
# projdeme všechna řešení do čísla a přičteme body každému řešiteli do celkových
# bodů i do bodů za problém for hodnoceni in hodnoceni_do_cisla:
for reseni in reseni_do_cisla: prob = hodnoceni.problem
nadproblem = hlavni_problem(prob)
# řešení může mít více hodnocení if ne_clanek_ne_konfera(nadproblem):
for hodn in list(reseni.hodnoceni_set.all()): nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id]
prob = hodn.problem else:
nadproblem = hlavni_problem(prob) nadproblem_slovnik = hlavni_problemy_slovnik[-1]
if ne_clanek_ne_konfera(nadproblem):
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] body = hodnoceni.body
else:
nadproblem_slovnik = hlavni_problemy_slovnik[-1] # a mít více řešitelů
for resitel in hodnoceni.reseni.resitele.all():
body = hodn.body if resitel not in aktivni_resitele:
print("Skipping {}".format(resitel.id))
# a mít více řešitelů continue
for resitel in list(reseni.resitele.all()): pricti_body(cislobody, resitel, body)
if resitel not in aktivni_resitele: pricti_body(nadproblem_slovnik, resitel, body)
print("Skipping {}".format(resitel.id))
continue
pricti_body(cislobody, resitel, body)
pricti_body(nadproblem_slovnik, resitel, body)
end = time.time() end = time.time()
print("for cykly:", end-start) print("for cykly:", end-start)
return hlavni_problemy_slovnik, cislobody return hlavni_problemy_slovnik, cislobody
@ -341,35 +334,27 @@ def secti_body_za_cislo_podle_temat(cislo, aktivni_resitele, podproblemy=None, t
temata = set(t.id for t in temata) temata = set(t.id for t in temata)
# vezmeme všechna řešení s body do daného čísla hodnoceni_do_cisla = m.Hodnoceni.objects.prefetch_related('problem', 'resitele',
reseni_do_cisla = m.Reseni.objects.prefetch_related('problem', 'resitele', 'hodnoceni_set').filter(cislo_body=cislo)
'hodnoceni_set').filter(hodnoceni__cislo_body=cislo)
reseni_do_cisla = set(reseni_do_cisla) # odstranění duplikátů (pokud má řešení více ohodnocení)
# projdeme všechna řešení do čísla a přičteme body každému řešiteli do celkových for hodnoceni in hodnoceni_do_cisla:
# bodů i do bodů za problém prob = hodnoceni.problem
for reseni in reseni_do_cisla: nadproblem = hlavni_problem(prob)
if nadproblem.id in temata:
# řešení může mít více hodnocení nadproblem_slovnik = body_slovnik[nadproblem.id]
for hodn in list(reseni.hodnoceni_set.all()): else:
prob = hodn.problem nadproblem_slovnik = body_slovnik[-1]
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] problem_slovnik = nadproblem_slovnik[prob.id]
body = hodn.body body = hodnoceni.body
# a mít více řešitelů # a mít více řešitelů
for resitel in reseni.resitele.all(): for resitel in hodnoceni.reseni.resitele.all():
if resitel not in aktivni_resitele: if resitel not in aktivni_resitele:
print("Skipping {}".format(resitel.id)) print("Skipping {}".format(resitel.id))
continue continue
pricti_body(problem_slovnik, resitel, body) pricti_body(problem_slovnik, resitel, body)
return body_slovnik return body_slovnik

Loading…
Cancel
Save