Browse Source

Výsledkovka ostatní - Tohle by mělo fungovat, ale isinstance nefunguje

export_seznamu_prednasek
Jonas Havelka 4 years ago
parent
commit
bc3913d4b0
  1. 1
      seminar/templates/seminar/archiv/cislo.html
  2. 39
      seminar/views/views_all.py

1
seminar/templates/seminar/archiv/cislo.html

@ -76,6 +76,7 @@
{% for p in problemy %}
<th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a>
{% endfor %}
{% if ostatni %}<th class='border-r'>Ostatní {% endif %}
<th class='border-r'>Za číslo
<th class='border-r'>Za ročník
<th class='border-r'>Odjakživa

39
seminar/views/views_all.py

@ -989,18 +989,30 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None):
if hlavni_problemy is None:
hlavni_problemy = hlavni_problemy_cisla(cislo)
def ne_clanek_ne_konfera(problem):
return not(isinstance(problem, m.Clanek) or isinstance(problem, m.Konfera))
temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy))
def cosi(problem):
return problem.id
hlavni_problemy_slovnik = {}
for hp in hlavni_problemy:
for hp in temata_a_spol:
hlavni_problemy_slovnik[hp.id] = {}
hlavni_problemy_slovnik[-1] = {}
# zakládání prázdných záznamů pro řešitele
cislobody = {}
for ar in aktivni_resitele:
# řešitele převedeme na řetězec pomocí unikátního id
cislobody[ar.id] = ""
for hp in hlavni_problemy:
for hp in temata_a_spol:
slovnik = hlavni_problemy_slovnik[hp.id]
slovnik[ar.id] = ""
hlavni_problemy_slovnik[-1][ar.id] = ""
# vezmeme všechna řešení s body do daného čísla
reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'resitele',
@ -1013,7 +1025,10 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None):
# řešení může řešit více problémů
for prob in list(reseni.problem.all()):
nadproblem = hlavni_problem(prob)
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id]
if ne_clanek_ne_konfera(nadproblem):
nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id]
else:
nadproblem_slovnik = hlavni_problemy_slovnik[-1]
# a mít více hodnocení
for hodn in list(reseni.hodnoceni_set.all()):
@ -1058,11 +1073,26 @@ def vysledkovka_cisla(cislo, context=None):
# vytvoříme jednotlivé sloupce výsledkovky
radky_vysledkovky = []
i = 0
def ne_clanek_ne_konfera(problem):
return not(isinstance(problem, m.Clanek) or isinstance(problem, m.Konfera))
temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy))
# def not_empty(value):
# return value != ''
#
# je_nejake_ostatni = any(filter(not_empty, hlavni_problemy_slovnik[-1].values())) > 0
je_nejake_ostatni = len(hlavni_problemy) - len(temata_a_spol) > 0
for ar_id in setrizeni_resitele_id:
# získáme seznam bodů za problémy pro daného řešitele
problemy = []
for hp in hlavni_problemy:
for hp in temata_a_spol:
problemy.append(hlavni_problemy_slovnik[hp.id][ar_id])
if je_nejake_ostatni:
problemy.append(hlavni_problemy_slovnik[-1][ar_id])
# vytáhneme informace pro daného řešitele
radek = RadekVysledkovkyCisla(
poradi[i], # pořadí
@ -1079,6 +1109,7 @@ def vysledkovka_cisla(cislo, context=None):
context['cislo'] = cislo
context['radky_vysledkovky'] = radky_vysledkovky
context['problemy'] = hlavni_problemy
context['ostatni'] = je_nejake_ostatni
#context['v_cisle_zadane'] = TODO
#context['resene_problemy'] = resene_problemy
return context

Loading…
Cancel
Save