You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

413 lines
12 KiB

# -*- coding: utf-8 -*-
from django.views.generic import TemplateView, CreateView, ListView, UpdateView, DetailView, DeleteView
from django.conf import settings
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.db.models import Sum
from django.core.urlresolvers import reverse_lazy
from expobanner.models import URL, BannerGroup, Banner, Paid, MainPage, Top
from expobanner.forms import UrlCreateForm, BannerCreateGroupForm, BannerCreateForm, BannerGroupUpdateForm,\
PaidCreateForm, PaidUpdateForm, TopCreateForm, BannerLinkCreateForm, MainCreateForm, MainConfCreateForm, MainUpdateForm, TopUpdateForm
from exposition.models import Exposition
from conference.models import Conference
from settings.models import Html, LandingComment
from settings.forms import HtmlForm, CommentForm
class BannersControl(TemplateView):
template_name = 'admin/expobanner/banners_control.html'
# CREATE VIEWS
class AbstractCreate(CreateView):
template_name = 'admin/expobanner/default_form.html'
success_url = '/admin/expobanners/banners/control/'
class CreateUrl(AbstractCreate):
model = URL
form_class = UrlCreateForm
class CreateBannerGroup(AbstractCreate):
model = BannerGroup
form_class = BannerCreateGroupForm
class CreateBanner(AbstractCreate):
model = Banner
form_class = BannerCreateForm
class CreateLink(AbstractCreate):
model = Banner
form_class = BannerLinkCreateForm
# LISTS VIEWS
class AbstractList(ListView):
paginate_by = settings.ADMIN_PAGINATION
template_name = 'admin/expobanner/default_list.html'
def get_context_data(self, **kwargs):
context = super(AbstractList, self).get_context_data(**kwargs)
context['verbose'] = self.verbose
return context
class UrlList(AbstractList):
model = URL
verbose = u'Список урлов'
class BannerGroupList(AbstractList):
model = BannerGroup
verbose = u'Список груп'
from django.db.models import Q
class BannerList(AbstractList):
model = Banner
verbose = u'Список банеров'
template_name = 'admin/expobanner/banner_list.html'
def get_queryset(self):
qs = self.model.objects.filter(group__isnull=False).order_by('-fr')
if not self.request.GET.get('show_inactive'):
qs = qs.filter(public=True)
qs = qs.filter(Q(fr__lte=date.today()) & (Q(to__isnull=True) | Q( to__gte=date.today())))
if self.request.GET.get('q'):
qs = qs.filter(title__icontains=self.request.GET['q'])
return qs
class LinkList(AbstractList):
model = Banner
verbose = u'Список ссылок'
template_name = 'admin/expobanner/link_list.html'
def get_queryset(self):
qs = super(LinkList, self).get_queryset()
qs = qs.filter(link=True)
return qs
# UPDATE VIEWS
class AbstractUpdate(UpdateView):
template_name = 'admin/expobanner/default_form.html'
success_url = '/admin/expobanners/banners/control/'
class UrlUpdate(AbstractUpdate):
model = URL
form_class = UrlCreateForm
class BannerGroupUpdate(AbstractUpdate):
model = BannerGroup
form_class = BannerGroupUpdateForm
class BannerUpdate(AbstractUpdate):
model = Banner
form_class = BannerCreateForm
class LinkUpdate(AbstractUpdate):
model = Banner
form_class = BannerLinkCreateForm
class BannerStat(DetailView):
model = Banner
template_name = 'admin/expobanner/banner_stat.html'
def get_context_data(self, **kwargs):
context = super(BannerStat, self).get_context_data(**kwargs)
obj = self.object
qs = obj.banner_stat.all()
date_from, date_to = self.request.GET.get('date_from'), self.request.GET.get('date_to')
if date_from:
date_from = datetime.strptime(date_from, "%d.%m.%Y")
qs = qs.filter(date__gte=date_from)
if date_to:
date_to = datetime.strptime(date_to, "%d.%m.%Y")
qs = qs.filter(date__lte=date_to)
context['all'] = qs.aggregate(
view=Sum('view'),
click=Sum('click'),
unique_view=Sum('unique_view'),
unique_click=Sum('unique_click')
)
context['stats'] = qs
return context
class CommentMixin(object):
form_class = CommentForm
model = LandingComment
template_name = 'admin/expobanner/comment_create.html'
success_url = reverse_lazy('expobaner-comment_list')
def get_context_data(self, *args, **kwargs):
ctx = super(CommentMixin, self).get_context_data(*args, **kwargs)
ctx['languages'] = settings.LANGUAGES
return ctx
def get_success_url(self):
return self.success_url
class CommentList(CommentMixin, ListView):
template_name = 'admin/expobanner/comment_list.html'
def get_queryset(self):
return self.model.objects.language()
class CommentCreate(CommentMixin, CreateView):
pass
class CommentUpdate(CommentMixin, UpdateView):
pass
class CommentDelete(CommentMixin, DeleteView):
def get(self, request, *args, **kwargs):
return self.post(request, *args, **kwargs)
class PaidList(ListView):
model = Exposition
template_name = 'admin/expobanner/paid_list.html'
paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self):
qs = self.model.objects.language().filter(paid_new__isnull=False).order_by('-paid_new__public')
if not self.request.GET.get('show_inactive'):
qs = qs.filter(paid_new__public=True)
if self.request.GET.get('q'):
qs = qs.filter(name__icontains=self.request.GET['q'])
return qs
class PaidCreate(CreateView):
form_class = PaidCreateForm
template_name = 'admin/expobanner/paid_create.html'
success_url = '/admin/expobanners/paid/list/'
class PaidUpdate(UpdateView):
model = Paid
form_class = PaidUpdateForm
template_name = 'admin/expobanner/paid_update.html'
success_url = '/admin/expobanners/paid/list/'
def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
initial = super(PaidUpdate, self).get_initial()
obj = self.object
initial['tickets'] = obj.tickets.url
initial['participation'] = obj.participation.url
initial['official'] = obj.official.url
return initial
def get_context_data(self, **kwargs):
context = super(PaidUpdate, self).get_context_data(**kwargs)
obj = self.object
context['exposition'] = obj.get_event()
return context
def paid_turn(request, pk, status):
paid = get_object_or_404(Paid, pk=pk)
if status == 'on':
paid.public = True
else:
paid.public = False
paid.save()
return HttpResponseRedirect('/admin/expobanners/paid/list/')
class PaidStat(DetailView):
model = Paid
template_name = 'admin/expobanner/paid_stat.html'
def get_context_data(self, **kwargs):
context = super(PaidStat, self).get_context_data(**kwargs)
obj = self.object
context['all'] = obj.paidstat_set.aggregate(
official=Sum('official_clicks'),
ticket=Sum('tickets_clicks'),
participation=Sum('participation_clicks'),
catalog=Sum('catalog_clicks')
)
qs = obj.paidstat_set.all()
date_from, date_to = self.request.GET.get('date_from'), self.request.GET.get('date_to')
if date_from:
date_from = datetime.strptime(date_from, "%d.%m.%Y")
qs = qs.filter(date__gte=date_from)
if date_to:
date_to = datetime.strptime(date_to, "%d.%m.%Y")
qs = qs.filter(date__lte=date_to)
context['stats'] = qs
return context
# ----------------------------------
class MainList(ListView):
model = Exposition
template_name = 'admin/expobanner/main_list.html'
paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self):
qs = self.model.objects.language().filter(main__isnull=False).order_by('-main__public')
if not self.request.GET.get('show_inactive'):
qs = qs.filter(main__public=True)
return qs
class MainCreate(CreateView):
form_class = MainCreateForm
template_name = 'admin/expobanner/paid_create.html'
success_url = '/admin/expobanners/main/list/'
class MainUpdate(UpdateView):
model = MainPage
form_class = MainUpdateForm
template_name = 'admin/expobanner/default_form.html'
success_url = '/admin/expobanners/main/list/'
def get_context_data(self, **kwargs):
context = super(MainUpdate, self).get_context_data(**kwargs)
obj = self.object
context['exposition'] = obj.get_event()
return context
class MainConfList(ListView):
model = Conference
template_name = 'admin/expobanner/main_list.html'
paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self):
qs = self.model.objects.language().filter(main__isnull=False).order_by('-main__public')
if not self.request.GET.get('show_inactive'):
qs = qs.filter(main__public=True)
return qs
def get_context_data(self, **kwargs):
context = super(MainConfList, self).get_context_data(**kwargs)
context.update({'conf': True})
return context
class MainConfCreate(CreateView):
form_class = MainConfCreateForm
template_name = 'admin/expobanner/paid_create.html'
success_url = reverse_lazy('expobanner-conf-list_main')
def get_context_data(self, **kwargs):
context = super(MainConfCreate, self).get_context_data(**kwargs)
context.update({'conf': True})
return context
class MainConfUpdate(UpdateView):
model = MainPage
form_class = MainUpdateForm
template_name = 'admin/expobanner/default_form.html'
success_url = reverse_lazy('expobanner-conf-list_main')
def get_context_data(self, **kwargs):
context = super(MainConfUpdate, self).get_context_data(**kwargs)
obj = self.object
context['conference'] = obj.get_event()
return context
def main_turn(request, pk, status):
main = get_object_or_404(MainPage, pk=pk)
if status == 'on':
main.public = True
else:
main.public = False
main.save()
return HttpResponseRedirect(request.META['HTTP_REFERER'])
from datetime import datetime
class MainStat(DetailView):
model = MainPage
template_name = 'admin/expobanner/main_stat.html'
def get_context_data(self, **kwargs):
context = super(MainStat, self).get_context_data(**kwargs)
obj = self.object
context['all'] = obj.link.banner_stat.aggregate(
views=Sum('view'),
clicks=Sum('click'),
unique_clicks=Sum('unique_click'),
unique_views=Sum('unique_view')
)
qs = obj.link.banner_stat.all()
date_from, date_to = self.request.GET.get('date_from'), self.request.GET.get('date_to')
if date_from:
date_from = datetime.strptime(date_from, "%d.%m.%Y")
qs = qs.filter(date__gte=date_from)
if date_to:
date_to = datetime.strptime(date_to, "%d.%m.%Y")
qs = qs.filter(date__lte=date_to)
context['stats'] = qs
return context
# ------------------------------------
from datetime import date
class TopList(ListView):
model = Exposition
template_name = 'admin/expobanner/top_list.html'
paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self):
qs = self.model.objects.language().filter(top__isnull=False).order_by('-top__fr')
if not self.request.GET.get('show_inactive'):
qs = qs.filter(top__fr__lte=date.today(), top__to__gte=date.today())
return qs
class TopCreate(CreateView):
form_class = TopCreateForm
template_name = 'admin/expobanner/top_create.html'
success_url = '/admin/expobanners/top/list/'
class TopUpdate(UpdateView):
model = Top
form_class = TopUpdateForm
template_name = 'admin/expobanner/top_create.html'
success_url = '/admin/expobanners/top/list/'
def get_context_data(self, **kwargs):
context = super(TopUpdate, self).get_context_data(**kwargs)
obj = self.object
context['exposition'] = obj.get_event()
return context
class MainPageBlock(UpdateView):
model = Html
form_class = HtmlForm
template_name = 'admin/expobanner/main_page_block.html'
def get_context_data(self, **kwargs):
context = super(MainPageBlock, self).get_context_data(**kwargs)
context['languages'] = settings.LANGUAGES
return context
def get_success_url(self):
return '/admin/'