109 lines
3.6 KiB
Python
109 lines
3.6 KiB
Python
from datetime import date
|
|
from typing import Optional
|
|
|
|
from dateutil.relativedelta import relativedelta
|
|
from django.contrib.auth.models import User
|
|
from django.core.validators import MinValueValidator
|
|
from django.db import models
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
class Profile(models.Model):
|
|
user = models.OneToOneField(
|
|
User,
|
|
on_delete=models.CASCADE,
|
|
verbose_name=_("utilisateur"),
|
|
related_name="profile",
|
|
)
|
|
full_name = models.CharField(max_length=1023, verbose_name=_("nom"))
|
|
nickname = models.CharField(blank=True, max_length=1023, verbose_name=_("surnom"))
|
|
pronoun = models.CharField(
|
|
blank=True, max_length=1023, verbose_name=_("pronom(s) utilisé(s)")
|
|
)
|
|
picture = models.ImageField(
|
|
blank=True, upload_to="picture", verbose_name=_("photo")
|
|
)
|
|
department = models.ManyToManyField("Department", verbose_name=_("département"))
|
|
promotion = models.IntegerField(
|
|
validators=[MinValueValidator(1980)], verbose_name=_("promotion")
|
|
)
|
|
birth_date = models.DateField(
|
|
blank=True, null=True, verbose_name=_("date de naissance")
|
|
)
|
|
past_studies = models.TextField(blank=True, verbose_name=_("études passées"))
|
|
experiences = models.TextField(blank=True, verbose_name=_("expériences"))
|
|
thurne = models.CharField(blank=True, max_length=100, verbose_name=_("thurne"))
|
|
text_field = models.TextField(blank=True, verbose_name=_("champ libre"))
|
|
printing = models.BooleanField(
|
|
default=False, verbose_name=_("apparaître sur l'annuaire papier ?")
|
|
)
|
|
keep_me = models.BooleanField(
|
|
default=False, verbose_name=_("conserver la fiche annuaire ?")
|
|
)
|
|
|
|
def __str__(self) -> str:
|
|
return self.full_name
|
|
|
|
@property
|
|
def age(self) -> Optional[int]:
|
|
if self.birth_date is not None:
|
|
return relativedelta(date.today(), self.birth_date).year
|
|
|
|
def birthday(self) -> str:
|
|
if self.birth_date is None:
|
|
return "Unknown"
|
|
|
|
return self.birth_date.strftime("%d%m")
|
|
|
|
|
|
class Department(models.Model):
|
|
name = models.CharField(
|
|
max_length=255, verbose_name=_("nom du département"), unique=True
|
|
)
|
|
|
|
def __str__(self) -> str:
|
|
return self.name
|
|
|
|
|
|
class Phone(models.Model):
|
|
profile = models.ForeignKey(
|
|
Profile, on_delete=models.CASCADE, verbose_name=_("profil")
|
|
)
|
|
name = models.CharField(max_length=255, verbose_name=_("type"))
|
|
number = models.CharField(max_length=1023, verbose_name=_("numéro"))
|
|
|
|
def __str__(self) -> str:
|
|
return "{} : {}".format(self.name, self.number)
|
|
|
|
|
|
class Social(models.Model):
|
|
profile = models.ForeignKey(
|
|
Profile, on_delete=models.CASCADE, verbose_name=_("profil")
|
|
)
|
|
name = models.CharField(max_length=255, verbose_name=_("type"))
|
|
content = models.CharField(max_length=1023, verbose_name=_("contenu"))
|
|
|
|
def __str__(self):
|
|
return "{} : {}".format(self.name, self.content)
|
|
|
|
|
|
class Mail(models.Model):
|
|
profile = models.ForeignKey(
|
|
Profile, on_delete=models.CASCADE, verbose_name=_("profil")
|
|
)
|
|
name = models.CharField(max_length=255, verbose_name=_("type"))
|
|
mail = models.CharField(max_length=1023, verbose_name=_("adresse mail"))
|
|
|
|
def __str__(self) -> str:
|
|
return "{} : {}".format(self.name, self.mail)
|
|
|
|
|
|
class Address(models.Model):
|
|
profile = models.ForeignKey(
|
|
Profile, on_delete=models.CASCADE, verbose_name=_("profil")
|
|
)
|
|
name = models.CharField(max_length=255, verbose_name=_("type"))
|
|
content = models.TextField(verbose_name=_("adresse"))
|
|
|
|
def __str__(self) -> str:
|
|
return "{} : {}".format(self.name, self.content)
|