87 lines
3.2 KiB
Python
87 lines
3.2 KiB
Python
from celery import Celery
|
|
from django.conf import settings
|
|
from django.core.mail import EmailMessage
|
|
from django.template import Context, Template
|
|
from django.template.loader import render_to_string
|
|
|
|
from accounts.models import Account, AccountEmail, AccountEmailLog
|
|
from common.models import Profile
|
|
from common.tasks import set_rls_context
|
|
|
|
app = Celery("redis://")
|
|
|
|
|
|
@app.task
|
|
def send_email(email_obj_id, org_id):
|
|
set_rls_context(org_id)
|
|
email_obj = AccountEmail.objects.filter(id=email_obj_id).first()
|
|
if email_obj:
|
|
from_email = email_obj.from_email
|
|
contacts = email_obj.recipients.all()
|
|
for contact_obj in contacts:
|
|
if not AccountEmailLog.objects.filter(
|
|
email=email_obj, contact=contact_obj, is_sent=True
|
|
).exists():
|
|
html = email_obj.message_body
|
|
context_data = {
|
|
"email": contact_obj.email if contact_obj.email else "",
|
|
"name": (
|
|
contact_obj.first_name
|
|
if contact_obj.first_name
|
|
else (
|
|
"" + " " + contact_obj.last_name
|
|
if contact_obj.last_name
|
|
else ""
|
|
)
|
|
),
|
|
}
|
|
try:
|
|
html_content = Template(html).render(Context(context_data))
|
|
subject = email_obj.message_subject
|
|
msg = EmailMessage(
|
|
subject,
|
|
html_content,
|
|
from_email=from_email,
|
|
to=[
|
|
contact_obj.email,
|
|
],
|
|
)
|
|
msg.content_subtype = "html"
|
|
res = msg.send()
|
|
if res:
|
|
email_obj.rendered_message_body = html_content
|
|
email_obj.save()
|
|
AccountEmailLog.objects.create(
|
|
email=email_obj, contact=contact_obj, is_sent=True
|
|
)
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
@app.task
|
|
def send_email_to_assigned_user(recipients, account_id, org_id):
|
|
"""Send Mail To Users When they are assigned to an account"""
|
|
set_rls_context(org_id)
|
|
account = Account.objects.filter(id=account_id).first()
|
|
if not account:
|
|
return
|
|
created_by = account.created_by
|
|
|
|
for profile_id in recipients:
|
|
recipients_list = []
|
|
profile = Profile.objects.filter(id=profile_id, is_active=True).first()
|
|
if profile:
|
|
recipients_list.append(profile.user.email)
|
|
context = {}
|
|
context["url"] = settings.DOMAIN_NAME
|
|
context["user"] = profile.user
|
|
context["account"] = account
|
|
context["created_by"] = created_by
|
|
subject = "Assigned a account for you."
|
|
html_content = render_to_string(
|
|
"assigned_to/account_assigned.html", context=context
|
|
)
|
|
|
|
msg = EmailMessage(subject, html_content, to=recipients_list)
|
|
msg.content_subtype = "html"
|
|
msg.send()
|