from django.db import models from django.contrib.auth.models import User from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from banking.models import Payment class Profile(models.Model): user = models.OneToOneField(User, related_name='profile', verbose_name='Utilisateur') phone_number = models.CharField(max_length=16, blank=True, default='', verbose_name='Numéro de téléphone') address = models.TextField(blank=True, default='', verbose_name='Adresse') class Meta: verbose_name = 'profil' def __str__(self): return 'Profil de %s' % self.user class Corporation(models.Model): social_reason = models.CharField(max_length=256, verbose_name='Raison sociale') description = models.TextField(blank=True, default='') address = models.TextField(blank=True, default='', verbose_name='Adresse') members = models.ManyToManyField(User, blank=True, verbose_name='Membres') class Meta: verbose_name = 'personne morale' verbose_name_plural = 'personnes morales' def __str__(self): return self.social_reason class Adherent(models.Model): limit = models.Q(app_label='auth', model='user') | models.Q(app_label='adhesions', model='corporation') id = models.IntegerField(verbose_name='Numéro d’adhérent', primary_key=True) adherent_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, limit_choices_to=limit, verbose_name='Type d’adhérent') adherent_id = models.PositiveIntegerField(verbose_name='ID') adherent = GenericForeignKey('adherent_type', 'adherent_id') contribution = models.ForeignKey(Payment, on_delete=models.CASCADE, related_name='adherent', null=True, blank=True) class Meta: verbose_name = 'adhérent' @property def type(self): if self.adherent_type.app_label == 'auth' and self.adherent_type.model == 'user': return 'Personne physique' else: return 'Personne morale' def __str__(self): return str(self.adherent)