import { Document, Page, Text, View, StyleSheet, Font } from '@react-pdf/renderer'; // Create styles const styles = StyleSheet.create({ page: { padding: 50, fontSize: 10, color: '#333', fontFamily: 'Helvetica', }, header: { flexDirection: 'row', justifyContent: 'space-between', marginBottom: 40, }, companyInfo: { textAlign: 'right', }, title: { fontSize: 24, color: '#000', marginBottom: 20, }, section: { marginBottom: 20, }, label: { fontSize: 8, color: '#999', textTransform: 'uppercase', marginBottom: 2, }, table: { width: 'auto', borderStyle: 'solid', borderWidth: 1, borderColor: '#eee', borderRightWidth: 0, borderBottomWidth: 0, marginBottom: 20, }, tableRow: { margin: 'auto', flexDirection: 'row', }, tableCol: { width: '60%', borderStyle: 'solid', borderWidth: 1, borderColor: '#eee', borderLeftWidth: 0, borderTopWidth: 0, padding: 8, }, tableColPrice: { width: '40%', borderStyle: 'solid', borderWidth: 1, borderColor: '#eee', borderLeftWidth: 0, borderTopWidth: 0, padding: 8, textAlign: 'right', }, tableCell: { margin: 'auto', marginTop: 5, fontSize: 10, }, total: { flexDirection: 'row', justifyContent: 'flex-end', marginTop: 20, borderTop: 1, borderColor: '#000', paddingTop: 10, }, totalLabel: { fontSize: 14, fontWeight: 'bold', }, footer: { position: 'absolute', bottom: 30, left: 50, right: 50, textAlign: 'center', color: '#999', fontSize: 8, borderTop: 1, borderColor: '#eee', paddingTop: 10, }, }); export const InvoicePDF = ({ order, orderSnapshot, customer }: any) => { const items = orderSnapshot?.items ?? []; const subtotal = orderSnapshot?.subtotal ?? 0; const taxAmount = orderSnapshot?.tax_amount ?? 0; const taxRate = orderSnapshot?.tax_rate ?? 19; const total = orderSnapshot?.total ?? 0; return ( CASPOS Software Solutions CASPOS GmbH Musterstraße 1 12345 Musterstadt Deutschland Bestellbestätigung Besteller / Kunde {customer.company_name} {customer.first_name} {customer.last_name} {customer.address} {customer.zip_code} {customer.city} USt-IdNr: {customer.vat_id} Bestelldetails Bestellnummer: {order.order_number || order.id} Datum: {new Date(order.created_at || Date.now()).toLocaleDateString('de-DE')} Beschreibung Preis (netto) {items.map((item: any, idx: number) => ( {item.product_name} ({item.category_name}) {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(item.base_price)} {' '}{item.billing_interval === 'one_time' ? 'einmalig' : 'mtl.'} {item.selected_modules?.map((mod: any, mIdx: number) => { const qty = mod.quantity || 1; const price = mod.total_price ?? (mod.price * qty); const hasQty = qty > 1; return ( + {mod.module_name} {hasQty ? `(x${qty})` : ''} +{new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(price)} ); })} ))} Netto-Zwischensumme: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(subtotal)} zzgl. {taxRate}% USt: {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(taxAmount)} Gesamtbetrag (brutto): {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(total)} Vielen Dank für Ihre Bestellung! Dies ist ein automatisch generiertes Dokument. ); };