Runkcni vysledkovka rocniku + texova, ale pomala a mozna potreba osetrit poradi cisel.
This commit is contained in:
		
							parent
							
								
									2a347d988f
								
							
						
					
					
						commit
						9d42584dd1
					
				
					 4 changed files with 157 additions and 82 deletions
				
			
		|  | @ -42,7 +42,7 @@ | |||
|   {% if user.is_staff and vysledkovka_s_neverejnymi %} | ||||
|     <div class='mam-org-only'> | ||||
|     <h2>Výsledková listina včetně neveřejných bodů</h2> | ||||
|       {% with vysledkovka_s_neverejnymi as vysledkovka %} | ||||
|       {% with radky_vyledkovky_s_neverejnymi as radky_vysledkovky %} | ||||
|         {% include "seminar/vysledkovka_rocnik.html" %} | ||||
|       {% endwith %} | ||||
|     </div> | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ | |||
| \endhead | ||||
| \hline | ||||
| \endfoot | ||||
| {% for rv in vysledkovka.radky %}{{ rv.poradi }} & {% if rv.titul %}\titul{{ lb }}{{ rv.titul }}}~{% endif %}{{ rv.resitel.jmeno|slice:":1" }}.~{{ rv.resitel.prijmeni }} & {% if rv.resitel.rocnik %}{{ rv.resitel.rocnik }}.{% endif %} & {{ rv.body_odjakziva }} {% for b in rv.body_cisla %} & {{ b }}{% endfor %} & {{ rv.body_rocnik }} \\ | ||||
| {% for rv in radky_vysledkovky %}{{ rv.poradi }} & {% if rv.titul %}\titul{{ lb }}{{ rv.titul }}}~{% endif %}{{ rv.resitel.osoba.jmeno|slice:":1" }}.~{{ rv.resitel.osoba.prijmeni }} & {% if rv.resitel.rocnik %}{{ rv.resitel.rocnik }}.{% endif %} & {{ rv.body_odjakziva }} {% for b in rv.body_cisla_sezn %} & {{ b }}{% endfor %} & {{ rv.body_rocnik }} \\ | ||||
| {% endfor %}\end{longtable} | ||||
| {% endwith %} | ||||
| {% endwith %} | ||||
|  |  | |||
|  | @ -4,23 +4,23 @@ | |||
|     <th class='border-r'>Jméno | ||||
|     <th class='border-r'>R. | ||||
|     <th class='border-r'>Odjakživa | ||||
|         {% for c in vysledkovka.cisla %} | ||||
|         {% for c in cisla %} | ||||
|     <th class='border-r'><a href="{{ c.verejne_url }}"> | ||||
|             {{c.rocnik.rocnik}}.{{ c.cislo }}</a> | ||||
|             {{c.rocnik.rocnik}}.{{ c.poradi }}</a> | ||||
|     {% endfor %} | ||||
|     <th class='border-r'>Celkem | ||||
| 
 | ||||
| {% for rv in vysledkovka.radky %} | ||||
| {% for rv in radky_vysledkovky %} | ||||
|   <tr> | ||||
|     <td class='border-r'>{% autoescape off %}{{ rv.poradi }}{% endautoescape %} | ||||
|     <th class='border-r'> | ||||
|       {% if rv.titul %} | ||||
|         {{ rv.titul }}<sup>MM</sup> | ||||
|       {% endif %} | ||||
|       {{ rv.resitel.plne_jmeno }} | ||||
|       {{ rv.resitel.osoba.plne_jmeno }} | ||||
|     <td class='border-r'>{{ rv.resitel.rocnik }} | ||||
|     <td class='border-r'>{{ rv.body_odjakziva }} | ||||
|     {% for b in rv.body_cisla %} | ||||
|     <td class='border-r'>{{ rv.body_celkem_odjakziva }} | ||||
|     {% for b in rv.body_cisla_sezn %} | ||||
|     <td class='border-r'>{{ b }} | ||||
|     {% endfor %} | ||||
|     <td class='border-r'><b>{{ rv.body_rocnik }}</b> | ||||
|  |  | |||
|  | @ -388,13 +388,17 @@ class ArchivView(generic.ListView): | |||
| 
 | ||||
| ### Výsledky | ||||
| 
 | ||||
