From cb2f6ad37f067adf5325053e2981f744bf012882 Mon Sep 17 00:00:00 2001 From: seb Date: Sat, 17 Oct 2026 04:39:37 +0200 Subject: [PATCH] u --- .../manifest/OrderShipmentDialog.jsx | 35 +++++++++++++++++-- src/components/manifest/ShipmentList.jsx | 13 ++++++- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/components/manifest/OrderShipmentDialog.jsx b/src/components/manifest/OrderShipmentDialog.jsx index 3cd8f36..bf09064 100644 --- a/src/components/manifest/OrderShipmentDialog.jsx +++ b/src/components/manifest/OrderShipmentDialog.jsx @@ -40,6 +40,24 @@ function computeShippedBySku(shipments) { return map; } +// MARK: helper to determine next shipment number preview +export function getNextShipmentNumber(orderNumber, shipments = []) { + if (!orderNumber) return '–'; + let maxIdx = 0; + for (const s of shipments || []) { + const num = String(s.number ?? '').trim(); + const match = num.match(/-L-(\d+)$/i) || num.match(/-(\d+)$/); + if (match) { + const parsed = parseInt(match[1], 10); + if (!Number.isNaN(parsed) && parsed > maxIdx) { + maxIdx = parsed; + } + } + } + const nextIdx = maxIdx > 0 ? maxIdx + 1 : ((shipments?.length || 0) + 1); + return `${orderNumber}-L-${nextIdx}`; +} + /** * Dialog for selecting items and quantities to create a shipment from a sales order. * Calls POST /api/order/:id/shipment. @@ -228,6 +246,7 @@ export default class OrderShipmentDialog extends PureComponent { render() { const { open, onClose, orderNumber, lines = [], shipments = [] } = this.props; const { date, externalNumber, lineAmounts, selectedSkus, saving, error } = this.state; + const nextShipmentNumber = getNextShipmentNumber(orderNumber, shipments); const shippedBySku = computeShippedBySku(shipments); const activeLines = lines.filter((l) => Boolean(l.sku)); @@ -293,7 +312,7 @@ export default class OrderShipmentDialog extends PureComponent { )} - {/* Header controls: date and external reference */} + {/* Header controls: date, preview shipment number, and external reference */} this.setState({ date: e.target.value })} slotProps={{ inputLabel: { shrink: true } }} - sx={{ minWidth: 170 }} + sx={{ minWidth: 160 }} + /> + this.setState({ date: e.target.value })} InputLabelProps={{ shrink: true }} - sx={{ width: 180 }} + sx={{ width: 170 }} /> + {currentOrder ? ( + + ) : null}