优化
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import type { DiscardCandidate } from '../api/warehouseServices'
|
||||
|
||||
export interface DiscardDocument extends DiscardCandidate {
|
||||
sources: DiscardCandidate[]
|
||||
}
|
||||
|
||||
/** 下拉按来源单据和操作仓汇总;原始库存身份保留给选箱与提交。 */
|
||||
export function groupDiscardDocuments(candidates: DiscardCandidate[]): DiscardDocument[] {
|
||||
const groups = new Map<string, DiscardDocument>()
|
||||
for (const candidate of candidates) {
|
||||
const documentNo = candidate.inboundOrderNo || candidate.inboundCode
|
||||
const key = JSON.stringify([candidate.overseasWarehouseId, candidate.sourceType, documentNo || candidate.orderId])
|
||||
let document = groups.get(key)
|
||||
if (!document) {
|
||||
document = { ...candidate, orderId: key, sources: [], availablePackages: 0 }
|
||||
groups.set(key, document)
|
||||
}
|
||||
document.sources.push(candidate)
|
||||
}
|
||||
for (const document of groups.values()) {
|
||||
const boxes = new Set<string>()
|
||||
let untrackedPackages = 0
|
||||
for (const source of document.sources) {
|
||||
if (source.sourceType === 'RETURN_CARTON' && source.returnCartonId) {
|
||||
// 退货候选的 availablePackages 是箱内 SKU 件数,一条退货箱只计一箱。
|
||||
boxes.add(`RETURN_CARTON:${source.returnCartonId}`)
|
||||
} else if (source.cartonSelectionSupported && source.cartons?.length) {
|
||||
for (const box of source.cartons) boxes.add(`${source.sourceType}:${box.cartonId}`)
|
||||
} else {
|
||||
untrackedPackages += source.availablePackages
|
||||
}
|
||||
}
|
||||
document.availablePackages = boxes.size + untrackedPackages
|
||||
document.cartonSelectionSupported = document.sources.every(source => source.cartonSelectionSupported)
|
||||
document.cartonSelectionBlockReason = document.sources.find(source => !source.cartonSelectionSupported)?.cartonSelectionBlockReason
|
||||
}
|
||||
return [...groups.values()]
|
||||
}
|
||||
Reference in New Issue
Block a user