27 lines
1.4 KiB
JavaScript
27 lines
1.4 KiB
JavaScript
export function defaultPackingBoxes(items) {
|
|
return items.filter(item => Number(item.quantity) > 0).map(item => ({
|
|
quantities: { [item.skuCode]: Number(item.quantity) }, length: '', width: '', height: '', weight: ''
|
|
}))
|
|
}
|
|
|
|
export function packingBoxPayload(box) {
|
|
return { items: Object.entries(box.quantities || {}).filter(([, quantity]) => Number(quantity) > 0)
|
|
.map(([skuCode, quantity]) => ({ skuCode, quantity: Number(quantity) })),
|
|
length: Number(box.length), width: Number(box.width), height: Number(box.height), weight: Number(box.weight) }
|
|
}
|
|
|
|
export function validPackingAllocation(boxes, expected) {
|
|
if (!boxes.length) return false
|
|
const totals = {}
|
|
for (const box of boxes) {
|
|
const payload = packingBoxPayload(box)
|
|
if (!payload.items.length || !['length', 'width', 'height', 'weight'].every(key => Number.isFinite(payload[key]) && payload[key] > 0)) return false
|
|
for (const item of payload.items) {
|
|
if (!Number.isSafeInteger(item.quantity) || item.quantity <= 0 || !Object.hasOwn(expected, item.skuCode)) return false
|
|
totals[item.skuCode] = (totals[item.skuCode] || 0) + item.quantity
|
|
}
|
|
}
|
|
return Object.entries(expected).filter(([, quantity]) => Number(quantity) > 0).every(([sku, quantity]) => totals[sku] === Number(quantity))
|
|
&& Object.keys(totals).length === Object.values(expected).filter(quantity => Number(quantity) > 0).length
|
|
}
|