Rozdelana prace s bordelem, commit kvuli pullnuti.
This commit is contained in:
parent
bd32ed5d96
commit
009535896c
2 changed files with 99 additions and 1 deletions
|
@ -681,6 +681,23 @@ class VysledkyKCislu(VysledkyBase):
|
||||||
return force_unicode(u"%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo)))
|
return force_unicode(u"%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo)))
|
||||||
|
|
||||||
|
|
||||||
|
@python_2_unicode_compatible
|
||||||
|
class VysledkyCelkemKCislu(VysledkyBase):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'seminar_body_celkem_k_cislu'
|
||||||
|
abstract = False
|
||||||
|
managed = False
|
||||||
|
|
||||||
|
body_celkem = models.DecimalField(max_digits=8, decimal_places=1, db_column='body_celkem',
|
||||||
|
verbose_name=u'body celkem do čísla včetně minulých ročníků')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
# NOTE: DB HOG (ale nepouzivany)
|
||||||
|
return force_unicode(u"%s: %sb / %sb (do %s)" % (self.resitel.plne_jmeno(), self.body, self.body_celkem, str(self.cislo)))
|
||||||
|
#mozna potreba upravit
|
||||||
|
|
||||||
|
|
||||||
@reversion.register(ignore_duplicate_revisions=True)
|
@reversion.register(ignore_duplicate_revisions=True)
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class Nastaveni(SingletonModel):
|
class Nastaveni(SingletonModel):
|
||||||
|
|
|
@ -45,6 +45,78 @@ class RocnikView(generic.DetailView):
|
||||||
{'verbose_name': queryset.model._meta.verbose_name})
|
{'verbose_name': queryset.model._meta.verbose_name})
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(RocnikView, self).get_context_data(**kwargs)
|
||||||
|
|
||||||
|
vysledkyCelkem = VysledkyCelkemKCislu.objects.all().order_by('-body_celkem').select_related("resitel")
|
||||||
|
# vysledkyCisla = VysledkyKCislu.objects.filter(cislo.rocnik = context[])
|
||||||
|
|
||||||
|
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
|
||||||
|
body_minule = None
|
||||||
|
|
||||||
|
for vi in range(len(vysledky)):
|
||||||
|
v = vysledky[vi]
|
||||||
|
tv = RadekVysledkovky()
|
||||||
|
tv.resitel = v.resitel
|
||||||
|
tv.rocnik = tv.resitel.rocnik(context['cislo'].datum_vydani)
|
||||||
|
tv.resitel.titul = tv.resitel.titul(v.body_celkem)
|
||||||
|
tv.vysledek = v
|
||||||
|
#odkazuje na VysledkyKCislu
|
||||||
|
tv.body = ['']*len(problemy)
|
||||||
|
#pole bodu za ulohy
|
||||||
|
tv.poradi = ''
|
||||||
|
#defaultni poradi je prazdne - kvuli sdilenym mistum
|
||||||
|
tv.body_minule = 0
|
||||||
|
#pocet bodu do tohoto cisla
|
||||||
|
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
|
||||||
|
#odkaz na radek vysledkovky patrici danemu resiteli
|
||||||
|
vysledkovka.append(tv)
|
||||||
|
|
||||||
|
for r in reseni:
|
||||||
|
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 toto cislo, stejne jako tv.vysledek.body
|
||||||
|
body_celkem = vysledky_resitele[r.resitel.id].vysledek.body_celkem
|
||||||
|
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
|
||||||
template_name = 'seminar/archiv/problem.html'
|
template_name = 'seminar/archiv/problem.html'
|
||||||
|
@ -96,7 +168,7 @@ class CisloView(generic.DetailView):
|
||||||
v = vysledky[vi]
|
v = vysledky[vi]
|
||||||
tv = RadekVysledkovky()
|
tv = RadekVysledkovky()
|
||||||
tv.resitel = v.resitel
|
tv.resitel = v.resitel
|
||||||
tv.rocnik = tv.resitel.rocnik(context['cislo'].rocnik)
|
tv.rocnik = tv.resitel.rocnik(context['cislo'].datum_vydani)
|
||||||
tv.resitel.titul = tv.resitel.titul(v.body_celkem)
|
tv.resitel.titul = tv.resitel.titul(v.body_celkem)
|
||||||
tv.vysledek = v
|
tv.vysledek = v
|
||||||
#odkazuje na VysledkyKCislu
|
#odkazuje na VysledkyKCislu
|
||||||
|
@ -152,6 +224,15 @@ class CisloVysledkovkaView(CisloView):
|
||||||
content_type = 'text/plain; charset=UTF8'
|
content_type = 'text/plain; charset=UTF8'
|
||||||
#vypise na stranku textovy obsah vyTeXane vysledkovky k okopirovani
|
#vypise na stranku textovy obsah vyTeXane vysledkovky k okopirovani
|
||||||
|
|
||||||
|
class RocnikVysledkovkaView(RocnikView):
|
||||||
|
model = Rocnik
|
||||||
|
template_name = 'seminar/archiv/rocnik_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