summaryrefslogtreecommitdiff
path: root/lib/forms/services.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/forms/services.ts')
-rw-r--r--lib/forms/services.ts131
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"