interface EmailDetails { orderNumber: string formattedDate: string customerCompanyName: string totalDetailsText: string totalDetailsHtml: string itemsDetailsText?: string itemsDetailsHtml?: string } export function getOrderEmailTemplate( details: EmailDetails, siteUrl: string, isUpdate: boolean = false ) { const title = isUpdate ? 'Anfrage geändert' : 'Anfrage erhalten' const intro = isUpdate ? `Deine Anfrage ${details.orderNumber} wurde aktualisiert.` : `Deine Anfrage ${details.orderNumber} ist bei uns eingegangen und wird bearbeitet.` const text = `Hallo,\n\n${isUpdate ? 'Deine Anfrage wurde aktualisiert.' : 'Deine Anfrage ist bei uns eingegangen.'}\n\nDetails:\n- Nummer: ${details.orderNumber}\n- Datum: ${details.formattedDate}\n- Kunde: ${details.customerCompanyName}\n${details.itemsDetailsText || ''}\n${details.totalDetailsText}\n\nDeine Anfragebestätigung findest du im Anhang als PDF.\n\nPDF-Link: ${siteUrl}/api/orders/${details.orderNumber}/download\n\nViele Grüße,\nDein CASPOS Team` const html = `

${title}

Hallo,

${intro}

Details

${details.itemsDetailsHtml || ''} ${details.totalDetailsHtml}
Nummer: ${details.orderNumber}
Datum: ${details.formattedDate}
Kunde: ${details.customerCompanyName}

Die Bestätigung liegt als PDF im Anhang.

Anfragebestätigung PDF herunterladen

Viele Grüße,
Dein CASPOS Team

` return { text, html } } export function getStatusEmailTemplate(orderNumber: string, oldLabel: string, newLabel: string) { const text = `Hallo,\n\nder Status deiner Anfrage ${orderNumber} hat sich geändert.\n\nStatus: ${newLabel} (vorher: ${oldLabel})\n\nViele Grüße,\nDein CASPOS Team` const html = `

Statusänderung

Hallo,

der Status deiner Anfrage ${orderNumber} wurde aktualisiert.

Nummer: ${orderNumber}
Vorher: ${oldLabel}
Aktuell: ${newLabel}

Viele Grüße,
Dein CASPOS Team

` return { text, html } } export function buildEmailItemsSection(items: any[]) { const groupedItems: { [key: string]: any[] } = {} items.forEach((item: any) => { const devName = item.device_name || 'Kasse 1' if (!groupedItems[devName]) { groupedItems[devName] = [] } groupedItems[devName].push(item) }) let itemsDetailsText = '\nKassen-Konfigurationen:' let itemsDetailsHtml = ` Kassen-Konfigurationen: ` Object.entries(groupedItems).forEach(([deviceName, devItems]) => { itemsDetailsText += `\n- Kasse: ${deviceName}` itemsDetailsHtml += ` Kasse: ${deviceName} ` devItems.forEach((item: any) => { itemsDetailsText += `\n * ${item.product_name} (${item.category_name}): ${item.base_price.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })} ${item.billing_interval === 'one_time' ? 'einmalig' : 'mtl.'}` itemsDetailsHtml += ` ${item.product_name} (${item.category_name}) ${item.base_price.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })} ${item.billing_interval === 'one_time' ? 'einmalig' : 'mtl.'} ` item.selected_modules?.forEach((mod: any) => { const qty = mod.quantity || 1 const price = mod.total_price ?? (mod.price * qty) itemsDetailsText += `\n + ${mod.module_name} ${qty > 1 ? `(x${qty})` : ''}: +${price.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })} mtl.` itemsDetailsHtml += ` + ${mod.module_name} ${qty > 1 ? `(x${qty})` : ''} +${price.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' })} mtl. ` }) }) }) return { text: itemsDetailsText + '\n', html: itemsDetailsHtml } }