|
@ -279,35 +279,28 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): |
|
|
|
|
|
|
|
|
hlavni_problemy_slovnik[-1][ar.id] = "" |
|
|
hlavni_problemy_slovnik[-1][ar.id] = "" |
|
|
|
|
|
|
|
|
# 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í) |
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|