Commit Graph

354 Commits

Author SHA1 Message Date
king 1a2291f510 refactor(cupang): 입고센터 관리 화면 제거
- /cupang/centers GET/POST, 수정·삭제 라우트와 centers.html 삭제
- 달력 상단 "입고센터 관리" 버튼 제거, 상자 계산의 안내 문구 정리
- 센터 관리 화면 전용 CSS 제거(공용 .cpg-icon-btn/.cpg-btn-sm 은 유지)
- 센터 데이터(cupang_centers)와 db 계층은 그대로 — 출고 확정·발주 업로드에서 계속 사용

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 20:34:41 +09:00
king 46ce6d78b8 style(cupang): 상자 목록 머리글 굵게·가운데 정렬, 열 너비 확대
머리글 글자가 잘리지 않도록 상자번호 82px / 제품코드 100px / 수량 62px

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 20:26:06 +09:00
king cd8a594e05 style(cupang): 상자 목록 엑셀 버튼 글자 흰색 고정, 오버 시 굵게
.erp-body a { color: inherit } 에 밀려 글자가 검게 나오던 문제 — a+클래스 선택자로 흰색 지정

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 20:24:48 +09:00
king 9f0a3f7f73 style(cupang): 상자 목록 엑셀 버튼 초록, 머리글 안 줄임, 행 클릭 체크 토글
- 엑셀 다운로드 버튼 배경 #217346
- 표 머리글은 말줄임 없이 전체 표시(상자번호 열 74px)
- 행 클릭 시 상자 단위로 체크 색 토글 + 체크 개수 표시(세는 용도)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 20:11:43 +09:00
king 3926b6a431 feat(cupang): 상자 목록을 번호·제품명·제품코드·수량 표로, 엑셀 다운로드 추가
- ② 상자 목록: 카드 대신 표. 한 상자에 여러 제품이면 상자번호 칸 rowspan 병합
- GET /cupang/{id}/boxes.xlsx — 같은 표를 xlsx 로 (export.build_box_list_workbook)
- box_list 항목에 product_code 포함

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 19:55:06 +09:00
king 15947e73ed feat(cupang): 달력 월 표기 확대, 출고 보기 ②를 상자 번호별 내용물 목록으로
- 달력 월 이름/연도 글자 크기 2배·굵게
- 출고 상세 ② 상자 요약 → ② 상자 목록: 전체 상자에 1번부터 번호를 붙이고
  상자마다 담긴 제품·수량을 표시. box_plan 스냅샷 우선, 없으면 계산 결과로 대체

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 19:49:42 +09:00
king e49abc4b8c fix(cupang): 3열에서 ③ 카드 자체를 스크롤러로
카드 높이는 grid 행(1fr)으로 화면에 맞춰져 있으므로 카드에 overflow-y:auto
를 걸면 안쪽 구조와 무관하게 스크롤된다. 목록은 자연 높이로 두고 헤더는
sticky. JS 높이 계산 대상에서 ③ 제외(①② 만 유지).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:50:06 +09:00
king 2608fd7f23 fix(cupang): 좁은 화면에서는 카드가 늘고 페이지가 스크롤되게 분기
진단 결과 1열로 접힌 상태에서 .cpg-calc3 가 704px 를 세 카드가 나눠
가져(224px씩) 내용이 잘렸고, JS 가 준 높이(561px)는 카드보다 커서
무용지물이었다.

- 1501px 이상: 카드 안쪽만 스크롤. 높이는 "카드 아래끝 − 영역 top" 으로 계산
- 1500px 이하: 카드/영역 높이 제한 해제, .cpg 를 flex:0 0 auto 로 두어
  내용만큼 늘고 페이지(.erp-page)가 스크롤

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:46:40 +09:00
king 71194de2eb fix(cupang): 스크롤 영역 높이를 rAF 후 JS 로 지정 + 진단 로그
CSS flex 체인만으로 잡히지 않는 환경 대비. render() 이후 다음 프레임에
각 영역의 화면 위치를 재서 max-height 를 !important 로 지정한다.
window.CPG_DEBUG = true 후 window.cpgFit() 으로 계산값 확인 가능.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:41:36 +09:00
king ca87c254c0 fix(cupang): 3열 프레임 높이를 그리드 행(1fr)로 고정 — ③ 목록만 스크롤
원인: .cpg-calc3 의 행 높이가 auto 라 카드가 화면 아래로 넘치도록 늘어났고,
페이지 스크롤도 없어서 아래쪽(마지막 상자, [+ 새 혼합 상자])이 잘렸다.

- grid-template-rows: minmax(0,1fr) 로 행을 컨테이너 높이에 고정
- 카드 overflow:hidden, ①표/②목록/③센터목록만 내부 스크롤
- 그동안 덧댄 !important 패치와 JS 높이 강제 지정 제거(충돌 정리)
- 2열/1열로 접히면 행이 여러 개라 카드 max-height(76vh)로 처리

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:38:51 +09:00
king f1c16e8282 fix(cupang): ③ 만 내부 스크롤, 페이지 전체 스크롤은 없앰
앞선 커밋의 .cpg-page-grow(페이지가 늘어나는 방식)를 되돌리고,
③ 카드는 overflow:hidden + 목록만 스크롤로 복구.
JS 높이 계산 대상에 ③ 목록을 다시 포함(창높이-요소top, 260 이하면 60vh).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:36:16 +09:00
king 99c0581d9a fix(cupang): 상자 계산 화면이 내용만큼 늘고 페이지가 스크롤되게
.cpg 가 flex:1 1 auto + min-height:0 이라 남은 높이에 맞춰 눌리기만 해서
③ 이 늘어나도 페이지 높이가 그대로였다(=스크롤 안 됨).
이 화면에만 .cpg-page-grow 를 붙여 flex:0 0 auto 로 두고,
페이지 스크롤 시 ①② 내부 스크롤 높이를 다시 계산한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:33:09 +09:00
king 1047175346 fix(cupang): ③ 센터 분배는 내용만큼 늘어나게 (클리핑 제거)
혼합 상자를 추가하면 칸이 아래로 늘어나야 하는데 카드/목록에 걸어둔
max-height + overflow:hidden 이 잘라내고 있었다. ③ 은 높이 제한과
클리핑을 없애고 넘치면 페이지가 스크롤되게 한다.
①(입력 표) ②(요약 목록) 의 내부 스크롤은 그대로 유지.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:29:37 +09:00
king 5339ee4538 fix(cupang): 접힌 레이아웃에서 스크롤 영역 높이가 160px 로 잘리던 문제
3열이 접혀 ③ 카드가 둘째 줄로 내려가면 (창높이 − 요소top) 이 음수가 되어
최소값 160px 로 고정됐다. 260px 이하면 창 높이의 60% 를 쓰도록 바꾸고,
페이지 스크롤 시에도 높이를 다시 계산한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:20:44 +09:00
king 9706fd70c7 fix(cupang): 스크롤 높이를 id 선택자 + !important 로 확정
CSS 우선순위나 flex 높이 계산에 밀리지 않도록
#cpg-dist-list / 표 / 요약 목록에 !important 최대 높이를 주고,
JS 도 setProperty(..., "important") 로 지정한다(data-fit 로 확인 가능).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:12:53 +09:00
king c3d2141474 fix(cupang): 스크롤 영역 높이를 JS 로 직접 계산
CSS flex/grid 만으로는 브라우저에 따라 높이가 잡히지 않아 카드가 계속
늘어났다. render()/resize 시 각 영역의 화면 위치를 재서
max-height 를 픽셀로 지정한다(① 표 / ② 요약 목록 / ③ 센터 목록).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 17:10:55 +09:00
king 6962b79f28 fix(cupang): 3열 카드 자체도 스크롤되도록 이중 안전장치
카드에 max-height(82vh)를 주고 ③ 카드는 overflow-y:auto 로 바꿔,
안쪽 목록 스크롤이 동작하지 않는 상황에서도 카드가 스크롤되게 한다.
스크롤바는 gutter 고정 + webkit 스크롤바 폭 지정으로 보이게.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 16:51:52 +09:00
king da6ae2cd13 fix(cupang): 혼합 상자 이동은 용량 제한 없이, ③ 목록 max-height 로 스크롤 보장
- mixPut/moveUnits 에서 용량 제한 제거. 이동 목록도 "가득"이어도 선택 가능
  (채움률이 100% 를 넘으면 빨간색으로 표시만)
- 부모 flex 높이 계산에 기대던 스크롤을 max-height 로 직접 지정
  (③ 72vh, ① 표 64vh, ② 목록 64vh)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 16:42:51 +09:00
king 58ebf1c232 change(cupang): 미배치 자투리 제거 — 상자 간 직접 이동만, ③ 스크롤 보정
- "미배치로 빼기" 옵션과 미배치 풀 UI/상태 삭제
- [−] 는 자리가 있는 다른 상자로 1개 이동(없으면 새 상자 자동 생성),
  [+] 는 같은 제품이 있는 다른 상자에서 1개 가져오기 → 총량 항상 보존
- 혼합 상자 ✕ 는 내용물을 다른 상자로 옮긴 뒤 상자를 없앤다
- 3열이 2열/1열로 접히는 폭에서 카드 max-height 를 줘서 ③ 목록이
  카드 안에서 스크롤되도록 수정(편집으로 줄이 늘어나도 페이지가 안 밀림)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 16:33:32 +09:00
king f3a681ccfe feat(cupang): 혼합 상자 내용물 편집 (수량 스테퍼 + 이동 + 미배치 풀)
- ③ 센터 분배의 혼합 상자 트리에서 항목마다 [−] n [+] 와 이동 드롭다운
  (다른 혼합 상자 / 새 상자 / 미배치로 빼기). 용량(부피 합)을 넘지 않게 제한
- 센터마다 "미배치 자투리" 풀 + [자동 담기], [+ 새 혼합 상자] 버튼
- 혼합 상자 ✕ 는 내용물을 미배치로 옮기고 상자를 없앤다
- 상자가 비면 자동 제거, 채움률은 헤더에 실시간 표시
- 확정 조건에 "미배치 자투리 0" 추가
- 혼합 상자 키를 위치 index → 상자별 고유 id 로 바꿔 추가/삭제에도 배분 유지
- 미배치 풀은 출고일 탭 전환 시에도 함께 보관

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 16:26:58 +09:00
king ba3b3a5ad8 feat(cupang): 출고 삭제 시 구글 시트도 동기화
- GoogleSheetsWriter.delete_sheet 추가 (없으면 no-op, 마지막 남은 시트면
  삭제 대신 내용만 비움 — 구글이 마지막 시트 삭제를 거부)
- 건별 삭제(soft/hard)와 날짜 전체 삭제 후 해당 출고일 시트를 동기화:
  남은 출고가 있으면 다시 기록, 없으면 시트 삭제
- 시트 설정 조회를 _sheet_target 으로 공통화, 결과는 로그로 남김
- 건별 삭제 후 기본 이동 경로를 그 출고일 달력으로

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 16:17:32 +09:00
king 4a260cb161 change(cupang): 화면 문구 "박스" → "상자" 통일
템플릿·라우터 메시지·페이지 제목과 seed/DDL 기본값(쿠팡박스→쿠팡상자)까지
표기를 맞췄다. URL(/box-calc)과 코드 식별자(box_name 등)는 그대로.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 16:00:09 +09:00
king 1c1ca69feb feat(cupang): 출고 박스 구성(box_plan) 저장 + 달력 상세를 센터 분배 형식으로
- 마이그레이션 005: cupang_shipments.box_plan JSONB (확정 당시 박스 구성)
  확정 payload 에서 제품별/혼합 상자와 내용물·상자 종류를 받아 저장
- 달력 오른쪽 목록을 ③ 센터 분배 카드 형식으로 변경 — 혼합 상자는
  내용물 트리까지 표시. box_plan 이 없는 예전 출고는 기존 합계 표시로 폴백
- 출고 보기(view.html) ③ 목록도 동일하게 box_plan 기준

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:58:29 +09:00
king 8c8f6aebb2 change(cupang): 출고 상세를 읽기 전용 3열 보기로 교체, 수정 기능 제거
- detail.html / form.html 삭제, GET·POST /{id}/edit 라우트와
  _form_context / _parse_lines 헬퍼 제거
- GET /{id} → view.html: ① 품목 / ② 박스 요약(서버 재계산) / ③ 센터
  (박스 계산 화면과 같은 3열 구성, 편집 불가)
