From f668a6eaea342df34ff1d90e458183b9dd0c920f Mon Sep 17 00:00:00 2001 From: Ivan Kovalkovskyi Date: Thu, 15 Oct 2015 15:32:30 +0300 Subject: [PATCH] integration contact list with mailing list --- emencia/django/newsletter/admin_urls.py | 5 +- emencia/django/newsletter/forms.py | 52 ++++++++++++++----- .../django/newsletter/views/admin_views.py | 15 ++++++ .../admin/newsletters/confirm_delete.html | 2 +- templates/admin/newsletters/contact_list.html | 27 +++++++++- templates/admin/newsletters/mailing_list.html | 12 +++++ 6 files changed, 95 insertions(+), 18 deletions(-) diff --git a/emencia/django/newsletter/admin_urls.py b/emencia/django/newsletter/admin_urls.py index aafff25d..7a1b0aa9 100644 --- a/emencia/django/newsletter/admin_urls.py +++ b/emencia/django/newsletter/admin_urls.py @@ -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\d+)/edit/', UpdateMailingList.as_view(), name='newsletters_mailinglist_update'), + url(r'^mailinglist/(?P\d+)/', DeleteMailingList.as_view(), name='newsletters_mailinglist_delete'), url(r'^mailinglist/', CreateMailingList.as_view(), name='newsletters_mailinglist_create'), url(r'^contact/(?P\d+)/edit/', UpdateContact.as_view(), name='newsletters_contact_update'), diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py index c73f0636..610fdd70 100644 --- a/emencia/django/newsletter/forms.py +++ b/emencia/django/newsletter/forms.py @@ -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'])]) diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index a4794c11..b29828d4 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -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 diff --git a/templates/admin/newsletters/confirm_delete.html b/templates/admin/newsletters/confirm_delete.html index b2884763..434d1b61 100644 --- a/templates/admin/newsletters/confirm_delete.html +++ b/templates/admin/newsletters/confirm_delete.html @@ -3,7 +3,7 @@ {% block body %}
{% csrf_token %}
-

Вы точно хотите удалить "{{ object.contact.name }}" ?

+

Вы точно хотите удалить "{{ object.contact.name }}{{ object.name }}" ?

Нет
diff --git a/templates/admin/newsletters/contact_list.html b/templates/admin/newsletters/contact_list.html index 003dd7c9..a0f2ee40 100644 --- a/templates/admin/newsletters/contact_list.html +++ b/templates/admin/newsletters/contact_list.html @@ -37,6 +37,14 @@ + +
+ +
+ {{ form.city }} +
+
+
@@ -45,6 +53,14 @@
+ +
+ +
+ {{ form.mailinglist }} +
+
+
@@ -66,8 +82,9 @@
@@ -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; }) }) diff --git a/templates/admin/newsletters/mailing_list.html b/templates/admin/newsletters/mailing_list.html index 3a040807..d67fea8d 100644 --- a/templates/admin/newsletters/mailing_list.html +++ b/templates/admin/newsletters/mailing_list.html @@ -9,6 +9,14 @@
+ + + + + + + + @@ -16,6 +24,8 @@ + + @@ -26,6 +36,8 @@ + + {% endfor %}
Подписчиков Отписалось    
{{ item.unsubscribers_count }} Изменить Удалить Подписчики