- Enable meetings app in INSTALLED_APPS and add URL routing - Switch from PostgreSQL to SQLite for default database configuration - Remove meetings directory from .gitignore - Move API root endpoint from users app to main URL configuration - Remove HIPAA-specific email and compliance settings (EMAIL_ENCRYPTION_KEY, HIPAA_EMAIL_CONFIG, BAA_VERIFICATION) - Add SITE_NAME and ENCRYPTION_KEY environment variables - Regenerate initial user migrations These changes simplify the development setup by using SQLite as the default database and removing complex compliance configurations while enabling the core meetings functionality.
317 lines
7.7 KiB
HTML
317 lines
7.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Appointment Request Update</title>
|
|
<style>
|
|
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap");
|
|
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
body {
|
|
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
|
|
Roboto, sans-serif;
|
|
line-height: 1.6;
|
|
color: #333;
|
|
background-color: #f8fafc;
|
|
}
|
|
|
|
.email-container {
|
|
max-width: 600px;
|
|
margin: 0 auto;
|
|
background: #ffffff;
|
|
border-radius: 12px;
|
|
overflow: hidden;
|
|
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
|
|
0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
}
|
|
|
|
.email-header {
|
|
background-image: linear-gradient(to right, #e11d48, #db2777, #f97316);
|
|
padding: 40px 30px;
|
|
text-align: center;
|
|
color: white;
|
|
}
|
|
|
|
.email-header h1 {
|
|
font-size: 28px;
|
|
font-weight: 700;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.email-header p {
|
|
font-size: 16px;
|
|
opacity: 0.9;
|
|
font-weight: 400;
|
|
}
|
|
|
|
.email-body {
|
|
padding: 40px 30px;
|
|
}
|
|
|
|
.greeting {
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
color: #1f2937;
|
|
margin-bottom: 25px;
|
|
line-height: 1.8;
|
|
}
|
|
|
|
.status-card {
|
|
background: #fff5f5;
|
|
border: 1px solid #fed7d7;
|
|
border-radius: 12px;
|
|
padding: 30px;
|
|
text-align: center;
|
|
margin: 25px 0;
|
|
}
|
|
|
|
.status-icon {
|
|
font-size: 48px;
|
|
margin-bottom: 15px;
|
|
}
|
|
|
|
.status-title {
|
|
font-size: 22px;
|
|
color: #c53030;
|
|
margin-bottom: 15px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.reason-box {
|
|
background: #f7fafc;
|
|
border: 1px solid #e2e8f0;
|
|
border-radius: 8px;
|
|
padding: 20px;
|
|
margin: 20px 0;
|
|
}
|
|
|
|
.reason-title {
|
|
font-weight: 600;
|
|
color: #4a5568;
|
|
margin-bottom: 10px;
|
|
font-size: 16px;
|
|
}
|
|
|
|
.reason-message {
|
|
color: #4a5568;
|
|
font-style: italic;
|
|
line-height: 1.6;
|
|
margin-top: 8px;
|
|
}
|
|
|
|
.suggestions {
|
|
background: #f0fff4;
|
|
border: 1px solid #9ae6b4;
|
|
border-radius: 12px;
|
|
padding: 25px;
|
|
margin: 25px 0;
|
|
}
|
|
|
|
.suggestions-title {
|
|
font-weight: 600;
|
|
color: #22543d;
|
|
margin-bottom: 15px;
|
|
font-size: 18px;
|
|
}
|
|
|
|
.suggestions-list {
|
|
list-style: none;
|
|
}
|
|
|
|
.suggestions-list li {
|
|
margin-bottom: 12px;
|
|
padding-left: 25px;
|
|
position: relative;
|
|
color: #475569;
|
|
}
|
|
|
|
.suggestions-list li:before {
|
|
content: "💡";
|
|
position: absolute;
|
|
left: 0;
|
|
}
|
|
|
|
.next-steps {
|
|
background: #ebf8ff;
|
|
border: 1px solid #90cdf4;
|
|
border-radius: 12px;
|
|
padding: 25px;
|
|
margin: 25px 0;
|
|
}
|
|
|
|
.steps-title {
|
|
font-weight: 600;
|
|
color: #2c5282;
|
|
margin-bottom: 15px;
|
|
font-size: 18px;
|
|
}
|
|
|
|
.contact-box {
|
|
background: #edf2f7;
|
|
border-radius: 8px;
|
|
padding: 20px;
|
|
margin: 20px 0;
|
|
text-align: center;
|
|
color: #475569;
|
|
}
|
|
|
|
.action-section {
|
|
text-align: center;
|
|
margin: 35px 0 25px;
|
|
}
|
|
|
|
.button {
|
|
display: inline-block;
|
|
background-image: linear-gradient(to right, #e11d48, #db2777, #f97316);
|
|
color: white;
|
|
padding: 16px 32px;
|
|
text-decoration: none;
|
|
border-radius: 8px;
|
|
font-weight: 600;
|
|
font-size: 16px;
|
|
transition: transform 0.2s;
|
|
}
|
|
|
|
.button:hover {
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.email-footer {
|
|
background-image: linear-gradient(to right, #e11d48, #db2777, #f97316);
|
|
padding: 30px;
|
|
text-align: center;
|
|
color: white;
|
|
}
|
|
|
|
.footer-text {
|
|
font-size: 14px;
|
|
margin-bottom: 10px;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
.copyright {
|
|
font-size: 12px;
|
|
margin-top: 15px;
|
|
opacity: 0.8;
|
|
}
|
|
|
|
@media (max-width: 600px) {
|
|
.email-container {
|
|
margin: 10px;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.email-header,
|
|
.email-body,
|
|
.email-footer {
|
|
padding: 25px 20px;
|
|
}
|
|
|
|
.status-card,
|
|
.suggestions,
|
|
.next-steps {
|
|
padding: 20px;
|
|
}
|
|
|
|
.status-icon {
|
|
font-size: 36px;
|
|
}
|
|
|
|
.status-title {
|
|
font-size: 20px;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="email-container">
|
|
<!-- Header -->
|
|
<div class="email-header">
|
|
<h1>Appointment Request Update</h1>
|
|
<p>Regarding your recent booking request</p>
|
|
</div>
|
|
|
|
<!-- Body -->
|
|
<div class="email-body">
|
|
<div class="greeting">
|
|
Hello <strong>{{ appointment.full_name }}</strong>,<br />
|
|
Thank you for your interest in scheduling an appointment. We've
|
|
reviewed your request and need to provide you with an update.
|
|
</div>
|
|
|
|
<!-- Status Card -->
|
|
<div class="status-card">
|
|
<div class="status-title">Request Not Accepted</div>
|
|
<p>
|
|
We're unable to accommodate your appointment request at this time.
|
|
</p>
|
|
</div>
|
|
|
|
<!-- Reason (if provided) -->
|
|
{% if rejection_reason %}
|
|
<div class="reason-box">
|
|
<div class="reason-title">Message from the therapist:</div>
|
|
<div class="reason-message">"{{ rejection_reason }}"</div>
|
|
</div>
|
|
{% endif %}
|
|
|
|
<!-- Suggestions -->
|
|
<div class="suggestions">
|
|
<div class="suggestions-title">Alternative Options</div>
|
|
<ul class="suggestions-list">
|
|
<li>
|
|
Submit a new request with different preferred dates or times
|
|
</li>
|
|
<li>Consider our group therapy sessions with more availability</li>
|
|
<li>Explore our self-guided resources and workshops</li>
|
|
<li>Join our waitlist for last-minute availability</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- Next Steps -->
|
|
<div class="next-steps">
|
|
<div class="steps-title">What You Can Do Next</div>
|
|
<p style="color: #475569; margin-bottom: 15px">
|
|
We value your interest in our services and want to help you find the
|
|
right fit:
|
|
</p>
|
|
<ul class="suggestions-list">
|
|
<li>Submit a new appointment request with adjusted preferences</li>
|
|
<li>Contact us directly to discuss alternative options</li>
|
|
<li>Check back next month for updated availability</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- Action Button -->
|
|
<div class="action-section">
|
|
<a href="{{ user_dashboard_url }}" class="button">
|
|
Submit New Request
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Footer -->
|
|
<div class="email-footer">
|
|
<div class="company-name">{{ settings.SITE_NAME|default:"Attune Heart Therapy" }}</div>
|
|
<p class="support-info">
|
|
Need help? Contact our support team at
|
|
<a
|
|
href="mailto:hello@attunehearttherapy.com"
|
|
style="color: #fff; text-decoration: none"
|
|
>hello@attunehearttherapy.com</a
|
|
>
|
|
</p>
|
|
<p class="copyright">
|
|
© {% now "Y" %} {{ settings.SITE_NAME|default:"Attune Heart Therapy" }}. All rights reserved.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|