Commit Graph

27 Commits

Author SHA1 Message Date
king 57f0c3426f refactor(cupang): UI에서 제거된 기능의 죽은 코드 정리
- 엑셀 내보내기 전체 제거: /export, /{id}/export, _build_xlsx,
  _flatten_for_sheet, shipments_for_export, SHEET_COLUMNS
- 미사용 라우트 제거: /api/calendar, /api/products/search, /api/box-calc,
  /{id}/status(상태변경 UI 삭제됨)
- 미사용 db 메서드 제거: deactivate_box_rule, get_box_rule, box_rule_map
- form.html window.CPG + cpg-search-pop, cupang.js CFG, 검색 드롭다운 CSS 제거
- 템플릿 미사용 statuses 컨텍스트 제거, router import 정리
- 캐시 버전 k

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 06:37:51 +09:00
king bcbf3de24c ui(cupang): 달력 상단 엑셀 버튼 삭제 + 설정 버튼 이름/우측정렬
- 엑셀(N월) 버튼 제거
- 제품명 설정 / 입고센터 관리 / 박스 입수량 설정 로 명칭 통일, 우측 정렬
- 캐시 버전 j

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 06:29:22 +09:00
king 2f16457ac6 ui(cupang): 품목 라인 체크박스 칸 가운데 정렬 (Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>) 2026-05-30 06:25:07 +09:00
king fdabeec4e3 ui(cupang): 품목 라인 번호열을 체크박스로 + 선택 라인 삭제 + 전체선택
- # 열 → 체크박스(헤더 전체선택, indeterminate 지원)
- "라인 삭제" → "선택 라인 삭제": 체크된 행 삭제(최소 1줄 유지)
- 캐시 버전 h

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 06:23:16 +09:00
king f25948185b ui(cupang): 박스이름 180px로 맞춰 박스당 입수량을 제품코드와 세로 정렬 (Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>) 2026-05-30 06:14:54 +09:00
king 90e286dc4d ui(cupang): 박스룰 폼 3행 배치 + 목록 컬럼 정리/하드삭제
- 폼: 1행 제품명180/제품코드100, 2행 박스이름/박스당입수량, 3행 메모(전체폭)
- 목록 순서 제품명·제품코드·박스명·입수량·메모, 상태열/비활성 제거
- 삭제 버튼=완전삭제(delete_box_rule, 참조 라인 box_rule_id NULL 처리)
- 캐시 버전 f

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 06:11:57 +09:00
king 2e3ea610b7 ui(cupang): 박스 입수량 2열 배치 + 고정폭 + 입수량 "개" 단위
- 추가/수정 480px(좌), 입수량 규칙 900px(우)
- 제품명/제품코드/박스이름 입력 140px, 박스당 입수량 60px + "개" 접미
- 캐시 버전 e

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 06:03:02 +09:00
king c11c5733de ui(cupang): 박스 입수량 폼 제품명 드롭다운 + 라벨 정리
- 제품명*(등록 제품 드롭다운, 코드 오름차순) 선택 시 제품코드/스냅샷 자동
- 라벨: 제품명* / 제품코드 / 박스이름 / 박스당 입수량*
- 캐시 버전 d

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 05:52:57 +09:00
king 478cde8caf fix(cupang): 헤더 입력 185px — erp.css min-width:240 오버라이드
진짜 원인: erp.css .erp-input{min-width:240px} 가 width:185 를 눌러 240 고정.
헤더 입력 규칙에 min-width:185px 추가로 해결. 캐시 버전 c 로 bump.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 05:43:37 +09:00
king 574c053077 fix(ui): 정적 CSS/JS 캐시 무효화 쿼리(?v=) 추가
브라우저가 옛 cupang.css/erp-shell.css 를 캐시해 최근 레이아웃 변경
(헤더 185px, 콘텐츠 1550px 등)이 반영되지 않던 문제. 링크에 버전 쿼리 추가.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 05:40:44 +09:00
king 151de492ad feat(expense): 첨부 뷰어 모달 — 이미지 미리보기 + 펜 주석
승인 대기 페이지의 "첨부" 텍스트 링크를 클립 아이콘 버튼으로 교체.
클릭 시 모달 팝업으로 이미지 미리보기 + 마우스 펜 주석 + 다운로드.

뷰어 컴포넌트 (전역, 다른 페이지에서도 재사용 가능):
- 좌측: 첨부 목록 (썸네일/메타)
- 우측: 캔버스 스택 (img + 투명 canvas)
- 도구: 펜/지우개, 색상 4종, 굵기 3종, 전체 지우기, 합성 PNG 저장, 원본 열기
- 이미지 외 파일은 다운로드 링크만 표시
- ESC/배경 클릭으로 닫기, pointer events 지원

전역 노출: window.ErpAttachViewer.{open, openFor, close}
2026-05-29 03:40:03 +09:00
king 550867ba0c feat(expense+admin): 결재 워크플로 + 첨부 + 집계 + 엑셀 + 사용자 직접 등록
[admin]
- POST /api/users 사용자 직접 등록 (이메일만으로). UserStore.create_user 추가
- admin.html: 등록 폼 + 삭제 버튼 + 한글 라벨 + 신규 권한 표시
- 신규 권한 키: expense_approver, vacation_approver (APPROVER_KEYS)
- is_approver(user_rec, kind) 헬퍼

[expense 워크플로]
- 상태 전이: 작성중 → 제출 → 승인/반려 → 정산완료
- API: /api/items/{id}/{submit,revert,approve,reject,settle}
- 권한: submit/revert=owner, approve/reject/settle=expense_approver 또는 admin
- expense_items 컬럼: approver_email, decided_at, reject_reason
- 작성중/반려 상태에서만 수정/삭제/첨부 가능

[expense 첨부]
- 영수증/기타 (kind: receipt|other). 최대 20MB, 확장자 화이트리스트
- 저장: DATA_DIR/uploads/expense/{item_id}/{att_id}_{filename}
- expense_attachments 테이블 (CASCADE on item delete)
- API: 업로드/목록/다운로드/삭제

[expense 집계]
- /expense/reports: 연도별 월×카테고리 피벗 표

[expense 엑셀]
- GET /expense/api/export.xlsx?from&to&scope=mine|all
- scope=all 은 승인자/관리자만

[DDL]
- expense_db_init.sql: 신규 컬럼/테이블 포함 (멱등)
- expense_db_002_workflow_attachments.sql: 운영 DB 마이그레이션용

[deps]
- openpyxl>=3.1, python-multipart>=0.0.20

[docs]
- DATABASES.md: 워크플로 다이어그램, attachments 테이블, 마이그레이션
- PROJECT_OVERVIEW.md: 권한 키 표
- DEPLOYMENT.md: DATA_DIR/uploads 안내
2026-05-29 02:52:44 +09:00
king 9c58b022e2 feat(expense): 개인경비 모듈 + ERP 좌측메뉴 셸 + expense_db 연결
- ERP 셸: 좌측 사이드바 + 상단 헤더 + 콘텐츠 영역(erp_base.html)
- 분기: 슈퍼관리자 → 업무모듈 카드, 일반사용자 → ERP 메인(erp_home.html)
- 신규 라우트: /modules (슈퍼관리자 모듈 카드 재진입)
- 개인경비 모듈: app/modules/expense/ (라우터/저장소/템플릿)
  - JSON 저장소(ExpenseStore) + PostgreSQL 저장소(ExpenseDBStore)
  - 팩토리: EXPENSE_DB_URL 있으면 DB, 없으면 JSON 폴백
- DB: scripts/sql/expense_db_init.sql (멱등 DDL, postgres-db 컨테이너)
  - expense_db, 역할 expense_app, 테이블 expense_items, 인덱스/트리거
- 마이그레이션: scripts/migrate_expense_json_to_db.py (멱등, --dry-run)
- 의존성: psycopg[binary,pool]>=3.2
- 환경변수: EXPENSE_DB_URL 추가
- 문서: CLAUDE.md 작업 기준 + docs/{PROJECT_OVERVIEW,SERVER_ARCHITECTURE,DATABASES,DEPLOYMENT}.md
  - main-app 배포 경로 /opt/www/main 고정 명시
  - 위험 명령(DROP/TRUNCATE/rm -rf/volume 삭제) 사용자 승인 정책
2026-05-29 02:21:03 +09:00
king 316e3fe8d1 feat(erp): ERP 대시보드 + 관리자 권한 시스템 도입
- 로그인: dbxcorp.co.kr 도메인 화이트리스트만 사용. ALLOWED_EMAILS 게이트 제거
- king@dbxcorp.co.kr 슈퍼관리자 자동 부여 (강등/삭제 불가)
- 신규 로그인 사용자는 JSON 저장소에 자동 등록 (기본 모듈 권한 0)
- 관리자 페이지(/admin): 역할/모듈별 토글로 직원 권한 수정
- 메인 대시보드를 ERP 시스템(monochromatic shadcn)으로 재설계
  · 모듈: CORM, Order, 개인경비(준비중), 휴가(준비중)
  · 권한 없는 모듈은 '권한 없음' 배지 + 클릭 불가
