[] {
enableHiding: false,
},
{
- accessorKey: "materialName",
+ accessorKey: "materialGroupDesc",
header: ({ column }) => (
-
+
),
cell: ({ row }) => {
- const value = row.getValue("materialName") as string | null
+ const value = row.getValue("materialGroupDesc") as string | null
return (
{value || "-"}
diff --git a/lib/material-groups/table/material-group-table.tsx b/lib/material-groups/table/material-group-table.tsx
index 21430c4f..e38ccf70 100644
--- a/lib/material-groups/table/material-group-table.tsx
+++ b/lib/material-groups/table/material-group-table.tsx
@@ -20,7 +20,7 @@ import { ViewModeToggle } from "@/components/data-table/view-mode-toggle"
// MaterialGroup 타입 정의 (서비스에서 반환되는 타입과 일치)
type MaterialGroup = {
materialGroupCode: string | null;
- materialName: string | null;
+ materialGroupDesc: string | null;
displayText: string | null;
}
@@ -51,7 +51,7 @@ export function MaterialGroupTable({ promises }: MaterialGroupTableProps) {
label: "자재그룹코드",
},
{
- id: "materialName",
+ id: "materialGroupDesc",
label: "자재그룹명",
},
]
@@ -63,7 +63,7 @@ export function MaterialGroupTable({ promises }: MaterialGroupTableProps) {
type: "text",
},
{
- id: "materialName",
+ id: "materialGroupDesc",
label: "자재그룹명",
type: "text",
},
diff --git a/lib/material/material-group-service.ts b/lib/material/material-group-service.ts
index 216cd0e6..50ab5164 100644
--- a/lib/material/material-group-service.ts
+++ b/lib/material/material-group-service.ts
@@ -6,7 +6,7 @@ import { materialSearchView } from "@/db/schema/items";
export interface MaterialSearchItem {
materialGroupCode: string;
- materialName: string;
+ materialGroupDesc: string;
displayText: string;
}
@@ -40,7 +40,7 @@ export async function searchMaterialsForSelector(
const searchPattern = `%${query.trim()}%`;
searchWhere = sql`(
${materialSearchView.materialGroupCode} ILIKE ${searchPattern} OR
- ${materialSearchView.materialName} ILIKE ${searchPattern} OR
+ ${materialSearchView.materialGroupDesc} ILIKE ${searchPattern} OR
${materialSearchView.displayText} ILIKE ${searchPattern}
)`;
}
@@ -51,7 +51,7 @@ export async function searchMaterialsForSelector(
.select()
.from(materialSearchView)
.where(searchWhere)
- .orderBy(materialSearchView.materialGroupCode, materialSearchView.materialName)
+ .orderBy(materialSearchView.materialGroupCode, materialSearchView.materialGroupDesc)
.limit(perPage)
.offset(offset);
@@ -66,7 +66,7 @@ export async function searchMaterialsForSelector(
return {
data: data.map((row) => ({
materialGroupCode: row.materialGroupCode,
- materialName: row.materialName,
+ materialGroupDesc: row.materialGroupDesc,
displayText: row.displayText,
})),
total,
diff --git a/lib/soap/ecc/mapper/bidding-and-pr-mapper.ts b/lib/soap/ecc/mapper/bidding-and-pr-mapper.ts
new file mode 100644
index 00000000..0ec9af0f
--- /dev/null
+++ b/lib/soap/ecc/mapper/bidding-and-pr-mapper.ts
@@ -0,0 +1,499 @@
+/**
+ * pr 발행 후, pr을 묶어서 rfq, bidding 을 sap ecc에서 생성한 경우
+ * ZBSART = AB인 경우, 즉 bidding인 경우 해당 케이스를 soap으로 수신한 뒤 이 함수에서 헤더는 biddings 테이블에, 아이템은 prItemsForBidding 테이블에 매핑
+ * ZBSART = AN인 경우, 즉 rfq인 경우 해당 케이스를 soap으로 수신한 뒤 rfq-and-pr-mapper.ts 파일에서 매핑
+ */
+
+import { debugLog, debugSuccess, debugError } from '@/lib/debug-utils';
+import db from '@/db/db';
+import {
+ biddings,
+ prItemsForBidding,
+} from '@/db/schema/bidding';
+import {
+ PR_INFORMATION_T_BID_HEADER,
+ PR_INFORMATION_T_BID_ITEM,
+} from '@/db/schema/ECC/ecc';
+import { inArray, max, sql } from 'drizzle-orm';
+import {
+ findUserInfoByEKGRP,
+ findProjectInfoByPSPID,
+ findMaterialNameByMATNR,
+ parseSAPDateTime,
+ parseSAPDateToString,
+} from './common-mapper-utils';
+
+// ECC 데이터 타입 정의
+export type ECCBidHeader = typeof PR_INFORMATION_T_BID_HEADER.$inferInsert;
+export type ECCBidItem = typeof PR_INFORMATION_T_BID_ITEM.$inferInsert;
+
+// 비즈니스 테이블 데이터 타입 정의
+export type BiddingData = typeof biddings.$inferInsert;
+export type PrItemForBiddingData = typeof prItemsForBidding.$inferInsert;
+
+
+/**
+ * Bidding 코드 생성 함수 (배치 처리용)
+ * 형식: BID{EKGRP}{00001}
+ * 기존 ANFNR은 기존 biddingNumber 사용, 새로운 ANFNR만 새 코드 생성
+ */
+async function generateBiddingCodes(eccHeaders: ECCBidHeader[]): Promise