diff --git a/src/app/[locale]/(protected)/sales/order-management-sales/page.tsx b/src/app/[locale]/(protected)/sales/order-management-sales/page.tsx index fd4c57e5..98d3e2dc 100644 --- a/src/app/[locale]/(protected)/sales/order-management-sales/page.tsx +++ b/src/app/[locale]/(protected)/sales/order-management-sales/page.tsx @@ -374,10 +374,18 @@ function OrderListContent() { try { const result = await deleteOrders(selectedIds); if (result.success) { - setOrders(orders.filter((o) => !selectedIds.includes(o.id))); + const deletedCount = result.deletedCount ?? 0; + const skippedCount = result.skippedCount ?? 0; + const skippedSet = new Set((result.skippedIds ?? []).map(String)); + // 실제 삭제된 항목만 리스트에서 제거 + setOrders(orders.filter((o) => skippedSet.has(o.id) || !selectedIds.includes(o.id))); setSelectedItems(new Set()); - toast.success(`${selectedIds.length}개의 수주가 삭제되었습니다.`); - // 통계 새로고침 + if (deletedCount > 0) { + toast.success(`${deletedCount}개의 수주가 삭제되었습니다.`); + } + if (skippedCount > 0) { + toast.warning(`${skippedCount}개의 수주는 상태/작업지시로 인해 삭제할 수 없습니다.`); + } const statsResult = await getOrderStats(); if (statsResult.success && statsResult.data) { setApiStats(statsResult.data); @@ -400,31 +408,41 @@ function OrderListContent() { const count = deleteTargetIds.length; setIsDeleting(true); try { - let success = false; if (count === 1) { const result = await deleteOrder(deleteTargetIds[0]); - success = result.success; - if (!success) { + if (result.success) { + setOrders(orders.filter((o) => o.id !== deleteTargetIds[0])); + setSelectedItems(new Set()); + toast.success("수주가 삭제되었습니다."); + const statsResult = await getOrderStats(); + if (statsResult.success && statsResult.data) { + setApiStats(statsResult.data); + } + } else { toast.error(result.error || "삭제에 실패했습니다."); } } else { const result = await deleteOrders(deleteTargetIds); - success = result.success; - if (!success) { + if (result.success) { + const deletedCount = result.deletedCount ?? 0; + const skippedCount = result.skippedCount ?? 0; + const skippedSet = new Set((result.skippedIds ?? []).map(String)); + setOrders(orders.filter((o) => skippedSet.has(o.id) || !deleteTargetIds.includes(o.id))); + setSelectedItems(new Set()); + if (deletedCount > 0) { + toast.success(`${deletedCount}개의 수주가 삭제되었습니다.`); + } + if (skippedCount > 0) { + toast.warning(`${skippedCount}개의 수주는 상태/작업지시로 인해 삭제할 수 없습니다.`); + } + const statsResult = await getOrderStats(); + if (statsResult.success && statsResult.data) { + setApiStats(statsResult.data); + } + } else { toast.error(result.error || "삭제에 실패했습니다."); } } - - if (success) { - setOrders(orders.filter((o) => !deleteTargetIds.includes(o.id))); - setSelectedItems(new Set()); - toast.success(`${count}개의 수주가 삭제되었습니다.`); - // 통계 새로고침 - const statsResult = await getOrderStats(); - if (statsResult.success && statsResult.data) { - setApiStats(statsResult.data); - } - } } catch (error) { console.error("Error deleting orders:", error); toast.error("삭제 중 오류가 발생했습니다."); @@ -444,9 +462,18 @@ function OrderListContent() { try { const result = await deleteOrders(selectedIds, { force: true }); if (result.success) { - setOrders(orders.filter((o) => !selectedIds.includes(o.id))); + const deletedCount = result.deletedCount ?? 0; + const skippedCount = result.skippedCount ?? 0; + const skippedSet = new Set((result.skippedIds ?? []).map(String)); + // 실제 삭제된 항목만 리스트에서 제거 + setOrders(orders.filter((o) => skippedSet.has(o.id) || !selectedIds.includes(o.id))); setSelectedItems(new Set()); - toast.success(`${result.deletedCount ?? selectedIds.length}개의 수주가 완전삭제되었습니다.`); + if (deletedCount > 0) { + toast.success(`${deletedCount}개의 수주가 완전삭제되었습니다.`); + } + if (skippedCount > 0) { + toast.warning(`${skippedCount}개의 수주는 삭제할 수 없습니다.`); + } const statsResult = await getOrderStats(); if (statsResult.success && statsResult.data) { setApiStats(statsResult.data); @@ -687,7 +714,8 @@ function OrderListContent() { deleteBulk: async (ids) => { const result = await deleteOrders(ids); if (result.success) { - setOrders((prev) => prev.filter((o) => !ids.includes(o.id))); + const skippedSet = new Set((result.skippedIds ?? []).map(String)); + setOrders((prev) => prev.filter((o) => skippedSet.has(o.id) || !ids.includes(o.id))); const statsResult = await getOrderStats(); if (statsResult.success && statsResult.data) { setApiStats(statsResult.data);