Commit Graph

1055 Commits

Author SHA1 Message Date
김보곤
877d15420a test: [work-order] 작업지시 API 테스트 16개 추가
- CRUD 테스트 5개 (생성/상세/수정/삭제/404)
- 상태전이 테스트 4개 (미배정→대기→준비→진행→완료)
- 담당자 배정 테스트 1개
- 공정단계/자재 조회 테스트 3개
- 목록/통계/인증 테스트 3개
2026-03-14 14:42:22 +09:00
김보곤
63b174811c test: [approval] 결재 API 워크플로우 테스트 15개 추가
- CRUD 테스트 5개 (생성/목록/상세/수정/삭제)
- 워크플로우 테스트 4개 (상신/승인/반려/회수)
- 결재함/참조함/완료함 목록 조회 4개
- 뱃지 건수, 인증 테스트 2개
- 결재자 별도 사용자 로그인 검증 (loginAs 헬퍼)
2026-03-14 14:42:22 +09:00
김보곤
95bae11042 test: [stock] 재고 API 및 FIFO 로직 테스트 13개 추가
- Stock API 엔드포인트 테스트 5개 (목록/통계/유형별통계/상세/인증)
- FIFO 핵심 로직 테스트 4개 (입고/차감/LOT걸침/재고부족)
- 예약/해제 테스트 2개 (수주확정→예약, 수주취소→해제)
- 거래이력 기록 테스트 1개
- 재고 상태 자동 계산 테스트 1개 (normal/low/out)
- Factory 2개 추가: StockFactory, StockLotFactory
2026-03-14 14:42:22 +09:00
김보곤
adc07b7343 feat: [sales] sales_product_categories에 최저 개발비/구독료 컬럼 추가
- min_development_fee: 최저 개발비 (이 금액 이하 설정 불가)
- min_subscription_fee: 최저 구독료 (이 금액 이하 설정 불가)
2026-03-14 14:42:22 +09:00
김보곤
c942788119 test: [orders] 테스트 인프라 정비 및 수주 API 테스트 추가
- TestCase 공통화: setUpAuthenticatedUser(), api(), assertApiSuccess(), assertApiPaginated()
- 기존 10개 테스트 파일의 중복 setUp 코드 → TestCase 상속으로 전환
- Factory 3개 추가: TenantFactory, ClientFactory, OrderFactory
- OrderApiTest 12개 테스트 신규 작성 (목록/생성/조회/수정/삭제/상태변경/인증)
- 발견: 빈 데이터로 수주 생성 가능 (FormRequest 검증 강화 필요)
2026-03-14 14:42:22 +09:00
김보곤
2e284f6393 feat: [demo] Phase 4 고도화 — 분석 API, 비활성 알림, 통계 시딩
- DemoAnalyticsService: 전환율 퍼널, 파트너 성과, 활동 현황, 대시보드 요약
- DemoAnalyticsController: 분석 API 4개 엔드포인트
- CheckDemoInactiveCommand: 7일 비활성 데모 테넌트 탐지 및 로그 알림
- ManufacturingPresetSeeder: sam_stat DB에 90일 매출/생산 통계 시딩
- 라우트: demo-analytics prefix 4개 GET 엔드포인트 등록
- 스케줄러: demo:check-inactive 매일 09:30 실행
2026-03-14 14:42:21 +09:00
김보곤
e12fc461a7 feat: [demo] 데모 테넌트 관리 API 및 만료 알림 (Phase 3)
- DemoTenantController: 목록/상세/생성/리셋/연장/전환/통계 API
- DemoTenantStoreRequest: 고객 체험 테넌트 생성 검증
- DemoTenantService: API용 메서드 추가 (index/show/reset/extend/convert/stats)
- CheckDemoExpiredCommand: 만료 임박(7일) 알림 + 만료 테넌트 비활성 처리
- 라우트 등록 (api/v1/demo-tenants, 7개 엔드포인트)
- 스케줄러 등록 (04:20 demo:check-expired)
- i18n 메시지 추가 (message.demo_tenant.*, error.demo_tenant.*)
2026-03-14 14:42:21 +09:00
김보곤
1eb8d2cb01 feat: [demo] 데모 테넌트 운영 자동화 (Phase 2)
- DemoLimitMiddleware: 쇼케이스 읽기전용, 만료 체크, 외부연동 차단
- DemoTenantService: 파트너/체험 테넌트 생성, 기간 연장, 정식 전환
- ResetDemoShowcaseCommand: 매일 자정 데이터 리셋 + 샘플 재시드
- ManufacturingPresetSeeder: 부서/거래처/품목/견적/수주 샘플 데이터
- 스케줄러 등록 (00:00 demo:reset-showcase --seed)
- 미들웨어 별칭 등록 (demo.limit)
2026-03-14 14:41:55 +09:00
김보곤
39844a3ba0 fix: [tenant] 데모 관련 필드를 fillable에서 제거
- tenant_type, demo_expires_at, demo_source_partner_id를 fillable에서 제외
- 기존 mass assignment 동작에 영향 없도록 보호
- convertToProduction()에서 forceFill() 사용으로 변경
2026-03-14 14:41:55 +09:00
김보곤
45c30aa2aa feat: [tenant] 데모 테넌트 지원 추가 (Phase 1)
- tenants.tenant_type ENUM 확장: DEMO_SHOWCASE, DEMO_PARTNER, DEMO_TRIAL
- demo_expires_at, demo_source_partner_id 컬럼 추가
- Tenant 모델에 데모 관련 메서드 추가 (isDemoTenant, isDemoShowcase 등)
- getOption/setOption 헬퍼 메서드 추가
- 데모→정식 전환 convertToProduction() 메서드
2026-03-14 14:41:55 +09:00
김보곤
85d5b98966 feat: [vehicle] 법인차량 사진 API 추가
- CorporateVehicle 모델 (photos 관계 포함)
- VehiclePhotoService (R2 저장, 최대 10장 제한)
- VehiclePhotoController (index/store/destroy)
- StoreVehiclePhotoRequest (동적 max 검증)
- finance.php 라우트 등록
2026-03-14 14:41:55 +09:00
aeffd5be61 feat: [work-order] 작업 완료 API 응답에 실제 LOT 번호 포함
- saveItemResults() 반환 타입 void → string (생성된 lot_no 반환)
- updateStatus() 완료 시 lot_no를 setAttribute로 응답에 포함
2026-03-13 23:43:02 +09:00
d7c096b615 feat: [shipment] MES 데이터 정합성 개선 — can_ship 검증, ShipmentItem FK, 재고차감 비활성화
- ShipmentService::updateStatus()에 can_ship 검증 추가 (ready/shipping/completed 전환 시)
- shipment_items에 order_item_id, work_order_item_id 컬럼+인덱스 추가 (마이그레이션)
- ShipmentItem 모델에 orderItem(), workOrderItem() 관계 추가
- createShipmentFromOrder()에서 order_item_id, work_order_item_id 자동 매핑
- decreaseStockForShipment() 호출 비활성화 (수주생산=재고 미경유, 선생산=자재 투입 시 차감)
2026-03-13 22:45:43 +09:00
54686cfc8a fix: [work-order] 생산지시 생성 시 부서/우선순위 자동 매핑
- team_id 미지정 시 공정 담당부서에서 자동 매핑
- priority 문자열→숫자 변환 (urgent=1, high=4, normal=7)
- 부서/담당자 배정 시 작업대기(waiting) 상태로 설정
2026-03-13 18:55:11 +09:00
유병철
a36b7a2514 feat: [vehicle] 법인차량 관리 API 추가
- 법인차량 CRUD (CorporateVehicle)
- 차량 운행일지 CRUD (VehicleLog)
- 차량 정비이력 CRUD (VehicleMaintenance)
- 모델, 서비스, 컨트롤러, 라우트 구성

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 11:38:18 +09:00
e241c6a681 fix: [work-order] 보조공정/미배정 작업지시 목록 제외
- process_id NOT NULL 기본 필터 추가
- is_auxiliary 보조공정 제외 조건 추가
- stats()에도 동일 필터 적용
- 기타(none) 탭 관련 로직 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 10:14:15 +09:00
73c8f78788 feat: [qms] 수주로트 감사 상세 정보 확장
- 수주 상세: 개소별 제품, 모터, 절곡물, 부자재 정보 추가
- 출하 상세: 배차정보, 제품 그룹별 품목 분류 추가
- 확인 로직: documentOrders 기준 수주로트 카운트로 변경
- locations relation 경로 수정 (documentOrders.locations)
- 품질관리서 파일 정보 routeDocuments에 포함
- Shipment Client 모델 네임스페이스 수정
- DocumentService data relation null 처리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 10:14:09 +09:00
597aecb5e8 feat: [quality] 품질관리서 파일 업로드/삭제 API
- POST /{id}/upload-file: 1건당 1파일, 기존 파일 교체
- DELETE /{id}/file: 파일 soft delete
- QualityDocument.file() relation 추가
- R2 저장 경로: {tenant_id}/quality-documents/{year}/{month}

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 10:14:00 +09:00
ef591074c7 feat: [storage] R2 테넌트 파일 프록시 라우트 추가
- /storage/tenants/{path} 라우트 추가
- R2에서 스트리밍 방식으로 파일 제공
- 인증 불필요, Cache-Control 1일

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 10:13:50 +09:00
8b7d932f00 feat: [storage] R2 정적 이미지 프록시 라우트 추가
- /images/{path} 라우트로 R2에서 이미지 스트리밍
- bending 도면 이미지 등 정적 파일을 R2에서 서빙
- 캐시 1일 적용 (Cache-Control: max-age=86400)
2026-03-13 02:06:44 +09:00
42d818596d fix: [employee] 사용자-사원 삭제 동기화 수정
- destroy/bulkDelete 퇴직처리 시 user_tenants.is_active = false 추가
- update에서 employee_status 변경 시 is_active 자동 동기화 (퇴직/복직)
- SwitchTenantRequest에 user_tenants.is_active 검증 추가 (비활성 테넌트 전환 차단)
- tenant_access_denied i18n 메시지 추가 (ko/en)
2026-03-13 00:30:33 +09:00
유병철
0d9a840358 feat: [equipment-inspection] 설비별 점검 템플릿 조회 API 개선
- templates 엔드포인트에 cycle 필터 파라미터 추가
- getTemplatesByEquipment 서비스 메서드 신규 추가
- Controller에서 Request 주입하여 cycle 쿼리 파라미터 전달

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 19:21:38 +09:00
유병철
2c4f5ee91d fix: [equipment] User 모델 네임스페이스 경로 수정
- App\Models\User → App\Models\Members\User 경로 일괄 수정
- Equipment(manager, subManager), EquipmentInspection(inspector), EquipmentRepair(repairer)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 19:03:31 +09:00
유병철
08582261db feat: [equipment] 설비 통계 API에 유형별 분포 및 점검 현황 추가
- 설비 유형별(equipment_type) 현황 집계 추가
- 이번달 점검 대상/완료/이슈 건수 통계 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 18:47:39 +09:00
a50d69b243 sync: main 배포 동기화 2026-03-12 2026-03-12 15:22:18 +09:00
37bb691838 sync: main 배포 동기화 2026-03-12 2026-03-12 15:22:15 +09:00
김보곤
88d9192618 refactor: [pmis] 마이그레이션을 MNG 프로젝트로 이관
- PMIS 테이블은 MNG 전용이므로 API에서 제거
- pmis_workers, pmis_job_types, pmis_construction_workers, pmis_equipments, pmis_materials
2026-03-12 14:43:51 +09:00
김보곤
cefad468b9 feat: [pmis] 자재관리 테이블 마이그레이션 추가 2026-03-12 14:37:41 +09:00
김보곤
9ad76ceb82 feat: [pmis] 장비관리 테이블 생성 (pmis_equipments) 2026-03-12 14:13:34 +09:00
김보곤
76e098337f feat: [pmis] 시공관리 인원관리 테이블 생성 (job_types, construction_workers) 2026-03-12 14:03:35 +09:00
57d8b97dde chore: [API] 문서/설정 업데이트
- LOGICAL_RELATIONSHIPS.md 관계 정보 추가
- Swagger 서버 설명 변경
- files 테이블 mime_type 컬럼 확장 마이그레이션

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:00:59 +09:00
f5b60aab38 fix: [QMS] 로트심사 서류 목록 개선
- 작업일지/중간검사: 인식 가능한 공정만 표시, 공정별 그룹핑
- 중간검사 detail: PQC Inspection 대신 WorkOrder 기반으로 변경
- 문서 아이템 표시 개선 (공정명, 작업지시번호, 문서번호 추가)
- 루트 정보에 거래처(client) 필드 추가
- location에 document 관계 eager loading 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:00:49 +09:00
f3849808d5 feat: [QMS] 점검표 토글 API 추가 + 레거시 AuditChecklist 라우트 제거
- ChecklistTemplateController.toggleItem() 추가 (PATCH /{id}/items/{subItemId}/toggle)
- ChecklistTemplate 모델 User 클래스 경로 수정 (Members\User)
- AuditChecklistController 라우트 제거 (checklist_templates로 통합)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:00:43 +09:00
김보곤
2d32faa9b5 refactor: [equipment] 사진 업로드를 R2(FileStorageSystem) 기반으로 전환
- GCS 스텁 코드를 Cloudflare R2 기반 실제 파일 업로드로 교체
- File 모델 import를 Boards\File에서 Commons\File로 수정
- StoreEquipmentPhotoRequest FormRequest 추가 (파일 검증)
- 다중 파일 업로드 지원 (최대 10장 제한)
- softDeleteFile 패턴 적용 (삭제 시 soft delete)
- ItemsFileController 패턴 준용 (R2 저장, 랜덤 파일명)
2026-03-12 13:45:15 +09:00
김보곤
723b5a8e1a feat: [pmis] pmis_workers 테이블 마이그레이션 추가
- 건설PMIS 현장 작업자 전용 프로필 테이블
- tenant_id + user_id 유니크 제약 포함
2026-03-12 12:22:58 +09:00
김보곤
8c301b54e3 fix: [payroll] 일괄 생성 시 삭제된 사용자 건너뛰기
- bulkGenerate에서 users 테이블에 존재하지 않는 user_id로 인한 FK 위반 해결
- whereHas('user')로 유효한 사용자만 조회
2026-03-12 11:30:50 +09:00
김보곤
19c524d692 Merge branch 'develop' of http://114.203.209.83:3000/SamProject/sam-api into develop 2026-03-12 11:06:53 +09:00
김보곤
964ee40e8d fix: [equipment] 기본 DB에 equipment 테이블 생성 마이그레이션 추가
- 기존 마이그레이션이 codebridge DB에만 테이블을 생성하는 문제 수정
- 운영서버(API+React)에서는 기본 DB(sam/sam_prod)에 테이블 필요
- hasTable() 체크로 이미 존재하는 환경에서는 건너뜀
- 모든 컬럼 최신 스키마 반영 (inspection_cycle, sub_manager_id, options)
- options 마이그레이션도 hasTable/hasColumn 안전 체크 추가
2026-03-12 11:00:15 +09:00
김보곤
f401e17447 feat: [payroll] 엑셀 내보내기 및 전표 생성 API 추가
- GET /payrolls/export: 급여 현황 엑셀 다운로드 (필터 지원)
- POST /payrolls/journal-entries: 연월 기준 급여 전표 일괄 생성
- JournalEntry SOURCE_PAYROLL 상수 추가
- StorePayrollJournalRequest 유효성 검증 추가
2026-03-12 10:55:17 +09:00
김보곤
069d0206a0 feat: [equipment] 설비관리 API 백엔드 구현 (Phase 1)
- 모델 6개: Equipment, EquipmentInspection, EquipmentInspectionDetail, EquipmentInspectionTemplate, EquipmentRepair, EquipmentProcess
- InspectionCycle Enum: 6주기(일/주/월/격월/분기/반기) 날짜 해석
- 서비스 4개: EquipmentService, EquipmentInspectionService, EquipmentRepairService, EquipmentPhotoService
- 컨트롤러 4개: CRUD + 점검 토글/결과 설정/메모/초기화 + 템플릿 관리 + 수리이력 + 사진
- FormRequest 6개: 설비등록/수정, 수리이력, 점검템플릿, 토글, 메모
- 라우트 26개: equipment prefix 하위 RESTful 엔드포인트
- i18n 메시지: message.equipment.*, error.equipment.*
- 마이그레이션: equipments/equipment_repairs options JSON 컬럼 추가
2026-03-12 10:52:30 +09:00
8c16993746 fix: token-login API KEY 미들웨어 화이트리스트 추가 2026-03-12 10:19:10 +09:00
3a889b33ef fix: [QMS] 인정품목 표시 수정 + 제품검사 성적서 필터 개선
- getFgProductName(): BOM 순회 대신 Order.item_id 직접 참조로 변경
- 제품검사 성적서 필터: document_id만 → document_id || inspection_status=completed
- getLocationDetail(): FQC 문서 데이터 포함 (template + data)
- formatFqcTemplate(): DB item → item_name 매핑 추가
- formatDocumentItem('product'): 개소별 층/기호 코드 표시

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:19:10 +09:00
073ad11ecd fix: [QMS] 점검표 토글 해제 안되는 버그 수정
- PHP foreach 참조(&)와 ?? 연산자 조합 시 임시 복사본이 생성되어 원본 배열 수정 불가
- `$category['subItems'] ?? []` → `empty() + continue` + `$category['subItems']` 로 변경
- 토글 API가 항상 is_completed: true 반환하던 문제 해결

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:19:10 +09:00
479059747b feat: [생산/출하] 수주 단위 출하 자동생성 + 상태 흐름 개선
- 출하를 작업지시(WO) 단위 → 수주(Order) 단위로 변경
  - createShipmentFromOrder: 모든 메인 WO 품목을 통합하여 출하 1건 생성
  - 출하에 수주 정보 복사 안함 (order_info accessor로 조인 참조)
