feat(est): clear estimate quantities

This commit is contained in:
2026-11-07 11:17:58 +09:00
parent 46b3c93f66
commit cb0a4fbfec
4 changed files with 40 additions and 1 deletions
+3
View File
@@ -1,4 +1,7 @@
## Codex · EST 독립 테스트 앱 (2026-11-04)
- [x] 선택 또는 전체 상세 내역 수량 초기화 → 비율·합계 보존·실행 취소 시험.
- 자체 검증: 설계변경·이력 시험 9개 통과, Edge에서 선택·전체 초기화, 비율 보존과 취소 확인.
- [x] 전체 기성 회차 초기화 구현 → 내역·다른 업무 보존·취소 시험.
- 자체 검증: 기성·이력 시험 9개 통과, Edge에서 초기화·다른 업무 보존·확정 회차 취소 복원 확인.
+2
View File
@@ -8,6 +8,8 @@
행을 선택한 뒤 편집 메뉴의 `선택 행 자릿수 설정`에서 처리방식과 소수 자릿수를 일괄 적용할 수 있습니다. 기존 계산 설정은 실행 취소로 되돌릴 수 있습니다.
내역서 편집 메뉴의 `내역 수량 초기화`는 선택한 상세 행 또는 모든 상세 행의 수량을 0으로 바꿉니다. 비율·합계 자동행은 건드리지 않으며 실행 취소할 수 있습니다.
인쇄 미리보기는 화면의 100행 페이지 제한 없이 검색 결과/현재 호표의 전체 행을 표시합니다. 출력 범위에서 현재 자료의 모든 호표·행도 선택할 수 있습니다. 원본 인쇄 옵션의 41개 항목 중 CAD를 제외한 40개 서식 이름을 선택하며, ESTX에서 가져온 해당 프로젝트의 인쇄 설정을 우선 사용합니다. 내역·원가·호표/총괄·증감·동원·수량·공정은 표 자료로 출력합니다. 표지·갑지·설명서·시방서·심사 문서는 서식별 본문을 직접 입력합니다. 용지·방향·여백·글자 크기·페이지당 행·시작 쪽·업체명을 저장하고 인쇄/PDF로 출력합니다. ESTX 수정 저장은 서식별 여백과 페이지당 행 수를 반영합니다. 다른 웹 인쇄 설정의 ESTX 쓰기와 원본 인쇄 도형·병합·글꼴 배치의 동등성은 지원하지 않습니다.
별도 인쇄 서식으로 기성·물가변동의 내역서와 원가계산서, 연차 배분표와 연차별 내역서, 설계변경 원가 증감표를 선택할 수 있습니다. 기성은 선택한 회차를 출력하고 확정된 회차는 확정 당시 결과를 사용합니다.
+1
View File
@@ -75,6 +75,7 @@
<hr />
<button data-action="find">찾기</button>
<button data-action="set-row-precision">선택 행 자릿수 설정</button>
<button data-action="clear-estimate-quantities">내역 수량 초기화</button>
</div>
</details>
<details>
+34 -1
View File
@@ -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 = [];