module.exports = [ "[externals]/fs [external] (fs, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("fs", () => require("fs")); module.exports = mod; }), "[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("path", () => require("path")); module.exports = mod; }), "[externals]/worker_threads [external] (worker_threads, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("worker_threads", () => require("worker_threads")); module.exports = mod; }), "[project]/app/billing/[customerId]/page.tsx [app-ssr] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "default", ()=>InvoiceDraftPage ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowLeft$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/arrow-left.mjs [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$printer$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Printer$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/printer.mjs [app-ssr] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2f$dist$2f$jspdf$2e$node$2e$min$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jspdf/dist/jspdf.node.min.js [app-ssr] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2d$autotable$2f$dist$2f$jspdf$2e$plugin$2e$autotable$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.mjs [app-ssr] (ecmascript)"); // /opt/erp-system/app/billing/[customerId]/page.tsx 'use client'; ; ; ; ; ; ; function InvoiceDraftPage() { const params = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useParams"])(); const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRouter"])(); const customerId = params.customerId; const [entries, setEntries] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])([]); const [customer, setCustomer] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); const [settings, setSettings] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(null); const [loading, setLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useState"])(true); (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useEffect"])(()=>{ if (customerId) fetchData(); }, [ customerId ]); const fetchData = async ()=>{ const [billingRes, settingsRes] = await Promise.all([ fetch('/api/billing'), fetch('/api/settings') ]); if (billingRes.ok && settingsRes.ok) { const allEntries = await billingRes.json(); const filtered = allEntries.filter((e)=>e.ticket.customerId === parseInt(customerId)); setEntries(filtered); if (filtered.length > 0) setCustomer(filtered[0].ticket.customer); setSettings(await settingsRes.json()); } setLoading(false); }; const handleUpdateEntry = async (id, field, value)=>{ const updatedEntries = entries.map((e)=>e.id === id ? { ...e, [field]: value } : e); setEntries(updatedEntries); const entry = updatedEntries.find((e)=>e.id === id); await fetch(`/api/time-entries/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ description: entry.description, durationMins: entry.durationMins }) }); }; const generatePDF = ()=>{ const doc = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2f$dist$2f$jspdf$2e$node$2e$min$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsPDF"](); const dateStr = new Date().toLocaleDateString('de-DE'); const invNo = `RE-${new Date().getFullYear()}-${Math.floor(1000 + Math.random() * 9000)}`; doc.setFontSize(20); doc.text(settings.companyName || "ERP SYSTEM", 14, 20); doc.setFontSize(9); doc.text(settings.companyInfo || "", 14, 30); doc.setFontSize(11); doc.text("Rechnung an:", 14, 55); doc.setFont("helvetica", "bold"); doc.text(customer.companyName || `${customer.firstName} ${customer.lastName}`, 14, 62); doc.setFont("helvetica", "normal"); doc.text(`${customer.address || ''}\n${customer.zipCode || ''} ${customer.city || ''}`, 14, 68); doc.text(`Datum: ${dateStr}`, 140, 62); doc.text(`Rechnungs-Nr: ${invNo}`, 140, 68); const tableData = entries.map((e)=>[ new Date(e.createdAt).toLocaleDateString('de-DE'), `${e.ticket.title}\n${e.description}`, (e.durationMins / 60).toFixed(2) + " h", settings.hourlyRate.toFixed(2) + " €", (e.durationMins / 60 * settings.hourlyRate).toFixed(2) + " €" ]); (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$jspdf$2d$autotable$2f$dist$2f$jspdf$2e$plugin$2e$autotable$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"])(doc, { startY: 90, head: [ [ 'Datum', 'Leistung', 'Menge', 'Einzelpreis', 'Gesamt' ] ], body: tableData, theme: 'striped', headStyles: { fillColor: [ 79, 70, 229 ] } }); const netTotal = entries.reduce((sum, e)=>sum + e.durationMins / 60 * settings.hourlyRate, 0); const tax = netTotal * (settings.taxRate / 100); const grossTotal = netTotal + tax; const finalY = doc.lastAutoTable.finalY + 10; doc.text(`Netto Gesamt:`, 140, finalY); doc.text(`${netTotal.toFixed(2)} €`, 180, finalY, { align: 'right' }); doc.text(`USt. ${settings.taxRate}%:`, 140, finalY + 6); doc.text(`${tax.toFixed(2)} €`, 180, finalY + 6, { align: 'right' }); doc.setFont("helvetica", "bold"); doc.text(`Rechnungsbetrag:`, 140, finalY + 14); doc.text(`${grossTotal.toFixed(2)} €`, 180, finalY + 14, { align: 'right' }); doc.save(`Rechnung_${invNo}.pdf`); }; if (loading) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "p-8", children: "Lade Entwurf..." }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 103, columnNumber: 23 }, this); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "max-w-5xl mx-auto space-y-6", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center justify-between", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: ()=>router.back(), className: "text-slate-500 hover:text-slate-800 flex items-center gap-2 transition", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$left$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowLeft$3e$__["ArrowLeft"], { className: "w-4 h-4" }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 109, columnNumber: 11 }, this), " Abbrechen" ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 108, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: generatePDF, className: "bg-indigo-600 text-white px-6 py-2.5 rounded-lg font-bold shadow-lg flex items-center gap-2 hover:bg-indigo-700 transition", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$printer$2e$mjs__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Printer$3e$__["Printer"], { className: "w-5 h-5" }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 112, columnNumber: 11 }, this), " PDF erstellen" ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 111, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 107, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "bg-white p-8 rounded-2xl shadow-sm border border-slate-200", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", { className: "text-2xl font-bold text-slate-900 mb-6", children: "Rechnung korrigieren" }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 117, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("table", { className: "w-full text-sm", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("thead", { className: "bg-slate-50 text-slate-600 border-y border-slate-100", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("th", { className: "py-3 px-4 text-left", children: "Beschreibung" }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 121, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("th", { className: "py-3 px-4 text-right", children: "Minuten" }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 122, columnNumber: 15 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("th", { className: "py-3 px-4 text-right", children: "Betrag" }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 123, columnNumber: 15 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 120, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 119, columnNumber: 11 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("tbody", { className: "divide-y divide-slate-100", children: entries.map((entry)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("tr", { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("td", { className: "py-4 px-4", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", { className: "w-full border-none p-0 focus:ring-0 text-slate-700 bg-transparent resize-none", rows: 2, value: entry.description, onChange: (e)=>handleUpdateEntry(entry.id, 'description', e.target.value) }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 130, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 129, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("td", { className: "py-4 px-4 text-right", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { type: "number", step: "15", className: "w-20 text-right border border-slate-200 rounded p-1", value: entry.durationMins, onChange: (e)=>handleUpdateEntry(entry.id, 'durationMins', parseInt(e.target.value)) }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 133, columnNumber: 19 }, this) }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 132, columnNumber: 17 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("td", { className: "py-4 px-4 text-right font-mono", children: [ (entry.durationMins / 60 * settings.hourlyRate).toFixed(2), " €" ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 135, columnNumber: 17 }, this) ] }, entry.id, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 128, columnNumber: 15 }, this)) }, void 0, false, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 126, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 118, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 116, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/app/billing/[customerId]/page.tsx", lineNumber: 106, columnNumber: 5 }, this); } }), ]; //# sourceMappingURL=%5Broot-of-the-server%5D__08skjhc._.js.map