SMW-Upload/quotes/email_utils.py

110 lines
3.2 KiB
Python

"""
Email utilities for sending submission notifications.
"""
from django.core.mail import send_mail, EmailMultiAlternatives
from django.template.loader import render_to_string
from django.conf import settings
def send_submission_emails(submission):
"""
Send emails for a quote submission.
Sends:
1. Notification to owner (OWNER_EMAIL)
2. Confirmation to submitter (submission.email)
Returns tuple (owner_sent, submitter_sent)
"""
files = submission.files.all()
owner_email = getattr(settings, "OWNER_EMAIL", "")
owner_sent = False
submitter_sent = False
# Email 1: Notification to owner
if owner_email:
try:
subject = f"New Quote Request - Submission #{submission.id}"
html_message = render_to_string(
"emails/submission_notification_owner.html",
{
"submission": submission,
"files": files,
},
)
# Plain text fallback
text_message = f"""
New Quote Request Received!
Submitted by: {submission.email}
Submitted at: {submission.submitted_at.strftime('%B %d, %Y %I:%M %p')}
Submission ID: #{submission.id}
Description:
{submission.description or '(No description provided)'}
Files uploaded: {files.count()}
"""
for file in files:
text_message += f"- {file.original_filename} ({file.file_size} bytes)\n"
msg = EmailMultiAlternatives(
subject=subject,
body=text_message,
from_email=settings.DEFAULT_FROM_EMAIL,
to=[owner_email],
)
msg.attach_alternative(html_message, "text/html")
msg.send()
owner_sent = True
except Exception as e:
print(f"Error sending owner email: {e}")
# Email 2: Confirmation to submitter
try:
subject = "Quote Request Received - Sedutto Machineworks"
html_message = render_to_string(
"emails/submission_confirmation.html",
{
"submission": submission,
"files": files,
},
)
# Plain text fallback
text_message = f"""
Thank you for your quote request!
We have received your submission and will review it shortly.
Submission Details:
Submission ID: #{submission.id}
Submitted at: {submission.submitted_at.strftime('%B %d, %Y %I:%M %p')}
Your Notes:
{submission.description or '(No notes provided)'}
Files uploaded: {files.count()}
"""
for file in files:
text_message += f"- {file.original_filename} ({file.file_size} bytes)\n"
text_message += f"\nWe will contact you at {submission.email} regarding your quote request.\n"
text_message += f"\nThis submission will be kept on file until {submission.expiration_time.strftime('%B %d, %Y')}."
msg = EmailMultiAlternatives(
subject=subject,
body=text_message,
from_email=settings.DEFAULT_FROM_EMAIL,
to=[submission.email],
)
msg.attach_alternative(html_message, "text/html")
msg.send()
submitter_sent = True
except Exception as e:
print(f"Error sending submitter email: {e}")
return (owner_sent, submitter_sent)