Browse Source

les IP réservées ne peuvent être allouées

Élie Bouttier 8 years ago
parent
commit
5ffb99a246
2 changed files with 10 additions and 8 deletions
  1. 7 7
      services/admin.py
  2. 3 1
      services/models.py

+ 7 - 7
services/admin.py

@@ -26,9 +26,9 @@ class ResourceInUseFilter(admin.SimpleListFilter):
         now = timezone.now()
         active_filter = get_active_filter('allocation')
         if self.value() == '0': # non disponible
-            return queryset.filter(active_filter)
+            return queryset.filter(active_filter | models.Q(reserved=True))
         if self.value() == '1': # disponible
-            return queryset.exclude(active_filter)
+            return queryset.exclude(reserved=True).exclude(active_filter)
 
 
 class AllocationStatusFilter(admin.SimpleListFilter):
@@ -118,7 +118,7 @@ class ServiceAdmin(admin.ModelAdmin):
 
 
 class IPResourceAdmin(admin.ModelAdmin):
-    list_display = ('__str__', 'in_use_display')
+    list_display = ('__str__', 'available_display')
     list_filter = (
         ResourceInUseFilter,
         ('prefixes', admin.RelatedOnlyFieldListFilter),
@@ -128,10 +128,10 @@ class IPResourceAdmin(admin.ModelAdmin):
     search_fields = ('ip',)
     inlines = (AllocationInline,)
 
-    def in_use_display(self, obj):
-        return not obj.in_use
-    in_use_display.short_description = 'Disponible'
-    in_use_display.boolean = True
+    def available_display(self, obj):
+        return not obj.reserved and not obj.in_use
+    available_display.short_description = 'Disponible'
+    available_display.boolean = True
 
     def get_actions(self, request):
         actions = super().get_actions(request)

+ 3 - 1
services/models.py

@@ -125,8 +125,10 @@ class ResourceAllocation(models.Model):
         if self.end and self.start > self.end:
             raise ValidationError("La date de début de l’allocation doit être antérieur "
                                   "à la date de fin de l’allocation.")
-        # Vérification de l’abscence de chevauchement de la période d’allocation
         if self.resource_id:
+            if self.resource.reserved:
+                raise ValidationError("L’IP sélectionnée est réservée")
+            # Vérification de l’abscence de chevauchement de la période d’allocation
             allocations = ResourceAllocation.objects.filter(resource__pk=self.resource.pk)
             if is_overlapping(self, allocations):
                 raise ValidationError("La période d’allocation de cette ressource chevauche "