from django.db import models from datetime import date from django.db.models.deletion import CASCADE from jumpers.models import Jumper class Chrono(models.Model): """ Représente les chronos (de chandelles ou de série) enregistrés pour un(e) gymnaste. """ TYPE_CHOICES = ((0, "10 |"), (1, "Routine")) SCORE_TYPE_CHOICE = ((0, "Chrono"), (1, "ToF")) class Meta: verbose_name = "Chrono" verbose_name_plural = "Chronos" ordering = ["date", "jumper"] # unique_together = ("jumper", "skill") jumper = models.ForeignKey( Jumper, verbose_name="Jumper", related_name="chronos", on_delete=models.CASCADE, ) type = models.PositiveSmallIntegerField( choices=TYPE_CHOICES, verbose_name="Chrono type" ) score_type = models.PositiveSmallIntegerField( choices=SCORE_TYPE_CHOICE, verbose_name="Score type" ) score = models.DecimalField(max_digits=5, decimal_places=3) date = models.DateField(default=date.today, verbose_name="Date") def __str__(self): return "%s - %s (%s - %s)" % ( self.jumper, self.score, self.date, self.type, ) @property def tof(self): """ Renvoie le time of flight d'un gymnaste. """ if self.score_type == 1: return self.score else: tof = round(( self.score * 13 ) / 15, 3) tof = ( tof * 1000 ) - (( tof * 1000 ) % 5) return tof / 1000 class Skill(models.Model): """ Représente la ligne d'apprentissage. """ class Meta: verbose_name = "Skill" verbose_name_plural = 'Skills' ordering = ['short_label'] short_label = models.CharField(verbose_name="Short label", max_length=50, null=False, blank=False) long_label = models.CharField(verbose_name="Long label", max_length=255, null=False, blank=False) difficulty = models.DecimalField( max_digits=3, decimal_places=1, verbose_name="Difficulty" ) level = models.PositiveSmallIntegerField(default=0) rank = models.PositiveSmallIntegerField(default=0) numeric_notation = models.CharField(max_length=25) ancestor = models.ManyToManyField("self", null=True, blank=True) def __str__(self): return "%s (%s) - %s" % ( self.short_label, self.numeric_notation, self.difficulty ) 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 = ('jumper', 'skill', 'date') jumper = models.ForeignKey( Jumper, verbose_name='Jumper', related_name='can_do_skill', on_delete=models.CASCADE, ) skill = models.ForeignKey( Skill, verbose_name='Skill', related_name='done_by_jumpers', on_delete=models.CASCADE, ) cando = models.PositiveSmallIntegerField( choices=TYPE_CHOICES, verbose_name="Can do type" ) date = models.DateField(default=date.today, verbose_name="Date")