From 970211bb5fc1d53000032b4f5c037d93c7a9991a Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 31 Oct 2026 12:41:37 +0900 Subject: [PATCH] =?UTF-8?q?feat(B08=20=EA=B5=AC=EC=A1=B0=EB=AC=BC=EB=8F=84?= =?UTF-8?q?):=20=EC=B9=B4=EB=93=9C=EC=97=90=20B09=20=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B3=A0=EC=B9=9C=20=EC=9D=BC=EC=9C=84?= =?UTF-8?q?=EB=8C=80=EA=B0=80=20=EC=B9=B8=20=EC=88=98=20=ED=91=9C=EC=8B=9C?= =?UTF-8?q?=20=E2=80=94=20=EB=85=B8=EC=9E=84=20=EC=83=88=20=ED=8C=90=20?= =?UTF-8?q?=C2=B7=20=EC=9E=AC=EC=A0=81=EC=9A=A9=20=EB=92=A4=EC=97=90?= =?UTF-8?q?=EB=8F=84=20=EB=8D=AE=EA=B0=9C=20=EB=82=A8=EC=9D=8C=20(PLAN=207?= =?UTF-8?q?02-4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사본 셈 길(/items/{폴더}/calc) 답에 B09고침 = 그 사본 블록 + 부른 블록 덮개 수(B09 cover_count) - B08 구조물도 조합 칸 = 「B09 원가에서 고친 일위대가 칸 N — 이 카드 금액은 고치기 전 사본 값」(카드 셈 길이 달라 금액 반영 대신 표시 · 브레인 정함) Co-Authored-By: Claude Opus 5.5 --- B08_Quantity/B08_Quantity_UI_Drawing.ts | 15 +++++++++++++++ M02_MasterTemplete/M02_Project_Items_Router.py | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/B08_Quantity/B08_Quantity_UI_Drawing.ts b/B08_Quantity/B08_Quantity_UI_Drawing.ts index dccc5f357..725ff48fb 100644 --- a/B08_Quantity/B08_Quantity_UI_Drawing.ts +++ b/B08_Quantity/B08_Quantity_UI_Drawing.ts @@ -119,6 +119,21 @@ function comboSection( return section; } const source = sourceOf(request.projectId, copy.폴더); + // 702-4 B09 원가에서 고친 일위대가 칸(덮개) — 카드 금액 = 사본 셈(고치기 전) · 셈 답 `B09고침` 수 + const covered = note(""); + covered.hidden = true; + const labor = source.labor; + if (labor) { + const calc = labor.calc; + labor.calc = (...args) => + calc(...args).then((got) => { + const n = Number((got as { B09고침?: number }).B09고침) || 0; + covered.textContent = `B09 원가에서 고친 일위대가 칸 ${n} — 이 카드 금액은 고치기 전 사본 값 · 원가 금액은 B09`; + covered.hidden = !n; + return got; + }); + } + section.append(covered); if (!copy.부분.includes("도면")) section.append(note(L("B08_Quantity_Drawing_NoDrawing"))); const load = (): void => void cards.load({ id: copy.폴더, label: name }); // 카드 안 [저장]은 없음(자료 자리에 write 없음) — [수정]만 사본 편집 화면으로(163-3) diff --git a/M02_MasterTemplete/M02_Project_Items_Router.py b/M02_MasterTemplete/M02_Project_Items_Router.py index 6f9f780d7..b532cd6e6 100644 --- a/M02_MasterTemplete/M02_Project_Items_Router.py +++ b/M02_MasterTemplete/M02_Project_Items_Router.py @@ -219,4 +219,12 @@ async def save_item_as( async def calc_item( project_id: str, folder: str, session: dict[str, Any] = Depends(verify_session) ) -> dict[str, Any]: - return await _run(copies.calc, await _root(session, project_id), folder) + root = await _root(session, project_id) + out = await _run(copies.calc, root, folder) + from B09_Estimation.B09_Estimation_Labor_Source import cover_count # B09 → M02 순환 피함 + + try: # 702-4 B09 원가에서 고친 일위대가 칸 수(카드 금액 = 사본 셈 · 고치기 전) + out["B09고침"] = await asyncio.to_thread(cover_count, root, folder) + except Exception: # noqa: BLE001 — 표시만 · 카드 셈은 그대로 + out["B09고침"] = 0 + return out