from celery import shared_task from django.conf import settings from django.template.loader import render_to_string from django.core.mail import EmailMessage from .utilities import send_email, send_hemail from .vars import login_message, verify_message import random, string from . import pdf from .models import User, VerificationCode @shared_task def enviar_correo_bienvenida(email_usuario: str, nombre_usuario: str): html_content = render_to_string( 'emails/welcome.html', { "name": nombre_usuario }, using='jinja2' ) send_hemail(email_usuario, "Inicio de Sesión correcto", html_content, "Has iniciado sesión...") @shared_task def enviar_correo_confirmacion(id: int): usuario = User.objects.get(id=id) code = VerificationCode.objects.create( user = usuario, code_mode = VerificationCode.VerificationModes.VERIFY_ACCOUNT, code = ''.join(random.choices(string.digits, k=12)) ) message = verify_message.format(name = usuario.get_full_name(), protocol = settings.PROTOCOL, domain = settings.DOMAIN, code = code.code) email_result = send_email(usuario.email, "Verificación de cuenta", message) @shared_task def enviar_correo_recuperacion(email: str): usuario: User | None try: usuario = User.objects.get(email=email) except User.DoesNotExist as e: print("ERROR: User does not exist, Cancelling task!") if usuario is not None: ver_code = VerificationCode.objects.create( code_mode = VerificationCode.VerificationModes.RESET_PASSWORD, user = usuario, code = ''.join(random.choices(string.digits, k=12)) ) ver_code.save() html_content = render_to_string( 'emails/reset_pass.html', { "name": usuario.get_full_name(), "domain": settings.DOMAIN, "protocol": settings.PROTOCOL, "code": ver_code.code }, using='jinja2' ) send_hemail(email, "Reset de Contraseña", html_content, "Estas reseteando la contraseña...") else: # Purchased items should be a list of dictionary, the dictionary must follow this tags: amount, product name, price (each) @shared_task def process_purchase(user_id: int, purchased_items: list, payment_method: str, transaction_code: str): user = User.objects.get(id=user_id) total = 0 for i in purchased_items: total += i["price"]*i["amount"] pdf_data = pdf.generar_recibo( user.get_full_name(), total, purchased_items, payment_method, transaction_code, ) email = EmailMessage( subject="Tu recibo de compra", body = "Hola, adjunto encontrarás el recibo de tu reciente transacción", from_email = settings.DEFAULT_FROM_EMAIL, to = [user.email] ) email.attach("recibo.pdf", pdf_data, "application/pdf") email.send()