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.utils.html import format_html, mark_safe
 from django.core.urlresolvers import reverse
+from django.utils import timezone
 
 from .forms import UserCreationForm
 from .models import User, Corporation, Adhesion
 from accounts.models import Profile
 from services.models import Service
 from djadhere.utils import ActiveFilter
+from banking.models import PaymentUpdate
+
+from datetime import timedelta
 
 
 ### Inlines
@@ -239,7 +243,23 @@ class AdhesionAdmin(AdtSearchMixin, admin.ModelAdmin):
         return False
 
     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)

+ 6 - 1
adhesions/signals.py

@@ -1,5 +1,5 @@
 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
 
@@ -14,3 +14,8 @@ def create_user_adhesion(sender, instance, created, **kwargs):
 def create_corporation_adhesion(sender, instance, created, **kwargs):
     if created:
         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.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
 
@@ -26,3 +26,8 @@ def ip_resource(sender, instance, created, **kwargs):
             instance.prefixes.add(prefix)
         else:
             instance.prefixes.remove(prefix)
+
+
+@receiver(post_delete, sender=Service, dispatch_uid='delete_service_contribution')
+def delete_service_contribution(sender, instance, **kwargs):
+    instance.contribution.delete()