models.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # -*- coding: utf-8 -*-
  2. import datetime
  3. from django.db import models
  4. from django.db.models import Q
  5. class Service(models.Model):
  6. name = models.CharField(max_length=255, blank=False, null=False,
  7. verbose_name='Nom du service')
  8. def __unicode__(self):
  9. return self.name
  10. class Offer(models.Model):
  11. name = models.CharField(max_length=255, blank=False, null=False,
  12. verbose_name='Nom de l\'offre')
  13. billing_period = models.IntegerField(blank=False, null=False, default=1,
  14. verbose_name='Période de facturation',
  15. help_text='en mois')
  16. period_fees = models.DecimalField(max_digits=5, decimal_places=2,
  17. blank=False, null=False,
  18. verbose_name='Montant par période de '
  19. 'facturation',
  20. help_text='en €')
  21. initial_fees = models.DecimalField(max_digits=5, decimal_places=2,
  22. blank=False, null=False,
  23. verbose_name='Frais de mise en service',
  24. help_text='en €')
  25. service = models.ForeignKey('Service')
  26. def __unicode__(self):
  27. return u'%s - %d€ / %im [%s]' % (self.name, self.period_fees,
  28. self.billing_period, self.service)
  29. class Meta:
  30. verbose_name = 'offre'
  31. class OfferSubscription(models.Model):
  32. subscription_date = models.DateField(
  33. null=False,
  34. blank=False,
  35. default=datetime.date.today,
  36. verbose_name='Date de souscription à l\'offre')
  37. resign_date = models.DateField(
  38. null=True,
  39. blank=True,
  40. verbose_name='Date de résiliation')
  41. commitment = models.IntegerField(blank=False, null=False,
  42. verbose_name='Période d\'engagement',
  43. help_text = 'en mois',
  44. default=0)
  45. member = models.ForeignKey('members.Member', verbose_name='Membre')
  46. offer = models.ForeignKey('Offer', verbose_name='Offre')
  47. def __unicode__(self):
  48. return u'%s - %s - %s' % (self.member, self.offer.name,
  49. self.subscription_date)
  50. @staticmethod
  51. def get_member_offer_subscriptions(member, date=datetime.date.today()):
  52. return OfferSubscription.objects.filter(
  53. Q(member__exact=member.pk),
  54. Q(subscription_date__lte=date),
  55. Q(resign_date__isnull=True) | Q(resign_date__gte=date))
  56. class Meta:
  57. verbose_name = 'abonnement'