Browse Source

permission de supprimer des adhésions

Élie Bouttier 7 years ago
parent
commit
831251fc3e
3 changed files with 34 additions and 4 deletions
  1. 21 1
      adhesions/admin.py
  2. 6 1
      adhesions/signals.py
  3. 7 2
      services/signals.py

+ 21 - 1
adhesions/admin.py

@@ -7,12 +7,16 @@ from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
 from django.http import HttpResponseRedirect
 from django.http import HttpResponseRedirect
 from django.utils.html import format_html, mark_safe
 from django.utils.html import format_html, mark_safe
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
+from django.utils import timezone
 
 
 from .forms import UserCreationForm
 from .forms import UserCreationForm
 from .models import User, Corporation, Adhesion
 from .models import User, Corporation, Adhesion
 from accounts.models import Profile
 from accounts.models import Profile
 from services.models import Service
 from services.models import Service
 from djadhere.utils import ActiveFilter
 from djadhere.utils import ActiveFilter
+from banking.models import PaymentUpdate
+
+from datetime import timedelta
 
 
 
 
 ### Inlines
 ### Inlines
@@ -239,7 +243,23 @@ class AdhesionAdmin(AdtSearchMixin, admin.ModelAdmin):
         return False
         return False
 
 
     def has_delete_permission(self, request, obj=None):
     def has_delete_permission(self, request, obj=None):
-        return False
+        if not obj:
+            return False
+        membership = obj.membership.current
+        one_year_ago = timezone.now() - timedelta(days=365)
+        # si l’adhérent a un cotisation qui n’est pas arrêté depuis plus d’un an
+        if membership and (membership.payment_method != PaymentUpdate.STOP or membership.start > one_year_ago):
+            return False
+        # si l’adhérent est référent pour une antenne
+        if obj.antenna_set.all():
+            return False
+        # si l’adherent a un service qui a une IP alloué depuis moins d’un an
+        if any(map(lambda s: any(map(lambda a: a.end is None or a.end > one_year_ago, s.allocations.all())), obj.services.all())):
+            return False
+        # si l’adhérent a un service qui a une contribution qui n’est pas arrêté depuis plus d’un an
+        if any(map(lambda s: s.contribution.current and (s.contribution.current.payment_method != PaymentUpdate.STOP or s.contribution.current.start > one_year_ago), obj.services.all())):
+            return False
+        return True
 
 
 
 
 admin.site.unregister(AuthUser)
 admin.site.unregister(AuthUser)

+ 6 - 1
adhesions/signals.py

@@ -1,5 +1,5 @@
 from django.dispatch import receiver
 from django.dispatch import receiver
-from django.db.models.signals import post_save
+from django.db.models.signals import post_save, post_delete
 
 
 from .models import User, Corporation, Adhesion
 from .models import User, Corporation, Adhesion
 
 
@@ -14,3 +14,8 @@ def create_user_adhesion(sender, instance, created, **kwargs):
 def create_corporation_adhesion(sender, instance, created, **kwargs):
 def create_corporation_adhesion(sender, instance, created, **kwargs):
     if created:
     if created:
         Adhesion.objects.create(corporation=instance)
         Adhesion.objects.create(corporation=instance)
+
+
+@receiver(post_delete, sender=Adhesion, dispatch_uid='delete_adhesion_membership')
+def delete_adhesion_membership(sender, instance, **kwargs):
+    instance.membership.delete()

+ 7 - 2
services/signals.py

@@ -1,7 +1,7 @@
 from django.dispatch import receiver
 from django.dispatch import receiver
-from django.db.models.signals import post_save
+from django.db.models.signals import post_save, post_delete
 
 
-from .models import IPPrefix, IPResource
+from .models import Service, IPPrefix, IPResource
 
 
 from ipaddress import ip_address, ip_network
 from ipaddress import ip_address, ip_network
 
 
@@ -26,3 +26,8 @@ def ip_resource(sender, instance, created, **kwargs):
             instance.prefixes.add(prefix)
             instance.prefixes.add(prefix)
         else:
         else:
             instance.prefixes.remove(prefix)
             instance.prefixes.remove(prefix)
+
+
+@receiver(post_delete, sender=Service, dispatch_uid='delete_service_contribution')
+def delete_service_contribution(sender, instance, **kwargs):
+    instance.contribution.delete()