From 76b2610b804261d5a5f3428338f7f61950e5f5ee Mon Sep 17 00:00:00 2001 From: Nazar Kotjuk Date: Tue, 13 Oct 2015 23:28:48 +0300 Subject: [PATCH] Sending block complete --- article/admin_urls.py | 7 ------- emencia/django/newsletter/mailer.py | 20 ++++++++++++------- emencia/django/newsletter/models.py | 16 ++++++++++----- .../django/newsletter/views/admin_views.py | 9 +++------ emencia/django/newsletter/views/tracking.py | 15 ++++++-------- templates/admin/includes/admin_nav.html | 4 ++-- 6 files changed, 35 insertions(+), 36 deletions(-) diff --git a/article/admin_urls.py b/article/admin_urls.py index ed180fb2..6c0bc9af 100644 --- a/article/admin_urls.py +++ b/article/admin_urls.py @@ -3,18 +3,11 @@ from django.conf.urls import patterns, url from admin import BlogList, BlogView, NewsList, NewsView, ArticleDeleteView urlpatterns = patterns('article.admin', - - #url(r'^add/$', 'article_add'), - #url(r'^delete/(?P.*)/$', 'article_delete'), - #url(r'^change/(.*)/$', 'article_change'), - #url(r'^copy/(.*)/$', 'article_copy'), - #url(r'^all/$', 'article_all'), url(r'^blog/all/$', BlogList.as_view()), url(r'^blog/$', BlogView.as_view()), url(r'^delete/(?P.*)/$', ArticleDeleteView.as_view()), url(r'^news/all/$', NewsList.as_view()), url(r'^news/$', NewsView.as_view()), - url(r'^blog/(?P.*)/$', BlogView.as_view()), url(r'^news/(?P.*)/$', NewsView.as_view()), ) \ No newline at end of file diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py index 07308d8e..53be1f93 100644 --- a/emencia/django/newsletter/mailer.py +++ b/emencia/django/newsletter/mailer.py @@ -184,7 +184,7 @@ class NewsLetterSender(object): return attachments def build_announce_attachments(self, context): - # todo: move hardcoded prefixes to setting + # todo: move hardcoded prefixes to setting (uses in templates) events = context['events'] news = context.get('news') blogs = context.get('blogs') @@ -236,8 +236,6 @@ class NewsLetterSender(object): return message_attachment - - def build_title_content(self, contact): """Generate the email title for a contact""" context = Context({'contact': contact, @@ -310,10 +308,18 @@ class NewsLetterSender(object): if self.test: return self.newsletter.test_contacts.all() - already_sent = ContactMailingStatus.objects.filter(status=ContactMailingStatus.SENT, - newsletter=self.newsletter).values_list('contact__id', flat=True) - expedition_list = self.newsletter.mailing_list.expedition_set().exclude(id__in=already_sent) - return expedition_list + if self.announce: + already_sent = ContactMailingStatus.objects\ + .filter(status__in=(ContactMailingStatus.SENT, ContactMailingStatus.ANNOUNCE_NO_DATA), + newsletter=self.newsletter)\ + .values_list('contact__id', flat=True) + expedition_list = self.newsletter.mailing_list.expedition_set().exclude(id__in=already_sent) + return expedition_list + else: + already_sent = ContactMailingStatus.objects.filter(status=ContactMailingStatus.SENT, + newsletter=self.newsletter).values_list('contact__id', flat=True) + expedition_list = self.newsletter.mailing_list.expedition_set().exclude(id__in=already_sent) + return expedition_list def update_contact_status(self, contact, exception, send): if not send: diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py index f60497cd..dfbca0e3 100644 --- a/emencia/django/newsletter/models.py +++ b/emencia/django/newsletter/models.py @@ -171,7 +171,7 @@ class Contact(models.Model): return None if country: events = events.filter(country=country) - events = list(events[:3]) + events = list(events[:5]) if events: context = {'themes': themes, 'place': country, 'events': events} @@ -179,10 +179,12 @@ class Contact(models.Model): # no events for announce return None - news = list(Article.objects.news().filter(publish_date__gt=datetime.now()-timedelta(days=7))[:3]) + news = list(Article.objects.news() + .filter(publish_date__gt=datetime.now()-timedelta(days=30), theme__in=theme_ids)[:3]) if news: context['news'] = news - blogs = list(Article.objects.blogs().filter(publish_date__gt=datetime.now()-timedelta(days=7))[:3]) + + blogs = list(Article.objects.blogs()[:1]) if blogs: context['blogs'] = blogs return context @@ -275,8 +277,12 @@ class MailingList(models.Model): def expedition_set(self): unsubscribers_id = self.unsubscribers.values_list('id', flat=True) - return self.subscribers.valid_subscribers().exclude( - id__in=unsubscribers_id) + if not self.announce: + return self.subscribers.valid_subscribers().exclude( + id__in=unsubscribers_id) + else: + return self.subscribers.valid_subscribers().exclude( + id__in=unsubscribers_id).filter(contactsettings__theme__isnull=False) def __unicode__(self): return self.name diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index f389a2d3..a4794c11 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -1,15 +1,14 @@ # -*- coding: utf-8 -*- -from django.views.generic import TemplateView, CreateView, ListView, UpdateView, DeleteView, FormView +from django.views.generic import CreateView, ListView, UpdateView, DeleteView, FormView from django.conf import settings from django.utils.translation import ugettext_lazy as _ -from django.forms.formsets import BaseFormSet, formset_factory +from django.forms.formsets import formset_factory from django.http import HttpResponseRedirect, HttpResponse -from django.core.urlresolvers import reverse_lazy from django.shortcuts import get_object_or_404 +from django.core.urlresolvers import reverse_lazy from HTMLParser import HTMLParseError from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm, AttachmentForm -from django.core.urlresolvers import reverse_lazy from emencia.django.newsletter.mailer import Mailer from ..forms import ContactFilterForm from ..utils.excel import ExcelResponse @@ -24,14 +23,12 @@ class ContactList(FormView): queryset = Contact.objects.all() def get_form(self, form_class): - if self.request.GET: return form_class(self.request.GET) else: return form_class(**self.get_form_kwargs()) def get(self, request, *args, **kwargs): - if request.GET: form_class = self.get_form_class() form = self.get_form(form_class) diff --git a/emencia/django/newsletter/views/tracking.py b/emencia/django/newsletter/views/tracking.py index df4b05cf..60cb62da 100644 --- a/emencia/django/newsletter/views/tracking.py +++ b/emencia/django/newsletter/views/tracking.py @@ -3,11 +3,8 @@ import base64 from urllib import urlencode from urlparse import urlparse from urlparse import urlunparse -# For Python < 2.6 -try: - from urlparse import parse_qs -except ImportError: - from cgi import parse_qs +from urlparse import parse_qs + from django.http import HttpResponse from django.http import HttpResponseRedirect @@ -51,11 +48,11 @@ def view_newsletter_tracking_link(request, slug, uidb36, token, link_id): url_parts = urlparse(link.url) query_dict = parse_qs(url_parts.query) - query_dict.update({'utm_source': 'newsletter_%s' % newsletter.pk, - 'utm_medium': 'mail', - 'utm_campaign': smart_str(newsletter.title)}) + query_dict.update({'utm_source': 'Expomap', + 'utm_medium': 'email', + 'utm_campaign': str(newsletter.sending_date.date())}) url = urlunparse((url_parts.scheme, url_parts.netloc, url_parts.path, - url_parts.params, urlencode(query_dict), url_parts.fragment)) + url_parts.params, urlencode(query_dict, True), url_parts.fragment)) return HttpResponseRedirect(url) diff --git a/templates/admin/includes/admin_nav.html b/templates/admin/includes/admin_nav.html index 3b08664c..5d9c9ced 100644 --- a/templates/admin/includes/admin_nav.html +++ b/templates/admin/includes/admin_nav.html @@ -114,8 +114,8 @@ Рассылка