Výsledkovka ostatní - Tohle by mělo fungovat, ale isinstance nefunguje
This commit is contained in:
		
							parent
							
								
									efdd32427e
								
							
						
					
					
						commit
						bc3913d4b0
					
				
					 2 changed files with 36 additions and 4 deletions
				
			
		|  | @ -76,6 +76,7 @@ | ||||||
|         {% for p in problemy %} |         {% for p in problemy %} | ||||||
|         <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a> |         <th class='border-r'><a href="{{ p.verejne_url }}">{{ p.kod_v_rocniku }}</a> | ||||||
|         {% endfor %} |         {% endfor %} | ||||||
|  |         {% if ostatni %}<th class='border-r'>Ostatní {% endif %} | ||||||
|         <th class='border-r'>Za číslo |         <th class='border-r'>Za číslo | ||||||
|         <th class='border-r'>Za ročník |         <th class='border-r'>Za ročník | ||||||
|         <th class='border-r'>Odjakživa |         <th class='border-r'>Odjakživa | ||||||
|  |  | ||||||
|  | @ -989,18 +989,30 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): | ||||||
| 	if hlavni_problemy is None: | 	if hlavni_problemy is None: | ||||||
| 		hlavni_problemy = hlavni_problemy_cisla(cislo) | 		hlavni_problemy = hlavni_problemy_cisla(cislo) | ||||||
| 
 | 
 | ||||||
|  | 	def ne_clanek_ne_konfera(problem): | ||||||
|  | 		return not(isinstance(problem, m.Clanek) or isinstance(problem, m.Konfera)) | ||||||
|  | 
 | ||||||
|  | 	temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy)) | ||||||
|  | 
 | ||||||
|  | 	def cosi(problem): | ||||||
|  | 		return problem.id | ||||||
|  | 
 | ||||||
| 	hlavni_problemy_slovnik = {} | 	hlavni_problemy_slovnik = {} | ||||||
| 	for hp in hlavni_problemy: | 	for hp in temata_a_spol: | ||||||
| 		hlavni_problemy_slovnik[hp.id] = {} | 		hlavni_problemy_slovnik[hp.id] = {} | ||||||
| 
 | 
 | ||||||
|  | 	hlavni_problemy_slovnik[-1] = {} | ||||||
|  | 
 | ||||||
| 	# zakládání prázdných záznamů pro řešitele | 	# zakládání prázdných záznamů pro řešitele | ||||||
| 	cislobody = {} | 	cislobody = {} | ||||||
| 	for ar in aktivni_resitele: | 	for ar in aktivni_resitele: | ||||||
| 		# řešitele převedeme na řetězec pomocí unikátního id | 		# řešitele převedeme na řetězec pomocí unikátního id | ||||||
| 		cislobody[ar.id] = "" | 		cislobody[ar.id] = "" | ||||||
| 		for hp in hlavni_problemy: | 		for hp in temata_a_spol: | ||||||
| 			slovnik = hlavni_problemy_slovnik[hp.id] | 			slovnik = hlavni_problemy_slovnik[hp.id] | ||||||
| 			slovnik[ar.id] = "" | 			slovnik[ar.id] = "" | ||||||
|  | 
 | ||||||
