vysledkovka | uklid a procisteni
This commit is contained in:
		
							parent
							
								
									194658c64d
								
							
						
					
					
						commit
						fdc38f99bc
					
				
					 3 changed files with 13 additions and 35 deletions
				
			
		|  | @ -240,38 +240,16 @@ def hlavni_problem(problem): | |||
| 		problem = problem.nadproblem | ||||
| 	return problem | ||||
| 
 | ||||
| def hlavni_problemy_rocniku(rocnik, jen_verejne=True): | ||||
| 	""" Pro zadaný ročník vrátí hlavní problémy ročníku, | ||||
| 	tj. ty, které už nemají nadproblém.""" | ||||
| 	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 | ||||
| def problemy_rocniku(rocnik, jen_verejne=True): | ||||
| 	return  m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(cislo_body__in = cisla_rocniku(rocnik, jen_verejne))).distinct().select_related('nadproblem').select_related('nadproblem__nadproblem') | ||||
| 
 | ||||
| def problemy_cisla(cislo): | ||||
| 	""" Vrátí seznam všech problémů s body v daném čísle. """ | ||||
| 	return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(cislo_body = cislo)).distinct().select_related('nadproblem') | ||||
| 
 | ||||
| #	hodnoceni = cislo.hodnoceni.select_related('problem').all() | ||||
| 	# hodnocení, která se vážou k danému číslu | ||||
| 	 | ||||
| #	problemy = [h.problem for h in hodnoceni] | ||||
| #	problemy_set = set(problemy)  # chceme každý problém unikátně, | ||||
| #	problemy = (list(problemy_set))  # převedení na množinu a zpět to zaručí | ||||
| 
 | ||||
| #	return problemy | ||||
| 	return m.Problem.objects.filter(hodnoceni__in = m.Hodnoceni.objects.filter(cislo_body = cislo)).distinct().select_related('nadproblem').select_related('nadproblem__nadproblem') | ||||
| 
 | ||||
| 
 | ||||
| def hlavni_problemy_cisla(cislo, problemy=None): | ||||
| 	""" Vrátí seznam všech problémů s body v daném čísle, které již nemají nadproblém. """ | ||||
| 	if problemy is None: | ||||
| 		problemy = problemy_cisla(cislo) | ||||
| 
 | ||||
| def hlavni_problemy_f(problemy=None): | ||||
| 	""" Vrátí seznam všech problémů, které již nemají nadproblém. """ | ||||
| 	# hlavní problémy čísla  | ||||
| 	# (mají vlastní sloupeček ve výsledkovce, nemají nadproblém) | ||||
| 	hlavni_problemy = set() | ||||
|  | @ -290,7 +268,7 @@ def podproblemy_v_cislu(cislo, problemy=None, hlavni_problemy=None): | |||
| 	if problemy is None: | ||||
| 		problemy = problemy_cisla(cislo) | ||||
| 	if hlavni_problemy is None: | ||||
| 		hlavni_problemy = hlavni_problemy_cisla(cislo, problemy) | ||||
| 		hlavni_problemy = hlavni_problemy_f(problemy) | ||||
| 
 | ||||
| 	podproblemy = dict((hp.id, []) for hp in hlavni_problemy) | ||||
| 	hlavni_problemy = set(hlavni_problemy) | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ import csv | |||
| import logging | ||||
| import time | ||||
| 
 | ||||
| from seminar.utils import aktivniResitele, resi_v_rocniku, hlavni_problemy_rocniku, cisla_rocniku, hlavni_problemy_cisla | ||||
| from seminar.utils import aktivniResitele, resi_v_rocniku, problemy_rocniku, cisla_rocniku, hlavni_problemy_f | ||||
| 
 | ||||
| # ze starého modelu | ||||
| #def verejna_temata(rocnik): | ||||
|  | @ -657,10 +657,10 @@ class RocnikView(generic.DetailView): | |||
| 		if self.request.user.je_org: | ||||
| 			context['cisla_s_neverejnymi'] = cisla_rocniku(context["rocnik"], jen_verejne=False) | ||||
| 			context['radky_vysledkovky_s_neverejnymi'] = vysledkovka_rocniku(context["rocnik"], jen_verejne=False) | ||||
| 			context['hlavni_problemy_v_rocniku_s_neverejnymi'] = hlavni_problemy_rocniku(context["rocnik"], jen_verejne=False) | ||||
| 			context['hlavni_problemy_v_rocniku_s_neverejnymi'] = hlavni_problemy_f(problemy_rocniku(context["rocnik"], jen_verejne=False)) | ||||
| 		context['cisla'] = cisla_rocniku(context["rocnik"]) | ||||
| 		context['radky_vysledkovky'] = vysledkovka_rocniku(context["rocnik"]) | ||||
| 		context['hlavni_problemy_v_rocniku'] = hlavni_problemy_rocniku(context["rocnik"]) | ||||
| 		context['hlavni_problemy_v_rocniku'] = hlavni_problemy_f(problemy_rocniku(context["rocnik"])) | ||||
| 		end = time.time() | ||||
| 		print("Kontext:", end-start) | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import seminar.models as m | ||||
| from django.db.models import Q, Sum, Count | ||||
| from seminar.utils import aktivniResitele, resi_v_rocniku, cisla_rocniku, hlavni_problemy_rocniku, hlavni_problem, hlavni_problemy_cisla, problemy_cisla, podproblemy_v_cislu | ||||
| from seminar.utils import aktivniResitele, resi_v_rocniku, cisla_rocniku, hlavni_problem, hlavni_problemy_f, problemy_cisla, podproblemy_v_cislu | ||||
| import time | ||||
| ### Výsledky | ||||
| 
 | ||||
|  | @ -239,7 +239,7 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): | |||
| 	print("Scitam cislo",cislo) | ||||
| 
 | ||||
| 	if hlavni_problemy is None: | ||||
| 		hlavni_problemy = hlavni_problemy_cisla(cislo) | ||||
| 		hlavni_problemy = hlavni_problemy_f(problemy_cisla(cislo)) | ||||
| 
 | ||||
| 	def ne_clanek_ne_konfera(problem): | ||||
| 		inst = problem.get_real_instance() | ||||
|  | @ -300,7 +300,7 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): | |||
| def secti_body_za_cislo_podle_temat(cislo, aktivni_resitele, podproblemy=None, temata=None): | ||||
| 	""" Spočítá u řešitelů body za číslo za úlohy v jednotlivých hlavních problémech (témata).""" | ||||
| 	if temata is None: | ||||
| 		temata = hlavni_problemy_cisla(cislo) | ||||
| 		temata = hlavni_problemy_f(problemy_cisla(cislo)) | ||||
| 
 | ||||
| 	if podproblemy is None: | ||||
| 		podproblemy_v_cislu(cislo, hlavni_problemy=temata) | ||||
|  | @ -370,7 +370,7 @@ def vysledkovka_cisla(cislo, context=None): | |||
| 	if context is None: | ||||
| 		context = {} | ||||
| 	problemy = problemy_cisla(cislo) | ||||
| 	hlavni_problemy = hlavni_problemy_cisla(cislo, problemy) | ||||
| 	hlavni_problemy = hlavni_problemy_f(problemy) | ||||
| 	## 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 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue