Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_3
This commit is contained in:
@@ -56,6 +56,8 @@ LINK = {
|
||||
|
||||
|
||||
MACH_IN = "기계" # 기계경비 기초 기계 입력 칸
|
||||
# (주연료, 조종원) 없는 기종 → 그 기계경비 기초(M01 로직이 부르는 것과 같음 · 778-2)
|
||||
SOLO = {(False, False): "GC000273", (True, False): "GC000272", (False, True): "GC000276"}
|
||||
|
||||
|
||||
class LinkError(ValueError):
|
||||
@@ -64,11 +66,14 @@ class LinkError(ValueError):
|
||||
|
||||
def _mach_logics(whole: Any, kinds: set, eq: dict | None = None) -> list[str]:
|
||||
"""기계경비 기초 차례 — 갈래 첫 기초(굴착기 = 무한궤도) › 그 밖 · `eq` 가 있으면
|
||||
그 기계(또는 같은 이름 기계)를 고르기에 둔 기초가 앞(778-1)."""
|
||||
연료 · 조종원 없는 기종 = 그 기초 하나 · 아니면 그 기계(또는 같은 이름 기계)를 고르기에 둔 기초가 앞."""
|
||||
first = next((c for k, c in combine.MACHINE.items() if k in kinds), combine.MACHINE_ANY)
|
||||
order = [first, *sorted(combine.MACHINE_SET - {first})]
|
||||
if not eq:
|
||||
return order
|
||||
has = eq.get("값") if isinstance(eq.get("값"), dict) else {}
|
||||
if solo := SOLO.get((bool(has.get("주연료")), bool(has.get("조종원")))):
|
||||
return [solo]
|
||||
eqs = whole.numbers.get("EQ", {})
|
||||
|
||||
def takes(code: str) -> bool:
|
||||
@@ -324,19 +329,22 @@ class _Plan:
|
||||
self.note("장비", "·".join(sorted(m["갈래"])), excel, mine, 규격=spec, 단위="시간")
|
||||
|
||||
def _add_machine(self, m: dict[str, Any], line: dict[str, Any]) -> None:
|
||||
"""엑셀만 장비 → 기계경비 로직 줄(기계 = 그 갈래 · 규격 옵션 거꾸로 찾기 ·
|
||||
괄호 낱말로 하나면 그 기계 · 로직 = 그 기계를 고르기에 둔 기초 먼저(778-1))."""
|
||||
"""엑셀만 장비 → 기계경비 로직 줄 — 괄호 낱말로 하나면 그 기계 · 로직 = 그 기계를 고르기에
|
||||
둔 기초 먼저(778-1) · 아니면 기계 = 그 갈래 · 규격 옵션 거꾸로 찾기."""
|
||||
fp = finger.empty(line)
|
||||
fp["장비"] = [{**m, "시간": 1.0, "밑시간": 1.0, "율": []}]
|
||||
kinds = set(m["갈래"])
|
||||
eq = elem.machine(str(m.get("글") or ""), kinds, set(m.get("규격") or []))
|
||||
for code in _mach_logics(self.whole, kinds, eq):
|
||||
name = " ".join([*m["갈래"], *(f"{x:g}" for x in m.get("규격") or [])])
|
||||
one = {"이름": name, "단위": "시간", "수량": _num(m["시간"] * self.tb)}
|
||||
if eq:
|
||||
code = _mach_logics(self.whole, kinds, eq)[0]
|
||||
self.add({"종류": "로직", "로직": code, "입력값": {MACH_IN: eq["원문번호"]}, **one})
|
||||
return
|
||||
for code in _mach_logics(self.whole, kinds):
|
||||
got = option.find(code, fp, [])
|
||||
if got["수준"] <= 1:
|
||||
name = " ".join([*m["갈래"], *(f"{x:g}" for x in m.get("규격") or [])])
|
||||
given = {**got["입력"], **({MACH_IN: eq["원문번호"]} if eq else {})}
|
||||
self.add({"종류": "로직", "로직": code, "입력값": given, "이름": name,
|
||||
"단위": "시간", "수량": _num(m["시간"] * self.tb)}) # fmt: skip
|
||||
self.add({"종류": "로직", "로직": code, "입력값": got["입력"], **one})
|
||||
return
|
||||
spec = " ".join(f"{x:g}" for x in m.get("규격") or [])
|
||||
name = "·".join(m["갈래"])
|
||||
|
||||
@@ -43,4 +43,5 @@ def test_굴착기_타이어형_EQ000026_세_길_같음():
|
||||
fake = Fake()
|
||||
skpatch._Plan._add_machine(fake, m, {"이름": "x", "단위": "㎥"})
|
||||
assert fake.got["로직"] != combine.MACHINE["굴착기"] # 굴착기(무한궤도) 기계경비 아님
|
||||
assert fake.got["입력값"] == {skpatch.MACH_IN: "0211-0060"}
|
||||
assert _key(fake.got["입력값"]["기계"]) == "EQ000026" and fake.got["수량"] == 0.5
|
||||
|
||||
@@ -49,6 +49,11 @@ def test_기계_잇기_뒤_SK_셈_됨():
|
||||
# 무한궤도 = 굴착기(무한궤도) 기계경비 · 갈래 다른 키 · 없는 키 = 틀림
|
||||
work.link([{"id": "기계:굴착기#1", "기계": "EQ000019"}])
|
||||
assert work.doc["더한줄"][-1]["로직"] == combine.MACHINE["굴착기"]
|
||||
# 연료 · 조종원 없는 부속(부착용 집게 0.6∼0.8) = 손료만 기초(GC000273) · 셈 됨
|
||||
solo = _plan(whole)
|
||||
solo.link([{"id": "기계:굴착기", "기계": "EQ000437"}])
|
||||
assert solo.doc["더한줄"][-1]["로직"] == skpatch.SOLO[(False, False)]
|
||||
assert calc.run(solo.doc, whole)["기준"] is not None
|
||||
work.lost = _plan(whole).lost
|
||||
with pytest.raises(skpatch.LinkError):
|
||||
work.link([{"id": "기계:굴착기", "기계": "MT000010"}])
|
||||
|
||||
Reference in New Issue
Block a user