Select Git revision
-
Bidot-Naude Thomas authoredBidot-Naude Thomas authored
models.py 7.84 KiB
"""Profiles models."""
from django.db import models
from django.shortcuts import reverse
from dry_rest_permissions.generics import authenticated_users
from .utils import get_promotion_range
from datetime import datetime
from .notifications import SendDocs
import telegram
from django.conf import settings
from django.template.loader import render_to_string
class ProfileMixin:
"""Mixin with common functionnality for profiles."""
detail_view_name = None
def __str__(self):
"""Represent with full name or email."""
full_name = self.user.get_full_name()
if full_name:
return full_name
return self.user.email
def get_absolute_url(self):
return reverse(self.detail_view_name, args=[self.pk])
@staticmethod
@authenticated_users
def has_read_permission(request):
return True
@authenticated_users
def has_object_read_permission(self, request):
return True
class Student(ProfileMixin, models.Model):
"""Represents a student profile."""
detail_view_name = 'api:student-detail'
updated_date = models.DateTimeField(auto_now=True)
user = models.OneToOneField(
'users.User',
on_delete=models.CASCADE,
null=True,
verbose_name='utilisateur',
related_name='student')
registration = models.OneToOneField(
'register.Registration',
on_delete=models.SET_NULL,
null=True,
blank=True,
verbose_name="dossier d'inscription",
related_name='student',
)
classType = models.CharField(max_length=50,
null=True,
blank=True,
verbose_name="général/techno",
)
nationality = models.CharField(max_length=50,
null=True,
blank=True,
verbose_name="nationalité",
)
specialTeaching = models.CharField(max_length=50,
null=True,
blank=True,
verbose_name="enseignement de spécialité",
)
zipCode = models.CharField(max_length=10,
null=True,
blank=True,
verbose_name="code postal",
)
gender = models.CharField(max_length=20,
null=True,
blank=True,
verbose_name="genre",
)
addressNumber = models.IntegerField(
null=True,
blank=True,
verbose_name="numéro de rue"
)
street = models.CharField(max_length=70,
null=True,
blank=True,
verbose_name="nom de rue"
)
city = models.CharField(max_length=50,
null=True,
blank=True,
verbose_name="nom de ville"
)
personalPhone = models.CharField(max_length=12,
null=True,
blank=True,
verbose_name="numéro de téléphone personnel"
)
parentsPhone = models.CharField(max_length=12,
null=True,
blank=True,
verbose_name="numéro de téléphone parental"
)
parentsEmail = models.EmailField(max_length=70,
null=True,
blank=True,
verbose_name="adresse mail parentale"
)
school = models.CharField(max_length=70,
null=True,
blank=True,
verbose_name="établissement"
)
grade = models.CharField(max_length=20,
null=True,
blank=True,
verbose_name="niveau de la classe"
)
scholarship = models.CharField(max_length=50,
null=True,
blank=True,
verbose_name="boursier"
)
fatherActivity = models.CharField(max_length=70,
null=True,
blank=True,
verbose_name="métier du père"
)
motherActivity = models.CharField(max_length=70,
null=True,
blank=True,
verbose_name="métier de la mère"
)
parentsStatus = models.CharField(max_length=70,
null=True,
blank=True,
verbose_name="statut des parents"
)
dependantsNumber = models.IntegerField(
null=True,
blank=True,
verbose_name="nombre de personnes à charge"
)
year = models.CharField(max_length=10,
null=True,
blank=True,
verbose_name="année"
)
@staticmethod
def has_write_permission(request):
return True
def has_object_write_permission(self, request):
return request.user == self.user
def save(self, *args, **kwargs):
"""Updates the year field based on the last modified date"""
if self.city != None: # Ne mettre à jour que quand les données personnelles sont remplies
date_now = datetime.now()
if date_now.month >= 9:
self.year = f"{date_now.year}/{date_now.year+1}"
else:
self.year = f"{date_now.year-1}/{date_now.year}"
# send email with link to registration docs
SendDocs(user=self.user).send()
# send a telegram message to oserSECGEN
telegram_settings = settings.TELEGRAM
if telegram_settings['bot_token'] != None:
message_telegram = "Un tutoré a renseigné ses données personnelles, il attend ta validation !"
bot = telegram.Bot(token=telegram_settings['bot_token'])
bot.send_message(
chat_id="@%s" % telegram_settings['channel_name'], text=message_telegram, parse_mode=telegram.ParseMode.HTML)
return super(Student, self).save(*args, **kwargs)
class Meta: # noqa
verbose_name = 'lycéen'
class Tutor(ProfileMixin, models.Model):
"""Represents a tutor profile."""
detail_view_name = 'api:tutor-detail'
user = models.OneToOneField(
'users.User',
on_delete=models.CASCADE,
null=True,
verbose_name='utilisateur',
related_name='tutor')
address = models.OneToOneField(
'core.Address',
on_delete=models.SET_NULL,
null=True,
verbose_name='adresse',
related_name='tutor')
PROMOTION_CHOICES = tuple(
(year, str(year)) for year in get_promotion_range()
)
promotion = models.IntegerField(choices=PROMOTION_CHOICES,
default=PROMOTION_CHOICES[0][0])
class Meta: # noqa
verbose_name = 'tuteur'