Merge branch 'newsletter' of git.general-servers.com:expomap/expomap into newsletter

remotes/origin/1203
Nazar Kotjuk 10 years ago
commit 995955e308
  1. 4
      emencia/django/newsletter/admin_urls.py
  2. 9
      emencia/django/newsletter/forms.py
  3. 19
      emencia/django/newsletter/models.py
  4. 30
      emencia/django/newsletter/views/admin_views.py
  5. 8
      templates/admin/expobanner/main_stat.html
  6. 59
      templates/admin/newsletters/contact_list.html
  7. 4
      templates/admin/newsletters/newsletter_list.html

@ -2,12 +2,13 @@ from django.conf.urls import url
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
DeleteMailingList, ImportContacts, NewsletterHistory, NewsletterStatistics, NewsletterCloneView,ContactQueryDelete
urlpatterns = patterns('',
url(r'^newsletters/all/$', NewsletterListView.as_view(), name='newsletters_newsletters_list'),
url(r'^newsletters/(?P<pk>\d+)/edit/$', NewsletterUpdate.as_view(), name='newsletters_newsletters_update'),
url(r'^newsletters/(?P<pk>\d+)/clone/$', NewsletterCloneView.as_view(), name='newsletters_newsletters_clone'),
url(r'^newsletters/(?P<pk>\d+)/history/', NewsletterHistory.as_view(), name='newsletters_newsletters_history'),
url(r'^newsletters/(?P<pk>\d+)/statistics/', NewsletterStatistics.as_view(), name='newsletters_newsletters_stat'),
url(r'^newsletters/(?P<pk>\d+)/test/$',
@ -24,6 +25,7 @@ urlpatterns = patterns('',
url(r'^contact/(?P<pk>\d+)/edit/', UpdateContact.as_view(), name='newsletters_contact_update'),
url(r'^contact/(?P<pk>\d+)/delete/', DeleteContact.as_view(), name='newsletters_contact_delete'),
url(r'^contact/all/$', ContactList.as_view(), name='newsletters_contact_list'),
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'),
)

@ -90,6 +90,8 @@ class ContactSettingsForm(forms.ModelForm):
return Theme.objects.none()
from datetime import datetime
class ContactFilterForm(forms.Form):
email = forms.EmailField(
label="Email",
@ -122,6 +124,8 @@ class ContactFilterForm(forms.Form):
label="Список рассылки",
required=False
)
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)
@ -151,7 +155,10 @@ class ContactFilterForm(forms.Form):
if self.cleaned_data.get('valid'):
title = 'valid e-mail ' + title
qs = qs.filter(valid=True)
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"))
return qs, title

@ -4,6 +4,7 @@ from smtplib import SMTP
from datetime import datetime
from datetime import timedelta
from email.MIMEImage import MIMEImage
import copy
from django.core.mail import EmailMessage
from django.template import Context
@ -387,6 +388,24 @@ class Newsletter(models.Model):
return unicode(item[1])
return 'bug'
def clone(self):
clone = copy.copy(self)
clone.id = None
clone.title+=u"_копия"
clone.slug += "c"
clone.status = Newsletter.DRAFT
clone.save()
cloned_attachments = [copy.copy(a) for a in list(self.attachment_set.all())]
for a in cloned_attachments:
a.id = None
a.save()
a.newsletter = clone
a.save()
clone.test_contacts = self.test_contacts.all()
clone.save()
return clone
def __unicode__(self):
return self.title

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from django.views.generic import CreateView, ListView, UpdateView, DeleteView, FormView, DetailView
from django.views.generic import CreateView, ListView, UpdateView, DeleteView, FormView, DetailView, RedirectView
from django.conf import settings
from django.utils import translation
from django.utils.translation import ugettext_lazy as _
@ -55,6 +55,23 @@ class ContactList(FormView):
return context
class ContactQueryDelete(RedirectView):
url = reverse_lazy('newsletters_contact_list')
filter_form = ContactFilterForm
def get(self, request, *args, **kwargs):
form = self.filter_form(request.GET)
if form.is_valid():
qs,_ = form.filter()
qs.delete()
return HttpResponseRedirect(self.url)
else:
return HttpResponse('400')
class DeleteContact(DeleteView):
model = Contact
success_url = reverse_lazy('newsletters_contact_list')
@ -289,3 +306,14 @@ class ImportContacts(FormView):
form.save()
return HttpResponseRedirect(self.get_success_url())
class NewsletterCloneView(RedirectView):
url = reverse_lazy("newsletters_newsletters_list")
def get(self, request, *args, **kwargs):
newsletter = get_object_or_404(Newsletter, id=kwargs['pk'])
newsletter.clone()
return HttpResponseRedirect(self.url)
def post(self, request, *args, **kwargs):
return self.get(request, *args, **kwargs)

@ -2,13 +2,7 @@
{% load static %}
{% load i18n %}
{% block scripts %}
{# datetimepicker #}
<script type="text/javascript">
console.log("2");
</script>
<script src="{% static 'js/jquery.dataTables.min.js' %}"></script>
<script src="{% static 'js/jquery.dataTables.min.js' %}"></script>
{% endblock %}

@ -1,5 +1,15 @@
{% extends 'admin/base.html' %}
{% load staticfiles %}
{% block styles %}
#delete-all-button{
min-width:75px;
padding-left:2px;
padding-right:2px;
}
.yellow{
background-image: linear-gradient(#E7FF1D, #E7FF1D 5%, #E9F399);
}
{% endblock %}
{% block body %}
<div class="box span10">
@ -10,7 +20,7 @@
<form class="form-horizontal" method="get">
<fieldset>
<!-- Form Name -->
<legend>Filter subscribers <i class="icon-circle-arrow-down"></i></legend>
<legend>Фильтровать контакты <i class="icon-circle-arrow-down"></i> - {{ object_list.paginator.count }} результатов</legend>
<div class="toggled">
<!-- Email -->
@ -61,6 +71,24 @@
</div>
</div>
<!-- Created from -->
<div class="control-group">
<label class="control-label" for="id_created_from">{{ form.created_from.label }}</label>
<div class="controls">
{{ form.created_from }}
</div>
</div>
<!-- Created to -->
<div class="control-group">
<label class="control-label" for="id_created_to">{{ form.created_to.label }}</label>
<div class="controls">
{{ form.created_to }}
</div>
</div>
<!-- Submit newsletter -->
<div class="control-group">
<label class="control-label" for="id_active">{{ form.active.label }}</label>
@ -82,9 +110,9 @@
<label class="control-label" for="submit"></label>
<div class="controls">
<button id="submit" class="btn btn-primary">Фильтровать </button>
<a href="{% url 'export_contacts' %}" id="export" class="btn btn-warning">Экспорт в xls <i class="icon-circle-arrow-down"></i></a>
<a href="{% url 'newsletters_mailinglist_create' %}" id="mailinglist" class="btn btn-success">Создать сп. рассылки <i class="icon-list"></i></a>
<button id="submit" class="btn btn-primary">Фильтровать</button>
<a href="{% url 'export_contacts' %}" id="export" class="btn yellow">Экспорт<i class="icon-circle-arrow-down"></i></a>
<a href="{% url 'newsletters_mailinglist_create' %}" id="mailinglist" class="btn btn-success" data-toggle="tooltip" data-placement="top" title="Создает новый список рассылки с отфильтрованими контактами">Сп.рассылки <i class="icon-list"></i></a>
</div>
</div>
</div>
@ -104,7 +132,7 @@
<th>Дата создания</th>
<th>Дата редактирования</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th><a class="btn btn-danger" id="delete-all-button" href="{% url 'newsletters_contact_query_delete' %}" data-toggle="tooltip" data-placement="top" title="Удалит ВСЕ контакты из результата поиска!(не только на первой странице)">Удалить все</a></th>
</tr>
</thead>
<tbody>
@ -162,7 +190,28 @@
$('#mailinglist').on('click', function(event){
event.preventDefault();
window.location = "{% url 'newsletters_mailinglist_create' %}" + get_param;
});
$('#id_created_from').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
$('#id_created_to').datetimepicker({
todayHighlight: true,
format : 'dd.mm.yyyy',
minView:2
});
$('[data-toggle="tooltip"]').tooltip();
$('#delete-all-button').on('click', function(event){
event.preventDefault();
if(confirm("Удалить записи?")) {
var get_param = window.location.search;
var href = $(this).attr('href');
window.location = href+get_param;
}
})
})
</script>
{% endblock %}

@ -20,6 +20,7 @@
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
@ -29,7 +30,8 @@
<td>{{ item.mailing_list }}</td>
<td>{{ item.get_status_text }}</td>
<td>{{ item.sending_date|date:"Y-m-d H:i" }}</td>
<td><a href="{% url 'newsletters_newsletters_send_test' item.id %}">тест</a> </td>
<td><a href="{% url 'newsletters_newsletters_send_test' item.id %}">Тест</a> </td>
<td><a href="{% url 'newsletters_newsletters_clone' item.id %}">Clone</a> </td>
<td><a href="{% url 'newsletters_newsletters_update' 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>

Loading…
Cancel
Save