Commit Graph

774 Commits

Author SHA1 Message Date
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
김보곤
786bb20d86 feat: [finance] 계정별원장 API 서비스 보강 (카드거래 상세, 분리전표 필터링) 2026-03-20 08:35:07 +09:00
fc673be0c1 fix: [pricing] 단가 목록/상세에서 품목코드·품목명 미표시 수정
- Price 모델에 item() BelongsTo 관계 추가
- index/show에서 item:id,code,name,item_category eager load
2026-03-19 23:58:02 +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
6952ae9667 fix: [stat] 출하 집계 shipping_cost 컬럼 참조 오류 수정
- shipments.shipping_cost 컬럼이 3/18 배차 분리 시 삭제되었으나 집계 코드 미수정
- shipment_vehicle_dispatches.options->total_amount JOIN으로 변경
2026-03-19 21:09:49 +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
유병철
623298dd82 fix: [dashboard] 생산현황 shipments.shipping_cost 컬럼 미존재 에러 수정
- shipments 테이블에 shipping_cost 컬럼이 없어서 500 에러 발생
- 컬럼 추가 전까지 금액 0 고정, 건수만 집계
- TODO: shipping_cost 컬럼 추가 시 금액 집계 복원

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 19:33:25 +09:00
김보곤
d22850a9e3 fix: [finance] 계정별원장 홈택스 분개 UNION 제거 (일반전표만 조회) 2026-03-19 17:36:51 +09:00
김보곤
01c9d5fca0 feat: [loan] 대시보드 API에 경조사비 요약 데이터 추가
- condolence_expenses 테이블에서 경조사비 통계를 조회하여 dashboard 응답에 포함
- condolence_summary: total_count, total_amount, congratulation_amount, condolence_amount
- 대시보드 날짜 필터(start_date, end_date)를 event_date 기준으로 적용
2026-03-19 17:18:55 +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
유병철
5e5aecd992 feat: [material] 부적합보고서 morph map 등록
- NonconformingReport 모델 morph map에 'nonconforming_report' 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:28:25 +09:00
유병철
6681bf7e79 fix: [material] 부적합보고서 User 모델 경로 수정
- App\Models\Users\User → App\Models\Members\User

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:06:33 +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
김보곤
ea5591c812 fix: [finance] 손익계산서 기수 수정 (1기=2025년, 코드브릿지엑스 설립 기준) 2026-03-19 12:33:06 +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
김보곤
866c6f0b10 fix: [material] 부적합관리 Department 모델 경로 수정
- Departments\Department → Tenants\Department
2026-03-19 11:40:32 +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
d8a57f71c6 fix: [quality] 출하 상세에 order_id 추가 + 검사완료 건 수정 차단
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 23:15:57 +09:00
b3869cfadb fix: [production-order] 생산지시 상세 개선 - 수량을 개소수로 변경, BOM 공정그룹 한글 라벨 매핑
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 23:15:55 +09:00
f70ec4155e feat: [items] 품목 목록 API에 공정 배정 정보(assigned_processes) 응답 추가
- exclude_process_id 파라미터 시 품목 제외 대신 배정 공정 정보 포함하여 응답
- 프론트에서 다른 공정 배정 품목을 disabled 처리하도록 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 23:15:54 +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
김보곤
5e52293454 fix: [stock] work_orders에도 deleted_by 컬럼 없는 오류 수정 2026-03-18 22:24:23 +09:00
김보곤
6497a7ab8f fix: [stock] work_order_items에 deleted_by 컬럼 없는 오류 수정 2026-03-18 22:23:21 +09:00
김보곤
d8b8df6f47 fix: [stock] 재고생산 삭제 허용 (IN_PROGRESS + 작업지시 함께 정리)
- STOCK 타입: IN_PROGRESS 상태에서도 삭제 허용 (IN_PRODUCTION부터 불가)
- STOCK 타입: 작업지시(workOrders)가 있어도 삭제 허용
- cleanupStockWorkOrders(): 작업지시 soft delete + 재고예약 해제
- destroy(), bulkDestroy() 양쪽 적용
- 일반 수주(ORDER)는 기존 규칙 유지
2026-03-18 22:21:04 +09:00
유병철
8f8eae92f2 fix: [bending] 품목 resolveItem eager loading 컬럼 수정
- item 관계 로드 시 specification → attributes로 변경

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 21:13:24 +09:00
김보곤
dd2975ba8c fix: [common] ApiResponse 에러 신호 배열의 추가 필드 전달
- handle()에서 에러 감지 시 error/code/message/details 외 추가 필드도 전달
- error()에서 details 외 추가 필드를 error 객체에 포함
- BendingController의 expected_code 등이 API 응답에 노출됨
2026-03-18 20:56:14 +09:00
김보곤
673f521543 feat: [stock] 재고생산 저장 시 자동 확정+생산지시 생성
- 기존: 저장(DRAFT) → 확정(CONFIRMED) → 생산지시 생성 (3단계)
- 변경: 저장 즉시 확정 + 생산지시 자동 생성 (1단계)
- store()에서 STOCK 타입 감지 시 CONFIRMED 전환 + 재고 예약 + createProductionOrder 호출
2026-03-18 20:45: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
김보곤
b7c6e7f69d fix: [numbering] scopeKey 누적 할당 오류 수정
- scopeKey = value → scopeKey .= value 수정 (param, mapping 세그먼트)
- stock_production 문서유형 추가
2026-03-18 19:56:16 +09:00
김보곤
6af9162ce4 feat: [bending] 절곡품 품목 일괄 등록 + LOT 매핑 (222건 신규)
- BendingCodeService에 42(4200mm) 길이코드 복원
- 품목 일괄 등록 스크립트 추가 (scripts/register-bending-items.php)
- 신규 종류(RW/RF/SW/SF/TE/GH) + 신규 길이(06/17/20/45) 조합 등록
- bending_item_mappings 320건 매핑 동시 등록
2026-03-18 19:43:15 +09:00
김보곤
daf292f687 feat: [bending] LOT 채번 코드맵 최신화 (경동기업 2026-03 기준)
- 종류 코드 신규: W(본체L120), F(SUS마감재L120), H(화이바원단W80)
- 길이 코드 신규: 06(610), 17(1750), 20(2000), 45(4500)
- 명칭 변경: 본체디딤(S:M), SUS마감재(3)(S:S/U), 화이바원단(W50)(G:I)
- 가이드레일(R/S)에서 EGI 종류 코드 제거
- MATERIAL_MAP 신규 조합 추가
2026-03-18 19:31:30 +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
59469d4bf6 feat: [shipment] 출하 프로세스 개선 - 수주 품목 기반 변경, 취소→cancelled 상태, 역방향 프로세스, 제품명/오픈사이즈 추가
- 출하 품목을 수주 품목(order_item_id) 기반으로 변경
- 작업 취소 시 출하를 삭제 대신 cancelled 상태로 변경
- 작업 취소 시 역방향 프로세스 구현 (WorkOrderService)
- 출하 상세 API에 제품명(product_name) 매핑 추가
- 출하 상세 제품그룹에 오픈사이즈 추가
- shipment_items 테이블에 없는 item_id 컬럼 참조 제거

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:56:07 +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
김보곤
8f215b235b fix: [items] 레거시 임포트 커맨드 item_type FG → PT 수정
- BendingProductImportLegacy: 케이스(SB-), 하단마감재(BB-) → PT
- GuiderailImportLegacy: 가이드레일(GR-) → PT
- DB 60건 FG → PT 변경 완료 (구성부품이므로 완제품이 아님)
2026-03-18 13:48:45 +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
김보곤
72bb33e634 feat: [notification] 알림음 파일 서빙 + 응답에 soundUrls 추가
- public/sounds/에 default.wav, sam_voice.wav 배치 (MNG에서 복사)
- getGroupedSettings() 응답에 _soundUrls 맵 추가 (절대 URL)
2026-03-18 12:31:33 +09:00