Commit Graph

124 Commits

Author SHA1 Message Date
king 03929ff517 feat(malaysia): 메뉴명 '말레이시아 재고관리'로 변경 + 사이드바/헤더 영문 토글
- 메인 메뉴/라벨 '말레이시아 재고' → '말레이시아 재고관리'
- EN 토글 시 사이드바 활성 항목(말레이시아만)·상단 페이지 제목/부제 부분치환 번역
  (다른 메뉴는 그대로)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 18:49:46 +09:00
king b18efcd814 ui(malaysia): 입출고 옵션 type/date/memo 입력폭 통일(100%)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 18:41:31 +09:00
king 3139e213a7 feat(malaysia): 전 화면 한글/영문 실시간 토글
- static/malaysia.js: KO_EN 사전 + 토글(localStorage 기억, 새로고침 없이 즉시)
- _i18n.html 공용 include(ENG/한글 버튼 + 스크립트), 전 화면 상단 삽입
- UI 고정 문구는 사전 치환(제목/헤더/버튼/라벨/배지/옵션/안내)
- 상품/콤보명은 data-en(영문, malaysia_items)·data-ko(itemcode_db 한글) 동시 렌더
- _base_ctx 에 ko_names(itemcode_db name_map) 주입

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 18:14:42 +09:00
king b312884ddc ui(malaysia): 비관리자에게 확정 안내문도 숨김
확정 버튼은 관리자만, 일반 사용자는 안내문 없이 취소만 표시

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 17:16:09 +09:00
king 6f4a62013a feat(malaysia): 콤보 상품 MY-9991 Combo 2.5L+6L seed 추가
malaysia_items 콤보 목록에 MY-9991 추가(BOM은 itemcode_db set_components 참조)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 17:11:29 +09:00
king c07d3301e4 feat(malaysia): 재고현황 조사수량·차이 표기, 확정 관리자 제한, 슈퍼관리자 조사삭제
- 재고현황 헤더 "전산 재고 현황", Last Stocktake 옆 조사수량+차이(±) 표기
  (차이 = 마지막 재고조사 낱개 total − 전산재고)
- 재고조사 확정(전산 반영)은 관리자(is_admin)만 가능, 비관리자 안내
- 슈퍼관리자만 재고조사 완전 삭제(목록/상세 버튼 + /delete 라우트)
- "◀◀ 조사 목록" 버튼 검정 바탕(primary)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 16:38:38 +09:00
king 3d85ccf43e ui(malaysia): Code 컬럼 nowrap+고정폭, Qty 폭 축소(110px)
입출고/재고조사/재고현황 표의 Code(Set Code) 줄바꿈 방지, Qty 입력폭 축소

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 16:23:28 +09:00
king ea03a7aa18 ui(malaysia): Qty 150px·name 한줄, 재고조사 3분할, 재고현황 낱개/콤보 2분할
- Qty 컬럼 150px 고정, 상품명 줄바꿈 방지(nowrap)
- 콤보 Qty(OUT) 헤더 → Qty
- 일일 재고조사 상세 3분할(좌 정보/동작·중 낱개·우 콤보)
- 재고현황: 좌 낱개 분해 전체 + 우 콤보(최근 재고조사 세트 수량)
- db.latest_set_quantities 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 16:17:26 +09:00
king 9039d1d80b ui(malaysia): 이동이력 날짜필터+요일, Ref열 제거, 헤딩 변경(낱개/콤보 상품)
- 이동 이력에 날짜 선택 필터(요일 포함 표시), 날짜+종류 조합 유지
- 이력 Ref 컬럼 삭제
- "낱개 아이템"→"낱개 상품", "세트 아이템 — 출고(OUT)"→"콤보 상품"
- 안내 문구 삭제

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 16:05:50 +09:00
king 300f4e23c8 ui(malaysia): 입출고 3분할 레이아웃 — 좌(옵션)·중(낱개)·우(세트)
종류/날짜/메모+적용버튼을 좌측 카드로, 낱개·세트 그리드를 중/우로 배치

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 15:58:53 +09:00
king 4fdb5c181e ui(malaysia): 입출고 화면 정리 — Ref Type/No·안내문 제거, 행 간격 압축
- 불필요 필드(Ref Type, Ref No)와 안내 문구 삭제
- 테이블/입력 행 padding 축소로 낱개+세트 한 화면에 표시

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 15:56:05 +09:00
king 3b3f9739fe feat(malaysia): 입출고 화면 통합 — 낱개(좌)·세트(우) 한 폼, 버튼 하나로 일괄 적용
- /movements/bulk + /movements/set-out-bulk → /movements/apply 단일 엔드포인트
- 낱개는 선택 종류(IN/OUT/ADJUST), 세트는 항상 OUT(BOM 분해)
- 2컬럼 그리드 한 폼, "일괄 적용" 버튼 하나

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 15:50:42 +09:00
king 6b43d9926d feat(malaysia): 세트 BOM을 itemcode_db에서 읽고 입력을 그리드 일괄로 전환
- 세트구성(set_bom) 수동 관리 메뉴/라우트/API/템플릿 제거
- 세트 BOM은 itemcode_db set_components(set_code/single_code/quantity)에서
  읽음 (MalaysiaItemcodeReader, ITEMCODE_DB_URL 재사용)
- db.py: create_set_out/compute_result/finalize_stocktake 에 bom_map 주입식
- 입출고: 낱개 전체 그리드 일괄 등록 + 세트 출고 그리드(BOM 분해)
- 일일 재고조사: 낱개+세트 전체 그리드에 수량만 키인 → 일괄 저장
- malaysia_stock_db.set_bom 테이블은 레거시(미사용)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 15:35:42 +09:00
king f137f2a6a6 feat(malaysia): 말레이시아 창고 재고관리 모듈 추가
- 신규 모듈 app/modules/malaysia (prefix /malaysia, 권한키 malaysia)
- malaysia_stock_db: warehouses/malaysia_items/set_bom/stock_movement/
  daily_stocktake/daily_stocktake_line (멱등 init SQL)
- 낱개(MT/MX/MZ) 입출고·조정 movement, 세트(MY) BOM 관리, 세트 출고 BOM 분해
- 일일 재고조사: 세트→낱개 자동 분해(direct+from_set=total), 확정 시 차이만 STOCKTAKE
- prefix 검증 이중화(DB CHECK + store.py 순수함수), MD- 전면 제외
- 상품명은 itemcode_db 읽기 전용 재사용(중복 마스터 없음)
- 화면 4종 + JSON API, 순수로직 테스트 14건, README/docs 갱신

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 13:34:31 +09:00
king 13ac11cc0a ui(expense): 총 건수/총 금액 카드 제거 + 경비 내역 건수·합계 글씨 확대
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 18:25:10 +09:00
king 069d998c9d feat(expense): 경비 내역 월 선택 필터 + 월 합계, 월별 집계 버튼 제거
- 상단 "월별 집계" 버튼 삭제
- 경비 내역: 월 선택(input month, 변경 시 자동 조회) 기본 이번 달
- 선택 월(사용일 기준)만 표시 + 해당 월 합계금액 표시

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 18:22:58 +09:00
king e782cb4ea7 feat(expense): 영수증 이미지 업로드 시 가로 1000px 초과면 축소 + JPEG q80
- 가로 > 1000px 이미지: 비율 유지 1000px 축소 후 JPEG 품질 80 재인코딩
- EXIF 회전 보정, 알파/팔레트 → RGB 변환, 확장자 .jpg 로 통일
- 1000px 이하/비이미지/처리 실패 시 원본 그대로 저장
- 업로드를 메모리 읽기 후 처리 방식으로 변경(20MB 제한 유지)
- requirements: pillow>=10.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 18:12:09 +09:00
king 5582c72467 feat(expense): 영수증 파일명 규칙 변경 + 등록 폼 필수 검증
- zip 첨부 파일명: 날짜_이름_분류_결제수단_금액_가맹점.확장자 (날짜=사용일)
  - 가맹점 없으면 생략, 금액 쉼표 표기, 금지문자 정리
- db.approved_attachments 에 category/method/amount/merchant 추가
- 등록 폼: 사용일/분류/결제수단/금액/가맹점 필수 — 누락 시 경고창 + 포커스
  (가맹점 input required, 금액 1원 이상)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 18:08:56 +09:00
king b678d7c37f ui(expense): 승인완료 엑셀 다운 버튼 제거 + zip 버튼 검정(primary)
- 엑셀은 zip에 동봉되므로 별도 버튼 삭제
- 전부 다운로드(zip) 버튼 erp-btn-primary(검정 배경/흰 글씨)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 18:01:54 +09:00
king 5b0fe2f1a1 style(expense): 승인 목록 엑셀 서식 — 제목행 파랑/금액 쉼표/열너비 자동
- 제목행: 파랑(4472C4) 배경 + 흰 굵은 글씨 + 가운데 정렬
- 금액/합계금액: #,##0 쉼표 표시형식
- A~K 열너비 내용 기준 자동(한글/전각 2칸 계산)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:57:21 +09:00
king 6ae0d90b97 feat(expense): 전부 다운로드 zip에 승인 목록 엑셀 동봉
- _build_approved_xlsx 헬퍼로 엑셀 생성 로직 추출(export/zip 공용)
- zip 최상단에 승인목록_{month}.xlsx 포함 + 첨부 파일들

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:53:40 +09:00
king 09e2f06a14 fix(expense): zip 버튼 라벨 변경 + 경로 폴백/진단 헤더
- "첨부 일괄(zip)" → "전부 다운로드(zip)"
- stored_path 깨진 경우 업로드루트/item_id/파일명 으로 폴백 탐색
- X-Attachment-Stats 헤더(total/added/missing)로 빈 zip 원인 진단

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:50:49 +09:00
king a107b06826 feat(expense): 승인완료 메뉴 — 전 직원 월별 + 엑셀/첨부 zip
- /expense/approved: 승인자/관리자 전용, 월 선택 + 전 직원 승인완료 항목
- 직원별 승인 금액 합계표 + 총합
- 엑셀 다운(리스트 + 직원별합계 시트)
- 첨부 일괄 zip: 파일명 yy년 mm월 dd일(요일)_이름.확장자 (업로드일 기준)
- store: APPROVED_STATUSES(승인,정산완료) / db: list_approved, approved_attachments

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:46:41 +09:00
king 506db5ff07 feat(expense): 분류 설정 메뉴를 승인자에게도 노출
- /expense/settings 및 분류 CRUD 가드 관리자 → 승인자(expense_approver|admin)
- index 설정 버튼 is_approver 조건으로 노출
- 미사용 _require_admin 헬퍼 제거

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:28:26 +09:00
king 0b04a05b26 feat(expense): 관리자 분류 설정 메뉴 추가 (동적 분류)
- CategoryStore: 분류 항목 JSON 저장소(DATA_DIR/expense_categories.json)
- 관리자 설정 페이지(/expense/settings) + 분류 CRUD API
- _normalize 분류 고정목록 검증 제거 — 추가 분류 즉시 등록 폼/집계 반영
- index/reports 분류를 동적 목록으로 교체

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:22:01 +09:00
king ec8c9edcc9 fix(expense): 라운드 제거 대상은 .erp-table-wrap + 클립 아이콘 22px 강제
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 02:14:21 +09:00
king 7ff3500844 ui(expense): 내역 표 첫 행 모서리 라운드 제거 + 첨부 아이콘 확대
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 02:11:44 +09:00
king 84624baf8e ui(expense): 경비 내역 표 가운데 정렬 + 동작 헤더 제거 + 한 줄(너비 자동)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 02:08:22 +09:00
king d728c55e2a fix(expense): 요약카드 70px 강제(!important) + 요약줄·등록폼 간격 추가
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:40:22 +09:00
king 55c98b6b95 fix(expense): 요약카드 70px — grid-auto-rows 로 행 높이 고정(stretch 무력화)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:37:16 +09:00
king ca53042eb4 ui(expense): 상단 요약카드 70px + 경비등록(좌)/경비내역(우) 2단 배치
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:31:32 +09:00
king e2c6a50b46 feat(vacation): 관리자는 모든 상태(승인/취소 포함) 휴가 삭제 가능
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:27:10 +09:00
king cb43fe1257 fix(cupang): itemcode 조회 오류를 로그+API+화면에 노출 (원인 진단)
- ItemcodeReader.last_error 추가, _run 실패 시 logger.exception + 메시지 보존
- /api/products/all 응답에 error/count 추가
- products 화면: 결과 0 일 때 조회오류/사유 표시 (그냥 '결과 없음' 대신)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 21:16:54 +09:00
king 8f3761aeae ui(shell): 브랜드 'DBX ERP System' 통일 + 사이드바 접힘 시 아이콘 아래 메뉴명 표시
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 18:21:05 +09:00
king d30dcbada4 ui(cupang): 달력 행 유동화(6주 균등 분할) — 1883x938 세로 스크롤 제거
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 18:15:31 +09:00
king 9f361c4e6a ui(shell): 뷰포트(1883x938) 고정 — 문서 세로 스크롤 제거
- erp 셸 height:100vh + body overflow:hidden, .erp-page 가 남은 높이 채우고 내부 스크롤
- 휴가 달력: 6주 행이 가용 높이 균등 분할(유동), 날짜 셀 height:100%, 선택일 패널 내부 스크롤
- 쿠팡 출고 폼: 라인 패널 고정 900px 높이 → 가용 높이 채움
- CORM/Order 는 별도 창이라 해당 없음

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 18:12:41 +09:00
king fde2c9c2e9 ui(vacation): 휴가 bar 시작 위치 38px 로 내려 날짜 pill 가림 방지
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 09:01:19 +09:00
king 162e1d22a9 ui(cupang,vacation): 달력 년월 왼쪽 정렬(쿠팡) + 년월·이동버튼 18pt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:58:35 +09:00
king 1806c75ecb ui(vacation): 오늘 날짜 pill 배경을 요일색(빨강/파랑/검정)에 맞춰 흰글씨
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:54:11 +09:00
king 8ab5223790 feat(vacation): 상세 — 승인은 취소처리, 미승인(작성중/제출/반려)은 삭제(hard)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:50:02 +09:00
king fa1027fa1b feat(time): 프로젝트 전체 시간 KST(UTC+9) 통일
- app/timezone.py 신설: KST 고정오프셋(+9, DST 없음) + now_kst/today_kst/to_kst_iso
- DB 직렬화 created_at/updated_at/decided_at/uploaded_at 표시를 UTC→KST 로 변환
  (expense/cupang/vacation db.py)
