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:
Oli Juhl authored and GitHub committed 2024-08-01 16:20:45 +02:00
1 parent f81652bf6e
commit dbd0b18726
16 files changed
+88 -33

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)
} }
+15 -1
View File
@@ -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",
+4
View File
@@ -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 = [
@@ -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],
+5 -2
View File
@@ -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
}