remotes/origin/1203
Ivan 10 years ago
parent 234e23010e
commit bac139099b
  1. 4
      emencia/django/newsletter/admin_urls.py
  2. 18
      emencia/django/newsletter/forms.py
  3. 21
      emencia/django/newsletter/models.py
  4. 2
      emencia/django/newsletter/urls/tracking.py
  5. 47
      emencia/django/newsletter/views/admin_views.py
  6. 14
      templates/admin/newsletters/contact_list.html
  7. 2
      templates/admin/newsletters/newsletter_list.html
  8. 6
      templates/admin/newsletters/newsletter_object.html
  9. 63
      templates/admin/newsletters/popup_count.html
  10. 19
      templates/client/popups/announce_subscription.html

@ -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'),
)

@ -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

@ -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()

@ -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<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)\.(?P<format>png|gif|jpg)$',
'view_newsletter_tracking',
name='newsletter_newsletter_tracking'),

@ -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')
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})

@ -89,19 +89,19 @@
</div>
</div>
<!-- Submit newsletter -->
<!-- not active -->
<div class="control-group">
<label class="control-label" for="id_active">{{ form.active.label }}</label>
<label class="control-label" for="id_not_active">{{ form.not_active.label }}</label>
<div class="controls">
{{ form.active }}
{{ form.not_active }}
</div>
</div>
<!-- Valid email -->
<!-- not Valid email -->
<div class="control-group">
<label class="control-label" for="id_area">{{ form.valid.label }}</label>
<label class="control-label" for="id_not_valid">{{ form.not_valid.label }}</label>
<div class="controls">
{{ form.valid }}
{{ form.not_valid }}
</div>
</div>
@ -211,7 +211,7 @@
window.location = href+get_param;
}
})
})
</script>
{% endblock %}

@ -37,7 +37,7 @@
<td><a href="{% url 'newsletters_newsletters_history' item.id %}">История</a> </td>
<td>{% if item.status == item.SENT or item.status == item.CANCELED %}<a href="{% url 'newsletters_newsletters_stat' item.id %}">Статистика</a>{% endif %}</td>
<td><a class="btn btn-danger btn-mini" href="{% url 'newsletters_newsletters_delete' item.id %}">x</a> </td>
<td><a class="btn btn-close btn-round btn-danger" href="{% url 'newsletters_newsletters_delete' item.id %}"><i class="icon-remove"></i></a> </td>
</tr>
{% endfor %}
</tbody>

@ -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
});
})
</script>

@ -0,0 +1,63 @@
{% extends 'admin/base.html' %}
{% load staticfiles %}
{% block styles %}
.margin-sides-15px{
margin-left:15px;
margin-rigth:15px;
}
{% endblock %}
{% block body %}
<div class="box span10">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Статистика показов попапов</h2>
</div>
<div class="box-content">
<form id="id_form" class="form-inline">
<div class="control-group">
<label for="from">С: </label><input type="text" name="from" class="filter-date margin-sides-15px">
<label for="to">По: </label><input type="text" name="to" class="filter-date margin-sides-15px">
<button id="submit" class="btn btn-primary margin-sides-15px">Фильтровать</button>
</div>
</form>
<table class="table table-hover table table-bordered table-striped">
<colgroup>
<col width="33%">
<col width="33%">
<col width="33%">
</colgroup>
<tbody>
<tr>
<td>Показов</td>
<td>{{ object.cnt }}</td>
</tr>
<tr>
<td>Подписалось</td>
<td>{{ object.subscr }}</td>
</tr>
<tr>
<td>Подтверждено</td>
<td>{{ object.active }}</td>
</tr>
</tbody>
</table>
</div>
{# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div>
<script>
$(document).ready(function(){
$(".filter-date").datetimepicker({
todayHighlight: true,
format: 'dd.mm.yyyy',
minView: 2
});
});
</script>
{% endblock %}

@ -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 %}#}
<div id="pw-subscribe-popup" class="popup-window subscribe-modal">
<header class="clearfix">
<div class="step1">
@ -63,17 +63,24 @@
$(function() {
setCookie('subscribe_popup', '1', 30);
setTimeout(function(){
setCookie('subscribe_popup', '1', 30);
$.ajax({
url:'/newsletters/tracking/newsletter/count-popup/',
data: $("#subscribe-form").serialize(),
async: true,
dataType: 'text',
method: "GET"
}).done(function(){});
$.fancybox.open(
[{href: '#pw-subscribe-popup'}],
{}
);
}, 1000);
});
});
</script>
{% else %}
<script>

Loading…
Cancel
Save