mails template

prod
Dmitriy Shesterkin 9 years ago
parent 86d84d3efc
commit 280bc58695
  1. 2
      docker-compose.yml
  2. 13
      src/commons/utils.py
  3. 7
      src/customer/utils.py
  4. 2
      src/dokumentor/settings/common.py
  5. 35
      src/tests/test_tasks.py
  6. 17
      src/tests/test_utils.py
  7. 2
      templates/emails/license_activated.txt
  8. 2
      templates/emails/license_ended.txt
  9. 2
      templates/emails/license_ends.txt

@ -47,6 +47,8 @@ services:
- "5671" - "5671"
bower: bower:
restart: always
container_name: dokumentor-bower
image: digitallyseamless/nodejs-bower-grunt image: digitallyseamless/nodejs-bower-grunt
command: bash -c "bower i" command: bash -c "bower i"
volumes: volumes:

@ -1,9 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime import datetime
from django.conf import settings
# convert datetime to json
def dthandler(): def dthandler():
"""
convert datetime to json
"""
return lambda obj: obj.isoformat() if \ return lambda obj: obj.isoformat() if \
isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date) else None isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date) else None
@ -23,5 +27,8 @@ def only_numerics(value):
return u''.join(c for c in value if c.isdigit()) return u''.join(c for c in value if c.isdigit())
def get_site_url(request): def get_site_url(request=None):
return f'{request.scheme}://{request.get_host()}' if request:
return f'{request.scheme}://{request.get_host()}'
else:
return settings.SITE_URL

@ -5,6 +5,8 @@ from django.conf import settings
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.template.loader import render_to_string from django.template.loader import render_to_string
from commons.utils import get_site_url
def check_one_profile(profile, now, manual=False): def check_one_profile(profile, now, manual=False):
@ -31,6 +33,7 @@ def check_one_profile(profile, now, manual=False):
'support_email': settings.SUPPORT_EMAIL, 'support_email': settings.SUPPORT_EMAIL,
'license_starts': licenses[0].date_from, 'license_starts': licenses[0].date_from,
'license_ends': licenses[0].date_to, 'license_ends': licenses[0].date_to,
'site_url': get_site_url()
} }
email_body = render_to_string(template_name, dict_context) email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body) email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
@ -52,6 +55,7 @@ def check_one_profile(profile, now, manual=False):
'support_email': settings.SUPPORT_EMAIL, 'support_email': settings.SUPPORT_EMAIL,
'license_ends': licenses[0].date_to, 'license_ends': licenses[0].date_to,
'licenses_to_pay': licenses_to_pay, 'licenses_to_pay': licenses_to_pay,
'site_url': get_site_url()
} }
email_body = render_to_string(template_name, dict_context) email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body) email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
@ -67,6 +71,7 @@ def check_one_profile(profile, now, manual=False):
'support_email': settings.SUPPORT_EMAIL, 'support_email': settings.SUPPORT_EMAIL,
'license_ends': licenses[0].date_to, 'license_ends': licenses[0].date_to,
'licenses_to_pay': licenses_to_pay, 'licenses_to_pay': licenses_to_pay,
'site_url': get_site_url()
} }
email_body = render_to_string(template_name, dict_context) email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body) email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
@ -81,7 +86,7 @@ def check_one_profile(profile, now, manual=False):
subject = 'Документор: есть неоплаченные счета' subject = 'Документор: есть неоплаченные счета'
dict_context = {'user_email': user_email, dict_context = {'user_email': user_email,
'support_email': settings.SUPPORT_EMAIL, 'support_email': settings.SUPPORT_EMAIL,
'site_url': get_site_url()
} }
email_body = render_to_string(template_name, dict_context) email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body) email = EmailMessage(subject=subject, to=(user_email,), body=email_body)

@ -330,3 +330,5 @@ YANDEX_MONEY_MAIL_ADMINS_ON_PAYMENT_ERROR = True
DADATA_API_KEY = 'e4232c46f82c0b2e8c5f9bd583d6224ce9c934e0' DADATA_API_KEY = 'e4232c46f82c0b2e8c5f9bd583d6224ce9c934e0'
DADATA_SECRET_KEY = '9c5c3fdfba74af122730db650346b3e91586abc7' DADATA_SECRET_KEY = '9c5c3fdfba74af122730db650346b3e91586abc7'
SITE_URL = 'https://dokumentor.ru'

