fix(dispatch): 콤보 BOM 차감 실패 원인별 메시지 분리
기존엔 콤보 BOM 누락 시 (a)set_components 미등록 (b)세트는 등록됐으나 유효 낱개(MT/MX/MZ) 구성품 없음 (c)itemcode_ro 권한/조회 실패 를 한 덩어리로 "콤보 BOM 이 없어 차감할 수 없습니다"로만 알려, 실제 원인을 못 짚어 같은 에러가 반복됐다. - itemcode.py: set_codes_present() 추가 — set_components 의 MY- 세트 코드 전체를 구성품 유효성 무관하게 조회. (a)/(b) 구분용. - router.py stock_deduct: 누락 콤보를 등록여부로 분기, 권한/조회 실패는 별도 안내. 정확한 원인과 조치를 메시지에 노출. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -96,6 +96,30 @@ class MalaysiaItemcodeReader:
|
||||
)
|
||||
return out
|
||||
|
||||
def set_codes_present(self) -> set[str]:
|
||||
"""set_components 에 등록된 MY- 세트 코드 전체(구성품 유효성 무관).
|
||||
|
||||
set_bom_map() 은 낱개(MT/MX/MZ) 구성품이 하나도 없는 세트를 결과에서
|
||||
떨어뜨린다. 그래서 'BOM 누락'이 두 가지 원인을 가린다:
|
||||
(a) set_components 에 set_code 자체가 없음 → 세트구성 미등록
|
||||
(b) set_code 는 있으나 유효 낱개 구성품이 없음 → 구성품 점검 필요
|
||||
이 메서드로 (a)/(b)를 구분해 정확한 에러 메시지를 만든다.
|
||||
"""
|
||||
if not self.enabled or not self._pool:
|
||||
return set()
|
||||
try:
|
||||
with self._pool.connection() as conn:
|
||||
rows = conn.execute(
|
||||
"SELECT DISTINCT set_code FROM set_components "
|
||||
"WHERE set_code LIKE 'MY-%'"
|
||||
).fetchall()
|
||||
self.last_error = ""
|
||||
except Exception as exc: # noqa: BLE001 — 모듈을 죽이지 않음
|
||||
self.last_error = f"{type(exc).__name__}: {exc}"
|
||||
logger.exception("itemcode set_components set_code 조회 실패")
|
||||
return set()
|
||||
return {str(r["set_code"]).strip().upper() for r in rows}
|
||||
|
||||
def name_map(self) -> dict[str, str]:
|
||||
"""낱개+세트 코드 → 이름(itemcode_db 기준). 표시 보강용(선택)."""
|
||||
if not self.enabled or not self._pool:
|
||||
|
||||
Reference in New Issue
Block a user