From d3b06e169528bd527a67645368ea984819a026da Mon Sep 17 00:00:00 2001 From: king Date: Mon, 22 Jun 2026 18:20:47 +0900 Subject: [PATCH] =?UTF-8?q?fix(malaysia):=20=EC=9D=B4=EB=8F=99=EC=9D=B4?= =?UTF-8?q?=EB=A0=A5=20=EB=82=B1=EA=B0=9C/=EC=BD=A4=EB=B3=B4=EB=A5=BC=20'?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=B0=A9=EC=8B=9D'=20=EA=B8=B0=EC=A4=80?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 콤보 출고는 콤보 줄(set_movement)로만 표시. 분해된 구성 낱개는 숨김 · create_set_out 구성 낱개 ref_type 을 SET_COMPONENT_REF('set')로 고정 · 이동이력 낱개 목록에서 ref_type=SET_COMPONENT_REF 제외 - 직접 낱개 입력만 '낱개', 콤보 입력만 '콤보'로 표기(재고 계산엔 영향 없음) Co-Authored-By: Claude Opus 4.8 --- app/modules/malaysia/db.py | 4 +++- app/modules/malaysia/router.py | 5 ++++- app/modules/malaysia/store.py | 5 +++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/modules/malaysia/db.py b/app/modules/malaysia/db.py index 02474ab..bec749e 100644 --- a/app/modules/malaysia/db.py +++ b/app/modules/malaysia/db.py @@ -250,6 +250,8 @@ class MalaysiaStockStore: with conn.transaction(): for comp_code, comp_qty in exploded.items(): row = conn.execute( + # 구성 낱개는 콤보 분해분 — ref_type 을 SET_COMPONENT_REF 로 고정해 + # 이동이력에서 '낱개 입력' 줄과 구분(숨김)한다. 재고 계산엔 포함. """ INSERT INTO stock_movement (movement_date, warehouse_code, item_code, movement_type, @@ -262,7 +264,7 @@ class MalaysiaStockStore: warehouse_code.strip(), comp_code, comp_qty, - ref_t, + store.SET_COMPONENT_REF, (ref_no or "").strip(), (memo or f"{sc} {q}세트 분해").strip(), (created_by or "").lower().strip(), diff --git a/app/modules/malaysia/router.py b/app/modules/malaysia/router.py index cf58e01..4b8effb 100644 --- a/app/modules/malaysia/router.py +++ b/app/modules/malaysia/router.py @@ -269,10 +269,13 @@ async def movements_page(request: Request) -> HTMLResponse: mtype = (request.query_params.get("type") or "").strip().upper() fdate = (request.query_params.get("date") or "").strip() mt = mtype if mtype in store.MOVEMENT_TYPES else None - singles = st.list_movements( + raw_singles = st.list_movements( warehouse_code=wh, movement_type=mt, date_from=fdate or None, date_to=fdate or None, limit=300, ) + # 콤보 분해로 생긴 구성 낱개(ref_type=SET_COMPONENT_REF)는 '낱개 입력'이 아니므로 + # 이동이력에서 숨긴다. 콤보는 아래 set_movement 줄로 표시된다. + singles = [m for m in raw_singles if (m.get("ref_type") or "") != store.SET_COMPONENT_REF] for m in singles: m["kind"] = "individual" # 콤보(세트) 출고 원장도 함께 보여준다(낱개/콤보 분리 표시). diff --git a/app/modules/malaysia/store.py b/app/modules/malaysia/store.py index d1e7306..c340841 100644 --- a/app/modules/malaysia/store.py +++ b/app/modules/malaysia/store.py @@ -19,6 +19,11 @@ from typing import Any, Iterable # ── 이동(movement) 종류 ── MOVEMENT_TYPES: tuple[str, ...] = ("IN", "OUT", "ADJUST", "STOCKTAKE") +# 콤보(세트) 출고를 BOM 분해해 생성한 '구성 낱개' movement 의 ref_type 마커. +# 이동이력에서 이 낱개 줄은 콤보 입력의 분해분이므로 '낱개 입력'으로 표시하지 +# 않고 숨긴다(콤보는 set_movement 줄로 따로 표시). 재고 계산엔 그대로 포함된다. +SET_COMPONENT_REF: str = "set" + # ── 재고조사 상태 ── STOCKTAKE_STATUSES: tuple[str, ...] = ("draft", "finalized", "cancelled")