diff --git a/seminar/views.py b/seminar/views.py index 23bc2b99..f7efe9c9 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -74,37 +74,36 @@ 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) + #setridi problemy podle typu a poradi zadani problem_index = {} for i in range(len(problemy)): problem_index[problemy[i].id] = i #umoznuje zjistit index podle id problemu - # pomocna mapa Resitel: RadekVysledkovky vysledky_resitele = {} stejne_body = {} konec_rozmezi = {} - # radky vysledkovky, seznam objektu RadekVysledkovky vysledkovka = [] - # posledni pocet bodu, pro detekci stejnych mist posledni_body = 100000 predchozi_poradi = None + body_minule = None for vi in range(len(vysledky)): v = vysledky[vi] tv = RadekVysledkovky() tv.resitel = v.resitel tv.vysledek = v - tv.body = ['']*len(problemy) # misto pro body za jednotlive uloy + #odkazuje na VysledkyKCislu + tv.body = ['']*len(problemy) + #pole bodu za ulohy tv.poradi = '' #defaultni poradi je prazdne - kvuli sdilenym mistum + tv.body_minule = 0 + #pocet bodu do tohoto cisla if posledni_body > v.body_celkem: if stejne_body.get(posledni_body): konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body] @@ -126,12 +125,16 @@ class CisloView(generic.DetailView): stejne_body[v.body_celkem] += 1 #rozsirim pocet resitelu sdilejici stejnou pozici vysledky_resitele[v.resitel.id] = tv + #odkaz na radek vysledkovky patrici danemu resiteli 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 - + body_za_cislo = vysledky_resitele[r.resitel.id].vysledek.body + #body za toto cislo, stejne jako tv.vysledek.body + body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem + vysledky_resitele[r.resitel.id].body_minule = body_celkem - body_za_cislo + context['vysledkovka'] = vysledkovka context['problemy'] = problemy