From 7178ffc734a941b8c39ac0a76c0668cf806d5c08 Mon Sep 17 00:00:00 2001 From: Ivan Date: Mon, 2 Nov 2015 17:13:18 +0200 Subject: [PATCH] big statistics task --- emencia/django/newsletter/models.py | 2 +- .../django/newsletter/views/admin_views.py | 8 ++-- expobanner/admin.py | 24 ++++++++--- exposition/models.py | 3 ++ templates/admin/expobanner/banner_list.html | 42 ++++++++++++++++++- templates/admin/expobanner/banner_stat.html | 11 ++++- templates/admin/expobanner/default_list.html | 1 + templates/admin/expobanner/link_list.html | 2 +- templates/admin/expobanner/main_list.html | 4 +- templates/admin/expobanner/main_stat.html | 2 + templates/admin/expobanner/paid_list.html | 33 +++++++++++---- templates/admin/expobanner/paid_stat.html | 2 + templates/admin/expobanner/top_list.html | 4 +- 13 files changed, 112 insertions(+), 26 deletions(-) diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py index f52c4237..4efb81a8 100644 --- a/emencia/django/newsletter/models.py +++ b/emencia/django/newsletter/models.py @@ -558,7 +558,7 @@ from theme.models import Theme class PopupCount(models.Model): - theme = models.ForeignKey(Theme) + theme = models.ForeignKey(Theme, null=True) date = models.DateField(auto_created=True) cnt = models.PositiveIntegerField(default=0) diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index e920ac9b..cdef1ab7 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -355,12 +355,14 @@ class PopupStatisticsView(TemplateView): template_name='admin/newsletters/popup_count.html' def get(self, request, *args, **kwargs): - qs = PopupCount.objects.filter(date=datetime.date.today()) + qs = PopupCount.objects.all() data = self.request.GET - if 'from' in data: + if data.get('from'): qs = qs.filter(date__gte=datetime.datetime.strptime(data['from'], '%d.%m.%Y').date()) - if 'to' in data: + if data.get('to'): qs = qs.filter(date__lt=datetime.datetime.strptime(data['to'], '%d.%m.%Y').date()) + if not data.get('from') and not data.get('to'): + qs = qs.filter(date=datetime.date.today()) if qs: res = {'cnt':qs.aggregate(cnt=Sum('cnt'))['cnt'], 'subscr':qs[0].get_subscr(), 'active':qs[0].get_active()} else: diff --git a/expobanner/admin.py b/expobanner/admin.py index 30c528be..261a9c3d 100644 --- a/expobanner/admin.py +++ b/expobanner/admin.py @@ -58,6 +58,7 @@ class BannerGroupList(AbstractList): model = BannerGroup verbose = u'Список груп' +from django.db.models import Q class BannerList(AbstractList): model = Banner @@ -65,8 +66,11 @@ class BannerList(AbstractList): template_name = 'admin/expobanner/banner_list.html' def get_queryset(self): - qs = super(BannerList, self).get_queryset() - qs = qs.filter(group__isnull=False) + qs = self.model.objects.filter(group__isnull=False).order_by('-fr') + if not self.request.GET.get('show_inactive'): + 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 @@ -121,6 +125,12 @@ class BannerStat(DetailView): 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 @@ -132,8 +142,10 @@ class PaidList(ListView): def get_queryset(self): qs = self.model.objects.language().filter(paid_new__isnull=False).order_by('-paid_new__public') - if self.request.GET.get('onlypublic'): + 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 @@ -212,7 +224,7 @@ class MainList(ListView): def get_queryset(self): qs = self.model.objects.language().filter(main__isnull=False).order_by('-main__public') - if self.request.GET.get('onlypublic'): + if not self.request.GET.get('show_inactive'): qs = qs.filter(main__public=True) return qs @@ -243,7 +255,7 @@ class MainConfList(ListView): def get_queryset(self): qs = self.model.objects.language().filter(main__isnull=False).order_by('-main__public') - if self.request.GET.get('onlypublic'): + if not self.request.GET.get('show_inactive'): qs = qs.filter(main__public=True) return qs @@ -327,7 +339,7 @@ class TopList(ListView): def get_queryset(self): qs = self.model.objects.language().filter(top__isnull=False).order_by('-top__fr') - if self.request.GET.get('onlypublic'): + if not self.request.GET.get('show_inactive'): qs = qs.filter(top__fr__lte=date.today(), top__to__gte=date.today()) return qs diff --git a/exposition/models.py b/exposition/models.py index 2b98d837..f32b57a6 100644 --- a/exposition/models.py +++ b/exposition/models.py @@ -284,6 +284,9 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin): else: return self.get_permanent_url() + def clicks(self): + return self.paid_new.tickets.clicks() + self.paid_new.participation.clicks() + self.paid_new.official.clicks() + class Statistic(TranslatableModel): exposition = models.ForeignKey(Exposition, related_name='statistic') diff --git a/templates/admin/expobanner/banner_list.html b/templates/admin/expobanner/banner_list.html index 2b41f228..2d2ec335 100644 --- a/templates/admin/expobanner/banner_list.html +++ b/templates/admin/expobanner/banner_list.html @@ -8,11 +8,39 @@
{% block list_table %} +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ Показать неактивные +
+
+
+ + + + + + + + @@ -21,6 +49,7 @@ {% for item in object_list %} + @@ -30,7 +59,16 @@ {% endblock %} {# pagination #} - {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} + {% include 'admin/includes/admin_pagination.html' with page_obj=page_obj %} - +Назад к управлению баннерами + {% endblock %} \ No newline at end of file diff --git a/templates/admin/expobanner/banner_stat.html b/templates/admin/expobanner/banner_stat.html index 6de23537..65f51cca 100644 --- a/templates/admin/expobanner/banner_stat.html +++ b/templates/admin/expobanner/banner_stat.html @@ -38,7 +38,14 @@ - {% with stats=stats %} + + + + + + + + {% with stats=stats %} {% for stat in stats %} @@ -53,6 +60,8 @@
ОбъектВсего кликов    
{{ item }}{{ item.clicks }} Изменить Статистика
За весь период{{ all.view }}{{ all.click }}{{ all.unique_view}}{{ all.unique_click }}
{{ stat.date|date:"Y-m-d" }}
+Назад +