diff --git a/shop/lib/actions/email-templates.ts b/shop/lib/actions/email-templates.ts index 209f167..0357beb 100644 --- a/shop/lib/actions/email-templates.ts +++ b/shop/lib/actions/email-templates.ts @@ -85,3 +85,66 @@ export function getStatusEmailTemplate(orderNumber: string, oldLabel: string, ne 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 + } +} + diff --git a/shop/lib/actions/orders.ts b/shop/lib/actions/orders.ts index 55e7849..25aff1e 100644 --- a/shop/lib/actions/orders.ts +++ b/shop/lib/actions/orders.ts @@ -12,71 +12,10 @@ import { buildCustomerSnapshot, buildOrderSnapshot } from '@/lib/license-transfo import type { Category, EndCustomer, Order, Product, Profile, WizardSelections } from '@/lib/types' import { getProducts, getCategories } from '@/lib/actions/products' import { validateWizardSelections } from '@/lib/actions/validation' -import { getOrderEmailTemplate, getStatusEmailTemplate } from '@/lib/actions/email-templates' +import { getOrderEmailTemplate, getStatusEmailTemplate, buildEmailItemsSection } from '@/lib/actions/email-templates' // ─── Hilfsfunktionen ───────────────────────────────────────────────────────── -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 - } -} /**