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 %}
</ul>
<h3>Výsledkovka</h3>
<table class='vysledkovka'>
<tr class='border-b'>
<th class='border-r'>#
<th class='border-r'>Jméno
<th class='border-r'>R.
<th class='border-r'>Odjakživa
{% for c in rocnik.verejna_cisla %}
{% if c.verejna_vysledkovka %}
<th class='border-r'><a href="{{ c.verejne_url }}">
{{c.rocnik.rocnik}}.{{ c.cislo }}</a>
{% endif %}
{% endfor %}
<th class='border-r'>Celkem
{% for rv in vysledkovka %}
<tr>
<td class='border-r'>{{ rv.poradi }}
<th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
<td class='border-r'>{{ rv.resitel.rocnik }}
<td class='border-r'>{{ rv.body_odjakziva }}
{% for b in rv.body %}
<td class='border-r'>{{ b }}
{% endfor %}
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
</tr>
{% endfor %}
</table>
{% if vysledkovka %}
<h3>Výsledkovka</h3>
<table class='vysledkovka'>
<tr class='border-b'>
<th class='border-r'>#
<th class='border-r'>Jméno
<th class='border-r'>R.
<th class='border-r'>Odjakživa
{% for c in rocnik.verejna_cisla %}
{% if c.verejna_vysledkovka %}
<th class='border-r'><a href="{{ c.verejne_url }}">
{{c.rocnik.rocnik}}.{{ c.cislo }}</a>
{% endif %}
{% endfor %}
<th class='border-r'>Celkem
{% for rv in vysledkovka %}
<tr>
<td class='border-r'>{{ rv.poradi }}
<th class='border-r'> {{ rv.resitel.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
<td class='border-r'>{{ rv.resitel.rocnik }}
<td class='border-r'>{{ rv.body_odjakziva }}
{% for b in rv.body %}
<td class='border-r'>{{ b }}
{% endfor %}
<td class='border-r'><b>{{ rv.body_rocnik }}</b>
</tr>
{% endfor %}
</table>
{% endif %}
</div>
{% 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')
#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
vysledky_resitele = {}
stejne_body = {}
konec_rozmezi = {}
vysledkovka = []
posledni_body = 100000
predchozi_poradi = None
body_minule = None
for vi in range(len(vysledky)):
v = vysledky[vi]
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
#pokud žádné nejsou, výsledkovka se nezobrazí
if cisla_v_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
vysledky_resitele = {}
stejne_body = {}
konec_rozmezi = {}
vysledkovka = []
posledni_body = 100000
predchozi_poradi = None
body_minule = None
for vi in range(len(vysledky)):
v = vysledky[vi]
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
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:
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:
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)
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
class ProblemView(generic.DetailView):

Loading…
Cancel
Save