|
|
@ -74,23 +74,31 @@ class CisloView(generic.DetailView): |
|
|
|
def get_context_data(self, **kwargs): |
|
|
|
context = super(CisloView, self).get_context_data(**kwargs) |
|
|
|
|
|
|
|
# Vysledky k cislu: seznam objektu typu (cislo, resitel, body [v tom cisle], body_celkem [od zac. rocniku]) |
|
|
|
vysledky = VysledkyKCislu.objects.filter(cislo = context['cislo']).order_by('-body_celkem').select_related("resitel") |
|
|
|
|
|
|
|
reseni = Reseni.objects.filter(cislo_body = context['cislo']).select_related("resitel") |
|
|
|
|
|
|
|
# seznam problemu s nejakymi body v tomto cisle |
|
|
|
problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) |
|
|
|
# cislo sloupecku pro problem (inverzni funkce) |
|
|
|
problem_index = {} |
|
|
|
for i in range(len(problemy)): |
|
|
|
problem_index[problemy[i].id] = i |
|
|
|
|
|
|
|
# pomocna mapa Resitel: RadekVysledkovky |
|
|
|
vysledky_resitele = {} |
|
|
|
# radky vysledkovky, seznam objektu RadekVysledkovky |
|
|
|
vysledkovka = [] |
|
|
|
# posledni pocet bodu, pro detekci stejnych mist |
|
|
|
posledni_body = 100000 |
|
|
|
|
|
|
|
for vi in range(len(vysledky)): |
|
|
|
v = vysledky[vi] |
|
|
|
tv = RadekVysledkovky() |
|
|
|
tv.resitel = v.resitel |
|
|
|
tv.vysledek = v |
|
|
|
tv.body = ['']*len(problemy) |
|
|
|
tv.body = ['']*len(problemy) # misto pro body za jednotlive uloy |
|
|
|
tv.poradi = '' |
|
|
|
if posledni_body > v.body_celkem: |
|
|
|
posledni_body = v.body_celkem |
|
|
@ -98,6 +106,7 @@ class CisloView(generic.DetailView): |
|
|
|
vysledky_resitele[v.resitel.id] = tv |
|
|
|
vysledkovka.append(tv) |
|
|
|
|
|
|
|
# doplneni bodu za jednotliva reseni lidi do RadekVysledkovky.body |
|
|
|
for r in reseni: |
|
|
|
vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body |
|
|
|
|
|
|
|