feat(est-test): preserve nested JDL details

This commit is contained in:
2026-11-09 19:25:37 +09:00
parent cdf0e46914
commit 7317dbe4e5
12 changed files with 405 additions and 32 deletions
+60
View File
@@ -0,0 +1,60 @@
function exportMachines(project, tables, map, ambiguous, num, next, source, warnings) {
const groups = new Map();
let group;
for (const row of project.tables.MachMainDat || []) {
if (num(row.Index) > 0) {
group = [];
if (groups.has(row.Code)) groups.set(row.Code, null);
else groups.set(row.Code, group);
} else if (group) group.push(row);
}
for (const title of project.tables.MachTitleDat || []) {
const parts = groups.get(title.Code);
if (
!title.Code ||
ambiguous.has("105:" + title.Code) ||
!parts?.length ||
num(title.SC) ||
parts.some((row) => !row.JdlSummary || num(row.CalcIndex) !== 1 || num(row.SC)) ||
["GC", "NC", "JC"].some(
(field) =>
Math.abs(parts.reduce((sum, row) => sum + num(row[field]), 0) - num(title[field])) > 1e-6,
)
)
continue;
const code = "J" + String(next()).padStart(10, "0");
map.set("105:" + title.Code, code);
tables["junit.txt"].push({
F_CODE: code,
F_DES: title.Name,
F_SIZE: title.Size,
F_UNIT: title.Unite,
F_MPRICE: num(title.GC),
F_LPRICE: num(title.NC),
F_EPRICE: num(title.JC),
F_ORICODE: "00000000000",
});
for (const [index, row] of parts.entries()) {
const code1 = source(0, { ...row, Code: "MACHINE-PART-" + next() });
tables["jpart.txt"].push({
F_CODE: code,
F_SEQ: String(index + 1),
F_CODE1: code1,
F_DES: row.Name,
F_SIZE: row.Size,
F_UNIT: row.Unite,
F_QQTY: 1,
F_MPRICE: num(row.GC),
F_LPRICE: num(row.NC),
F_EPRICE: num(row.JC),
F_SPROPER: "0",
F_LOADBM: "T",
F_SAVEBM: "T",
F_ORICODE: "00000000000",
});
}
warnings.push(`${title.Code}: 기계 상세를 고정 금액으로 내보냅니다.`);
}
}
module.exports = { exportMachines };