Zrušen SourhnReseni
Už není potřeba, v tabulce stejně jsou už přímo řešení.
This commit is contained in:
		
							parent
							
								
									659ad62b52
								
							
						
					
					
						commit
						96bc21a727
					
				
					 1 changed files with 8 additions and 17 deletions
				
			
		|  | @ -37,14 +37,6 @@ logger = logging.getLogger(__name__) | |||
| # Taky se může hodit: | ||||
| # - Tabulka všech řešitelů x všech problémů? | ||||
| 
 | ||||
| @dataclass | ||||
| class SouhrnReseni: | ||||
| 	"""Dataclass reprezentující data o odevzdaných řešeních pro zobrazení v tabulce.""" | ||||
| 	pocet_reseni : int | ||||
| 	posledni_odevzdani : datetime.datetime | ||||
| 	body : float | ||||
| 
 | ||||
| 
 | ||||
| class TabulkaOdevzdanychReseniView(ListView): | ||||
| 	template_name = 'odevzdavatko/tabulka.html' | ||||
| 	model = m.Hodnoceni | ||||
|  | @ -120,26 +112,25 @@ class TabulkaOdevzdanychReseniView(ListView): | |||
| 		return qs | ||||
| 
 | ||||
| 	def get_context_data(self, *args, **kwargs): | ||||
| 		# TODO: refactor asi. Přepisoval jsem to jen syntakticky, nejspíš půlka kódu přestala dávat smysl… | ||||
| 		# self.resitele, self.reseni a self.problemy jsou již nastavené | ||||
| 
 | ||||
| 		ctx = super().get_context_data(*args, **kwargs) | ||||
| 		ctx['problemy'] = self.problemy | ||||
| 		ctx['resitele'] = self.resitele | ||||
| 		tabulka: dict[m.Problem, dict[m.Resitel, SouhrnReseni]] = dict() | ||||
| 		tabulka: dict[m.Problem, dict[m.Resitel, list[m.Reseni]]] = dict() | ||||
| 
 | ||||
| 		def pridej_reseni(resitel, hodnoceni): | ||||
| 			problem = hodnoceni.problem | ||||
| 			body = hodnoceni.body | ||||
| 			cas = hodnoceni.reseni.cas_doruceni | ||||
| 			reseni = hodnoceni.reseni | ||||
| 			if problem not in tabulka: | ||||
| 				tabulka[problem] = dict() | ||||
| 			if resitel not in tabulka[problem]: | ||||
| 				tabulka[problem][resitel] = SouhrnReseni(pocet_reseni=1, posledni_odevzdani=cas, body=body) | ||||
| 				tabulka[problem][resitel] = [reseni] | ||||
| 			else: | ||||
| 				tabulka[problem][resitel].posledni_odevzdani = max(tabulka[problem][resitel].posledni_odevzdani, cas) | ||||
| 				# Zvětšení počtu bodů o aktuální počet, pokud se tam někde nevyskytuje None – pak je součet taky None ("Pozor, nezadané body") | ||||
| 				tabulka[problem][resitel].body = tabulka[problem][resitel].body + body if body is not None and tabulka[problem][resitel].body is not None else None | ||||
| 				tabulka[problem][resitel].pocet_reseni += 1 | ||||
| 				tabulka[problem][resitel].append(reseni) | ||||
| 			# Pro jednoduchost template si ještě poznamenáme ID problému a řešitele | ||||
| 			tabulka[problem][resitel].problem_id = problem.id | ||||
| 			tabulka[problem][resitel].resitel_id = resitel.id | ||||
|  | @ -148,17 +139,17 @@ class TabulkaOdevzdanychReseniView(ListView): | |||
| 			for resitel in hodnoceni.reseni.resitele.all(): | ||||
| 				pridej_reseni(resitel, hodnoceni) | ||||
| 
 | ||||
| 		hodnoty: list[list[SouhrnReseni]] = [] | ||||
| 		hodnoty: list[list[list[m.Reseni]]] = [] # Seznam řádků výsledné tabulky podle self.resitele, v každém řádku buňky v pořadí podle self.problemy, v každé buňce seznam řešení k danému řešiteli a problému. | ||||
| 		resitele_do_tabulky: list[m.Resitel] = [] | ||||
| 		for resitel in self.resitele: | ||||
| 			dostal_body = False | ||||
| 			resiteluv_radek: list[SourhnReseni] = [] # podle pořadí v self.problemy, pokud daný problém neřešil, pak None | ||||
| 			resiteluv_radek: list[list[m.Resitel]] = [] # podle pořadí v self.problemy | ||||
| 			for problem in self.problemy: | ||||
| 				if problem in tabulka and resitel in tabulka[problem]: | ||||
| 					resiteluv_radek.append(tabulka[problem][resitel]) | ||||
| 					dostal_body = True | ||||
| 				else: | ||||
| 					resiteluv_radek.append(None) | ||||
| 					resiteluv_radek.append([]) | ||||
| 			if self.chteni_resitele != FiltrForm.RESITELE_RELEVANTNI or dostal_body: | ||||
| 				hodnoty.append(resiteluv_radek) | ||||
| 				resitele_do_tabulky.append(resitel) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky