fix(core-flows,order): update action (#8333)

This commit is contained in:
Carlos R. L. Rodrigues authored and GitHub committed 2024-07-29 12:51:51 -03:00
1 parent 42c80e4264
commit ed67d44d28
19 files changed
+124 -36

No files matched your search

@@ -383,8 +383,8 @@ medusaIntegrationTestRunner({
) )
}) })
describe("Returns lifecycle", () => { describe("Claims lifecycle", () => {
it.only("Full flow with 2 orders", async () => { it("Full flow with 2 orders", async () => {
let result = await api.post( let result = await api.post(
"/admin/claims", "/admin/claims",
{ {
@@ -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( result = await api.post(
`/admin/returns/${returnId}/dismiss-items`, `/admin/returns/${returnId}/dismiss-items`,
{ {
@@ -4,10 +4,11 @@ import {
UpdateOrderChangeDTO, UpdateOrderChangeDTO,
} from "@medusajs/types" } from "@medusajs/types"
import { import {
getSelectsAndRelationsFromObjectArray,
ModuleRegistrationName, ModuleRegistrationName,
deduplicate,
getSelectsAndRelationsFromObjectArray,
} from "@medusajs/utils" } 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 cancelOrderChangeStepId = "cancel-order-change"
export const cancelOrderChangeStep = createStep( export const cancelOrderChangeStep = createStep(
@@ -22,8 +23,18 @@ export const cancelOrderChangeStep = createStep(
{ objectFields: ["metadata"] } { objectFields: ["metadata"] }
) )
selects.push(
"order_id",
"return_id",
"claim_id",
"exchange_id",
"version",
"canceled_at",
"cancelled_by"
)
const dataBeforeUpdate = await service.retrieveOrderChange(data.id, { const dataBeforeUpdate = await service.retrieveOrderChange(data.id, {
select: [...selects, "canceled_at"], select: deduplicate(selects),
relations, relations,
}) })
@@ -2,14 +2,14 @@ import { IOrderModuleService, OrderChangeActionDTO } from "@medusajs/types"
import { ChangeActionType, ModuleRegistrationName } from "@medusajs/utils" import { ChangeActionType, ModuleRegistrationName } from "@medusajs/utils"
import { StepResponse, createStep } from "@medusajs/workflows-sdk" import { StepResponse, createStep } from "@medusajs/workflows-sdk"
type CreateOrderClaimItemsInput = { type CreateOrderClaimItemsFromActionsInput = {
changes: OrderChangeActionDTO[] changes: OrderChangeActionDTO[]
claimId: string claimId: string
} }
export const createOrderClaimItemsStep = createStep( export const createOrderClaimItemsFromActionsStep = createStep(
"create-claim-items", "create-claim-items-from-change-actions",
async (input: CreateOrderClaimItemsInput, { container }) => { async (input: CreateOrderClaimItemsFromActionsInput, { container }) => {
const orderModuleService = container.resolve<IOrderModuleService>( const orderModuleService = container.resolve<IOrderModuleService>(
ModuleRegistrationName.ORDER ModuleRegistrationName.ORDER
) )
@@ -6,14 +6,14 @@ import {
import { ModuleRegistrationName } from "@medusajs/utils" import { ModuleRegistrationName } from "@medusajs/utils"
import { StepResponse, createStep } from "@medusajs/workflows-sdk" import { StepResponse, createStep } from "@medusajs/workflows-sdk"
type CreateReturnItemsInput = { type CreateReturnItemsFromActionsInput = {
changes: OrderChangeActionDTO[] changes: OrderChangeActionDTO[]
returnId: string returnId: string
} }
export const createReturnItemsStep = createStep( export const createReturnItemsFromActionsStep = createStep(
"create-return-items", "create-return-items-from-change-actions",
async (input: CreateReturnItemsInput, { container }) => { async (input: CreateReturnItemsFromActionsInput, { container }) => {
const orderModuleService = container.resolve<IOrderModuleService>( const orderModuleService = container.resolve<IOrderModuleService>(
ModuleRegistrationName.ORDER ModuleRegistrationName.ORDER
) )
@@ -4,10 +4,11 @@ import {
UpdateOrderChangeDTO, UpdateOrderChangeDTO,
} from "@medusajs/types" } from "@medusajs/types"
import { import {
getSelectsAndRelationsFromObjectArray,
ModuleRegistrationName, ModuleRegistrationName,
deduplicate,
getSelectsAndRelationsFromObjectArray,
} from "@medusajs/utils" } 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 declineOrderChangeStepId = "decline-order-change"
export const declineOrderChangeStep = createStep( export const declineOrderChangeStep = createStep(
@@ -21,9 +22,19 @@ export const declineOrderChangeStep = createStep(
[data], [data],
{ objectFields: ["metadata"] } { 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, { const dataBeforeUpdate = await service.retrieveOrderChange(data.id, {
select: [...selects, "declined_at"], select: deduplicate(selects),
relations, relations,
}) })
@@ -5,7 +5,7 @@ export * from "./cancel-order-change"
export * from "./cancel-orders" export * from "./cancel-orders"
export * from "./cancel-return" export * from "./cancel-return"
export * from "./complete-orders" export * from "./complete-orders"
export * from "./create-claim-items" export * from "./create-claim-items-from-actions"
export * from "./create-claims" export * from "./create-claims"
export * from "./create-complete-return" export * from "./create-complete-return"
export * from "./create-exchanges" export * from "./create-exchanges"
@@ -3,10 +3,11 @@ import {
UpdateOrderChangeActionDTO, UpdateOrderChangeActionDTO,
} from "@medusajs/types" } from "@medusajs/types"
import { import {
getSelectsAndRelationsFromObjectArray,
ModuleRegistrationName, ModuleRegistrationName,
deduplicate,
getSelectsAndRelationsFromObjectArray,
} from "@medusajs/utils" } 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 updateOrderChangeActionsStepId = "update-order-change-actions"
export const updateOrderChangeActionsStep = createStep( export const updateOrderChangeActionsStep = createStep(
@@ -17,11 +18,20 @@ export const updateOrderChangeActionsStep = createStep(
) )
const { selects, relations } = getSelectsAndRelationsFromObjectArray(data, { 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( const dataBeforeUpdate = await service.listOrderChangeActions(
{ id: data.map((d) => d.id) }, { id: data.map((d) => d.id) },
{ relations, select: selects } { relations, select: deduplicate(selects) }
) )
const updated = await service.updateOrderChangeActions(data) const updated = await service.updateOrderChangeActions(data)
@@ -19,8 +19,8 @@ import { createFulfillmentWorkflow } from "../../../fulfillment/workflows/create
import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment" import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment"
import { previewOrderChangeStep } from "../../steps" import { previewOrderChangeStep } from "../../steps"
import { confirmOrderChanges } from "../../steps/confirm-order-changes" import { confirmOrderChanges } from "../../steps/confirm-order-changes"
import { createOrderClaimItemsStep } from "../../steps/create-claim-items" import { createOrderClaimItemsFromActionsStep } from "../../steps/create-claim-items-from-actions"
import { createReturnItemsStep } from "../../steps/create-return-items" import { createReturnItemsFromActionsStep } from "../../steps/create-return-items-from-actions"
import { import {
throwIfIsCancelled, throwIfIsCancelled,
throwIfOrderChangeIsNotActive, throwIfOrderChangeIsNotActive,
@@ -227,8 +227,8 @@ export const confirmClaimRequestWorkflow = createWorkflow(
const orderPreview = previewOrderChangeStep(order.id) const orderPreview = previewOrderChangeStep(order.id)
const [createClaimItems, createdReturnItems] = parallelize( const [createClaimItems, createdReturnItems] = parallelize(
createOrderClaimItemsStep(claimItems), createOrderClaimItemsFromActionsStep(claimItems),
createReturnItemsStep(returnItems), createReturnItemsFromActionsStep(returnItems),
confirmOrderChanges({ changes: [orderChange], orderId: order.id }) confirmOrderChanges({ changes: [orderChange], orderId: order.id })
) )
@@ -16,7 +16,7 @@ import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common"
import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment" import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment"
import { previewOrderChangeStep } from "../../steps" import { previewOrderChangeStep } from "../../steps"
import { confirmOrderChanges } from "../../steps/confirm-order-changes" import { confirmOrderChanges } from "../../steps/confirm-order-changes"
import { createReturnItemsStep } from "../../steps/create-return-items" import { createReturnItemsFromActionsStep } from "../../steps/create-return-items-from-actions"
import { import {
throwIfIsCancelled, throwIfIsCancelled,
throwIfOrderChangeIsNotActive, throwIfOrderChangeIsNotActive,
@@ -111,15 +111,12 @@ function extractReturnShippingOptionId({ orderPreview, orderReturn }) {
continue continue
} }
for (const action of modifiedShippingMethod_.actions) { returnShippingMethod = modifiedShippingMethod_.actions.find((action) => {
if ( return (
action.action === ChangeActionType.SHIPPING_ADD && action.action === ChangeActionType.SHIPPING_ADD &&
action.return_id === orderReturn.id action.return_id === orderReturn.id
) { )
returnShippingMethod = shippingMethod })
break
}
}
} }
return returnShippingMethod.shipping_option_id return returnShippingMethod.shipping_option_id
} }
@@ -184,7 +181,7 @@ export const confirmReturnRequestWorkflow = createWorkflow(
const orderPreview = previewOrderChangeStep(order.id) const orderPreview = previewOrderChangeStep(order.id)
const createdReturnItems = createReturnItemsStep({ const createdReturnItems = createReturnItemsFromActionsStep({
returnId: orderReturn.id, returnId: orderReturn.id,
changes: returnItemActions, changes: returnItemActions,
}) })
@@ -7,6 +7,7 @@ import {
AuthenticatedMedusaRequest, AuthenticatedMedusaRequest,
MedusaResponse, MedusaResponse,
} from "../../../../../types/routing" } from "../../../../../types/routing"
import { defaultAdminDetailsReturnFields } from "../../../returns/query-config"
export const POST = async ( export const POST = async (
req: AuthenticatedMedusaRequest, req: AuthenticatedMedusaRequest,
@@ -31,10 +32,27 @@ export const POST = async (
fields: req.remoteQueryConfig.fields, 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({ res.json({
order_preview: result, order_preview: result,
claim: orderClaim, claim: orderClaim,
return: orderReturn,
}) })
} }
@@ -28,7 +28,9 @@ export const GET = async (
fields: req.remoteQueryConfig.fields, fields: req.remoteQueryConfig.fields,
}) })
const [orderReturn] = await remoteQuery(queryObject) const [orderReturn] = await remoteQuery(queryObject, undefined, {
throwIfKeyNotFound: true,
})
res.json({ res.json({
return: orderReturn, return: orderReturn,
@@ -2,6 +2,7 @@ import { BigNumberRawValue, DAL } from "@medusajs/types"
import { import {
BigNumber, BigNumber,
ClaimType, ClaimType,
DALUtils,
MikroOrmBigNumberProperty, MikroOrmBigNumberProperty,
createPsqlIndexStatementHelper, createPsqlIndexStatementHelper,
generateEntityId, generateEntityId,
@@ -12,6 +13,7 @@ import {
Collection, Collection,
Entity, Entity,
Enum, Enum,
Filter,
ManyToOne, ManyToOne,
OnInit, OnInit,
OneToMany, OneToMany,
@@ -54,6 +56,7 @@ const ReturnIdIndex = createPsqlIndexStatementHelper({
}) })
@Entity({ tableName: "order_claim" }) @Entity({ tableName: "order_claim" })
@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions)
export default class OrderClaim { export default class OrderClaim {
[OptionalProps]?: OptionalOrderClaimProps [OptionalProps]?: OptionalOrderClaimProps
@@ -1,6 +1,7 @@
import { BigNumberRawValue, DAL } from "@medusajs/types" import { BigNumberRawValue, DAL } from "@medusajs/types"
import { import {
BigNumber, BigNumber,
DALUtils,
MikroOrmBigNumberProperty, MikroOrmBigNumberProperty,
createPsqlIndexStatementHelper, createPsqlIndexStatementHelper,
generateEntityId, generateEntityId,
@@ -10,6 +11,7 @@ import {
Cascade, Cascade,
Collection, Collection,
Entity, Entity,
Filter,
ManyToOne, ManyToOne,
OnInit, OnInit,
OneToMany, OneToMany,
@@ -51,6 +53,7 @@ const ReturnIdIndex = createPsqlIndexStatementHelper({
}) })
@Entity({ tableName: "order_exchange" }) @Entity({ tableName: "order_exchange" })
@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions)
export default class OrderExchange { export default class OrderExchange {
[OptionalProps]?: OptionalOrderExchangeProps [OptionalProps]?: OptionalOrderExchangeProps
@@ -108,6 +108,7 @@ export default class OrderChangeAction {
@ManyToOne(() => Return, { @ManyToOne(() => Return, {
persist: false, persist: false,
nullable: true,
}) })
return: Return return: Return
@@ -123,6 +124,7 @@ export default class OrderChangeAction {
@ManyToOne(() => OrderClaim, { @ManyToOne(() => OrderClaim, {
persist: false, persist: false,
nullable: true,
}) })
claim: OrderClaim claim: OrderClaim
@@ -138,6 +140,7 @@ export default class OrderChangeAction {
@ManyToOne(() => OrderExchange, { @ManyToOne(() => OrderExchange, {
persist: false, persist: false,
nullable: true,
}) })
exchange: OrderExchange exchange: OrderExchange
@@ -114,6 +114,7 @@ export default class OrderChange {
@ManyToOne(() => Return, { @ManyToOne(() => Return, {
persist: false, persist: false,
nullable: true,
}) })
return: Rel<Return> return: Rel<Return>
@@ -129,6 +130,7 @@ export default class OrderChange {
@ManyToOne(() => OrderClaim, { @ManyToOne(() => OrderClaim, {
persist: false, persist: false,
nullable: true,
}) })
claim: OrderClaim claim: OrderClaim
@@ -144,6 +146,7 @@ export default class OrderChange {
@ManyToOne(() => OrderExchange, { @ManyToOne(() => OrderExchange, {
persist: false, persist: false,
nullable: true,
}) })
exchange: OrderExchange exchange: OrderExchange
@@ -96,6 +96,7 @@ export default class OrderShippingMethod {
@ManyToOne(() => Return, { @ManyToOne(() => Return, {
persist: false, persist: false,
nullable: true,
}) })
return: Rel<Return> return: Rel<Return>
@@ -111,6 +112,7 @@ export default class OrderShippingMethod {
@ManyToOne(() => Exchange, { @ManyToOne(() => Exchange, {
persist: false, persist: false,
nullable: true,
}) })
exchange: Rel<Exchange> exchange: Rel<Exchange>
@@ -126,6 +128,7 @@ export default class OrderShippingMethod {
@ManyToOne(() => Claim, { @ManyToOne(() => Claim, {
persist: false, persist: false,
nullable: true,
}) })
claim: Rel<Claim> claim: Rel<Claim>
@@ -1,6 +1,7 @@
import { BigNumberRawValue, DAL } from "@medusajs/types" import { BigNumberRawValue, DAL } from "@medusajs/types"
import { import {
BigNumber, BigNumber,
DALUtils,
MikroOrmBigNumberProperty, MikroOrmBigNumberProperty,
ReturnStatus, ReturnStatus,
createPsqlIndexStatementHelper, createPsqlIndexStatementHelper,
@@ -12,6 +13,7 @@ import {
Collection, Collection,
Entity, Entity,
Enum, Enum,
Filter,
ManyToOne, ManyToOne,
OnInit, OnInit,
OneToMany, OneToMany,
@@ -60,6 +62,7 @@ const ClaimIdIndex = createPsqlIndexStatementHelper({
}) })
@Entity({ tableName: "return" }) @Entity({ tableName: "return" })
@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions)
export default class Return { export default class Return {
[OptionalProps]?: OptionalReturnProps [OptionalProps]?: OptionalReturnProps
@@ -108,6 +108,7 @@ export default class Transaction {
@ManyToOne(() => Return, { @ManyToOne(() => Return, {
persist: false, persist: false,
nullable: true,
}) })
return: Rel<Return> return: Rel<Return>
@@ -123,6 +124,7 @@ export default class Transaction {
@ManyToOne(() => Exchange, { @ManyToOne(() => Exchange, {
persist: false, persist: false,
nullable: true,
}) })
exchange: Rel<Exchange> exchange: Rel<Exchange>
@@ -138,6 +140,7 @@ export default class Transaction {
@ManyToOne(() => Claim, { @ManyToOne(() => Claim, {
persist: false, persist: false,
nullable: true,
}) })
claim: Rel<Claim> claim: Rel<Claim>