Fix last emails
This commit is contained in:
parent
2836d5954e
commit
c97b06e07b
|
|
@ -7,6 +7,64 @@ from django.template.loader import render_to_string
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
def get_file_urls_with_base_url(files):
|
||||||
|
"""
|
||||||
|
Get absolute URLs for files.
|
||||||
|
Constructs full URLs using ALLOWED_HOSTS from settings.
|
||||||
|
"""
|
||||||
|
# Get base URL from ALLOWED_HOSTS
|
||||||
|
allowed_hosts = getattr(settings, "ALLOWED_HOSTS", [])
|
||||||
|
if allowed_hosts and allowed_hosts[0] != "*":
|
||||||
|
# Use first allowed host
|
||||||
|
domain = allowed_hosts[0]
|
||||||
|
# Check if it's localhost or IP for HTTP
|
||||||
|
if (
|
||||||
|
domain.startswith("127.0.0.1")
|
||||||
|
or domain.startswith("localhost")
|
||||||
|
or domain.startswith("10.")
|
||||||
|
):
|
||||||
|
# In DEBUG mode, add port 8000 (default Django dev server)
|
||||||
|
if settings.DEBUG:
|
||||||
|
base_url = f"http://{domain}:8000"
|
||||||
|
else:
|
||||||
|
base_url = f"http://{domain}"
|
||||||
|
else:
|
||||||
|
base_url = f"https://{domain}"
|
||||||
|
else:
|
||||||
|
# Fallback: use localhost with port in DEBUG mode
|
||||||
|
if settings.DEBUG:
|
||||||
|
base_url = "http://127.0.0.1:8000"
|
||||||
|
else:
|
||||||
|
base_url = ""
|
||||||
|
|
||||||
|
file_urls = []
|
||||||
|
for file in files:
|
||||||
|
# In DEBUG mode, use MEDIA_URL (WhiteNoise serves it)
|
||||||
|
# In production, use /uploads/ (nginx serves it)
|
||||||
|
if settings.DEBUG:
|
||||||
|
# Use MEDIA_URL which is "media/"
|
||||||
|
media_url = settings.MEDIA_URL.rstrip("/")
|
||||||
|
file_path = f"/{media_url}/{file.path}"
|
||||||
|
else:
|
||||||
|
# Use /uploads/ for nginx
|
||||||
|
file_path = f"/uploads/{file.path}"
|
||||||
|
|
||||||
|
if base_url:
|
||||||
|
# Make it an absolute URL
|
||||||
|
file_url = base_url + file_path
|
||||||
|
else:
|
||||||
|
# Fallback: relative URL
|
||||||
|
file_url = file_path
|
||||||
|
|
||||||
|
file_urls.append(
|
||||||
|
{
|
||||||
|
"file": file,
|
||||||
|
"url": file_url,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return file_urls
|
||||||
|
|
||||||
|
|
||||||
def send_submission_emails(submission):
|
def send_submission_emails(submission):
|
||||||
"""
|
"""
|
||||||
Send emails for a quote submission.
|
Send emails for a quote submission.
|
||||||
|
|
@ -17,6 +75,7 @@ def send_submission_emails(submission):
|
||||||
Returns tuple (owner_sent, submitter_sent)
|
Returns tuple (owner_sent, submitter_sent)
|
||||||
"""
|
"""
|
||||||
files = submission.files.all()
|
files = submission.files.all()
|
||||||
|
file_urls = get_file_urls_with_base_url(files)
|
||||||
owner_email = getattr(settings, "OWNER_EMAIL", "")
|
owner_email = getattr(settings, "OWNER_EMAIL", "")
|
||||||
|
|
||||||
owner_sent = False
|
owner_sent = False
|
||||||
|
|
@ -31,6 +90,7 @@ def send_submission_emails(submission):
|
||||||
{
|
{
|
||||||
"submission": submission,
|
"submission": submission,
|
||||||
"files": files,
|
"files": files,
|
||||||
|
"file_urls": file_urls,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -47,8 +107,11 @@ Description:
|
||||||
|
|
||||||
Files uploaded: {files.count()}
|
Files uploaded: {files.count()}
|
||||||
"""
|
"""
|
||||||
for file in files:
|
for file_url_data in file_urls:
|
||||||
|
file = file_url_data["file"]
|
||||||
|
url = file_url_data["url"]
|
||||||
text_message += f"- {file.original_filename} ({file.file_size} bytes)\n"
|
text_message += f"- {file.original_filename} ({file.file_size} bytes)\n"
|
||||||
|
text_message += f" Download: {url}\n"
|
||||||
|
|
||||||
msg = EmailMultiAlternatives(
|
msg = EmailMultiAlternatives(
|
||||||
subject=subject,
|
subject=subject,
|
||||||
|
|
@ -70,6 +133,7 @@ Files uploaded: {files.count()}
|
||||||
{
|
{
|
||||||
"submission": submission,
|
"submission": submission,
|
||||||
"files": files,
|
"files": files,
|
||||||
|
"file_urls": file_urls,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -88,8 +152,11 @@ Your Notes:
|
||||||
|
|
||||||
Files uploaded: {files.count()}
|
Files uploaded: {files.count()}
|
||||||
"""
|
"""
|
||||||
for file in files:
|
for file_url_data in file_urls:
|
||||||
|
file = file_url_data["file"]
|
||||||
|
url = file_url_data["url"]
|
||||||
text_message += f"- {file.original_filename} ({file.file_size} bytes)\n"
|
text_message += f"- {file.original_filename} ({file.file_size} bytes)\n"
|
||||||
|
text_message += f" Download: {url}\n"
|
||||||
|
|
||||||
text_message += f"\nWe will contact you at {submission.email} regarding your quote request.\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')}."
|
text_message += f"\nThis submission will be kept on file until {submission.expiration_time.strftime('%B %d, %Y')}."
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,16 @@
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.file-list li a {
|
||||||
|
color: #0066cc;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list li a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #666;
|
color: #666;
|
||||||
|
|
@ -84,8 +94,11 @@
|
||||||
<div class="info-box">
|
<div class="info-box">
|
||||||
<strong>Files You Uploaded ({{ files|length }}):</strong>
|
<strong>Files You Uploaded ({{ files|length }}):</strong>
|
||||||
<ul class="file-list">
|
<ul class="file-list">
|
||||||
{% for file in files %}
|
{% for file_url_data in file_urls %}
|
||||||
<li>{{ file.original_filename }} ({{ file.file_size|filesizeformat }})</li>
|
<li>
|
||||||
|
<a href="{{ file_url_data.url }}" target="_blank">{{ file_url_data.file.original_filename }}</a>
|
||||||
|
({{ file_url_data.file.file_size|filesizeformat }})
|
||||||
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,16 @@
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.file-list li a {
|
||||||
|
color: #0066cc;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list li a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #666;
|
color: #666;
|
||||||
|
|
@ -84,8 +94,11 @@
|
||||||
<div class="info-box">
|
<div class="info-box">
|
||||||
<strong>Uploaded Files ({{ files|length }}):</strong>
|
<strong>Uploaded Files ({{ files|length }}):</strong>
|
||||||
<ul class="file-list">
|
<ul class="file-list">
|
||||||
{% for file in files %}
|
{% for file_url_data in file_urls %}
|
||||||
<li>{{ file.original_filename }} ({{ file.file_size|filesizeformat }})</li>
|
<li>
|
||||||
|
<a href="{{ file_url_data.url }}" target="_blank">{{ file_url_data.file.original_filename }}</a>
|
||||||
|
({{ file_url_data.file.file_size|filesizeformat }})
|
||||||
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue