|
@ -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, |
|
|
""" 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. |
|
|
buď odjakživa do daného ročníku/čísla anebo za daný ročník/číslo. |
|
|
Parametry: |
|
|
Parametry: |
|
@ -94,12 +94,22 @@ def body_resitelu(resitele, za, odjakziva=True): |
|
|
body_k_zapocteni = Sum('reseni__hodnoceni__body', |
|
|
body_k_zapocteni = Sum('reseni__hodnoceni__body', |
|
|
filter=( Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok=rok, |
|
|
filter=( Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok=rok, |
|
|
reseni__hodnoceni__cislo_body__poradi__lte=cislo.poradi) )) |
|
|
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ě. |
|
|
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', |
|
|
if jen_verejne: |
|
|
filter= Q(reseni__hodnoceni__cislo_body__rocnik__prvni_rok__lte=rok)) |
|
|
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. |
|
|
elif rocnik and not odjakziva: # Spočítáme body za daný ročník. |
|
|
body_k_zapocteni = Sum('reseni__hodnoceni__body', |
|
|
if jen_verejne: |
|
|
filter= Q(reseni__hodnoceni__cislo_body__rocnik=rocnik)) |
|
|
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: |
|
|
else: |
|
|
assert True, "body_resitelu: Neplatná kombinace za a odjakživa." |
|
|
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 |
|
|
body_cisla_slov[cislo.id] = cislobody |
|
|
|
|
|
|
|
|
# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně |
|
|
# 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žší |
|
|
# 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) |
|
|
setrizeni_resitele_id, setrizene_body = setrid_resitele_a_body(resitel_rocnikbody_sezn) |
|
|
poradi = sloupec_s_poradim(setrizene_body) |
|
|
poradi = sloupec_s_poradim(setrizene_body) |
|
|
|
|
|
|
|
|
# získáme body odjakživa |
|
|
# 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 |
|
|
# vytvoříme jednotlivé sloupce výsledkovky |
|
|
radky_vysledkovky = [] |
|
|
radky_vysledkovky = [] |
|
@ -216,7 +226,7 @@ def pricti_body(slovnik, resitel, body): |
|
|
|
|
|
|
|
|
slovnik[resitel.id] += 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), |
|
|
""" Spočítá body za ročník (celý nebo do daného čísla), |
|
|
setřídí je sestupně a vrátí jako seznam. |
|
|
setřídí je sestupně a vrátí jako seznam. |
|
|
Parametry: |
|
|
Parametry: |
|
@ -224,7 +234,7 @@ def secti_body_za_rocnik(za, aktivni_resitele): |
|
|
daného čísla |
|
|
daného čísla |
|
|
""" |
|
|
""" |
|
|
# spočítáme všem řešitelům jejich body za ročník (False => ne odjakživa) |
|
|
# 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ě |
|
|
# 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(), |
|
|
resitel_rocnikbody_sezn = sorted(resitel_rocnikbody_slov.items(), |
|
|
key = lambda x: x[1], reverse = True) |
|
|
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) |
|
|
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ě |
|
|
# 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 |
|
|
# 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ě |
|
|
# řešitelé setřídění podle bodů za číslo sestupně |
|
|
setrizeni_resitele_id = [dvojice[0] for dvojice in resitel_rocnikbody_sezn] |
|
|
setrizeni_resitele_id = [dvojice[0] for dvojice in resitel_rocnikbody_sezn] |
|
|