- _now_iso(JSON 저장) KST 기준
- 라우터 date.today()/datetime.now() → today_kst()/now_kst() (달력 '오늘'/엑셀 파일명)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:48:28 +09:00
king 32fc12e283 ui: 검정 배경 요소 글자 흰색 강제 (a:visited 가 덮어쓰던 문제 차단, 전역)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:39:46 +09:00
king 8562c4f65d ui(vacation): 날짜 숫자 20px + 칸 높이 125px + 신청 버튼 글자 흰색
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:36:21 +09:00
king bec9c5e5a6 ui(vacation): 달력 날짜 정사각형 셀 + 큰 글자 + 안쪽 테두리 + bar 오버레이
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:33:15 +09:00
king 8c6539d6cb ui(sidebar): 아이콘/글자 크기 확대 + 운영·관리 그룹 묶음 정렬
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:29:28 +09:00
king 269e779129 feat(vacation): 휴가 관리 모듈 — 월간 달력 bar/연차·반차 신청/승인 워크플로/공휴일·연차 설정
- vacation_db 전용 저장소(VacationDBStore), VACATION_DB_URL 미설정 시 '설정 필요' 안내
- 월간 달력: 구글식 휴가 bar(주 단위 lane 배정), 일/공휴일 빨강·토요일 파랑
- 신청 폼: 종류/기간/시작·종료 구분(종일/오전/오후)/사유 + 예상 일수 미리보기
- 일수 계산은 서버(compute_days)에서 주말+공휴일(is_red) 제외 재계산
- 워크플로: 작성중/반려→제출→승인|반려, 취소 soft delete, 본인만 수정(작성중/반려)
- 권한: vacation(접근)/vacation_approver(승인), admin 통과. 설정은 admin 전용
- 공휴일(vacation_holidays) DB 기반 provider + settings CRUD, 연차잔여(vacation_balances)
- 엑셀 내보내기(openpyxl), scripts/sql/vacation_db_init.sql(멱등, 2026 공휴일 seed)
- main.py 등록, 메뉴 ready 전환, docs/.env.example/CLAUDE.md 갱신

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 08:20:20 +09:00
king 3cf22513ca ui(cupang): 출고 리스트 상태 배지 제거 (상태 항목 폐지)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 07:14:19 +09:00
king 33ce9482dd fix(cupang): 출고 툴팁 수량에 '개' 단위 표기
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 07:00:36 +09:00
king ce1014e6bc fix(cupang): 출고 툴팁 500 에러 — s.items(dict 메서드 충돌) → tip_items
Jinja 의 s.items 는 dict 키가 아닌 .items() 메서드를 반환해 tojson 실패.
컨텍스트 키를 tip_items 로 변경.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 06:58:32 +09:00
king 652e53c3e8 feat(cupang): 선택일 출고 항목 hover 툴팁(제품명+수량, 커서 따라감)
- index sel_shipments 에 품목 요약(name/qty) 첨부
- 리스트 항목 hover 시 커서 왼쪽에 따라다니는 툴팁 표시
- 캐시 버전 m

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 06:55:52 +09:00