views.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. import datetime
  4. import json
  5. from django.db.models import Q, Count
  6. from django.views.generic.base import RedirectView
  7. from django.shortcuts import get_object_or_404
  8. from django.core.urlresolvers import reverse
  9. from django.http import JsonResponse, HttpResponseServerError
  10. # from django.views.decorators.cache import cache_control
  11. from coin.offers.models import Offer, OfferSubscription
  12. class ConfigurationRedirectView(RedirectView):
  13. """Redirects to the appropriate view for the configuration backend of the
  14. specified subscription."""
  15. permanent = False
  16. def get_redirect_url(self, *args, **kwargs):
  17. subscription = get_object_or_404(OfferSubscription, pk=self.kwargs['id'],
  18. member=self.request.user)
  19. return reverse(subscription.configuration.url_namespace + ':' + subscription.configuration.backend_name,
  20. args=[subscription.configuration.pk])
  21. # @cache_control(max_age=7200)
  22. def subscription_count_json(request):
  23. output = {}
  24. # Get date form url, or set default
  25. date = request.GET.get('date', datetime.date.today())
  26. # Validate date type
  27. if type(date) is not datetime.date:
  28. try:
  29. datetime.datetime.strptime(date, '%Y-%m-%d')
  30. except ValueError, TypeError:
  31. return HttpResponseServerError("Incorrect date format, should be YYYY-MM-DD")
  32. # Count offer subscription
  33. offers = Offer.objects\
  34. .filter(Q(offersubscription__subscription_date__lte=date) & (Q(offersubscription__resign_date__gt=date) | Q(offersubscription__resign_date__isnull=True)))\
  35. .annotate(num_subscribtions=Count('offersubscription'))\
  36. .order_by('name')
  37. # Print count by offer type
  38. for offer in offers:
  39. output[offer.name] = offer.num_subscribtions
  40. return JsonResponse(output)