From ed67d44d28af9ea642aa65cd488ab2695c28c671 Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Mon, 29 Jul 2024 12:51:51 -0300 Subject: [PATCH] fix(core-flows,order): update action (#8333) --- .../http/__tests__/claims/claims.spec.ts | 4 ++-- .../http/__tests__/returns/returns.spec.ts | 18 +++++++++++++++++ .../src/order/steps/cancel-order-change.ts | 17 +++++++++++++--- ....ts => create-claim-items-from-actions.ts} | 8 ++++---- ...ts => create-return-items-from-actions.ts} | 8 ++++---- .../src/order/steps/decline-order-change.ts | 17 +++++++++++++--- .../core/core-flows/src/order/steps/index.ts | 2 +- .../steps/update-order-change-actions.ts | 18 +++++++++++++---- .../workflows/claim/confirm-claim-request.ts | 8 ++++---- .../return/confirm-return-request.ts | 15 ++++++-------- .../api/admin/claims/[id]/request/route.ts | 20 ++++++++++++++++++- .../src/api/admin/returns/[id]/route.ts | 4 +++- packages/modules/order/src/models/claim.ts | 3 +++ packages/modules/order/src/models/exchange.ts | 3 +++ .../order/src/models/order-change-action.ts | 3 +++ .../modules/order/src/models/order-change.ts | 3 +++ .../order/src/models/order-shipping-method.ts | 3 +++ packages/modules/order/src/models/return.ts | 3 +++ .../modules/order/src/models/transaction.ts | 3 +++ 19 files changed, 124 insertions(+), 36 deletions(-) rename packages/core/core-flows/src/order/steps/{create-claim-items.ts => create-claim-items-from-actions.ts} (86%) rename packages/core/core-flows/src/order/steps/{create-return-items.ts => create-return-items-from-actions.ts} (85%) diff --git a/integration-tests/http/__tests__/claims/claims.spec.ts b/integration-tests/http/__tests__/claims/claims.spec.ts index 814ff58403..d04f13c63a 100644 --- a/integration-tests/http/__tests__/claims/claims.spec.ts +++ b/integration-tests/http/__tests__/claims/claims.spec.ts @@ -383,8 +383,8 @@ medusaIntegrationTestRunner({ ) }) - describe("Returns lifecycle", () => { - it.only("Full flow with 2 orders", async () => { + describe("Claims lifecycle", () => { + it("Full flow with 2 orders", async () => { let result = await api.post( "/admin/claims", { diff --git a/integration-tests/http/__tests__/returns/returns.spec.ts b/integration-tests/http/__tests__/returns/returns.spec.ts index 4aaf6ac883..eea25e1833 100644 --- a/integration-tests/http/__tests__/returns/returns.spec.ts +++ b/integration-tests/http/__tests__/returns/returns.spec.ts @@ -909,6 +909,24 @@ medusaIntegrationTestRunner({ }) ) + const receiveItemActionId = + result.data.order_preview.items[0].actions[0].id + + // invalid update (quantity 0) + result = await api + .post( + `/admin/returns/${returnId}/receive-items/${receiveItemActionId}`, + { + quantity: 0, + }, + adminHeaders + ) + .catch((e) => e) + + expect(result.response.data.message).toEqual( + `Quantity to receive return of item ${item.id} is required.` + ) + result = await api.post( `/admin/returns/${returnId}/dismiss-items`, { diff --git a/packages/core/core-flows/src/order/steps/cancel-order-change.ts b/packages/core/core-flows/src/order/steps/cancel-order-change.ts index 5094785206..72c6a54a0e 100644 --- a/packages/core/core-flows/src/order/steps/cancel-order-change.ts +++ b/packages/core/core-flows/src/order/steps/cancel-order-change.ts @@ -4,10 +4,11 @@ import { UpdateOrderChangeDTO, } from "@medusajs/types" import { - getSelectsAndRelationsFromObjectArray, ModuleRegistrationName, + deduplicate, + getSelectsAndRelationsFromObjectArray, } from "@medusajs/utils" -import { createStep, StepResponse } from "@medusajs/workflows-sdk" +import { StepResponse, createStep } from "@medusajs/workflows-sdk" export const cancelOrderChangeStepId = "cancel-order-change" export const cancelOrderChangeStep = createStep( @@ -22,8 +23,18 @@ export const cancelOrderChangeStep = createStep( { objectFields: ["metadata"] } ) + selects.push( + "order_id", + "return_id", + "claim_id", + "exchange_id", + "version", + "canceled_at", + "cancelled_by" + ) + const dataBeforeUpdate = await service.retrieveOrderChange(data.id, { - select: [...selects, "canceled_at"], + select: deduplicate(selects), relations, }) diff --git a/packages/core/core-flows/src/order/steps/create-claim-items.ts b/packages/core/core-flows/src/order/steps/create-claim-items-from-actions.ts similarity index 86% rename from packages/core/core-flows/src/order/steps/create-claim-items.ts rename to packages/core/core-flows/src/order/steps/create-claim-items-from-actions.ts index bbee4a2aca..ec1f8c6993 100644 --- a/packages/core/core-flows/src/order/steps/create-claim-items.ts +++ b/packages/core/core-flows/src/order/steps/create-claim-items-from-actions.ts @@ -2,14 +2,14 @@ import { IOrderModuleService, OrderChangeActionDTO } from "@medusajs/types" import { ChangeActionType, ModuleRegistrationName } from "@medusajs/utils" import { StepResponse, createStep } from "@medusajs/workflows-sdk" -type CreateOrderClaimItemsInput = { +type CreateOrderClaimItemsFromActionsInput = { changes: OrderChangeActionDTO[] claimId: string } -export const createOrderClaimItemsStep = createStep( - "create-claim-items", - async (input: CreateOrderClaimItemsInput, { container }) => { +export const createOrderClaimItemsFromActionsStep = createStep( + "create-claim-items-from-change-actions", + async (input: CreateOrderClaimItemsFromActionsInput, { container }) => { const orderModuleService = container.resolve( ModuleRegistrationName.ORDER ) diff --git a/packages/core/core-flows/src/order/steps/create-return-items.ts b/packages/core/core-flows/src/order/steps/create-return-items-from-actions.ts similarity index 85% rename from packages/core/core-flows/src/order/steps/create-return-items.ts rename to packages/core/core-flows/src/order/steps/create-return-items-from-actions.ts index 4840596b9f..6a8fc0e9fa 100644 --- a/packages/core/core-flows/src/order/steps/create-return-items.ts +++ b/packages/core/core-flows/src/order/steps/create-return-items-from-actions.ts @@ -6,14 +6,14 @@ import { import { ModuleRegistrationName } from "@medusajs/utils" import { StepResponse, createStep } from "@medusajs/workflows-sdk" -type CreateReturnItemsInput = { +type CreateReturnItemsFromActionsInput = { changes: OrderChangeActionDTO[] returnId: string } -export const createReturnItemsStep = createStep( - "create-return-items", - async (input: CreateReturnItemsInput, { container }) => { +export const createReturnItemsFromActionsStep = createStep( + "create-return-items-from-change-actions", + async (input: CreateReturnItemsFromActionsInput, { container }) => { const orderModuleService = container.resolve( ModuleRegistrationName.ORDER ) diff --git a/packages/core/core-flows/src/order/steps/decline-order-change.ts b/packages/core/core-flows/src/order/steps/decline-order-change.ts index 68b6e8dda6..4da1001939 100644 --- a/packages/core/core-flows/src/order/steps/decline-order-change.ts +++ b/packages/core/core-flows/src/order/steps/decline-order-change.ts @@ -4,10 +4,11 @@ import { UpdateOrderChangeDTO, } from "@medusajs/types" import { - getSelectsAndRelationsFromObjectArray, ModuleRegistrationName, + deduplicate, + getSelectsAndRelationsFromObjectArray, } from "@medusajs/utils" -import { createStep, StepResponse } from "@medusajs/workflows-sdk" +import { StepResponse, createStep } from "@medusajs/workflows-sdk" export const declineOrderChangeStepId = "decline-order-change" export const declineOrderChangeStep = createStep( @@ -21,9 +22,19 @@ export const declineOrderChangeStep = createStep( [data], { objectFields: ["metadata"] } ) + selects.push( + "order_id", + "return_id", + "claim_id", + "exchange_id", + "version", + "declined_at", + "declined_by", + "declined_reason" + ) const dataBeforeUpdate = await service.retrieveOrderChange(data.id, { - select: [...selects, "declined_at"], + select: deduplicate(selects), relations, }) diff --git a/packages/core/core-flows/src/order/steps/index.ts b/packages/core/core-flows/src/order/steps/index.ts index 7abbfbfb1e..68254d28a9 100644 --- a/packages/core/core-flows/src/order/steps/index.ts +++ b/packages/core/core-flows/src/order/steps/index.ts @@ -5,7 +5,7 @@ export * from "./cancel-order-change" export * from "./cancel-orders" export * from "./cancel-return" export * from "./complete-orders" -export * from "./create-claim-items" +export * from "./create-claim-items-from-actions" export * from "./create-claims" export * from "./create-complete-return" export * from "./create-exchanges" diff --git a/packages/core/core-flows/src/order/steps/update-order-change-actions.ts b/packages/core/core-flows/src/order/steps/update-order-change-actions.ts index 6e88c2020e..372814b534 100644 --- a/packages/core/core-flows/src/order/steps/update-order-change-actions.ts +++ b/packages/core/core-flows/src/order/steps/update-order-change-actions.ts @@ -3,10 +3,11 @@ import { UpdateOrderChangeActionDTO, } from "@medusajs/types" import { - getSelectsAndRelationsFromObjectArray, ModuleRegistrationName, + deduplicate, + getSelectsAndRelationsFromObjectArray, } from "@medusajs/utils" -import { createStep, StepResponse } from "@medusajs/workflows-sdk" +import { StepResponse, createStep } from "@medusajs/workflows-sdk" export const updateOrderChangeActionsStepId = "update-order-change-actions" export const updateOrderChangeActionsStep = createStep( @@ -17,11 +18,20 @@ export const updateOrderChangeActionsStep = createStep( ) const { selects, relations } = getSelectsAndRelationsFromObjectArray(data, { - objectFields: ["metadata"], + objectFields: ["metadata", "details"], }) + selects.push( + "order_id", + "return_id", + "claim_id", + "exchange_id", + "version", + "order_change_id" + ) + const dataBeforeUpdate = await service.listOrderChangeActions( { id: data.map((d) => d.id) }, - { relations, select: selects } + { relations, select: deduplicate(selects) } ) const updated = await service.updateOrderChangeActions(data) diff --git a/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts b/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts index f017ba6b02..0c2c7634b3 100644 --- a/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts +++ b/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts @@ -19,8 +19,8 @@ import { createFulfillmentWorkflow } from "../../../fulfillment/workflows/create import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment" import { previewOrderChangeStep } from "../../steps" import { confirmOrderChanges } from "../../steps/confirm-order-changes" -import { createOrderClaimItemsStep } from "../../steps/create-claim-items" -import { createReturnItemsStep } from "../../steps/create-return-items" +import { createOrderClaimItemsFromActionsStep } from "../../steps/create-claim-items-from-actions" +import { createReturnItemsFromActionsStep } from "../../steps/create-return-items-from-actions" import { throwIfIsCancelled, throwIfOrderChangeIsNotActive, @@ -227,8 +227,8 @@ export const confirmClaimRequestWorkflow = createWorkflow( const orderPreview = previewOrderChangeStep(order.id) const [createClaimItems, createdReturnItems] = parallelize( - createOrderClaimItemsStep(claimItems), - createReturnItemsStep(returnItems), + createOrderClaimItemsFromActionsStep(claimItems), + createReturnItemsFromActionsStep(returnItems), confirmOrderChanges({ changes: [orderChange], orderId: order.id }) ) diff --git a/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts b/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts index c8399b1e35..850b8d97ff 100644 --- a/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts +++ b/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts @@ -16,7 +16,7 @@ import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common" import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment" import { previewOrderChangeStep } from "../../steps" import { confirmOrderChanges } from "../../steps/confirm-order-changes" -import { createReturnItemsStep } from "../../steps/create-return-items" +import { createReturnItemsFromActionsStep } from "../../steps/create-return-items-from-actions" import { throwIfIsCancelled, throwIfOrderChangeIsNotActive, @@ -111,15 +111,12 @@ function extractReturnShippingOptionId({ orderPreview, orderReturn }) { continue } - for (const action of modifiedShippingMethod_.actions) { - if ( + returnShippingMethod = modifiedShippingMethod_.actions.find((action) => { + return ( action.action === ChangeActionType.SHIPPING_ADD && action.return_id === orderReturn.id - ) { - returnShippingMethod = shippingMethod - break - } - } + ) + }) } return returnShippingMethod.shipping_option_id } @@ -184,7 +181,7 @@ export const confirmReturnRequestWorkflow = createWorkflow( const orderPreview = previewOrderChangeStep(order.id) - const createdReturnItems = createReturnItemsStep({ + const createdReturnItems = createReturnItemsFromActionsStep({ returnId: orderReturn.id, changes: returnItemActions, }) diff --git a/packages/medusa/src/api/admin/claims/[id]/request/route.ts b/packages/medusa/src/api/admin/claims/[id]/request/route.ts index ab38108e4b..b555b8211d 100644 --- a/packages/medusa/src/api/admin/claims/[id]/request/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/request/route.ts @@ -7,6 +7,7 @@ import { AuthenticatedMedusaRequest, MedusaResponse, } from "../../../../../types/routing" +import { defaultAdminDetailsReturnFields } from "../../../returns/query-config" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -31,10 +32,27 @@ export const POST = async ( fields: req.remoteQueryConfig.fields, }) - const [orderClaim] = await remoteQuery(queryObject) + const [orderClaim] = await remoteQuery(queryObject, undefined, { + throwIfKeyNotFound: true, + }) + + let orderReturn + if (orderClaim.return_id) { + const [orderReturnData] = await remoteQuery( + remoteQueryObjectFromString({ + entryPoint: "return", + variables: { + id: orderClaim.return_id, + }, + fields: defaultAdminDetailsReturnFields, + }) + ) + orderReturn = orderReturnData + } res.json({ order_preview: result, claim: orderClaim, + return: orderReturn, }) } diff --git a/packages/medusa/src/api/admin/returns/[id]/route.ts b/packages/medusa/src/api/admin/returns/[id]/route.ts index 6d1de9e4b1..9822acd9d1 100644 --- a/packages/medusa/src/api/admin/returns/[id]/route.ts +++ b/packages/medusa/src/api/admin/returns/[id]/route.ts @@ -28,7 +28,9 @@ export const GET = async ( fields: req.remoteQueryConfig.fields, }) - const [orderReturn] = await remoteQuery(queryObject) + const [orderReturn] = await remoteQuery(queryObject, undefined, { + throwIfKeyNotFound: true, + }) res.json({ return: orderReturn, diff --git a/packages/modules/order/src/models/claim.ts b/packages/modules/order/src/models/claim.ts index 693508d432..d56dfc988c 100644 --- a/packages/modules/order/src/models/claim.ts +++ b/packages/modules/order/src/models/claim.ts @@ -2,6 +2,7 @@ import { BigNumberRawValue, DAL } from "@medusajs/types" import { BigNumber, ClaimType, + DALUtils, MikroOrmBigNumberProperty, createPsqlIndexStatementHelper, generateEntityId, @@ -12,6 +13,7 @@ import { Collection, Entity, Enum, + Filter, ManyToOne, OnInit, OneToMany, @@ -54,6 +56,7 @@ const ReturnIdIndex = createPsqlIndexStatementHelper({ }) @Entity({ tableName: "order_claim" }) +@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions) export default class OrderClaim { [OptionalProps]?: OptionalOrderClaimProps diff --git a/packages/modules/order/src/models/exchange.ts b/packages/modules/order/src/models/exchange.ts index 5ba980ac60..87b1683094 100644 --- a/packages/modules/order/src/models/exchange.ts +++ b/packages/modules/order/src/models/exchange.ts @@ -1,6 +1,7 @@ import { BigNumberRawValue, DAL } from "@medusajs/types" import { BigNumber, + DALUtils, MikroOrmBigNumberProperty, createPsqlIndexStatementHelper, generateEntityId, @@ -10,6 +11,7 @@ import { Cascade, Collection, Entity, + Filter, ManyToOne, OnInit, OneToMany, @@ -51,6 +53,7 @@ const ReturnIdIndex = createPsqlIndexStatementHelper({ }) @Entity({ tableName: "order_exchange" }) +@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions) export default class OrderExchange { [OptionalProps]?: OptionalOrderExchangeProps diff --git a/packages/modules/order/src/models/order-change-action.ts b/packages/modules/order/src/models/order-change-action.ts index 8e6276cdea..5addaf72de 100644 --- a/packages/modules/order/src/models/order-change-action.ts +++ b/packages/modules/order/src/models/order-change-action.ts @@ -108,6 +108,7 @@ export default class OrderChangeAction { @ManyToOne(() => Return, { persist: false, + nullable: true, }) return: Return @@ -123,6 +124,7 @@ export default class OrderChangeAction { @ManyToOne(() => OrderClaim, { persist: false, + nullable: true, }) claim: OrderClaim @@ -138,6 +140,7 @@ export default class OrderChangeAction { @ManyToOne(() => OrderExchange, { persist: false, + nullable: true, }) exchange: OrderExchange diff --git a/packages/modules/order/src/models/order-change.ts b/packages/modules/order/src/models/order-change.ts index 1c0949be9b..d0e8d5a9d9 100644 --- a/packages/modules/order/src/models/order-change.ts +++ b/packages/modules/order/src/models/order-change.ts @@ -114,6 +114,7 @@ export default class OrderChange { @ManyToOne(() => Return, { persist: false, + nullable: true, }) return: Rel @@ -129,6 +130,7 @@ export default class OrderChange { @ManyToOne(() => OrderClaim, { persist: false, + nullable: true, }) claim: OrderClaim @@ -144,6 +146,7 @@ export default class OrderChange { @ManyToOne(() => OrderExchange, { persist: false, + nullable: true, }) exchange: OrderExchange diff --git a/packages/modules/order/src/models/order-shipping-method.ts b/packages/modules/order/src/models/order-shipping-method.ts index dedb2585d4..2dbb3e6398 100644 --- a/packages/modules/order/src/models/order-shipping-method.ts +++ b/packages/modules/order/src/models/order-shipping-method.ts @@ -96,6 +96,7 @@ export default class OrderShippingMethod { @ManyToOne(() => Return, { persist: false, + nullable: true, }) return: Rel @@ -111,6 +112,7 @@ export default class OrderShippingMethod { @ManyToOne(() => Exchange, { persist: false, + nullable: true, }) exchange: Rel @@ -126,6 +128,7 @@ export default class OrderShippingMethod { @ManyToOne(() => Claim, { persist: false, + nullable: true, }) claim: Rel diff --git a/packages/modules/order/src/models/return.ts b/packages/modules/order/src/models/return.ts index 10b58216a9..7bb992ddf3 100644 --- a/packages/modules/order/src/models/return.ts +++ b/packages/modules/order/src/models/return.ts @@ -1,6 +1,7 @@ import { BigNumberRawValue, DAL } from "@medusajs/types" import { BigNumber, + DALUtils, MikroOrmBigNumberProperty, ReturnStatus, createPsqlIndexStatementHelper, @@ -12,6 +13,7 @@ import { Collection, Entity, Enum, + Filter, ManyToOne, OnInit, OneToMany, @@ -60,6 +62,7 @@ const ClaimIdIndex = createPsqlIndexStatementHelper({ }) @Entity({ tableName: "return" }) +@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions) export default class Return { [OptionalProps]?: OptionalReturnProps diff --git a/packages/modules/order/src/models/transaction.ts b/packages/modules/order/src/models/transaction.ts index 6847a456b7..7544addd1d 100644 --- a/packages/modules/order/src/models/transaction.ts +++ b/packages/modules/order/src/models/transaction.ts @@ -108,6 +108,7 @@ export default class Transaction { @ManyToOne(() => Return, { persist: false, + nullable: true, }) return: Rel @@ -123,6 +124,7 @@ export default class Transaction { @ManyToOne(() => Exchange, { persist: false, + nullable: true, }) exchange: Rel @@ -138,6 +140,7 @@ export default class Transaction { @ManyToOne(() => Claim, { persist: false, + nullable: true, }) claim: Rel