diff --git a/seminar/templates/seminar/archiv/cislo_vysledkovka.tex b/seminar/templates/seminar/archiv/cislo_vysledkovka.tex new file mode 100644 index 00000000..225e9995 --- /dev/null +++ b/seminar/templates/seminar/archiv/cislo_vysledkovka.tex @@ -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} diff --git a/seminar/urls.py b/seminar/urls.py index 3be2970f..94e7b992 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -20,4 +20,5 @@ urlpatterns = patterns('', url(r'^aesop-export/mam-rocnik-(?P\d+)\.csv$', export.ExportRocnikView.as_view(), name='seminar_export_rocnik'), url(r'^aesop-export/mam-sous-(?P[\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'^cislo/(?P\d+).(?P\d+)/vysledkovka.tex$', views.CisloVysledkovkaView.as_view(), name='seminar_cislo_vysledkovka'), ) diff --git a/seminar/views.py b/seminar/views.py index 46e1390a..7e75ac7e 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -78,33 +78,69 @@ class CisloView(generic.DetailView): 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)) + #setridi problemy podle typu a poradi zadani problem_index = {} for i in range(len(problemy)): problem_index[problemy[i].id] = i + #umoznuje zjistit index podle id problemu vysledky_resitele = {} + stejne_body = {} + konec_rozmezi = {} vysledkovka = [] posledni_body = 100000 + predchozi_poradi = None + for vi in range(len(vysledky)): v = vysledky[vi] tv = RadekVysledkovky() tv.resitel = v.resitel tv.vysledek = v tv.body = ['']*len(problemy) + #defaultni hodnota poctu bodu je prazdny retezec tv.poradi = '' + #defaultni poradi je prazdne - kvuli sdilenym mistum 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 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 vysledkovka.append(tv) for r in reseni: vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body + context['vysledkovka'] = vysledkovka context['problemy'] = problemy 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 class SoustredeniListView(generic.ListView):