diff --git a/integration-tests/http/__tests__/returns/returns.spec.ts b/integration-tests/http/__tests__/returns/returns.spec.ts index eea25e1833..6fdb346f28 100644 --- a/integration-tests/http/__tests__/returns/returns.spec.ts +++ b/integration-tests/http/__tests__/returns/returns.spec.ts @@ -413,7 +413,7 @@ medusaIntegrationTestRunner({ expect.objectContaining({ id: expect.any(String), order_id: order.id, - status: "requested", + status: "open", }) ) @@ -421,7 +421,7 @@ medusaIntegrationTestRunner({ expect.objectContaining({ id: expect.any(String), return_id: returnId, - change_type: "return", + change_type: "return_request", description: "Test", status: "pending", order_id: order.id, @@ -485,7 +485,7 @@ medusaIntegrationTestRunner({ }) ) - // Remove item return requesta + // Remove item return request const returnItemActionId = result.data.order_preview.items[0].actions[0].id result = await api.delete( @@ -693,6 +693,9 @@ medusaIntegrationTestRunner({ expect(result.data.return).toEqual( expect.objectContaining({ + id: returnId, + status: "requested", + requested_at: expect.any(String), items: [ expect.objectContaining({ reason: expect.objectContaining({ @@ -872,7 +875,7 @@ medusaIntegrationTestRunner({ expect(result.data.order.order_change).toEqual( expect.objectContaining({ return_id: returnId, - change_type: "return", + change_type: "return_receive", status: "pending", internal_note: "Test internal note", }) diff --git a/integration-tests/modules/__tests__/order/workflows/begin-order-return.spec.ts b/integration-tests/modules/__tests__/order/workflows/begin-order-return.spec.ts index a9e1844f57..cad2b1df5c 100644 --- a/integration-tests/modules/__tests__/order/workflows/begin-order-return.spec.ts +++ b/integration-tests/modules/__tests__/order/workflows/begin-order-return.spec.ts @@ -394,7 +394,7 @@ medusaIntegrationTestRunner({ const [returnOrder] = await remoteQuery(remoteQueryObject) expect(returnOrder.order_id).toEqual(order.id) - expect(returnOrder.status).toEqual("requested") + expect(returnOrder.status).toEqual("open") expect(returnOrder.id).toBeDefined() }) }) 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 c5a6bcb8ff..a804688033 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 @@ -5,7 +5,12 @@ import { OrderClaimDTO, OrderDTO, } from "@medusajs/types" -import { ChangeActionType, Modules, OrderChangeStatus } from "@medusajs/utils" +import { + ChangeActionType, + Modules, + OrderChangeStatus, + ReturnStatus, +} from "@medusajs/utils" import { WorkflowResponse, createStep, @@ -17,7 +22,7 @@ import { import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common" import { createFulfillmentWorkflow } from "../../../fulfillment/workflows/create-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 { confirmOrderChanges } from "../../steps/confirm-order-changes" 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 }) => { return createClaimItems?.[0]?.claim_id }) diff --git a/packages/core/core-flows/src/order/workflows/return/begin-receive-return.ts b/packages/core/core-flows/src/order/workflows/return/begin-receive-return.ts index 0e0f70595e..ee1d30c071 100644 --- a/packages/core/core-flows/src/order/workflows/return/begin-receive-return.ts +++ b/packages/core/core-flows/src/order/workflows/return/begin-receive-return.ts @@ -60,7 +60,7 @@ export const beginReceiveReturnWorkflow = createWorkflow( { orderReturn, order, input }, ({ orderReturn, order, input }) => { return { - change_type: "return" as const, + change_type: "return_receive" as const, order_id: order.id, return_id: orderReturn.id, created_by: input.created_by, diff --git a/packages/core/core-flows/src/order/workflows/return/begin-return.ts b/packages/core/core-flows/src/order/workflows/return/begin-return.ts index 86c24f6472..235ac133fc 100644 --- a/packages/core/core-flows/src/order/workflows/return/begin-return.ts +++ b/packages/core/core-flows/src/order/workflows/return/begin-return.ts @@ -45,7 +45,7 @@ export const beginReturnOrderWorkflow = createWorkflow( { created, input }, ({ created, input }) => { return { - change_type: "return" as const, + change_type: "return_request" as const, order_id: input.order_id, return_id: created[0].id, created_by: input.created_by, 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 700df8c3da..84cfd35a7a 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 @@ -4,17 +4,23 @@ import { OrderDTO, ReturnDTO, } from "@medusajs/types" -import { ChangeActionType, Modules, OrderChangeStatus } from "@medusajs/utils" +import { + ChangeActionType, + Modules, + OrderChangeStatus, + ReturnStatus, +} from "@medusajs/utils" import { WorkflowResponse, createStep, createWorkflow, + parallelize, transform, when, } from "@medusajs/workflows-sdk" import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common" 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 { createReturnItemsFromActionsStep } from "../../steps/return/create-return-items-from-actions" import { @@ -232,7 +238,16 @@ export const confirmReturnRequestWorkflow = createWorkflow( 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) } diff --git a/packages/core/types/src/order/mutations.ts b/packages/core/types/src/order/mutations.ts index ce8972c017..67606905dc 100644 --- a/packages/core/types/src/order/mutations.ts +++ b/packages/core/types/src/order/mutations.ts @@ -259,7 +259,12 @@ export interface CreateOrderChangeDTO { return_id?: string claim_id?: string exchange_id?: string - change_type?: "return" | "exchange" | "claim" | "edit" + change_type?: + | "return_request" + | "return_receive" + | "exchange" + | "claim" + | "edit" description?: string internal_note?: string | null requested_by?: string @@ -437,6 +442,13 @@ export interface CreateOrderReturnDTO extends BaseOrderBundledActionsDTO { exchange_id?: string } +export type ReturnStatus = + | "open" + | "requested" + | "received" + | "partially_received" + | "canceled" + export interface UpdateReturnDTO { id: string location_id?: string @@ -453,6 +465,8 @@ export interface UpdateReturnDTO { return_id?: string | null metadata?: Record | null }[] + status?: ReturnStatus + requested_at?: Date } export interface UpdateOrderClaimDTO { diff --git a/packages/core/utils/src/order/order-change.ts b/packages/core/utils/src/order/order-change.ts index 635b71fe74..87ab707799 100644 --- a/packages/core/utils/src/order/order-change.ts +++ b/packages/core/utils/src/order/order-change.ts @@ -22,7 +22,8 @@ export enum OrderChangeStatus { } export enum OrderChangeType { - RETURN = "return", + RETURN_REQUEST = "return_request", + RETURN_RECEIVE = "return_receive", EXCHANGE = "exchange", CLAIM = "claim", EDIT = "edit", diff --git a/packages/core/utils/src/order/status.ts b/packages/core/utils/src/order/status.ts index deae1f40e6..26669c3ee6 100644 --- a/packages/core/utils/src/order/status.ts +++ b/packages/core/utils/src/order/status.ts @@ -36,6 +36,10 @@ export enum OrderStatus { * The return's status. */ export enum ReturnStatus { + /** + * The return is open. + */ + OPEN = "open", /** * The return is requested. */ diff --git a/packages/medusa/src/api/admin/returns/query-config.ts b/packages/medusa/src/api/admin/returns/query-config.ts index bcb4ffff12..9b6b983908 100644 --- a/packages/medusa/src/api/admin/returns/query-config.ts +++ b/packages/medusa/src/api/admin/returns/query-config.ts @@ -13,6 +13,7 @@ export const defaultAdminReturnFields = [ "created_at", "updated_at", "canceled_at", + "requested_at", ] export const defaultAdminDetailsReturnFields = [ diff --git a/packages/modules/order/src/migrations/.snapshot-medusa-order.json b/packages/modules/order/src/migrations/.snapshot-medusa-order.json index 4b752994e2..ae3f50d03f 100644 --- a/packages/modules/order/src/migrations/.snapshot-medusa-order.json +++ b/packages/modules/order/src/migrations/.snapshot-medusa-order.json @@ -2627,4 +2627,4 @@ } } ] -} +} \ No newline at end of file diff --git a/packages/modules/order/src/migrations/Migration20240801085921.ts b/packages/modules/order/src/migrations/Migration20240801085921.ts new file mode 100644 index 0000000000..e46deb5679 --- /dev/null +++ b/packages/modules/order/src/migrations/Migration20240801085921.ts @@ -0,0 +1,12 @@ +import { Migration } from "@mikro-orm/migrations" + +export class Migration20240801085921 extends Migration { + async up(): Promise { + this.addSql(` + ALTER TABLE "return" + ADD COLUMN IF NOT exists "requested_at" timestamptz NULL; + + ALTER TYPE return_status_enum ADD VALUE 'open'; + `) + } +} diff --git a/packages/modules/order/src/models/order-change.ts b/packages/modules/order/src/models/order-change.ts index d0e8d5a9d9..9a62402c7e 100644 --- a/packages/modules/order/src/models/order-change.ts +++ b/packages/modules/order/src/models/order-change.ts @@ -4,7 +4,6 @@ import { DALUtils, generateEntityId, OrderChangeStatus, - OrderChangeType, } from "@medusajs/utils" import { BeforeCreate, @@ -21,7 +20,7 @@ import { Property, Rel, } from "@mikro-orm/core" -import {} from "@types" +import { } from "@types" import OrderClaim from "./claim" import OrderExchange from "./exchange" import Order from "./order" @@ -60,12 +59,6 @@ const OrderChangeStatusIndex = createPsqlIndexStatementHelper({ where: "deleted_at IS NOT NULL", }) -const OrderChangeTypeIndex = createPsqlIndexStatementHelper({ - tableName: "order_change", - columns: "change_type", - where: "deleted_at IS NOT NULL", -}) - const DeletedAtIndex = createPsqlIndexStatementHelper({ tableName: "order_change", columns: "deleted_at", @@ -154,9 +147,8 @@ export default class OrderChange { @VersionIndex.MikroORMIndex() version: number - @Enum({ items: () => OrderChangeType, nullable: true }) - @OrderChangeTypeIndex.MikroORMIndex() - change_type: OrderChangeType | null = null + @Property({ columnType: "text", nullable: true }) + change_type: string | null = null @OneToMany(() => OrderChangeAction, (action) => action.order_change, { cascade: [Cascade.PERSIST, "soft-remove" as Cascade], diff --git a/packages/modules/order/src/models/return.ts b/packages/modules/order/src/models/return.ts index 7bb992ddf3..94f4d322b8 100644 --- a/packages/modules/order/src/models/return.ts +++ b/packages/modules/order/src/models/return.ts @@ -114,8 +114,8 @@ export default class Return { @DisplayIdIndex.MikroORMIndex() display_id: number - @Enum({ items: () => ReturnStatus, default: ReturnStatus.REQUESTED }) - status: ReturnStatus = ReturnStatus.REQUESTED + @Enum({ items: () => ReturnStatus, default: ReturnStatus.OPEN }) + status: ReturnStatus = ReturnStatus.OPEN @Property({ columnType: "text", nullable: true }) location_id: string | null = null @@ -172,6 +172,9 @@ export default class Return { @ReturnDeletedAtIndex.MikroORMIndex() deleted_at: Date | null = null + @Property({ columnType: "timestamptz", nullable: true }) + requested_at: Date | null = null + @Property({ columnType: "timestamptz", nullable: true }) received_at: Date | null = null diff --git a/packages/modules/order/src/services/actions/create-return.ts b/packages/modules/order/src/services/actions/create-return.ts index f8ed90553e..2433520a13 100644 --- a/packages/modules/order/src/services/actions/create-return.ts +++ b/packages/modules/order/src/services/actions/create-return.ts @@ -114,7 +114,7 @@ async function createOrderChange( { order_id: data.order_id, return_id: returnRef.id, - change_type: OrderChangeType.RETURN, + change_type: OrderChangeType.RETURN_REQUEST, reference: "return", reference_id: returnRef.id, description: data.description, diff --git a/packages/modules/order/src/services/actions/receive-return.ts b/packages/modules/order/src/services/actions/receive-return.ts index 5aba656f74..2d77780d2a 100644 --- a/packages/modules/order/src/services/actions/receive-return.ts +++ b/packages/modules/order/src/services/actions/receive-return.ts @@ -33,7 +33,7 @@ async function createOrderChange( return_id: returnEntry.id, reference: "return", reference_id: returnEntry.id, - change_type: OrderChangeType.RETURN, + change_type: OrderChangeType.RETURN_RECEIVE, description: data.description, internal_note: data.internal_note, created_by: data.created_by, diff --git a/packages/modules/order/src/types/order-change.ts b/packages/modules/order/src/types/order-change.ts index 146ac29eb2..8711b3fefa 100644 --- a/packages/modules/order/src/types/order-change.ts +++ b/packages/modules/order/src/types/order-change.ts @@ -1,6 +1,3 @@ import { OrderTypes } from "@medusajs/types" -import { OrderChangeType } from "@medusajs/utils" -export interface CreateOrderChangeDTO extends OrderTypes.CreateOrderChangeDTO { - change_type?: OrderChangeType -} +export interface CreateOrderChangeDTO extends OrderTypes.CreateOrderChangeDTO {}