Browse Source

Oprava generování výsledkovky čísla: čára mezi odjakživa a celkem, setřízení

sdílených pozic podle příjmení, jména.

Generování výsledkovky ročníku, funguje i průběžně.
remotes/origin/vysl
Aneta 9 years ago
parent
commit
18fc4f98e8
  1. 2
      seminar/models.py
  2. 10
      seminar/templates/seminar/archiv/cislo.html
  3. 32
      seminar/templates/seminar/archiv/rocnik.html
  4. 89
      seminar/views.py

2
seminar/models.py

@ -221,7 +221,7 @@ class Resitel(SeminarModelBase):
else: else:
return 'Z' + str(rozdil + 9) return 'Z' + str(rozdil + 9)
def titul(self, celkove_body): def get_titul(self, celkove_body):
"Vrati titul podle zadaneho poctu bodu." "Vrati titul podle zadaneho poctu bodu."
if celkove_body < 10: if celkove_body < 10:
return '' return ''

10
seminar/templates/seminar/archiv/cislo.html

@ -35,18 +35,18 @@
<th class='border-r'><a href="{{ p.verejne_url }}">{{ p.cislo_zadani.cislo }}.{{ p.kod }}</a> <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.cislo_zadani.cislo }}.{{ p.kod }}</a>
{% endfor %} {% endfor %}
<th class='border-r'>Sum<sup>-1</sup> <th class='border-r'>Sum<sup>-1</sup>
<th>Celkem <th class='border-r'>Celkem
<th>Odjakživa <th class='border-r'>Odjakživa
{% for rv in vysledkovka %} {% for rv in vysledkovka %}
<tr> <tr>
<td class='border-r'>{{ rv.poradi }} <td class='border-r'>{{ rv.poradi }}
<th class='border-r'>{{ rv.resitel.plne_jmeno }} {{ rv.titul }} <th class='border-r'> {{ rv.titul }} <sup>MM</sup> {{ rv.resitel.plne_jmeno }}
{% for b in rv.body %} {% for b in rv.body %}
<td class='border-r'>{{ b }} <td class='border-r'>{{ b }}
{% endfor %} {% endfor %}
<td class='border-r'>{{ rv.body_minule }} <td class='border-r'>{{ rv.body_minule }}
<td><b>{{ rv.body_celkem_rocnik }}</b> <td class='border-r'><b>{{ rv.body_celkem_rocnik }}</b>
<td>{{ rv.body_celkem_odjakziva }} <td class='border-r'>{{ rv.body_celkem_odjakziva }}
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

32
seminar/templates/seminar/archiv/rocnik.html

@ -12,6 +12,38 @@
{% endfor %} {% endfor %}
</ul> </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>
</div> </div>
{% endblock content %} {% endblock content %}

89
seminar/views.py

@ -49,15 +49,11 @@ class RocnikView(generic.DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(RocnikView, self).get_context_data(**kwargs) context = super(RocnikView, self).get_context_data(**kwargs)
vysledkyCelkem = VysledkyCelkemKCislu.objects.all().order_by('-body_celkem').select_related("resitel") cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo')
# vysledkyCisla = VysledkyKCislu.objects.filter(cislo.rocnik = context[]) #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')
problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu
#setridi problemy podle typu a poradi zadani # cisla = Cislo.objects.all().filter(rocnik.id = context['rocnik'].id).order_by('+cislo')
problem_index = {}
for i in range(len(problemy)):
problem_index[problemy[i].id] = i
#umoznuje zjistit index podle id problemu
vysledky_resitele = {} vysledky_resitele = {}
stejne_body = {} stejne_body = {}
@ -69,54 +65,65 @@ class RocnikView(generic.DetailView):
for vi in range(len(vysledky)): for vi in range(len(vysledky)):
v = vysledky[vi] v = vysledky[vi]
tv = RadekVysledkovky() rv = RadekVysledkovky()
tv.resitel = v.resitel rv.resitel = v.resitel
tv.rocnik = tv.resitel.rocnik(context['cislo'].datum_vydani) verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo)
tv.resitel.titul = tv.resitel.titul(v.body_celkem) rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body
tv.vysledek = v rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva)
#odkazuje na VysledkyKCislu rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik'])
tv.body = ['']*len(problemy) rv.body = []*len(context['rocnik'].verejna_cisla())
#pole bodu za ulohy #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0
tv.poradi = '' 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 #defaultni poradi je prazdne - kvuli sdilenym mistum
tv.body_minule = 0 rv.body_rocnik = v.body
#pocet bodu do tohoto cisla rv.body_na_zacatku = rv.body_odjakziva - rv.body_rocnik
if posledni_body > v.body_celkem: #body za minule rocniky
if posledni_body > v.body:
if stejne_body.get(posledni_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] konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body]
#druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi 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_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 #predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu
elif predchozi_poradi : elif predchozi_poradi :
predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi) predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi)
#pokud nebyl rozsah hodnot, pridam tecku za cislo #pokud nebyl rozsah hodnot, vypisu, pridam tecku za cislo
posledni_body = v.body_celkem posledni_body = v.body
tv.poradi = vi + 1 rv.poradi = vi + 1
#poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly #poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly
predchozi_poradi = tv predchozi_poradi = rv
elif posledni_body == v.body_celkem: elif posledni_body == v.body:
if not stejne_body.get(v.body_celkem): if not stejne_body.get(v.body):
stejne_body[v.body_celkem] = 1 stejne_body[v.body] = 1
#pokud klic neexistuje, zalozim novy pro tohoto resitele #pokud klic neexistuje, zalozim novy pro tohoto resitele
else: else:
stejne_body[v.body_celkem] += 1 stejne_body[v.body] += 1
#rozsirim pocet resitelu sdilejici stejnou pozici #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 #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 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_cislo = vysledky_resitele[r.resitel.id].vysledek.body
#body za toto cislo, stejne jako tv.vysledek.body #body za toto cislo, stejne jako tv.vysledek.body
body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem
vysledky_resitele[r.resitel.id].body_minule = body_celkem - body_za_cislo vysledky_resitele[r.resitel.id].body_minule = body_celkem - body_za_cislo
'''
context['vysledkovka'] = vysledkovka
context['problemy'] = problemy
return context
class ProblemView(generic.DetailView): class ProblemView(generic.DetailView):
model = Problem model = Problem
@ -147,7 +154,7 @@ class CisloView(generic.DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(CisloView, self).get_context_data(**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") 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)) 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] v = vysledky[vi]
tv = RadekVysledkovky() tv = RadekVysledkovky()
tv.resitel = v.resitel 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.rocnik = tv.resitel.rocnik(context['cislo'].rocnik)
tv.vysledek = v tv.vysledek = v
#odkazuje na VysledkyKCislu #odkazuje na VysledkyKCislu
@ -182,7 +189,7 @@ class CisloView(generic.DetailView):
body_cislo_q = VysledkyZaCislo.objects.filter(resitel=v.resitel, cislo=context['cislo']) 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_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.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 #pocet bodu do tohoto cisla
if posledni_body > tv.body_celkem_rocnik: if posledni_body > tv.body_celkem_rocnik:
if stejne_body.get(posledni_body): if stejne_body.get(posledni_body):

Loading…
Cancel
Save