|  | 		hlavni_problemy_slovnik[-1][ar.id] = "" | ||||||
| 	 | 	 | ||||||
| 	# vezmeme všechna řešení s body do daného čísla | 	# vezmeme všechna řešení s body do daného čísla | ||||||
| 	reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'resitele',  | 	reseni_do_cisla = Reseni.objects.prefetch_related('problem', 'resitele',  | ||||||
|  | @ -1013,7 +1025,10 @@ def secti_body_za_cislo(cislo, aktivni_resitele, hlavni_problemy=None): | ||||||
| 		# řešení může řešit více problémů | 		# řešení může řešit více problémů | ||||||
| 		for prob in list(reseni.problem.all()): | 		for prob in list(reseni.problem.all()): | ||||||
| 			nadproblem = hlavni_problem(prob) | 			nadproblem = hlavni_problem(prob) | ||||||
| 			nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] | 			if ne_clanek_ne_konfera(nadproblem): | ||||||
|  | 				nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem.id] | ||||||
|  | 			else: | ||||||
|  | 				nadproblem_slovnik = hlavni_problemy_slovnik[-1] | ||||||
| 			 | 			 | ||||||
| 			# a mít více hodnocení | 			# a mít více hodnocení | ||||||
| 			for hodn in list(reseni.hodnoceni_set.all()): | 			for hodn in list(reseni.hodnoceni_set.all()): | ||||||
|  | @ -1058,11 +1073,26 @@ def vysledkovka_cisla(cislo, context=None): | ||||||
| 	# vytvoříme jednotlivé sloupce výsledkovky | 	# vytvoříme jednotlivé sloupce výsledkovky | ||||||
| 	radky_vysledkovky = [] | 	radky_vysledkovky = [] | ||||||
| 	i = 0 | 	i = 0 | ||||||
|  | 
 | ||||||
|  | 	def ne_clanek_ne_konfera(problem): | ||||||
|  | 		return not(isinstance(problem, m.Clanek) or isinstance(problem, m.Konfera)) | ||||||
|  | 
 | ||||||
|  | 	temata_a_spol = list(filter(ne_clanek_ne_konfera, hlavni_problemy)) | ||||||
|  | 
 | ||||||
|  | 	# def not_empty(value): | ||||||
|  | 	# 	return value != '' | ||||||
|  | 	# | ||||||
|  | 	# je_nejake_ostatni = any(filter(not_empty, hlavni_problemy_slovnik[-1].values())) > 0 | ||||||
|  | 
 | ||||||
|  | 	je_nejake_ostatni = len(hlavni_problemy) - len(temata_a_spol) > 0 | ||||||
|  | 
 | ||||||
| 	for ar_id in setrizeni_resitele_id: | 	for ar_id in setrizeni_resitele_id: | ||||||
| 		# získáme seznam bodů za problémy pro daného řešitele | 		# získáme seznam bodů za problémy pro daného řešitele | ||||||
| 		problemy = [] 		 | 		problemy = [] 		 | ||||||
| 		for hp in hlavni_problemy: | 		for hp in temata_a_spol: | ||||||
| 			problemy.append(hlavni_problemy_slovnik[hp.id][ar_id]) | 			problemy.append(hlavni_problemy_slovnik[hp.id][ar_id]) | ||||||
|  | 		if je_nejake_ostatni: | ||||||
|  | 			problemy.append(hlavni_problemy_slovnik[-1][ar_id]) | ||||||
| 		# vytáhneme informace pro daného řešitele | 		# vytáhneme informace pro daného řešitele | ||||||
| 		radek = RadekVysledkovkyCisla( | 		radek = RadekVysledkovkyCisla( | ||||||
| 			poradi[i], # pořadí | 			poradi[i], # pořadí | ||||||
|  | @ -1079,6 +1109,7 @@ def vysledkovka_cisla(cislo, context=None): | ||||||
| 	context['cislo'] = cislo | 	context['cislo'] = cislo | ||||||
| 	context['radky_vysledkovky'] = radky_vysledkovky | 	context['radky_vysledkovky'] = radky_vysledkovky | ||||||
| 	context['problemy'] = hlavni_problemy | 	context['problemy'] = hlavni_problemy | ||||||
|  | 	context['ostatni'] = je_nejake_ostatni | ||||||
| 	#context['v_cisle_zadane'] = TODO | 	#context['v_cisle_zadane'] = TODO | ||||||
| 	#context['resene_problemy'] = resene_problemy | 	#context['resene_problemy'] = resene_problemy | ||||||
| 	return context | 	return context | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Jonas Havelka
						Jonas Havelka