From 9fad05e86a29feb222733990aaed43318bc6689b Mon Sep 17 00:00:00 2001 From: Alexander Burdeiny Date: Wed, 20 Jul 2016 11:24:06 +0300 Subject: [PATCH] =?UTF-8?q?1462:=20=D0=AD=D1=82=D0=B0=D0=BF=20=E2=84=965:?= =?UTF-8?q?=20=D0=A0=D0=B0=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=20-=20?= =?UTF-8?q?=D0=93=D0=B5=D0=BE=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D1=8B?= =?UTF-8?q?=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=BA=D1=81=D1=82=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B0=D0=BD=D0=BE=D0=BD=D1=81=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- emencia/django/newsletter/mailer.py | 4 +- emencia/django/newsletter/models.py | 66 ++++++++++++------- .../newsletter/announce_template.html | 48 +++++++++++++- 3 files changed, 90 insertions(+), 28 deletions(-) diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py index 172a52a4..072ec830 100644 --- a/emencia/django/newsletter/mailer.py +++ b/emencia/django/newsletter/mailer.py @@ -469,10 +469,10 @@ class Mailer(NewsLetterSender): if self.announce: # check if events for this newsletter exists announce_context = contact.get_announce_context() - if not announce_context: - send = False else: announce_context = None + if not announce_context: + send = False try: # pass diff --git a/emencia/django/newsletter/models.py b/emencia/django/newsletter/models.py index a346e40d..62546b32 100644 --- a/emencia/django/newsletter/models.py +++ b/emencia/django/newsletter/models.py @@ -6,20 +6,21 @@ from datetime import timedelta from email.MIMEImage import MIMEImage import copy -from django.core.mail import EmailMessage -from django.core.validators import MaxValueValidator, MinValueValidator -from django.template import Context from django.db import models -from django.contrib.sites.models import Site -from django.conf import settings +from django.db.models import Q from django.utils.encoding import smart_str -from django.core.urlresolvers import reverse +from django.utils.encoding import force_unicode from django.utils.translation import ugettext_lazy as _ +from django.conf import settings +from django.core.mail import EmailMessage +from django.core.validators import MaxValueValidator, MinValueValidator +from django.core.urlresolvers import reverse +from django.contrib.sites.models import Site from django.contrib.contenttypes import generic from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import Group -from django.utils.encoding import force_unicode from django.template.loader import render_to_string, get_template +from django.template import Context from emencia.django.newsletter.managers import ContactManager @@ -155,38 +156,55 @@ class Contact(models.Model): def get_announce_context(self): from exposition.models import Exposition + from conference.models import Conference from article.models import Article from django.utils.translation import activate activate('ru') - events = Exposition.enable.upcoming() + expo = Exposition.enable.upcoming() + conf = Conference.enable.upcoming() themes = list(self.contactsettings.theme.all()) - try: - country = self.contactsettings.country.all()[0] - except IndexError: - country = None - if themes: - theme_ids = [item.id for item in themes] - events = events.filter(theme__in=theme_ids) - else: - return None - if country: - events = events.filter(country=country) - events = list(events[:5]) + # making query + params = Q() + + countries = self.contactsettings.country.all().values_list('pk', flat=True) + if countries: + params |= Q(country__in=countries) + + cities = self.contactsettings.city.all().values_list('pk', flat=True) + if cities: + params |= Q(country__in=cities) - if events: - context = {'themes': themes, 'place': country, 'events': events} + if themes: + theme_ids = set([item.id for item in themes]) + params &= Q(theme__in=theme_ids) + + expo = list(expo.filter(params)[:5]) + conf = list(conf.filter(params)[:5]) + + if expo or conf: + context = { + 'themes': themes, + 'expo': expo, + 'conf': conf, + } + if expo: + context['expo_places'] = ', '.join(set([x.country.inflect for x in expo])) + if conf: + context['conf_places'] = ', '.join(set([x.country.inflect for x in conf])) else: # no events for announce return None news = list(Article.objects.news() - .filter(publish_date__gt=datetime.now()-timedelta(days=30), theme__in=theme_ids) + .filter(publish_date__gt=datetime.now()-timedelta(days=7), theme__in=theme_ids) .distinct()[:3]) if news: context['news'] = news - blogs = list(Article.objects.blogs()[:1]) + blogs = list(Article.objects.blogs() + .filter(publish_date__gt=datetime.now()-timedelta(days=7)) + .distinct()[:3]) if blogs: context['blogs'] = blogs return context diff --git a/emencia/django/newsletter/templates/newsletter/announce_template.html b/emencia/django/newsletter/templates/newsletter/announce_template.html index c65b56d4..5ce43997 100644 --- a/emencia/django/newsletter/templates/newsletter/announce_template.html +++ b/emencia/django/newsletter/templates/newsletter/announce_template.html @@ -33,10 +33,10 @@ {# end header #} {# events #} - {% with events=events %} + {% with events=expo place=expo_places %} - +
{% trans "Выставки" %}{% if place %} {{ place.inflect }}{% endif %} {% if themes|length == 1 %}{% trans "по тематике" %}:{{ themes.0.name }}{% endif %}{% trans "Выставки" %} {{ place }} {% if themes|length == 1 %}{% trans "по тематике" %}:{{ themes.0.name }}{% endif %}
@@ -75,6 +75,49 @@ {% endwith %} {# end events #} + {# conferencies #} + {% with events=conf place=conf_places %} + + + + + + + +
{% trans "Конференции" %} {{ place }} {% if themes|length == 1 %}{% trans "по тематике" %}:{{ themes.0.name }}{% endif %}
+ + + {% for event in events %} + + + + + + {% endfor %} + +
+ + + + +
+
+

{{ event.name }}

+

{{ event.main_title|safe }}

+ {% trans "добавить в расписание" %} +
{{ event.country.name }}, {{ event.city.name }}{% if event.place %}, {{ event.place.name }}{% endif %}
+
+ {% include 'client/includes/show_date_block.html' with obj=event %} +
+ + + +
+ {% endwith %} + {# end conferencies #} + {% if news %} @@ -117,6 +160,7 @@
{% endif %} + {% if blogs %}