12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from django.db import models
- from django.contrib.auth.models import User
- from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
- from django.contrib.contenttypes.models import ContentType
- from banking.models import Payment
- 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,
- null=True, blank=True, related_name='adherent',
- verbose_name='Cotisation')
- class Meta:
- verbose_name = 'adhérent'
- unique_together = ("adherent_type", "adherent_id")
- @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)
- class AdhesionMixin:
- @property
- def adhesion(self):
- try:
- return self.adhesions.get()
- except Adherent.DoesNotExist:
- return None
- class Profile(AdhesionMixin, 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')
- adhesions = GenericRelation(Adherent, content_type_field='adherent_type',
- object_id_field='adherent_id', related_query_name='users')
- class Meta:
- verbose_name = 'profil'
- def __str__(self):
- return 'Profil de %s' % self.user
- class Corporation(AdhesionMixin, 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')
- adhesions = GenericRelation(Adherent,
- content_type_field='adherent_type',
- object_id_field='adherent_id',
- related_query_name='corporations')
- class Meta:
- verbose_name = 'personne morale'
- verbose_name_plural = 'personnes morales'
- def __str__(self):
- return self.social_reason
|