Správné počítání starých bodů do titulů a výsledkovek
This commit is contained in:
		
							parent
							
								
									9d7fedd0ac
								
							
						
					
					
						commit
						4096f94e68
					
				
					 1 changed files with 58 additions and 42 deletions
				
			
		|  | @ -345,52 +345,68 @@ class Resitel(SeminarModelBase): | ||||||
| 						break | 						break | ||||||
| 				return aktualni | 				return aktualni | ||||||
| 
 | 
 | ||||||
| 		# Titul pro 26. ročník | 		# Hledáme body v databázi | ||||||
| 		stary_titul = None | 		# V listopadu 2020 jsme se na filosofické schůzce shodli o změně hranic titulů: | ||||||
|  | 		#  - body z 25. ročníku a dříve byly shledány dvakrát hodnotnějšími | ||||||
|  | 		#  - proto se započítávají dvojnásobně a byly posunuté hranice titulů | ||||||
|  | 		#  - staré tituly se ale nemají odebrat, pokud řešitel v t.č. minulém (26.) ročníku měl titul, má ho mít pořád. | ||||||
|  | 		hodnoceni_do_25_rocniku = Hodnoceni.objects.filter(cislo_body__rocnik__rocnik__lte=25,reseni__in=self.reseni_set.all()) | ||||||
|  | 		novejsi_hodnoceni = Hodnoceni.objects.filter(reseni__in=self.reseni_set.all()).difference(hodnoceni_do_25_rocniku) | ||||||
|  | 
 | ||||||
|  | 		def body_z_hodnoceni(hh : list): | ||||||
|  | 			return sum(h.body for h in hh) | ||||||
|  | 
 | ||||||
|  | 		stare_body = body_z_hodnoceni(hodnoceni_do_25_rocniku) | ||||||
| 		if body is None: | 		if body is None: | ||||||
| 			# Hledáme body v databázi |  | ||||||
| 			# V listopadu 2020 jsme se na filosofické schůzce shodli o změně hranic titulů: |  | ||||||
| 			#  - body z 25. ročníku a dříve byly shledány dvakrát hodnotnějšími |  | ||||||
| 			#  - proto se započítávají dvojnásobně a byly posunuté hranice titulů |  | ||||||
| 			#  - staré tituly se ale nemají odebrat, pokud řešitel v t.č. minulém (26.) ročníku měl titul, má ho mít pořád. |  | ||||||
| 			hodnoceni_do_25_rocniku = Hodnoceni.objects.filter(cislo_body__rocnik__rocnik__lte=25,reseni__in=self.reseni_set.all()) |  | ||||||
| 			novejsi_hodnoceni = Hodnoceni.objects.filter(reseni__in=self.reseni_set.all()).difference(hodnoceni_do_25_rocniku) |  | ||||||
| 
 |  | ||||||
| 			def body_z_hodnoceni(hh : list): |  | ||||||
| 				return sum(h.body for h in hh) |  | ||||||
| 
 |  | ||||||
| 			stare_body = body_z_hodnoceni(hodnoceni_do_25_rocniku) |  | ||||||
| 			nove_body = body_z_hodnoceni(novejsi_hodnoceni) | 			nove_body = body_z_hodnoceni(novejsi_hodnoceni) | ||||||
| 			logicke_body = 2*stare_body + nove_body |  | ||||||
| 
 |  | ||||||
| 		 |  | ||||||
| 			hodnoceni_do_26_rocniku = Hodnoceni.objects.filter(cislo_body__rocnik__rocnik__lte=26,reseni__in=self.reseni_set.all()) |  | ||||||
| 			def titul_do_26_rocniku(body): |  | ||||||
| 				""" Původní hranice bodů za tituly """ |  | ||||||
| 				if body < 10: |  | ||||||
| 					return Titul.nic |  | ||||||
| 				elif body < 20: |  | ||||||
| 					return Titul.bc |  | ||||||
| 				elif body < 50: |  | ||||||
| 					return Titul.mgr |  | ||||||
| 				elif body < 100: |  | ||||||
| 					return Titul.dr |  | ||||||
| 				elif body < 200: |  | ||||||
| 					return Titul.doc |  | ||||||
| 				elif body < 500: |  | ||||||
| 					return Titul.prof |  | ||||||
| 				else: |  | ||||||
| 					return Titul.akad |  | ||||||
| 			stary_titul = titul_do_26_rocniku(body_z_hodnoceni(hodnoceni_do_26_rocniku)) |  | ||||||
| 
 |  | ||||||