- syncOrderStatus에서 PRODUCED 전환 시 자동 출하 생성
  - ensureShipmentExists: 이미 PRODUCED인데 출하 없으면 재생성
- POST /shipments/from-order/{orderId} 수동 출하 생성 API 추가
  - createShipmentForOrder: 상태 검증 + 작업지시 조회 + 출하 생성
- Shipment order_info accessor 확장 (receiver, delivery_address_detail, delivery_method)
- ShipmentService index에 creator 관계 추가 (목록 작성자 표시)
- autoCompleteWorkOrderIfAllStepsDone: 전체 step 완료 시 WO 자동완료
- autoCompleteOrphanedSteps: 고아 step 자동보정
- syncOrderStatus: 공정 미지정 WO 바이패스
- ApiResponse::success 201 인자 오류 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:19:10 +09:00
12373edf8c feat: [QMS] 점검표 템플릿 관리 백엔드 구현
- checklist_templates 테이블 마이그레이션 + 기본 시딩
- ChecklistTemplate 모델 (BelongsToTenant, Auditable, SoftDeletes)
- ChecklistTemplateService: 조회/저장/파일 업로드/삭제
- SaveChecklistTemplateRequest: 중첩 JSON 검증
- ChecklistTemplateController: 5개 엔드포인트
- 라우트 등록 (quality/checklist-templates, quality/qms-documents)
2026-03-12 10:19:10 +09:00
3bae303447 fix: [작업지시] syncOrderStatus 집계 방식으로 변경
- 기존: 단일 작업지시 상태만 보고 수주 상태 매핑 (첫 WO 완료 시 즉시 PRODUCED)
- 변경: 수주의 모든 비보조 작업지시 상태를 집계하여 결정
  - 전부 shipped → SHIPPED
  - 전부 completed/shipped → PRODUCED
  - 하나라도 진행중/완료/출하 → IN_PRODUCTION
- 감사 로그에 집계 내역(work_order_counts) 포함
2026-03-12 10:19:10 +09:00
b55cbc2ec4 feat: [견적] 제어기 타입 체계 변경 (basic/smart/premium → exposed/embedded/embedded_no_box)
- QuoteBomBulkCalculateRequest: controller validation 값 변경, 기본값 exposed
- QuoteBomCalculateRequest: 동일 변경
- FormulaEvaluatorService: CT → controller_type 매핑 추가 (exposed→노출형, embedded→매립형)
- FormulaEvaluatorService: CT 값에 따라 backbox_qty 자동 설정 (embedded만 뒷박스 포함)
- QuoteService: CT 기본값 exposed로 변경

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:19:10 +09:00
f0b1b5e33a feat: [배포] Jenkinsfile 롤백 기능 추가
- parameters 블록 추가 (ACTION, ROLLBACK_TARGET, ROLLBACK_RELEASE)
- Jenkins 웹에서 Build with Parameters로 롤백 실행 가능
- 릴리스 목록 조회 + symlink 전환 + 캐시 재생성
- production/stage 환경 선택 가능
- 서버 IP를 PROD_SERVER 환경변수로 추출
- 롤백 시 Slack 알림 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:19:10 +09:00
김보곤
918ae0ebc1 feat: [email] 테넌트 메일 설정 마이그레이션 및 모델 추가
- tenant_mail_configs 테이블 생성 (SMTP 설정, 브랜딩, 연결 테스트 결과)
- mail_logs 테이블 생성 (발송 이력 추적)
- TenantMailConfig, MailLog 모델 추가 (options JSON 정책 준수)
2026-03-12 07:42:06 +09:00
유병철
2c9e5ae2da feat: [receiving] 입고 성적서 파일 연결 기능 추가
- receivings 테이블에 certificate_file_id 컬럼 추가 (마이그레이션)
- Receiving 모델에 certificateFile 관계 및 fillable/casts 추가
- Store/Update Request에 certificate_file_id 검증 규칙 추가
- ReceivingService index/show에 certificateFile eager loading 추가
- store/update 시 certificate_file_id 저장 처리

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 21:32:45 +09:00