45 lines
2.4 KiB
JavaScript
45 lines
2.4 KiB
JavaScript
import { overseasRequest, overseasUpload } from './overseas.js'
|
|||
|
|
|
||
|
|
const BASE = '/pda/v1/last-leg/relabel-tasks'
|
||
|
|
const encoded = (value) => encodeURIComponent(String(value || '').trim())
|
||
|
|
|
||
|
|
function asList(value) { return Array.isArray(value) ? value : [] }
|
||
|
|
|
||
|
|
export function normalizeRelabel(value = {}) {
|
||
|
|
return {
|
||
|
|
...value,
|
||
|
|
relabelNo: String(value.relabelNo || ''), customerOrderNo: String(value.customerOrderNo || ''),
|
||
|
|
version: Number(value.version || 0), expectedPackages: Number(value.expectedPackages || 0),
|
||
|
|
relabelledPackages: Number(value.relabelledPackages || 0), skippedPackages: Number(value.skippedPackages || 0),
|
||
|
|
exceptionPackages: Number(value.exceptionPackages || 0),
|
||
|
|
items: asList(value.items).map((item) => ({
|
||
|
|
...item, itemId: String(item.itemId || ''), skuCode: String(item.skuCode || ''),
|
||
|
|
newSkuCode: String(item.newSkuCode || ''), expectedPackages: Number(item.expectedPackages || 0),
|
||
|
|
relabelledPackages: Number(item.relabelledPackages || 0), skippedPackages: Number(item.skippedPackages || 0),
|
||
|
|
exceptionPackages: Number(item.exceptionPackages || 0)
|
||
|
|
})),
|
||
|
|
unitFacts: asList(value.unitFacts), history: asList(value.history),
|
||
|
|
completionPhotoFileIds: asList(value.completionPhotoFileIds).map(String)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function listRelabelCandidates() {
|
||
|
|
return asList(await overseasRequest('GET', `${BASE}/candidates`)).map(normalizeRelabel)
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function getRelabelTask(relabelNo) {
|
||
|
|
return normalizeRelabel(await overseasRequest('GET', `${BASE}/${encoded(relabelNo)}`))
|
||
|
|
}
|
||
|
|
|
||
|
|
async function detailAction(relabelNo, suffix, request) {
|
||
|
|
return normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(relabelNo)}${suffix}`, request))
|
||
|
|
}
|
||
|
|
|
||
|
|
export const claimRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/claim', request)
|
||
|
|
export const relabelUnit = (relabelNo, request) => detailAction(relabelNo, '/units', request)
|
||
|
|
export const skipRelabelUnit = (relabelNo, request) => detailAction(relabelNo, '/units/skip', request)
|
||
|
|
export const reportRelabelException = (relabelNo, request) => detailAction(relabelNo, '/exceptions', request)
|
||
|
|
export const completeRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/complete', request)
|
||
|
|
export const reviewRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/review', request)
|
||
|
|
export const uploadRelabelPhoto = (relabelNo, filePath) => overseasUpload(`${BASE}/${encoded(relabelNo)}/photos/files`, filePath)
|