Files
distribution_erp/db/migrations/003_momo_v2.sql
T
chpark 0e38a6f127
Deploy momo-erp via webhook / deploy (push) Failing after 0s
feat(momo): 매입/입고/출고/정산 메뉴 분리 + secret-free 자동배포
기능:
- 매입처(vendor) 마스터 + API
- 매입 발주(procurement) 작성/목록/상세 + API
- 입고 처리(inbound): 매입발주 라인 자동 로드 또는 단독 입고
  - 정상/불량 수량 분리 입력, 정상만 재고 +, 불량 사유 기록
- 출고 관리: 상태 라벨 변경 (REQUESTED→출고요청, APPROVED→출고완료, PAID→입금완료, INVOICED→계산서발행)
- 입금 관리 페이지 (부분/전액 입금 등록 → 완납 시 자동 PAID 전환)
- 계산서 일괄 발행 페이지 (체크박스 멀티 선택)
- 일자별 매출 통계 + 막대 그래프
- 원가/마진 통계 (월간 품목별, 마진율 표시)
- 사이드바 그룹 재구성 (마스터/매입/출고-정산/통계)
- 랜딩 페이지에 5단계 업무 흐름 다이어그램 추가
- DB v2 마이그레이션: 입고 헤더/라인 + 매입발주에 정상/불량 컬럼

CI/CD:
- secret-free webhook 자동 배포로 전환 (시크릿 등록 불필요)
- /api/deploy/webhook 엔드포인트가 X-Deploy-Token 검증 후 deploy.sh 실행
- docker-compose.prod.yml에 docker.sock + 소스 마운트 (자가 배포 가능)
- workflow는 단순히 webhook curl + 헬스체크 폴링

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:37:48 +09:00

64 lines
2.8 KiB
PL/PgSQL

-- ============================================================================
-- 모모유통 v2 — 매입발주/입고/정산 메뉴 분리
-- - 매입발주 입고 시 불량/파손 수량 분리
-- - 출고관리 상태값 재정의 (REQUESTED → APPROVED(=출고완료) → PAID → INVOICED)
-- - 매입처에 추가 정보
-- ============================================================================
BEGIN;
-- 매입발주 입고 라인에 정상/불량/파손 수량 분리
ALTER TABLE momo_procurement_items
ADD COLUMN IF NOT EXISTS received_normal NUMERIC(15,2) DEFAULT 0,
ADD COLUMN IF NOT EXISTS received_defect NUMERIC(15,2) DEFAULT 0,
ADD COLUMN IF NOT EXISTS defect_memo VARCHAR(500);
-- 입고 처리 헤더 (1매입발주 → N입고)
CREATE TABLE IF NOT EXISTS momo_inbounds (
objid TEXT PRIMARY KEY,
inbound_no VARCHAR(50) UNIQUE,
proc_objid TEXT, -- 매입발주 참조 (없어도 단독 입고 가능)
vendor_objid TEXT,
wh_objid TEXT NOT NULL,
inbound_date DATE NOT NULL DEFAULT CURRENT_DATE,
status VARCHAR(20) DEFAULT 'COMPLETED', -- COMPLETED | CANCELLED
total_amount NUMERIC(15,2) DEFAULT 0,
memo TEXT,
is_del CHAR(1) DEFAULT 'N',
regdate TIMESTAMP DEFAULT NOW(),
regid TEXT
);
CREATE INDEX IF NOT EXISTS idx_momo_inbounds_date ON momo_inbounds(inbound_date);
CREATE INDEX IF NOT EXISTS idx_momo_inbounds_proc ON momo_inbounds(proc_objid);
CREATE TABLE IF NOT EXISTS momo_inbound_items (
objid TEXT PRIMARY KEY,
inbound_objid TEXT NOT NULL,
item_objid TEXT NOT NULL,
qty_normal NUMERIC(15,2) NOT NULL DEFAULT 0, -- 입고 정상 수량 → 재고에 +
qty_defect NUMERIC(15,2) NOT NULL DEFAULT 0, -- 불량/파손 (재고 미반영)
cost_price NUMERIC(15,2) NOT NULL DEFAULT 0,
defect_reason VARCHAR(200), -- 파손/유통기한임박/불량 등
total_amount NUMERIC(15,2) NOT NULL DEFAULT 0,
seq INT
);
CREATE INDEX IF NOT EXISTS idx_momo_inbound_items ON momo_inbound_items(inbound_objid);
-- 매입처에 주소/이메일 추가
ALTER TABLE momo_vendors
ADD COLUMN IF NOT EXISTS email VARCHAR(200),
ADD COLUMN IF NOT EXISTS address VARCHAR(300),
ADD COLUMN IF NOT EXISTS regdate TIMESTAMP DEFAULT NOW();
-- 품목에 소비기한 / 본사+지사 구분 (엑셀 요청 7,8번)
-- attributes JSONB 에 자유 키 저장 가능. 별도 컬럼 추가는 생략.
-- 매입처 시드 (없으면)
INSERT INTO momo_vendors (objid, vendor_name, contact, phone)
VALUES
('VND_DEFAULT_001', '도매처A (기본)', '담당자', '02-0000-0000'),
('VND_DEFAULT_002', '도매처B (기본)', '담당자', '02-0000-0000')
ON CONFLICT (objid) DO NOTHING;
COMMIT;