Přepsána sčítací funkce
This commit is contained in:
		
							parent
							
								
									af4b802354
								
							
						
					
					
						commit
						0d7ec1d90a
					
				
					 1 changed files with 34 additions and 47 deletions
				
			
		|  | @ -258,86 +258,73 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 		) | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def problemy_s_body_za_cislo(self): | ||||
| 	def sectene_body(self): | ||||
| 		""" | ||||
| 			TODDO okomentovat a zpřehlednit. Vzniklo slepením dvou funkcí | ||||
| 			(výpočet bodů hlavních problémů a výpočet bodů podproblémů) | ||||
| 			pro zrychlení výpočtu bodů ve výsledkovce. | ||||
| 
 | ||||
| 			Což asi zpomalilo výsledkovku v TeXu. Co s tím? (Tu nevidí řeš.) | ||||
| 			Sečte body za číslo, hlavní problémy a podproblémy | ||||
| 		""" | ||||
| 
 | ||||
| 		hlavni_problemy_slovnik = dict() | ||||
| 		for hp in self.hlavni_problemy: | ||||
| 			hlavni_problemy_slovnik[hp.id] = {} | ||||
| 		# Body za číslo | ||||
| 		body_za_cislo = {ar.id: "" for ar in self.aktivni_resitele} | ||||
| 
 | ||||
| 		hlavni_problemy_slovnik[-1] = {} | ||||
| 		# Body za hlavní problémy | ||||
| 		body_za_temata = { | ||||
| 			hp.id: {ar.id: "" for ar in self.aktivni_resitele} | ||||
| 			for hp in self.temata_a_spol | ||||
| 		} | ||||
| 		body_za_temata[-1] = {ar.id: "" for ar in self.aktivni_resitele} | ||||
| 
 | ||||
| 		# zakládání prázdných záznamů pro řešitele | ||||
| 		cislobody = {} | ||||
| 		for ar in self.aktivni_resitele: | ||||
| 			# řešitele převedeme na řetězec pomocí unikátního id | ||||
| 			cislobody[ar.id] = "" | ||||
| 			for hp in self.temata_a_spol: | ||||
| 				slovnik = hlavni_problemy_slovnik[hp.id] | ||||
| 				slovnik[ar.id] = "" | ||||
| 
 | ||||
| 			hlavni_problemy_slovnik[-1][ar.id] = "" | ||||
| 		# Body za podproblémy | ||||
| 		body_za_problemy = { | ||||
| 			tema.id: { | ||||
| 				problem.id: {ar.id: "" for ar in self.aktivni_resitele} | ||||
| 				for problem in self.podproblemy[tema.id] | ||||
| 			} | ||||
| 			for tema in self.temata_a_spol | ||||
| 		} | ||||
| 		body_za_problemy[-1] = { | ||||
| 				problem.id: {ar.id: "" for ar in self.aktivni_resitele} | ||||
| 				for problem in self.podproblemy[-1] | ||||
| 		} | ||||
| 
 | ||||
| 		# Mapování podproblémů na problémy | ||||
| 		problem2nadproblem = dict() | ||||
| 
 | ||||
| 		body_slovnik = {} | ||||
| 		for tema in self.temata_a_spol: | ||||
| 			body_slovnik[tema.id] = {} | ||||
| 			for problem in self.podproblemy[tema.id]: | ||||
| 				body_slovnik[tema.id][problem.id] = {} | ||||
| 				problem2nadproblem[problem.id] = tema.id | ||||
| 		body_slovnik[-1] = {} | ||||
| 		for problem in self.podproblemy[-1]: | ||||
| 			body_slovnik[-1][problem.id] = {} | ||||
| 			problem2nadproblem[problem.id] = -1 | ||||
| 
 | ||||
| 		# zakládání prázdných záznamů pro řešitele | ||||
| 		for ar in self.aktivni_resitele: | ||||
| 			for tema in self.temata_a_spol: | ||||
| 				for problem in self.podproblemy[tema.id]: | ||||
| 					body_slovnik[tema.id][problem.id][ar.id] = "" | ||||
| 
 | ||||
| 			for problem in self.podproblemy[-1]: | ||||
| 				body_slovnik[-1][problem.id][ar.id] = "" | ||||
| 
 | ||||
| 
 | ||||
| 		# Získáme query všech sčítaných hodnocení | ||||
| 		hodnoceni_do_cisla = self.hodnoceni_do_cisla | ||||
| 
 | ||||
| 		# Sečteme hodnocení | ||||
| 		for hodnoceni in hodnoceni_do_cisla: | ||||
| 			prob = hodnoceni.problem | ||||
| 			nadproblem = problem2nadproblem[prob.id] | ||||
| 			nadproblem_slovnik = hlavni_problemy_slovnik[nadproblem] | ||||
| 
 | ||||
| 			problem_slovnik = body_za_problemy[nadproblem][prob.id] | ||||
| 			nadproblem_slovnik = body_za_temata[nadproblem] | ||||
| 
 | ||||
| 			body = hodnoceni.body | ||||
| 
 | ||||
| 			problem_slovnik = body_slovnik[nadproblem][prob.id] | ||||
| 
 | ||||
| 			# a mít více řešitelů | ||||
| 			# Může mít více řešitelů | ||||
| 			for resitel in hodnoceni.reseni.resitele.all(): | ||||
| 				if resitel not in self.aktivni_resitele: | ||||
| 					continue | ||||
| 				self.pricti_body(cislobody, resitel, body) | ||||
| 				self.pricti_body(body_za_cislo, resitel, body) | ||||
| 				self.pricti_body(nadproblem_slovnik, resitel, body) | ||||
| 				self.pricti_body(problem_slovnik, resitel, body) | ||||
| 		return hlavni_problemy_slovnik, cislobody, body_slovnik | ||||
| 		return body_za_cislo, body_za_temata, body_za_problemy | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: | ||||
| 		return self.problemy_s_body_za_cislo[0] | ||||
| 		return self.sectene_body[1] | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def body_za_cislo(self) -> dict[int, str]: | ||||
| 		return self.problemy_s_body_za_cislo[1] | ||||
| 		return self.sectene_body[0] | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def problemy_slovnik(self): | ||||
| 		return self.problemy_s_body_za_cislo[2] | ||||
| 		return self.sectene_body[2] | ||||
| 
 | ||||
| 	@cached_property | ||||
| 	def temata_a_spol(self) -> list[m.Problem]: | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue