From 18fc4f98e83c4be48c7cc244f24b44a9bde80812 Mon Sep 17 00:00:00 2001 From: Aneta Date: Wed, 2 Sep 2015 23:12:53 +0200 Subject: [PATCH] =?UTF-8?q?Oprava=20generov=C3=A1n=C3=AD=20v=C3=BDsledkovk?= =?UTF-8?q?y=20=C4=8D=C3=ADsla:=20=C4=8D=C3=A1ra=20mezi=20odjak=C5=BEiva?= =?UTF-8?q?=20a=20celkem,=20set=C5=99=C3=ADzen=C3=AD=20sd=C3=ADlen=C3=BDch?= =?UTF-8?q?=20pozic=20podle=20p=C5=99=C3=ADjmen=C3=AD,=20jm=C3=A9na.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generování výsledkovky ročníku, funguje i průběžně. --- seminar/models.py | 2 +- seminar/templates/seminar/archiv/cislo.html | 10 +-- seminar/templates/seminar/archiv/rocnik.html | 32 +++++++ seminar/views.py | 89 +++++++++++--------- 4 files changed, 86 insertions(+), 47 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index c484abb8..59d3f4a7 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -221,7 +221,7 @@ class Resitel(SeminarModelBase): else: return 'Z' + str(rozdil + 9) - def titul(self, celkove_body): + def get_titul(self, celkove_body): "Vrati titul podle zadaneho poctu bodu." if celkove_body < 10: return '' diff --git a/seminar/templates/seminar/archiv/cislo.html b/seminar/templates/seminar/archiv/cislo.html index d14073e6..90018ab9 100644 --- a/seminar/templates/seminar/archiv/cislo.html +++ b/seminar/templates/seminar/archiv/cislo.html @@ -35,18 +35,18 @@ {{ p.cislo_zadani.cislo }}.{{ p.kod }} {% endfor %} Sum-1 - Celkem - Odjakživa + Celkem + Odjakživa {% for rv in vysledkovka %} {{ rv.poradi }} - {{ rv.resitel.plne_jmeno }} {{ rv.titul }} + {{ rv.titul }} MM {{ rv.resitel.plne_jmeno }} {% for b in rv.body %} {{ b }} {% endfor %} {{ rv.body_minule }} - {{ rv.body_celkem_rocnik }} - {{ rv.body_celkem_odjakziva }} + {{ rv.body_celkem_rocnik }} + {{ rv.body_celkem_odjakziva }} {% endfor %} diff --git a/seminar/templates/seminar/archiv/rocnik.html b/seminar/templates/seminar/archiv/rocnik.html index 329941e8..cc42ff81 100644 --- a/seminar/templates/seminar/archiv/rocnik.html +++ b/seminar/templates/seminar/archiv/rocnik.html @@ -12,6 +12,38 @@ {% endfor %} +

Výsledkovka

