|
@ -115,6 +115,71 @@ class Hodnoceni(bm.SeminarModelBase): |
|
|
|
|
|
|
|
|
feedback = models.TextField('zpětná vazba', blank=True, default='', help_text='Zpětná vazba řešiteli (plain text)') |
|
|
feedback = models.TextField('zpětná vazba', blank=True, default='', help_text='Zpětná vazba řešiteli (plain text)') |
|
|
|
|
|
|
|
|
|
|
|
# TODO najít správné místo |
|
|
|
|
|
@staticmethod |
|
|
|
|
|
def vzorecek_na_prepocet(body, resitelu): |
|
|
|
|
|
return body * 3 / (resitelu + 2) |
|
|
|
|
|
|
|
|
|
|
|
# TODO najít správné místo |
|
|
|
|
|
@staticmethod |
|
|
|
|
|
def inverze_vzorecku_na_prepocet(body, resitelu): |
|
|
|
|
|
return body * (resitelu + 2) / 3 |
|
|
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
|
def body_celkem(self): |
|
|
|
|
|
# FIXME řeším jen prvního řešitele. |
|
|
|
|
|
return Hodnoceni.objects.filter(problem=self.problem, reseni__resitele=self.reseni.resitele.first(), body__isnull=False).aggregate(Sum("body"))["body__sum"] |
|
|
|
|
|
|
|
|
|
|
|
@body_celkem.setter |
|
|
|
|
|
def body_celkem(self, value): |
|
|
|
|
|
if value is None: |
|
|
|
|
|
self.body = None |
|
|
|
|
|
else: |
|
|
|
|
|
if self.body is None: |
|
|
|
|
|
self.body = 0 |
|
|
|
|
|
if self.body_celkem is None: |
|
|
|
|
|
self.body += value |
|
|
|
|
|
else: |
|
|
|
|
|
self.body += value - self.body_celkem |
|
|
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
|
def body_neprepocitane(self): |
|
|
|
|
|
if self.body is None: |
|
|
|
|
|
return None |
|
|
|
|
|
return self.inverze_vzorecku_na_prepocet(self.body, self.reseni.resitele.count()) |
|
|
|
|
|
|
|
|
|
|
|
@body_neprepocitane.setter |
|
|
|
|
|
def body_neprepocitane(self, value): |
|
|
|
|
|
if value is None: |
|
|
|
|
|
self.body = None |
|
|
|
|
|
else: |
|
|
|
|
|
self.body = self.vzorecek_na_prepocet(value, self.reseni.resitele.count()) |
|
|
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
|
def body_neprepocitane_celkem(self): |
|
|
|
|
|
if self.body_celkem is None: |
|
|
|
|
|
return None |
|
|
|
|
|
return self.inverze_vzorecku_na_prepocet(self.body_celkem, self.reseni.resitele.count()) |
|
|
|
|
|
|
|
|
|
|
|
@body_neprepocitane_celkem.setter |
|
|
|
|
|
def body_neprepocitane_celkem(self, value): |
|
|
|
|
|
if value is None: |
|
|
|
|
|
self.body = None |
|
|
|
|
|
else: |
|
|
|
|
|
self.body_celkem = self.vzorecek_na_prepocet(value, self.reseni.resitele.count()) |
|
|
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
|
def body_max(self): |
|
|
|
|
|
if not isinstance(Hodnoceni.objects.first().problem, am.Uloha): |
|
|
|
|
|
return None |
|
|
|
|
|
return self.problem.uloha.max_body |
|
|
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
|
def body_neprepocitane_max(self): |
|
|
|
|
|
if self.body_max is None: |
|
|
|
|
|
return None |
|
|
|
|
|
return self.inverze_vzorecku_na_prepocet(self.body_max, self.reseni.resitele.count()) |
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
def __str__(self): |
|
|
return "{}, {}, {}".format(self.problem, self.reseni, self.body) |
|
|
return "{}, {}, {}".format(self.problem, self.reseni, self.body) |
|
|
|
|
|
|
|
|