feat(malaysia): 재고조사 랙(rack) 박스 단위 입력
낱개/콤보 평면 수량 그리드를 창고 랙 그림(A/B 36칸) 입력으로 대체.
각 칸에 아이템·박스당 입수량·박스 수를 넣고 + 로 한 칸 여러 아이템 추가.
저장 시 SKU별 qty=SUM(입수량×박스수) 집계로 daily_stocktake_line 재생성.
이후 분해/확정 로직은 라인 기준 그대로 동작.
- DB: daily_stocktake_rack 테이블 + grant (멱등)
- store: rack_cell_codes/rack_layout/aggregate_rack 순수함수
- db: list_rack_entries/replace_rack(1 트랜잭션, draft만)
- router: rack 컨텍스트 + POST /stocktakes/{id}/rack/bulk
- UI: 랙 보드 템플릿 + malaysia_rack.js(행 추가/삭제·실시간 소계)
- 테스트 4건 추가(18 전부 통과)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -219,6 +219,32 @@ CREATE TRIGGER trg_stocktake_line_updated
|
||||
BEFORE UPDATE ON daily_stocktake_line
|
||||
FOR EACH ROW EXECUTE FUNCTION malaysia_set_updated_at();
|
||||
|
||||
-- ════════════════════════════════════════════════════════════
|
||||
-- 6.5) 일일 재고조사 랙(rack) 입력
|
||||
-- 창고 랙(A/B면, 행/열/분할 칸)별로 "어떤 SKU 가 한 박스당 몇 개씩
|
||||
-- 몇 박스 있는지"를 기록한다. 칸 단위 입력 → 서버가 SKU 별
|
||||
-- qty = SUM(units_per_box * box_count) 로 집계해 daily_stocktake_line 을
|
||||
-- 재생성한다(랙이 라인의 단일 출처). 한 칸(파렛트)에 여러 SKU 가능.
|
||||
-- cell_code 예: 'A3-1-1' (면 A, 행 3, 열 1, 분할 1).
|
||||
-- sku_code: 낱개(MT-/MX-/MZ-) 또는 세트(MY-) 허용. MD- 금지.
|
||||
-- ════════════════════════════════════════════════════════════
|
||||
CREATE TABLE IF NOT EXISTS daily_stocktake_rack (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
stocktake_id BIGINT NOT NULL REFERENCES daily_stocktake(id) ON DELETE CASCADE,
|
||||
cell_code TEXT NOT NULL, -- 랙 위치(예: A3-1-1)
|
||||
line_no INTEGER NOT NULL DEFAULT 0, -- 칸 안 입력 순서
|
||||
sku_code TEXT NOT NULL CHECK (
|
||||
sku_code LIKE 'MT-%'
|
||||
OR sku_code LIKE 'MX-%'
|
||||
OR sku_code LIKE 'MZ-%'
|
||||
OR sku_code LIKE 'MY-%'),
|
||||
units_per_box INTEGER NOT NULL CHECK (units_per_box > 0),
|
||||
box_count INTEGER NOT NULL CHECK (box_count > 0),
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_stocktake_rack_st ON daily_stocktake_rack (stocktake_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_stocktake_rack_cell ON daily_stocktake_rack (stocktake_id, cell_code);
|
||||
|
||||
-- ════════════════════════════════════════════════════════════
|
||||
-- 7) seed — 기본 창고 + 재고관리 대상 아이템
|
||||
-- ════════════════════════════════════════════════════════════
|
||||
@@ -254,7 +280,7 @@ ON CONFLICT (item_code) DO NOTHING;
|
||||
GRANT USAGE ON SCHEMA public TO malaysia_app;
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON
|
||||
warehouses, malaysia_items, set_bom, stock_movement,
|
||||
daily_stocktake, daily_stocktake_line
|
||||
daily_stocktake, daily_stocktake_line, daily_stocktake_rack
|
||||
TO malaysia_app;
|
||||
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO malaysia_app;
|
||||
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
||||
|
||||
Reference in New Issue
Block a user