feat: Add inspiration photo attachment to admin booking notifications
- Create sendEmailWithInspirationPhoto() function to handle photo attachments - Add renderAdminBookingNotificationHTML() template for admin notifications - Extract photo extension and content from base64 data URLs - Generate unique filenames with customer name and timestamp - Send separate admin notification email with photo attachment - Include comprehensive booking details in admin email - Add visual indicators for photo availability in email template - Support both HTML and text versions of admin notifications - Handle cases where no photo is uploaded gracefully - Import treatments KV to get treatment names for admin emails Features: - Inspiration photos automatically attached to admin notifications - Structured admin email with all booking details - Photo filename includes customer name and timestamp - Fallback handling for missing photos - German localization for admin notifications - Visual photo availability indicators (✅/❌) Changes: - email.ts: Add sendEmailWithInspirationPhoto() function - email-templates.ts: Add renderAdminBookingNotificationHTML() template - bookings.ts: Send admin notifications with photo attachments
This commit is contained in:
@@ -91,4 +91,36 @@ export async function renderBookingCancelledHTML(params: { name: string; date: s
|
||||
return renderBrandedEmail("Termin abgesagt", inner);
|
||||
}
|
||||
|
||||
export async function renderAdminBookingNotificationHTML(params: {
|
||||
name: string;
|
||||
date: string;
|
||||
time: string;
|
||||
treatment: string;
|
||||
phone: string;
|
||||
notes?: string;
|
||||
hasInspirationPhoto: boolean;
|
||||
}) {
|
||||
const { name, date, time, treatment, phone, notes, hasInspirationPhoto } = params;
|
||||
const formattedDate = formatDateGerman(date);
|
||||
const inner = `
|
||||
<p>Hallo Admin,</p>
|
||||
<p>eine neue Buchungsanfrage ist eingegangen:</p>
|
||||
<div style="background-color: #f8fafc; border-left: 4px solid #db2777; padding: 16px; margin: 20px 0; border-radius: 4px;">
|
||||
<p style="margin: 0; font-weight: 600; color: #db2777;">📅 Buchungsdetails:</p>
|
||||
<ul style="margin: 8px 0 0 0; color: #475569; list-style: none; padding: 0;">
|
||||
<li><strong>Name:</strong> ${name}</li>
|
||||
<li><strong>Telefon:</strong> ${phone}</li>
|
||||
<li><strong>Behandlung:</strong> ${treatment}</li>
|
||||
<li><strong>Datum:</strong> ${formattedDate}</li>
|
||||
<li><strong>Uhrzeit:</strong> ${time}</li>
|
||||
${notes ? `<li><strong>Notizen:</strong> ${notes}</li>` : ''}
|
||||
<li><strong>Inspiration-Foto:</strong> ${hasInspirationPhoto ? '✅ Im Anhang verfügbar' : '❌ Kein Foto hochgeladen'}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p>Bitte logge dich in das Admin-Panel ein, um die Buchung zu bestätigen oder abzulehnen.</p>
|
||||
<p>Liebe Grüße,<br/>Stargirlnails System</p>
|
||||
`;
|
||||
return renderBrandedEmail("Neue Buchungsanfrage - Admin-Benachrichtigung", inner);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user