Pridala jsem vytexani vysledkovky cisla
(zatim podle vzoru, potreba overit spravnost zkompilovanim v LaTeXu spolu s pouzivanymi makry). Upravila jsem i pro web generovani poradi - ted je u sdilenych mist rozmezi misto prvniho mista, ktere je sdileno. Take je za kazdym poradim tecka. Anet
This commit is contained in:
parent
808351fad0
commit
8c6fc8b436
3 changed files with 70 additions and 0 deletions
33
seminar/templates/seminar/archiv/cislo_vysledkovka.tex
Normal file
33
seminar/templates/seminar/archiv/cislo_vysledkovka.tex
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
\begin{longtable}{r|l|c|l|c
|
||||||
|
{% for p in problemy %}
|
||||||
|
@\hskip.5em}c {% endfor %}
|
||||||
|
|c|r|r}
|
||||||
|
\hline
|
||||||
|
& & & & \multicolumn{ {{ problemy_list|length }} }{c|}{\textbf{Úlohy}} & & \\
|
||||||
|
\textbf{Poř.} & \textbf{Jméno} & \textbf{R.} & \raisebox{0.7mm}{$\sum_{-1}$} &
|
||||||
|
{% for p in problemy %}
|
||||||
|
{% if p.TYP_ULOHA %}
|
||||||
|
\textbf{ r{{ p.kod }} } &
|
||||||
|
{% else %}
|
||||||
|
\textbf{ t{{ p.kod }} } &
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
\raisebox{0.7mm}{$\sum_0$} &
|
||||||
|
\raisebox{0.7mm}{$\sum_1$} \\
|
||||||
|
\hline
|
||||||
|
\endhead
|
||||||
|
\hline
|
||||||
|
\endfoot
|
||||||
|
|
||||||
|
{% for rv in vysledkovka %}
|
||||||
|
{{ rv.poradi }} &
|
||||||
|
{% if rv.resitel.titul %}
|
||||||
|
\titul{ {{ rv.resitel.titul }} }
|
||||||
|
{% endif %}
|
||||||
|
{{ rv.resitel.plne_jmeno }} & {{ rv.resitel.rocnik}} & {{ rv.vysledek.body_minule }}
|
||||||
|
{% for b in rv.body %}
|
||||||
|
{{ b }} &
|
||||||
|
{% endfor %}
|
||||||
|
{{ rv.vysledek.body |default:0 }} & {{ rv.vysledek.body_celkem }} \\
|
||||||
|
{% endfor %}
|
||||||
|
\end{longtable}
|
|
@ -20,4 +20,5 @@ urlpatterns = patterns('',
|
||||||
url(r'^aesop-export/mam-rocnik-(?P<prvni_rok>\d+)\.csv$', export.ExportRocnikView.as_view(), name='seminar_export_rocnik'),
|
url(r'^aesop-export/mam-rocnik-(?P<prvni_rok>\d+)\.csv$', export.ExportRocnikView.as_view(), name='seminar_export_rocnik'),
|
||||||
url(r'^aesop-export/mam-sous-(?P<datum_zacatku>[\d-]+)\.csv$', export.ExportSousView.as_view(), name='seminar_export_sous'),
|
url(r'^aesop-export/mam-sous-(?P<datum_zacatku>[\d-]+)\.csv$', export.ExportSousView.as_view(), name='seminar_export_sous'),
|
||||||
url(r'^aesop-export/index.csv$', export.ExportIndexView.as_view(), name='seminar_export_index'),
|
url(r'^aesop-export/index.csv$', export.ExportIndexView.as_view(), name='seminar_export_index'),
|
||||||
|
url(r'^cislo/(?P<rocnik>\d+).(?P<cislo>\d+)/vysledkovka.tex$', views.CisloVysledkovkaView.as_view(), name='seminar_cislo_vysledkovka'),
|
||||||
)
|
)
|
||||||
|
|
|
@ -78,33 +78,69 @@ class CisloView(generic.DetailView):
|
||||||
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))
|
||||||
|
#setridi problemy podle typu a poradi zadani
|
||||||
problem_index = {}
|
problem_index = {}
|
||||||
for i in range(len(problemy)):
|
for i in range(len(problemy)):
|
||||||
problem_index[problemy[i].id] = i
|
problem_index[problemy[i].id] = i
|
||||||
|
#umoznuje zjistit index podle id problemu
|
||||||
|
|
||||||
vysledky_resitele = {}
|
vysledky_resitele = {}
|
||||||
|
stejne_body = {}
|
||||||
|
konec_rozmezi = {}
|
||||||
vysledkovka = []
|
vysledkovka = []
|
||||||
posledni_body = 100000
|
posledni_body = 100000
|
||||||
|
predchozi_poradi = None
|
||||||
|
|
||||||
for vi in range(len(vysledky)):
|
for vi in range(len(vysledky)):
|
||||||
v = vysledky[vi]
|
v = vysledky[vi]
|
||||||
tv = RadekVysledkovky()
|
tv = RadekVysledkovky()
|
||||||
tv.resitel = v.resitel
|
tv.resitel = v.resitel
|
||||||
tv.vysledek = v
|
tv.vysledek = v
|
||||||
tv.body = ['']*len(problemy)
|
tv.body = ['']*len(problemy)
|
||||||
|
#defaultni hodnota poctu bodu je prazdny retezec
|
||||||
tv.poradi = ''
|
tv.poradi = ''
|
||||||
|
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
||||||
if posledni_body > v.body_celkem:
|
if posledni_body > v.body_celkem:
|
||||||
|
if stejne_body.get(posledni_body):
|
||||||
|
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
|
posledni_body = v.body_celkem
|
||||||
tv.poradi = vi + 1
|
tv.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
|
||||||
|
#pokud klic neexistuje, zalozim novy pro tohoto resitele
|
||||||
|
else:
|
||||||
|
stejne_body[v.body_celkem] += 1
|
||||||
|
#rozsirim pocet resitelu sdilejici stejnou pozici
|
||||||
vysledky_resitele[v.resitel.id] = tv
|
vysledky_resitele[v.resitel.id] = tv
|
||||||
vysledkovka.append(tv)
|
vysledkovka.append(tv)
|
||||||
|
|
||||||
for r in reseni:
|
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
|
||||||
|
|
||||||
|
|
||||||
context['vysledkovka'] = vysledkovka
|
context['vysledkovka'] = vysledkovka
|
||||||
context['problemy'] = problemy
|
context['problemy'] = problemy
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
### Generovani vysledkovky
|
||||||
|
|
||||||
|
class CisloVysledkovkaView(CisloView):
|
||||||
|
model = Cislo
|
||||||
|
template_name = 'seminar/archiv/cislo_vysledkovka.tex'
|
||||||
|
#content_type = 'application/x-tex; charset=UTF8'
|
||||||
|
#umozni rovnou stahnout TeXovsky dokument
|
||||||
|
content_type = 'text/plain; charset=UTF8'
|
||||||
|
#vypise na stranku textovy obsah vyTeXane vysledkovky k okopirovani
|
||||||
|
|
||||||
### Soustredeni
|
### Soustredeni
|
||||||
|
|
||||||
class SoustredeniListView(generic.ListView):
|
class SoustredeniListView(generic.ListView):
|
||||||
|
|
Loading…
Reference in a new issue