Files
Aislo/tools/est-test/native-defaults.js
T
eomsangdonandClaude Opus 5.5 39c147a8a4 feat(est-test): 기본환경으로 설정과 저장 작업 목록에서 삭제
- 계산 환경을 기본값으로 저장해 새 내역서에 적용
- 저장 작업을 data/removed 로 옮겨 목록에서만 뺌

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:17:20 +09:00

70 lines
2.5 KiB
JavaScript

// 원본 환경설정 「기본환경으로설정」(TfrmOption btnSave)과 최근공사목록 「목록에서삭제」(TfrmWorkFileList btnDelete).
// 기본환경: 현재 계산 환경 값을 서버 양식 보관함(종류 options, 이름 「기본환경」)에 두고 새 내역서를 만들 때 덮어 쓴다.
// 목록에서 삭제: 원본은 최근 목록에서만 빼므로, 웹은 저장 파일을 data/removed/ 로 옮겨 목록에서만 사라지게 한다(지우지 않음).
const EstDefaults = (() => {
const keys = [
"HeadDigits",
"EstDigits",
"CostValueTrunc",
"MidCostDiget",
"TotalFix",
"TotalFit",
"DollarCostCut",
"JDLCalcMethod",
"GCToWonga",
"GangubExceptJodalRatio",
"EstLeftSpace",
"GitaGCRatio",
"GitaBaseRatio",
"AnjunBaseCost",
];
const NAME = "기본환경";
const post = (body) => ({
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
function pick(options) {
return Object.fromEntries(
keys.filter((k) => options?.[k] !== undefined).map((k) => [k, options[k]]),
);
}
async function saved() {
return (await EstApp.api("/api/forms")).find((f) => f.kind === "options" && f.name === NAME)
?.data;
}
async function applyNew() {
const data = await saved();
if (data) EstApp.change((project) => Object.assign(project.options, pick(data)));
return Boolean(data);
}
async function run(name, state, node) {
if (name === "options-save-default") {
if (!confirm("현재 계산 환경을 새 내역서의 기본환경으로 설정하시겠습니까?")) return;
await EstApp.api(
"/api/forms",
post({ kind: "options", name: NAME, data: pick(state.project.options) }),
);
state.notice = "기본환경으로 설정했습니다. 새 내역서에 적용됩니다.";
} else if (name === "project-hide") {
if (!confirm("이 작업을 목록에서 빼시겠습니까? 파일은 data/removed 에 남습니다.")) return;
await EstApp.api(`/api/projects/${node.dataset.id}/hide`, { method: "POST" });
EstApp.byId("dialog").close();
state.notice = "목록에서 뺐습니다.";
}
EstApp.render();
}
function handle(name, state, node) {
if (name !== "options-save-default" && name !== "project-hide") return false;
run(name, state, node).catch((error) => {
state.notice = error.message;
EstApp.render();
});
return true;
}
return { keys, pick, applyNew, handle };
})();