# from django.core.urlresolvers import reverse_lazy, reverse from django.http import ( Http404, HttpResponse, HttpResponseRedirect, JsonResponse, ) 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() ) if qs.count() == 0: raise Http404() 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() new_product_var = obj.product # Let's copy obj.product new_product_var.pk = None new_product_var.price = int(obj.price_stopped) new_product_var.save() # Add to cart cart = Cart(self.request) cart.add_item(CartItem(new_product_var, 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: return "dtysETAG" + str(timezone.now().second) return "dtysETAG" @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() dtys_item['price_dec_in_sec'] = i.get_dec_by_sec() data['dtys_list'].append(dtys_item) return JsonResponse(data)