Files
Aislo/M02_MasterTemplete/M02_Logic_Lib_Read.py
T
eomsangdonandClaude Opus 5.5 6015525efd feat(842-2): 기계 비활성 — M01 기계 목록 「사용」 스위치 · 끈 기계는 찾기 · 고르기 · 잇기에서 뺌 · 해상 기계 79 대 끔
- 표지 = 기계 줄 맨 위 칸 `비활성: true`(없음 = 켜짐 · 값 묶음 밖) · 틀 검사 = 기계 줄에만 true(check_master OFF)
- M01 기계 목록 = 끝 열 「사용」 스위치(초안 → 페이지 [저장] · 자동저장 없음) · 끈 줄 흐림 · 머리 「비활성 같이 보기」(끄면 서버 rows state 「켜짐」)
- 뺌 = 요소 찾기 창(elements · 찾아 넣기 · 단가산출 기계 창) · logic-lib rows · M01 시험 계산 기계 고르기 표 · 내 기계 「비슷한 기계에서 시작」 ·
  불러오기 기계 잇기(M02_Machine_Find 표) · 기계경비식 「기계」 옵션(새 GET /api/m02/df/machine-off · 고른 값은 남기고 「· 비활성 기계」 꼬리)
- 셈 길은 그대로 — 끈 기계를 쓰던 단가산출 · 사본 값 같음
- 자료 = 해상장비 79 대(펌프 준설선 13 · 그래브 준설선 10 · 하천골재채취선 7 · 기중기선 5 · 예선 9 · 양묘선 11 · 토운선 6 · 이우선 2 · 대선 16) 끔
- 시험 = test_842_2_machine_off 새로 · test_804_10 옵션 글 단언을 새 글로 고침(끈 기계 거름이 들어간 줄)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-15 18:29:05 +09:00

89 lines
3.4 KiB
Python

"""단가산출 로직 상세 읽기 · 셈 길(PLAN 717-1) — `/api/m02/logic-lib/…` · 로그인만(`main.py`).
M01 상세 부품(`M01_MasterData_UI_Logic_Api.ts` · `Api_Fetch.ts` · `Logic_Note.ts`)이 길 앞머리만
`/m02/logic-lib` 로 바꿔 부름 — 길 · 몸 · 답 = M01 `/api/m01/…` 와 같음(M01 길 함수를 부름).
쓰기 없음 — `/calc` · `/text` 의 `row`(저장 안 한 고친 줄)는 메모리 사본에서만 셈(`Store._swap`).
`/logics` · `/subs` · `/logic` · 원문은 `M02_MasterTemplete_Router_Combos.py` 에 있음.
"""
from __future__ import annotations
from fastapi import APIRouter, HTTPException
from M01_MasterData import M01_MasterData_Parts as parts
from M01_MasterData import M01_MasterData_Router as m01
from M02_MasterTemplete import M02_Machine_Hourly as machine
router = APIRouter(prefix="/api/m02/logic-lib", tags=["M02 Logic Lib Read"])
#: `/rows` 로 줄을 내줄 요소 파일 앞머리 — 인력 · 재료 · 기계(고르기 표 · 품목 찾기)
ROW_FILES = ("인력", "재료", "기계")
#: `/table` 로 내줄 표 파일 앞머리 — 소요량 · 계수(설명 카드 원문 표)
TABLE_FILES = ("소요량_", "계수_")
@router.get("/logic/auto")
def get_auto(key: str) -> dict:
return m01.get_logic_auto(key)
@router.get("/elements")
def get_elements(group: str, q: str = "", limit: int = 50) -> dict:
return m01.get_elements(group, q, min(limit, 200))
@router.get("/pick")
def get_pick(kind: str, q: str = "", limit: int = 50) -> dict:
return m01.get_pick(kind, q, min(limit, 200))
@router.get("/materials")
def get_materials(
sub: str, detail: str = "", spec: str = "", region: str = "", unit: str = "", limit: int = 50
) -> dict:
return m01.get_materials(sub, detail, spec, region, unit, min(limit, 200))
@router.get("/rows")
def get_rows(file: str, page: int = 1, size: int = 50, q: str = "", sub: str = "") -> dict:
if not file.startswith(ROW_FILES):
raise HTTPException(status_code=403, detail="요소 파일(인력 · 재료 · 기계)만 읽음")
on = "켜짐" if file.startswith("기계") else "" # 끈 기계 뺌(842-2)
return m01.get_rows(file, page, size, q, False, sub, "", on)
@router.get("/table")
def get_table(file: str, key: str) -> dict:
if not file.startswith(TABLE_FILES):
raise HTTPException(status_code=403, detail="소요량 · 계수 표만 읽음")
return m01.get_table(file, key)
@router.post("/calc")
def post_calc(body: m01.CalcBody) -> dict:
"""M01 `/calc` 와 같음 — `row` = 저장 안 한 고친 줄(셈만 · 쓰기 없음)."""
return m01.post_calc(body)
@router.post("/text")
def post_text(body: m01.CalcBody) -> dict:
return m01.post_text(body)
@router.get("/machine-hourly")
def get_machine_hourly(key: str) -> dict:
"""기계(EQ) 한 시간 값 노 · 재 · 경(736-3 · [항목 추가] 기계 고정 줄 단가)."""
return machine.hourly(key)
@router.get("/machine-rows")
def get_machine_rows(keys: str) -> dict:
"""기계 창(827-1) — M01 기계 키 · 원문번호 쉼표 목록(60 까지) → 줄 값 + 시간당."""
return {"rows": machine.brief([k for k in keys.split(",") if k.strip()])}
@router.get("/machine-parts")
def get_machine_parts(no: str) -> dict:
"""줄 쌓기 기계 넣기(813-2) — 기계 원문번호 → 그 기종 작업량 틀(문서째)."""
return m01._call(parts.of_machine, no)