from django.db import models from django.core.validators import MaxValueValidator from django.utils import timezone from adhesions.models import Adherent from banking.models import Payment class IPResource(models.Model): ip = models.GenericIPAddressField() mask = models.PositiveIntegerField(validators=[MaxValueValidator(128)], default=0) @property def in_use(self): if Service.objects.filter(ip_resources=self, start__lte=timezone.now(), end__isnull=True).exists(): return True else: return False class Meta: verbose_name = 'Ressource IP' verbose_name_plural = 'Ressources IP' def __str__(self): r = str(self.ip) if self.mask: r += '/%d' % self.mask return r class ServiceType(models.Model): name = models.CharField(max_length=64) class Meta: verbose_name = 'Type de service' verbose_name_plural = 'Types de service' def __str__(self): return self.name class Service(models.Model): adherent = models.ForeignKey(Adherent, verbose_name='Adhérent') service_type = models.ForeignKey(ServiceType, verbose_name='Type de service') notes = models.TextField(blank=True, default='') contribution = models.ForeignKey(Payment, null=True, blank=True) ip_resources = models.ManyToManyField(IPResource, verbose_name='Ressources IP') start = models.DateTimeField(verbose_name='Début du service') end = models.DateTimeField(null=True, blank=True, verbose_name='Fin du service') @property def status(self): if self.end: return 'Terminé le %s' % self.end else: return 'En cours' def __str__(self): return str(self.service_type) + ' ' + str(self.adherent)