offersubscription_filter.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.contrib.admin import SimpleListFilter
  4. from django.db.models import Q,F
  5. import datetime
  6. class OfferSubscriptionTerminationFilter(SimpleListFilter):
  7. title = 'Abonnement'
  8. parameter_name = 'termination'
  9. def lookups(self, request, model_admin):
  10. return (
  11. ('not_terminated', 'Abonnements en cours'),
  12. ('terminated', 'Abonnements résiliés'),
  13. )
  14. def queryset(self, request, queryset):
  15. if self.value() == 'not_terminated':
  16. return queryset.filter(Q(resign_date__gt=datetime.date.today) | Q(resign_date__isnull=True))
  17. if self.value() == 'terminated':
  18. return queryset.filter(resign_date__lte=datetime.date.today)
  19. class OfferSubscriptionCommitmentFilter(SimpleListFilter):
  20. title = 'Engagement'
  21. parameter_name = 'commitment'
  22. def lookups(self, request, model_admin):
  23. return (
  24. ('committed', 'Est engagé'),
  25. ('not_committed', 'N\'est plus engagé'),
  26. )
  27. def queryset(self, request, queryset):
  28. if self.value() == 'committed':
  29. # TODO : Faire mieux que du SQL écrit en dur. La ligne
  30. # en dessous ne fonctionne pas et je ne sais pas pourquoi
  31. return queryset.extra(where = ["subscription_date + INTERVAL '1 month' * commitment > current_date"])
  32. #~ return queryset.filter(subscription_date__gte=datetime.date.today - relativedelta(months=F('commitment')))
  33. if self.value() == 'not_committed':
  34. return queryset.extra(where = ["subscription_date + INTERVAL '1 month' * commitment <= current_date"])
  35. #~ return queryset.filter(subscription_date__lte=datetime.date.today - relativedelta(months=F('commitment')))