| # ze setřízeného(!) seznamu všech bodů vytvoří seznam s pořadími (včetně 3.-5. a pak 2 volná místa atp.) | ||||
| def sloupec_s_poradim(seznam_s_body): | ||||
| # ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník  | ||||
| # vytvoří seznam s pořadími (včetně 3.-5. a pak 2 volná místa atp.), | ||||
| # podle toho, jak jdou za sebou ve výsledkovce | ||||
| def sloupec_s_poradim(setrizene_body): | ||||
| 
 | ||||
| 	# ze seznamu obsahujícího setřízené body spočítáme sloupec s pořadím	 | ||||
| 	aktualni_poradi = 1 | ||||
| 	sloupec_s_poradim = [] | ||||
| 
 | ||||
| 	# seskupíme seznam všech bodů podle hodnot | ||||
| 	for index in range(0, len(seznam_s_body)): | ||||
| 	for index in range(0, len(setrizene_body)): | ||||
| 		# pokud je pořadí větší než číslo řádku, tak jsme vypsali větší rozsah a chceme | ||||
| 		# vypsat už jen prázdné místo, než dojdeme na správný řádek | ||||
| 		if (index + 1) < aktualni_poradi: | ||||
|  | @ -402,10 +406,10 @@ def sloupec_s_poradim(seznam_s_body): | |||
| 			continue | ||||
| 		velikost_skupiny = 0 | ||||
| 		# zjistíme počet po sobě jdoucích stejných hodnot | ||||
| 		while seznam_s_body[index] == seznam_s_body[index + velikost_skupiny]: | ||||
| 		while setrizene_body[index] == setrizene_body[index + velikost_skupiny]: | ||||
| 			velikost_skupiny = velikost_skupiny + 1 | ||||
| 			# na konci musíme ošetřit přetečení seznamu | ||||
| 			if (index + velikost_skupiny) > len(seznam_s_body) - 1: | ||||
| 			if (index + velikost_skupiny) > len(setrizene_body) - 1: | ||||
| 				break | ||||
| 		# pokud je velikost skupiny 1, vypíšu pořadí | ||||
| 		if velikost_skupiny == 1: | ||||
|  | @ -418,28 +422,12 @@ def sloupec_s_poradim(seznam_s_body): | |||
| 		aktualni_poradi = aktualni_poradi + velikost_skupiny | ||||
| 	return sloupec_s_poradim | ||||
| 
 | ||||
| ## spočítá součet bodů získaných daným řešitelem za zadaný problém a všechny jeho podproblémy | ||||
| #def __soucet_resitele_problemu(problem, resitel, cislo, soucet): | ||||
| #	# sečteme body za daný problém přes všechna řešení daného problému  | ||||
| #	# od daného řešitele | ||||
| #	reseni_resitele = s.Reseni_Resitele.objects.filter(resitele=resitel) | ||||
| #	hodnoceni_resitele = problem.hodnoceni.filter(reseni__in=reseni_resitele,  | ||||
| #				cislo_body=cislo) | ||||
| #	# XXX chyba na řádku výše - řešení může mít více řešitelů, asi chceme contains | ||||
| #	# nebo in | ||||
| #	for r in hodnoceni_resitele: | ||||
| #		soucet += r.body | ||||
| # | ||||
| #	# a přičteme k tomu hodnocení všech podproblémů | ||||
| #	for p in problem.podproblem.all():  | ||||
| #	# i přes jméno by to měla být množina jeho podproblémů | ||||
| #		soucet += __soucet_resitele_problemu(p, resitel, soucet) | ||||
| #	return soucet | ||||
| 
 | ||||
| ## spočítá součet všech bodů ze všech podproblémů daného problému daného řešitele | ||||
| #def body_resitele_problemu_v_cisle(problem, resitel, cislo): | ||||
| #	# probably FIXED: nezohledňuje číslo, do kterého se body počítají | ||||
| #	return __soucet_resitele_problemu(problem, resitel, cislo, 0) | ||||
| # vrátí všechna čísla daného ročníku   | ||||
| def cisla_rocniku(rocnik, jen_verejne=True): | ||||
| 	if jen_verejne: | ||||
| 		return rocnik.verejna_cisla() | ||||
| 	else: | ||||
| 		return rocnik.cisla.all() | ||||
| 
 | ||||
| # pro daný problém vrátí jeho nejvyšší nadproblém | ||||
| def hlavni_problem(problem): | ||||
|  | @ -447,6 +435,17 @@ def hlavni_problem(problem): | |||
| 		problem = problem.nadproblem | ||||
| 	return problem | ||||
| 
 | ||||
