LIL-690 Поставить команду в крон See merge request lilcity/backend!190remotes/origin/hotfix/LIL-691
commit
94c7779eb6
3 changed files with 67 additions and 54 deletions
@ -0,0 +1,60 @@ |
||||
from datetime import datetime |
||||
|
||||
from django.contrib.auth import get_user_model |
||||
from django.contrib.staticfiles.storage import staticfiles_storage |
||||
from django.utils.timezone import now |
||||
|
||||
from apps.notification.models import UserNotification |
||||
from apps.notification.utils import send_email |
||||
from apps.payment.models import SchoolPayment |
||||
from project.celery import app |
||||
|
||||
|
||||
User = get_user_model() |
||||
|
||||
|
||||
@app.task |
||||
def send_certificates(email=None, date=None, dry_run=False): |
||||
path_pattern = 'img/user-certificates/%d.jpg' |
||||
if email: |
||||
file = open(staticfiles_storage.path(path_pattern % 1), 'rb') |
||||
try: |
||||
send_email('Грамота от Lil School', email, 'notification/email/certificate.html', |
||||
attachments=[(file.name, file.read(), 'image/jpeg')]) |
||||
except: |
||||
pass |
||||
else: |
||||
print('Email has been sent') |
||||
finally: |
||||
file.close() |
||||
return |
||||
|
||||
date = datetime.strptime(date, '%d-%m-%Y') if date else now().date() |
||||
today = now().date() |
||||
users = set(list(SchoolPayment.objects.filter(date_end=date, add_days=False).values_list('user_id', flat=True))) |
||||
user_notifications_qs = UserNotification.objects.filter(user_id__in=users) |
||||
user_notifications = {un.user_id: un for un in user_notifications_qs} |
||||
notified_users = user_notifications_qs.filter(certificate_last_email__date=today).values_list( |
||||
'user_id', flat=True).distinct() |
||||
for user_id in users: |
||||
if user_id in notified_users: |
||||
continue |
||||
un = user_notifications.get(user_id, UserNotification(user_id=user_id)) |
||||
print(un.user.email) |
||||
if dry_run: |
||||
continue |
||||
|
||||
un.certificate_number = un.certificate_number + 1 \ |
||||
if un.certificate_number and staticfiles_storage.exists(path_pattern % (un.certificate_number + 1)) \ |
||||
else 1 |
||||
file = open(staticfiles_storage.path(path_pattern % un.certificate_number), 'rb') |
||||
try: |
||||
send_email('Грамота от Lil School', un.user.email, 'notification/email/certificate.html', |
||||
attachments=[(file.name, file.read(), 'image/jpeg')]) |
||||
except: |
||||
print('Not OK') |
||||
continue |
||||
finally: |
||||
file.close() |
||||
un.certificate_last_email = now() |
||||
un.save() |
||||
Loading…
Reference in new issue