From c64d66b1b51bc0aa29705b8718b1fdab36fdfa2e Mon Sep 17 00:00:00 2001 From: gzbender Date: Wed, 20 Mar 2019 00:14:06 +0500 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B4=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BD=D0=B0=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8?= =?UTF-8?q?=D0=BD=D0=BA=D0=B5=20=D1=81=20=D0=B3=D1=80=D0=B0=D0=BC=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=B9=20=D0=B8=D0=BC=D1=8F=20=D1=83=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/notification/tasks.py | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/apps/notification/tasks.py b/apps/notification/tasks.py index 243be211..127e07e8 100644 --- a/apps/notification/tasks.py +++ b/apps/notification/tasks.py @@ -1,10 +1,14 @@ +import os from datetime import datetime +from PIL import Image +from PIL import ImageFont +from PIL import ImageDraw from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.contrib.staticfiles.storage import staticfiles_storage from django.utils.timezone import now -from django.db.models import Max +from django.conf import settings from apps.notification.models import UserNotification from apps.notification.utils import send_email @@ -17,11 +21,31 @@ from project.sengrid import get_sendgrid_client User = get_user_model() +def draw_cert(path, email, first_name, last_name): + img = Image.open(path) + draw = ImageDraw.Draw(img) + font = ImageFont.truetype("/app/Microsoft Sans Serif.ttf", 92) + text = "награждается " + first_name + if last_name: + text += ' ' + last_name + w, h = draw.textsize(text, font=font) + draw.text(((img.width - w) // 2, 750), text, (29, 115, 224), font=font) + fn = os.path.join(settings.MEDIA_ROOT, 'tmp') + try: + os.mkdir(fn) + except: + pass + fn = os.path.join(fn, 'certificate-for-%s.jpg' % email) + img.save(fn) + img.close() + return fn + @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') + fn = draw_cert(staticfiles_storage.path(path_pattern % 1), email, 'Имя', 'Фамилия') + file = open(fn, 'rb') try: send_email('Грамота от Lil School', email, 'notification/email/certificate.html', attachments=[(file.name, file.read(), 'image/jpeg')]) @@ -31,6 +55,7 @@ def send_certificates(email=None, date=None, dry_run=False): print('Email has been sent') finally: file.close() + os.remove(fn) return date = datetime.strptime(date, '%d-%m-%Y').date() if date else now().date() @@ -52,7 +77,10 @@ def send_certificates(email=None, date=None, dry_run=False): 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') + fn = staticfiles_storage.path(path_pattern % un.certificate_number) + if un.user.child_first_name: + fn = draw_cert(fn, un.user.email, un.user.child_first_name, un.user.child_last_name) + file = open(fn, 'rb') try: send_email('Грамота от Lil School', un.user.email, 'notification/email/certificate.html', attachments=[(file.name, file.read(), 'image/jpeg')], user_notification=un) @@ -61,6 +89,8 @@ def send_certificates(email=None, date=None, dry_run=False): continue finally: file.close() + if un.user.child_first_name: + os.remove(fn) un.certificate_last_email = now() un.save()