Browse Source

amélioration affichage et filtrage des paiements

Élie Bouttier 8 years ago
parent
commit
db47be34b7
2 changed files with 41 additions and 8 deletions
  1. 22 2
      banking/admin.py
  2. 19 6
      banking/models.py

+ 22 - 2
banking/admin.py

@@ -54,9 +54,29 @@ class PendingOrNewPaymentInline(PaymentInlineMixin):
         return super().get_queryset(request).filter(validated=False)
 
 
+class PaymentTypeFilter(admin.SimpleListFilter):
+    title = 'type de paiement'
+    parameter_name = 'type'
+
+    def lookups(self, request, model_admin):
+        return (
+            ('membership', 'Cotisation'),
+            ('service', 'Service'),
+        )
+
+    def queryset(self, request, queryset):
+        if self.value() == 'membership':
+            return queryset.filter(reason_type__app_label='adhesions',
+                                   reason_type__model='adherent')
+        if self.value() == 'service':
+            return queryset.filter(reason_type__app_label='services',
+                                   reason_type__model='service')
+
+
 class PaymentAdmin(PaymentMixin, admin.ModelAdmin):
-    list_display = ('reason_verbose', 'amount', 'period', 'payment_method', 'validated',)
-    list_filter = ('payment_method', 'validated',)
+    list_display = ('get_adherent', 'payment_type_verbose', 'amount',
+                    'period', 'payment_method', 'validated',)
+    list_filter = (PaymentTypeFilter, 'payment_method', 'validated',)
 
     def has_change_permission(self, request, obj=None):
         if obj and not request.user.is_superuser:

+ 19 - 6
banking/models.py

@@ -31,12 +31,25 @@ class Payment(models.Model):
             ('validate_payment', 'Peut valider les paiements'),
         )
 
-    def reason_verbose(self):
-        if self.reason_type.app_label == 'adhesions':
-            return 'Cotisation de %s' % self.reason
-        if self.reason_type.app_label == 'services':
-            return 'Service %s' % self.reason
-    reason_verbose.short_description = 'Paiement'
+    def payment_type_verbose(self):
+        if self.reason_type.app_label == 'adhesions' \
+                and self.reason_type.model == 'adherent':
+            return 'Cotisation'
+        if self.reason_type.app_label == 'services' \
+                and self.reason_type.model == 'service':
+            return 'Service (%s)' % self.reason.service_type
+    payment_type_verbose.short_description = 'Type'
+
+    # Note: 'adherent' is already used as the related_query_name
+    #        of the GenericRelation on Adherent
+    def get_adherent(self):
+        if self.reason_type.app_label == 'adhesions' \
+                and self.reason_type.model == 'adherent':
+            return self.reason
+        if self.reason_type.app_label == 'services' \
+                and self.reason_type.model == 'service':
+            return self.reason.adherent
+    get_adherent.short_description = 'Adhérent'
 
 
     def __str__(self):