Commit Graph

305 Commits

Author SHA1 Message Date
chpark d36d256f27 fix(admin lists): 검색 조건 변경 시 자동 갱신 (실시간 필터링)
Deploy momo-erp / deploy (push) Successful in 1m58s
내 출고 이력처럼 검색 조건 변경 즉시 리스트 갱신 — 조회 버튼 불필요.
useEffect 의존성을 빈 배열 → [load] (load 의 deps 에 검색 조건 포함)
패턴으로 통일.

- admin/orders: status/dateFrom/dateTo/keyword 변경 시 즉시
- admin/payments: dateFrom/dateTo/keyword/payFilter
- admin/inventory: whFilter/keyword (load 를 useCallback 으로 wrap)

기타 페이지(invoices/inbounds/procurements/proc-payments/einvoices) 는
이미 [load] 패턴으로 자동 갱신 적용된 상태.
2026-05-15 02:40:47 +09:00
chpark 0e041676b7 fix(capture): 캡쳐 후 발주일자 input 사라지는 버그 — 처리 순서 역순 fix
Deploy momo-erp / deploy (push) Successful in 1m57s
root cause: .js-no-export 인 input 의 cssText 캡쳐 시점에 이미
display:none 이 적용되어 있어, finally 의 cssText 원복이 display:none 을
다시 적용 → input 이 영구히 사라짐.

수정:
- 진입 순서: input cssText 캡쳐 FIRST → 그 다음 .js-no-export display:none
- 원복 순서: cssText FIRST → 그 다음 display 원복 (역순)
- 이로써 cssText 의 'display:none' 잔류 방지

부수: admin/orders 의 '출고' 버튼은 출고완료(APPROVED) 발주에서 숨김 —
'editable && (출고)' → 'STATUS === REQUESTED && (출고)'.
2026-05-15 02:35:18 +09:00
chpark 0139282231 fix(capture+loading): 이미지 캡쳐 후 input 사라짐 fix + 처리 중 로딩 오버레이
Deploy momo-erp / deploy (push) Successful in 1m56s
1) capture-share: display:none 으로 빈 input 숨기던 처리 제거.
   외형(border/bg/padding) 만 잠시 제거하고 cssText 로 원복. 캡쳐 후
   날짜 input 이 사라지던 문제 fix (React 가 같은 DOM 재사용 시 hidden
   상태로 남던 케이스 회피).
2) 처리 중 로딩 오버레이 — components/ui/Loading 컴포넌트 활용:
   · admin/orders 페이지 (busy = 일괄 출고)
   · admin/orders StatementPreview (shipping = 단건 출고)
   · admin/inbounds (busy = 입고 저장)
   · admin/proc-payments (busy = 입금 처리)
   가운데 spinner + 메시지 + 반투명 black overlay.
2026-05-15 02:29:44 +09:00
chpark aeafeb9daf fix(capture-share): 이미지 캡쳐 시 input/select 외형 제거 + 발주번호 nowrap
Deploy momo-erp / deploy (push) Successful in 1m59s
문제:
- 거래명세표 이미지 공유 시 input 박스(테두리/배경/그림자) 가 그대로 노출
- 발주번호 'O2605140012'/발주일자 텍스트가 좁은 폭에서 wrap 되어 깨짐
- 비고 빈 인풋이 영역만 차지

수정:
- capture-share: 캡쳐 직전 모든 input/select/textarea 의 border/bg/
  shadow/padding 제거. select 는 appearance:none 으로 화살표도 가림.
  값 비어있는 input 은 display:none. 캡쳐 후 cssText 로 일괄 복원.
- admin/orders: 발주번호/발주일자 영역 whitespace-nowrap + flex 로 변경.
2026-05-15 02:17:18 +09:00
chpark 29641ed978 fix(orders): 환불 라인 UPDATE — WHERE kind IN 에 REFUND 추가 (단가 저장 실패 fix)
Deploy momo-erp / deploy (push) Successful in 1m54s
2026-05-15 02:10:56 +09:00
chpark 373e1962f0 fix(orders): DetailLine KIND 타입에 REFUND 추가 — 빌드 fail fix
Deploy momo-erp / deploy (push) Successful in 1m58s
2026-05-15 02:05:16 +09:00
chpark b7c7a4d395 feat(orders): admin 출고관리 — 환불(REFUND) 라인 추가
Deploy momo-erp / deploy (push) Failing after 47s
요청: 출고관리 detail 에 '환불 추가' 버튼. 누르면 표 상단에 환불 라인
생성. 수량=1 고정, 단가 양수로 입력 시 내부에서 음수로 저장 → 총합
자동 차감.

