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.
 
 
 
 

64 lines
2.7 KiB

from io import BytesIO
import celery
import pytils
import weasyprint
from django.conf import settings
from django.core.mail import EmailMessage, EmailMultiAlternatives
from django.template.loader import render_to_string, get_template
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