integration contact list with mailing list

remotes/origin/1203
Ivan Kovalkovskyi 10 years ago
parent 1972ffed09
commit f668a6eaea
  1. 5
      emencia/django/newsletter/admin_urls.py
  2. 52
      emencia/django/newsletter/forms.py
  3. 15
      emencia/django/newsletter/views/admin_views.py
  4. 2
      templates/admin/newsletters/confirm_delete.html
  5. 27
      templates/admin/newsletters/contact_list.html
  6. 12
      templates/admin/newsletters/mailing_list.html

@ -1,9 +1,7 @@
from django.conf.urls import url
from django.conf.urls import include
from django.conf.urls import patterns
from django.http import HttpResponse
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
urlpatterns = patterns('',
@ -17,6 +15,7 @@ urlpatterns = patterns('',
url(r'^mailinglist/all/$', MailingListView.as_view(), name='newsletters_mailinglist'),
url(r'^mailinglist/(?P<pk>\d+)/edit/', UpdateMailingList.as_view(), name='newsletters_mailinglist_update'),
url(r'^mailinglist/(?P<pk>\d+)/', DeleteMailingList.as_view(), name='newsletters_mailinglist_delete'),
url(r'^mailinglist/', CreateMailingList.as_view(), name='newsletters_mailinglist_create'),
url(r'^contact/(?P<pk>\d+)/edit/', UpdateContact.as_view(), name='newsletters_contact_update'),

@ -8,6 +8,7 @@ from emencia.django.newsletter.models import MailingList
from functions.form_check import translit_with_separator as tr
from theme.models import Theme
from country.models import Country, Area
from city.models import City
class MailingListSubscriptionForm(forms.ModelForm):
@ -83,29 +84,56 @@ class ContactSettingsForm(forms.ModelForm):
class ContactFilterForm(forms.Form):
email = forms.EmailField(label="Email", max_length=255, required=False,
widget=forms.TextInput(attrs={'class':'input-xlarge search-query','placeholder':'Email'}))
theme = forms.MultipleChoiceField(label="Тематика", choices = [(t.id, t.name) for t in Theme.objects.language()],
required=False)
country = forms.MultipleChoiceField(label="Страна",
choices = [(c.id, c.name) for c in list(set(Country.objects.language('ru').all()))],
required=False)
area = forms.MultipleChoiceField(label="Area", choices = [(c.id, c.name) for c in list(set(Area.objects.language()))],
required=False)
email = forms.EmailField(
label="Email",
max_length=255,
required=False,
widget=forms.TextInput(attrs={'class':'input-xlarge search-query','placeholder': 'Email'})
)
theme = forms.MultipleChoiceField(
label="Тематика",
choices=[(t.id, t.name) for t in Theme.objects.language()],
required=False
)
country = forms.MultipleChoiceField(
label="Страна",
choices=[(c.id, c.name) for c in list(set(Country.objects.language('ru').all()))],
required=False
)
city = forms.MultipleChoiceField(
label="Город",
choices=[(c.id, c.name) for c in list(set(City.objects.language('ru').filter(contactsettings__isnull=False)))],
required=False
)
area = forms.MultipleChoiceField(
label="Area", choices=[(c.id, c.name) for c in list(set(Area.objects.language()))],
required=False
)
mailinglist = forms.ChoiceField(
choices=[(ml.id, ml.name) for ml in MailingList.objects.all()],
label="Список рассылки",
required=False
)
active = forms.BooleanField(label="Подтверждена подписка", required=False)
valid = forms.BooleanField(label="Валидный Email", required=False)
def filter(self):
title = 'contact list '
qs = Contact.objects.all()
if self.cleaned_data.get('mailinglist'):
qs = qs.filter(mailinglist_subscriber__id=self.cleaned_data['mailinglist'])
title += " mailinglist: %s" % MailingList.objects.get(id=self.cleaned_data['mailinglist']).name
if self.cleaned_data.get('country'):
qs = qs.filter(contactsettings__country__id__in=self.cleaned_data['country'])
title += " countries: %s" % ','.join([obj.url for obj in Country.objects.language().filter(id__in=self.cleaned_data['country'])])
if self.cleaned_data.get('email'):
qs = qs.filter(email__icontains=self.cleaned_data['email'])
if self.cleaned_data.get('theme'):
qs = qs.filter(contactsettings__theme__id__in=self.cleaned_data['theme'])
title += " themes: %s" % ','.join([obj.url for obj in Theme.objects.language().filter(id__in=self.cleaned_data['theme'])])
if self.cleaned_data.get('country'):
qs = qs.filter(contactsettings__country__id__in=self.cleaned_data['country'])
title += " countries: %s" % ','.join([obj.url for obj in Country.objects.language().filter(id__in=self.cleaned_data['country'])])
if self.cleaned_data.get('city'):
qs = qs.filter(contactsettings__city__id__in=self.cleaned_data['city'])
title += " cities: %s" % ','.join([obj.url for obj in Country.objects.language().filter(id__in=self.cleaned_data['country'])])
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'])])

@ -87,6 +87,12 @@ class MailingListView(ListView):
template_name = 'admin/newsletters/mailing_list.html'
class DeleteMailingList(DeleteView):
model = MailingList
template_name = 'admin/newsletters/confirm_delete.html'
success_url = reverse_lazy('newsletters_mailinglist')
class UpdateMailingList(UpdateView):
model = MailingList
form_class = MailingListForm
@ -100,6 +106,15 @@ class CreateMailingList(CreateView):
template_name = 'admin/newsletters/mailing_list_object.html'
success_url = '/admin/newsletters/mailinglist/all/'
def form_valid(self, form):
obj = form.save()
form = ContactFilterForm(self.request.GET)
if form.is_valid():
contacts, _ = form.filter()
obj.subscribers = contacts
obj.save()
return HttpResponseRedirect(self.success_url)
from django.forms.models import modelformset_factory

@ -3,7 +3,7 @@
{% block body %}
<form action="" method="post">{% csrf_token %}
<div class="controls">
<p>Вы точно хотите удалить "{{ object.contact.name }}" ?</p>
<p>Вы точно хотите удалить "{{ object.contact.name }}{{ object.name }}" ?</p>
<input class="btn btn-large btn-danger delete" type="submit" value="Да" />
<a class="btn btn-large btn-primary" href = {% url 'newsletters_contact_list' %}>Нет</a>
</div>

@ -37,6 +37,14 @@
</div>
</div>
<!-- City -->
<div class="control-group">
<label class="control-label" for="id_city">{{ form.city.label }}</label>
<div class="controls">
{{ form.city }}
</div>
</div>
<!-- Area -->
<div class="control-group">
<label class="control-label" for="id_area">{{ form.area.label }}</label>
@ -45,6 +53,14 @@
</div>
</div>
<!-- Mailing list -->
<div class="control-group">
<label class="control-label" for="id_mailinglist">{{ form.mailinglist.label }}</label>
<div class="controls">
{{ form.mailinglist }}
</div>
</div>
<!-- Submit newsletter -->
<div class="control-group">
<label class="control-label" for="id_active">{{ form.active.label }}</label>
@ -66,8 +82,9 @@
<label class="control-label" for="submit"></label>
<div class="controls">
<button id="submit" class="btn btn-primary">Filter</button>
<a href="{% url 'export_contacts' %}" id="export" class="btn btn-warning">Export to xls <i class="icon-circle-arrow-down"></i></a>
<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>
</div>
</div>
</div>
@ -125,7 +142,9 @@
$(document).ready(function () {
$("#id_theme").select2({width: 283, placeholder: 'Тематики'});
$("#id_country").select2({width: 283, placeholder: 'Страны'});
$("#id_city").select2({width: 283, placeholder: 'Города'});
$("#id_area").select2({width: 283, placeholder: 'Географическая зона'});
$("#id_mailinglist").select2({width: 283, placeholder: 'Список рассылки'});
var get_param = window.location.search;
if (!get_param) {
$('.toggled').collapse('hide');
@ -136,6 +155,10 @@
$('#export').on('click', function(event){
event.preventDefault();
window.location = "{% url 'export_contacts' %}" + get_param;
});
$('#mailinglist').on('click', function(event){
event.preventDefault();
window.location = "{% url 'newsletters_mailinglist_create' %}" + get_param;
})
})
</script>

@ -9,6 +9,14 @@
<div class="box-content">
<table class="table table-hover">
<colgroup>
<col width="30%">
<col width="20%">
<col width="20%">
<col width="10%">
<col width="10%">
<col width="10%">
</colgroup>
<thead>
<tr>
@ -16,6 +24,8 @@
<th>Подписчиков</th>
<th>Отписалось</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
@ -26,6 +36,8 @@
<td>{{ item.unsubscribers_count }}</td>
<td><a href="{% url 'newsletters_mailinglist_update' item.id %}">Изменить</a> </td>
<td><a href="{% url 'newsletters_mailinglist_delete' item.id %}">Удалить</a> </td>
<td><a href="{% url 'newsletters_contact_list' %}?mailinglist={{ item.id }}">Подписчики</a> </td>
</tr>
{% endfor %}
</tbody>

Loading…
Cancel
Save