module.exports = [ "[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js")); module.exports = mod; }), "[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api")); module.exports = mod; }), "[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js")); module.exports = mod; }), "[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js")); module.exports = mod; }), "[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js")); module.exports = mod; }), "[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js")); module.exports = mod; }), "[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js")); module.exports = mod; }), "[project]/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => { "use strict"; return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try { __turbopack_context__.s([ "default", ()=>__TURBOPACK__default__export__, "prisma", ()=>prisma ]); // /opt/erp-system/lib/prisma.ts var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f40$prisma$2f$client$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs, [project]/node_modules/@prisma/client)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@prisma/adapter-pg/dist/index.mjs [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__ = __turbopack_context__.i("[externals]/pg [external] (pg, esm_import, [project]/node_modules/pg)"); var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([ __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__ ]); [__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__; ; ; ; // Verhindert zu viele offene Verbindungen beim Hot-Reloading in Next.js const globalForPrisma = /*TURBOPACK member replacement*/ __turbopack_context__.g; const pool = new __TURBOPACK__imported__module__$5b$externals$5d2f$pg__$5b$external$5d$__$28$pg$2c$__esm_import$2c$__$5b$project$5d2f$node_modules$2f$pg$29$__["Pool"]({ connectionString: process.env.DATABASE_URL }); const adapter = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$prisma$2f$adapter$2d$pg$2f$dist$2f$index$2e$mjs__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PrismaPg"](pool); const prisma = globalForPrisma.prisma || new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$2c$__$5b$project$5d2f$node_modules$2f40$prisma$2f$client$29$__["PrismaClient"]({ adapter }); if ("TURBOPACK compile-time truthy", 1) globalForPrisma.prisma = prisma; const __TURBOPACK__default__export__ = prisma; __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), "[externals]/util [external] (util, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("util", () => require("util")); module.exports = mod; }), "[externals]/url [external] (url, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("url", () => require("url")); module.exports = mod; }), "[externals]/http [external] (http, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("http", () => require("http")); module.exports = mod; }), "[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("crypto", () => require("crypto")); module.exports = mod; }), "[externals]/assert [external] (assert, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("assert", () => require("assert")); module.exports = mod; }), "[externals]/querystring [external] (querystring, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("querystring", () => require("querystring")); module.exports = mod; }), "[externals]/buffer [external] (buffer, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("buffer", () => require("buffer")); module.exports = mod; }), "[externals]/zlib [external] (zlib, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("zlib", () => require("zlib")); module.exports = mod; }), "[externals]/https [external] (https, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("https", () => require("https")); module.exports = mod; }), "[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => { const mod = __turbopack_context__.x("events", () => require("events")); module.exports = mod; }), "[project]/app/api/auth/[...nextauth]/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => { "use strict"; return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try { __turbopack_context__.s([ "GET", ()=>handler, "POST", ()=>handler, "authOptions", ()=>authOptions ]); // /opt/erp-system/app/api/auth/[...nextauth]/route.ts var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/index.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/prisma.ts [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/bcryptjs/index.js [app-route] (ecmascript)"); var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([ __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ ]); [__TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__; ; ; ; ; const authOptions = { providers: [ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({ name: "Credentials", credentials: { email: { label: "Email", type: "email" }, password: { label: "Passwort", type: "password" } }, async authorize (credentials) { if (!credentials?.email || !credentials?.password) return null; const teamUser = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].user.findUnique({ where: { email: credentials.email }, include: { role: true } }); if (teamUser) { const match = await __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, teamUser.passwordHash); if (match) { return { id: `TEAM_${teamUser.id}`, dbId: teamUser.id, email: teamUser.email, firstName: teamUser.firstName, lastName: teamUser.lastName, roleName: teamUser.role?.name || 'Keine Rolle', permissions: teamUser.role?.permissions || [], userType: 'TEAM', forcePasswordChange: false }; } } const customer = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].customer.findUnique({ where: { email: credentials.email } }); if (customer && customer.passwordHash) { const match = await __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, customer.passwordHash); if (match) { return { id: `CUST_${customer.id}`, dbId: customer.id, email: customer.email, firstName: customer.firstName, lastName: customer.lastName, roleName: 'Kunde', permissions: [], userType: 'CUSTOMER', companyName: customer.companyName, forcePasswordChange: customer.forcePasswordChange // WICHTIG: Flag übergeben }; } } return null; } }) ], callbacks: { async jwt ({ token, user }) { if (user) { token.dbId = user.dbId; token.firstName = user.firstName; token.lastName = user.lastName; token.roleName = user.roleName; token.permissions = user.permissions; token.userType = user.userType; token.companyName = user.companyName; token.forcePasswordChange = user.forcePasswordChange; } return token; }, async session ({ session, token }) { if (token) { session.user.id = token.dbId; session.user.firstName = token.firstName; session.user.lastName = token.lastName; session.user.roleName = token.roleName; session.user.permissions = token.permissions || []; session.user.userType = token.userType; session.user.companyName = token.companyName; session.user.forcePasswordChange = token.forcePasswordChange; } return session; } }, pages: { signIn: "/login" }, secret: process.env.NEXTAUTH_SECRET }; const handler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])(authOptions); ; __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), "[project]/app/api/sales/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => { "use strict"; return __turbopack_context__.a(async (__turbopack_handle_async_dependencies__, __turbopack_async_result__) => { try { __turbopack_context__.s([ "GET", ()=>GET, "POST", ()=>POST ]); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/server.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/lib/prisma.ts [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$next$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next-auth/next/index.js [app-route] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$api$2f$auth$2f5b2e2e2e$nextauth$5d2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/api/auth/[...nextauth]/route.ts [app-route] (ecmascript)"); var __turbopack_async_dependencies__ = __turbopack_handle_async_dependencies__([ __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$api$2f$auth$2f5b2e2e2e$nextauth$5d2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ ]); [__TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__, __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$api$2f$auth$2f5b2e2e2e$nextauth$5d2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__] = __turbopack_async_dependencies__.then ? (await __turbopack_async_dependencies__)() : __turbopack_async_dependencies__; ; ; ; ; async function getSession() { const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2d$auth$2f$next$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$app$2f$api$2f$auth$2f5b2e2e2e$nextauth$5d2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]); if (!session) return null; return session; } const PREFIXES = { QUOTE: 'ANG', ORDER_CONFIRMATION: 'AB', DELIVERY_NOTE: 'LS', INVOICE: 'RE', CREDIT_NOTE: 'RK' }; const NUMBER_FIELDS = { QUOTE: 'nextQuoteNumber', ORDER_CONFIRMATION: 'nextOrderNumber', DELIVERY_NOTE: 'nextDeliveryNumber', INVOICE: 'nextInvoiceNumber', CREDIT_NOTE: 'nextCreditNoteNumber' }; async function generateNumber(type) { const settings = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].systemSettings.findFirst(); if (!settings) throw new Error('SystemSettings not found'); const year = new Date().getFullYear(); const prefix = PREFIXES[type] || 'DOC'; const field = NUMBER_FIELDS[type]; const num = settings[field] || 1; await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].systemSettings.update({ where: { id: settings.id }, data: { [field]: num + 1 } }); return `${prefix}-${year}-${num.toString().padStart(4, '0')}`; } async function GET(request) { const session = await getSession(); if (!session) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Unauthorized' }, { status: 401 }); try { const { searchParams } = new URL(request.url); const customerId = searchParams.get('customerId'); const where = customerId ? { customerId: parseInt(customerId) } : {}; const docs = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.findMany({ where, include: { customer: { select: { companyName: true, firstName: true, lastName: true } }, items: { include: { product: { select: { name: true } } } }, createdBy: { select: { firstName: true, lastName: true } } }, orderBy: { createdAt: 'desc' } }); return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json(docs); } catch (error) { console.error(error); return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Ladefehler' }, { status: 500 }); } } async function POST(request) { const session = await getSession(); const perms = session?.user?.permissions || []; if (!perms.includes('SALES_MANAGE')) return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Keine Berechtigung' }, { status: 403 }); try { const body = await request.json(); const number = await generateNumber(body.type); // Auto-set validity for quotes let validUntil = body.validUntil ? new Date(body.validUntil) : null; if (body.type === 'QUOTE' && !validUntil) { const settings = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].systemSettings.findFirst(); if (settings?.defaultQuoteValidityDays) { validUntil = new Date(); validUntil.setDate(validUntil.getDate() + settings.defaultQuoteValidityDays); } } // Calculate totals let subtotal = 0; const items = (body.items || []).map((item)=>{ const total = item.quantity * item.unitPrice; subtotal += total; return { ...item, total, taxRate: 19 }; }); const taxAmount = subtotal * 0.19; const total = subtotal + taxAmount; const doc = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.create({ data: { type: body.type, number, customerId: body.customerId, createdById: session?.user?.id || null, notes: body.notes || null, validUntil, subtotal, taxAmount, total, items: { create: items.map((i)=>({ description: i.description, quantity: i.quantity, unitPrice: i.unitPrice, taxRate: i.taxRate, total: i.total, productId: i.productId || null })) } }, include: { items: true, customer: true } }); return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json(doc, { status: 201 }); } catch (error) { console.error(error); return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({ error: 'Fehler beim Erstellen' }, { status: 500 }); } } __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), ]; //# sourceMappingURL=%5Broot-of-the-server%5D__02kjj65._.js.map