From 10aa3d34bc599232af07d8a643c9938be14cb5bf Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Mon, 8 Sep 2025 10:33:01 +0000 Subject: (김준회) 입찰 인터페이스 처리, 자재그룹명 매핑 수정, 자재그룹 뷰 수정, 부서별 도메인 할당시 동기화 처리, 도메인 부서 할당 다이얼로그 부서목록 스크롤 처리, 삼성중공업 사용자 global search 개선 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/department-domain-assignment-dialog.tsx | 14 +++++--------- .../_components/department-menu-access-manager.tsx | 12 ++++++++++++ app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts | 15 ++++++++++----- 3 files changed, 27 insertions(+), 14 deletions(-) (limited to 'app') diff --git a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx index 277511cb..f8a75641 100644 --- a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx +++ b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx @@ -20,7 +20,6 @@ import { } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; -import { ScrollArea } from "@/components/ui/scroll-area"; import { Label } from "@/components/ui/label"; import { Separator } from "@/components/ui/separator"; import { @@ -35,8 +34,7 @@ import { DepartmentNode } from "@/lib/users/knox-service"; import { - getDepartmentDomainAssignmentsByDepartments, - type UserDomain + getDepartmentDomainAssignmentsByDepartments } from "@/lib/users/department-domain/service"; import { DOMAIN_OPTIONS, getDomainLabel } from "./domain-constants"; @@ -186,9 +184,8 @@ export function DepartmentDomainAssignmentDialog({ -
- -
+
+
{/* 선택된 부서들 표시 */}
-
+
{Array.from(selectedDepartmentsByCompany.entries()).map(([companyCode, depts]) => (
@@ -234,7 +231,7 @@ export function DepartmentDomainAssignmentDialog({ 기존 할당 정보를 조회하는 중...
) : ( -
+
@@ -353,7 +350,6 @@ export function DepartmentDomainAssignmentDialog({ - diff --git a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx index bf43e7a9..c24770bf 100644 --- a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx +++ b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx @@ -15,6 +15,7 @@ import { import { assignDomainToDepartments, getDepartmentDomainAssignments, + autoAssignPendingUsersDomains, type UserDomain } from "@/lib/users/department-domain/service"; import { DOMAIN_OPTIONS } from "./domain-constants"; @@ -138,6 +139,17 @@ export function DepartmentMenuAccessManager({ } catch (error) { console.error("할당 정보 새로고침 실패:", error); } + + // users 테이블에 도메인 동기화 작업 진행 + try { + const syncResult = await autoAssignPendingUsersDomains(); + if (syncResult.success && syncResult.assignedCount > 0) { + toast.success(`사용자 도메인 동기화 완료: ${syncResult.assignedCount}명의 사용자가 자동 할당되었습니다.`); + } + } catch (error) { + console.error("사용자 도메인 동기화 실패:", error); + // 동기화 실패해도 메인 할당은 성공이므로 에러 토스트는 표시하지 않음 + } } else { toast.error(result.message); } diff --git a/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts b/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts index 7290db0f..e195c7f6 100644 --- a/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts +++ b/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts @@ -21,6 +21,9 @@ import { import { mapAndSaveECCRfqData } from "@/lib/soap/ecc/mapper/rfq-and-pr-mapper"; +import { + mapAndSaveECCBiddingData +} from "@/lib/soap/ecc/mapper/bidding-and-pr-mapper"; // 스키마에서 타입 추론 @@ -120,14 +123,16 @@ export async function POST(request: NextRequest) { } } - // AB (Bidding) 데이터 처리 - TODO + // AB (Bidding) 데이터 처리 + let biddingMappingResult: { success: boolean; message: string; processedCount: number } | null = null; if (abHeaders.length > 0) { - console.log(`⚠️ TODO: Bidding 데이터 처리 필요 - ${abHeaders.length}개 헤더, ${abItems.length}개 아이템`); - // TODO: mapAndSaveECCBiddingData 함수 구현 필요 - // const biddingMappingResult = await mapAndSaveECCBiddingData(abHeaders, abItems); + biddingMappingResult = await mapAndSaveECCBiddingData(abHeaders, abItems); + if (!biddingMappingResult.success) { + throw new Error(`Bidding 비즈니스 테이블 매핑 실패: ${biddingMappingResult.message}`); + } } - console.log(`🎉 처리 완료: ${processedData.length}개 PR 데이터, ${rfqMappingResult?.processedCount || 0}개 RFQ 매핑, ${abHeaders.length}개 Bidding (TODO)`); + console.log(`🎉 처리 완료: ${processedData.length}개 PR 데이터, ${rfqMappingResult?.processedCount || 0}개 RFQ 매핑, ${biddingMappingResult?.processedCount || 0}개 Bidding 매핑`); // 6) 성공 응답 반환 return createSoapResponse('http://60.101.108.100/', { -- cgit v1.2.3