@ -1,37 +1,33 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import pytest import pytest
from django.utils import timezone from django.utils import timezone
from myauth.models import DokUser, ConfirmEmail from myauth.models import DokUser, ConfirmEmail
from customer.models import UserProfile from customer.models import UserProfile
from customer.tasks import delete_not_activated_users from customer.tasks import delete_not_activated_users
@pytest.mark.django_db dates_gte_five = [timezone.now() - timezone.timedelta(days=100),
def test_delete_not_activated_users_more_than_five_day(user): timezone.now() - timezone.timedelta(days=15),
user.is_active = False timezone.now() - timezone.timedelta(days=5)]
profile = user.profile
profile.active = False
profile.confirmed = False
profile.created_at = timezone.now() - timezone.timedelta(days=15)
profile.save()
user.save()
ConfirmEmail.objects.get_or_create(user=user)
delete_not_activated_users()
assert DokUser.objects.count() == 0 dates_lt_five = [timezone.now() - timezone.timedelta(days=4),
assert UserProfile.objects.count() == 0 timezone.now() - timezone.timedelta(days=3),
assert ConfirmEmail.objects.count() == 0 timezone.now() - timezone.timedelta(days=2),
timezone.now() - timezone.timedelta(days=1),
timezone.now() - timezone.timedelta(days=0)]
@pytest.mark.parametrize('create_date', dates_gte_five)
@pytest.mark.django_db @pytest.mark.django_db
def test_delete_not_activated_users_equal_five_day(user): def test_delete_not_activated_users_great_five_days(user, create_date):
user.is_active = False user.is_active = False
profile = user.profile profile = user.profile
profile.active = False profile.active = False
profile.confirmed = False profile.confirmed = False
profile.created_at = timezone.now() - timezone.timedelta(days=5) profile.created_at = create_date
profile.save() profile.save()
user.save() user.save()
ConfirmEmail.objects.get_or_create(user=user) ConfirmEmail.objects.get_or_create(user=user)
@ -43,13 +39,14 @@ def test_delete_not_activated_users_equal_five_day(user):
assert ConfirmEmail.objects.count() == 0 assert ConfirmEmail.objects.count() == 0
@pytest.mark.parametrize('create_date', dates_lt_five)
@pytest.mark.django_db @pytest.mark.django_db
def test_delete_not_activated_users_less_five_day(user): def test_delete_not_activated_users_less_five_day(user, create_date):
user.is_active = False user.is_active = False
profile = user.profile profile = user.profile
profile.active = False profile.active = False
profile.confirmed = False profile.confirmed = False
profile.created_at = timezone.now() - timezone.timedelta(days=4) profile.created_at = create_date
profile.save() profile.save()
user.save() user.save()
ConfirmEmail.objects.get_or_create(user=user) ConfirmEmail.objects.get_or_create(user=user)

@ -1,8 +1,19 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import pytest
from commons import utils from commons.utils import get_site_url
def test_utils(mocked_request): def test_utils_with_request(mocked_request):
url = utils.get_site_url(mocked_request) url = get_site_url(mocked_request)
assert len(url.split('//')) == 2 assert len(url.split('//')) == 2
def test_utils_without_request():
url = get_site_url()
assert len(url.split('//')) == 2
@pytest.mark.django_db
def test_check_one_profile():
pass

@ -1,6 +1,6 @@
Здравствуйте! Здравствуйте!
Ваш профиль на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}) был активирован. Ваш профиль на сайте Документор ({{ site_url }}) был активирован.
Срок действия лицензии с {{ license_starts }} по {{ license_ends }}. Срок действия лицензии с {{ license_starts }} по {{ license_ends }}.
Это письмо написано роботом. Отвечать на него не нужно. Это письмо написано роботом. Отвечать на него не нужно.

@ -1,6 +1,6 @@
Здравствуйте! Здравствуйте!
Закончилось действие вашего аккаунта на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %} Закончилось действие вашего аккаунта на сайте Документор ({{ site_url }}). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %}
Это письмо написано роботом. Отвечать на него не нужно. Это письмо написано роботом. Отвечать на него не нужно.

@ -1,6 +1,6 @@
Здравствуйте! Здравствуйте!
Через 1 день заканчивается действие вашего аккаунта на сайте Документор ({{ site_url|default:'https://dokumentor.ru' }}). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %} Через 1 день заканчивается действие вашего аккаунта на сайте Документор ({{ site_url }}). Вы не сможете создавать новые документы. {% if licenses_to_pay %}У Вас есть неоплаченные счета, которые можно оплатить, чтобы продлить действие услуги.{% else %}Чтобы продлить действие услуги, войдите в свой профиль и приобретите лицензию на дальнейшее пользование сайтом.{% endif %}
Это письмо написано роботом. Отвечать на него не нужно. Это письмо написано роботом. Отвечать на него не нужно.

Loading…
Cancel
Save