Commit Graph

428 Commits

Author SHA1 Message Date
김보곤
c00cbb9106 feat: [stocks] 거래이력(사용현황) API 추가 (GET /stocks/{id}/transactions) 2026-03-22 11:48:39 +09:00
김보곤
f7decfb76e fix: [dev] stocks.item_type을 common_codes 단축코드(PT/RM/SM)로 통일 2026-03-22 10:55:42 +09:00
김보곤
d13e8ee5e6 fix: [dev] 강제입고 상태값 completed → inspection_completed로 변경 2026-03-22 10:31:41 +09:00
김보곤
973f26b81d fix: [dev] 입고 강제생성 시 RM 원자재 매칭 + PT 재공품 재고 동시 생성 2026-03-22 10:27:21 +09:00
김보곤
3696cbe165 feat: [dev] 입고 강제생성 API 추가 (POST /dev/force-receiving) 2026-03-22 10:17:54 +09:00
김보곤
a071997b42 feat: [ItemMaster] ItemPage 생성 시 동일 item_type 중복 방지 로직 추가
- ItemPageService::store()에서 동일 tenant_id + item_type + is_active 조합 중복 검증
- ItemPageStoreRequest에 Rule::unique 검증 추가 (tenant_id 범위 한정)
- 에러 메시지 키 추가: error.item_page_duplicate_item_type (ko/en)
2026-03-21 21:21:39 +09:00
28e41e6367 merge: develop + kkk 브랜치 병합 (code/lot_no 분리 + origin 신규 기능 통합) 2026-03-21 17:35:26 +09:00
25db0df38b fix: [절곡] bending_models lot_no 제거 — legacy_code로 이관
- bending_models에는 LOT 개념 없음, lot_no 컬럼 불필요
- lot_no 값 → legacy_code로 이관 후 컬럼 DROP
- BendingModel fillable에서 lot_no 제거
- GuiderailModelResource에서 lot_no 제거
- BendingModelImport: lot_no → legacy_code
- 마이그레이션 rollback 로직 수정
2026-03-21 15:39:09 +09:00
김보곤
1577d028dc feat: [공정관리] parent_id 트리 구조 도입 — 마이그레이션, 모델 관계, 2depth 검증 2026-03-21 15:23:54 +09:00
88d6547e69 refactor: [절곡] import 스크립트 + GuiderailModel code/lot_no 분리 적용
- BendingCleanReimport: code→앞2자리, lot_no→전체코드, 중복체크 lot_no 기준
- BendingImportMissing: 동일 적용
- BendingModelImport: code→접두사(GR/SB/BB), lot_no→전체코드
- MigrateBendingItemsToNewTable: 동일 적용
- GuiderailModelResource: lot_no 필드 추가
- BendingModel: fillable에 lot_no 추가
2026-03-21 15:11:51 +09:00
d6591acdff refactor: [절곡] code/lot_no 분리 — 코드 체계와 LOT 번호 분리
- bending_items.code: LOT번호(CP260319) → 코드체계(CP)만 저장
- bending_items.lot_no: 기존 code 값 이관 (LOT 번호)
- bending_models.code: 전체코드(GR-KSS01-벽면형-SUS) → 접두사(GR)만 저장
- bending_models.lot_no: 기존 code 값 이관
- unique 제약: code → lot_no로 이동
- BendingCodeService.resolveItem: LIKE → 정확 매칭
- 검색: lot_no 필드 추가
- Swagger 문서 업데이트
2026-03-21 15:06:55 +09:00
김보곤
cce4798643 fix: [files] presigned-url-by-path 화이트리스트 추가 (문서양식 섹션 이미지) 2026-03-21 13:28:26 +09:00
김보곤
a71dab791a feat: [bending] 기초자료 복사 API 추가 — 같은 분류의 다음 번호 자동 채번 2026-03-21 11:49:06 +09:00
김보곤
917b75d4b4 feat: [bending] 가이드레일/케이스 부품 조합에 기초자료 품목코드(item_code) 매핑 추가 2026-03-21 11:42:13 +09:00
김보곤
f583e947db feat: [bending] 품목코드 BD-XX-nn 자동 채번 + code 수정 불가 + prefixes API 2026-03-21 11:01:29 +09:00
김보곤
ccdc28c44e fix: [bending] 절곡품 API 화이트리스트 추가 및 presignedUrl 에러 핸들링
- bending-items, guiderail-models 등 MNG→API 호출 라우트 화이트리스트 등록
- BendingItemResource에서 S3 미설정 환경 presignedUrl 에러 try-catch 처리
2026-03-21 09:40:11 +09:00
김보곤
e402b03452 feat: [공정관리] 공정 복제 API 추가 2026-03-21 08:38:47 +09:00
김보곤
41177f8f6c fix: [주문/재고생산] item_id 검증 제거 및 options.reg_date validation 추가 2026-03-21 07:59:53 +09:00
김보곤
244a1f7a24 feat: [재고] 적정재고 관리 기능 추가 (max_stock + over 상태 + update API) 2026-03-21 07:59:53 +09:00
김보곤
5860262d87 feat: [입고/수입검사] 검사완료 상태 추가, 관리자 삭제 권한, 재고 연동 개선 2026-03-21 07:59:53 +09:00
d8ac3db239 Revert "feat: [auth] 자동산출 API Sanctum 인증 예외 추가"
This reverts commit 5df2c2afce8de1356c021545e2d3650a82bb74be.
2026-03-20 17:05:00 +09:00
31b3b49f48 feat: [auth] 자동산출 API Sanctum 인증 예외 추가
- quotes/calculate/* 경로를 API Key만으로 접근 허용
- MNG에서 API Key + X-TENANT-ID로 접근하는 자동산출용
2026-03-20 17:04:14 +09:00
김보곤
4f30de2d28 fix: [입고] order_qty validation을 required로 변경하여 SQL 에러 대신 명확한 안내 반환 2026-03-20 15:03:02 +09:00
1e7a84d516 feat: [file] path 기반 presigned URL 엔드포인트 추가
- POST /api/v1/files/presigned-url-by-path 추가
- file_id 없이 image_path만 있는 레거시 데이터 지원
2026-03-20 11:24:24 +09:00
700722d5d2 feat: [file] API Resource에서 image_url (presigned URL) 반환
- File 모델에 presignedUrl() 메서드 추가
- GuiderailModelResource: image_url + components[].image_url 반환
- BendingItemResource: image_url 반환
- 소비자(MNG, React)가 별도 처리 없이 R2 직접 로드 가능
2026-03-20 10:22:00 +09:00
9bdb81d8ff fix: presignedUrl에서 R2 exists() 체크 제거
- exists()가 매 요청마다 R2 HTTP HEAD 호출 → 개발서버에서 지연/500 발생
- temporaryUrl()은 로컬 서명 생성만 하므로 R2 접근 불필요
- 파일 미존재 시 브라우저가 R2에서 직접 404 수신

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 09:17:53 +09:00
844a0458ad feat: R2 presigned URL 엔드포인트 추가
- FileStorageController에 presignedUrl() 메서드 추가 (30분 유효)
- GET /api/v1/files/{id}/presigned-url 라우트 추가
- 파일 프록시 스트리밍 대신 R2 직접 접근 지원

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 08:50:39 +09:00
강영보
ce4a61e0ce fix: [auth] Swagger publicRoutes + File 모델 네임스페이스 수정
- publicRoutes에 api/documentation/* 추가 (Swagger UI 공개 접근)
- web.php /files/{id}/view: App\Models\File → App\Models\Commons\File
2026-03-20 08:49:51 +09:00
bb4d9d8fbd fix: [QA] 수주 날짜 필터 COALESCE + 배차 상태 자동 전환 + 견적 날짜 캐스트 수정
- OrderService: 날짜 필터를 COALESCE(received_at, created_at)로 NULL 안전 처리
- VehicleDispatchService: update() 시 freight_cost_type 유무로 status 자동 결정
- Quote 모델: date 캐스트를 date:Y-m-d로 변경 (UTC 직렬화 방지)
2026-03-19 23:57:56 +09:00
강영보
949efc27e2 fix: [auth] ApiKeyMiddleware allowWithoutAuth 화이트리스트 제거
- bending-items, guiderail-models, files/view, files/download, quotes/calculate 등
- MNG에서 Bearer 인증 포함하여 호출하도록 변경
- 불필요한 인증 예외 제거로 보안 강화
2026-03-19 21:59:59 +09:00
강영보
c29090a0b8 feat: [bending] 절곡품 전용 테이블 분리 API
- bending_items 전용 테이블 생성 (items.options → 정규 컬럼 승격)
- bending_models 전용 테이블 생성 (가이드레일/케이스/하단마감재 통합)
- bending_data JSON 통합 (별도 테이블 → bending_items.bending_data 컬럼)
- bending_item_mappings 테이블 DROP (bending_items.code에 흡수)
- BendingItemService/BendingCodeService → BendingItem 모델 전환
- GuiderailModelService component 이미지 자동 복사
- ItemsFileController bending_items/bending_models 폴백 지원
- Swagger 스키마 업데이트
2026-03-19 20:00:18 +09:00
김보곤
abb024f0bd feat: [finance] 경조사비 관리 API 구현
- Model: CondolenceExpense (BelongsToTenant, Auditable, SoftDeletes)
- Service: CRUD + summary 통계 (total_amount 자동 계산)
- Controller: 6개 엔드포인트 (목록/등록/상세/수정/삭제/통계)
- FormRequest: Store/Update 검증 규칙 분리
- Route: /api/v1/condolence-expenses
- Migration: updated_by, deleted_by 컬럼 추가
2026-03-19 16:02:19 +09:00
김보곤
c68cf5dfcf feat: [finance] 손익계산서 월별 조회 API + 리팩토링
- GET /api/v1/income-statement/monthly?year=2026&unit=won 추가
- buildSections 공통 로직 분리
- getAccountCodes, getFiscalYear 헬퍼 분리
2026-03-19 12:49:04 +09:00
김보곤
a07b15066d feat: [finance] 계정별원장·손익계산서 API 추가
- GET /api/v1/account-ledger: 계정별원장 조회 (이월잔액, 월별소계/누계)
- GET /api/v1/income-statement: 손익계산서 조회 (당기/전기 비교, 단위변환)
- KIS 표준 계정과목 sub_category 기반 자동 매핑
- 일반전표 + 홈택스 분개 UNION ALL 통합 집계
2026-03-19 11:43:24 +09:00
김보곤
a94cdf6eed fix: [item-master] 필드 수정 422 유효성 검증 오류 수정
- field_key regex를 숫자 시작도 허용하도록 변경 (기존 데이터 39건 호환)
- Handler.php 422 응답에 errors 최상위 필드 추가 (프론트엔드 호환)
2026-03-19 10:33:58 +09:00
김보곤
6e50fbd1fa feat: [material] 부적합관리 결재 연동 구현
- Migration: approval_id FK 추가
- Model: approval() BelongsTo 관계
- Service: submitForApproval() 결재상신 (결재문서+결재선 생성)
- ApprovalService: 승인→CLOSED, 반려/회수→approval_id 해제
- Controller: POST /{id}/submit-approval 엔드포인트
- Route: submit-approval 라우트 등록
2026-03-19 09:03:12 +09:00
김보곤
847c60b03d feat: [material] 부적합관리 API Phase 1-A 구현
- Migration: nonconforming_reports, nonconforming_report_items 테이블
- Model: NonconformingReport, NonconformingReportItem (관계, cast, scope)
- FormRequest: Store/Update 검증 (items 배열 포함)
- Service: CRUD + 채번(NC-YYYYMMDD-NNN) + 비용 자동 계산 + 상태 전이
- Controller: REST 7개 엔드포인트 (목록/통계/상세/등록/수정/삭제/상태변경)
- Route: /api/v1/material/nonconforming-reports
- i18n: 부적합관리 에러 메시지 (ko)
2026-03-19 08:39:24 +09:00
6563d977ee refactor: [shipment] 배차 정보를 shipment_vehicle_dispatches로 일원화
- shipments 테이블에서 배차 관련 컬럼 8개 삭제 (vehicle_no, driver_name 등)
- shipping 전환 시 배차 정보를 vehicle_dispatches에 저장
- delivery_method ENUM → VARCHAR 변경 (common_codes 기반)
- VehicleDispatchService에 수주/작성자 관계 로딩 추가
- Swagger delivery_method enum 제약 제거

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 23:15:47 +09:00
김보곤
66a75746f3 fix: [bending] 원자재 LOT 조회 재질 검색 개선
- status 필터 확장: completed → completed + inspection_completed
- 재질 키워드 분해 검색: "EGI 1.55T" → "EGI" AND "1.55" (공백/T 무관)
- 기존: LIKE "%EGI 1.55T%" → 매칭 실패 (실제 데이터: "EGI1.55")
2026-03-18 20:33:32 +09:00
김보곤
7ae5ba1264 feat: [bending] resolve-item 응답에 expected_code 추가
- 매핑 성공/실패 모두 expected_code(BD-XX-nn) 포함
- 매핑 실패 시 어떤 품목코드를 찾고 있는지 사용자가 확인 가능
2026-03-18 20:26:52 +09:00
김보곤
8dc21bdda8 fix: [bending] LOT 채번에서 일련번호 제거
- generateLotNumber() 시그니처 변경: lotBase → prod/spec/length/date
- 일련번호(-001) 로직 제거: 같은 날 같은 조합은 동일 LOT
- generate-lot API 응답에서 lot_base/date_code 필드 제거
- 미사용 Order 모델 import 제거
2026-03-18 20:14:24 +09:00
유병철
55f97f67d3 feat: [finance] 경비계정 동기화에 증빙번호(receipt_no) 지원 추가
- StoreManualJournalRequest/UpdateJournalRequest에 receipt_no 필드 추가
- GeneralJournalEntryService: store/update 시 receipt_no 전달
- JournalSyncService: saveForSource에 receiptNo 파라미터 추가
- SyncsExpenseAccounts: 증빙번호 결정 우선순위 (명시 전달 > 바로빌 승인번호 > null)
- SOURCE_BAROBILL_CARD를 카드결제 payment_method에 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 20:07:17 +09:00
김보곤
15609a1e5e fix: [document] rendered_html 크기 제한 추가 (500KB)
- 수입검사 저장 시 rendered_html이 Nginx 제한 초과하여 413 발생하던 문제
- max:512000 검증 추가로 413 대신 422(명확한 에러메시지) 반환
2026-03-18 17:28:55 +09:00
김보곤
f1c6653220 feat: [bom] BOM 트리 API 3단계 구조 반환 (category 그룹 노드)
- GET /items/{id}/bom/tree: category 필드가 있으면 CAT 그룹 노드 자동 생성
- expandBomItems에 category 필드 포함
- 3단계: FG → 카테고리(CAT) → PT 품목
2026-03-18 16:49:20 +09:00
김보곤
e2ecbaf8a5 fix: [middleware] 자동산출 API에 Bearer 없이 API Key + X-TENANT-ID 접근 허용
- quotes/calculate/* 를 allowWithoutAuth 화이트리스트에 추가
- X-TENANT-ID 헤더로 tenant 컨텍스트 설정 (Bearer 토큰 없어도 동작)
- MNG 품목관리 수식 산출에서 HTTP 401 오류 해결
2026-03-18 15:54:19 +09:00
decfe57b50 fix: [order] 수주 관리 개선 - stats 상태 추가, 수정 시 item_name 유효성 에러 수정
- stats에 IN_PRODUCTION/PRODUCED 상태 추가
- 수주 수정 시 item_name 유효성 에러 수정 (V1#29)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 15:06:14 +09:00
김보곤
abf5b6896e fix: [subscription] 내보내기 stuck 문제 해결 - 동기 처리로 전환
- pending 상태로 영원히 남던 DataExport 문제 수정
- 미구현 비동기 Job 대신 ExportService::store() 동기 처리
- 5분 이상 stuck된 export 자동 만료 처리
- 파일 다운로드 엔드포인트 추가 (GET /export/{id}/download)
2026-03-18 14:10:43 +09:00
김보곤
529c48f65e fix: [items] 품목 검색 API per_page/itemType 파라미터 호환성 추가
- size 외에 per_page 파라미터도 읽도록 수정 (React에서 per_page로 전송)
- itemType(camelCase) 파라미터도 item_type으로 매핑
2026-03-18 13:08:27 +09:00
김보곤
97c9cff4c7 fix: [internal] MNG 내부 토큰 교환 테넌트 검증 수정
- InternalTokenService: 테넌트 소속 검사 제거 (HMAC으로 이미 신뢰)
- ApiKeyMiddleware: mng_session 토큰 시 X-TENANT-ID 헤더 우선 적용
- MNG 관리자가 모든 테넌트의 BOM 산출 가능하도록 개선
2026-03-18 13:07:54 +09:00
김보곤
540255ec27 feat: [notification] 알림설정 soundType API 연동
- getGroupedSettings()에서 soundType 반환 (settings.sound_type)
- updateGroupedSettings()에서 soundType 저장 (settings JSON)
- UpdateGroupedSettingRequest에 soundType 검증 추가 (default/sam_voice/mute)
2026-03-18 11:25:19 +09:00