Files
sam-docs/changes/20260318_item-management-bom-tree.md

4.0 KiB

품목관리 BOM 트리 기능 개선

날짜: 2026-03-18 작업자: Claude Code

변경 개요

품목관리 화면의 BOM(Bill of Materials) 트리 기능을 전면 개선하여 3단계 계층 구조(FG → 카테고리 → PT)로 표시하고, 수식 산출 결과를 BOM으로 저장하는 기능을 추가했다.


수정된 파일

파일 변경 내용
mng/app/Services/ItemManagementService.php saveBomFromFormula(), getBendingBomTree() 메서드 추가, buildBomNode() 카테고리 그룹 노드 생성
mng/app/Http/Controllers/Api/Admin/ItemManagementApiController.php saveBom(), bendingBomTree() 엔드포인트 추가
mng/routes/api.php POST /{id}/save-bom, GET /bending-bom-tree 라우트 추가
mng/resources/views/item-management/index.blade.php BOM 탭 통합, 3단계 트리 UI, BOM 저장 버튼

상세 변경 사항

1. BOM 탭 통합

  • 기존 "정적 BOM" + "절곡 BOM" 2개 탭 → "BOM" 단일 탭으로 통합
  • "수식 산출" 탭은 FG 품목 선택 시에만 표시 (기존 유지)
  • FG 선택 시 수식 산출 탭으로 자동 전환하지 않음 (현재 탭 유지)

2. BOM 트리 3단계 구조

BOM 데이터에 category 필드가 있으면 자동으로 중간 그룹 노드를 생성한다:

▼ FG  KSS02 스크린 SUS마감 측면형
  ▼ 주자재 (1건)
    PT  스크린 실리카                x10.65
  ▼ 모터 (1건)
    PT  모터 150K(S) (220V)         x1
  ▼ 절곡품 (9건)
    PT  케이스 500*380              x3.22
    ...
  ▼ 부자재 (4건)
    PT  감기샤프트 5인치 6m         x1
    ...
  • chevron 아이콘 기반 접힘/펼침 토글
  • 카테고리 노드 회색 배경, 건수 표시
  • 절곡 품목(SF-BND) amber 배경 강조
  • 품목 코드는 hover 시에만 표시

3. 수식 산출 → BOM 저장

수식 산출 결과 합계 옆에 "BOM 저장" 버튼을 추가했다:

  • 클릭 시 산출된 전체 품목을 FG의 bom JSON 필드에 저장
  • 저장 데이터 구조: [{child_item_id, child_item_code, quantity, unit, category}]
  • 저장 후 자동으로 BOM 탭 전환 + 트리 표시

4. FG 18건 BOM 일괄 등록

tenant 287(프론트_테스트회사)의 FG 품목 18건에 수식 산출(W:3000, H:3000) 결과를 BOM으로 일괄 저장했다. 각 FG에 17건의 PT 품목이 BOM으로 등록되었다.


API 엔드포인트

Method Path 설명
POST /api/admin/items/{id}/save-bom 수식 산출 결과를 FG BOM으로 저장
GET /api/admin/items/bending-bom-tree 절곡 품목 트리 조회

5. 개발서버 배포 시 401 오류 해결

개발서버에서 수식 산출 시 401 인증 오류가 발생했다. 두 가지 원인:

원인 1: MNG .env API 연결 설정 오류

  • API_BASE_URL이 운영 API(api.codebridge-x.com)를 가리키고 있었음
  • 개발서버는 자기 자신의 도메인을 DNS로 해석하지 못하므로 API_INTERNAL_URL=https://127.0.0.1 설정 추가
  • API_BASE_URL은 Host 헤더용, API_INTERNAL_URL은 실제 연결용

원인 2: API 미들웨어 화이트리스트 미배포

  • api/app/Http/Middleware/ApiKeyMiddleware.phpapi/v1/quotes/calculate/* 화이트리스트를 추가한 커밋이 개발서버에 푸시되지 않았음
  • MNG만 푸시하고 API는 누락 → Bearer 토큰 없이 호출 시 401 발생
  • API도 함께 git push origin develop 실행하여 해결

교훈: MNG에서 API 서버를 호출하는 기능 개발 시, API 프로젝트의 미푸시 커밋도 함께 확인하여 배포해야 한다.


API 엔드포인트

Method Path 설명
POST /api/admin/items/{id}/save-bom 수식 산출 결과를 FG BOM으로 저장
GET /api/admin/items/bending-bom-tree 절곡 품목 트리 조회

관련 문서

  • rules/item-policy.md — 품목 정책
  • features/quotes/README.md — 견적 시스템, BOM 계산

최종 업데이트: 2026-03-18