Commit Graph

237 Commits

Author SHA1 Message Date
chpark e3e4919933 fix(orders): 택배 전용 품목은 재고 무관하게 발주/수정 가능
Deploy momo-erp / deploy (push) Successful in 1m58s
프론트(addManyToCart)는 이미 isDelivery → effStock=Infinity 로 우회했지만
백엔드 3곳에서 stock 체크로 거부 — 사용자가 담아도 출고 요청이 4xx 로 실패.

- /api/m/orders/save line 117: requires_delivery='Y' 면 재고 검증 우회
- /api/m/orders/items/update line 97: 동일 처리 (수량 수정 시)
- /api/m/orders/items/add line 87: 동일 처리 (발주에 품목 추가 시)
- 세 곳 모두 select 절에 requires_delivery 컬럼 추가

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 22:02:30 +09:00
chpark 1396ac2ed7 fix(orders/new): 재고/한도 초과 경고를 가운데 모달로 통일
Deploy momo-erp / deploy (push) Successful in 1m55s
기존: 카트 +/- 시도는 우상단 토스트, 신규 담기는 가운데 모달 — 일관성 없음.
변경: toastLimit 함수도 Swal.fire 가운데 모달로 변경. 메시지도 명확하게.
- 재고 초과: "재고 수량 초과 — 현재 재고 N개 보다 많은 수량은 출고 요청할 수 없습니다."
- 한도 초과: "1회 발주 한도 초과 — 1회 최대 N개까지 발주 가능합니다."

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:59:17 +09:00
chpark 2a84b74488 fix(orders/new): 재고 초과 수량은 아예 담기지 않게 차단 (clamp 제거)
Deploy momo-erp / deploy (push) Successful in 1m55s
기존: 카드/리스트의 [+ 담기] 클릭 시 입력값을 limit 으로 clamp 해서 그대로 담겼음.
변경: 입력값을 그대로 addManyToCart 에 넘김 → limit 초과 시 거부 + Swal 경고
      ("재고 부족" / "1회 발주 한도 초과") + 입력칸은 그대로 두어 사용자가 직접 정정.

- 카드 input onChange의 즉시 clamp 제거 (입력은 자유롭게 표시)
- 카드 + 담기 onClick / Enter: Math.min(limit, val) 제거
- 리스트 동일 패턴 적용
- ListView 의 onLimitToast prop 미사용으로 정리

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:55:21 +09:00
chpark baa2b72169 style(orders/new): 발주 장바구니 수량 입력칸 확대 — w-12 → w-20, text-base font-extrabold
Deploy momo-erp / deploy (push) Failing after 8s
3~4자리 수량(230, 1000 등)이 잘리지 않도록 넓힘. +/- 버튼도 살짝 키움.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:52:46 +09:00
chpark 84ef9e5179 style(orders/new): 카드 사진 축소 + 품목명/단가/재고 폰트 확대
Deploy momo-erp / deploy (push) Successful in 1m54s
- 사진 비율: aspect-square → aspect-[4/3] (세로 축소)
- 품목명: text-[11px] → text-sm sm:text-base font-bold
- 단가: text-xs sm:text-sm → text-base sm:text-lg font-extrabold
- 재고: text-[10px] font-semibold → text-sm sm:text-base font-extrabold

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:51:19 +09:00
chpark 6407954fc1 style(orders/new): 카드 마감일시 폰트 확대 — text-[9px] → text-sm sm:text-base font-extrabold
Deploy momo-erp / deploy (push) Successful in 1m56s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:47:59 +09:00
chpark bbabccf70e fix(orders/m): 거래처 발주 상세 모달 — [택배 추가]/[용차 추가] 버튼 삭제
Deploy momo-erp / deploy (push) Successful in 2m4s
거래처(일반 사용자)는 발주 수정 시 택배·용차 라인을 새로 추가할 수 없게 함.
이건 출고 담당자(/m/admin/orders) 가 처리. 기존 라인의 수량/단가 수정은 그대로 유지.
- DetailModal 두 버튼 + addNewExtra 함수 제거
- 미사용 import (Truck, Package) 정리

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:43:09 +09:00
chpark 1049e9b776 chore(orders/new): 보기모드 토글 라벨 — 카드/리스트 → 상세보기/간단히보기
Deploy momo-erp / deploy (push) Successful in 2m24s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:38:51 +09:00
chpark 756924354b fix(orders/new): 카드 수량 입력칸 확대 + 담기 버튼 컴팩트화
Deploy momo-erp / deploy (push) Failing after 4m21s
- input width: w-9 (36px) → flex-1 min-w-0 (가용 폭 전부), 폰트도 키움
- 담기 버튼: flex-1 → h-7 px-2.5 (텍스트 폭에만 맞춰 축소)
- 3~4자리 수량(800~9999) 입력해도 잘리지 않음

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:38:22 +09:00
chpark b34121b597 feat(sale-period): 판매기간 분 단위 + 재고초과 차단 + 모바일 2열 카드
Deploy momo-erp / deploy (push) Successful in 2m1s
- momo_items.sale_start_date/sale_end_date DATE → TIMESTAMP 자동 승격
  (items/list ensureColumns 에 information_schema 체크 후 ALTER)
- items API (list/save/bulk-sale-range/daily-order-inventory): ::date → ::timestamp,
  CURRENT_DATE → NOW(), 응답 포맷 'YYYY-MM-DD HH24:MI'
- 품목 관리 편집/일괄적용 UI: <input type="date"> → datetime-local
  + toLocal 헬퍼로 응답값 "YYYY-MM-DD HH:MM" → "YYYY-MM-DDTHH:MM" 변환
- 출고 요청 카드 그리드 모바일 2열로 변경 + 카드/리스트에 판매 종료일시 표시
- 재고/한도 초과 수량 입력 시 즉시 clamp + 우상단 토스트 경고
  (카드/리스트 inline qty input onChange, setQty/updateQty 양쪽)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 21:17:47 +09:00
chpark 5ba9b9f04e feat(login): 로그인 화면에서 홈(랜딩)으로 이동 — 좌측 로고 + 우측 상단 홈으로 버튼
Deploy momo-erp / deploy (push) Successful in 1m57s
- 좌측 상단 MOMO DISTRIBUTION 로고를 <Link href="/"> 로 감싸 클릭 시 랜딩 이동
- 우측 폼 패널 상단에 [홈으로] 고정 버튼 추가 (모바일에서도 노출)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 18:21:52 +09:00
chpark 49352feb4a feat(landing): Play 스토어/iOS/PC 설치 섹션 + 개인정보처리방침 푸터
Deploy momo-erp / deploy (push) Successful in 1m57s
- 랜딩에 INSTALL 섹션 — Android(Play 스토어 다이렉트), iPhone(홈 화면 추가), PC(웹) 3장 카드
- /install 안드로이드 가이드 상단에 Play 스토어 다운로드 CTA(가장 쉬운 방법) 추가
- 푸터에 개인정보처리방침/계정 삭제/앱 설치/Play 스토어 링크 + mailto/tel 활성화

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:35:39 +09:00
chpark 25aa33c499 feat(daily-order-inventory): 출고/정산 — 일자별 발주/재고 메뉴
Deploy momo-erp / deploy (push) Successful in 1m56s
- 새 페이지 /m/admin/daily-order-inventory: 선택 일자의 판매가능 품목 + 발주수량 합계 + 전체 재고
- 새 API /api/m/admin/daily-order-inventory: sale_start_date~sale_end_date 필터 + ORDER_QTY/STOCK_QTY 집계
- /api/menu/route.ts: ensureMomoMenus — 9000405 menu_info + 출고관리(9000401) 권한 master 자동 매핑

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:32:28 +09:00
chpark 6ddeca316c fix(inbounds): 입고 등록 버튼 — 발주요청/입고완료 상태에도 노출
Deploy momo-erp / deploy (push) Successful in 1m54s
이전: STATUS === 'PAID' || 'PARTIAL' 일 때만 [입고 등록] 버튼 표시
지금: REQUESTED + PARTIAL + PAID + RECEIVED 모두 표시.
- 입금 의존성 해제(앞선 커밋)와 일관성 맞춤.
- RECEIVED 상태에서도 라인 보정 입력이 가능하도록 버튼 유지 + '입고 완료' 배지 같이 표시.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 15:31:38 +09:00
chpark 1eba9aab32 fix(admin/orders): 거래명세표 컬럼 폭 재조정 — 품명 넓게, 수량·비고 좁게
Deploy momo-erp / deploy (push) Successful in 1m53s
* 수량 컬럼: w-20 → w-14 (header), QtyInput w-16 → w-11
* 비고 컬럼: w-32 → w-20
* 품명은 무제한 폭으로 둬서 줄어든 만큼 자동 확장

화면/이미지 공유/인쇄 모두 동일하게 적용 (캡처 영역 내 변경).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 15:29:25 +09:00
chpark d95a736701 feat(install): /install 페이지 — 안드로이드/아이폰/PC 별 PWA 설치 가이드
Deploy momo-erp / deploy (push) Successful in 4m25s
노인 사용자(거래처 사장님 등) 도 따라할 수 있도록 큰 글씨 + 단계별 안내.
User-Agent 자동 감지로 해당 기기 가이드 우선 표시, 탭으로 다른 기기 전환 가능.

* 안드로이드: Chrome → 앱 설치 배너 → 4단계
* 아이폰: Safari → 공유 → 홈 화면에 추가 → 5단계 (사파리 필수 경고 강조)
* PC: QR 코드 (휴대폰 카메라로 즉시 안내 페이지 이동)

모바일 로그인 화면 하단에 "📱 휴대폰 홈 화면에 앱처럼 설치하는 방법" 링크 추가.
middleware publicPaths 에 /install 추가 (비로그인 접근 허용).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:58:36 +09:00
chpark 7a712c164e feat(privacy): /account-deletion 페이지 — Play 데이터 보안 필수 URL
Deploy momo-erp / deploy (push) Successful in 2m4s
Google Play 데이터 보안 섹션에서 '계정 URL 삭제' 필드에 넣을 페이지.
앱 내 self-service 삭제가 없는 B2B 앱이므로 이메일/전화 요청 절차를
명시한 정적 안내 페이지로 처리.

* 삭제 요청 방법 (이메일/전화)
* 처리 기간 (14일 이내)
* 삭제되는 데이터 vs 법령상 보관되는 데이터
* /privacy 와 동일하게 middleware 인증 면제

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 12:09:01 +09:00
chpark 45af622afb chore(security): .gitignore — 안드로이드 서명 키/번들 차단
Deploy momo-erp / deploy (push) Successful in 1m55s
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 11:18:40 +09:00
chpark 2419ded4ac fix(android): assetlinks.json — PWABuilder 가 발급한 실제 서명 키 SHA-256 으로 교체
Deploy momo-erp / deploy (push) Successful in 2m1s
PWABuilder 가 .aab 빌드 시 생성한 keystore 의 SHA-256 으로 갱신.
Play App Signing 활성화 후 Play 가 별도 서명 키를 발급하면 그 SHA-256 도
배열에 추가해 두 개 다 인정되도록 해야 함.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 11:15:29 +09:00
chpark b58d7e6821 feat(android): /.well-known/assetlinks.json — TWA Digital Asset Links
Deploy momo-erp / deploy (push) Successful in 2m1s
Play Store TWA(Trusted Web Activity) 풀스크린 동작에 필수. 안드로이드 앱
패키지 com.momotogether.app 의 서명 SHA-256 을 momotogether.com 도메인이
인정한다고 선언.

* 현재 SHA-256: 로컬 업로드용 키(android.keystore in ~/Downloads/momo-twa)
* Play App Signing 이 별도 서명 키를 발급하면 그 SHA-256 도 배열에 추가 필요

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 10:59:53 +09:00
chpark 80f490e8d6 feat(privacy): /privacy 공개 페이지 추가 — Play Store 등록용 개인정보 처리방침
Deploy momo-erp / deploy (push) Successful in 5m55s
- /privacy 라우트: 인증 미들웨어 면제. 시행일/수집항목/보유기간/제3자/안전성/연락처
- 추적·광고 SDK 없이 ERP 운영 데이터만 다루는 자체 서비스 기준으로 작성
- middleware publicPaths 에 /privacy 추가

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 10:41:58 +09:00
chpark 326b790e4a fix(inbounds): 발주요청/입고완료 발주도 입고 입력 가능
Deploy momo-erp / deploy (push) Successful in 1m52s
editable 조건을 PAID/PARTIAL 만 → REQUESTED/PARTIAL/PAID/RECEIVED 로 확장.
OPEN(작성중)/CANCELLED 만 차단. 입금 의존성은 이미 해제됐고, 이번 변경으로
'발주요청 상태라 입고 입력이 불가합니다' 차단 메시지 제거.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:55:53 +09:00
chpark 461164c397 feat(procurement): 입금/입고 순서 의존성 해제 — 발주요청 즉시 입고 가능, 입고완료 후 입금 가능
Deploy momo-erp / deploy (push) Successful in 1m53s
신규 업무 흐름: 매입발주 작성 → 발주요청 → (순서 무관) 입고 / 입금
- 발주요청(REQUESTED) 단계에서 입금 처리 없이 바로 입고 가능
- 입고완료(RECEIVED) / 입고중(PARTIAL) 건도 그 이후에 입금 처리 가능
- 이미 입금완료(PAID) 인 발주에 추가 입고가 들어와도 상태는 PAID 유지

변경 파일:
- proc-payments/confirm: 입금 허용 상태 REQUESTED → REQUESTED/PARTIAL/RECEIVED
- proc-payments/list: 노출 상태 (REQUESTED,PAID) → (REQUESTED,PARTIAL,RECEIVED,PAID)
- inbounds/page: 기본 필터 PAID_OR_PARTIAL → INBOUNDABLE (REQUESTED+PARTIAL+PAID)
  드롭다운에 '발주요청만' 옵션 추가, 안내 문구 갱신
- inbounds/save: 입고 후 상태 갱신 시 PAID 면 덮어쓰지 않음

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:50:33 +09:00
chpark 209b47c7f2 fix(admin): 거래명세표/발주서 캡처 영역 폰트 사이즈 +2px 상향
Deploy momo-erp / deploy (push) Successful in 1m55s
레이아웃 영향 없는 범위에서 가독성 ↑:
- text-[11px] → text-[13px]
- text-[12px] → text-[14px]
- 작은 배지/REMARK 등은 기존 비율 유지 (9→11, 10→12)

화면/이미지 공유/인쇄 동일하게 굵고 큰 텍스트로 나옴.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:40:45 +09:00
chpark dc05d48c82 fix(admin): 거래명세표/발주서 전체 bold + 매입발주서 좌:우 비율·품명폭 조정
Deploy momo-erp / deploy (push) Successful in 1m53s
- 거래명세표(admin/orders) 캡처 영역 전체 font-bold [&_*]:font-bold — 가독성 ↑
- 발주서(admin/procurements) 캡처 영역도 동일하게 bold 적용
  화면/이미지 공유/인쇄 모두 굵게 표시
- 매입 발주서 관리 좌:우 레이아웃: 360px → 480px (왼쪽 리스트 더 넓게)
- 발주서 품명 컬럼 width 220px 로 제한 (단위/수량/단가/금액 열에 공간 양보)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:32:24 +09:00
chpark 73317166ab feat(admin): 동적 리스트 select → SearchableSelect 로 통일 (결과내 검색)
Deploy momo-erp / deploy (push) Successful in 1m53s
긴 동적 리스트(거래처/창고/품목/공급업체/매입발주)의 native <select> 를
검색 가능한 SearchableSelect 로 교체. 항목 50~100건이라도 타이핑으로 즉시 필터.

대상:
- admin/orders 출고처리: 거래처 변경
- admin/inventory: 검색 창고 / 매입입고 모달(창고+품목) / 재고이동 모달(출발+도착+품목)
- admin/inbounds/new: 매입발주 / 공급업체 / 입고창고 / 품목
- admin/procurements/new: 품목
- admin/inventory/history: 창고 필터

상태/유형 등 짧은 고정 옵션 select 는 native 그대로 (드롭다운 클릭 즉시 선택이 빠름).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:29:26 +09:00
chpark 9e4d506939 fix(admin/orders): 좌:우 비율 2:3, 좌측 리스트 압축 + 거래명세표 품명 한 줄 유지
Deploy momo-erp / deploy (push) Successful in 1m56s
- 외곽 grid 50:50 → 2fr:3fr (좌 40 / 우 60). 거래명세표 패널 폭 확보.
- 좌측 발주 리스트: 패딩/폰트 축소(px-1.5, text-[11px]), 합계 whitespace-nowrap, 업체 max-w-[100px].
- 우측 거래명세표 품명 td: whitespace-nowrap — 2줄 줄바꿈 방지.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:20:43 +09:00
chpark adff1347c9 fix(admin): 관리자 패널 '← 사용자' 링크 404 — /dashboard → /m/orders/new
Deploy momo-erp / deploy (push) Successful in 6m25s
- admin-panel 헤더 '← 사용자' 링크가 삭제된 /dashboard 로 가서 404 발생
- 동일 패턴: login 페이지 fallback redirect 도 /m/orders/new 로 정정

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:04:49 +09:00
chpark 3c73c5a47a fix(admin/orders): 출고처리 — 세금계산서 발행 버튼 제거 + 기본 검색 상태 '출고요청+출고완료'
Deploy momo-erp / deploy (push) Successful in 2m2s
- 출고처리 우측 상세에서 [세금계산서 발행] 버튼 제거 (계산서(면세) 만 유지)
  업무 흐름: 출고요청 → 출고완료 → 입금완료 → 계산서 발행 → 전자세금계산서.
  입금완료 후의 발행은 계산서 관리 메뉴에서 처리.
- 검색조건 기본값: 'EDITABLE' (= REQUESTED + APPROVED) 두 상태만 노출.
  드롭다운에 '출고요청+출고완료' 옵션 추가, 기존 '전체 상태'/개별상태 옵션 유지.
- orders/list API: statuses?: string[] (IN) 파라미터 지원 (status 단일은 기존대로).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 10:59:44 +09:00
chpark 4a6a5fe6dc fix(orders/new): 판매기간 필터를 ADMIN 에도 적용 + 재고0 음영 표시 + 택배 품목은 재고무관 구매
Deploy momo-erp / deploy (push) Successful in 1m57s
- items/list: forSale=true 시 ADMIN 도 sale_start/end 필터 적용 (USER 는 기존대로 항상)
- orders/new: forSale=true 전송, onlyAvailable/재고필터 드롭다운 제거
- 재고 0 품목도 표시하되 opacity-50 음영 + "품절" 라벨
- 택배 전용(requires_delivery='Y') 품목은 음영 X, 재고 0이어도 담기 가능

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 10:27:08 +09:00
chpark f73c486c4f feat(items): 품목 판매 가능일 (sale_start/end) — 관리자 일괄 적용 + USER 필터
Deploy momo-erp / deploy (push) Successful in 1m55s
- momo_items: sale_start_date/sale_end_date DATE 컬럼 (ensureColumns)
- USER 측 출고요청: CURRENT_DATE ∈ [start, end] 인 품목만 노출 (NULL=상시)
- 택배 전용(requires_delivery='Y') 품목은 재고 무관 노출 (onlyAvailable)
- 관리자 품목 관리: 체크박스 + 시작일/종료일 일괄 적용 바, 모달에 판매기간 입력, 리스트에 판매기간 컬럼

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 09:46:33 +09:00
chpark 86b90e2d5a fix(capture): date input 캡쳐 시 빈 표시 → 같은 값의 span 프록시로 대체
Deploy momo-erp / deploy (push) Successful in 2m12s
2026-05-15 09:35:01 +09:00
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