CT-01: 페이지네이션
- 커스텀 Tailwind 페이저 뷰 (components/pager.php)
- 18개 admin 컨트롤러 findAll() → paginate(20) 전환
- Bag 컨트롤러 7개 리스트도 paginate 적용
- 19개 admin index 뷰에 페이저 링크 추가
CT-02: 엑셀 저장
- export_helper.php (UTF-8 BOM CSV)
- 발주/판매/지정판매소/재고 4개 엑셀 내보내기 라우트+메서드
- 해당 뷰에 "엑셀저장" 버튼 추가
CT-03: 인쇄
- print_header.php (지자체명/제목/결재란 컴포넌트)
- admin/bag 레이아웃에 @media print CSS 추가
- 23개 뷰에 인쇄 버튼 + print_header 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /bag/inventory/adjust: 재고 수량 조정 (실사 설정/증가/감소)
- 재고 관리 페이지에 "재고 조정" 버튼 추가
- 봉투 수불 관리에 입고/판매/불출 바로가기 버튼 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bag 컨트롤러에 create/store 메서드 추가 (불출/발주/입고/판매/주문)
- bag용 create 뷰 5개 생성 (form action을 /bag/*로 변경)
- 모든 등록/취소 버튼을 /admin/* → /bag/*로 변경
- 사이트 레이아웃이 CRUD 전체에서 유지됨
- playwright.production.config.js 추가 (도메인 테스트용)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 발주/입고/불출/판매 페이지에 등록/취소 버튼 추가
- 기본정보 페이지에 admin 관리 링크 추가
- 불출 뷰 컬럼명 수정 (bi2_type→bi2_issue_type, bi2_destination→bi2_dest_name)
- 발주 LOT번호 컬럼명 수정 (bo_lot_number→bo_lot_no)
- 중구청(lg_idx=1) 시드 데이터 삽입 (tester_local 계정 연동)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bag 컨트롤러 신규 (기본정보/발주입고/불출/재고/판매/판매현황/수불/통계/창/도움말)
- 사이트 공통 레이아웃 bag/layout/main.php 추출
- /bag/* 라우트 10개 등록 (Routes.php)
- bag-site.spec.js E2E 테스트 11개 추가
- Playwright timeout 30s→60s, waitForURL 15s→30s
- P4 지자체관리자 접근 테스트 3개로 분리
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SalesReport 컨트롤러 (판매대장, 일계표, 기간별판매, 수불현황)
- 판매대장: 일자별/기간별 모드 전환, 판매소별 품목 집계
- 일계표: 당일 판매 + 당월 누계 병렬 표시
- 기간별 판매현황: 품목별 판매/반품/합계 + 총합계
- 봉투 수불현황: 현재재고/입고/판매/불출 4섹션 그리드 레이아웃
- E2E 테스트 6개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- P2-19: LocalGovernment edit/update/delete 추가, 목록에 수정/비활성 버튼
- P2-20: PasswordChange 컨트롤러 + View (현재 비밀번호 검증 후 변경)
- P2-21: 로그인 5회 연속 실패 시 30분 lock
- member 테이블에 mb_login_fail_count, mb_locked_until 컬럼 추가
- Auth::login에 lock 체크/실패 카운트 증가/성공 시 리셋 로직
- E2E 테스트 4개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 4개 테이블 생성 (sales_agency, manager, company, free_recipient)
- 4개 Model + 4개 Controller + 12개 View
- 담당자: 소속(S)/직위(T) 코드 연동
- 업체: 협회/제작업체/회수업체 유형 분류
- 무료대상자: 무상지급구분(H)/동코드(D) 연동
- 모두 지자체별 멀티테넌시 적용
- 24개 라우트 추가
- E2E 테스트 9개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- packaging_unit, packaging_unit_history 테이블 생성
- PackagingUnitModel, PackagingUnitHistoryModel
- PackagingUnit 컨트롤러 (목록/등록/수정/삭제/이력)
- 박스당팩수 x 팩당낱장수 = 총낱장수 자동 계산
- 변경 시 자동 이력 기록
- E2E 테스트 3개 전체 통과
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- bag_price, bag_price_history 테이블 생성
- BagPriceModel, BagPriceHistoryModel
- BagPrice 컨트롤러 (목록/등록/수정/삭제/이력)
- 단가 변경 시 자동 이력 기록 (트랜잭션)
- 기간 필터 조회 (적용시작일/종료일)
- 봉투코드(O) 드롭다운 연동
- E2E 테스트 5개 전체 통과
- 스크린샷 2개 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CodeKindModel + CodeKind 컨트롤러 (목록/등록/수정/삭제)
- CodeDetailModel + CodeDetail 컨트롤러 (종류별 세부코드 CRUD)
- View: code_kind/(index,create,edit), code_detail/(index,create,edit)
- 라우트: /admin/code-kinds/*, /admin/code-details/*
- E2E 테스트 7개 전체 통과
- 스크린샷 2개 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>