feat(est): edit review summary in workflow

This commit is contained in:
2026-11-07 10:56:50 +09:00
parent cfe78e2e3b
commit db02fa9994
2 changed files with 24 additions and 1 deletions
@@ -1,6 +1,20 @@
from test_est_rea_parity import run
def test_review_summary_updates_the_print_document_and_active_settings():
result = run(
"math",
"""(()=>{
const handlers={},p=EstNative.empty();p.printSettings={form:'173',notes:'old'};
globalThis.document={addEventListener:(name,fn)=>handlers[name]=fn};
globalThis.EstApp={state:{project:p},change:fn=>fn(),render:()=>{}};
EstReview.install();handlers.change({target:{dataset:{reviewSummary:''},value:'review summary'}});
return {document:p.documents['173'],notes:p.printSettings.notes};
})()""",
)
assert result == {"document": "review summary", "notes": "review summary"}
def test_review_rejects_unallocated_fixed_amounts_and_ambiguous_targets():
result = run(
"math",
+10 -1
View File
@@ -115,7 +115,7 @@ const EstReview = (() => {
({ row }) => editable(row) && (row.Name || row.Code),
);
byId("work-content").innerHTML =
`<div class="business-tools"><b>계약심사</b><button data-review-copy>심사 내역 사본 열기</button><button data-review-clear>심사 입력 초기화</button><span>기존 ${number(output.before)} · 심사 ${number(output.after)} · 차액 ${number(output.after - output.before)}</span></div><p>심사 수량과 비목별 단가를 직접 입력합니다. 고정금액 행은 비목별 금액을 입력합니다. 원래 내역은 유지되며 심사 사본에서 변경됩니다.</p><p class="business-note">${esc(output.errors.join(" / "))}</p><table class="sheet"><thead><tr>${["코드", "품명", "기존 수량", "심사 수량", "노무", "재료", "경비", "실적", "기존 금액", "심사 금액", "차액", "심사 사유", "작업"].map((value) => `<th>${value}</th>`).join("")}</tr></thead><tbody>${rows
`<div class="business-tools"><b>계약심사</b><button data-review-copy>심사 내역 사본 열기</button><button data-review-clear>심사 입력 초기화</button><span>기존 ${number(output.before)} · 심사 ${number(output.after)} · 차액 ${number(output.after - output.before)}</span></div><p>심사 수량과 비목별 단가를 직접 입력합니다. 고정금액 행은 비목별 금액을 입력합니다. 원래 내역은 유지되며 심사 사본에서 변경됩니다.</p><label>주요심사 내용<textarea data-review-summary rows="4" maxlength="100000" style="width:100%">${esc(project.documents?.["173"] || "")}</textarea></label><p class="business-note">${esc(output.errors.join(" / "))}</p><table class="sheet"><thead><tr>${["코드", "품명", "기존 수량", "심사 수량", "노무", "재료", "경비", "실적", "기존 금액", "심사 금액", "차액", "심사 사유", "작업"].map((value) => `<th>${value}</th>`).join("")}</tr></thead><tbody>${rows
.map(({ row, index }) => {
const key = rowKey(row, index),
input = edits[key] || {},
@@ -136,6 +136,15 @@ const EstReview = (() => {
function install() {
document.addEventListener("change", (event) => {
const node = event.target;
if (node.dataset.reviewSummary !== undefined) {
EstApp.change(() => {
const project = EstApp.state.project;
(project.documents ||= {})["173"] = node.value;
if (String(project.printSettings?.form) === "173")
project.printSettings.notes = node.value;
}, false);
return;
}
if (!node.dataset.review) return;
const field = node.dataset.review,
value = field === "Reason" ? node.value : Number(node.value),