Browse Source

amélioration gestion des paiements

Élie Bouttier 8 years ago
parent
commit
a65891cdc8
2 changed files with 49 additions and 6 deletions
  1. 42 4
      banking/admin.py
  2. 7 2
      banking/models.py

+ 42 - 4
banking/admin.py

@@ -2,6 +2,7 @@ from django.contrib import admin
 from django.contrib.contenttypes.admin import GenericTabularInline
 from django.contrib.contenttypes.models import ContentType
 from django.db.models import Q
+from django.core.urlresolvers import reverse
 
 from services.models import ServiceType
 from .models import Payment
@@ -85,17 +86,54 @@ class PaymentTypeFilter(admin.SimpleListFilter):
             return queryset.filter(service__service_type=service_type)
 
 
+def validate_payment(payment, request, queryset):
+    queryset.update(validated=True)
+
+
 class PaymentAdmin(PaymentMixin, admin.ModelAdmin):
-    list_display = ('get_adherent', 'payment_type_verbose', 'amount',
-                    'period', 'payment_method', 'validated',)
+    list_display_links = None
     list_filter = (PaymentTypeFilter, 'payment_method', 'validated',)
 
+    def get_list_display(self, request):
+        list_display = ('get_adherent', 'payment_type_verbose', 'amount',
+                        'period', 'payment_method', 'validated',)
+        if request.user.has_perm('banking.validate_payment'):
+            list_display += ('change',)
+        else:
+            list_display += ('change_pending',)
+        return list_display
+
+    def change(self, obj):
+        url = reverse('admin:banking_payment_change', args=[obj.pk])
+        return '<a href="%s" class="changelink">Modifier</a>' % url
+    change.short_description = ''
+    change.allow_tags = True
+
+    def change_pending(self, obj):
+        if obj.validated:
+            return '-'
+        else:
+            return self.change(obj)
+    change_pending.short_description = ''
+    change_pending.allow_tags = True
+
+    def get_actions(self, request):
+        actions = super().get_actions(request)
+        if request.user.has_perm('banking.validate_payment'):
+            actions['validate'] = (validate_payment, 'validate', 'Valider les paiements sélectionnés')
+        return actions
+
+    def has_add_permission(self, request):
+        return False
+
     def has_change_permission(self, request, obj=None):
-        if obj and not request.user.is_superuser:
+        if obj and not request.user.has_perm('banking.validate_payment'):
             return not obj.validated
         return True
 
-    def has_add_permission(self, request):
+    def has_delete_permission(self, request, obj=None):
+        if obj and not request.user.has_perm('banking.validate_payment'):
+            return not obj.validated
         return False
 
 

+ 7 - 2
banking/models.py

@@ -2,6 +2,7 @@ from django.db import models
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.models import ContentType
 from django.core.validators import MaxValueValidator
+from django.core.urlresolvers import reverse
 
 
 class Payment(models.Model):
@@ -43,13 +44,17 @@ class Payment(models.Model):
     # Note: 'adherent' is already used as the related_query_name
     #        of the GenericRelation on Adherent
     def get_adherent(self):
+        adherent = None
         if self.reason_type.app_label == 'adhesions' \
                 and self.reason_type.model == 'adherent':
-            return self.reason
+            adherent = self.reason
         if self.reason_type.app_label == 'services' \
                 and self.reason_type.model == 'service':
-            return self.reason.adherent
+            adherent = self.reason.adherent
+        url = reverse('admin:adhesions_adherent_change', args=[adherent.pk])
+        return '<a href="%s">%s</a>' % (url, adherent)
     get_adherent.short_description = 'Adhérent'
+    get_adherent.allow_tags = True
 
     def __str__(self):
         s = str(self.amount) + '€'