Přepsány tituly
This commit is contained in:
parent
188ee08723
commit
80de63ab73
1 changed files with 82 additions and 17 deletions
|
@ -309,25 +309,90 @@ class Resitel(SeminarModelBase):
|
||||||
return sum(h.body for h in list(vsechna_hodnoceni))
|
return sum(h.body for h in list(vsechna_hodnoceni))
|
||||||
|
|
||||||
|
|
||||||
def get_titul(self, celkove_body=None):
|
def get_titul(self, body=None):
|
||||||
"Vrati titul"
|
"Vrati titul jako řetězec."
|
||||||
if celkove_body is None:
|
|
||||||
celkove_body = self.vsechny_body()
|
# Nejprve si zadefinujeme titul
|
||||||
|
from enum import Enum
|
||||||
|
from functools import total_ordering
|
||||||
|
@total_ordering
|
||||||
|
class Titul(Enum):
|
||||||
|
""" Třída reprezentující možné tituly. Hodnoty jsou dvojice (dolní hranice, stringifikace). """
|
||||||
|
nic = (0, '')
|
||||||
|
bc = (20, 'Bc.')
|
||||||
|
mgr = (50, 'Mgr.')
|
||||||
|
dr = (100, 'Dr.')
|
||||||
|
doc = (200, 'Doc.')
|
||||||
|
prof = (500, 'Prof.')
|
||||||
|
akad = (1000, 'Akad.')
|
||||||
|
|
||||||
|
def __lt__(self, other):
|
||||||
|
return True if self.value[0] < other.value[0] else False
|
||||||
|
def __eq__(self, other): # Měla by být implicitní, ale klidně explicitně.
|
||||||
|
return True if self.value[0] == other.value[0] else False
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.value[1]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def z_bodu(cls, body):
|
||||||
|
aktualni = cls.nic
|
||||||
|
# TODO: ověřit, že to funguje
|
||||||
|
for titul in cls: # Kdyžtak použít __members__.items()
|
||||||
|
if titul.value[0] <= body:
|
||||||
|
aktualni = titul
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
return aktualni
|
||||||
|
|
||||||
|
# Titul pro 26. ročník
|
||||||
|
stary_titul = 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)
|
||||||
|
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))
|
||||||
|
|
||||||
if celkove_body < 10:
|
|
||||||
return ''
|
|
||||||
elif celkove_body < 20:
|
|
||||||
return 'Bc.'
|
|
||||||
elif celkove_body < 50:
|
|
||||||
return 'Mgr.'
|
|
||||||
elif celkove_body < 100:
|
|
||||||
return 'Dr.'
|
|
||||||
elif celkove_body < 200:
|
|
||||||
return 'Doc.'
|
|
||||||
elif celkove_body < 500:
|
|
||||||
return 'Prof.'
|
|
||||||
else:
|
else:
|
||||||
return 'Akad.'
|
# Prostě titul podle aktuálních bodů
|
||||||
|
logicke_body = body
|
||||||
|
|
||||||
|
titul = Titul.z_bodu(logicke_body)
|
||||||
|
if stary_titul is None:
|
||||||
|
return str(titul)
|
||||||
|
return str(max(titul, stary_titul))
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.osoba.plne_jmeno()
|
return self.osoba.plne_jmeno()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue