feat(momo): 매입/입고/출고/정산 메뉴 분리 + secret-free 자동배포
Deploy momo-erp via webhook / deploy (push) Failing after 0s
Deploy momo-erp via webhook / deploy (push) Failing after 0s
기능: - 매입처(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>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
-- ============================================================================
|
||||
-- 모모유통 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;
|
||||
Reference in New Issue
Block a user