342 lines
25 KiB
JavaScript
342 lines
25 KiB
JavaScript
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) <export default as ArrowLeft>");
|
|
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) <export default as Printer>");
|
|
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
|