summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-05-07 08:45:26 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-05-07 08:45:26 +0000
commit26e278b98022474eb8fe577448af76bfac8efb51 (patch)
treef49a8131ceb3997fdba81fa2263ff775c3992a5f
parentd01cba116736ab5510ba6e3b5cdff2780d29e829 (diff)
S-EDP 요청사항 반영 (김준회 프로) SCOPE 필드를 TYPE과 동일한 값으로 변경
-rw-r--r--lib/forms/services.ts65
1 files changed, 62 insertions, 3 deletions
diff --git a/lib/forms/services.ts b/lib/forms/services.ts
index bd6e4bbc..fd521132 100644
--- a/lib/forms/services.ts
+++ b/lib/forms/services.ts
@@ -19,12 +19,12 @@ import {
vendorDataReportTemps,
VendorDataReportTemps,
} from "@/db/schema/vendorData";
-import { eq, and, desc, sql, DrizzleError, or,type SQL ,type InferSelectModel } from "drizzle-orm";
+import { eq, and, desc, sql, DrizzleError, inArray, or,type SQL ,type InferSelectModel } from "drizzle-orm";
import { unstable_cache } from "next/cache";
import { revalidateTag } from "next/cache";
import { getErrorMessage } from "../handle-error";
import { DataTableColumnJSON } from "@/components/form-data/form-data-table-columns";
-import { contractItems, contracts, projects } from "@/db/schema";
+import { contractItems, contracts, items, projects } from "@/db/schema";
import { getSEDPToken } from "../sedp/sedp-token";
@@ -356,6 +356,64 @@ export async function getFormData(formCode: string, contractItemId: number) {
}
}
+/**
+ * contractId와 formCode(itemCode)를 사용하여 contractItemId를 찾는 서버 액션
+ *
+ * @param contractId - 계약 ID
+ * @param formCode - 폼 코드 (itemCode와 동일)
+ * @returns 찾은 contractItemId 또는 null
+ */
+export async function findContractItemId(contractId: number, formCode: string): Promise<number | null> {
+ try {
+ console.log(`[findContractItemId] 계약 ID ${contractId}와 formCode ${formCode}에 대한 contractItem 조회 시작`);
+
+ // 1. forms 테이블에서 formCode에 해당하는 모든 레코드 조회
+ const formsResult = await db
+ .select({
+ contractItemId: forms.contractItemId
+ })
+ .from(forms)
+ .where(eq(forms.formCode, formCode));
+
+ if (formsResult.length === 0) {
+ console.warn(`[findContractItemId] formCode ${formCode}에 해당하는 form을 찾을 수 없습니다.`);
+ return null;
+ }
+
+ // 모든 contractItemId 추출
+ const contractItemIds = formsResult.map(form => form.contractItemId);
+ console.log(`[findContractItemId] formCode ${formCode}에 해당하는 ${contractItemIds.length}개의 contractItemId 발견`);
+
+ // 2. contractItems 테이블에서 추출한 contractItemId 중에서
+ // contractId가 일치하는 항목 찾기
+ const contractItemResult = await db
+ .select({
+ id: contractItems.id
+ })
+ .from(contractItems)
+ .where(
+ and(
+ inArray(contractItems.id, contractItemIds),
+ eq(contractItems.contractId, contractId)
+ )
+ )
+ .limit(1);
+
+ if (contractItemResult.length === 0) {
+ console.warn(`[findContractItemId] 계약 ID ${contractId}와 일치하는 contractItemId를 찾을 수 없습니다.`);
+ return null;
+ }
+
+ const contractItemId = contractItemResult[0].id;
+ console.log(`[findContractItemId] 계약 아이템 ID ${contractItemId} 발견`);
+
+ return contractItemId;
+ } catch (error) {
+ console.error(`[findContractItemId] contractItem 조회 중 오류 발생:`, error);
+ return null;
+ }
+}
+
export async function syncMissingTags(
contractItemId: number,
@@ -1015,7 +1073,8 @@ async function transformDataToSEDPFormat(
TAG_NO: row.TAG_NO || "",
TAG_DESC: row.TAG_DESC || "",
ATTRIBUTES: [],
- SCOPE: objectCode,
+ // SCOPE: objectCode,
+ SCOPE: formCode,
TOOLID: "eVCP", // Changed from VDCS
ITM_NO: row.TAG_NO || "",
OP_DELETE: false,