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/[id]/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, "PUT", ()=>PUT ]); 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__; ; ; ; ; 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')}`; } // Set status to ARCHIVED while preserving original status in previousStatus async function archiveDoc(docId) { const doc = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.findUnique({ where: { id: docId }, select: { status: true } }); if (!doc || doc.status === 'ARCHIVED' || doc.status === 'CANCELLED') return; await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.update({ where: { id: docId }, data: { previousStatus: doc.status, status: 'ARCHIVED' } }); } // Walk the chain back via sourceDocumentId and collect all related doc IDs async function getChainIds(docId) { const ids = []; let currentId = docId; while(currentId){ const doc = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.findUnique({ where: { id: currentId }, select: { sourceDocumentId: true } }); if (doc?.sourceDocumentId) { ids.push(doc.sourceDocumentId); currentId = doc.sourceDocumentId; } else { currentId = null; } } return ids; } async function GET(request, context) { try { const { id } = await context.params; const doc = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.findUnique({ where: { id: parseInt(id) }, include: { customer: true, items: { include: { product: true } }, createdBy: { select: { firstName: true, lastName: true } } } }); if (!doc) 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: 'Nicht gefunden' }, { status: 404 }); 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); } catch (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 PUT(request, context) { 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"]); 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 { id } = await context.params; const body = await request.json(); const docId = parseInt(id); // Handle signature (not for invoices/credit notes) if (body.signatureData) { const doc = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.findUnique({ where: { id: docId } }); if (doc?.type === 'INVOICE' || doc?.type === 'CREDIT_NOTE') { 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: 'Kann nicht unterschrieben werden' }, { status: 400 }); } const updated = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.update({ where: { id: docId }, data: { signatureData: body.signatureData, signedAt: new Date(), status: 'ACCEPTED' } }); 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(updated); } // Handle "create follow-up document" action if (body.action === 'CREATE_FOLLOWUP') { const doc = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.findUnique({ where: { id: docId }, include: { items: true } }); if (!doc) 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: 'Not found' }, { status: 404 }); let newType = ''; if (doc.type === 'ORDER_CONFIRMATION') newType = 'DELIVERY_NOTE'; else if (doc.type === 'DELIVERY_NOTE') newType = 'INVOICE'; else if (doc.type === 'INVOICE') newType = 'CREDIT_NOTE'; else 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: 'Kein Folgebeleg möglich' }, { status: 400 }); const number = await generateNumber(newType); const followUp = 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: newType, number, customerId: doc.customerId, createdById: session?.user?.id || null, sourceDocumentId: doc.id, subtotal: doc.subtotal, taxAmount: doc.taxAmount, total: doc.total, notes: newType === 'CREDIT_NOTE' ? `Rechnungskorrektur zu ${doc.number}` : doc.notes, items: { create: doc.items.map((i)=>({ description: i.description, quantity: i.quantity, unitPrice: i.unitPrice, taxRate: i.taxRate, total: i.total, productId: i.productId })) } }, include: { items: true } }); // CREDIT_NOTE → cancel the original invoice if (newType === 'CREDIT_NOTE') { await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.update({ where: { id: doc.id }, data: { previousStatus: doc.status, status: 'CANCELLED' } }); } else { // Archive the source document await archiveDoc(doc.id); } // If creating an INVOICE → also archive all earlier docs in the chain if (newType === 'INVOICE') { const chainIds = await getChainIds(followUp.id); for (const cid of chainIds){ await archiveDoc(cid); } } 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(followUp, { status: 201 }); } // Handle status changes if (body.status) { const doc = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.findUnique({ where: { id: docId }, include: { items: { include: { product: true } } } }); if (!doc) 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: 'Not found' }, { status: 404 }); // QUOTE accepted → reserve stock + auto-create AB (SENT) + archive quote if (doc.type === 'QUOTE' && body.status === 'ACCEPTED') { for (const item of doc.items){ if (item.productId && item.product?.trackStock) { await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].product.update({ where: { id: item.productId }, data: { reservedStock: { increment: Math.ceil(item.quantity) } } }); } } // Auto-create AB with status SENT const abNumber = await generateNumber('ORDER_CONFIRMATION'); const ab = 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: 'ORDER_CONFIRMATION', number: abNumber, status: 'SENT', customerId: doc.customerId, createdById: session?.user?.id || null, sourceDocumentId: doc.id, subtotal: doc.subtotal, taxAmount: doc.taxAmount, total: doc.total, notes: doc.notes, items: { create: doc.items.map((i)=>({ description: i.description, quantity: i.quantity, unitPrice: i.unitPrice, taxRate: i.taxRate, total: i.total, productId: i.productId })) } } }); // Archive the quote (preserving ACCEPTED as previousStatus) await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.update({ where: { id: docId }, data: { previousStatus: 'ACCEPTED', status: 'ARCHIVED' } }); 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: 'ARCHIVED', followUpId: ab.id, followUpNumber: ab.number }); } // DELIVERY_NOTE delivered → reduce stock if (doc.type === 'DELIVERY_NOTE' && body.status === 'DELIVERED') { for (const item of doc.items){ if (item.productId && item.product?.trackStock) { await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].product.update({ where: { id: item.productId }, data: { stock: { decrement: Math.ceil(item.quantity) }, reservedStock: { decrement: Math.ceil(item.quantity) } } }); } } } // INVOICE paid → mark as paid then archive if (doc.type === 'INVOICE' && body.status === 'PAID') { await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.update({ where: { id: docId }, data: { previousStatus: 'PAID', status: 'ARCHIVED' } }); 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: 'ARCHIVED', previousStatus: 'PAID' }); } } const updated = await __TURBOPACK__imported__module__$5b$project$5d2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].salesDocument.update({ where: { id: docId }, data: { status: body.status || undefined, notes: body.notes !== undefined ? body.notes : undefined }, 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(updated); } 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' }, { status: 500 }); } } __turbopack_async_result__(); } catch(e) { __turbopack_async_result__(e); } }, false);}), ]; //# sourceMappingURL=%5Broot-of-the-server%5D__13_7gv.._.js.map