models.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.db import models
  2. from django.contrib.auth.models import User
  3. from django.contrib.contenttypes.fields import GenericForeignKey
  4. from django.contrib.contenttypes.models import ContentType
  5. from banking.models import Payment
  6. class Profile(models.Model):
  7. user = models.OneToOneField(User, related_name='profile', verbose_name='Utilisateur')
  8. phone_number = models.CharField(max_length=16, blank=True, default='',
  9. verbose_name='Numéro de téléphone')
  10. address = models.TextField(blank=True, default='', verbose_name='Adresse')
  11. class Meta:
  12. verbose_name = 'profil'
  13. def __str__(self):
  14. return 'Profil de %s' % self.user
  15. class Corporation(models.Model):
  16. social_reason = models.CharField(max_length=256, verbose_name='Raison sociale')
  17. description = models.TextField(blank=True, default='')
  18. address = models.TextField(blank=True, default='', verbose_name='Adresse')
  19. members = models.ManyToManyField(User, blank=True, verbose_name='Membres')
  20. class Meta:
  21. verbose_name = 'personne morale'
  22. verbose_name_plural = 'personnes morales'
  23. def __str__(self):
  24. return self.social_reason
  25. class Adherent(models.Model):
  26. limit = models.Q(app_label='auth', model='user') | models.Q(app_label='adhesions', model='corporation')
  27. id = models.IntegerField(verbose_name='Numéro d’adhérent', primary_key=True)
  28. adherent_type = models.ForeignKey(ContentType, on_delete=models.CASCADE,
  29. limit_choices_to=limit, verbose_name='Type d’adhérent')
  30. adherent_id = models.PositiveIntegerField(verbose_name='ID')
  31. adherent = GenericForeignKey('adherent_type', 'adherent_id')
  32. contribution = models.ForeignKey(Payment, on_delete=models.CASCADE,
  33. related_name='adherent', null=True, blank=True)
  34. class Meta:
  35. verbose_name = 'adhérent'
  36. @property
  37. def type(self):
  38. if self.adherent_type.app_label == 'auth' and self.adherent_type.model == 'user':
  39. return 'Personne physique'
  40. else:
  41. return 'Personne morale'
  42. def __str__(self):
  43. return str(self.adherent)