feat: Add requested_at + open status to return (#8391)
* feat: Add requested_at + open status to return * Update return in confirm claim workflow * Revert snapshot * feat: Change OrderChangeType * fix test
This commit is contained in:
1 parent
f81652bf6e
commit
dbd0b18726
17 files changed
+89
-34
No files matched your search
@@ -413,7 +413,7 @@ medusaIntegrationTestRunner({
|
|||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
order_id: order.id,
|
order_id: order.id,
|
||||||
status: "requested",
|
status: "open",
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -421,7 +421,7 @@ medusaIntegrationTestRunner({
|
|||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
return_id: returnId,
|
return_id: returnId,
|
||||||
change_type: "return",
|
change_type: "return_request",
|
||||||
description: "Test",
|
description: "Test",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
order_id: order.id,
|
order_id: order.id,
|
||||||
@@ -485,7 +485,7 @@ medusaIntegrationTestRunner({
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
// Remove item return requesta
|
// Remove item return request
|
||||||
const returnItemActionId =
|
const returnItemActionId =
|
||||||
result.data.order_preview.items[0].actions[0].id
|
result.data.order_preview.items[0].actions[0].id
|
||||||
result = await api.delete(
|
result = await api.delete(
|
||||||
@@ -693,6 +693,9 @@ medusaIntegrationTestRunner({
|
|||||||
|
|
||||||
expect(result.data.return).toEqual(
|
expect(result.data.return).toEqual(
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
|
id: returnId,
|
||||||
|
status: "requested",
|
||||||
|
requested_at: expect.any(String),
|
||||||
items: [
|
items: [
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
reason: expect.objectContaining({
|
reason: expect.objectContaining({
|
||||||
@@ -872,7 +875,7 @@ medusaIntegrationTestRunner({
|
|||||||
expect(result.data.order.order_change).toEqual(
|
expect(result.data.order.order_change).toEqual(
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
return_id: returnId,
|
return_id: returnId,
|
||||||
change_type: "return",
|
change_type: "return_receive",
|
||||||
status: "pending",
|
status: "pending",
|
||||||
internal_note: "Test internal note",
|
internal_note: "Test internal note",
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -394,7 +394,7 @@ medusaIntegrationTestRunner({
|
|||||||
const [returnOrder] = await remoteQuery(remoteQueryObject)
|
const [returnOrder] = await remoteQuery(remoteQueryObject)
|
||||||
|
|
||||||
expect(returnOrder.order_id).toEqual(order.id)
|
expect(returnOrder.order_id).toEqual(order.id)
|
||||||
expect(returnOrder.status).toEqual("requested")
|
expect(returnOrder.status).toEqual("open")
|
||||||
expect(returnOrder.id).toBeDefined()
|
expect(returnOrder.id).toBeDefined()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -5,7 +5,12 @@ import {
|
|||||||
OrderClaimDTO,
|
OrderClaimDTO,
|
||||||
OrderDTO,
|
OrderDTO,
|
||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
import { ChangeActionType, Modules, OrderChangeStatus } from "@medusajs/utils"
|
import {
|
||||||
|
ChangeActionType,
|
||||||
|
Modules,
|
||||||
|
OrderChangeStatus,
|
||||||
|
ReturnStatus,
|
||||||
|
} from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createStep,
|
createStep,
|
||||||
@@ -17,7 +22,7 @@ import {
|
|||||||
import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common"
|
import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common"
|
||||||
import { createFulfillmentWorkflow } from "../../../fulfillment/workflows/create-fulfillment"
|
import { createFulfillmentWorkflow } from "../../../fulfillment/workflows/create-fulfillment"
|
||||||
import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment"
|
import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment"
|
||||||
import { previewOrderChangeStep } from "../../steps"
|
import { previewOrderChangeStep, updateReturnsStep } from "../../steps"
|
||||||
import { createOrderClaimItemsFromActionsStep } from "../../steps/claim/create-claim-items-from-actions"
|
import { createOrderClaimItemsFromActionsStep } from "../../steps/claim/create-claim-items-from-actions"
|
||||||
import { confirmOrderChanges } from "../../steps/confirm-order-changes"
|
import { confirmOrderChanges } from "../../steps/confirm-order-changes"
|
||||||
import { createReturnItemsFromActionsStep } from "../../steps/return/create-return-items-from-actions"
|
import { createReturnItemsFromActionsStep } from "../../steps/return/create-return-items-from-actions"
|
||||||
@@ -239,6 +244,14 @@ export const confirmClaimRequestWorkflow = createWorkflow(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
updateReturnsStep([
|
||||||
|
{
|
||||||
|
id: returnId,
|
||||||
|
status: ReturnStatus.REQUESTED,
|
||||||
|
requested_at: new Date(),
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
const claimId = transform({ createClaimItems }, ({ createClaimItems }) => {
|
const claimId = transform({ createClaimItems }, ({ createClaimItems }) => {
|
||||||
return createClaimItems?.[0]?.claim_id
|
return createClaimItems?.[0]?.claim_id
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ export const beginReceiveReturnWorkflow = createWorkflow(
|
|||||||
{ orderReturn, order, input },
|
{ orderReturn, order, input },
|
||||||
({ orderReturn, order, input }) => {
|
({ orderReturn, order, input }) => {
|
||||||
return {
|
return {
|
||||||
change_type: "return" as const,
|
change_type: "return_receive" as const,
|
||||||
order_id: order.id,
|
order_id: order.id,
|
||||||
return_id: orderReturn.id,
|
return_id: orderReturn.id,
|
||||||
created_by: input.created_by,
|
created_by: input.created_by,
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export const beginReturnOrderWorkflow = createWorkflow(
|
|||||||
{ created, input },
|
{ created, input },
|
||||||
({ created, input }) => {
|
({ created, input }) => {
|
||||||
return {
|
return {
|
||||||
change_type: "return" as const,
|
change_type: "return_request" as const,
|
||||||
order_id: input.order_id,
|
order_id: input.order_id,
|
||||||
return_id: created[0].id,
|
return_id: created[0].id,
|
||||||
created_by: input.created_by,
|
created_by: input.created_by,
|
||||||
|
|||||||
@@ -4,17 +4,23 @@ import {
|
|||||||
OrderDTO,
|
OrderDTO,
|
||||||
ReturnDTO,
|
ReturnDTO,
|
||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
import { ChangeActionType, Modules, OrderChangeStatus } from "@medusajs/utils"
|
import {
|
||||||
|
ChangeActionType,
|
||||||
|
Modules,
|
||||||
|
OrderChangeStatus,
|
||||||
|
ReturnStatus,
|
||||||
|
} from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
WorkflowResponse,
|
WorkflowResponse,
|
||||||
createStep,
|
createStep,
|
||||||
createWorkflow,
|
createWorkflow,
|
||||||
|
parallelize,
|
||||||
transform,
|
transform,
|
||||||
when,
|
when,
|
||||||
} from "@medusajs/workflows-sdk"
|
} from "@medusajs/workflows-sdk"
|
||||||
import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common"
|
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, updateReturnsStep } from "../../steps"
|
||||||
import { confirmOrderChanges } from "../../steps/confirm-order-changes"
|
import { confirmOrderChanges } from "../../steps/confirm-order-changes"
|
||||||
import { createReturnItemsFromActionsStep } from "../../steps/return/create-return-items-from-actions"
|
import { createReturnItemsFromActionsStep } from "../../steps/return/create-return-items-from-actions"
|
||||||
import {
|
import {
|
||||||
@@ -232,7 +238,16 @@ export const confirmReturnRequestWorkflow = createWorkflow(
|
|||||||
createRemoteLinkStep(link)
|
createRemoteLinkStep(link)
|
||||||
})
|
})
|
||||||
|
|
||||||
confirmOrderChanges({ changes: [orderChange], orderId: order.id })
|
parallelize(
|
||||||
|
updateReturnsStep([
|
||||||
|
{
|
||||||
|
id: orderReturn.id,
|
||||||
|
status: ReturnStatus.REQUESTED,
|
||||||
|
requested_at: new Date(),
|
||||||
|
},
|
||||||
|
]),
|
||||||
|
confirmOrderChanges({ changes: [orderChange], orderId: order.id })
|
||||||
|
)
|
||||||
|
|
||||||
return new WorkflowResponse(orderPreview)
|
return new WorkflowResponse(orderPreview)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -259,7 +259,12 @@ export interface CreateOrderChangeDTO {
|
|||||||
return_id?: string
|
return_id?: string
|
||||||
claim_id?: string
|
claim_id?: string
|
||||||
exchange_id?: string
|
exchange_id?: string
|
||||||
change_type?: "return" | "exchange" | "claim" | "edit"
|
change_type?:
|
||||||
|
| "return_request"
|
||||||
|
| "return_receive"
|
||||||
|
| "exchange"
|
||||||
|
| "claim"
|
||||||
|
| "edit"
|
||||||
description?: string
|
description?: string
|
||||||
internal_note?: string | null
|
internal_note?: string | null
|
||||||
requested_by?: string
|
requested_by?: string
|
||||||
@@ -437,6 +442,13 @@ export interface CreateOrderReturnDTO extends BaseOrderBundledActionsDTO {
|
|||||||
exchange_id?: string
|
exchange_id?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ReturnStatus =
|
||||||
|
| "open"
|
||||||
|
| "requested"
|
||||||
|
| "received"
|
||||||
|
| "partially_received"
|
||||||
|
| "canceled"
|
||||||
|
|
||||||
export interface UpdateReturnDTO {
|
export interface UpdateReturnDTO {
|
||||||
id: string
|
id: string
|
||||||
location_id?: string
|
location_id?: string
|
||||||
@@ -453,6 +465,8 @@ export interface UpdateReturnDTO {
|
|||||||
return_id?: string | null
|
return_id?: string | null
|
||||||
metadata?: Record<string, unknown> | null
|
metadata?: Record<string, unknown> | null
|
||||||
}[]
|
}[]
|
||||||
|
status?: ReturnStatus
|
||||||
|
requested_at?: Date
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface UpdateOrderClaimDTO {
|
export interface UpdateOrderClaimDTO {
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ export enum OrderChangeStatus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export enum OrderChangeType {
|
export enum OrderChangeType {
|
||||||
RETURN = "return",
|
RETURN_REQUEST = "return_request",
|
||||||
|
RETURN_RECEIVE = "return_receive",
|
||||||
EXCHANGE = "exchange",
|
EXCHANGE = "exchange",
|
||||||
CLAIM = "claim",
|
CLAIM = "claim",
|
||||||
EDIT = "edit",
|
EDIT = "edit",
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ export enum OrderStatus {
|
|||||||
* The return's status.
|
* The return's status.
|
||||||
*/
|
*/
|
||||||
export enum ReturnStatus {
|
export enum ReturnStatus {
|
||||||
|
/**
|
||||||
|
* The return is open.
|
||||||
|
*/
|
||||||
|
OPEN = "open",
|
||||||
/**
|
/**
|
||||||
* The return is requested.
|
* The return is requested.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ export const defaultAdminReturnFields = [
|
|||||||
"created_at",
|
"created_at",
|
||||||
"updated_at",
|
"updated_at",
|
||||||
"canceled_at",
|
"canceled_at",
|
||||||
|
"requested_at",
|
||||||
]
|
]
|
||||||
|
|
||||||
export const defaultAdminDetailsReturnFields = [
|
export const defaultAdminDetailsReturnFields = [
|
||||||
|
|||||||
@@ -2627,4 +2627,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { Migration } from "@mikro-orm/migrations"
|
||||||
|
|
||||||
|
export class Migration20240801085921 extends Migration {
|
||||||
|
async up(): Promise<void> {
|
||||||
|
this.addSql(`
|
||||||
|
ALTER TABLE "return"
|
||||||
|
ADD COLUMN IF NOT exists "requested_at" timestamptz NULL;
|
||||||
|
|
||||||
|
ALTER TYPE return_status_enum ADD VALUE 'open';
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@ import {
|
|||||||
DALUtils,
|
DALUtils,
|
||||||
generateEntityId,
|
generateEntityId,
|
||||||
OrderChangeStatus,
|
OrderChangeStatus,
|
||||||
OrderChangeType,
|
|
||||||
} from "@medusajs/utils"
|
} from "@medusajs/utils"
|
||||||
import {
|
import {
|
||||||
BeforeCreate,
|
BeforeCreate,
|
||||||
@@ -21,7 +20,7 @@ import {
|
|||||||
Property,
|
Property,
|
||||||
Rel,
|
Rel,
|
||||||
} from "@mikro-orm/core"
|
} from "@mikro-orm/core"
|
||||||
import {} from "@types"
|
import { } from "@types"
|
||||||
import OrderClaim from "./claim"
|
import OrderClaim from "./claim"
|
||||||
import OrderExchange from "./exchange"
|
import OrderExchange from "./exchange"
|
||||||
import Order from "./order"
|
import Order from "./order"
|
||||||
@@ -60,12 +59,6 @@ const OrderChangeStatusIndex = createPsqlIndexStatementHelper({
|
|||||||
where: "deleted_at IS NOT NULL",
|
where: "deleted_at IS NOT NULL",
|
||||||
})
|
})
|
||||||
|
|
||||||
const OrderChangeTypeIndex = createPsqlIndexStatementHelper({
|
|
||||||
tableName: "order_change",
|
|
||||||
columns: "change_type",
|
|
||||||
where: "deleted_at IS NOT NULL",
|
|
||||||
})
|
|
||||||
|
|
||||||
const DeletedAtIndex = createPsqlIndexStatementHelper({
|
const DeletedAtIndex = createPsqlIndexStatementHelper({
|
||||||
tableName: "order_change",
|
tableName: "order_change",
|
||||||
columns: "deleted_at",
|
columns: "deleted_at",
|
||||||
@@ -154,9 +147,8 @@ export default class OrderChange {
|
|||||||
@VersionIndex.MikroORMIndex()
|
@VersionIndex.MikroORMIndex()
|
||||||
version: number
|
version: number
|
||||||
|
|
||||||
@Enum({ items: () => OrderChangeType, nullable: true })
|
@Property({ columnType: "text", nullable: true })
|
||||||
@OrderChangeTypeIndex.MikroORMIndex()
|
change_type: string | null = null
|
||||||
change_type: OrderChangeType | null = null
|
|
||||||
|
|
||||||
@OneToMany(() => OrderChangeAction, (action) => action.order_change, {
|
@OneToMany(() => OrderChangeAction, (action) => action.order_change, {
|
||||||
cascade: [Cascade.PERSIST, "soft-remove" as Cascade],
|
cascade: [Cascade.PERSIST, "soft-remove" as Cascade],
|
||||||
|
|||||||
@@ -114,8 +114,8 @@ export default class Return {
|
|||||||
@DisplayIdIndex.MikroORMIndex()
|
@DisplayIdIndex.MikroORMIndex()
|
||||||
display_id: number
|
display_id: number
|
||||||
|
|
||||||
@Enum({ items: () => ReturnStatus, default: ReturnStatus.REQUESTED })
|
@Enum({ items: () => ReturnStatus, default: ReturnStatus.OPEN })
|
||||||
status: ReturnStatus = ReturnStatus.REQUESTED
|
status: ReturnStatus = ReturnStatus.OPEN
|
||||||
|
|
||||||
@Property({ columnType: "text", nullable: true })
|
@Property({ columnType: "text", nullable: true })
|
||||||
location_id: string | null = null
|
location_id: string | null = null
|
||||||
@@ -172,6 +172,9 @@ export default class Return {
|
|||||||
@ReturnDeletedAtIndex.MikroORMIndex()
|
@ReturnDeletedAtIndex.MikroORMIndex()
|
||||||
deleted_at: Date | null = null
|
deleted_at: Date | null = null
|
||||||
|
|
||||||
|
@Property({ columnType: "timestamptz", nullable: true })
|
||||||
|
requested_at: Date | null = null
|
||||||
|
|
||||||
@Property({ columnType: "timestamptz", nullable: true })
|
@Property({ columnType: "timestamptz", nullable: true })
|
||||||
received_at: Date | null = null
|
received_at: Date | null = null
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ async function createOrderChange(
|
|||||||
{
|
{
|
||||||
order_id: data.order_id,
|
order_id: data.order_id,
|
||||||
return_id: returnRef.id,
|
return_id: returnRef.id,
|
||||||
change_type: OrderChangeType.RETURN,
|
change_type: OrderChangeType.RETURN_REQUEST,
|
||||||
reference: "return",
|
reference: "return",
|
||||||
reference_id: returnRef.id,
|
reference_id: returnRef.id,
|
||||||
description: data.description,
|
description: data.description,
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ async function createOrderChange(
|
|||||||
return_id: returnEntry.id,
|
return_id: returnEntry.id,
|
||||||
reference: "return",
|
reference: "return",
|
||||||
reference_id: returnEntry.id,
|
reference_id: returnEntry.id,
|
||||||
change_type: OrderChangeType.RETURN,
|
change_type: OrderChangeType.RETURN_RECEIVE,
|
||||||
description: data.description,
|
description: data.description,
|
||||||
internal_note: data.internal_note,
|
internal_note: data.internal_note,
|
||||||
created_by: data.created_by,
|
created_by: data.created_by,
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
import { OrderTypes } from "@medusajs/types"
|
import { OrderTypes } from "@medusajs/types"
|
||||||
import { OrderChangeType } from "@medusajs/utils"
|
|
||||||
|
|
||||||
export interface CreateOrderChangeDTO extends OrderTypes.CreateOrderChangeDTO {
|
export interface CreateOrderChangeDTO extends OrderTypes.CreateOrderChangeDTO {}
|
||||||
change_type?: OrderChangeType
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user