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)