feat(core-flows,medusa,order,types): update orders (#10373)
**What** - add order update endpoint - add workflows and steps for updating orders - add `registerChanges` method to Order module + workflow step --- CLOSES CMRC-633
This commit is contained in:
@@ -20,6 +20,7 @@ import {
|
||||
} from "@medusajs/framework/types"
|
||||
import {
|
||||
BigNumber,
|
||||
ChangeActionType,
|
||||
createRawPropertiesFromBigNumber,
|
||||
DecorateCartLikeInputDTO,
|
||||
decorateCartTotals,
|
||||
@@ -2233,6 +2234,59 @@ export default class OrderModuleService<
|
||||
await this.orderChangeService_.update(updates as any, sharedContext)
|
||||
}
|
||||
|
||||
async registerOrderChange(
|
||||
data: OrderTypes.RegisterOrderChangeDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderChangeDTO>
|
||||
async registerOrderChange(
|
||||
data: OrderTypes.RegisterOrderChangeDTO[],
|
||||
sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderChangeDTO[]>
|
||||
|
||||
@InjectManager()
|
||||
async registerOrderChange(
|
||||
data:
|
||||
| OrderTypes.RegisterOrderChangeDTO
|
||||
| OrderTypes.RegisterOrderChangeDTO[],
|
||||
sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderChangeDTO | OrderTypes.OrderChangeDTO[]> {
|
||||
const inputData = Array.isArray(data) ? data : [data]
|
||||
|
||||
const orders = await this.orderService_.list(
|
||||
{ id: inputData.map((d) => d.order_id) },
|
||||
{ select: ["id", "version"] },
|
||||
sharedContext
|
||||
)
|
||||
|
||||
const orderVersionsMap = new Map(orders.map((o) => [o.id, o.version]))
|
||||
|
||||
const changes = (await this.orderChangeService_.create(
|
||||
inputData.map((d) => ({
|
||||
order_id: d.order_id,
|
||||
change_type: d.change_type,
|
||||
internal_note: d.internal_note,
|
||||
description: d.description,
|
||||
metadata: d.metadata,
|
||||
confirmed_at: new Date(),
|
||||
status: OrderChangeStatus.CONFIRMED,
|
||||
version: orderVersionsMap.get(d.order_id)!,
|
||||
actions: [
|
||||
{
|
||||
action: ChangeActionType.UPDATE_ORDER_PROPERTIES,
|
||||
details: d.details,
|
||||
reference: d.reference,
|
||||
reference_id: d.reference_id,
|
||||
version: orderVersionsMap.get(d.order_id)!,
|
||||
applied: true,
|
||||
},
|
||||
],
|
||||
})) as CreateOrderChangeDTO[],
|
||||
sharedContext
|
||||
)) as OrderTypes.OrderChangeDTO[]
|
||||
|
||||
return Array.isArray(data) ? changes : changes[0]
|
||||
}
|
||||
|
||||
@InjectManager()
|
||||
async applyPendingOrderActions(
|
||||
orderId: string | string[],
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import { ChangeActionType } from "@medusajs/framework/utils"
|
||||
|
||||
import { OrderChangeProcessing } from "../calculate-order-change"
|
||||
import { setActionReference } from "../set-action-reference"
|
||||
|
||||
OrderChangeProcessing.registerActionType(
|
||||
ChangeActionType.UPDATE_ORDER_PROPERTIES,
|
||||
{
|
||||
operation({ action, currentOrder, options }) {
|
||||
/**
|
||||
* NOOP: used as a reference for the change
|
||||
*/
|
||||
|
||||
setActionReference(currentOrder, action, options)
|
||||
},
|
||||
validate({ action }) {
|
||||
/* noop */
|
||||
},
|
||||
}
|
||||
)
|
||||
@@ -14,3 +14,4 @@ export * from "./shipping-add"
|
||||
export * from "./shipping-remove"
|
||||
export * from "./write-off-item"
|
||||
export * from "./transfer-customer"
|
||||
export * from "./change-shipping-address"
|
||||
|
||||
Reference in New Issue
Block a user