Browse Source

Nezobrazuj výsledky u ročníku, pokud žádné nejsou

jinak byl index out of range
remotes/origin/vysl
Matěj Kocián 9 years ago
parent
commit
65e306f316
  1. 58
      seminar/templates/seminar/archiv/rocnik.html
  2. 124
      seminar/views.py

58
seminar/templates/seminar/archiv/rocnik.html

@ -12,34 +12,36 @@
{% endfor %} {% endfor %}
</ul> </ul>
<h3>Výsledkovka</h3> {% if vysledkovka %}
<table class='vysledkovka'> <h3>Výsledkovka</h3>
<tr class='border-b'> <table class='vysledkovka'>
<th class='border-r'># <tr class='border-b'>
<th class='border-r'>Jméno <th class='border-r'>#
<th class='border-r'>R. <th class='border-r'>Jméno
<th class='border-r'>Odjakživa <th class='border-r'>R.
{% for c in rocnik.verejna_cisla %} <th class='border-r'>Odjakživa
{% if c.verejna_vysledkovka %} {% for c in rocnik.verejna_cisla %}
<th class='border-r'><a href="{{ c.verejne_url }}"> {% if c.verejna_vysledkovka %}
{{c.rocnik.rocnik}}.{{ c.cislo }}</a> <th class='border-r'><a href="{{ c.verejne_url }}">
{% endif %} {{c.rocnik.rocnik}}.{{ c.cislo }}</a>
{% endfor %} {% endif %}
<th class='border-r'>Celkem {% endfor %}
<th class='border-r'>Celkem
{% for rv in vysledkovka %}
<tr> {% for rv in vysledkovka %}
<td class='border-r'>{{ rv.poradi }} <tr>
<th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }} <td class='border-r'>{{ rv.poradi }}
<td class='border-r'>{{ rv.resitel.rocnik }} <th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
<td class='border-r'>{{ rv.body_odjakziva }} <td class='border-r'>{{ rv.resitel.rocnik }}
{% for b in rv.body %} <td class='border-r'>{{ rv.body_odjakziva }}
<td class='border-r'>{{ b }} {% for b in rv.body %}
{% endfor %} <td class='border-r'>{{ b }}
<td class='border-r'><b>{{ rv.body_rocnik }}</b> {% endfor %}
</tr> <td class='border-r'><b>{{ rv.body_rocnik }}</b>
{% endfor %} </tr>
</table> {% endfor %}
</table>
{% endif %}
</div> </div>
{% endblock content %} {% endblock content %}

124
seminar/views.py

@ -87,69 +87,71 @@ class RocnikView(generic.DetailView):
cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo') cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo')
#vyberu vsechny verejne vysledky z rocniku #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') #pokud žádné nejsou, výsledkovka se nezobrazí
#vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu if cisla_v_rocniku:
vysledky_resitele = {} vysledky = cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')
stejne_body = {} #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu
konec_rozmezi = {} vysledky_resitele = {}
vysledkovka = [] stejne_body = {}
posledni_body = 100000 konec_rozmezi = {}
predchozi_poradi = None vysledkovka = []
body_minule = None posledni_body = 100000
predchozi_poradi = None
for vi in range(len(vysledky)): body_minule = None
v = vysledky[vi]
rv = RadekVysledkovky() for vi in range(len(vysledky)):
rv.resitel = v.resitel v = vysledky[vi]
verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo) rv = RadekVysledkovky()
rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body rv.resitel = v.resitel
rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva) verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo)
rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik']) rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body
rv.body = []*len(context['rocnik'].verejna_cisla()) rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva)
#pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik'])
for cis in context['rocnik'].verejna_cisla(): rv.body = []*len(context['rocnik'].verejna_cisla())
if cis.verejna_vysledkovka: #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0
print cis for cis in context['rocnik'].verejna_cisla():
body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel) if cis.verejna_vysledkovka:
#seznam vysledku se spravnym rocnikem a cislem pro resitele print cis
#zobrazim jen je-li vysledkovka verejna body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel)
if body_za_cislo: #seznam vysledku se spravnym rocnikem a cislem pro resitele
rv.body.append(body_za_cislo[0].body) #zobrazim jen je-li vysledkovka verejna
#neprazdne vysledky by mely obsahovat prave jeden vysledek 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
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, 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 = 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: else:
rv.body.append(0) stejne_body[v.body] += 1
#resitel nema za cislo body #rozsirim pocet resitelu sdilejici stejnou pozici
rv.poradi = '' vysledky_resitele[v.resitel.id] = rv
#defaultni poradi je prazdne - kvuli sdilenym mistum #odkaz na radek vysledkovky patrici danemu resiteli
rv.body_rocnik = v.body vysledkovka.append(rv)
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, 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 = 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] += 1
#rozsirim pocet resitelu sdilejici stejnou pozici
vysledky_resitele[v.resitel.id] = rv
#odkaz na radek vysledkovky patrici danemu resiteli
vysledkovka.append(rv)
context['vysledkovka'] = vysledkovka context['vysledkovka'] = vysledkovka
return context return context
class ProblemView(generic.DetailView): class ProblemView(generic.DetailView):

Loading…
Cancel
Save