models.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from django.db import models
  2. from django.core.validators import MaxValueValidator
  3. from django.utils import timezone
  4. from adhesions.models import Adherent
  5. from banking.models import Payment
  6. class IPResource(models.Model):
  7. ip = models.GenericIPAddressField(verbose_name='IP')
  8. mask = models.PositiveIntegerField(validators=[MaxValueValidator(128)],
  9. default=0, verbose_name='Masque')
  10. @property
  11. def in_use(self):
  12. if Service.objects.filter(ip_resources=self, start__lte=timezone.now(),
  13. end__isnull=True).exists():
  14. return True
  15. else:
  16. return False
  17. class Meta:
  18. verbose_name = 'Ressource IP'
  19. verbose_name_plural = 'Ressources IP'
  20. def __str__(self):
  21. r = str(self.ip)
  22. if self.mask:
  23. r += '/%d' % self.mask
  24. return r
  25. class ServiceType(models.Model):
  26. name = models.CharField(max_length=64)
  27. class Meta:
  28. verbose_name = 'Type de service'
  29. verbose_name_plural = 'Types de service'
  30. def __str__(self):
  31. return self.name
  32. class Service(models.Model):
  33. adherent = models.ForeignKey(Adherent, verbose_name='Adhérent', null=True, blank=True)
  34. service_type = models.ForeignKey(ServiceType, related_name='services',
  35. verbose_name='Type de service')
  36. notes = models.TextField(blank=True, default='')
  37. contribution = models.ForeignKey(Payment, null=True, blank=True,
  38. verbose_name='Cotisation')
  39. ip_resources = models.ManyToManyField(IPResource, blank=True,
  40. verbose_name='Ressources IP')
  41. start = models.DateTimeField(verbose_name='Début du service')
  42. end = models.DateTimeField(null=True, blank=True, verbose_name='Fin du service')
  43. @property
  44. def status(self):
  45. if self.end:
  46. return 'Terminé le %s' % self.end
  47. else:
  48. return 'En cours'
  49. def __str__(self):
  50. return str(self.service_type) + ' ' + str(self.adherent)