diff --git a/src/queries/create-order.js b/src/queries/create-order.js index b43acb8..93987a2 100644 --- a/src/queries/create-order.js +++ b/src/queries/create-order.js @@ -52,6 +52,19 @@ function toNumber(value, fallback = 0) { return Number.isFinite(n) ? n : fallback; } +// order.creationDate comes in as "YYYY-MM-DD HH:mm:ss" (no timezone); treat it as +// local server time, same as `new Date('YYYY-MM-DDTHH:mm:ss')` would. Falls back to +// the server's current time if missing/unparseable. +function parseOrderDate(creationDate) { + if (creationDate) { + const parsed = new Date(String(creationDate).replace(' ', 'T')); + if (!Number.isNaN(parsed.getTime())) { + return parsed; + } + } + return new Date(); +} + // JTL maps VAT rates to Steuerklassen: 19% => 1 (voller Satz), 7% => 2 (ermäßigt) function steuerklasseForVat(vat) { if (vat >= 15) return 1; @@ -435,10 +448,10 @@ export async function createOrder(order) { try { const zahlungsartCache = new Map(); - // Always use the server's current time for stored timestamps (dErstellt, - // number-sequence date placeholders, payment date) rather than trusting - // the client-supplied order.creationDate. - const orderDate = new Date(); + // Use the client-supplied order.creationDate for stored timestamps (dErstellt, + // number-sequence date placeholders, payment date), falling back to the + // server's current time if it's missing/unparseable. + const orderDate = parseOrderDate(order.creationDate); const { kKunde, kKundengruppe } = await resolveCustomer(transaction, order, defaults); const zahlungsart = await resolveZahlungsart(transaction, order.paymentMethodName, zahlungsartCache); const cAuftragsNr = await nextOrderNumber(transaction, orderDate);