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 | 	@cached_property | ||||||
| 	def problemy_s_body_za_cislo(self): | 	def sectene_body(self): | ||||||
| 		""" | 		""" | ||||||
| 			TODDO okomentovat a zpřehlednit. Vzniklo slepením dvou funkcí | 			Sečte body za číslo, hlavní problémy a podproblémy | ||||||
| 			(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š.) |  | ||||||
| 		""" | 		""" | ||||||
| 
 | 
 | ||||||
| 		hlavni_problemy_slovnik = dict() | 		# Body za číslo | ||||||
| 		for hp in self.hlavni_problemy: | 		body_za_cislo = {ar.id: "" for ar in self.aktivni_resitele} | ||||||
| 			hlavni_problemy_slovnik[hp.id] = {} |  | ||||||
| 
 | 
 | ||||||
| 		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 | 		# Body za podproblémy | ||||||
| 		cislobody = {} | 		body_za_problemy = { | ||||||
| 		for ar in self.aktivni_resitele: | 			tema.id: { | ||||||
| 			# řešitele převedeme na řetězec pomocí unikátního id | 				problem.id: {ar.id: "" for ar in self.aktivni_resitele} | ||||||
| 			cislobody[ar.id] = "" | 				for problem in self.podproblemy[tema.id] | ||||||
| 			for hp in self.temata_a_spol: | 			} | ||||||
| 				slovnik = hlavni_problemy_slovnik[hp.id] | 			for tema in self.temata_a_spol | ||||||
| 				slovnik[ar.id] = "" | 		} | ||||||
| 
 | 		body_za_problemy[-1] = { | ||||||
| 			hlavni_problemy_slovnik[-1][ar.id] = "" | 				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() | 		problem2nadproblem = dict() | ||||||
| 
 |  | ||||||
| 		body_slovnik = {} |  | ||||||
| 		for tema in self.temata_a_spol: | 		for tema in self.temata_a_spol: | ||||||
| 			body_slovnik[tema.id] = {} |  | ||||||
| 			for problem in self.podproblemy[tema.id]: | 			for problem in self.podproblemy[tema.id]: | ||||||
| 				body_slovnik[tema.id][problem.id] = {} |  | ||||||
| 				problem2nadproblem[problem.id] = tema.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 | 		hodnoceni_do_cisla = self.hodnoceni_do_cisla | ||||||
| 
 | 
 | ||||||
|  | 		# Sečteme hodnocení | ||||||
| 		for hodnoceni in hodnoceni_do_cisla: | 		for hodnoceni in hodnoceni_do_cisla: | ||||||
| 			prob = hodnoceni.problem | 			prob = hodnoceni.problem | ||||||
| 			nadproblem = problem2nadproblem[prob.id] | 			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 | 			body = hodnoceni.body | ||||||
| 
 | 
 | ||||||
| 			problem_slovnik = body_slovnik[nadproblem][prob.id] | 			# Může mít více řešitelů | ||||||
| 
 |  | ||||||
| 			# a mít více řešitelů |  | ||||||
| 			for resitel in hodnoceni.reseni.resitele.all(): | 			for resitel in hodnoceni.reseni.resitele.all(): | ||||||
| 				if resitel not in self.aktivni_resitele: | 				if resitel not in self.aktivni_resitele: | ||||||
| 					continue | 					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(nadproblem_slovnik, resitel, body) | ||||||
| 				self.pricti_body(problem_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 | 	@cached_property | ||||||
| 	def hlavni_problemy_slovnik(self) -> dict[int, dict[int, str]]: | 	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 | 	@cached_property | ||||||
| 	def body_za_cislo(self) -> dict[int, str]: | 	def body_za_cislo(self) -> dict[int, str]: | ||||||
| 		return self.problemy_s_body_za_cislo[1] | 		return self.sectene_body[0] | ||||||
| 
 | 
 | ||||||
| 	@cached_property | 	@cached_property | ||||||
| 	def problemy_slovnik(self): | 	def problemy_slovnik(self): | ||||||
| 		return self.problemy_s_body_za_cislo[2] | 		return self.sectene_body[2] | ||||||
| 
 | 
 | ||||||
| 	@cached_property | 	@cached_property | ||||||
| 	def temata_a_spol(self) -> list[m.Problem]: | 	def temata_a_spol(self) -> list[m.Problem]: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue