fix(order): order list payment and fulfillment status (#7934)
This commit is contained in:
1 parent
41c4307fc7
commit
56394fe0d4
8 files changed
+143
-23
No files matched your search
@@ -15,7 +15,10 @@ export const getOrderDetailWorkflowId = "get-order-detail"
|
|||||||
export const getOrderDetailWorkflow = createWorkflow(
|
export const getOrderDetailWorkflow = createWorkflow(
|
||||||
getOrderDetailWorkflowId,
|
getOrderDetailWorkflowId,
|
||||||
(
|
(
|
||||||
input: WorkflowData<{ fields: string[]; order_id: string }>
|
input: WorkflowData<{
|
||||||
|
fields: string[]
|
||||||
|
order_id: string
|
||||||
|
}>
|
||||||
): WorkflowData<OrderDetailDTO> => {
|
): WorkflowData<OrderDetailDTO> => {
|
||||||
const fields = transform(input, ({ fields }) => {
|
const fields = transform(input, ({ fields }) => {
|
||||||
return deduplicate([
|
return deduplicate([
|
||||||
|
|||||||
@@ -0,0 +1,94 @@
|
|||||||
|
import { OrderDTO, OrderDetailDTO } from "@medusajs/types"
|
||||||
|
import { deduplicate } from "@medusajs/utils"
|
||||||
|
import {
|
||||||
|
WorkflowData,
|
||||||
|
createWorkflow,
|
||||||
|
transform,
|
||||||
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { useRemoteQueryStep } from "../../common"
|
||||||
|
import {
|
||||||
|
getLastFulfillmentStatus,
|
||||||
|
getLastPaymentStatus,
|
||||||
|
} from "../utils/aggregate-status"
|
||||||
|
|
||||||
|
type OrderOutput =
|
||||||
|
| OrderDTO[]
|
||||||
|
| {
|
||||||
|
rows: OrderDTO[]
|
||||||
|
metadata: any
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getOrdersListlWorkflowId = "get-orders-list"
|
||||||
|
export const getOrdersListlWorkflow = createWorkflow(
|
||||||
|
getOrdersListlWorkflowId,
|
||||||
|
(
|
||||||
|
input: WorkflowData<{
|
||||||
|
fields: string[]
|
||||||
|
variables?: Record<string, any>
|
||||||
|
}>
|
||||||
|
): WorkflowData<OrderOutput> => {
|
||||||
|
const fields = transform(input, ({ fields }) => {
|
||||||
|
return deduplicate([
|
||||||
|
...fields,
|
||||||
|
"id",
|
||||||
|
"status",
|
||||||
|
"version",
|
||||||
|
"payment_collections.status",
|
||||||
|
"payment_collections.amount",
|
||||||
|
"payment_collections.captured_amount",
|
||||||
|
"payment_collections.refunded_amount",
|
||||||
|
"fulfillments.packed_at",
|
||||||
|
"fulfillments.shipped_at",
|
||||||
|
"fulfillments.delivered_at",
|
||||||
|
"fulfillments.canceled_at",
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
const orders: OrderDTO[] = useRemoteQueryStep({
|
||||||
|
entry_point: "orders",
|
||||||
|
fields,
|
||||||
|
variables: input.variables,
|
||||||
|
list: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
const aggregatedOrders = transform(
|
||||||
|
{ orders, input },
|
||||||
|
({ orders, input }) => {
|
||||||
|
const fields = input.fields
|
||||||
|
const requiredPaymentFields = fields.some((f) =>
|
||||||
|
f.includes("payment_collections")
|
||||||
|
)
|
||||||
|
const requiredFulfillmentFields = fields.some((f) =>
|
||||||
|
f.includes("fulfillments")
|
||||||
|
)
|
||||||
|
|
||||||
|
const orders_ = orders as any
|
||||||
|
const data = orders_.rows ? orders_.rows : orders_
|
||||||
|
|
||||||
|
for (const order of data) {
|
||||||
|
const order_ = order as OrderDetailDTO
|
||||||
|
|
||||||
|
order_.payment_status = getLastPaymentStatus(
|
||||||
|
order_
|
||||||
|
) as OrderDetailDTO["payment_status"]
|
||||||
|
order_.fulfillment_status = getLastFulfillmentStatus(
|
||||||
|
order_
|
||||||
|
) as OrderDetailDTO["fulfillment_status"]
|
||||||
|
|
||||||
|
if (!requiredPaymentFields) {
|
||||||
|
// @ts-ignore
|
||||||
|
delete order_.payment_collections
|
||||||
|
}
|
||||||
|
if (!requiredFulfillmentFields) {
|
||||||
|
// @ts-ignore
|
||||||
|
delete order_.fulfillments
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return orders
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return aggregatedOrders
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -8,5 +8,6 @@ export * from "./create-orders"
|
|||||||
export * from "./create-return"
|
export * from "./create-return"
|
||||||
export * from "./create-shipment"
|
export * from "./create-shipment"
|
||||||
export * from "./get-order-detail"
|
export * from "./get-order-detail"
|
||||||
|
export * from "./get-orders-list"
|
||||||
export * from "./receive-return"
|
export * from "./receive-return"
|
||||||
export * from "./update-tax-lines"
|
export * from "./update-tax-lines"
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
import {
|
import { getOrdersListlWorkflow } from "@medusajs/core-flows"
|
||||||
ContainerRegistrationKeys,
|
import { OrderDTO } from "@medusajs/types"
|
||||||
remoteQueryObjectFromString,
|
|
||||||
} from "@medusajs/utils"
|
|
||||||
import {
|
import {
|
||||||
AuthenticatedMedusaRequest,
|
AuthenticatedMedusaRequest,
|
||||||
MedusaResponse,
|
MedusaResponse,
|
||||||
@@ -11,24 +9,28 @@ export const GET = async (
|
|||||||
req: AuthenticatedMedusaRequest,
|
req: AuthenticatedMedusaRequest,
|
||||||
res: MedusaResponse
|
res: MedusaResponse
|
||||||
) => {
|
) => {
|
||||||
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
|
const variables = {
|
||||||
|
filters: {
|
||||||
|
...req.filterableFields,
|
||||||
|
is_draft_order: false,
|
||||||
|
},
|
||||||
|
...req.remoteQueryConfig.pagination,
|
||||||
|
}
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const workflow = getOrdersListlWorkflow(req.scope)
|
||||||
entryPoint: "order",
|
const { result } = await workflow.run({
|
||||||
variables: {
|
input: {
|
||||||
filters: {
|
fields: req.remoteQueryConfig.fields,
|
||||||
...req.filterableFields,
|
variables,
|
||||||
is_draft_order: false,
|
|
||||||
},
|
|
||||||
...req.remoteQueryConfig.pagination,
|
|
||||||
},
|
},
|
||||||
fields: req.remoteQueryConfig.fields,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const { rows: orders, metadata } = await remoteQuery(queryObject)
|
const { rows, metadata } = result as {
|
||||||
|
rows: OrderDTO[]
|
||||||
|
metadata: any
|
||||||
|
}
|
||||||
res.json({
|
res.json({
|
||||||
orders,
|
orders: rows,
|
||||||
count: metadata.count,
|
count: metadata.count,
|
||||||
offset: metadata.skip,
|
offset: metadata.skip,
|
||||||
limit: metadata.take,
|
limit: metadata.take,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { CreateOrderDTO, IOrderModuleService } from "@medusajs/types"
|
import { CreateOrderDTO, IOrderModuleService } from "@medusajs/types"
|
||||||
import { ClaimType, Modules } from "@medusajs/utils"
|
import { ClaimType, Modules } from "@medusajs/utils"
|
||||||
import { moduleIntegrationTestRunner, SuiteOptions } from "medusa-test-utils"
|
import { SuiteOptions, moduleIntegrationTestRunner } from "medusa-test-utils"
|
||||||
|
|
||||||
jest.setTimeout(100000)
|
jest.setTimeout(100000)
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@ moduleIntegrationTestRunner({
|
|||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
shipping_methods: [
|
shipping_methods: expect.arrayContaining([
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
name: "return shipping method",
|
name: "return shipping method",
|
||||||
amount: 10,
|
amount: 10,
|
||||||
@@ -231,7 +231,7 @@ moduleIntegrationTestRunner({
|
|||||||
name: "Claim method",
|
name: "Claim method",
|
||||||
amount: 35,
|
amount: 35,
|
||||||
}),
|
}),
|
||||||
],
|
]),
|
||||||
refund_amount: null,
|
refund_amount: null,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -282,11 +282,12 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
"items.detail.fulfilled_quantity",
|
"items.detail.fulfilled_quantity",
|
||||||
"items.detail.return_requested_quantity",
|
"items.detail.return_requested_quantity",
|
||||||
],
|
],
|
||||||
relations: ["items", "items.detail"],
|
relations: ["items", "items.detail", "shipping_methods"],
|
||||||
})
|
})
|
||||||
|
|
||||||
serializedOrder = JSON.parse(JSON.stringify(getOrder))
|
serializedOrder = JSON.parse(JSON.stringify(getOrder))
|
||||||
|
|
||||||
|
expect(serializedOrder.shipping_methods).toHaveLength(3)
|
||||||
expect(serializedOrder).toEqual(
|
expect(serializedOrder).toEqual(
|
||||||
expect.objectContaining({
|
expect.objectContaining({
|
||||||
items: [
|
items: [
|
||||||
|
|||||||
@@ -78,14 +78,19 @@ export function setFindMethods<T>(klass: Constructor<T>, entity: any) {
|
|||||||
|
|
||||||
orderWhere.items ??= {}
|
orderWhere.items ??= {}
|
||||||
orderWhere.items.version = version
|
orderWhere.items.version = version
|
||||||
|
orderWhere.items.deleted_at ??= null
|
||||||
|
|
||||||
popWhere.shipping_methods ??= {}
|
popWhere.shipping_methods ??= {}
|
||||||
popWhere.shipping_methods.version = version
|
popWhere.shipping_methods.version = version
|
||||||
|
popWhere.shipping_methods.deleted_at ??= null
|
||||||
|
|
||||||
if (!config.options.orderBy) {
|
if (!config.options.orderBy) {
|
||||||
config.options.orderBy = { id: "ASC" }
|
config.options.orderBy = { id: "ASC" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config.where ??= {}
|
||||||
|
config.where.deleted_at ??= null
|
||||||
|
|
||||||
return await manager.find(entity, config.where, config.options)
|
return await manager.find(entity, config.where, config.options)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,9 +157,11 @@ export function setFindMethods<T>(klass: Constructor<T>, entity: any) {
|
|||||||
|
|
||||||
orderWhere.items ??= {}
|
orderWhere.items ??= {}
|
||||||
orderWhere.items.version = version
|
orderWhere.items.version = version
|
||||||
|
orderWhere.items.deleted_at ??= null
|
||||||
|
|
||||||
popWhere.shipping_methods ??= {}
|
popWhere.shipping_methods ??= {}
|
||||||
popWhere.shipping_methods.version = version
|
popWhere.shipping_methods.version = version
|
||||||
|
popWhere.shipping_methods.deleted_at ??= null
|
||||||
|
|
||||||
if (!config.options.orderBy) {
|
if (!config.options.orderBy) {
|
||||||
config.options.orderBy = { id: "ASC" }
|
config.options.orderBy = { id: "ASC" }
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ export function formatOrder(
|
|||||||
const sm = { ...shippingMethod.shipping_method }
|
const sm = { ...shippingMethod.shipping_method }
|
||||||
|
|
||||||
delete shippingMethod.shipping_method
|
delete shippingMethod.shipping_method
|
||||||
|
cleanNestedRelations(shippingMethod)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...sm,
|
...sm,
|
||||||
order_id: shippingMethod.order_id,
|
order_id: shippingMethod.order_id,
|
||||||
@@ -87,6 +89,13 @@ export function formatOrder(
|
|||||||
return isArray ? orders : orders[0]
|
return isArray ? orders : orders[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function cleanNestedRelations(obj) {
|
||||||
|
delete obj.order
|
||||||
|
delete obj.return
|
||||||
|
delete obj.claim
|
||||||
|
delete obj.exchange
|
||||||
|
}
|
||||||
|
|
||||||
function formatOrderReturn(orderReturn, mainOrder) {
|
function formatOrderReturn(orderReturn, mainOrder) {
|
||||||
orderReturn.items.forEach((orderItem) => {
|
orderReturn.items.forEach((orderItem) => {
|
||||||
const item = mainOrder.items?.find((item) => item.id === orderItem.item_id)
|
const item = mainOrder.items?.find((item) => item.id === orderItem.item_id)
|
||||||
@@ -105,7 +114,7 @@ function formatClaim(claim) {
|
|||||||
const item = claim.order.items?.find(
|
const item = claim.order.items?.find(
|
||||||
(item) => item.id === orderItem.item_id
|
(item) => item.id === orderItem.item_id
|
||||||
)
|
)
|
||||||
|
cleanNestedRelations(item)
|
||||||
orderItem.detail = item?.detail
|
orderItem.detail = item?.detail
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -122,6 +131,7 @@ function formatClaim(claim) {
|
|||||||
(item) => item.id === orderItem.item_id
|
(item) => item.id === orderItem.item_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cleanNestedRelations(item)
|
||||||
orderItem.detail = item?.detail
|
orderItem.detail = item?.detail
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -136,6 +146,7 @@ function formatExchange(exchange) {
|
|||||||
(item) => item.id === orderItem.item_id
|
(item) => item.id === orderItem.item_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cleanNestedRelations(item)
|
||||||
orderItem.detail = item?.detail
|
orderItem.detail = item?.detail
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -150,6 +161,7 @@ function formatReturn(returnOrder) {
|
|||||||
(item) => item.id === orderItem.item_id
|
(item) => item.id === orderItem.item_id
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cleanNestedRelations(item)
|
||||||
orderItem.detail = item?.detail
|
orderItem.detail = item?.detail
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user