- 박스 계산 로직을 _compute_boxes 로 분리해 API 와 보기 화면이 공유

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:48:05 +09:00
king da90d1eec8 style(cupang): 직접 입력 수량칸 70px 고정
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:39:52 +09:00
king 58d33aa926 change(cupang): 출고 칸 표기 "쿠팡상자, 41개" + K열 120px
상자 종류가 여럿이면 " / " 로 구분한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:37:37 +09:00
king 21018a5332 fix(cupang): 열 너비를 픽셀 기준으로 (A=10, C·D·E=106)
구글 시트 요청에 pixelSize 를 8배로 넣어 A열이 80px 로 벌어져 있었다.
WIDTHS_PX 를 픽셀 그대로 쓰고, xlsx 는 px/7 로 환산한다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:31:03 +09:00
king b3090ced4f change(cupang): 확정 시 엑셀 자동 다운로드 제거
출고리스트는 구글 시트에 기록한다. 엑셀이 필요하면
GET /cupang/export.xlsx?date=YYYY-MM-DD 로 따로 받는다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:25:24 +09:00
king ebf1710982 feat(cupang): 출고리스트 서식 보강 (요일·머리글색·파렛트 강조)
- 시트명 20260903(목) 형식, 작성일/출고일/센터입고일에 요일 표기
- 머리글 행 배경 #DBE9F7 + 굵게
- 출고방식이 파렛트인 센터 블록 행 배경 #FAE2D5
- A열 너비 10
xlsx·구글시트 양쪽에 동일 적용(google_sheets.write_table 에
header_bg / row_highlights 인자 추가).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:24:55 +09:00
king 042d5f8574 fix(cupang): 시트 기록 결과를 로그·화면에 항상 표시
미설정/건너뜀도 사유를 보여준다(이전엔 조용히 넘어가 원인 파악이 어려웠음).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 15:05:36 +09:00
king 63cfdc87ec feat(sheets): 사용자 OAuth 리프레시 토큰 인증 지원
조직 정책(iam.disableServiceAccountKeyCreation)으로 서비스 계정 키를 만들 수
없는 환경 대응. 서비스 계정이 설정돼 있으면 그쪽을 먼저 쓰고, 없으면
GOOGLE_SHEETS_OAUTH_REFRESH_TOKEN + client id/secret 으로 인증한다.
(client id/secret 미지정 시 로그인용 GOOGLE_CLIENT_ID/SECRET 재사용)

scripts/google_sheets_authorize.py: 데스크톱 앱 OAuth 클라이언트로
1회 동의해 refresh token 을 발급받는 스크립트.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 14:45:21 +09:00
king db19a2fcbf feat(cupang): 확정 시 Google 스프레드시트에 출고일 시트 기록
- app/modules/cupang/export.py: 출고리스트 양식(셀/병합)을 한 곳에서 생성 →
  xlsx 다운로드와 구글 시트 기록이 같은 표를 쓴다
- app/integrations/google_sheets.py: 서비스 계정 기반 시트 쓰기 공통 계층
  (없거나 미설정이면 enabled=False 로 조용히 skip, 키는 로그에 남기지 않음)
- 확정 응답에 sheet 결과 포함, 화면에 성공/실패 메시지 표시
- env: CUPANG_SHEET_ID, GOOGLE_SHEETS_CREDENTIALS(_JSON) 추가
- requirements: google-api-python-client, google-auth

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 14:26:24 +09:00
king afa144fc02 feat(cupang): 확정 시 출고리스트 엑셀 생성, 센터 선택 드롭다운 제거
- ③ "센터를 고르면 바로 추가" 드롭다운 삭제(업로드가 센터를 자동 구성)
- 확정 payload 에 상자 종류별 박스 수(box_summary, 예: 쿠팡상자41) 추가 →
  출고 묶음의 outbound_summary 로 저장
- 센터입고일 = 출고일 + 1일로 저장(쿠팡 발주서 입고예정일과 일치)
- GET /cupang/export.xlsx?date=YYYY-MM-DD — 쿠팡로켓 밀크런 출고리스트 양식
  (제목/회사명/머리글 + 센터 단위 병합, 시트명 YYYYMMDD). 확정 직후 자동 다운로드

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 14:21:44 +09:00
king 275e51c93b feat(cupang): 발주 업로드 UX 개선 + 3열 프레임 각각 스크롤
- [쿠팡 발주파일 업로드] 라벨 버튼, 파일 선택 즉시 자동 분석(분석 버튼 제거)
- 안내 문구와 분석 결과 상세 표시 제거 — 경고만 남김
- ①②③ 카드가 각자 스크롤: 문서 전체는 스크롤되지 않음
  · ① 표 머리글 sticky, 행 높이 축소로 품목 더 많이 표시
  · ② KPI 요약까지 고정, 아래 목록만 스크롤
  · ③ 헤더/센터 선택 고정, 센터 목록만 스크롤

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 14:08:13 +09:00
king 5542748539 feat(cupang): 자투리 혼합 박스 상자 종류 선택
박스 요약 카드에서 쿠팡상자 / 3호상자 / 6호상자 중 하나를 고른다.
고른 종류는 카드 제목·박스 그림·③ 센터 분배 라벨에 반영되고,
출고일 탭 전환과 임시 저장/불러오기에도 함께 보관된다.
드롭다운 조작 시에는 드래그·담기 대화상자가 열리지 않게 예외 처리.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 13:56:10 +09:00
king 5217c4b6bb feat(cupang): 발주 업로드 결과를 출고일별로 분리
- 업로드 API가 (출고일, 센터, 제품)으로 합산해 groups[] 로 반환
- 화면 상단에 출고일 탭 — 날짜마다 ①직접입력 / ②박스요약 / ③센터분배 상태를
  따로 보관하고 탭으로 전환 (박스 계산은 날짜 × 센터 단위로 실행)
