|
@ -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 se určí následovně: |
|
|
|
|
|
# - Pokud se řeší body, které jsou starší, než do 26 ročníku (včetně), dáváme tituly postaru. |
|
|
|
|
|
# - Jinak dáváme tituly po novu... |
|
|
|
|
|
# - ... 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 = Titul.z_bodu(logicke_body) |
|
|
# Titul pro 26. ročník |
|
|
if stary_titul is None: |
|
|
stary_titul = titul_do_26_rocniku(starsi_body) |
|
|
return str(titul) |
|
|
# Titul podle aktuálních pravidel |
|
|
return str(max(titul, stary_titul)) |
|
|
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): |
|
|