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. 45
      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,\ from emencia.django.newsletter.views.admin_views import ContactList, UpdateContact, MailingListView, UpdateMailingList,\
CreateMailingList, NewsletterListView, NewsletterCreate, ExportContacts, DeleteContact, NewsletterUpdate, \ CreateMailingList, NewsletterListView, NewsletterCreate, ExportContacts, DeleteContact, NewsletterUpdate, \
DeleteMailingList, ImportContacts, NewsletterHistory, NewsletterStatistics, NewsletterCloneView,ContactQueryDelete,\ DeleteMailingList, ImportContacts, NewsletterHistory, NewsletterStatistics, NewsletterCloneView,ContactQueryDelete,\
NewsletterDelete NewsletterDelete, PopupStatisticsView
urlpatterns = patterns('', urlpatterns = patterns('',
@ -30,4 +30,6 @@ urlpatterns = patterns('',
url(r'^contact/delete-query/$', ContactQueryDelete.as_view(), name='newsletters_contact_query_delete'), 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/export/$', ExportContacts.as_view(), name='export_contacts'),
url(r'^contact/import/$', ImportContacts.as_view(), name='import_newsletters_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_from = forms.CharField(max_length=255, label="Создан с", required=False)
created_to = forms.CharField(max_length=255, label="Создан по", required=False) created_to = forms.CharField(max_length=255, label="Создан по", required=False)
active = forms.BooleanField(label="Подтверждена подписка", required=False) not_active = forms.BooleanField(label="Не подтверждена подписка", required=False)
valid = forms.BooleanField(label="Валидный Email", required=False) not_valid = forms.BooleanField(label="Неалидный Email", required=False)
def filter(self): def filter(self):
title = 'contact list ' title = 'contact list '
@ -149,16 +149,16 @@ class ContactFilterForm(forms.Form):
if self.cleaned_data.get('area'): if self.cleaned_data.get('area'):
qs = qs.filter(contactsettings__area__id__in=self.cleaned_data['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'])]) 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'): if self.cleaned_data.get('not_active'):
title = ' active ' + title title = ' not active ' + title
qs = qs.filter(activated=True) qs = qs.filter(activated=False)
if self.cleaned_data.get('valid'): if self.cleaned_data.get('not_valid'):
title = 'valid e-mail ' + title title = 'not valid e-mail ' + title
qs = qs.filter(valid=True) qs = qs.filter(valid=False)
if self.cleaned_data.get("created_from"): if self.cleaned_data.get("created_from"):
qs = qs.filter(creation_date__gte=datetime.strptime(self.cleaned_data['created_from'], "%d.%m.%Y")) qs = qs.filter(creation_date__gte=datetime.strptime(self.cleaned_data['created_from'], "%d.%m.%Y"))
if self.cleaned_data.get("created_to"): 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 return qs, title

@ -552,3 +552,24 @@ class WorkGroup(models.Model):
class Meta: class Meta:
verbose_name = _('workgroup') verbose_name = _('workgroup')
verbose_name_plural = _('workgroups') 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""" """Urls for the emencia.django.newsletter Tracking"""
from django.conf.urls import url from django.conf.urls import url
from django.conf.urls import patterns from django.conf.urls import patterns
from ..views.admin_views import count_popups
urlpatterns = patterns('emencia.django.newsletter.views.tracking', 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)$', url(r'^newsletter/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)\.(?P<format>png|gif|jpg)$',
'view_newsletter_tracking', 'view_newsletter_tracking',
name='newsletter_newsletter_tracking'), name='newsletter_newsletter_tracking'),

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # -*- 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.conf import settings
from django.utils import translation from django.utils import translation
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -320,7 +320,50 @@ class NewsletterHistory(ListView):
return context return context
class NewsletterDelete(DeleteView): class NewsletterDelete(DeleteView):
model = Newsletter model = Newsletter
template_name = 'admin/newsletters/confirm_delete.html' 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>
</div> </div>
<!-- Submit newsletter --> <!-- not active -->
<div class="control-group"> <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"> <div class="controls">
{{ form.active }} {{ form.not_active }}
</div> </div>
</div> </div>
<!-- Valid email --> <!-- not Valid email -->
<div class="control-group"> <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"> <div class="controls">
{{ form.valid }} {{ form.not_valid }}
</div> </div>
</div> </div>
@ -211,7 +211,7 @@
window.location = href+get_param; window.location = href+get_param;
} }
}) })
}) })
</script> </script>
{% endblock %} {% endblock %}

@ -37,7 +37,7 @@
<td><a href="{% url 'newsletters_newsletters_history' item.id %}">История</a> </td> <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>{% 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> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

@ -11,7 +11,11 @@
$('select').select2({width: "element"}); $('select').select2({width: "element"});
//$('#id_country').select2({width: "element"}); //$('#id_country').select2({width: "element"});
$('#id_sending_date').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
}) })
</script> </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 static %}
{% load i18n %} {% load i18n %}
{% load template_filters %} {% load template_filters %}
{% if not request.COOKIES.subscribe_popup %} {% if not request.COOKIES.subscribe_popup %}#}
{% if not user.contact_set.exists %} {% if not user.contact_set.exists %}#}
<div id="pw-subscribe-popup" class="popup-window subscribe-modal"> <div id="pw-subscribe-popup" class="popup-window subscribe-modal">
<header class="clearfix"> <header class="clearfix">
<div class="step1"> <div class="step1">
@ -63,17 +63,24 @@
$(function() { $(function() {
setCookie('subscribe_popup', '1', 30);
setTimeout(function(){ 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( $.fancybox.open(
[{href: '#pw-subscribe-popup'}], [{href: '#pw-subscribe-popup'}],
{} {}
); );
}, 1000); }, 1000);
});
});
</script> </script>
{% else %} {% else %}
<script> <script>

Loading…
Cancel
Save