| def hlavni_problemy_rocniku(rocnik, jen_verejne=True): | ||||
| 	hlavni_problemy = [] | ||||
| 	for cislo in cisla_rocniku(rocnik, jen_verejne): | ||||
| 		for problem in hlavni_problemy_cisla(cislo): | ||||
| 			hlavni_problemy.append(problem) | ||||
| 	hlavni_problemy_set = set(hlavni_problemy) | ||||
| 	hlavni_problemy = list(hlavni_problemy_set) | ||||
| 	hlavni_problemy.sort(key=lambda k:k.kod_v_rocniku()) # setřídit podle pořadí | ||||
| 	 | ||||
| 	return hlavni_problemy | ||||
| 
 | ||||
| # vrátí list všech problémů s body v daném čísle, které již nemají nadproblém | ||||
| def hlavni_problemy_cisla(cislo): | ||||
| 	hodnoceni = cislo.hodnoceni.select_related('problem', 'reseni').all()	 | ||||
|  | @ -476,27 +475,32 @@ def body_resitelu_odjakziva(rocnik, resitele): | |||
| 
 | ||||
| 	for r in resitele: | ||||
| 		body_odjakziva[str(r.id)] = 0 | ||||
| # POZOR! Aktuálně počítá jen za posledních 10 let od zadaného ročníku | ||||
| #	# Body za posledních 10 let je dobrá aproximace pro naše potřeby (výsledkovka | ||||
| #	# s aktivními řešiteli) | ||||
| # | ||||
| #	body_pred_roky = [] | ||||
| #	for i in range(0, 10): | ||||
| #		body_pred_roky.append(body_resitelu_za_rocnik(rocnik-i, resitele)) | ||||
| # | ||||
| #	for r in resitele: | ||||
| #		for i in range(0,10): | ||||
| #			body_odjakziva[str(r.id)] += body_pred_roky[i][str(r.id)] | ||||
| ######################################################################### | ||||
| # POZOR! Aktuálně počítá jen za posledních 10 let od zadaného ročníku   # | ||||
| ######################################################################### | ||||
| 	# Body za posledních 10 let je dobrá aproximace pro naše potřeby (výsledkovka | ||||
| 	# s aktivními řešiteli) | ||||
|          | ||||
| 	body_pred_roky = [] | ||||
| 	rok = rocnik.prvni_rok | ||||
| 	rocniky = Rocnik.objects.filter(prvni_rok__gt=rok-11) | ||||
| 	for roc in rocniky:	 | ||||
| 		body_pred_roky.append(body_resitelu_za_rocnik(roc, resitele)) | ||||
|          | ||||
| 	for r in resitele: | ||||
| 		for i in range(0,10): | ||||
| 			body_odjakziva[str(r.id)] += body_pred_roky[i][str(r.id)] | ||||
| 
 | ||||
| 
 | ||||
| # Nasledující řešení je sice správné, ale moc pomalé:	 | ||||
| 	for res in Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').all(): | ||||
| 		for r in res.resitele.all(): | ||||
| 			# daný řešitel nemusí být v naší podmnožině | ||||
| 			if r not in resitele: continue | ||||
| 			 | ||||
| 			for hodn in res.hodnoceni_set.all(): | ||||
| 				pricti_body(body_odjakziva, r, hodn.body) | ||||
| # Nasledující řešení je sice správné, ale moc pomalé: | ||||
| # (důsledek toho, že dotazy na joinování databázových tabulek jsou kvadratické) | ||||
| #	for res in Reseni.objects.prefetch_related('resitele', 'hodnoceni_set').all(): | ||||
| #		for r in res.resitele.all(): | ||||
| #			# daný řešitel nemusí být v naší podmnožině | ||||
| #			if r not in resitele: continue | ||||
| #			 | ||||
| #			for hodn in res.hodnoceni_set.all(): | ||||
| #				pricti_body(body_odjakziva, r, hodn.body) | ||||
| 	return body_odjakziva | ||||
| 
 | ||||
| # vrátí slovník řešitel:body obsahující počty bodů zadaných řešitelů za daný ročník | ||||
|  | @ -514,13 +518,77 @@ def body_resitelu_za_rocnik(rocnik, aktivni_resitele): | |||
| 				pricti_body(body_za_rocnik, resitel, hodn.body) | ||||
| 	return body_za_rocnik | ||||
| 
 | ||||
