from django.core.urlresolvers import reverse_lazy, reverse from django.http import JsonResponse, HttpResponse, HttpResponseRedirect from django.utils import timezone from django.views.decorators.http import etag from django.views.generic import View, ListView, DetailView from .models import DTYSModel import logging log = logging.getLogger(__name__) def get_change(current, previous): if current == previous: return 100.0 try: return (abs(current - previous) / previous) * 100.0 except ZeroDivisionError: return 0 class DTYSListView(ListView): model = DTYSModel template_name = "dtys/index.jinja" def get_queryset(self, *args, **kwargs): qs = super(DTYSListView, self).get_queryset(*args, **kwargs) qs = qs.filter( is_public=True, start_date__lte=timezone.now().date(), end_date__gte=timezone.now().date(), start_time__lte=timezone.now().time(), end_time__gte=timezone.now().time() ) return qs class DTYSBuyView(DetailView): model = DTYSModel def get(self, request, *args, **kwargs): obj = self.get_object() log.debug(obj.id) if obj.is_public and not obj.is_stopped: from store.cart import Cart, CartItem from store.models import ProductVariation # stop DTYS for this product obj.stop() # Add to cart cart = Cart(self.request) try: item_variant = ProductVariation.objects.get(pk=obj.product.pk) except ProductVariation.DoesNotExist: return HttpResponseRedirect('/') cart.add_item(CartItem(item_variant, 1)) return HttpResponseRedirect('/store/cart/') return HttpResponseRedirect('/dtys/') def latest_entry(request): d = DTYSModel.objects.filter( is_public=True, is_stopped=False ) if d.count() > 0: pass return "myETAG" + str(timezone.now().second) @etag(latest_entry) def dtys_modified(request): return HttpResponse('') class DTYSInfoView(View): """Ajax info""" def get(self, request): data = { "dtys_list": [] } dtys_list = DTYSModel.objects.filter( is_public=True, start_date__lte=timezone.now(), end_date__gte=timezone.now(), start_time__lte=timezone.now().time() ) for i in dtys_list: if i.end_time <= timezone.now().time(): i.stop() dtys_item = { 'id': i.id, 'stopped': i.is_stopped } if not i.is_stopped: dtys_item['current_price'] = i.current_price_format() data['dtys_list'].append(dtys_item) return JsonResponse(data)