644c99ee30
Sends a confirmation email (best-effort, fire-and-forget SMTP via mailer.py) on booking creation, with a manage-booking link embedding the ticket-2 signed token. Adds /manage/<token>, a stateless cancel/reschedule page that reuses the existing slot-picker against booking_api's create/cancel/reschedule API, distinguishing an invalid/expired link from an already-cancelled one. Sender address uses the client's own domain when configured, falling back to a mivanchenko.de address otherwise. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
26 lines
808 B
HTML
26 lines
808 B
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<title>Terminbestätigung</title>
|
|
</head>
|
|
<body style="margin:0; padding:20px; font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; color:#16302f;">
|
|
<h1 style="font-size:1.2rem; margin:0 0 14px;">{{ business_name }}</h1>
|
|
<p>Hallo {{ customer_name }},</p>
|
|
{% if status == 'pending' %}
|
|
<p>Ihre Buchung wartet noch auf Bestätigung:</p>
|
|
{% else %}
|
|
<p>Ihre Buchung ist bestätigt:</p>
|
|
{% endif %}
|
|
<ul>
|
|
<li>Leistung: {{ service }}</li>
|
|
<li>Termin: {{ start_local.strftime('%d.%m.%Y, %H:%M') }} Uhr</li>
|
|
</ul>
|
|
<p>
|
|
Über den folgenden Link können Sie Ihren Termin jederzeit einsehen, verschieben oder
|
|
stornieren:
|
|
</p>
|
|
<p><a href="{{ manage_url }}">{{ manage_url }}</a></p>
|
|
</body>
|
|
</html>
|