fix(malaysia): 콤보 입고 차단 — 낱개 분리 입고 안내

- 콤보(MY-)는 입고 불가 구조. 입고 선택 + 콤보 수량 입력 시 차단.
- 클라이언트: 제출 전 alert 안내(낱개로 분리 입고)
- 서버: 동일 조건 400 (JS 우회 대비)
- 세트 movement 는 항상 OUT 유지(create_set_out 원복)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 10:59:09 +09:00
parent d56365b338
commit 56cff672e2
3 changed files with 34 additions and 2 deletions
+16 -1
View File
@@ -222,6 +222,7 @@ async def movements_apply(request: Request, user: dict[str, Any] = Depends(_requ
- 낱개(individual): 선택한 movement_type 으로 등록. IN/OUT 양수만, ADJUST ±(0 스킵).
- 세트(set): 항상 OUT 으로 처리 — BOM(itemcode_db) 분해해 구성품별 OUT 생성.
콤보는 입고 불가(낱개로 분리 입고). IN 선택 + 콤보 수량 입력 시 400 안내.
빈칸/0 은 스킵. 코드별 에러는 모아서 부분 적용 후 안내.
"""
st = _store(request)
@@ -238,6 +239,20 @@ async def movements_apply(request: Request, user: dict[str, Any] = Depends(_requ
memo = str(form.get("memo") or "").strip()
bmap = _bom_map(request)
# 콤보는 입고 불가 — IN 선택 + 세트 수량 입력 시 차단(낱개로 분리 입고 안내)
if mtype == "IN":
set_codes_keyed = [
it["item_code"]
for it in st.list_items(kind="set")
if str(form.get(f"qty_{it['item_code']}") or "").strip() not in ("", "0")
]
if set_codes_keyed:
raise HTTPException(
status_code=400,
detail="콤보 상품은 입고할 수 없습니다. 낱개로 분리해서 입고하세요. "
"(입고 불가 콤보: " + ", ".join(set_codes_keyed) + ")",
)
applied = 0
errors: list[str] = []
@@ -264,7 +279,7 @@ async def movements_apply(request: Request, user: dict[str, Any] = Depends(_requ
except ValueError as exc:
errors.append(f"{code}: {exc}")
# 세트 — 항상 OUT(BOM 분해)
# 세트 — 항상 OUT(BOM 분해). 콤보 입고는 위에서 이미 차단됨.
for it in st.list_items(kind="set"):
code = it["item_code"]
raw = str(form.get(f"qty_{code}") or "").strip()