From bac139099be361bb37a40fd0ec4a068341b287c2 Mon Sep 17 00:00:00 2001 From: Ivan Date: Fri, 30 Oct 2015 17:51:51 +0200 Subject: [PATCH] x3 --- emencia/django/newsletter/admin_urls.py | 4 +- emencia/django/newsletter/forms.py | 18 +++--- emencia/django/newsletter/models.py | 21 +++++++ emencia/django/newsletter/urls/tracking.py | 2 + .../django/newsletter/views/admin_views.py | 47 +++++++++++++- templates/admin/newsletters/contact_list.html | 14 ++--- .../admin/newsletters/newsletter_list.html | 2 +- .../admin/newsletters/newsletter_object.html | 6 +- templates/admin/newsletters/popup_count.html | 63 +++++++++++++++++++ .../client/popups/announce_subscription.html | 19 ++++-- 10 files changed, 169 insertions(+), 27 deletions(-) create mode 100644 templates/admin/newsletters/popup_count.html diff --git a/emencia/django/newsletter/admin_urls.py b/emencia/django/newsletter/admin_urls.py index 6e874d1a..b1a296c3 100644 --- a/emencia/django/newsletter/admin_urls.py +++ b/emencia/django/newsletter/admin_urls.py @@ -3,7 +3,7 @@ from django.conf.urls import patterns from emencia.django.newsletter.views.admin_views import ContactList, UpdateContact, MailingListView, UpdateMailingList,\ CreateMailingList, NewsletterListView, NewsletterCreate, ExportContacts, DeleteContact, NewsletterUpdate, \ DeleteMailingList, ImportContacts, NewsletterHistory, NewsletterStatistics, NewsletterCloneView,ContactQueryDelete,\ - NewsletterDelete + NewsletterDelete, PopupStatisticsView urlpatterns = patterns('', @@ -30,4 +30,6 @@ urlpatterns = patterns('', url(r'^contact/delete-query/$', ContactQueryDelete.as_view(), name='newsletters_contact_query_delete'), url(r'^contact/export/$', ExportContacts.as_view(), name='export_contacts'), url(r'^contact/import/$', ImportContacts.as_view(), name='import_newsletters_contacts'), + + url(r'get-popup-statistics/$', PopupStatisticsView.as_view(), name='popup_statistics'), ) \ No newline at end of file diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py index 62da29f3..2404c9b3 100644 --- a/emencia/django/newsletter/forms.py +++ b/emencia/django/newsletter/forms.py @@ -126,8 +126,8 @@ class ContactFilterForm(forms.Form): ) created_from = forms.CharField(max_length=255, label="Создан с", required=False) created_to = forms.CharField(max_length=255, label="Создан по", required=False) - active = forms.BooleanField(label="Подтверждена подписка", required=False) - valid = forms.BooleanField(label="Валидный Email", required=False) + not_active = forms.BooleanField(label="Не подтверждена подписка", required=False) + not_valid = forms.BooleanField(label="Неалидный Email", required=False) def filter(self): title = 'contact list ' @@ -149,16 +149,16 @@ class ContactFilterForm(forms.Form): if self.cleaned_data.get('area'): qs = qs.filter(contactsettings__area__id__in=self.cleaned_data['area']) title += " geo area: %s" % ','.join([tr(obj.name) for obj in Area.objects.language('en').filter(id__in=self.cleaned_data['area'])]) - if self.cleaned_data.get('active'): - title = ' active ' + title - qs = qs.filter(activated=True) - if self.cleaned_data.get('valid'): - title = 'valid e-mail ' + title - qs = qs.filter(valid=True) + if self.cleaned_data.get('not_active'): + title = ' not active ' + title + qs = qs.filter(activated=False) + if self.cleaned_data.get('not_valid'): + title = 'not valid e-mail ' + title + qs = qs.filter(valid=False) if self.cleaned_data.get("created_from"): qs = qs.filter(creation_date__gte=datetime.strptime(self.cleaned_data['created_from'], "%d.%m.%Y")) if self.cleaned_data.get("created_to"): - qs = qs.filter(creation_date__lte=datetime.strptime(self.cleaned_data['created_to'], "%d.%m.%Y")) + qs = qs.filter(creation_date__lt=datetime.strptime(self.cleaned_data['created_to'], "%d.%m.%Y")) return qs, title diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py index 100173c9..f52c4237 100644 --- a/emencia/django/newsletter/models.py +++ b/emencia/django/newsletter/models.py @@ -552,3 +552,24 @@ class WorkGroup(models.Model): class Meta: verbose_name = _('workgroup') verbose_name_plural = _('workgroups') + + +from theme.models import Theme + + +class PopupCount(models.Model): + theme = models.ForeignKey(Theme) + date = models.DateField(auto_created=True) + cnt = models.PositiveIntegerField(default=0) + + class Meta: + unique_together = ('theme', 'date') + ordering = ['-date'] + + def get_subscr(self): + qs = Contact.objects.filter(creation_date=self.date) + return qs.count() + + def get_active(self): + qs = Contact.objects.filter(creation_date=self.date, activated=True) + return qs.count() \ No newline at end of file diff --git a/emencia/django/newsletter/urls/tracking.py b/emencia/django/newsletter/urls/tracking.py index 5aae9e5e..b48d3fc4 100644 --- a/emencia/django/newsletter/urls/tracking.py +++ b/emencia/django/newsletter/urls/tracking.py @@ -1,8 +1,10 @@ """Urls for the emencia.django.newsletter Tracking""" from django.conf.urls import url from django.conf.urls import patterns +from ..views.admin_views import count_popups urlpatterns = patterns('emencia.django.newsletter.views.tracking', + url(r'^newsletter/count-popup/$', count_popups, name='newsletter_count_pupups'), url(r'^newsletter/(?P[-\w]+)/(?P[0-9A-Za-z]+)-(?P.+)\.(?Ppng|gif|jpg)$', 'view_newsletter_tracking', name='newsletter_newsletter_tracking'), diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index 62814321..e920ac9b 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from django.views.generic import CreateView, ListView, UpdateView, DeleteView, FormView, DetailView, RedirectView +from django.views.generic import CreateView, ListView, UpdateView, DeleteView, FormView, DetailView, RedirectView, TemplateView from django.conf import settings from django.utils import translation from django.utils.translation import ugettext_lazy as _ @@ -320,7 +320,50 @@ class NewsletterHistory(ListView): return context + class NewsletterDelete(DeleteView): model = Newsletter template_name = 'admin/newsletters/confirm_delete.html' - success_url = reverse_lazy('newsletters_newsletters_list') \ No newline at end of file + success_url = reverse_lazy('newsletters_newsletters_list') + + +import datetime +from ..models import PopupCount +from theme.models import Theme + +def count_popups(request): + if not request.is_ajax(): + return HttpResponse("request is not ajax") + else: + themes = request.GET.getlist('theme') + if themes: + for theme_id in themes: + obj,_ = PopupCount.objects.get_or_create(theme=Theme.objects.get(id=theme_id), date=datetime.date.today()) + obj.cnt += 1 + obj.save() + else: + obj,_ = PopupCount.objects.get_or_create(theme=None, date=datetime.date.today()) + obj.cnt+=1 + obj.save() + return HttpResponse(obj.cnt, content_type='application/json') + +from django.db.models import Sum + + +class PopupStatisticsView(TemplateView): + model = PopupCount + template_name='admin/newsletters/popup_count.html' + + def get(self, request, *args, **kwargs): + qs = PopupCount.objects.filter(date=datetime.date.today()) + data = self.request.GET + if 'from' in data: + qs = qs.filter(date__gte=datetime.datetime.strptime(data['from'], '%d.%m.%Y').date()) + if 'to' in data: + qs = qs.filter(date__lt=datetime.datetime.strptime(data['to'], '%d.%m.%Y').date()) + if qs: + res = {'cnt':qs.aggregate(cnt=Sum('cnt'))['cnt'], 'subscr':qs[0].get_subscr(), 'active':qs[0].get_active()} + else: + res = {'cnt':0, 'subscr':0, 'active':0} + return self.render_to_response({'object':res}) + diff --git a/templates/admin/newsletters/contact_list.html b/templates/admin/newsletters/contact_list.html index bcc4b901..4068c5db 100644 --- a/templates/admin/newsletters/contact_list.html +++ b/templates/admin/newsletters/contact_list.html @@ -89,19 +89,19 @@ - +
- +
- {{ form.active }} + {{ form.not_active }}
- +
- +
- {{ form.valid }} + {{ form.not_valid }}
@@ -211,7 +211,7 @@ window.location = href+get_param; } }) - }) + {% endblock %} \ No newline at end of file diff --git a/templates/admin/newsletters/newsletter_list.html b/templates/admin/newsletters/newsletter_list.html index 6896a421..375efdef 100644 --- a/templates/admin/newsletters/newsletter_list.html +++ b/templates/admin/newsletters/newsletter_list.html @@ -37,7 +37,7 @@ История {% if item.status == item.SENT or item.status == item.CANCELED %}Статистика{% endif %} - x + {% endfor %} diff --git a/templates/admin/newsletters/newsletter_object.html b/templates/admin/newsletters/newsletter_object.html index 5f764932..babcaa3f 100644 --- a/templates/admin/newsletters/newsletter_object.html +++ b/templates/admin/newsletters/newsletter_object.html @@ -11,7 +11,11 @@ $('select').select2({width: "element"}); //$('#id_country').select2({width: "element"}); - + $('#id_sending_date').datetimepicker({ + todayHighlight: true, + format : 'dd.mm.yyyy', + minView:2 + }); }) diff --git a/templates/admin/newsletters/popup_count.html b/templates/admin/newsletters/popup_count.html new file mode 100644 index 00000000..e58cd809 --- /dev/null +++ b/templates/admin/newsletters/popup_count.html @@ -0,0 +1,63 @@ +{% extends 'admin/base.html' %} +{% load staticfiles %} + +{% block styles %} + .margin-sides-15px{ + margin-left:15px; + margin-rigth:15px; + } +{% endblock %} + +{% block body %} + +
+
+

Статистика показов попапов

+
+
+
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
Показов{{ object.cnt }}
Подписалось{{ object.subscr }}
Подтверждено{{ object.active }}
+ +
+ {# pagination #} + {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} +
+ +{% endblock %} + diff --git a/templates/client/popups/announce_subscription.html b/templates/client/popups/announce_subscription.html index fc63f17c..a603d2fc 100644 --- a/templates/client/popups/announce_subscription.html +++ b/templates/client/popups/announce_subscription.html @@ -1,8 +1,8 @@ {% load static %} {% load i18n %} {% load template_filters %} -{% if not request.COOKIES.subscribe_popup %} - {% if not user.contact_set.exists %} +{% if not request.COOKIES.subscribe_popup %}#} + {% if not user.contact_set.exists %}#}