Added subscribes notification
This commit is contained in:
parent
2deb4b3b7f
commit
469a246f49
|
|
@ -9,6 +9,7 @@ from account.models import User
|
|||
from location.models import Country
|
||||
from utils.methods import generate_string_code
|
||||
from utils.models import ProjectBaseMixin, TJSONField, TranslatedFieldsMixin
|
||||
from notification.tasks import send_subscribes_update_email, send_unsubscribe_email
|
||||
|
||||
|
||||
class SubscriptionType(ProjectBaseMixin, TranslatedFieldsMixin):
|
||||
|
|
@ -100,6 +101,8 @@ class Subscriber(ProjectBaseMixin):
|
|||
|
||||
objects = SubscriberManager()
|
||||
|
||||
# todo: Add sending subscribes with update email
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
||||
|
|
@ -116,6 +119,11 @@ class Subscriber(ProjectBaseMixin):
|
|||
"""Unsubscribe user."""
|
||||
self.subscribe_set.update(unsubscribe_date=now())
|
||||
|
||||
if settings.USE_CELERY:
|
||||
send_unsubscribe_email.delay(self.pk)
|
||||
else:
|
||||
send_unsubscribe_email(self.pk)
|
||||
|
||||
@property
|
||||
def send_to(self):
|
||||
"""Actual email."""
|
||||
|
|
|
|||
88
apps/notification/tasks.py
Normal file
88
apps/notification/tasks.py
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
from datetime import datetime
|
||||
|
||||
from celery import shared_task
|
||||
from django.conf import settings
|
||||
from django.core.mail import send_mail
|
||||
from django.template.loader import get_template, render_to_string
|
||||
|
||||
from main.models import SiteSettings
|
||||
from notification.models import Subscriber
|
||||
|
||||
|
||||
@shared_task
|
||||
def send_subscribes_update_email(subscriber_id):
|
||||
subscriber = Subscriber.objects.get(subscriber_id)
|
||||
|
||||
country_code = subscriber.country_code
|
||||
|
||||
html_template = get_template(settings.NEWS_EMAIL_TEMPLATE)
|
||||
year = datetime.now().year
|
||||
|
||||
socials = list(SiteSettings.objects.with_country().select_related('country'))
|
||||
socials = dict(zip(map(lambda social: social.country.code, socials), socials))
|
||||
|
||||
socials_for_subscriber = socials.get(country_code)
|
||||
|
||||
context = {
|
||||
"title": "G&M Subscriptions",
|
||||
"subtitle": "You have subscribed on news G&M",
|
||||
"description": "\n".join([
|
||||
name.get(subscriber.locale)
|
||||
for name in subscriber.subscription_types.values_list('name', flat=True)
|
||||
]),
|
||||
"code": subscriber.update_code,
|
||||
"domain_uri": settings.DOMAIN_URI,
|
||||
"country_code": subscriber.country_code,
|
||||
"twitter_page_url": socials_for_subscriber.twitter_page_url if socials_for_subscriber else '#',
|
||||
"instagram_page_url": socials_for_subscriber.instagram_page_url if socials_for_subscriber else '#',
|
||||
"facebook_page_url": socials_for_subscriber.facebook_page_url if socials_for_subscriber else '#',
|
||||
"send_to": subscriber.send_to,
|
||||
"year": year
|
||||
}
|
||||
|
||||
send_mail(
|
||||
subject="G&M Subscriptions",
|
||||
message=render_to_string(settings.NOTIFICATION_SUBSCRIBE_TEMPLATE, context),
|
||||
from_email=settings.EMAIL_HOST_USER,
|
||||
recipient_list=[subscriber.send_to],
|
||||
fail_silently=False,
|
||||
html_message=html_template.render(context)
|
||||
)
|
||||
|
||||
|
||||
@shared_task
|
||||
def send_unsubscribe_email(subscriber_id):
|
||||
subscriber = Subscriber.objects.get(subscriber_id)
|
||||
|
||||
country_code = subscriber.country_code
|
||||
|
||||
html_template = get_template(settings.NEWS_EMAIL_TEMPLATE)
|
||||
year = datetime.now().year
|
||||
|
||||
socials = list(SiteSettings.objects.with_country().select_related('country'))
|
||||
socials = dict(zip(map(lambda social: social.country.code, socials), socials))
|
||||
|
||||
socials_for_subscriber = socials.get(country_code)
|
||||
|
||||
context = {
|
||||
"title": "G&M Subscriptions",
|
||||
"subtitle": "You have successfully unsubscribed from G&M news",
|
||||
"description": "",
|
||||
"code": subscriber.update_code,
|
||||
"domain_uri": settings.DOMAIN_URI,
|
||||
"country_code": subscriber.country_code,
|
||||
"twitter_page_url": socials_for_subscriber.twitter_page_url if socials_for_subscriber else '#',
|
||||
"instagram_page_url": socials_for_subscriber.instagram_page_url if socials_for_subscriber else '#',
|
||||
"facebook_page_url": socials_for_subscriber.facebook_page_url if socials_for_subscriber else '#',
|
||||
"send_to": subscriber.send_to,
|
||||
"year": year
|
||||
}
|
||||
|
||||
send_mail(
|
||||
subject="G&M Subscriptions",
|
||||
message=render_to_string(settings.NOTIFICATION_SUBSCRIBE_TEMPLATE, context),
|
||||
from_email=settings.EMAIL_HOST_USER,
|
||||
recipient_list=[subscriber.send_to],
|
||||
fail_silently=False,
|
||||
html_message=html_template.render(context)
|
||||
)
|
||||
|
|
@ -454,6 +454,7 @@ CHANGE_EMAIL_TEMPLATE = 'account/change_email.html'
|
|||
CONFIRM_EMAIL_TEMPLATE = 'authorization/confirm_email.html'
|
||||
NEWS_EMAIL_TEMPLATE = 'news/news_email.html'
|
||||
NOTIFICATION_PASSWORD_TEMPLATE = 'account/password_change_email.html'
|
||||
NOTIFICATION_SUBSCRIBE_TEMPLATE = 'notification/update_email.html'
|
||||
|
||||
|
||||
# COOKIES
|
||||
|
|
|
|||
75
project/templates/notification/update_email.html
Normal file
75
project/templates/notification/update_email.html
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" style="box-sizing: border-box;margin: 0;">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700|PT+Serif&display=swap&subset=cyrillic" type="text/css">
|
||||
<title>{{ title }}</title>
|
||||
</head>
|
||||
<body style="box-sizing: border-box;margin: 0;font-family: "Open Sans", sans-serif;font-size: 0.875rem;">
|
||||
<div style="dispaly: none">
|
||||
|
||||
</div>
|
||||
|
||||
<div style="margin: 0 auto; max-width:38.25rem;" class="letter">
|
||||
<div class="letter__wrapper">
|
||||
<div class="letter__inner">
|
||||
<div class="letter__content" style="position: relative;margin: 0 16px 40px;padding: 0 0 1px;">
|
||||
<div class="letter__header" style="margin: 1.875rem 0 2.875rem;text-align: center;">
|
||||
<div class="letter__logo" style="display: block;width: 7.9375rem;height: 4.6875rem;margin: 0 auto 14px auto;">
|
||||
<a href="https://{{ country_code }}.{{ domain_uri }}/" class="letter__logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: block;border: none;">
|
||||
<img alt="" style="width:100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/1.png" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="letter__sublogo" style="font-size: 21px;line-height: 1;letter-spacing: 0;color: #bcbcbc;text-transform: uppercase;">france</div>
|
||||
</div>
|
||||
<div class="letter__title" style="font-family:"Open-Sans",sans-serif; font-size: 1.5rem;margin: 0 0 10px;padding: 0 0 6px;border-bottom: 4px solid #ffee29;">
|
||||
<span class="letter__title-txt">{{ title }}</span>
|
||||
</div>
|
||||
{% if not image_url is None %}
|
||||
<div class="letter__image" style="width: 100%;margin: 0 0 1.25rem;max-height:260px;">
|
||||
<img src="{{ image_url }}" alt="" class="letter__photo" style="display: block; width: 100%;height: 100%;">
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="letter__text" style="margin: 0 0 30px; font-family:"Open-Sans",sans-serif; font-size: 14px; line-height: 21px;letter-spacing: -0.34px; overflow-x: hidden;">
|
||||
{{ description | safe }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="letter__follow" style="padding: 8px;margin: 0 auto 40px auto;background: #ffee29; max-width: 400px;">
|
||||
<div class="letter__follow-content" style="padding: 1.25rem 0;background: #fff;text-align: center;">
|
||||
<div class="letter__follow-header" style="display: inline-block;margin: 0 0 18px;font-family: "PT Serif", sans-serif;font-size: 1.25rem;text-transform: uppercase;">
|
||||
<img alt="thumb" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/2.png" />
|
||||
<span class="letter__follow-title">Follow us</span>
|
||||
</div>
|
||||
<div class="letter__follow-text" style="display: block;margin: 0 0 30px;font-size: 12px;font-style: italic;">You can also us on our social network below
|
||||
</div>
|
||||
<div class="letter__follow-social">
|
||||
<a href="{{ facebook_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||
<img alt="facebook" style="width: 30px; vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/3.png" />
|
||||
</a>
|
||||
<a href="{{ instagram_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||
<img alt="instagram" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/4.png" />
|
||||
</a>
|
||||
<a href="{{ twitter_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0;background: #ffee29;border: none;">
|
||||
<img alt="twitter" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/5.png" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="letter__unsubscribe" style="margin: 0 0 1.25rem;font-size: 12px;text-align: center;">
|
||||
<span class="letter__unsubscribe-dscr" style="display: inline-block;">This email has been sent to {{ send_to }} ,</span>
|
||||
<a href="https://{{ country_code }}.{{ domain_uri }}{% url 'web:notification:unsubscribe' code %}" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;">click here to unsubscribe</a>
|
||||
</div>
|
||||
<div class="letter__footer" style="padding: 24px 0 15px;text-align: center;background: #ffee29;">
|
||||
<div class="letter__footer-logo" style="width: 71px;height: 42px;margin: 0 auto 14px auto;">
|
||||
<a href="#" class="letter__footer-logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;">
|
||||
<img alt="" style="width: 100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/6.png" /></a>
|
||||
</div>
|
||||
<div class="letter__copyright">GaultMillau © {{ year }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user