- DESIGN.md 토큰 기반 styles → app/static/erp.css
- docker-compose: dbx-main-data 볼륨 마운트 (DATA_DIR=/data)
  으로 권한 JSON 영구 보관

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 23:36:51 +09:00
king e8a85be36c feat: 주문리스트를 /orderlist/ 리버스 프록시 경로로 통합
- 메뉴 카드 새 탭 열기 + /orderlist/health/db 헬스 배지 (온라인/오프라인) 추가
- CUSTOMER_ORDER_LIST_URL 기본값을 /orderlist/ 로 (NPM 같은 도메인 하위 경로)
- orderlist 측 compose 정리 스크립트 추가 (ports 제거, npm_default 외부 네트워크 attach)
2026-05-24 05:04:29 +09:00
king 0c007e6432 fix: 로고 크기 페이지별 분리 (denied 284px, 나머지 100px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:26:37 +09:00
king b070fabb96 fix: 메인 헤더 로고 284x284 원본 크기로 표시
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:23:20 +09:00
king bad5d04d8b fix: 메인 헤더 텍스트로 변경/높이 축소, 로그인 로고 44px 복원
- main.html 헤더: 로고 제거 → "DBX 업무포털" 흰색 텍스트, 높이 64px→44px
- login/denied 브랜드 패널 로고: 44px 복원

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:18:38 +09:00
king 6c82415e02 fix: 메인 헤더 로고 크게(48px), 로그인/접근거부 로고 작게(30px)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:13:43 +09:00
king cd545d723e fix: 메인 헤더 원복 및 로그인 로고 크기 조정 (28px → 36px)
- main.html 헤더: SVG 아이콘+텍스트 방식으로 원복
- 로그인/접근거부 브랜드 패널 로고: 36px로 조정

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 01:09:07 +09:00
king f93eac9ce5 design: DBX 로고 이미지 적용 (로그인·접근거부·메인 헤더)
- dbx-logo.png를 app/static에 추가
- login.html / denied.html 브랜드 패널 SVG 아이콘 → 로고 이미지로 교체
- main.html 헤더 SVG 아이콘 → 로고 이미지로 교체
- styles.css에 .brand-logo-img / .header-logo-img 스타일 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 23:36:11 +09:00
king c4ae1ab3e6 UI: King 텍스트 움직임 범위 확장, 별 도형 제거, 도형 밝기 조정
- kingFloat 애니메이션 translate 범위를 ±16px → ±70px 로 확장
- login.html / denied.html 에서 shape-7(별) div 제거
- shape-1~6 도형 밝기 은은하게 감소 (이전 수준으로 복구)
- .shape-king text-transform: none → "King" 으로 표시

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 02:04:54 +09:00
king 672a99ef80 design: shape-8 삭제, 별 위치 우측 이동, King 반짝 텍스트 추가 2026-05-22 01:19:19 +09:00
king d2b145576b design: 브랜드 패널 도형 강화 — 세모·별 추가, 두께·밝기 증가, 모션 가속 2026-05-22 01:15:23 +09:00
king e1af7285a1 design: DBX Corporation 명칭 수정, 폰트 확대, 브랜드 패널 애니메이션 도형 추가
- 모든 페이지 'DBX Corp' → 'DBX Corporation' 통일
- 브랜드 패널 좌측에 천천히 움직이는 도형 5개 추가 (CSS 애니메이션)
- 전체 기본 폰트 15px → 16px, 제목/카드 크기 확대
- 'Google Workspace 계정...' 문장 한 줄 표시 처리
2026-05-22 01:05:47 +09:00
king 60a1426a23 design: 기업용 UI 리디자인 및 로컬 실행 스크립트 추가
- 로그인/접근거부 페이지: 좌우 분할 레이아웃(다크 네이비 브랜드 패널 + 흰색 폼),
  실제 Google G 컬러 버튼, 자물쇠·안내 아이콘 적용
- 메인 페이지: 다크 네이비 헤더, 웰컴 히어로 배너(오늘 날짜 JS 자동 표시),
  SVG 아이콘이 있는 업무 카드 그리드, 호버 시 상단 블루 액센트 라인
- styles.css: 코퍼레이트 네이비/블루 색상 토큰 체계로 전면 재작성,
  Pretendard 폰트 유지, 모바일 반응형 포함
- run-local.bat / run-local.ps1: 더블클릭 또는 인수(stop/logs/ps/restart)로
  로컬 Docker 컨테이너를 간편하게 관리하는 스크립트 추가

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-21 23:38:32 +09:00
king c93e2be0a7 feat: 초기 커밋 — Pretendard 폰트 적용 및 Docker 배포 구성
- Pretendard Regular/Bold/Thin 폰트를 app/static/fonts/ 에 추가하고
  @font-face 로 등록하여 전체 페이지에 적용
- Dockerfile(python:3.12-slim + uvicorn --proxy-headers) 작성
- docker-compose.yml: NPM 뒤 운영 서버용 (포트 80)
- docker-compose.local.yml: 로컬 테스트용 (포트 8080)
- .env.local.example: 로컬 OAuth 설정 가이드 포함
- .dockerignore: 이미지 빌드 컨텍스트 최소화
- .gitignore: .env / .env.local 제외 명시
- README: Docker 빌드·배포·업데이트 절차 문서화

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-21 22:43:41 +09:00