feat: simplify same-carton SKU editing
This commit is contained in:
@@ -185,10 +185,15 @@ test('counts one physical carton series for SKU lines in the same mixed-carton g
|
||||
const first = { ...validDraft().items[0], packingGroupNo: 'A', packageCount: 10, pieces: 20, unitsPerPackage: 2 }
|
||||
const second = { ...first, id: 'cargo-2', sku: 'SKU-002', pieces: 30, unitsPerPackage: 3 }
|
||||
|
||||
assert.equal(summarizeFirstLegCargo([first, second]).packageCount, 10)
|
||||
assert.deepEqual(summarizeFirstLegCargo([first, second]), {
|
||||
pieces: 50,
|
||||
packageCount: 10,
|
||||
grossWeightKg: first.grossWeightKg,
|
||||
volumeCbm: first.volumeCbm,
|
||||
})
|
||||
const draft = { ...validDraft(), fulfillmentType: 'ONE_CLICK_DROPSHIP', items: [first, second] }
|
||||
assert.ok(!validateFirstLegOrderDraft(draft).some((message) => message.includes('混箱组合')))
|
||||
assert.ok(!validateFirstLegOrderDraft(draft).some((message) => message.includes('同箱 SKU')))
|
||||
|
||||
second.packageCount = 9
|
||||
assert.ok(validateFirstLegOrderDraft(draft).includes('混箱组合 A 的箱数、包装类型和箱规必须一致'))
|
||||
assert.ok(validateFirstLegOrderDraft(draft).includes('同箱 SKU 的箱数、包装类型、箱规、重量和体积必须一致'))
|
||||
})
|
||||
|
||||
@@ -150,8 +150,10 @@ export function validateFirstLegOrderDraft(draft: FirstLegOrderDraft) {
|
||||
const first = groups.get(group)
|
||||
if (!first) groups.set(group, item)
|
||||
else if (first.packageCount !== item.packageCount || first.packageType !== item.packageType
|
||||
|| first.lengthCm !== item.lengthCm || first.widthCm !== item.widthCm || first.heightCm !== item.heightCm) {
|
||||
errors.push(`混箱组合 ${group} 的箱数、包装类型和箱规必须一致`)
|
||||
|| first.lengthCm !== item.lengthCm || first.widthCm !== item.widthCm || first.heightCm !== item.heightCm
|
||||
|| first.grossWeightKg !== item.grossWeightKg || first.netWeightKg !== item.netWeightKg
|
||||
|| first.volumeCbm !== item.volumeCbm) {
|
||||
errors.push(`同箱 SKU 的箱数、包装类型、箱规、重量和体积必须一致`)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -164,13 +166,14 @@ export function summarizeFirstLegCargo(items: FirstLegCargoItem[]) {
|
||||
return items.reduce(
|
||||
(summary, item) => {
|
||||
const group = item.packingGroupNo.trim()
|
||||
const packageCount = group && countedGroups.has(group) ? 0 : item.packageCount
|
||||
const alreadyCounted = Boolean(group && countedGroups.has(group))
|
||||
const packageCount = alreadyCounted ? 0 : item.packageCount
|
||||
if (group) countedGroups.add(group)
|
||||
return ({
|
||||
pieces: summary.pieces + item.pieces,
|
||||
packageCount: summary.packageCount + packageCount,
|
||||
grossWeightKg: summary.grossWeightKg + item.grossWeightKg,
|
||||
volumeCbm: summary.volumeCbm + item.volumeCbm,
|
||||
grossWeightKg: summary.grossWeightKg + (alreadyCounted ? 0 : item.grossWeightKg),
|
||||
volumeCbm: summary.volumeCbm + (alreadyCounted ? 0 : item.volumeCbm),
|
||||
})
|
||||
},
|
||||
{ pieces: 0, packageCount: 0, grossWeightKg: 0, volumeCbm: 0 },
|
||||
|
||||
Reference in New Issue
Block a user