Browse Source

fix: Veřejnost bodů ve výsledkovce

export_seznamu_prednasek
Jonas Havelka 4 years ago
parent
commit
4b141e3819
  1. 2
      seminar/utils.py
  2. 34
      seminar/views/vysledkovka.py

2
seminar/utils.py

@ -230,7 +230,7 @@ def cisla_rocniku(rocnik, jen_verejne=True):
seznam objektů typu Cislo seznam objektů typu Cislo
""" """
if jen_verejne: if jen_verejne:
return rocnik.verejna_cisla() return rocnik.verejne_vysledkovky_cisla()
else: else:
return rocnik.cisla.all().order_by('poradi') return rocnik.cisla.all().order_by('poradi')

34
seminar/views/vysledkovka.py

@ -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]

Loading…
Cancel
Save