+ + + + + {% endfor %} +
# + Jméno + R. + Odjakživa + {% for c in rocnik.verejna_cisla %} + {% if c.verejna_vysledkovka %} + + {{c.rocnik.rocnik}}.{{ c.cislo }} + {% endif %} + {% endfor %} + Celkem + + {% for rv in vysledkovka %} +
{{ rv.poradi }} + {{ rv.resitel.titul }} MM {{ rv.resitel.plne_jmeno }} + {{ rv.resitel.rocnik }} + {{ rv.body_odjakziva }} + {% for b in rv.body %} + {{ b }} + {% endfor %} + {{ rv.body_rocnik }} +
+ {% endblock content %} + + + diff --git a/seminar/views.py b/seminar/views.py index 8bb5949d..bdc5861b 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -49,15 +49,11 @@ class RocnikView(generic.DetailView): def get_context_data(self, **kwargs): context = super(RocnikView, self).get_context_data(**kwargs) - vysledkyCelkem = VysledkyCelkemKCislu.objects.all().order_by('-body_celkem').select_related("resitel") - # vysledkyCisla = VysledkyKCislu.objects.filter(cislo.rocnik = context[]) - - problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) - #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 + cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo') + #vyberu vsechny verejne vysledky z rocniku + vysledky = cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel') + #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu + # cisla = Cislo.objects.all().filter(rocnik.id = context['rocnik'].id).order_by('+cislo') vysledky_resitele = {} stejne_body = {} @@ -69,54 +65,65 @@ class RocnikView(generic.DetailView): for vi in range(len(vysledky)): v = vysledky[vi] - tv = RadekVysledkovky() - tv.resitel = v.resitel - tv.rocnik = tv.resitel.rocnik(context['cislo'].datum_vydani) - tv.resitel.titul = tv.resitel.titul(v.body_celkem) - tv.vysledek = v - #odkazuje na VysledkyKCislu - tv.body = ['']*len(problemy) - #pole bodu za ulohy - tv.poradi = '' + rv = RadekVysledkovky() + rv.resitel = v.resitel + verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo) + rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body + rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva) + rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik']) + rv.body = []*len(context['rocnik'].verejna_cisla()) + #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 + for cis in context['rocnik'].verejna_cisla(): + if cis.verejna_vysledkovka: + print cis + body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel) + #seznam vysledku se spravnym rocnikem a cislem pro resitele + #zobrazim jen je-li vysledkovka verejna + if body_za_cislo: + rv.body.append(body_za_cislo[0].body) + #neprazdne vysledky by mely obsahovat prave jeden vysledek + else: + rv.body.append(0) + #resitel nema za cislo body + rv.poradi = '' #defaultni poradi je prazdne - kvuli sdilenym mistum - tv.body_minule = 0 - #pocet bodu do tohoto cisla - if posledni_body > v.body_celkem: + rv.body_rocnik = v.body + rv.body_na_zacatku = rv.body_odjakziva - rv.body_rocnik + #body za minule rocniky + if posledni_body > v.body: if stejne_body.get(posledni_body): + #pokud uz jsme predtim narazili na stejny pocet bodu konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body] #druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body]) #predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu elif predchozi_poradi : predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi) - #pokud nebyl rozsah hodnot, pridam tecku za cislo - posledni_body = v.body_celkem - tv.poradi = vi + 1 + #pokud nebyl rozsah hodnot, vypisu, pridam tecku za cislo + posledni_body = v.body + rv.poradi = vi + 1 #poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly - predchozi_poradi = tv - elif posledni_body == v.body_celkem: - if not stejne_body.get(v.body_celkem): - stejne_body[v.body_celkem] = 1 + predchozi_poradi = rv + elif posledni_body == v.body: + if not stejne_body.get(v.body): + stejne_body[v.body] = 1 #pokud klic neexistuje, zalozim novy pro tohoto resitele else: - stejne_body[v.body_celkem] += 1 + stejne_body[v.body] += 1 #rozsirim pocet resitelu sdilejici stejnou pozici - vysledky_resitele[v.resitel.id] = tv + vysledky_resitele[v.resitel.id] = rv #odkaz na radek vysledkovky patrici danemu resiteli - vysledkovka.append(tv) + vysledkovka.append(rv) - for r in reseni: + context['vysledkovka'] = vysledkovka + return context +''' 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 - return context - + ''' class ProblemView(generic.DetailView): model = Problem @@ -147,7 +154,7 @@ class CisloView(generic.DetailView): def get_context_data(self, **kwargs): context = super(CisloView, self).get_context_data(**kwargs) - vysledky = VysledkyKCisluZaRocnik.objects.filter(cislo = context['cislo']).order_by('-body').select_related("resitel") + vysledky = VysledkyKCisluZaRocnik.objects.filter(cislo = context['cislo']).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno') reseni = Reseni.objects.filter(cislo_body = context['cislo']).select_related("resitel") problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) @@ -169,7 +176,7 @@ class CisloView(generic.DetailView): v = vysledky[vi] tv = RadekVysledkovky() tv.resitel = v.resitel - tv.resitel.titul = tv.resitel.titul(v.body_celkem) + tv.resitel.titul = tv.resitel.get_titul(v.body) tv.rocnik = tv.resitel.rocnik(context['cislo'].rocnik) tv.vysledek = v #odkazuje na VysledkyKCislu @@ -182,7 +189,7 @@ class CisloView(generic.DetailView): body_cislo_q = VysledkyZaCislo.objects.filter(resitel=v.resitel, cislo=context['cislo']) tv.body_cislo = body_cislo_q[0].body if len(body_cislo_q) > 0 else 0 tv.body_minule = tv.body_celkem_rocnik - tv.body_cislo - tv.titul = tv.resitel.titul(tv.body_celkem_odjakziva) + tv.titul=tv.resitel.get_titul(int(tv.body_celkem_odjakziva)) #pocet bodu do tohoto cisla if posledni_body > tv.body_celkem_rocnik: if stejne_body.get(posledni_body):