Browse Source

Správné počítání starých bodů do titulů a výsledkovek

export_seznamu_prednasek
Pavel "LEdoian" Turinsky 4 years ago
parent
commit
4096f94e68
  1. 40
      seminar/models.py

40
seminar/models.py

@ -345,9 +345,6 @@ class Resitel(SeminarModelBase):
break break
return aktualni return aktualni
# Titul pro 26. ročník
stary_titul = None
if body is None:
# Hledáme body v databázi # Hledáme body v databázi
# V listopadu 2020 jsme se na filosofické schůzce shodli o změně hranic titulů: # 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 # - body z 25. ročníku a dříve byly shledány dvakrát hodnotnějšími
@ -360,11 +357,19 @@ class Resitel(SeminarModelBase):
return sum(h.body for h in hh) return sum(h.body for h in hh)
stare_body = body_z_hodnoceni(hodnoceni_do_25_rocniku) stare_body = body_z_hodnoceni(hodnoceni_do_25_rocniku)
if body is None:
nove_body = body_z_hodnoceni(novejsi_hodnoceni) nove_body = body_z_hodnoceni(novejsi_hodnoceni)
else:
# Zjistíme, kolik bodů jsou staré, tedy hodnotnější
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 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()) # 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): def titul_do_26_rocniku(body):
""" Původní hranice bodů za tituly """ """ Původní hranice bodů za tituly """
if body < 10: if body < 10:
@ -381,16 +386,27 @@ class Resitel(SeminarModelBase):
return Titul.prof return Titul.prof
else: else:
return Titul.akad return Titul.akad
stary_titul = titul_do_26_rocniku(body_z_hodnoceni(hodnoceni_do_26_rocniku))
else: hodnoceni_do_26_rocniku = Hodnoceni.objects.filter(cislo_body__rocnik__rocnik__lte=26,reseni__in=self.reseni_set.all())
# Prostě titul podle aktuálních bodů novejsi_body = body_z_hodnoceni(
logicke_body = body 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):

Loading…
Cancel
Save