Ultron/people/models.py

85 lines
2.5 KiB
Python

from django.db import models
from datetime import date
import pendulum
from tools.models import Markdownizable
from location.models import Club
class Gymnast(Markdownizable):
"""Représente un gymnaste.
Un gymnaste peut être actif ou inactif.
"""
class Meta:
verbose_name = "Gymnast"
verbose_name_plural = "Gymnasts"
GENDER_CHOICES = ((0, "Male"), (1, "Female"))
last_name = models.CharField(max_length=40, null=False, blank=False)
first_name = models.CharField(max_length=25, null=False, blank=False)
birthdate = models.DateField(verbose_name="Date de naissance")
gender = models.PositiveSmallIntegerField(
choices=GENDER_CHOICES, verbose_name="Sexe"
)
is_active = models.BooleanField(default=1, verbose_name="Active")
club = models.ForeignKey(
Club, null=True, on_delete=models.SET_NULL, related_name="gymnast"
)
trainings_by_week = models.PositiveSmallIntegerField(verbose_name="# Training by week")
hours_by_week = models.PositiveSmallIntegerField(verbose_name="# Hours by week")
def __str__(self):
return u"%s, %s" % (self.last_name, self.first_name)
@property
def next_birthday_in_days(self):
now = pendulum.now()
return self.next_birthday.diff(now).in_days()
@property
def age(self):
""" Renvoie l'âge d'un gymnaste. """
today = date.today()
return (
today.year
- self.birthdate.year
- ((today.month, today.day) < (self.birthdate.month, self.birthdate.day))
)
@property
def next_age(self):
""" Renvoie l'âge prochain du gymnaste. """
return (self.age) + 1
class Accident(Markdownizable):
"""La classe `Accident` permet d'indiquer qu'un gymnaste est tombé durant un saut.
"""
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,
)
# educative = models.ForeignKey(
# "objective.Skill",
# verbose_name="Skill",
# related_name="accident",
# on_delete=models.CASCADE,
# )
date = models.DateField(verbose_name="Date")
indisponibility = models.PositiveIntegerField(null=False, blank=False)
def __str__(self):
return "%s(%s)" % (
self.gymnast,
self.date,
)