From f5f64e22e95b37a7594918f6fcfd9ae7a6e9459b Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Fri, 2 Oct 2026 17:06:08 +0800 Subject: [PATCH] fix(pda): submit null position for return carton picks --- src/api/fulfillment.js | 2 +- tests/fulfillment-workflows.test.mjs | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/api/fulfillment.js b/src/api/fulfillment.js index 41971bf..4addcfd 100644 --- a/src/api/fulfillment.js +++ b/src/api/fulfillment.js @@ -122,7 +122,7 @@ export function outboundPickPayload(item, position, packages, scannedCode = '') const skuScan = item.skuCode && scannedCode === item.skuCode return { outboundPalletItemId: item.outboundPalletItemId, - inventoryPositionId: position.inventoryPositionId, + inventoryPositionId: position.inventoryPositionId || null, packages: Number(packages), cartonMarks: skuScan ? [] : position.cartonMark ? [position.cartonMark] : [], ...(skuScan ? { skuCode: item.skuCode } : {}) diff --git a/tests/fulfillment-workflows.test.mjs b/tests/fulfillment-workflows.test.mjs index 2d3ed35..db1f15c 100644 --- a/tests/fulfillment-workflows.test.mjs +++ b/tests/fulfillment-workflows.test.mjs @@ -36,13 +36,27 @@ test('return outbound preserves its task type and only permits pallet scans for const item = { outboundPalletItemId: '12', skuCode: 'SKU-A' } const position = { inventoryPositionId: '', cartonMark: 'RC-1' } assert.deepEqual(outboundPickPayload(item, position, 1, 'SKU-A'), { - outboundPalletItemId: '12', inventoryPositionId: '', packages: 1, cartonMarks: [], skuCode: 'SKU-A' + outboundPalletItemId: '12', inventoryPositionId: null, packages: 1, cartonMarks: [], skuCode: 'SKU-A' }) assert.deepEqual(outboundPickPayload(item, position, 1, 'RC-1'), { - outboundPalletItemId: '12', inventoryPositionId: '', packages: 1, cartonMarks: ['RC-1'] + outboundPalletItemId: '12', inventoryPositionId: null, packages: 1, cartonMarks: ['RC-1'] }) }) +test('real return-carton DTO remains scannable without inventing a warehouse inventory position or pallet', () => { + const task = normalizeOutboundTask({ task: { taskNo: 'PDA-RETURN', outboundType: 'RETURN_OUTBOUND', status: 'PENDING' }, + items: [{ outboundPalletItemId: '12', palletNo: null, packageCount: 1, pickedPackageCount: 0, + positions: [{ inventoryPositionId: null, palletNo: null, cartonMark: 'RC-REAL', inboundCode: 'RT-REAL', availablePackages: 1, pickedPackages: 0 }] }] }) + const item = task.items[0], position = item.positions[0] + assert.equal(item.palletNo, '') + assert.equal(position.cartonMark, 'RC-REAL') + assert.equal(position.availablePackages, 1) + assert.deepEqual(outboundPickPayload(item, position, 1, 'RC-REAL'), { + outboundPalletItemId: '12', inventoryPositionId: null, packages: 1, cartonMarks: ['RC-REAL'] + }) + assert.equal(outboundPickPayload(item, { ...position, inventoryPositionId: '2099999999999999999' }, 1).inventoryPositionId, '2099999999999999999') +}) + function storageMock() { const values = new Map() globalThis.uni = {