- 표지 = 기계 줄 맨 위 칸 `비활성: 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>
53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
"""단위 · 금액 표준 표 읽기 — `GET /api/m02/df/standards` → {unit, money, saved} · 기계 이름 `GET /machine-names`.
|
|
|
|
부르는 곳 = 단위 고르기(`M02_DF_UnitPick.ts`) · 끝수 표준(`M02_DF_Round.ts`).
|
|
표 = `_standard/` 파일(git 이 따라감) · 권한 = 로그인만(읽기만 · `main.py` 한 줄 · M02 줄 쌓기 단위 고르기).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
|
|
from M01_MasterData import M01_MasterData_Store as store
|
|
from M01_MasterData.M01_MasterData_Router import _num
|
|
from M02_MasterTemplete.DataFlow import M02_DF_Values as dv
|
|
|
|
router = APIRouter(prefix="/api/m02/df", tags=["M02 DataFlow"])
|
|
|
|
STANDARD = Path(__file__).resolve().parent / "_standard"
|
|
|
|
|
|
@router.get("/machine-names")
|
|
def get_machine_names() -> dict:
|
|
"""기계 원문번호 → 「이름 규격」(요구 692-2) — 옵션 드롭다운 라벨만 · 값은 원문번호 그대로 · 겹친 번호는 첫 줄."""
|
|
out: dict[str, str] = {}
|
|
for data in store.loaded()[0].values():
|
|
if data.get("그룹") != "기계":
|
|
continue
|
|
for row in data.get(store.items_key(data)) or []:
|
|
code = str(row.get("원문번호") or "")
|
|
if code and code not in out:
|
|
out[code] = f"{row.get('이름') or ''} {row.get('규격') or ''}".strip()
|
|
return out
|
|
|
|
|
|
@router.get("/machine-off")
|
|
def get_machine_off() -> list[str]:
|
|
"""끈 기계 원문번호(842-2) — 그 번호 기계가 모두 「비활성」 · 옵션 고르기 목록에서 뺌(고른 값은 남김)."""
|
|
on, off = set(), set()
|
|
for data in store.loaded()[0].values():
|
|
if data.get("그룹") == "기계":
|
|
for row in data.get(store.items_key(data)) or []:
|
|
(off if row.get("비활성") else on).add(str(row.get("원문번호") or ""))
|
|
return sorted(off - on - {""})
|
|
|
|
|
|
@router.get("/standards")
|
|
def get_standards() -> dict:
|
|
try:
|
|
return _num(dv.standards(STANDARD))
|
|
except store.StoreError as e:
|
|
raise HTTPException(status_code=e.status, detail=e.detail) from e
|