Browse Source

suppression doublon de services

Élie Bouttier 7 years ago
parent
commit
72a29cafab
2 changed files with 13 additions and 2 deletions
  1. 2 2
      adhesions/admin.py
  2. 11 0
      services/models.py

+ 2 - 2
adhesions/admin.py

@@ -60,14 +60,14 @@ class ActiveServiceInline(ServiceInline):
     verbose_name_plural = 'Services actifs'
 
     def get_queryset(self, request):
-        return super().get_queryset(request).filter(get_active_filter('allocation'))
+        return super().get_queryset(request).filter(active=True)
 
 
 class InactiveServiceInline(ServiceInline):
     verbose_name_plural = 'Anciens services'
 
     def get_queryset(self, request):
-        return super().get_queryset(request).exclude(get_active_filter('allocation'))
+        return super().get_queryset(request).filter(active=False)
 
 
 ### Filters

+ 11 - 0
services/models.py

@@ -75,6 +75,15 @@ class ActiveAllocationManager(models.Manager):
         return qs
 
 
+class ActiveServiceManager(models.Manager):
+        def get_queryset(self):
+            qs = super().get_queryset()
+            qs = qs.annotate(
+                    active=models.Exists(
+                            ServiceAllocation.objects.filter(Q(service=models.OuterRef('pk')) & get_active_filter())
+                    )
+            )
+            return qs
 
 
 class IPResource(models.Model):
@@ -142,6 +151,8 @@ class Service(models.Model):
 
     contribution = models.OneToOneField(RecurringPayment, on_delete=models.CASCADE)
 
+    objects = ActiveServiceManager()
+
     def save(self, *args, **kwargs):
         if not hasattr(self, 'contribution'):
             self.contribution = RecurringPayment.objects.create()