@ -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 :
@ -95,11 +95,21 @@ def body_resitelu(resitele, za, odjakziva=True):
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ě.
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.
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 ) )
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 ]