6b43d9926d
- 세트구성(set_bom) 수동 관리 메뉴/라우트/API/템플릿 제거 - 세트 BOM은 itemcode_db set_components(set_code/single_code/quantity)에서 읽음 (MalaysiaItemcodeReader, ITEMCODE_DB_URL 재사용) - db.py: create_set_out/compute_result/finalize_stocktake 에 bom_map 주입식 - 입출고: 낱개 전체 그리드 일괄 등록 + 세트 출고 그리드(BOM 분해) - 일일 재고조사: 낱개+세트 전체 그리드에 수량만 키인 → 일괄 저장 - malaysia_stock_db.set_bom 테이블은 레거시(미사용) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
"""말레이시아 창고 재고관리(malaysia) 모듈.
|
|
|
|
라우터/저장소/템플릿을 한 디렉토리에서 관리한다.
|
|
- 라우터: `router.py` (FastAPI APIRouter, prefix=/malaysia)
|
|
- 저장소: `db.py` (malaysia_stock_db / PostgreSQL 전용) + `store.py` (상수/순수 계산)
|
|
- 상품명: 전역 `app.state.itemcode_reader`(itemcode_db 읽기 전용) 재사용
|
|
- 템플릿: `templates/malaysia/`
|
|
|
|
데이터 저장은 malaysia_stock_db 전용이다. MALAYSIA_STOCK_DB_URL 미설정 시
|
|
build_malaysia_store 는 None 을 반환하고, 라우터가 "설정 필요" 안내 페이지를
|
|
보여준다(앱은 죽지 않음).
|
|
"""
|
|
|
|
from typing import Any
|
|
|
|
from . import store
|
|
from .router import router
|
|
from .store import (
|
|
MOVEMENT_TYPES,
|
|
STOCKTAKE_STATUSES,
|
|
explode_set,
|
|
explode_stocktake,
|
|
missing_bom_sets,
|
|
)
|
|
|
|
__all__ = [
|
|
"router",
|
|
"store",
|
|
"MOVEMENT_TYPES",
|
|
"STOCKTAKE_STATUSES",
|
|
"explode_set",
|
|
"explode_stocktake",
|
|
"missing_bom_sets",
|
|
"build_malaysia_store",
|
|
"build_malaysia_itemcode",
|
|
]
|
|
|
|
|
|
def build_malaysia_store(*, dsn: str | None) -> Any:
|
|
"""MALAYSIA_STOCK_DB_URL 이 있으면 MalaysiaStockStore, 없으면 None.
|
|
|
|
JSON 폴백을 두지 않는다(운영 데이터 분기 방지). None 이면 라우터가 안내 페이지 표시.
|
|
"""
|
|
if not dsn:
|
|
return None
|
|
from .db import MalaysiaStockStore # 지연 import (개발 환경 deps 없을 수 있음)
|
|
|
|
return MalaysiaStockStore(dsn)
|
|
|
|
|
|
def build_malaysia_itemcode() -> Any:
|
|
"""itemcode_db 읽기 전용 세트 BOM 리더. ITEMCODE_DB_URL 없으면 비활성."""
|
|
from .itemcode import MalaysiaItemcodeReader # 지연 import
|
|
|
|
return MalaysiaItemcodeReader()
|