diff --git a/apps/notification/tasks.py b/apps/notification/tasks.py index c41f16be..97bf1959 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,32 @@ 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(os.path.join(settings.STATIC_ROOT, 'ProximaNova-Reg.otf'), 170) + text = first_name.capitalize() + if last_name: + text += ' ' + last_name.capitalize() + w, h = draw.textsize(text, font=font) + draw.text(((img.width - w) // 2, 900), 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' + signed_path_pattern = 'img/signed-user-certificates/%d.jpg' if email: - file = open(staticfiles_storage.path(path_pattern % 1), 'rb') + fn = draw_cert(staticfiles_storage.path(signed_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 +56,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 +78,12 @@ 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') + if un.user.child_first_name: + fn = staticfiles_storage.path(signed_path_pattern % un.certificate_number) + fn = draw_cert(fn, un.user.email, un.user.child_first_name, un.user.child_last_name) + else: + fn = staticfiles_storage.path(path_pattern % un.certificate_number) + 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 +92,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() diff --git a/web/src/fonts/ProximaNova-Reg.otf b/web/src/fonts/ProximaNova-Reg.otf new file mode 100644 index 00000000..018b6f83 Binary files /dev/null and b/web/src/fonts/ProximaNova-Reg.otf differ diff --git a/web/src/img/signed-user-certificates/1.jpg b/web/src/img/signed-user-certificates/1.jpg new file mode 100644 index 00000000..87b0f30d Binary files /dev/null and b/web/src/img/signed-user-certificates/1.jpg differ diff --git a/web/src/img/signed-user-certificates/2.jpg b/web/src/img/signed-user-certificates/2.jpg new file mode 100644 index 00000000..b455e789 Binary files /dev/null and b/web/src/img/signed-user-certificates/2.jpg differ diff --git a/web/src/img/signed-user-certificates/3.jpg b/web/src/img/signed-user-certificates/3.jpg new file mode 100644 index 00000000..f89fe8ff Binary files /dev/null and b/web/src/img/signed-user-certificates/3.jpg differ diff --git a/web/src/img/signed-user-certificates/4.jpg b/web/src/img/signed-user-certificates/4.jpg new file mode 100644 index 00000000..b8d50fac Binary files /dev/null and b/web/src/img/signed-user-certificates/4.jpg differ diff --git a/web/src/img/signed-user-certificates/5.jpg b/web/src/img/signed-user-certificates/5.jpg new file mode 100644 index 00000000..4d6ead4a Binary files /dev/null and b/web/src/img/signed-user-certificates/5.jpg differ diff --git a/web/src/img/signed-user-certificates/6.jpg b/web/src/img/signed-user-certificates/6.jpg new file mode 100644 index 00000000..6be097b4 Binary files /dev/null and b/web/src/img/signed-user-certificates/6.jpg differ diff --git a/web/src/img/signed-user-certificates/7.jpg b/web/src/img/signed-user-certificates/7.jpg new file mode 100644 index 00000000..fc5c690c Binary files /dev/null and b/web/src/img/signed-user-certificates/7.jpg differ diff --git a/web/src/img/signed-user-certificates/8.jpg b/web/src/img/signed-user-certificates/8.jpg new file mode 100644 index 00000000..432ef169 Binary files /dev/null and b/web/src/img/signed-user-certificates/8.jpg differ diff --git a/web/src/img/signed-user-certificates/9.jpg b/web/src/img/signed-user-certificates/9.jpg new file mode 100644 index 00000000..9e36a703 Binary files /dev/null and b/web/src/img/signed-user-certificates/9.jpg differ diff --git a/web/webpack.config.js b/web/webpack.config.js index 21ead790..ddda36cd 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.js @@ -18,6 +18,7 @@ module.exports = { sprite: glob('./src/icons/*.svg'), images: glob('./src/img/*.*'), imagesCertificates: glob('./src/img/user-certificates/*'), + imagesSignedCertificates: glob('./src/img/signed-user-certificates/*'), imagesGiftCertificates: glob('./src/img/gift-certificates/*'), imagesReviews: glob('./src/img/reviews/*'), fonts: glob('./src/fonts/*'), @@ -90,7 +91,8 @@ module.exports = { { test: /\.(png|gif|jpg|svg)$/, exclude: [path.resolve(__dirname, 'src/icons'), path.resolve(__dirname, 'src/img/user-certificates'), - path.resolve(__dirname, 'src/img/gift-certificates'), path.resolve(__dirname, 'src/img/reviews')], + path.resolve(__dirname, 'src/img/gift-certificates'), path.resolve(__dirname, 'src/img/reviews'), + path.resolve(__dirname, 'src/img/signed-user-certificates')], loader: 'file-loader?name=[name].[ext]&outputPath=./img/' }, { @@ -98,6 +100,11 @@ module.exports = { include: path.resolve(__dirname, 'src/img/user-certificates'), loader: 'file-loader?name=[name].[ext]&outputPath=./img/user-certificates/' }, + { + test: /\.(png|jpg)$/, + include: path.resolve(__dirname, 'src/img/signed-user-certificates'), + loader: 'file-loader?name=[name].[ext]&outputPath=./img/signed-user-certificates/' + }, { test: /\.(png|jpg)$/, include: path.resolve(__dirname, 'src/img/gift-certificates'),