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ě.
This commit is contained in:
parent
0b30583b0a
commit
18fc4f98e8
4 changed files with 86 additions and 47 deletions
|
@ -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 ''
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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…
Reference in a new issue