offersubscription_filter.py 1.7 KB

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