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.
 
 
 
 

63 lines
2.7 KiB

import celery
import weasyprint
import pytils
from io import BytesIO
from django.conf import settings
from django.template.loader import render_to_string, get_template
from django.core.mail import EmailMessage, EmailMultiAlternatives
from cart.models import Order
@celery.task()
def send_user_order_notification(context):
"""
Sending Email of order creating
"""
order = Order.objects.get(pk=context['order_id'])
verb_price = pytils.numeral.in_words(round(order.total_price))
verb_cur = pytils.numeral.choose_plural(round(order.total_price), ("рубль", "рубля", "рублей"))
subject = 'Заказ № {}'.format(order.id)
message = 'Уважаемый, {}, номер Вашего заказа {}. \
Пожалуйста, совершите платеж по поручению в приложении к этому письму в течение 14 дней.'.format(
order.customer_name, order.id)
mail_send = EmailMessage(subject, message, 'admin@myshop.ru', [order.customer_email])
# html = render_to_string('orders:AdminOrderPDF', args=[order_id])
html = render_to_string('cart/order_invoice.html', {**settings.PAY_REQUISITES, 'order': order,
'verb_cur': verb_cur, 'verb_price': verb_price})
rendered_html = html.encode(encoding="UTF-8")
out = BytesIO()
weasyprint.HTML(string=rendered_html).write_pdf(out,
stylesheets=[
weasyprint.CSS(settings.STATIC_ROOT + 'css/build.css')])
order_invoice_name = 'Order_' + order.order_code
weasyprint.HTML(string=rendered_html, base_url=context['site_url']).write_pdf(order_invoice_name,
stylesheets=[weasyprint.CSS(
settings.STATIC_ROOT + '/css/build.css')])
mail_send.attach('order_{}.pdf'.format(order.id), out.getvalue(), 'application/pdf')
mail_send.send()
return mail_send
@celery.task()
def send_admin_order_notification(context):
body = get_template('emails/html/admin_order_request.html')
body_text = get_template('emails/txt/admin_order_request.txt')
context['email']['order'] = Order.active.get(pk=context['email']['order_id'])
email = EmailMultiAlternatives(
context['email']['subject'],
body_text.render(context['email']),
context['from_email'],
context['recipients']
)
email.attach_alternative(body.render(context['email']), 'text/html')
try:
email.send()
except Exception as e:
return False
return True