You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

156 lines
6.0 KiB

# -*- coding: utf-8 -*-
from datetime import timedelta
from pytils import numeral
from django.utils import timezone
from django.conf import settings
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from commons.utils import get_site_url
def check_one_profile(profile, now, manual=False):
from customer.models import License
profile_is_active = profile.active
licenses = License.objects. \
filter(company=profile, date_from__lte=now, date_to__gte=now,
status__in=[-1, 1, 2], deleted=False)
licenses.filter(status=1).update(status=2)
if licenses:
profile.active = True
else:
profile.active = False
profile.save()
user_email = profile.users.get().email
if profile.active and not profile_is_active:
template_name = 'emails/license_activated.txt'
subject = 'Документор: Профиль активирован'
dict_context = {'user_email': user_email,
'support_email': settings.SUPPORT_EMAIL,
'license_starts': licenses[0].date_from,
'license_ends': licenses[0].date_to,
'site_url': get_site_url()
}
email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
email.send()
licenses_remain = License.objects.filter(company=profile, date_from__gt=now + timedelta(1),
status=1, deleted=False)
licenses_to_pay = License.objects.filter(company=profile, status=0, deleted=False)
if not licenses_remain and not manual:
licenses = License.objects.filter(company=profile, date_to__lt=now, status__in=[-1, 2],
deleted=False)
licenses.update(status=3)
if licenses:
template_name = 'emails/license_ended.txt'
subject = 'Документор: срок действия лицензии окончен'
dict_context = {'user_email': user_email,
'support_email': settings.SUPPORT_EMAIL,
'license_ends': licenses[0].date_to,
'licenses_to_pay': licenses_to_pay,
'site_url': get_site_url()
}
email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
email.send()
licenses = License.objects.filter(company=profile, date_to=now + timedelta(1),
status__in=[-1, 2], deleted=False)
if licenses:
template_name = 'emails/license_ends.txt'
subject = 'Документор: окончание срока действия лицензии'
dict_context = {'user_email': user_email,
'support_email': settings.SUPPORT_EMAIL,
'license_ends': licenses[0].date_to,
'licenses_to_pay': licenses_to_pay,
'site_url': get_site_url()
}
email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
email.send()
if not manual:
licenses = License.objects.filter(company=profile, order_date=now - timedelta(9),
status=0, deleted=False)
if licenses:
template_name = 'emails/license_to_pay.txt'
subject = 'Документор: есть неоплаченные счета'
dict_context = {'user_email': user_email,
'support_email': settings.SUPPORT_EMAIL,
'site_url': get_site_url()
}
email_body = render_to_string(template_name, dict_context)
email = EmailMessage(subject=subject, to=(user_email,), body=email_body)
email.send()
def raise_if_no_profile(request):
if not request.user.profile:
raise Exception(
f"Profile not found for user: {request.user.pk}, '{request.user.username}'"
)
def check_confirm_bonus_to_user(user):
"""
Check user for displaying a message with an offer for
purchase of licenses for additional bonus licenses
Show message only for new users in the period
from 5 to 15 day
If user already have licenses don't display message
:param user: DockUser instance
:return: count of days remaining for getting bonus,
integer or False if nothing to use
"""
from customer.models import License
lic = License.objects.filter(
company=user.profile,
status__in=[1, 2],
deleted=False
)
if lic:
return False
today = timezone.now().date()
date_join_start = today - timezone.timedelta(days=15)
date_join_end = today - timezone.timedelta(days=6)
if date_join_start <= user.date_joined.date() <= date_join_end:
delta = user.date_joined.date() - date_join_start
return delta.days
return False
def get_display_message_for_bonus(day_count):
"""
Get text to display the message depending on count of days
:param day_count: Count of days, integer
:return: Message for display in page, string
"""
message = ''
if type(day_count) == str:
return message
if day_count > 10:
return message
if day_count == 0:
message = f'Сегодня последний день что бы получить <a href="#">бонус</a>'
if day_count > 0:
message = f'У вас есть ещё <b>{day_count} ' \
f'{numeral.choose_plural(day_count, "день, дня, дней")}</b>, ' \
f'чтобы получить <a href="#">бонус</a>'
return message