Ultron/followup/models.py

168 lines
5.3 KiB
Python

from django.db import models
from datetime import date
from django.db.models.deletion import CASCADE
from tools.models import Markdownizable
from people.models import Gymnast
from planning.models import Event
from objective.models import Skill
class Chrono(models.Model):
"""
Représente les chronos (de chandelles ou de série) enregistrés pour un(e) gymnaste.
"""
ROUTINETYPE_CHOICE = (
(0, "10 |"),
(1, "L1"),
(2, "L2"),
(3, "L3"),
(4, "L4"),
(99, "Other"),
)
SCORE_TYPE_CHOICE = ((0, "Chrono"), (1, "ToF"))
class Meta:
verbose_name = "Chrono"
verbose_name_plural = "Chronos"
ordering = ["date", "gymnast"]
# unique_together = ("gymnast", "skill")
gymnast = models.ForeignKey(
Gymnast,
verbose_name="gymnast",
related_name="chronos",
on_delete=models.CASCADE,
)
type = models.PositiveSmallIntegerField(
choices=ROUTINETYPE_CHOICE, verbose_name="Routine type"
)
score_type = models.PositiveSmallIntegerField(
choices=SCORE_TYPE_CHOICE, verbose_name="Score type"
)
score = models.DecimalField(max_digits=5, decimal_places=3)
tof = models.DecimalField(max_digits=5, decimal_places=3, blank=True, null=True)
date = models.DateField(default=date.today, verbose_name="Date")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return "%s - %s (%s - %s)" % (
self.gymnast,
self.score,
self.date,
self.type,
)
class Accident(Markdownizable):
"""
La classe `Accident` permet d'indiquer qu'un gymnaste a eu un accident, en liaison avec un
skill ou non.
"""
class Meta:
verbose_name = "Accident"
verbose_name_plural = "Accidents"
# ordering = ["date", "gymnast"]
gymnast = models.ForeignKey(
Gymnast,
verbose_name="Gymnast",
related_name="accident",
on_delete=models.CASCADE,
)
skill = models.ForeignKey(
"objective.Skill",
verbose_name="Skill",
related_name="accident",
on_delete=models.CASCADE,
blank=True,
null=True,
)
date = models.DateField(verbose_name="Date")
nb_week_off = models.SmallIntegerField(blank=True, null=True, verbose_name="# week off")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return "%s(%s)" % (
self.gymnast,
self.date,
)
class LearnedSkill(models.Model):
"""
Représente la capacité d'un gymnaste à savori faire un skill de la ligne d'apprentissage.
"""
TYPE_CHOICES = ((0, "No"), (1, "With help"), (2, "Without help"), (3, "Chained"))
class Meta:
verbose_name = 'Learned Skill'
verbose_name_plural = 'Learned Skills'
unique_together = ('gymnast', 'skill', 'date')
gymnast = models.ForeignKey(
Gymnast,
verbose_name='gymnast',
related_name='can_do_skill',
on_delete=models.CASCADE,
)
skill = models.ForeignKey(
Skill,
verbose_name='Skill',
related_name='done_by_gymnasts',
on_delete=models.CASCADE,
)
cando = models.PositiveSmallIntegerField(
choices=TYPE_CHOICES, verbose_name="Can do type"
)
date = models.DateField(default=date.today, verbose_name="Date")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Point(models.Model):
"""
Représente les points obtenus lors d'une compétition.
"""
ROUTINETYPE_CHOICE = ((0, "Routine 1"), (1, "Routine 2"), (2, "Final"))
gymnast = models.ForeignKey(Gymnast, on_delete=models.CASCADE, default=None, related_name="points")
event = models.ForeignKey(Event, on_delete=models.CASCADE, default=None)
routine_type = models.PositiveSmallIntegerField(choices=ROUTINETYPE_CHOICE)
point_execution = models.DecimalField(max_digits=5, decimal_places=3)
point_difficulty = models.DecimalField(max_digits=3, decimal_places=1)
point_time_of_flight = models.DecimalField(max_digits=5, decimal_places=3)
point_horizontal_displacement = models.DecimalField(max_digits=4, decimal_places=3)
penality = models.DecimalField(max_digits=3, decimal_places=1)
total = models.DecimalField(max_digits=6, decimal_places=3)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return "%s - %s" % (
self.gymnast,
self.total,
)
class MindState(Markdownizable):
"""
Représente l'état d'esprit psychologique d'un gymnaste
"""
gymnast = models.ForeignKey(Gymnast, on_delete=models.CASCADE, default=None, related_name="mindstate")
date = models.DateField(default=date.today, verbose_name="Date")
event = models.ForeignKey(Event, on_delete=models.CASCADE, default=None, blank=True, null=True, related_name="mindstate")
score = models.PositiveSmallIntegerField(verbose_name="Score")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return '%s - %s : %s' % (self.gymnast, self.date, self.score)