- 확정은 현재 날짜만 대상. 남은 날짜가 있으면 달력으로 나가지 않고 다음 탭으로 이동
- 업로드 결과 카드에 출고일별 센터 수·수량 요약 추가

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 13:49:21 +09:00
king a6d7de709d feat(cupang): 쿠팡 발주 엑셀 업로드 → 센터별 박스 자동 계산
- ① 카드를 "쿠팡 발주 업로드"로 개편, xlsx 다중 선택 업로드
- POST /cupang/api/box-calc/upload (openpyxl): F13 입고예정일 −1일 = 출고일,
  22행부터 B=쿠팡상품코드 / F=센터명 / G=수량을 읽어 파일들을 합산
- 쿠팡상품코드 → cupang_products.coupang_item_code 로 제품 매칭,
  센터명 → cupang_centers.name 매칭. 미매칭 코드/센터/박스규칙은 경고로 표시
- 박스는 센터 단위로 포장되므로 센터마다 박스 계산을 돌려 ② 요약에 합치고
  ③ 센터에 자동 배분(자투리 혼합 박스는 소속 센터를 라벨에 표시)
- 확정 대화상자 기본 출고일도 업로드한 발주서 날짜로 채움

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 13:23:33 +09:00
king eef18f7eb9 style(cupang): 달력 셀 테두리 복원, 요일/일자 글자 확대
- 요일 행 높이 고정(34px) — grid-template-rows: auto 로 주 행만 균등 분할
- 요일 11→22px, 일자 13→20px, 둘 다 bold
- 날짜 셀 1px 테두리 + hover 강조, 타월은 회색 배경으로 구분
- 오늘 원 24→32px, 출고 태그 12px

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:24:38 +09:00
king 1cf6ba385d feat(cupang): 달력을 2개월(현재+다음 달) 뷰로 개편
- index 라우터가 두 달치 출고를 합쳐(중복 id 제거) 달 별 격자 2개를 생성
- 상단 바: ‹ › 이동 + 기간 제목 + [오늘], 달마다 머리글/월 출고 합계 배지
- 셀 UI 정리: 오늘=검은 원, 선택=링, 출고일=건수/센터수 태그, 타월은 흐리게
- 범례 추가, 1200px 이하에서는 두 달을 세로로 배치

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:20:41 +09:00
king 0db54b6300 style(cupang): 등록 제품 카드 680px, 가로 스크롤 제거
셀 box-sizing: border-box 로 지정 폭에 padding 포함(기존엔 열마다 20px 씩
초과해 표가 카드보다 넓어짐). 카드 폭 600→680, 줄바꿈 브레이크포인트 1240px,
erp-table-wrap overflow-x: hidden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:13:24 +09:00
king d03bb15b6b style(cupang): 등록 제품 표 나머지 열 폭 조정
제품코드 96 / 쿠팡상품코드 112 / 상태 72 / 동작 104 (합계 544px).
머리글과 값이 잘리지 않게 잡고, 코드 열은 12px mono 로 축소.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:11:20 +09:00
king dcc059815e style(cupang): 등록 제품 표 제품명 열 160px 고정
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:09:25 +09:00
king 163c6c2f00 style(cupang): 등록 제품 표 한 줄 고정 (긴 이름/코드는 … 처리)
table-layout: fixed + 열 폭 지정, 셀 nowrap/ellipsis, 동작 버튼 한 줄.
잘린 값은 title 툴팁으로 전체 확인.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:07:15 +09:00
king 418166d810 style(cupang): 선택 등록 팝업 입력란 400px, 가로 스크롤 제거
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:04:11 +09:00
king 7174edd702 feat(cupang): 등록된 제품 수정 팝업
- 동작 열에 [수정] 버튼 → 제품명/제품코드/쿠팡상품코드 수정 팝업
- POST /cupang/api/products/{id}/edit (JSON), 제품코드 중복은 400
- 제품코드 변경 시 cupang_box_rules 의 product_code/스냅샷도 함께 이동
  (같은 코드 규칙이 이미 있으면 이동하지 않음). 출고 라인은 과거 기록이라 유지

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:00:33 +09:00
king bf3407b6ec feat(cupang): 제품 카탈로그에 쿠팡상품코드 + 상태 토글
- cupang_products.coupang_item_code 컬럼 추가 (마이그레이션 004, init.sql 동기화)
- 설정 화면: 쿠팡상품코드 열 표시/정렬, 수기 추가 폼 입력란 추가
- 선택 등록 시 바로 등록하지 않고 쿠팡상품코드 입력 팝업을 먼저 표시
- 상태 배지를 클릭 토글로 변경 (POST /cupang/api/products/{id}/toggle)
- 빈 쿠팡상품코드는 "미입력"으로 처리해 기존 값을 덮어쓰지 않음

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 11:30:00 +09:00
king 3a18b185a9 style(cupang): 박스 계산 상단 액션 정리
임시 저장·불러오기를 ① 카드 안 버튼 줄에서 상단 액션줄로 올린다. 계산 흐름과
무관한 동작이라 계산/추가/초기화와 섞여 있으면 눈에 안 들어왔다. 규칙이 없어
계산 화면이 뜨지 않는 경우엔 두 버튼도 숨긴다.