- lines/save API: kind 'REFUND' 추가. admin 만 허용. 단가 양수 받아
  음수로 저장. is_tax_free='Y' (면세) 처리. seq=0 으로 박아 상단 정렬.
- detail/route.ts: ORDER BY 에 REFUND 우선 노출.
- admin/orders UI: '환불 추가' 버튼 (rose), ExtraRow 가 REFUND 도 처리
  (음수 표시 — 빨간 글씨, 수량 1 고정 잠금).
- USER /m/orders: items.filter(KIND !== 'REFUND') — 사용자 화면에서
  환불 라인 비공개. 합계는 DB 의 차감된 값 그대로 노출 (사용자에게
  최종 청구 금액 표시).
2026-05-15 02:01:45 +09:00
chpark c7d7bdfaea feat(orders): 거래명세서 발주일자 수정 — REQUESTED/APPROVED 만 (date input + 자동저장)
Deploy momo-erp / deploy (push) Successful in 1m56s
2026-05-15 01:50:21 +09:00
chpark d6b81da946 feat(orders+procurements): 발주번호 형식 간소화
Deploy momo-erp / deploy (push) Successful in 1m55s
ORD-20260514-0001 → O2605140001 (O + YY MM DD + 0001, 11자리)
PRC-20260514-0001 → P2605140001 (P + YY MM DD + 0001, 11자리)

