diff --git a/M02_MasterTemplete/M02_Library_Flat.py b/M02_MasterTemplete/M02_Library_Flat.py index 69ccc2b45..9437f4e4e 100644 --- a/M02_MasterTemplete/M02_Library_Flat.py +++ b/M02_MasterTemplete/M02_Library_Flat.py @@ -302,6 +302,7 @@ def compose(under: dict, over: dict, whole: Any) -> dict: def sk_line(y: dict, one: dict, whole: Any, tag: dict) -> dict: """펼친 SK → 일위대가 로직 줄 하나(+ 패치) — 옛 참조 줄 `one` 의 별칭 · 메모 · 수량 · 패치 이어받음.""" + from M02_MasterTemplete import M02_Labor_Doc as labor from M02_MasterTemplete import M02_Labor_Patch as patch from M02_MasterTemplete import M02_Sangeun_Calc as calc @@ -328,6 +329,11 @@ def sk_line(y: dict, one: dict, whole: Any, tag: dict) -> dict: for name in ("고름", "자재표시"): if got := {at[c]: v for c, v in (y.get(name) or {}).items() if c in at}: line[name] = got + shown = line.get("자재표시") or {} + for n, item in enumerate(row.get("호표") or []): # 747-1 SK 재료 빈 칸 = 직접계산 → 적어 둠 + if item.get("종류") == "재료": + shown[str(n)] = {"별도계상": "직접계산", **labor.marks(shown.get(str(n)))} + line |= {"자재표시": shown} if shown else {} if y.get("켜쌓기율") is not None: line["켜쌓기율"] = y["켜쌓기율"] return {**line, **({patch.FIELD: body} if body else {}), "본뜬": tag} diff --git a/resources/tester/test_740_1_library_flat.py b/resources/tester/test_740_1_library_flat.py index e7b9ceb9c..06ecaacec 100644 --- a/resources/tester/test_740_1_library_flat.py +++ b/resources/tester/test_740_1_library_flat.py @@ -372,3 +372,22 @@ def test_B09_SC_덮개_줄_대가_금액_M02_같음(world, tmp_path): block = _b09(root, cover_qty)[1][daega["libs"][made["폴더"]]] assert block["blank"] == 0 assert block["sum"] == pytest.approx(m02, abs=5) # 끝수(내림)만 다름 + + +def test_747_SK_재료_직접계산_일위대가에_넣어도_같은_금액(world): + """747-1 SK 바탕 재료 = 직접계산 · 일위대가 줄 기본 = 별도계상 → 펼친 줄에 적어 둠.""" + me = world["personal"] + form = "GC000211" # 합판거푸집 — 재료 줄 있음 + plain = _make(me, "sangeun", 이름="거푸집", 바탕={"로직": form}) + cover = {"material:합판(내수 12㎜)#0": {"qty": 2}} + covered = _make(me, "sangeun", 이름="거푸집 고침", 바탕={"로직": form}, 덮개=cover) + for sk in (plain, covered): + lines = [{"참조": {**MINE, "키": sk}}] + old = _raw(me, "precombo", 이름="옛", 담은로직=lines) + before = _sc_value(me, old) + host = _make(me, "precombo", 이름="새", 담은로직=lines) + line = _read(me, "precombo", host)["담은로직"][0] + assert line["자재표시"] and all( + v["별도계상"] == "직접계산" for v in line["자재표시"].values() + ) + assert _sc_value(me, host) == pytest.approx(before, rel=1e-9)