설정으로 넘어가는 [박스 입수량 설정]·[입고센터 관리] 링크는 달력 화면에
있으므로 여기서는 뺀다.
2026-08-31 17:52:37 +09:00
king 1dc4cfc097 feat(cupang): 달력 상세에서 출고 삭제 (건별 / 날짜 전체)
분배 확정으로 만든 출고를 지우려면 상세 페이지까지 들어가야 했다. 달력에서
날짜를 고른 뒤 오른쪽 카드에서 바로 지울 수 있게 한다. 센터가 여러 건일 때를
위해 목록 헤더에 "이 날짜 전체 삭제" 도 둔다. 둘 다 가운데 확인 팝업을 거친다.

삭제는 기존 정책대로 status='취소' soft delete 이고, 대신 달력·목록에서
취소 건을 걸러내 사용자에게는 삭제로 보이게 했다(기록은 DB 에 남는다).

- router: /{id}/delete 에 next 폼값(내부 경로만 허용) 추가, POST /cupang/day-delete 신설
- index.html: 카드 헤더에 삭제 버튼, 앵커 안에 버튼이 들어가지 않게 구조 정리
2026-08-31 17:13:10 +09:00
king 7a01c140b0 feat(cupang): 출고 등록 경로를 박스 계산으로 일원화, 달력 표시 정리
출고 묶음을 만드는 길이 둘(신규 등록 폼 / 박스 계산 분배 확정)이라 헷갈렸다.
폼 경로를 없애고 [+ 신규 등록] 이 박스 계산을 열게 한다. 중복이던 오른쪽
[박스 계산] 버튼은 제거. /cupang/new 는 북마크가 깨지지 않게 박스 계산으로
리다이렉트하고 POST /new(생성)는 삭제했다. 기존 묶음 수정은 그대로 동작한다.

달력 칸은 작성/출고/입고 세 배지를 늘어놓아 읽기 어려웠다. 출고 기준으로
"출고 N건 · 센터 M곳"만 남긴다. 오른쪽 상세도 같은 기준(출고일)으로 맞추고
센터별 출고방식·총 박스/개수와 상품별 수량·박스를 카드 안에 펼친다. 품목이
바로 보이므로 hover 툴팁은 제거.

임시 저장 기본 제목은 "2026.08.31(월) 오후 04시 50분" 형식으로.
2026-08-31 16:58:39 +09:00
king 7f879d279a fix(cupang): 출고방식 드롭다운 목록을 흰 바탕·검은 글씨로
닫힌 버튼의 배경색(빨강/반투명 흰색)이 펼친 option 까지 번져 읽기 어려웠다.
option 에 흰 배경과 검은 글씨를 직접 지정한다.
2026-08-31 16:42:42 +09:00