diff --git a/tools/est-test/PLAN.md b/tools/est-test/PLAN.md index c9c1a6d50..19f223aa6 100644 --- a/tools/est-test/PLAN.md +++ b/tools/est-test/PLAN.md @@ -1,4 +1,7 @@ ## Codex · EST 독립 테스트 앱 (2026-11-04) +- [x] 선택 또는 전체 상세 내역 수량 초기화 → 비율·합계 보존·실행 취소 시험. + - 자체 검증: 설계변경·이력 시험 9개 통과, Edge에서 선택·전체 초기화, 비율 보존과 취소 확인. + - [x] 전체 기성 회차 초기화 구현 → 내역·다른 업무 보존·취소 시험. - 자체 검증: 기성·이력 시험 9개 통과, Edge에서 초기화·다른 업무 보존·확정 회차 취소 복원 확인. diff --git a/tools/est-test/README.md b/tools/est-test/README.md index e29e3f715..11bdd59e5 100644 --- a/tools/est-test/README.md +++ b/tools/est-test/README.md @@ -8,6 +8,8 @@ 행을 선택한 뒤 편집 메뉴의 `선택 행 자릿수 설정`에서 처리방식과 소수 자릿수를 일괄 적용할 수 있습니다. 기존 계산 설정은 실행 취소로 되돌릴 수 있습니다. +내역서 편집 메뉴의 `내역 수량 초기화`는 선택한 상세 행 또는 모든 상세 행의 수량을 0으로 바꿉니다. 비율·합계 자동행은 건드리지 않으며 실행 취소할 수 있습니다. + 인쇄 미리보기는 화면의 100행 페이지 제한 없이 검색 결과/현재 호표의 전체 행을 표시합니다. 출력 범위에서 현재 자료의 모든 호표·행도 선택할 수 있습니다. 원본 인쇄 옵션의 41개 항목 중 CAD를 제외한 40개 서식 이름을 선택하며, ESTX에서 가져온 해당 프로젝트의 인쇄 설정을 우선 사용합니다. 내역·원가·호표/총괄·증감·동원·수량·공정은 표 자료로 출력합니다. 표지·갑지·설명서·시방서·심사 문서는 서식별 본문을 직접 입력합니다. 용지·방향·여백·글자 크기·페이지당 행·시작 쪽·업체명을 저장하고 인쇄/PDF로 출력합니다. ESTX 수정 저장은 서식별 여백과 페이지당 행 수를 반영합니다. 다른 웹 인쇄 설정의 ESTX 쓰기와 원본 인쇄 도형·병합·글꼴 배치의 동등성은 지원하지 않습니다. 별도 인쇄 서식으로 기성·물가변동의 내역서와 원가계산서, 연차 배분표와 연차별 내역서, 설계변경 원가 증감표를 선택할 수 있습니다. 기성은 선택한 회차를 출력하고 확정된 회차는 확정 당시 결과를 사용합니다. diff --git a/tools/est-test/index.html b/tools/est-test/index.html index 9d1231275..9de76a575 100644 --- a/tools/est-test/index.html +++ b/tools/est-test/index.html @@ -75,6 +75,7 @@
+
diff --git a/tools/est-test/native-business-actions.js b/tools/est-test/native-business-actions.js index 6770a5231..fb9927295 100644 --- a/tools/est-test/native-business-actions.js +++ b/tools/est-test/native-business-actions.js @@ -45,7 +45,40 @@ const EstBusinessActions = (() => { const { state } = EstApp, project = state.project, round = currentRound(); - if (name === "clear-progress") { + if (name === "clear-estimate-quantities") { + if (state.view !== "EstMainDat") throw Error("내역서에서 수량을 초기화하세요."); + const rows = project.tables.EstMainDat, + selected = [...state.selection]; + EstActions.form( + "내역 수량 초기화", + [ + { + name: "scope", + label: "초기화 범위 (비율·합계 자동행 제외)", + value: selected.length ? "selected" : "all", + choices: [ + ["selected", "선택한 상세 행"], + ["all", "모든 상세 행"], + ], + }, + ], + (values) => { + const indices = ( + values.scope === "selected" ? selected : rows.map((_, index) => index) + ).filter((index) => { + const row = rows[index]; + return ( + row && + !Number(row.Level) && + ![51, 52, 54, 55, 57, 58, 59, 62, 67, 68].includes(Number(row.LinkIndex)) && + !["%", "%"].includes(row.Unite) + ); + }); + if (!indices.length) throw Error("초기화할 상세 행이 없습니다."); + EstApp.change(() => indices.forEach((index) => (rows[index].GN = 0))); + }, + ); + } else if (name === "clear-progress") { if (confirm("모든 기성 회차와 확정 결과를 초기화하시겠습니까?")) EstApp.change(() => { project.progress = [];