// 원본 환경설정 「기본환경으로설정」(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 }; })();