fix: Veřejnost bodů ve výsledkovce
This commit is contained in:
parent
91169fb536
commit
4b141e3819
2 changed files with 23 additions and 13 deletions
|
@ -230,7 +230,7 @@ def cisla_rocniku(rocnik, jen_verejne=True):
|
|||
seznam objektů typu Cislo
|
||||
"""
|
||||
if jen_verejne:
|
||||
return rocnik.verejna_cisla()
|
||||
return rocnik.verejne_vysledkovky_cisla()
|
||||
else:
|
||||
return rocnik.cisla.all().order_by('poradi')
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ def sloupec_s_poradim(setrizene_body):
|
|||
|
||||
|
||||
|
||||
def body_resitelu(resitele, za, odjakziva=True):
|
||||
def body_resitelu(resitele, za, odjakziva=True, jen_verejne=False):
|
||||
""" Funkce počítající počty bodů pro zadané řešitele,
|
||||
buď odjakživa do daného ročníku/čísla anebo za daný ročník/číslo.
|
||||
Parametry:
|
||||
|
@ -94,12 +94,22 @@ def body_resitelu(resitele, za, odjakziva=True):
|
|||
body_k_zapocteni = Sum('reseni__hodnoceni__body',
|
||||
filter=( Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok=rok,
|
||||
reseni__hodnoceni__cislo_body__poradi__lte=cislo.poradi) ))
|
||||
elif rocnik and odjakziva: # Spočítáme body za starší ročníky až do zadaného včetně.
|
||||
body_k_zapocteni = Sum('reseni__hodnoceni__body',
|
||||
filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok))
|
||||
elif rocnik and odjakziva: # Spočítáme body za starší ročníky až do zadaného včetně.
|
||||
if jen_verejne:
|
||||
body_k_zapocteni = Sum('reseni__hodnoceni__body',
|
||||
filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok,
|
||||
reseni__hodnoceni__cislo_body__verejna_vysledkovka=True))
|
||||
else:
|
||||
body_k_zapocteni = Sum('reseni__hodnoceni__body',
|
||||
filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok))
|
||||
elif rocnik and not odjakziva: # Spočítáme body za daný ročník.
|
||||
body_k_zapocteni = Sum('reseni__hodnoceni__body',
|
||||
filter= Q(reseni__hodnoceni__cislo_body__rocnik=rocnik))
|
||||
if jen_verejne:
|
||||
body_k_zapocteni = Sum('reseni__hodnoceni__body',
|
||||
filter=Q(reseni__hodnoceni__cislo_body__rocnik=rocnik,
|
||||
reseni__hodnoceni__cislo_body__verejna_vysledkovka=True))
|
||||
else:
|
||||
body_k_zapocteni = Sum('reseni__hodnoceni__body',
|
||||
filter=Q(reseni__hodnoceni__cislo_body__rocnik=rocnik))
|
||||
else:
|
||||
assert True, "body_resitelu: Neplatná kombinace za a odjakživa."
|
||||
|
||||
|
@ -149,14 +159,14 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True):
|
|||
body_cisla_slov[cislo.id] = cislobody
|
||||
|
||||
# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně
|
||||
resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele)
|
||||
resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele, jen_verejne=jen_verejne)
|
||||
|
||||
# setřídíme řešitele podle počtu bodů a získáme seznam s body od nejvyšších po nenižší
|
||||
setrizeni_resitele_id, setrizene_body = setrid_resitele_a_body(resitel_rocnikbody_sezn)
|
||||
poradi = sloupec_s_poradim(setrizene_body)
|
||||
|
||||
# získáme body odjakživa
|
||||
resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, rocnik)
|
||||
resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, rocnik, jen_verejne=jen_verejne)
|
||||
|
||||
# vytvoříme jednotlivé sloupce výsledkovky
|
||||
radky_vysledkovky = []
|
||||
|
@ -216,7 +226,7 @@ def pricti_body(slovnik, resitel, body):
|
|||
|
||||
slovnik[resitel.id] += body
|
||||
|
||||
def secti_body_za_rocnik(za, aktivni_resitele):
|
||||
def secti_body_za_rocnik(za, aktivni_resitele, jen_verejne):
|
||||
""" Spočítá body za ročník (celý nebo do daného čísla),
|
||||
setřídí je sestupně a vrátí jako seznam.
|
||||
Parametry:
|
||||
|
@ -224,7 +234,7 @@ def secti_body_za_rocnik(za, aktivni_resitele):
|
|||
daného čísla
|
||||
"""
|
||||
# spočítáme všem řešitelům jejich body za ročník (False => ne odjakživa)
|
||||
resitel_rocnikbody_slov = body_resitelu(aktivni_resitele, za, False)
|
||||
resitel_rocnikbody_slov = body_resitelu(aktivni_resitele, za, False, jen_verejne=jen_verejne)
|
||||
# zeptáme se na dvojice (řešitel, body) za ročník a setřídíme sestupně
|
||||
resitel_rocnikbody_sezn = sorted(resitel_rocnikbody_slov.items(),
|
||||
key = lambda x: x[1], reverse = True)
|
||||
|
@ -380,10 +390,10 @@ def vysledkovka_cisla(cislo, context=None):
|
|||
hlavni_problemy_slovnik, cislobody = secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy)
|
||||
|
||||
# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně
|
||||
resitel_rocnikbody_sezn = secti_body_za_rocnik(cislo, aktivni_resitele)
|
||||
resitel_rocnikbody_sezn = secti_body_za_rocnik(cislo, aktivni_resitele, jen_verejne=True)
|
||||
|
||||
# získáme body odjakživa
|
||||
resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, cislo)
|
||||
resitel_odjakzivabody_slov = body_resitelu(aktivni_resitele, cislo, jen_verejne=True)
|
||||
|
||||
# řešitelé setřídění podle bodů za číslo sestupně
|
||||
setrizeni_resitele_id = [dvojice[0] for dvojice in resitel_rocnikbody_sezn]
|
||||
|
|
Loading…
Reference in a new issue