- genOrderNo / genProcNo 4개 함수: prefix 변경 + ymd 6자리 (YY)
- LIKE prefix||'%' 패턴은 그대로 — 새 prefix 가 자동 적용됨
- 운영 DB 기존 데이터 일괄 UPDATE 완료 (orders 22건, procurements 4건)
2026-05-15 01:42:48 +09:00
chpark c9dea94bc2 chore(cleanup): FITO 레거시 (main) 폴더 일괄 삭제
Deploy momo-erp / deploy (push) Successful in 1m56s
menu_info 에 등록된 활성 URL prefix 는 m/* 와 admin/* 뿐 — 그 외 폴더는
옛 FITO/우성 레거시. 사용자 토글 시 진입되던 /dashboard 더미 페이지 포함
전부 정리.

삭제 폴더 (총 23개):
- dashboard (영업현황/제품별현황 더미)
- approval/bom/cost/cost-mgmt/cs/delivery/fund/inventory
- order/part/part-mgmt/procurement-std/product/product-mgmt
- production/project/purchase/purchase-order/quality/sales/scm/work

유지: m/, admin/, profile/. /api/admin/* 와 /api/approval 등 API 라우트는
admin-panel 의 일부 inline 컴포넌트가 참조하므로 그대로 둠.
tsc 타입 체크 통과.
2026-05-15 01:35:57 +09:00
chpark 7604027155 fix(admin lists): 리스트 행 높이 축소 + 품목관리 작업 셀 nowrap
Deploy momo-erp / deploy (push) Successful in 2m7s
- payments/invoices/items/proc-payments/einvoices 5개 페이지에서
  px-4 py-3 → px-3 py-1.5 일괄 축소. 한 화면에 더 많은 행 표시.
- items: 작업(Pencil/Trash) 셀에 whitespace-nowrap + w-[80px], 품목명
  컬럼 max-w-[260px] truncate (긴 이름은 title 으로 hover)
2026-05-15 01:28:54 +09:00
chpark 51f6bd653b fix(wh-stock-status): 기본 '품목 가로' + 상단 전체 합계 행 추가
Deploy momo-erp / deploy (push) Successful in 2m10s
2026-05-15 01:23:13 +09:00
chpark a02015641c fix(orders): admin 출고처리 — ITEM 라인 삭제 버튼 추가 (REQUESTED/APPROVED)
Deploy momo-erp / deploy (push) Successful in 2m7s
2026-05-15 01:19:10 +09:00
chpark a120803799 fix(inventory): 재고관리 매트릭스 — 품목 가로(기본) / 창고 가로 토글
Deploy momo-erp / deploy (push) Successful in 2m9s
2026-05-15 01:16:56 +09:00
chpark 71cf966781 fix(wh-stock-status): 기본 '품목 가로' + 상단 전체 합계 행 추가
Deploy momo-erp / deploy (push) Successful in 2m6s
- viewMode 기본값 'by-wh' → 'by-item' 으로 변경 (사용자 선호).
- 품목 가로 모드 본문 첫 행: '전체 합계' (emerald 강조)
  · 발주수량 합 = Σ 모든 창고의 STOCK
  · 여유분 합   = Σ 모든 창고의 AVAILABLE (음수면 rose)
- 이후 본사 창고 → 김포 시장 7줄 그대로 노출.
2026-05-15 01:04:07 +09:00
chpark 17ae2b80d7 fix(statistics): 월간/일자별 매출 — 좌측 리스트 / 우측 차트 50:50 레이아웃
Deploy momo-erp / deploy (push) Successful in 2m9s
2026-05-15 00:57:57 +09:00
chpark 08549146be fix(margin): 좌측 리스트 / 우측 차트 50:50 레이아웃 + 리스트 스크롤
Deploy momo-erp / deploy (push) Successful in 2m6s
2026-05-15 00:37:00 +09:00
chpark e37d6eaa13 fix(layout): 관리자 토글 시 admin-panel 페이지 이동 + sidebar 공급업체 항목 제거
Deploy momo-erp / deploy (push) Successful in 2m8s
- header: 관리자 토글 클릭 시 router.push('/admin-panel?tab=user'),
  사용자로 돌아갈 때 '/m/orders/new'. 사이드바만 바뀌고 콘텐츠는 그대로
  남아 혼동되던 UX 개선.
- sidebar ADMIN_SYSTEM_MENU 의 '공급업체 관리' 항목 제거 — admin-panel
  에서 이미 supply 탭 제거됐기 때문에 클릭 시 이상한 페이지로 가던 문제 fix.
  공급업체 관리는 m/admin/vendors 별도 메뉴 사용.
2026-05-15 00:34:24 +09:00
chpark ea21dced45 fix(orders): 수기 출고 — 라벨 변경 + 현재고 표시 + 삭제 + admin-panel 정리
Deploy momo-erp / deploy (push) Successful in 2m13s
1) '수기 발주' → '수기 출고' 라벨 변경 (버튼/타이틀).
2) detail STOCK_QTY: 거래처 default_wh_objid 분기 제거 → 항상 STOCK 류
   전체 합산 표시. customer=admin 또는 김포 시장 등 default 가 빈 창고일
   때 현재고 0 으로 표시되던 버그 fix. 실제 출고 차감은 approve 시
   default_wh_objid 또는 STOCK 첫 창고 기준 그대로.
3) /api/m/orders/delete (admin) — REQUESTED 상태 발주만 hard delete.
   수기 출고로 잘못 생성한 빈 발주 정리용. einvoice/items/orders 일괄.
4) 출고관리 detail (REQUESTED) 에 '삭제' 버튼 추가 — 반려 옆.
5) admin-panel 의 '공급업체관리' 메뉴 제거 (m/admin/vendors 별도 메뉴 사용).
2026-05-14 23:45:29 +09:00
chpark 470fa4884d feat(orders): 출고관리 발주 리스트 — 리스트/카드 보기 토글
Deploy momo-erp / deploy (push) Successful in 2m7s
2026-05-14 22:11:01 +09:00
chpark 280495d741 feat(stock): 창고별 재고 현황 — 보기 토글 (창고 가로 ↔ 품목 가로)
Deploy momo-erp / deploy (push) Successful in 2m17s
토글 버튼 2개로 표시 형식 전환:
- '창고 가로' (기본): 헤더=창고 7개, 행=품목 (가로로 김)
- '품목 가로': 헤더=품목, 행=창고 7줄 (오른쪽으로 길게, 좌측 sticky)

각 모드에서 동일하게 셀당 '발주수량(현재고) / 여유분' 2행. 여유분 음수면 rose 강조.
2026-05-14 22:09:19 +09:00
chpark fac0f0d83e feat(orders): admin 출고관리 인라인 수기 발주 + 품목 추가 + 거래처 변경
Deploy momo-erp / deploy (push) Successful in 2m19s
매입 발주서 작성 패턴처럼 출고관리 안에서 직접 빈 발주 → 거래처 → 품목 채워가는 흐름.

신규 API:
- /api/m/orders/create-empty (admin) — 빈 발주 INSERT
  · status='REQUESTED', customer 임시 admin, HQ 기본 supplier snapshot
- /api/m/orders/update-customer (admin) — 발주의 거래처 변경
  · 변경 시 새 거래처 statement_branch 기반 supplier snapshot 재계산
  · REQUESTED/APPROVED 만 변경 허용 (입금 후 잠금)

UI (/m/admin/orders):
- '수기 발주' 버튼 → 즉시 create-empty 호출 → 리스트 새로고침 + 새 row
  자동 활성화 (모달/redirect 제거)
- detail 의 거래명세서 안 '귀하' 줄 → editable 시 CustomerEditor (select)
- 액션바에 '+ 품목 추가' 버튼 → AdminItemPickerModal (재고 있는 품목 검색)
  · items/add API 호출, ITEM 라인 일괄 INSERT
2026-05-14 22:07:45 +09:00
chpark 527cfddc1b feat(stock): 창고별 재고 현황 메뉴 (출고/정산 > 창고별 재고 현황)
Deploy momo-erp / deploy (push) Successful in 2m7s
매트릭스 뷰 — 행: 품목, 열: 창고 7개, 셀: 발주수량/여유분 2행.

- 발주수량 = 현재 보유 재고 (momo_stocks.qty)
- 여유분  = 현재고 - 기간 내 발주(REQUESTED/APPROVED/INVOICED/PAID)
           의 출고 예정 수량 (거래처 default 창고 기준)
- 기간 필터: dateFrom/dateTo (기본 이번 주 월 ~ 오늘) + '금주' 버튼
- 엑셀 다운로드 지원
- 여유분 음수면 rose 강조 (재고 부족 경고)

운영 DB menu_info 9000420 등록 (parent 9000400 출고/정산).
2026-05-14 16:47:03 +09:00
chpark 789909991a feat(orders): USER 측 품목 추가 + 택배/용차 직접 수정
Deploy momo-erp / deploy (push) Successful in 2m5s
USER 가 본인의 출고요청/출고완료 발주에 직접:
- 신규 품목 추가 (피커 모달 — /api/m/items/list 재고 있는 품목 검색)
- 택배비 단가/수량 인라인 수정 + 라인 삭제
- 용차 단가/수량 인라인 수정 + 라인 삭제

신규 API:
- /api/m/orders/items/add — ITEM 추가 (재고/숨김/한도 검증, admin 우회)
- /api/m/orders/lines/save — 가드 풀어서 REQUESTED + APPROVED 둘 다 허용

UI:
- detail modal 상단 액션 바: '+ 품목 추가' / '택배 추가/+1' / '용차 추가/+1'
- 표 안의 택배/용차 행에 수량/단가 QtyInput → onBlur 자동저장
- ItemPickerModal — 키워드 검색 + 행별 수량 입력 → 일괄 추가
2026-05-14 16:17:19 +09:00
chpark d25db4a023 feat(orders): admin 수기 발주 작성 — 거래처 대신 명의로 등록
Deploy momo-erp / deploy (push) Successful in 2m26s
전화 요청 등 시 admin 이 거래처를 대신해 발주를 작성할 수 있도록.

- /m/admin/orders 헤더에 '수기 발주' 버튼 + SearchableSelect 거래처 picker
  → 선택 후 /m/orders/new?customerObjid=momoNNN 로 이동
- /m/orders/new 가 query param customerObjid 받음:
  · admin 일 때만 활성 (USER 가 query 박아도 무시)
  · 상단 배너에 거래처명 표시 + 취소 링크
  · save 호출 시 body 에 customerObjid 포함
- /api/m/orders/save: admin 이 body.customerObjid 명시하면 그걸로
  발주 INSERT (supplier_branch snapshot 도 해당 거래처 기준)
2026-05-14 16:10:05 +09:00
chpark 8d8bb17345 feat(statistics+admin-panel): 통계 4개 거래명세서 필터 + 거래명세서 관리 메뉴
Deploy momo-erp / deploy (push) Failing after 4m39s
통계 페이지 4개에 거래명세서 기준(전체/본사/김포) 필터 추가:
- /m/admin/statistics (월간 매출)
- /m/admin/statistics/daily (일자별)
- /m/admin/statistics/margin (원가/마진)
- /m/admin/statistics/pivot (거래처×일자)

각 API 의 WHERE 절에
  COALESCE(O.supplier_branch, U.statement_branch, 'HQ') = $N
추가. supplier_branch snapshot 우선, 옛 발주는 user_info.statement_branch
폴백. ALL/생략 시 전체.

admin-panel 권한 및 사용자 관리 섹션에 '거래명세서 관리' 항목 추가
— activeTab='statement-branches' 시 /m/admin/statement-branches iframe
으로 로드 (기존 페이지 재사용, 별도 컴포넌트 중복 없음).
2026-05-14 16:09:41 +09:00
chpark 3e2d8572f1 feat(orders): USER 측 출고요청 + 출고완료 모두 수정 가능 (입금완료 전까지)
Deploy momo-erp / deploy (push) Successful in 2m5s
- 사용자 detail modal editable: REQUESTED → REQUESTED + APPROVED 모두 허용
- items/update API USER 가드: 동일하게 REQUESTED + APPROVED 허용
- 안내 문구 상태별로 분기

품목 추가/택배비 수정은 다음 단계에서 작업.
2026-05-14 16:05:36 +09:00
chpark 7977ffff19 fix(branch-fee): 본사(HQ) 제외 + 계산서 발행 명의(supplier_branch) 기준
Deploy momo-erp / deploy (push) Successful in 2m6s
지사관리:
- WHERE COALESCE(supplier_branch, statement_branch, 'HQ') != 'HQ'
  → 본사 발주 완전 제외, 김포 등 지사 명의 계산서만
- snapshot 우선 (supplier_branch) → 옛 발주 폴백 (user_info.statement_branch)
- UI: 본사 row 표시 분기 제거, '본사 외' 명시

창고이동 통계:
- 본사 계열(HQ_*) → 김포 계열(KIMPO_*) 이동만 필터링
- 같은 본사 내 이동, 같은 김포 내 이동, 김포→본사 역방향 모두 제외
2026-05-14 15:08:18 +09:00
chpark bb21be260f fix(branch-fee): 본사(HQ) 제외 + 계산서 발행 명의(supplier_branch) 기준
Deploy momo-erp / deploy (push) Successful in 2m11s
사용자 요구 — 지사 수수료 페이지는 본사 거래처를 보여줄 필요 없음.
계산서가 김포 등 지사 명의로 발행된 발주만 표시.

- 그룹핑 기준: COALESCE(supplier_branch, user.statement_branch, 'HQ')
  · 발주 시점의 supplier_branch snapshot 우선 (= 계산서 발행 명의)
  · 옛 발주(snapshot 없음) 는 거래처 statement_branch 폴백
- WHERE branch != 'HQ' 로 본사 제외
- UI: 본사 분기 제거 (모든 행이 지사)
2026-05-14 15:05:10 +09:00
chpark 7b5951c227 feat(alerts+transfers): 유통기한 임박 알림 + 창고이동 통계 메뉴
Deploy momo-erp / deploy (push) Successful in 2m8s
A. 유통기한 임박 알림 (/m/admin/expiry-alerts)
   - momo_inbounds.expiry_date/completed_by 컬럼 운영 DB 추가
   - inbounds/save API: 입고 시 expiryDate/completedBy 함께 저장
   - 페이지: 만료/7일이내/30일이내 분류 카드 + 행별 D-N 뱃지
   - 빠른 필터 (7/14/30/60/90일)

B. 창고 이동 통계 (/m/admin/transfers)
   - stock_moves WHERE ref_type='TRANSFER' AND move_type='OUT' 기준
   - 출발창고 / 도착창고 / 품목 / 수량 / 단가(cost_price) / 금액
   - 이동자(regid + user_name), 이동일시, 메모
   - 합계 카드 + 엑셀 다운로드

운영 DB:
- ALTER TABLE momo_inbounds ADD COLUMN expiry_date, completed_by
- 인덱스 idx_momo_inbounds_expiry
- menu_info: 9000511 (유통기한), 9000512 (창고이동) 등록 — 통계 메뉴 산하
2026-05-14 14:58:58 +09:00
chpark 9fd1160b38 feat(branch-fee): 지사 수수료 관리 메뉴 — 본사 20% 수수료 산정
Deploy momo-erp / deploy (push) Successful in 2m9s
신규 메뉴 /m/admin/branch-fee — 거래처의 statement_branch(HQ/KIMPO 등)
기준으로 매출/원가/순수 마진 그룹핑 + 지사(HQ 외) 의 마진 × 20% =
본사 수수료 자동 계산.

표시:
- 합계 카드 4개: 총 매출 / 총 마진 / 본사 수수료 합 / 지사 실수령 합
- 지사별 표: 매출/원가/마진/수수료/실수령(마진-수수료)
- 본사(HQ) 행은 수수료 0 (— 표시)

집계 범위: 출고완료(APPROVED)/계산서발행(INVOICED)/입금완료(PAID) 발주.
운영 DB 의 menu_info objid=9000510 으로 등록 완료. (parent 9000500 통계)
2026-05-14 14:49:43 +09:00
chpark b568a8858a feat(procurements+inbounds): 발주서 납품조건 1번 삭제 + 입고 체크리스트
Deploy momo-erp / deploy (push) Successful in 2m16s
매입 발주서 납품조건:
- '상기 품목의 납기 지연 시...' 1번 항목 삭제. 검수/수량변경 2개만 유지.

입고 처리 체크리스트 (memo 컬럼에 텍스트로 저장 — 스키마 변경 없음):
1) 발주수량 vs 입고수량 일치 (체크박스)
2) 1카톤 N개 일치 (체크박스 + 카톤 단위 입력)
3) 소비기한 (date)
4) 물류창고 입고 최종완료자 (물류팀 4명 select)
5) 특이사항 (textarea)

저장 시 momo_inbounds.memo 에 줄단위 텍스트로 박힘:
  [수량 일치]   Y ✓
  [카톤 일치]   Y ✓ (1카톤 12개)
  [소비기한]    2026-11-30
  [입고완료자]  이효철 (물류총괄)
  [특이사항]    ...
2026-05-14 14:43:03 +09:00
chpark 3505148994 feat(orders): 출고완료 상태 수량 변경 시 재고 ± 동기화 + 이력
Deploy momo-erp / deploy (push) Successful in 2m6s
- 직전엔 items/update 가 momo_order_items.qty 만 UPDATE → 출고완료
  발주의 수량을 줄여도 재고는 그대로 (출고 시 차감된 양 그대로 묶임).
- 수정: status='APPROVED' 인 경우 newQty - oldQty 차이만큼 재고 보정
  · diff > 0 (추가 출고) → stock 차감 + stock_moves OUT
  · diff < 0 (수량 줄임)  → stock 복원 + stock_moves IN
- 사용된 창고는 기존 stock_moves(ref_type='ORDER', ref_objid=order, 동일
  item) 의 wh_objid 로 lookup (approve 시 사용했던 창고와 동일 유지).
- 이력 memo: "수량 수정: oldQty → newQty"
2026-05-14 01:33:53 +09:00
chpark 88686d0461 fix(orders): '내 발주 이력' 은 admin 이라도 본인 발주만 (mine=true)
Deploy momo-erp / deploy (push) Successful in 2m6s
momo5315(배연진) 같은 admin 임직원이 사용자 측 '내 발주 이력' 페이지를
열면 모든 발주가 노출되던 문제. admin 판정만으로는 부족 — 메뉴 의도가
'본인 것' 이라 isAdmin 여부 무관 customer_objid 본인 매칭 필요.

- list API: body.mine === true 면 admin 이어도 본인 발주만
- /m/orders/page.tsx fetch 에 mine: true 추가
- admin 메뉴(/m/admin/*)는 mine 안 보냄 → 기존대로 전체 노출
2026-05-14 01:31:07 +09:00
chpark 13d02cac6a chore(migrations): db/migrations 전체 삭제 + deploy 마이그레이션 단계 제거
Deploy momo-erp / deploy (push) Successful in 2m3s
사용자 명시 요청 — 운영 DB 는 이미 모든 스키마/데이터 변경 반영됐고,
더 이상 자동 reload 가 필요 없음. 매 deploy 시 마이그레이션이 실행되며
사용자 변경(비밀번호, 부서, 추가 거래처 등) 을 원복하는 사고를 막기 위해
폴더 통째로 삭제.

- db/migrations/*.sql 35개 모두 삭제
- .gitea/workflows/deploy.yml 의 migrate-momo.mjs 호출 단계 제거
- scripts/migrate-momo.mjs 파일 자체는 유지

운영 DB 의 모든 user_info 비밀번호는 '1' 로 직접 reset 완료(142명).
2026-05-14 01:26:30 +09:00
chpark f29024744d fix(orders): 비고 수정 = REQUESTED + APPROVED 두 상태 모두 허용 (출고완료 포함)
Deploy momo-erp / deploy (push) Successful in 2m34s
2026-05-14 01:22:11 +09:00
chpark e2c5c5b396 fix(orders): 내 발주 이력 — FITO 세션도 본인 발주만 보이도록
Deploy momo-erp / deploy (push) Successful in 2m39s
root cause:
- FITO auth.ts 는 user 객체에 role 필드를 만들지 않음 (isAdmin/userType 만).
- 새봄-마켓소풍(momo125) 가 FITO 폴백 경로로 로그인 → session.user.role
  = undefined → list API 의 `if (role === "USER")` 가 false → 필터 무효
  → admin 의 발주까지 다 노출.

→ admin 판정을 MOMO/FITO 공통 isAdmin/role/userType 세 조합으로 통일.
   !isAdmin 인 경우 본인 발주만 매칭.
2026-05-14 01:16:23 +09:00
chpark f4b1e31f7f fix(orders): 매출 출고 수정 = REQUESTED/APPROVED 만 (계산서발행/입금완료 차단)
Deploy momo-erp / deploy (push) Successful in 2m38s
2026-05-14 01:12:46 +09:00
chpark 5294554384 fix(orders): admin 그룹은 출고 발주 모든 상태 수량 수정 가능
Deploy momo-erp / deploy (push) Successful in 2m39s
momo5315(배연진) 같은 user_type='A' admin 이 출고요청/출고완료 발주
수량 수정이 안 된다는 사용자 신고. 직전 commit 에서 'REQUESTED/APPROVED'
만 허용으로 좁혔던 게 너무 빡빡했음.

→ admin 권한자는 취소(CANCELED) 외 모든 상태 수정 가능으로 풀기.
  · API items/update admin 분기: status === 'CANCELED' 만 차단
  · UI editable: order.STATUS !== 'CANCELED'
USER 권한자는 그대로 REQUESTED 만.
2026-05-14 01:08:29 +09:00
chpark b204f14265 fix(orders): 내 출고 이력에서 본인 발주만 — user.objid undefined 폴백
Deploy momo-erp / deploy (push) Successful in 2m37s
USER 권한 사용자의 list API 필터링에서 r.user.objid 가 undefined 인
세션에선 customer_objid 비교가 NULL 매칭 → 필터링 무효화돼 모든 발주가
노출되던 버그. user_id 폴백 + customer_objid 가 user_id 로 박힌 경우
모두 IN 절로 매칭.
2026-05-14 01:03:43 +09:00
chpark 34ee374796 feat(orders): ITEM 수량/비고 인라인 즉시저장 + 왼쪽 리스트 실시간 갱신
Deploy momo-erp / deploy (push) Successful in 2m35s
1) ITEM 라인 수량을 QtyInput 인라인 인풋으로 (REQUESTED/APPROVED 상태).
   onBlur/Enter 시 /api/m/orders/items/update 호출 → 자동 저장.
2) 비고(REMARK) 는 이미 onBlur 자동 저장이었음. 출고요청/출고완료 모두
   editable 이라 동작.
3) ExtraRow(택배/용차) 의 V(저장) 버튼 제거. onBlur 시 자동 저장으로 변경
   — label/단가/수량 어느 인풋이든 포커스 떠나면 자동 commit.
4) 모든 라인 수정 작업 (saveRemark/saveItemQty/upsertExtra/deleteExtra)
   에서 onReload + onReloadList 동시 호출 → 왼쪽 발주 리스트의 합계도
   즉시 반영.

부수: 운영 DB 의 모든 user_info 비밀번호를 '1' 로 reset (사용자 요청).
2026-05-14 01:01:06 +09:00
chpark 053a21c30e fix(invoices): 계산서 발행 대상 = 입금완료(PAID) 만
Deploy momo-erp / deploy (push) Successful in 2m42s
리스트:
- 기본 표시 = PAID + INVOICED 만 (APPROVED 출고완료 제외)
- 상태 필터 옵션도 PAID/INVOICED 만

발행 가드:
- frontend: 선택 + PAID + 미발행만 issue 가능
- API: UPDATE 조건 status='PAID' (이전엔 APPROVED 도 허용했음)
2026-05-14 00:45:39 +09:00
chpark 665a560486 fix(orders): 출고관리 수정 범위 좁히기 — REQUESTED + APPROVED 만
Deploy momo-erp / deploy (push) Successful in 2m52s
직전엔 PAID/CANCELED 외 모두 허용했는데, 사용자 재요청으로 계산서발행
(INVOICED) 도 잠금. editable = REQUESTED || APPROVED.
items/update API admin 가드도 동일하게 좁힘.
2026-05-14 00:43:22 +09:00
chpark 3a7d17b3e5 feat(orders): 출고 처리 기본 날짜 한 달 전 ~ 오늘로 변경
Deploy momo-erp / deploy (push) Successful in 2m50s
2026-05-14 00:42:02 +09:00
chpark 2d5b94a026 feat(admin/users): 수정 화면에서도 비밀번호 변경 가능
Deploy momo-erp / deploy (push) Successful in 2m36s
- 사용자 수정 폼에 '비밀번호 변경' 입력란 추가 (빈 칸이면 기존 유지)
- /api/admin/users/save update 분기: password 값이 있으면 AES 암호화 후
  user_password 갱신
2026-05-14 00:16:07 +09:00
chpark 9a086dae50 fix(migrations): momo001..momo135 부서 '일반구매자' (DEPT003) 매 deploy 보장
Deploy momo-erp / deploy (push) Successful in 2m42s
운영 DB 에는 직접 UPDATE 로 부서 설정 완료. 035 도 INSERT/UPSERT 시
dept_code='DEPT003', dept_name='일반구매자' 박도록 패치.
임직원 6명(user_type='A') 은 영향 없음.
2026-05-14 00:10:19 +09:00
chpark 4661981da5 feat(procurements): 입고완료 이후 수정 잠금 + 공급업체 SearchableSelect
Deploy momo-erp / deploy (push) Successful in 2m54s
- 매입 발주서 editable 재조정: OPEN/REQUESTED 만 수정 가능. RECEIVED/
  PARTIAL/PAID/CANCELLED 는 수정 불가. lines/save API 가드도 동일.
- 공급업체 select 를 SearchableSelect 로 교체 (typeahead):
  · 매입 발주서 관리 페이지의 발주서 폼 (page.tsx)
  · 매입 발주 신규 작성 페이지 (new/page.tsx)

운영 DB 의 매입 발주/입고/관련 stock_moves 데이터는 직접 모두 삭제했음
(사용자 명시 요청). UI 에 깨끗한 상태로 보임.
2026-05-14 00:08:27 +09:00
chpark d86a1154a9 fix(migrations+procurements): supply_mng objid numeric + setActiveId 빌드 에러
Deploy momo-erp / deploy (push) Successful in 2m34s
운영 DB 직접 점검 후 발견:
- supply_mng.objid 는 numeric NOT NULL (TEXT 아님) → 'MOMOSUP000000001'
  같은 문자열 INSERT 가 cast fail 로 80개 다 fail 하고 supply_mng = 0개
  잔존 상태였음. 운영 DB 에는 직접 80개 박아둠 (objid 1..80).
- 035 마이그레이션도 동일 패턴(numeric objid)으로 재작성. 매 deploy 안전.

직전 deploy #137 (485aea4) 빌드 실패 원인:
- procurements/page.tsx 의 deleteProc 에서 setActiveId(null) → state 가
  string 이라 타입 에러. setActiveId("") 로 수정.
2026-05-14 00:02:28 +09:00
chpark 6ea1f13003 fix(migrations): 031/032/033 NO-OP 화 + 035 plain SQL 단일 책임으로 통합
Deploy momo-erp / deploy (push) Failing after 58s
직전 batch 가 운영 반영 후에도 supply_mng 가 10개로 유지된다는 사용자 신고.
원인 추정: 031/032/033 의 DO block 안에서 어딘가 fail → migrate-momo.mjs 가
process.exit(1) → 그 뒤 마이그레이션 (034, 035) 실행 자체 못 함.

→ 031/032/033 본문을 SELECT 1; 로 NO-OP 화. fail 지점 우회.
→ 035 가 단독으로 회원 135 + 공급업체 80 + 제조사 메뉴 삭제 모두 처리.
  · DO block 없이 plain SQL 만 (각 statement 가 별도 transaction)
  · supply_mng: 통째 DELETE 후 80개 plain INSERT
  · user_info: user_type='U' DELETE 후 ON CONFLICT (user_id) UPSERT
  · 매 deploy 안전 — UPSERT 라 중복 INSERT 도 OK
2026-05-13 23:58:36 +09:00
chpark 485aea4d4f feat(procurements): 작성중 삭제 + 입금완료전 수정 + 035 plain SQL reload
Deploy momo-erp / deploy (push) Failing after 58s
- 매입 발주서: OPEN 일 때 삭제 버튼 노출, 라인 포함 hard delete
  · 신규 API /api/m/procurements/delete (status='OPEN' 만 허용)
- 매입 발주 editable: STATUS === 'OPEN' → STATUS not in (PAID, CANCELLED)
  · lines/save API 가드도 동일 (PAID/CANCELLED 만 차단)
- 035_supply_mng_plain_reload.sql: 직전 DO block 마이그레이션이 어디서
  fail 하는지 추적 불가 → 가장 단순한 plain SQL 로 supply_mng 다 비우고
  엑셀 기준 80개 INSERT ON CONFLICT(supply_code) UPSERT
  · momo_items/momo_procurements 의 vendor_objid 모두 NULL 처리
  · UNIQUE INDEX 보장 후 INSERT — 매 deploy 안전
2026-05-13 23:53:32 +09:00