diff options
| -rw-r--r-- | lib/forms/services.ts | 131 |
1 files changed, 50 insertions, 81 deletions
diff --git a/lib/forms/services.ts b/lib/forms/services.ts index a6ae2d83..a56b4083 100644 --- a/lib/forms/services.ts +++ b/lib/forms/services.ts @@ -1469,7 +1469,7 @@ async function transformDataToSEDPFormat( SCOPE: packageCode, TOOLID: "eVCP", // Changed from VDCS ITM_NO: row.TAG_NO || "", - OP_DELETE: false, + OP_DELETE: row.status === "Deleted", // Set OP_DELETE based on status MAIN_YN: true, LAST_REV_YN: true, CRTER_NO: designerNo, @@ -1658,57 +1658,6 @@ export async function sendDataToSEDP( } /** - * Delete tag data from SEDP - */ -export async function deleteTagFromSEDP( - projectCode: string, - packageCode: string -): Promise<any> { - try { - // Get the token - const apiKey = await getSEDPToken(); - - // Define the API base URL - const SEDP_API_BASE_URL = process.env.SEDP_API_BASE_URL || 'http://sedpwebapi.ship.samsung.co.kr/api'; - - const deletePayload = { - ProjectNo: projectCode, - ToolID: "eVCP", - Scope: packageCode, - RevNo: "00" - }; - - console.log("Deleting tag from SEDP:", JSON.stringify(deletePayload, null, 2)); - - // Make the API call - const response = await fetch( - `${SEDP_API_BASE_URL}/AdapterData/Delete`, - { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'accept': '*/*', - 'ApiKey': apiKey, - 'ProjectNo': projectCode - }, - body: JSON.stringify(deletePayload) - } - ); - - if (!response.ok) { - const errorText = await response.text(); - throw new Error(`SEDP Delete API request failed: ${response.status} ${response.statusText} - ${errorText}`); - } - - const data = await response.json(); - return data; - } catch (error: any) { - console.error('Error calling SEDP Delete API:', error); - throw new Error(`Failed to delete tag from SEDP API: ${error.message || 'Unknown error'}`); - } -} - -/** * Server action to send form data to SEDP */ export async function sendFormDataToSEDP( @@ -1892,15 +1841,23 @@ export async function deleteFormDataByTags({ console.log(`[DELETE ACTION] Current data count: ${currentData.length}`) - // 2. 삭제할 항목들 필터링 (formEntries에서) - const updatedData = currentData.filter((item: Record<string, unknown>) => - !tagIdxs.includes(item.TAG_IDX as string) - ) + // 2. 삭제할 항목들을 status="Deleted"로 마킹 (formEntries에서) + const updatedData = currentData.map((item: Record<string, unknown>) => { + if (tagIdxs.includes(item.TAG_IDX as string)) { + return { + ...item, + status: "Deleted" + } + } + return item + }) - const deletedFromFormEntries = currentData.length - updatedData.length + const deletedFromFormEntries = currentData.filter((item: Record<string, unknown>) => + tagIdxs.includes(item.TAG_IDX as string) + ).length console.log(`[DELETE ACTION] Updated data count: ${updatedData.length}`) - console.log(`[DELETE ACTION] Deleted ${deletedFromFormEntries} items from formEntries`) + console.log(`[DELETE ACTION] Marked ${deletedFromFormEntries} items as Deleted in formEntries`) if (deletedFromFormEntries === 0) { throw new Error("No items were found to delete in formEntries") @@ -1939,44 +1896,56 @@ export async function deleteFormDataByTags({ return { deletedFromFormEntries, deletedTagsCount, - deletedTagNumbers: deletedTagsResult.map(t => t.tagNo) + deletedTagNumbers: deletedTagsResult.map(t => t.tagNo), + updatedData // Return updatedData for SEDP sync } }) - // 5. SEDP에서도 삭제 (projectId가 제공된 경우) + // 5. SEDP에 OP_DELETE=true로 전송 (projectId가 제공된 경우) let sedpDeleteSuccess = false let sedpDeleteError: string | undefined if (projectId) { try { - console.log(`[DELETE ACTION] Attempting to delete from SEDP for projectId: ${projectId}`) + console.log(`[DELETE ACTION] Attempting to send deleted items to SEDP for projectId: ${projectId}`) - // Get packageCode from contractItem - const contractItem = await db.query.contractItems.findFirst({ - where: eq(contractItems.id, contractItemId), - }) + // Get the deleted items (items with status="Deleted") + const deletedItems = result.updatedData.filter((item: Record<string, unknown>) => + item.status === "Deleted" + ) - if (contractItem) { - const item = await db.query.items.findFirst({ - where: eq(items.id, contractItem.itemId), + if (deletedItems.length > 0) { + // Get form meta to get columns + const formMetaResult = await db.query.formMetas.findFirst({ + where: and( + eq(formMetas.formCode, formCode), + eq(formMetas.projectId, projectId) + ) }) - if (item?.packageCode) { - // Get project code - const projectCode = await getProjectCodeById(projectId) - - // Call SEDP delete API - await deleteTagFromSEDP(projectCode, item.packageCode) - - sedpDeleteSuccess = true - console.log(`[DELETE ACTION] Successfully deleted from SEDP for packageCode: ${item.packageCode}`) + if (formMetaResult && formMetaResult.columns) { + // Send deleted items to SEDP (will have OP_DELETE=true) + const sedpResult = await sendFormDataToSEDP( + formCode, + projectId, + contractItemId, + deletedItems as GenericData[], + formMetaResult.columns as DataTableColumnJSON[] + ) + + if (sedpResult.success) { + sedpDeleteSuccess = true + console.log(`[DELETE ACTION] Successfully sent ${deletedItems.length} deleted items to SEDP with OP_DELETE=true`) + } else { + sedpDeleteError = sedpResult.message + console.error(`[DELETE ACTION] Failed to send deleted items to SEDP:`, sedpResult.message) + } } else { - sedpDeleteError = "Package code not found" - console.warn(`[DELETE ACTION] Package code not found for contractItemId: ${contractItemId}`) + sedpDeleteError = "Form meta or columns not found" + console.warn(`[DELETE ACTION] Form meta not found for formCode: ${formCode}, projectId: ${projectId}`) } } else { - sedpDeleteError = "Contract item not found" - console.warn(`[DELETE ACTION] Contract item not found for contractItemId: ${contractItemId}`) + console.warn(`[DELETE ACTION] No deleted items found to send to SEDP`) } } catch (sedpError) { sedpDeleteError = sedpError instanceof Error ? sedpError.message : "SEDP delete failed" |
