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

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

View File

@@ -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",
{

View File

@@ -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`,
{

View File

@@ -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,
})

View File

@@ -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<IOrderModuleService>(
ModuleRegistrationName.ORDER
)

View File

@@ -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<IOrderModuleService>(
ModuleRegistrationName.ORDER
)

View File

@@ -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,
})

View File

@@ -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"

View File

@@ -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)

View File

@@ -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 })
)

View File

@@ -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,
})

View File

@@ -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,
})
}

View File

@@ -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,

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -114,6 +114,7 @@ export default class OrderChange {
@ManyToOne(() => Return, {
persist: false,
nullable: true,
})
return: Rel<Return>
@@ -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

View File

@@ -96,6 +96,7 @@ export default class OrderShippingMethod {
@ManyToOne(() => Return, {
persist: false,
nullable: true,
})
return: Rel<Return>
@@ -111,6 +112,7 @@ export default class OrderShippingMethod {
@ManyToOne(() => Exchange, {
persist: false,
nullable: true,
})
exchange: Rel<Exchange>
@@ -126,6 +128,7 @@ export default class OrderShippingMethod {
@ManyToOne(() => Claim, {
persist: false,
nullable: true,
})
claim: Rel<Claim>

View File

@@ -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

View File

@@ -108,6 +108,7 @@ export default class Transaction {
@ManyToOne(() => Return, {
persist: false,
nullable: true,
})
return: Rel<Return>
@@ -123,6 +124,7 @@ export default class Transaction {
@ManyToOne(() => Exchange, {
persist: false,
nullable: true,
})
exchange: Rel<Exchange>
@@ -138,6 +140,7 @@ export default class Transaction {
@ManyToOne(() => Claim, {
persist: false,
nullable: true,
})
claim: Rel<Claim>