From 169953ad1e5a9dcc47894596ff0ae1ab388ebcd8 Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Tue, 30 Jul 2024 09:48:50 -0300 Subject: [PATCH] fix(core-flows): delete receive return action (#8350) --- .../core-flows/src/order/workflows/index.ts | 1 + .../remove-item-receive-return-action.ts | 104 ++++++++++++++++++ .../src/workflow/order/request-item-return.ts | 13 ++- .../[id]/receive-items/[action_id]/route.ts | 4 +- 4 files changed, 115 insertions(+), 7 deletions(-) create mode 100644 packages/core/core-flows/src/order/workflows/return/remove-item-receive-return-action.ts diff --git a/packages/core/core-flows/src/order/workflows/index.ts b/packages/core/core-flows/src/order/workflows/index.ts index d34887de00..43f8fd076b 100644 --- a/packages/core/core-flows/src/order/workflows/index.ts +++ b/packages/core/core-flows/src/order/workflows/index.ts @@ -43,6 +43,7 @@ export * from "./return/create-return-shipping-method" export * from "./return/dismiss-item-return-request" export * from "./return/receive-complete-return" export * from "./return/receive-item-return-request" +export * from "./return/remove-item-receive-return-action" export * from "./return/remove-item-return-action" export * from "./return/remove-return-shipping-method" export * from "./return/request-item-return" diff --git a/packages/core/core-flows/src/order/workflows/return/remove-item-receive-return-action.ts b/packages/core/core-flows/src/order/workflows/return/remove-item-receive-return-action.ts new file mode 100644 index 0000000000..7c444a35dd --- /dev/null +++ b/packages/core/core-flows/src/order/workflows/return/remove-item-receive-return-action.ts @@ -0,0 +1,104 @@ +import { + OrderChangeActionDTO, + OrderChangeDTO, + OrderDTO, + OrderWorkflow, + ReturnDTO, +} from "@medusajs/types" +import { ChangeActionType, OrderChangeStatus } from "@medusajs/utils" +import { + WorkflowData, + createStep, + createWorkflow, +} from "@medusajs/workflows-sdk" +import { useRemoteQueryStep } from "../../../common" +import { + deleteOrderChangeActionsStep, + previewOrderChangeStep, +} from "../../steps" +import { + throwIfIsCancelled, + throwIfOrderChangeIsNotActive, +} from "../../utils/order-validation" + +const validationStep = createStep( + "remove-item-receive-return-action-validation", + async function ({ + order, + orderChange, + orderReturn, + input, + }: { + order: OrderDTO + orderReturn: ReturnDTO + orderChange: OrderChangeDTO + input: OrderWorkflow.DeleteRequestItemReceiveReturnWorkflowInput + }) { + throwIfIsCancelled(order, "Order") + throwIfIsCancelled(orderReturn, "Return") + throwIfOrderChangeIsNotActive({ orderChange }) + + const associatedAction = (orderChange.actions ?? []).find( + (a) => a.id === input.action_id + ) as OrderChangeActionDTO + + if (!associatedAction) { + throw new Error( + `No request return found for return ${input.return_id} in order change ${orderChange.id}` + ) + } else if ( + ![ + ChangeActionType.RECEIVE_RETURN_ITEM, + ChangeActionType.RECEIVE_DAMAGED_RETURN_ITEM, + ].includes(associatedAction.action as ChangeActionType) + ) { + throw new Error( + `Action ${associatedAction.id} is not receiving item return` + ) + } + } +) + +export const removeItemReceiveReturnActionWorkflowId = + "remove-item-receive-return-action" +export const removeItemReceiveReturnActionWorkflow = createWorkflow( + removeItemReceiveReturnActionWorkflowId, + function ( + input: WorkflowData + ): WorkflowData { + const orderReturn: ReturnDTO = useRemoteQueryStep({ + entry_point: "return", + fields: ["id", "status", "order_id", "canceled_at"], + variables: { id: input.return_id }, + list: false, + throw_if_key_not_found: true, + }) + + const order: OrderDTO = useRemoteQueryStep({ + entry_point: "orders", + fields: ["id", "status", "canceled_at", "items.*"], + variables: { id: orderReturn.order_id }, + list: false, + throw_if_key_not_found: true, + }).config({ name: "order-query" }) + + const orderChange: OrderChangeDTO = useRemoteQueryStep({ + entry_point: "order_change", + fields: ["id", "status", "version", "actions.*"], + variables: { + filters: { + order_id: orderReturn.order_id, + return_id: orderReturn.id, + status: [OrderChangeStatus.PENDING, OrderChangeStatus.REQUESTED], + }, + }, + list: false, + }).config({ name: "order-change-query" }) + + validationStep({ order, input, orderReturn, orderChange }) + + deleteOrderChangeActionsStep({ ids: [input.action_id] }) + + return previewOrderChangeStep(order.id) + } +) diff --git a/packages/core/types/src/workflow/order/request-item-return.ts b/packages/core/types/src/workflow/order/request-item-return.ts index a64ebb3756..90dd9791a0 100644 --- a/packages/core/types/src/workflow/order/request-item-return.ts +++ b/packages/core/types/src/workflow/order/request-item-return.ts @@ -7,10 +7,6 @@ export interface RequestItemReturnWorkflowInput { exchange_id?: string items: CreateReturnItem[] } -export interface DeleteRequestItemReturnWorkflowInput { - return_id: string - action_id: string -} export interface UpdateRequestItemReturnWorkflowInput { return_id: string @@ -39,7 +35,14 @@ export interface OrderClaimRequestItemReturnWorkflowInput { claim_id: string items: CreateReturnItem[] } -export interface DeleteOrderClaimRequestItemReturnWorkflowInput { + +export interface DeleteRequestItemReturnWorkflowInput { return_id: string action_id: string } + +export interface DeleteRequestItemReceiveReturnWorkflowInput + extends DeleteRequestItemReturnWorkflowInput {} + +export interface DeleteOrderClaimRequestItemReturnWorkflowInput + extends DeleteRequestItemReturnWorkflowInput {} diff --git a/packages/medusa/src/api/admin/returns/[id]/receive-items/[action_id]/route.ts b/packages/medusa/src/api/admin/returns/[id]/receive-items/[action_id]/route.ts index d5ad4867d2..f99cb2f3de 100644 --- a/packages/medusa/src/api/admin/returns/[id]/receive-items/[action_id]/route.ts +++ b/packages/medusa/src/api/admin/returns/[id]/receive-items/[action_id]/route.ts @@ -1,5 +1,5 @@ import { - removeItemReturnActionWorkflow, + removeItemReceiveReturnActionWorkflow, updateReceiveItemReturnRequestWorkflow, } from "@medusajs/core-flows" import { @@ -57,7 +57,7 @@ export const DELETE = async ( const { id, action_id } = req.params - const { result: orderPreview } = await removeItemReturnActionWorkflow( + const { result: orderPreview } = await removeItemReceiveReturnActionWorkflow( req.scope ).run({ input: {