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))) | ||||
| 
 | ||||
| 
 | ||||
| @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) | ||||
| @python_2_unicode_compatible | ||||
| class Nastaveni(SingletonModel): | ||||
|  |  | |||
|  | @ -45,6 +45,78 @@ class RocnikView(generic.DetailView): | |||
|                           {'verbose_name': queryset.model._meta.verbose_name}) | ||||
|         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): | ||||
|     model = Problem | ||||
|     template_name = 'seminar/archiv/problem.html' | ||||
|  | @ -96,7 +168,7 @@ class CisloView(generic.DetailView): | |||
|             v = vysledky[vi] | ||||
|             tv = RadekVysledkovky() | ||||
|             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.vysledek = v | ||||
|             #odkazuje na VysledkyKCislu | ||||
|  | @ -152,6 +224,15 @@ class CisloVysledkovkaView(CisloView): | |||
|     content_type = 'text/plain; charset=UTF8' | ||||
|     #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 | ||||
| 
 | ||||
| class SoustredeniListView(generic.ListView): | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Aneta
						Aneta