Browse Source

filtrage par type de paiement

Élie Bouttier 7 years ago
parent
commit
ecd5068899
2 changed files with 31 additions and 19 deletions
  1. 29 17
      banking/admin.py
  2. 2 2
      banking/models.py

+ 29 - 17
banking/admin.py

@@ -36,6 +36,18 @@ class PaymentTypeFilter(admin.SimpleListFilter):
             return queryset.filter(service__isnull=False)
 
 
+class PaymentMethodFilter(admin.SimpleListFilter):
+    title = 'méthode de paiement'
+    parameter_name = 'method'
+
+    def lookups(self, request, model_admin):
+        return PaymentUpdate.PAYMENT_CHOICES
+
+    def queryset(self, request, queryset):
+        if self.value() is not None:
+            return queryset.filter(payment_method=self.value())
+
+
 class PendingPaymentFilter(admin.SimpleListFilter):
     title = 'opérations en attente'
     parameter_name = 'pending'
@@ -111,31 +123,31 @@ def prefix_search_field(prefix, field):
 ### ModelAdmin
 
 class RecurringPaymentAdmin(admin.ModelAdmin):
-    list_display = ('id', 'payment_type', 'payment_object_link', 'get_active', 'get_pending',)
+    list_display = ('id', 'payment_type', 'payment_object_link', 'get_active',)# 'get_pending',)
     list_select_related = ('adhesion', 'service', 'service__service_type',)
     inlines = (PendingPaymentUpdateInline, ValidatedPaymentUpdateInline,)
-    list_filter = (PaymentTypeFilter, ActiveFilter, PendingPaymentFilter,)
+    list_filter = (PaymentTypeFilter, PaymentMethodFilter, ActiveFilter, PendingPaymentFilter,)
     fields = ('payment_type', 'payment_object_link', 'debtor_link',)
     readonly_fields = ('payment_type', 'payment_object_link', 'debtor_link',)
     search_fields = \
         tuple([prefix_search_field('adhesion', f) for f in AdhesionAdmin.search_fields]) \
         + tuple([prefix_search_field('service', f) for f in ServiceAdmin.search_fields])
 
-    def get_queryset(self, request):
-        qs = super().get_queryset(request)
-        qs = qs.prefetch_related('updates')
-        qs = qs.prefetch_related(
-                models.Prefetch(
-                    'updates',
-                    queryset=PaymentUpdate.objects.filter(validated=False),
-                    to_attr='pending_updates'
-                )
-        )
-        return qs
-
-    def get_pending(self, obj):
-        return len(obj.pending_updates)
-    get_pending.short_description = 'Opérations en attente'
+    #def get_queryset(self, request):
+    #    qs = super().get_queryset(request)
+    #    qs = qs.prefetch_related('updates')
+    #    qs = qs.prefetch_related(
+    #            models.Prefetch(
+    #                'updates',
+    #                queryset=PaymentUpdate.objects.filter(validated=False),
+    #                to_attr='pending_updates'
+    #            )
+    #    )
+    #    return qs
+
+    #def get_pending(self, obj):
+    #    return len(obj.pending_updates)
+    #get_pending.short_description = 'Opérations en attente'
 
     def get_active(self, obj):
         return obj.active

+ 2 - 2
banking/models.py

@@ -9,7 +9,7 @@ class CurrentPaymentManager(models.Manager):
         qs = super().get_queryset()
         qs = qs.annotate(
                 payment_method=models.Subquery(
-                                PaymentUpdate.objects.filter(payment=models.OuterRef('pk'))
+                                PaymentUpdate.objects.filter(payment=models.OuterRef('pk'), validated=True)
                                                      .values('payment_method')[:1]
                 )
         )
@@ -49,7 +49,7 @@ class RecurringPayment(models.Model):
 
     @property
     def current(self):
-        return self.updates.first()
+        return self.updates.filter(validated=True).first()
 
     def is_active(self):
         return self.current and self.current.payment_method != PaymentUpdate.STOP