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