43 lines
1.0 KiB
JavaScript
43 lines
1.0 KiB
JavaScript
function canPreserveSpecial(parts, title, num) {
|
|
const sequences = new Set(parts.map((part) => part.F_SEQ));
|
|
return (
|
|
parts.length > 0 &&
|
|
sequences.size === parts.length &&
|
|
parts.every((part) => Boolean(part.F_SEQ)) &&
|
|
[
|
|
["F_MCOST", "F_MPRICE"],
|
|
["F_LCOST", "F_LPRICE"],
|
|
["F_ECOST", "F_EPRICE"],
|
|
].every(
|
|
([field, total]) =>
|
|
Math.abs(parts.reduce((sum, part) => sum + num(part[field]), 0) - num(title[total])) < 1e-6,
|
|
)
|
|
);
|
|
}
|
|
|
|
function fixedSpecialPart(part, source, pk, num) {
|
|
const GC = num(part.F_MCOST),
|
|
NC = num(part.F_LCOST),
|
|
JC = num(part.F_ECOST);
|
|
return {
|
|
PkID: pk,
|
|
Index: 0,
|
|
Code: source ? part.F_CODE1 : "",
|
|
JdlSourceCode: part.F_CODE1,
|
|
Name: part.F_DES,
|
|
Size: part.F_SIZE,
|
|
Unite: part.F_UNIT,
|
|
LinkIndex: source?.kind || 0,
|
|
CalcIndex: 1,
|
|
JdlSummary: true,
|
|
GN: num(part.F_QQTY),
|
|
GC,
|
|
NC,
|
|
JC,
|
|
SC: 0,
|
|
TC: GC + NC + JC,
|
|
};
|
|
}
|
|
|
|
module.exports = { canPreserveSpecial, fixedSpecialPart };
|