Browse Source

Add filters to offerunscription admin list

Fabs 11 years ago
parent
commit
659f3be83c
2 changed files with 58 additions and 1 deletions
  1. 15 1
      coin/offers/admin.py
  2. 43 0
      coin/offers/offersubscription_filter.py

+ 15 - 1
coin/offers/admin.py

@@ -1,16 +1,30 @@
 from django.contrib import admin
 from coin.offers.models import Offer, Service, OfferSubscription
+from coin.offers.offersubscription_filter import\
+            OfferSubscriptionTerminationFilter,\
+            OfferSubscriptionCommitmentFilter
 import autocomplete_light
 
+class ServiceAdmin(admin.ModelAdmin):
+    search_fields = ['name']
+
+
 class OfferAdmin(admin.ModelAdmin):
     list_display = ('service', 'name', 'billing_period', 'period_fees',
                     'initial_fees')
     list_display_links = ('name',)
+    search_fields = ['name']
+
 
 class OfferSubscriptionAdmin(admin.ModelAdmin):
     list_display = ('member', 'offer', 'subscription_date', 'commitment',
                     'resign_date')
     list_display_links = ('member','offer')
+    list_filter = ( OfferSubscriptionTerminationFilter,
+                    OfferSubscriptionCommitmentFilter,
+                    'member', 'offer')
+    search_fields = ['member__first_name', 'member__last_name', 'member__email']
+    
     fields = (
                 'member',
                 'offer',
@@ -20,6 +34,6 @@ class OfferSubscriptionAdmin(admin.ModelAdmin):
              )
     form = autocomplete_light.modelform_factory(OfferSubscription)
 
-admin.site.register(Service)
+admin.site.register(Service, ServiceAdmin)
 admin.site.register(Offer, OfferAdmin)
 admin.site.register(OfferSubscription, OfferSubscriptionAdmin)

+ 43 - 0
coin/offers/offersubscription_filter.py

@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+from django.contrib.admin import SimpleListFilter
+from django.db.models import Q,F
+import datetime
+
+
+class OfferSubscriptionTerminationFilter(SimpleListFilter):
+    title = 'Abonnement'
+    parameter_name = 'termination'
+
+    def lookups(self, request, model_admin):
+        return (
+            ('not_terminated', u'Abonnements en cours'),
+            ('terminated', u'Abonnements résiliés'),
+        )
+
+    def queryset(self, request, queryset):
+        if self.value() == 'not_terminated':
+            return queryset.filter(Q(resign_date__gt=datetime.date.today) | Q(resign_date__isnull=True))
+        if self.value() == 'terminated':
+            return queryset.filter(resign_date__lte=datetime.date.today)
+
+
+class OfferSubscriptionCommitmentFilter(SimpleListFilter):
+    title = u'Engagement'
+    parameter_name = 'commitment'
+
+    def lookups(self, request, model_admin):
+        return (
+            ('committed', u'Est engagé'),
+            ('not_committed', u'N\'est plus engagé'),
+        )
+
+    def queryset(self, request, queryset):
+        if self.value() == 'committed':
+            # TODO : Faire mieux que du SQL écrit en dur. La ligne 
+            # en dessous ne fonctionne pas et je ne sais pas pourquoi
+            return queryset.extra(where = ["subscription_date + INTERVAL '1 month' * commitment > current_date"])
+            #~ return queryset.filter(subscription_date__gte=datetime.date.today - relativedelta(months=F('commitment'))) 
+        if self.value() == 'not_committed':
+            return queryset.extra(where = ["subscription_date + INTERVAL '1 month' * commitment <= current_date"])
+            #~ return queryset.filter(subscription_date__lte=datetime.date.today - relativedelta(months=F('commitment'))) 
+