models.py 2.5 KB

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