| 		else: | 		else: | ||||||
| 			# Prostě titul podle aktuálních bodů | 			# Zjistíme, kolik bodů jsou staré, tedy hodnotnější | ||||||
| 			logicke_body = body | 			nove_body = max(0, body - stare_body) # Všechny body nad počet původních hodnotnějších | ||||||
|  | 			stare_body = min(stare_body, body) # Skutečný počet hodnotnějších bodů | ||||||
|  | 		logicke_body = 2*stare_body + nove_body | ||||||
|  | 
 | ||||||
| 	 | 	 | ||||||
| 		titul = Titul.z_bodu(logicke_body) | 		# Titul se určí následovně: | ||||||
| 		if stary_titul is None: | 		#  - Pokud se řeší body, které jsou starší, než do 26 ročníku (včetně), dáváme tituly postaru. | ||||||
| 			return str(titul) | 		#  - Jinak dáváme tituly po novu... | ||||||
| 		return str(max(titul, stary_titul)) | 		#  - ... ale titul se nesmí odebrat, pokud se zmenšil. | ||||||
|  | 		def titul_do_26_rocniku(body): | ||||||
|  | 			""" Původní hranice bodů za tituly """ | ||||||
|  | 			if body < 10: | ||||||
|  | 				return Titul.nic | ||||||
|  | 			elif body < 20: | ||||||
|  | 				return Titul.bc | ||||||
|  | 			elif body < 50: | ||||||
|  | 				return Titul.mgr | ||||||
|  | 			elif body < 100: | ||||||
|  | 				return Titul.dr | ||||||
|  | 			elif body < 200: | ||||||
|  | 				return Titul.doc | ||||||
|  | 			elif body < 500: | ||||||
|  | 				return Titul.prof | ||||||
|  | 			else: | ||||||
|  | 				return Titul.akad | ||||||
|  | 
 | ||||||
|  | 		hodnoceni_do_26_rocniku = Hodnoceni.objects.filter(cislo_body__rocnik__rocnik__lte=26,reseni__in=self.reseni_set.all()) | ||||||
|  | 		novejsi_body = body_z_hodnoceni( | ||||||
|  | 			Hodnoceni.objects.filter(reseni__in=self.reseni_set.all()) | ||||||
|  | 			.difference(hodnoceni_do_26_rocniku) | ||||||
|  | 			) | ||||||
|  | 		starsi_body = body_z_hodnoceni(hodnoceni_do_26_rocniku) | ||||||
|  | 		if body is not None: | ||||||
|  | 			# Ještě z toho vybereme ty správně staré body | ||||||
|  | 			novejsi_body = max(0, body - starsi_body) | ||||||
|  | 			starsi_body = min(starsi_body, body) | ||||||
|  | 
 | ||||||
|  | 		# Titul pro 26. ročník | ||||||
|  | 		stary_titul = titul_do_26_rocniku(starsi_body) | ||||||
|  | 		# Titul podle aktuálních pravidel | ||||||
|  | 		novy_titul = Titul.z_bodu(logicke_body) | ||||||
|  | 
 | ||||||
|  | 		if novejsi_body == 0: | ||||||
|  | 			# Žádné nové body -- titul podle starých pravidel | ||||||
|  | 			return str(stary_titul) | ||||||
|  | 		return str(max(novy_titul, stary_titul)) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	def __str__(self): | 	def __str__(self): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky