Browse Source

amélioration paiement des cotisation / services

Élie Bouttier 8 years ago
parent
commit
bca832464d
4 changed files with 31 additions and 13 deletions
  1. 2 2
      accounts/admin.py
  2. 10 2
      adhesions/admin.py
  3. 10 7
      banking/admin.py
  4. 9 2
      services/admin.py

+ 2 - 2
accounts/admin.py

@@ -37,7 +37,7 @@ class UserAdmin(AuthUserAdmin):
                 AuthUserAdmin.fieldsets[1],
             )
 
-    def get_form(self, request, obj=None):
+    def get_form(self, request, obj=None, **kwargs):
         # get_inlines does not exists :-(
         if obj:
             self.inlines = (ProfileInline, AdherentInline,)
@@ -45,7 +45,7 @@ class UserAdmin(AuthUserAdmin):
             self.inlines = ()
 
         if request.user.is_superuser or obj:
-            return super().get_form(request, obj)
+            return super().get_form(request, obj, **kwargs)
         else:
             # This creation form does not ask for a password
             return UserCreationForm

+ 10 - 2
adhesions/admin.py

@@ -3,7 +3,7 @@ from django.contrib.contenttypes.admin import GenericStackedInline
 
 from .forms import AdherentForm
 from .models import Profile, Corporation, Adherent
-from banking.admin import ValidatedPaymentInline, PendingOrNewPaymentInline
+from banking.admin import PaymentInline, ValidatedPaymentInline, PendingOrNewPaymentInline
 
 
 class ProfileInline(admin.StackedInline):
@@ -47,10 +47,18 @@ class AdherentTypeFilter(admin.SimpleListFilter):
 class AdherentAdmin(admin.ModelAdmin):
     list_display = ('id', 'adherent_name', 'type',)
     list_filter = (AdherentTypeFilter,)
-    inlines = (ValidatedPaymentInline, PendingOrNewPaymentInline,)
     fields = ('id',)
     readonly_fields = ('id',)
 
+    def get_form(self, request, obj=None, **kwargs):
+        # get_inlines does not exists :-(
+        if request.user.has_perm('banking.validate_payment'):
+            self.inlines = (PaymentInline,)
+        else:
+            self.inlines = (ValidatedPaymentInline, PendingOrNewPaymentInline,)
+
+        return super().get_form(request, obj, **kwargs)
+
     def adherent_name(self, obj):
         return str(obj)
     adherent_name.short_description = 'Nom ou raison sociale'

+ 10 - 7
banking/admin.py

@@ -11,31 +11,35 @@ from .models import Payment
 class PaymentMixin:
     def get_fields(self, request, obj=None):
         fields = ('amount', 'period', 'payment_method', 'date',)
-        if request.user.is_superuser or request.user.has_perm('banking.validate_payment'):
+        if request.user.has_perm('banking.validate_payment'):
             fields += ('validated',)
         return fields
 
     def get_queryset(self, request):
         qs = super().get_queryset(request)
-        if request.user.is_superuser or request.user.has_perm('banking.validate_payment'):
+        if request.user.has_perm('banking.validate_payment'):
             return qs
         # Show only adherent contribution and payment related to a service for which the user is in managment group.
         user_ctype = ContentType.objects.get(app_label='adhesions', model='adherent')
         return qs.filter(Q(reason_type=user_ctype) | Q(service__service_type__group__in=request.user.groups.all()))
 
 
-class PaymentInlineMixin(PaymentMixin, GenericTabularInline):
+class PaymentInline(PaymentMixin, GenericTabularInline):
     model = Payment
     ct_field = 'reason_type'
     ct_fk_field = 'reason_id'
+    extra = 1
 
 
-class ValidatedPaymentInline(PaymentInlineMixin):
+class ValidatedPaymentInline(PaymentInline):
     extra = 0
     verbose_name_plural = 'Paiements validés'
 
     def get_readonly_fields(self, request, obj=None):
-        return self.get_fields(request, obj)
+        if request.user.has_perm('banking.validate_payment'):
+            return ()
+        else:
+            return self.get_fields(request, obj)
 
     def has_add_permission(self, request):
         return False
@@ -47,8 +51,7 @@ class ValidatedPaymentInline(PaymentInlineMixin):
         return super().get_queryset(request).filter(validated=True)
 
 
-class PendingOrNewPaymentInline(PaymentInlineMixin):
-    extra = 1
+class PendingOrNewPaymentInline(PaymentInline):
     verbose_name_plural = 'Paiements en attente de validation et nouveaux paiements'
 
     def get_queryset(self, request):

+ 9 - 2
services/admin.py

@@ -1,7 +1,7 @@
 from django.contrib import admin
 
 from .models import Service, ServiceType, IPResource
-from banking.admin import ValidatedPaymentInline, PendingOrNewPaymentInline
+from banking.admin import PaymentInline, ValidatedPaymentInline, PendingOrNewPaymentInline
 
 
 class ServiceTypeFilter(admin.SimpleListFilter):
@@ -42,13 +42,20 @@ class ServiceStatusFilter(admin.SimpleListFilter):
 class ServiceAdmin(admin.ModelAdmin):
     list_display = ('id', 'adherent', 'service_type', 'start', 'end', 'status')
     list_filter = (ServiceStatusFilter, ServiceTypeFilter,)
-    inlines = (ValidatedPaymentInline, PendingOrNewPaymentInline,)
 
     def status(self, obj):
         return obj.is_ongoing
     status.short_description = 'En cours'
     status.boolean = True
 
+    def get_form(self, request, obj=None, **kwargs):
+        # get_inlines does not exists :-(
+        if request.user.has_perm('banking.validate_payment'):
+            self.inlines = (PaymentInline,)
+        else:
+            self.inlines = (ValidatedPaymentInline, PendingOrNewPaymentInline,)
+        return super().get_form(request, obj, **kwargs)
+
     def get_queryset(self, request):
         qs = super().get_queryset(request)
         if request.user.is_superuser: