Files
distribution_erp/db/migrations/006_momo_user_info_extend.sql
T
chpark 72786bfc98
Deploy momo-erp / deploy (push) Successful in 50s
feat(momo): 출고 처리 2분할 UI + 회원가입 주소 + 거래처 정보 보강
- 회원가입 폼·API·DB(user_info.address 컬럼 추가, 마이그레이션 007)에
  주소 필드 추가, 전화/주소를 필수값으로 승격.
- 관리자 발주서 관리 페이지(/m/admin/orders) 를 좌(리스트)·우(거래명세표
  미리보기) 2분할 레이아웃으로 재구성. 체크박스로 출고요청 다중 선택 후
  상단 [출고] 버튼으로 일괄 처리(승인+재고차감+메일발송) 지원.
- 미리보기에 품목별 현재고(STOCK 창고 합산) 노출, 부족분 경고 표시.
- /api/m/orders/detail: ceo_name·biz_no·address 컬럼 + 품목별 현재고
  합산 SELECT 추가. /api/m/orders/approve: 명세서 발송 SQL의 잘못된
  alias 누락(`order.company_name` undefined) 수정.
- 마이그레이션 006: ON CONFLICT(objid) 가 menu_info 의 unique 제약
  부재로 실패하던 idempotent 버그를 EXISTS 분기로 교체.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 22:32:03 +09:00

64 lines
2.8 KiB
PL/PgSQL

-- 거래처 가입자에 필요한 추가 정보를 user_info 에 직접 컬럼으로 추가 (스펙 §3.1 B안)
-- supply_mng 와 user_info.partner_objid 연결도 가능하지만, 신규 가입 흐름 단순화 위해 직접 컬럼 추가.
-- 이미 컬럼이 있으면 ADD COLUMN IF NOT EXISTS 로 idempotent.
BEGIN;
ALTER TABLE user_info
ADD COLUMN IF NOT EXISTS biz_no VARCHAR(20),
ADD COLUMN IF NOT EXISTS ceo_name VARCHAR(100);
-- 품목 검색 메뉴(스펙 §5에서 출고 요청과 통합으로 변경됨) 비활성화
UPDATE menu_info SET status = 'inactive' WHERE objid = 9000101;
-- ===== 관리자 admin-panel 의 [메뉴관리] 섹션 복구 =====
-- [관리자] 루트(parent=0, menu_name_kor='관리자') 아래에 [메뉴관리] 섹션 + [메뉴관리] 자식이 status='active' 로 존재해야
-- /api/admin/sidebar-menus 가 노출함. 누락된 경우 idempotent 하게 보장.
DO $$
DECLARE
admin_root_id NUMERIC;
menu_section_id NUMERIC;
BEGIN
SELECT objid INTO admin_root_id FROM menu_info
WHERE parent_obj_id = 0 AND menu_name_kor = '관리자' LIMIT 1;
IF admin_root_id IS NULL THEN
RAISE NOTICE '[admin] 루트가 없어 메뉴관리 복구 스킵';
RETURN;
END IF;
-- 섹션이 존재하면 active 로 보장, 없으면 9000600 으로 신규 등록
SELECT objid INTO menu_section_id FROM menu_info
WHERE parent_obj_id = admin_root_id AND menu_name_kor = '메뉴관리' LIMIT 1;
IF menu_section_id IS NULL THEN
menu_section_id := 9000600;
INSERT INTO menu_info (objid, menu_type, parent_obj_id, menu_name_kor, menu_name_eng,
seq, menu_url, status, system_name, regdate)
VALUES (menu_section_id, '1', admin_root_id, '메뉴관리', 'Menu Management',
10, '', 'active', 'PMS', NOW());
ELSE
UPDATE menu_info SET status = 'active' WHERE objid = menu_section_id;
END IF;
-- 자식: 메뉴관리 (LABEL_TO_TAB 매핑이 '메뉴관리' → 'menu' 이므로 정확히 동일 이름 필수)
-- menu_info.objid 에 unique 제약이 없을 수 있으므로 ON CONFLICT 대신 EXISTS 분기로 idempotent 처리
IF EXISTS (SELECT 1 FROM menu_info WHERE objid = 9000601) THEN
UPDATE menu_info
SET parent_obj_id = menu_section_id,
menu_name_kor = '메뉴관리',
menu_name_eng = 'Menus',
menu_url = '',
status = 'active',
system_name = 'PMS'
WHERE objid = 9000601;
ELSIF NOT EXISTS (
SELECT 1 FROM menu_info
WHERE parent_obj_id = menu_section_id AND menu_name_kor = '메뉴관리'
) THEN
INSERT INTO menu_info (objid, menu_type, parent_obj_id, menu_name_kor, menu_name_eng,
seq, menu_url, status, system_name, regdate)
VALUES (9000601, '1', menu_section_id, '메뉴관리', 'Menus',
10, '', 'active', 'PMS', NOW());
END IF;
END $$;
COMMIT;