plateforme-tfjm2/apps/member/models.py

220 lines
5.0 KiB
Python
Raw Normal View History

2020-04-29 02:06:02 +00:00
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import gettext_lazy as _
from polymorphic.models import PolymorphicModel
from tournament.models import Team, Tournament
class TFJMUser(AbstractUser):
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
email = models.EmailField(
unique=True,
verbose_name=_("email"),
)
team = models.ForeignKey(
Team,
null=True,
on_delete=models.SET_NULL,
related_name="users",
verbose_name=_("team"),
)
birth_date = models.DateField(
null=True,
default=None,
verbose_name=_("birth date"),
)
gender = models.CharField(
max_length=16,
null=True,
default=None,
choices=[
("male", _("Male")),
("female", _("Female")),
("non-binary", _("Non binary")),
],
2020-04-29 02:26:26 +00:00
verbose_name=_("address"),
2020-04-29 02:06:02 +00:00
)
address = models.CharField(
max_length=255,
null=True,
default=None,
verbose_name=_("address"),
)
postal_code = models.PositiveSmallIntegerField(
null=True,
default=None,
verbose_name=_("postal code"),
)
city = models.CharField(
max_length=255,
null=True,
default=None,
verbose_name=_("city"),
)
country = models.CharField(
max_length=255,
default="France",
null=True,
verbose_name=_("country"),
)
phone_number = models.CharField(
max_length=20,
null=True,
blank=True,
default=None,
verbose_name=_("phone number"),
)
school = models.CharField(
max_length=255,
null=True,
default=None,
verbose_name=_("school"),
)
student_class = models.CharField(
max_length=16,
choices=[
('seconde', _("Seconde or less")),
('première', _("Première")),
('terminale', _("Terminale")),
],
null=True,
default=None,
verbose_name="class",
)
responsible_name = models.CharField(
max_length=255,
null=True,
default=None,
verbose_name=_("responsible name"),
)
responsible_phone = models.CharField(
max_length=20,
null=True,
default=None,
verbose_name=_("responsible phone"),
)
responsible_email = models.EmailField(
null=True,
default=None,
verbose_name=_("responsible email"),
)
description = models.TextField(
null=True,
default=None,
verbose_name=_("description"),
)
role = models.CharField(
max_length=16,
choices=[
("admin", _("admin")),
("organizer", _("organizer")),
("encadrant", _("encadrant")),
("participant", _("participant")),
]
)
year = models.PositiveIntegerField(
verbose_name=_("year"),
)
class Meta:
verbose_name = _("user")
verbose_name_plural = _("users")
class AbstractDocument(PolymorphicModel):
file = models.FileField(
unique=True,
upload_to="files/",
verbose_name=_("file"),
)
team = models.ForeignKey(
Team,
on_delete=models.CASCADE,
related_name="documents",
verbose_name=_("team"),
)
tournament = models.ForeignKey(
Tournament,
on_delete=models.CASCADE,
related_name="documents",
verbose_name=_("tournament"),
)
type = models.CharField(
max_length=32,
choices=[
("parental_consent", _("Parental consent")),
("photo_consent", _("Photo consent")),
("sanitary_plug", _("Sanitary plug")),
("motivation_letter", _("Motivation letter")),
("scholarship", _("Scholarship")),
("solution", _("Solution")),
("synthesis", _("Synthesis")),
],
verbose_name=_("type"),
)
uploaded_at = models.DateTimeField(
auto_now_add=True,
verbose_name=_("uploaded at"),
)
class Meta:
verbose_name = _("abstract document")
verbose_name_plural = _("abstract documents")
class Document(AbstractDocument):
class Meta:
verbose_name = _("document")
verbose_name_plural = _("documents")
class Solution(Document):
problem = models.PositiveSmallIntegerField(
verbose_name=_("problem"),
)
def save(self, **kwargs):
self.type = "solution"
super().save(**kwargs)
class Meta:
verbose_name = _("solution")
verbose_name_plural = _("solutions")
class Synthesis(Document):
problem = models.PositiveSmallIntegerField(
verbose_name=_("problem"),
)
def save(self, **kwargs):
self.type = "synthesis"
super().save(**kwargs)
class Meta:
verbose_name = _("synthesis")
verbose_name_plural = _("syntheses")