26 lines
1.4 KiB
JavaScript
26 lines
1.4 KiB
JavaScript
export function returnSelections(task) {
|
|
return (task?.items || []).filter(item => item.returnCartonId && ['SKU_LABEL', 'CARTON_AND_SKU', 'RETURN_BULK_SKU_LABEL'].includes(item.operationType))
|
|
}
|
|
export function returnDeductions(task) {
|
|
const rows = new Map()
|
|
for (const item of returnSelections(task)) {
|
|
const skus = item.operationType === 'RETURN_BULK_SKU_LABEL' ? [{ skuCode: item.skuCode, quantity: item.expectedPackages }] : item.skuItems || []
|
|
for (const sku of skus) {
|
|
const key = `${item.cartonMark}::${sku.skuCode}`
|
|
const row = rows.get(key) || { cartonMark: item.cartonMark, skuCode: sku.skuCode, quantity: 0 }
|
|
row.quantity += Number(sku.quantity || 0); rows.set(key, row)
|
|
}
|
|
}
|
|
return [...rows.values()]
|
|
}
|
|
export function requiresReturnPack(task) {
|
|
const totals = new Map()
|
|
for (const row of returnDeductions(task)) totals.set(row.cartonMark, (totals.get(row.cartonMark) || 0) + row.quantity)
|
|
return returnSelections(task).some(item => !Number(item.returnQuantity) || totals.get(item.cartonMark) < Number(item.returnQuantity))
|
|
}
|
|
export function returnPackFacts(task) {
|
|
return (task?.history || []).filter(row => row.action === 'RETURN_PACK').flatMap(row => {
|
|
try { const detail = typeof row.detail === 'string' ? JSON.parse(row.detail) : row.detail; return detail?.round === (task.reviewedAt || 'INITIAL') ? [detail] : [] } catch { return [] }
|
|
})
|
|
}
|