| # TODO: předělat na nový model | ||||
| #def vysledkovka_rocniku(rocnik, jen_verejne=True): | ||||
| #	"""Přebírá ročník (např. context["rocnik"]) a vrací výsledkovou listinu ve | ||||
| #	formě vhodné pro šablonu "seminar/vysledkovka_rocniku.html" | ||||
| #	""" | ||||
| # | ||||
| #	#vyberu vsechny vysledky z rocniku | ||||
| class RadekVysledkovkyRocniku(object): | ||||
| 	"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky. | ||||
| 	Umožňuje snazší práci v templatu (lepší, než seznam).""" | ||||
| 
 | ||||
| 	def __init__(self, poradi, resitel, body_cisla_sezn, body_rocnik, body_odjakziva): | ||||
| 		self.poradi = poradi | ||||
| 		self.resitel = resitel | ||||
| 		self.body_rocnik = body_rocnik | ||||
| 		self.body_celkem_odjakziva = body_odjakziva | ||||
| 		self.body_cisla_sezn = body_cisla_sezn | ||||
| 		self.titul = resitel.get_titul(body_odjakziva) | ||||
| 
 | ||||
| def vysledkovka_rocniku(rocnik, jen_verejne=True): | ||||
| 	"""Přebírá ročník (např. context["rocnik"]) a vrací výsledkovou listinu ve | ||||
| 	formě vhodné pro šablonu "seminar/vysledkovka_rocniku.html" | ||||
| 	""" | ||||
| 	 | ||||
| 	## TODO možná chytřeji vybírat aktivní řešitele | ||||
| 	# aktivní řešitelé - chceme letos něco poslal, TODO později vyfiltrujeme ty, kdo mají  | ||||
| 	# u alespoň jedné hodnoty něco jiného než NULL | ||||
| 	aktivni_resitele = list(Resitel.objects.filter( | ||||
| 			rok_maturity__gte=rocnik.druhy_rok())) | ||||
| 			# TODO: zkusit hodnoceni__rocnik... | ||||
| 			#.filter(hodnoceni_set__rocnik__eq=cislo_rocnik) | ||||
| 	cisla = cisla_rocniku(rocnik, jen_verejne) | ||||
| 	body_cisla_slov = {} | ||||
| 	print("Jen veřejná: {}, čísla: {}".format(jen_verejne, cisla)) | ||||
| 	for cislo in cisla: | ||||
| 		# získáme body za číslo | ||||
| 		_, cislobody = secti_body_za_cislo(cislo, aktivni_resitele) | ||||
| 		body_cisla_slov[str(cislo.id)] = cislobody | ||||
| 
 | ||||
| 	# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně | ||||
| 	resitel_rocnikbody_sezn = secti_body_za_rocnik(rocnik, aktivni_resitele) | ||||
| 	 | ||||
| 	# setřídíme řešitele podle počtu bodů a získáme seznam s body od nejvyšších po nenižší | ||||
| 	setrizeni_resitele_id = [dvojice[0] for dvojice in resitel_rocnikbody_sezn] | ||||
| 	setrizeni_resitele = [Resitel.objects.get(id=i) for i in setrizeni_resitele_id] | ||||
| 	setrizene_body = [dvojice[1] for dvojice in resitel_rocnikbody_sezn] | ||||
| 	poradi = sloupec_s_poradim(setrizene_body) | ||||
| 
 | ||||
| 	# získáme body odjakživa | ||||
| 	resitel_odjakzivabody_slov = body_resitelu_odjakziva(rocnik, aktivni_resitele) | ||||
| 
 | ||||
| 	# vytvoříme jednotlivé sloupce výsledkovky | ||||
| 	radky_vysledkovky = [] | ||||
| 	i = 0 | ||||
| 	for ar_id in setrizeni_resitele_id: | ||||
| 		# seznam počtu bodů daného řešitele pro jednotlivá čísla | ||||
| 		body_cisla_sezn = [] | ||||
| 		for cislo in cisla: | ||||
| 			body_cisla_sezn.append(body_cisla_slov[str(cislo.id)][str(ar_id)]) | ||||
| 
 | ||||
| 		# vytáhneme informace pro daného řešitele | ||||
| 		radek = RadekVysledkovkyRocniku( | ||||
| 			poradi[i], # pořadí | ||||
| 			Resitel.objects.get(id=ar_id), # řešitel (z id) | ||||
| 			body_cisla_sezn, # seznam bodů za čísla | ||||
| 			setrizene_body[i], # body za ročník (spočítané výše s pořadím) | ||||
| 			resitel_odjakzivabody_slov[ar_id]) # body odjakživa | ||||
| 		print("{}: číslobody - {}, ročníkbody - {}," | ||||
| 			"odjakživabody - {}".format(radek.resitel, radek.body_cisla_sezn,  | ||||
| 			radek.body_rocnik, radek.body_celkem_odjakziva)) | ||||
| 		radky_vysledkovky.append(radek) | ||||
| 		print("Přikládám {}-tý řádek.".format(i)) | ||||
| 		i += 1 | ||||
| 
 | ||||
| 	return radky_vysledkovky | ||||
| 	 | ||||
| 
 | ||||
| 	#vyberu vsechny vysledky z rocniku | ||||
| #	cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__rocnik=rocnik).order_by('cislo') | ||||
| #	if jen_verejne: | ||||
| #		cisla_v_rocniku = cisla_v_rocniku.filter(cislo__verejna_vysledkovka=True) | ||||
|  | @ -594,10 +662,15 @@ class RocnikView(generic.DetailView): | |||
| 	def get_context_data(self, **kwargs): | ||||
| 		context = super(RocnikView, self).get_context_data(**kwargs) | ||||
| 
 | ||||
| 		#context['vysledkovka'] = vysledkovka_rocniku(context["rocnik"]) | ||||
| 		#context['vysledkovka_s_neverejnymi'] = vysledkovka_rocniku(context["rocnik"], jen_verejne=False) | ||||
| 		#context['temata_v_rocniku'] = verejna_temata(context["rocnik"]) | ||||
| 		# FIXME: opravit vylistování témat v ročníku | ||||
| 		# vysledkovka = True zajistí vykreslení, | ||||
| 		# zkontrolovat, kdy se má a nemá vykreslovat | ||||
| 		context['vysledkovka'] = True | ||||
| 		context['cisla_s_neverejnymi'] = cisla_rocniku(context["rocnik"], jen_verejne=False) | ||||
| 		context['cisla'] = cisla_rocniku(context["rocnik"]) | ||||
| 		context['radky_vysledkovky'] = vysledkovka_rocniku(context["rocnik"]) | ||||
| 		context['radky_vysledkovky_s_neverejnymi'] = vysledkovka_rocniku(context["rocnik"], jen_verejne=False) | ||||
| 		context['hlavni_problemy_v_rocniku'] = hlavni_problemy_rocniku(context["rocnik"]) | ||||
| 		context['hlavni_problemy_v_rocniku_s_neverejnymi'] = hlavni_problemy_rocniku(context["rocnik"], jen_verejne=False) | ||||
| 
 | ||||
| 		return context | ||||
| 
 | ||||
|  | @ -621,7 +694,7 @@ class ProblemView(generic.DetailView): | |||
| 		return context | ||||
| 
 | ||||
| 
 | ||||
| class RadekVysledkovky(object): | ||||
| class RadekVysledkovkyCisla(object): | ||||
| 	"""Obsahuje věci, které se hodí vědět při konstruování výsledkovky. | ||||
| 	Umožňuje snazší práci v templatu (lepší, než seznam).""" | ||||
| 
 | ||||
|  | @ -647,19 +720,22 @@ def pricti_body(slovnik, resitel, body): | |||
| 	 | ||||
| 	slovnik[str(resitel.id)] += body | ||||
| 
 | ||||
| def secti_body_za_rocnik(cislo, aktivni_resitele): | ||||
| def secti_body_za_rocnik(rocnik, aktivni_resitele): | ||||
| 	# spočítáme všem řešitelům jejich body za ročník | ||||
| 	resitel_rocnikbody_slov = body_resitelu_za_rocnik(cislo.rocnik, aktivni_resitele) | ||||
| 	resitel_rocnikbody_slov = body_resitelu_za_rocnik(rocnik, aktivni_resitele) | ||||
| 	# zeptáme se na dvojice (řešitel, body) za ročník a setřídíme sestupně | ||||
| 	resitel_rocnikbody_sezn = sorted(resitel_rocnikbody_slov.items(), | ||||
| 					key = lambda x: x[1], reverse = True) | ||||
| 	return resitel_rocnikbody_sezn | ||||
| 
 | ||||
| # spočítá u řešitelů body za číslo a za jednotlivé hlavní problémy (témata) | ||||
| def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy): | ||||
| def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): | ||||
| 	# TODO setřídit hlavní problémy čísla podle id, ať jsou ve stejném pořadí pokaždé | ||||
| 	# pro každý hlavní problém zavedeme slovník s body za daný hlavní problém  | ||||
| 	# pro jednotlivé řešitele (slovník slovníků hlavních problémů) | ||||
| 	if hlavni_problemy is None: | ||||
| 		hlavni_problemy = hlavni_problemy_cisla(cislo) | ||||
| 
 | ||||
| 	hlavni_problemy_slovnik = {} | ||||
| 	for hp in hlavni_problemy: | ||||
| 		hlavni_problemy_slovnik[str(hp.id)] = {} | ||||
|  | @ -697,12 +773,11 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy): | |||
| 	return hlavni_problemy_slovnik, cislobody | ||||
| 		 | ||||
| 
 | ||||
| def spocti_vysledkovku_cisla(cislo, context=None): | ||||
| def vysledkovka_cisla(cislo, context=None): | ||||
| 	if context is None: | ||||
| 		context = {} | ||||
| 	 | ||||
| 	hlavni_problemy = hlavni_problemy_cisla(cislo) | ||||
| 	## TODO dostat pro tyto problémy součet v daném čísle pro daného řešitele | ||||
| 	## TODO možná chytřeji vybírat aktivní řešitele | ||||
| 	# aktivní řešitelé - chceme letos něco poslal, TODO později vyfiltrujeme ty, kdo mají  | ||||
| 	# u alespoň jedné hodnoty něco jiného než NULL | ||||
|  | @ -715,10 +790,10 @@ def spocti_vysledkovku_cisla(cislo, context=None): | |||
| 	hlavni_problemy_slovnik, cislobody = secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy) | ||||
| 
 | ||||
| 	# získáme body za ročník, seznam obsahuje dvojice (řešitel_id, body) setřízené sestupně | ||||
| 	resitel_rocnikbody_sezn = secti_body_za_rocnik(cislo, aktivni_resitele) | ||||
| 	resitel_rocnikbody_sezn = secti_body_za_rocnik(cislo.rocnik, aktivni_resitele) | ||||
| 
 | ||||
| 	# získáme body odjakživa | ||||
| 	resitel_odjakzivabody_slov = body_resitelu_odjakziva(cislo.rocnik.druhy_rok(),  | ||||
| 	resitel_odjakzivabody_slov = body_resitelu_odjakziva(cislo.rocnik,  | ||||
| 								aktivni_resitele) | ||||
| 
 | ||||
| 	# řešitelé setřídění podle bodů za číslo sestupně | ||||
|  | @ -738,7 +813,7 @@ def spocti_vysledkovku_cisla(cislo, context=None): | |||
| 		for hp in hlavni_problemy: | ||||
| 			problemy.append(hlavni_problemy_slovnik[str(hp.id)][ar_id]) | ||||
| 		# vytáhneme informace pro daného řešitele | ||||
| 		radek = RadekVysledkovky( | ||||
| 		radek = RadekVysledkovkyCisla( | ||||
| 			poradi[i], # pořadí | ||||
| 			Resitel.objects.get(id=ar_id), # řešitel (z id) | ||||
| 			problemy, # seznam bodů za hlavní problémy čísla | ||||
|  | @ -785,7 +860,7 @@ class CisloView(generic.DetailView): | |||
| 
 | ||||
| 		cislo = context['cislo'] | ||||
| 		# vrátíme context (aktuálně obsahuje jen věci ohledně výsledkovky | ||||
| 		return spocti_vysledkovku_cisla(cislo, context) | ||||
| 		return vysledkovka_cisla(cislo, context) | ||||
| 
 | ||||
| #		problemy = sorted(set(r.problem for r in reseni), key=lambda x:(poradi_typu[x.typ], x.kod_v_rocniku())) | ||||
| #		#setridi problemy podle typu a poradi zadani | ||||
|  | @ -844,13 +919,13 @@ class ArchivTemataView(generic.ListView): | |||
| #	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 | ||||
| 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 | ||||
| 
 | ||||
| ### Generovani obalek | ||||
| class CisloObalkyStruct: | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Anet
						Anet