feat(core-flows): custom price flag for order line items and shipping methods (#8969)
CLOSES: CC-402
This commit is contained in:
committed by
GitHub
parent
0fe1201435
commit
2a055b71ef
@@ -0,0 +1,73 @@
|
||||
import { OrderChangeActionDTO } from "@medusajs/types"
|
||||
import { isDefined } from "@medusajs/utils"
|
||||
|
||||
export function prepareShippingMethod(relatedEntityField?: string) {
|
||||
return function (data) {
|
||||
const option = data.shippingOptions[0]
|
||||
const orderChange = data.orderChange
|
||||
|
||||
const isCustomPrice = isDefined(data.customPrice)
|
||||
const obj = {
|
||||
shipping_option_id: option.id,
|
||||
amount: isCustomPrice
|
||||
? data.customPrice
|
||||
: option.calculated_price.calculated_amount,
|
||||
is_custom_amount: isCustomPrice,
|
||||
is_tax_inclusive:
|
||||
!!option.calculated_price.is_calculated_price_tax_inclusive,
|
||||
data: option.data ?? {},
|
||||
name: option.name,
|
||||
version: orderChange.version,
|
||||
order_id: data.relatedEntity.order_id,
|
||||
} as any
|
||||
|
||||
if (relatedEntityField) {
|
||||
obj.return_id = data.input.return_id
|
||||
obj[relatedEntityField] = data.relatedEntity.id
|
||||
|
||||
if (relatedEntityField === "return_id") {
|
||||
obj.claim_id = data.relatedEntity.claim_id
|
||||
obj.exchange_id = data.relatedEntity.exchange_id
|
||||
}
|
||||
}
|
||||
|
||||
return obj
|
||||
}
|
||||
}
|
||||
|
||||
export function prepareShippingMethodUpdate({
|
||||
input,
|
||||
orderChange,
|
||||
shippingOptions,
|
||||
}) {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
const data = input.data
|
||||
|
||||
const option = shippingOptions?.[0]
|
||||
|
||||
const isCustomPrice = !isDefined(shippingOptions)
|
||||
const price = isCustomPrice
|
||||
? data.custom_amount
|
||||
: option.calculated_price.calculated_amount
|
||||
|
||||
const action = {
|
||||
id: originalAction.id,
|
||||
amount: price,
|
||||
internal_note: data.internal_note,
|
||||
}
|
||||
|
||||
const shippingMethod = {
|
||||
id: originalAction.reference_id,
|
||||
amount: price,
|
||||
is_custom_amount: isCustomPrice,
|
||||
metadata: data.metadata,
|
||||
}
|
||||
|
||||
return {
|
||||
action,
|
||||
shippingMethod,
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { prepareShippingMethod } from "../../utils/prepare-shipping-method"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
import { updateOrderTaxLinesWorkflow } from "../update-tax-lines"
|
||||
|
||||
@@ -53,7 +54,7 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
||||
return_id?: string
|
||||
claim_id?: string
|
||||
shipping_option_id: string
|
||||
custom_price?: BigNumberInput
|
||||
custom_amount?: BigNumberInput | null
|
||||
}): WorkflowResponse<OrderPreviewDTO> {
|
||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||
entry_point: "order_claim",
|
||||
@@ -65,7 +66,7 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
||||
|
||||
const order: OrderDTO = useRemoteQueryStep({
|
||||
entry_point: "orders",
|
||||
fields: ["id", "status", "currency_code", "canceled_at"],
|
||||
fields: ["id", "status", "region_id", "currency_code", "canceled_at"],
|
||||
variables: { id: orderClaim.order_id },
|
||||
list: false,
|
||||
throw_if_key_not_found: true,
|
||||
@@ -104,29 +105,13 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
||||
|
||||
const shippingMethodInput = transform(
|
||||
{
|
||||
orderClaim,
|
||||
relatedEntity: orderClaim,
|
||||
shippingOptions,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
(data) => {
|
||||
const option = data.shippingOptions[0]
|
||||
const orderChange = data.orderChange
|
||||
|
||||
return {
|
||||
shipping_option_id: option.id,
|
||||
amount: data.customPrice ?? option.calculated_price.calculated_amount,
|
||||
is_tax_inclusive:
|
||||
!!option.calculated_price.is_calculated_price_tax_inclusive,
|
||||
data: option.data ?? {},
|
||||
name: option.name,
|
||||
version: orderChange.version,
|
||||
order_id: data.orderClaim.order_id,
|
||||
return_id: input.return_id,
|
||||
claim_id: data.orderClaim.id,
|
||||
}
|
||||
}
|
||||
prepareShippingMethod("claim_id")
|
||||
)
|
||||
|
||||
const createdMethods = createOrderShippingMethods({
|
||||
@@ -155,7 +140,7 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
||||
orderClaim,
|
||||
shippingOptions,
|
||||
createdMethods,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
@@ -170,6 +155,7 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
||||
}) => {
|
||||
const shippingOption = shippingOptions[0]
|
||||
const createdMethod = createdMethods[0]
|
||||
|
||||
const methodPrice =
|
||||
customPrice ?? shippingOption.calculated_price.calculated_amount
|
||||
|
||||
|
||||
+54
-26
@@ -13,6 +13,7 @@ import {
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
when,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import {
|
||||
@@ -24,6 +25,7 @@ import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { prepareShippingMethodUpdate } from "../../utils/prepare-shipping-method"
|
||||
|
||||
/**
|
||||
* This step validates that a claim's shipping method can be updated.
|
||||
@@ -70,7 +72,13 @@ export const updateClaimShippingMethodWorkflow = createWorkflow(
|
||||
): WorkflowResponse<OrderPreviewDTO> {
|
||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||
entry_point: "order_claim",
|
||||
fields: ["id", "status", "order_id", "canceled_at"],
|
||||
fields: [
|
||||
"id",
|
||||
"status",
|
||||
"order_id",
|
||||
"canceled_at",
|
||||
"order.currency_code",
|
||||
],
|
||||
variables: { id: input.claim_id },
|
||||
list: false,
|
||||
throw_if_key_not_found: true,
|
||||
@@ -89,34 +97,54 @@ export const updateClaimShippingMethodWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
const shippingOptions = when({ input }, ({ input }) => {
|
||||
return input.data?.custom_amount === null
|
||||
}).then(() => {
|
||||
const action = transform(
|
||||
{ orderChange, input, orderClaim },
|
||||
({ orderChange, input, orderClaim }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
return {
|
||||
shipping_method_id: originalAction.reference_id,
|
||||
currency_code: (orderClaim as any).order.currency_code,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
const shippingMethod = useRemoteQueryStep({
|
||||
entry_point: "order_shipping_method",
|
||||
fields: ["id", "shipping_option_id"],
|
||||
variables: {
|
||||
id: action.shipping_method_id,
|
||||
},
|
||||
list: false,
|
||||
}).config({ name: "fetch-shipping-method" })
|
||||
|
||||
return useRemoteQueryStep({
|
||||
entry_point: "shipping_option",
|
||||
fields: [
|
||||
"id",
|
||||
"name",
|
||||
"calculated_price.calculated_amount",
|
||||
"calculated_price.is_calculated_price_tax_inclusive",
|
||||
],
|
||||
variables: {
|
||||
id: shippingMethod.shipping_option_id,
|
||||
calculated_price: {
|
||||
context: { currency_code: action.currency_code },
|
||||
},
|
||||
},
|
||||
}).config({ name: "fetch-shipping-option" })
|
||||
})
|
||||
|
||||
updateClaimShippingMethodValidationStep({ orderClaim, orderChange, input })
|
||||
|
||||
const updateData = transform(
|
||||
{ orderChange, input },
|
||||
({ input, orderChange }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
const data = input.data
|
||||
|
||||
const action = {
|
||||
id: originalAction.id,
|
||||
amount: data.custom_price,
|
||||
internal_note: data.internal_note,
|
||||
}
|
||||
|
||||
const shippingMethod = {
|
||||
id: originalAction.reference_id,
|
||||
amount: data.custom_price,
|
||||
metadata: data.metadata,
|
||||
}
|
||||
|
||||
return {
|
||||
action,
|
||||
shippingMethod,
|
||||
}
|
||||
}
|
||||
{ orderChange, input, shippingOptions },
|
||||
prepareShippingMethodUpdate
|
||||
)
|
||||
|
||||
parallelize(
|
||||
|
||||
+6
-21
@@ -19,6 +19,7 @@ import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { prepareShippingMethod } from "../../utils/prepare-shipping-method"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
import { updateOrderTaxLinesWorkflow } from "../update-tax-lines"
|
||||
|
||||
@@ -53,7 +54,7 @@ export const createExchangeShippingMethodWorkflow = createWorkflow(
|
||||
return_id?: string
|
||||
exchange_id?: string
|
||||
shipping_option_id: string
|
||||
custom_price?: BigNumberInput
|
||||
custom_amount?: BigNumberInput | null
|
||||
}): WorkflowResponse<OrderPreviewDTO> {
|
||||
const orderExchange: OrderExchangeDTO = useRemoteQueryStep({
|
||||
entry_point: "order_exchange",
|
||||
@@ -108,29 +109,13 @@ export const createExchangeShippingMethodWorkflow = createWorkflow(
|
||||
|
||||
const shippingMethodInput = transform(
|
||||
{
|
||||
orderExchange,
|
||||
relatedEntity: orderExchange,
|
||||
shippingOptions,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
(data) => {
|
||||
const option = data.shippingOptions[0]
|
||||
const orderChange = data.orderChange
|
||||
|
||||
return {
|
||||
shipping_option_id: option.id,
|
||||
amount: data.customPrice ?? option.calculated_price.calculated_amount,
|
||||
is_tax_inclusive:
|
||||
!!option.calculated_price.is_calculated_price_tax_inclusive,
|
||||
data: option.data ?? {},
|
||||
name: option.name,
|
||||
version: orderChange.version,
|
||||
order_id: data.orderExchange.order_id,
|
||||
return_id: input.return_id,
|
||||
exchange_id: data.orderExchange.id,
|
||||
}
|
||||
}
|
||||
prepareShippingMethod("exchange_id")
|
||||
)
|
||||
|
||||
const createdMethods = createOrderShippingMethods({
|
||||
@@ -159,7 +144,7 @@ export const createExchangeShippingMethodWorkflow = createWorkflow(
|
||||
orderExchange,
|
||||
shippingOptions,
|
||||
createdMethods,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
|
||||
+54
-26
@@ -13,6 +13,7 @@ import {
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
when,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import {
|
||||
@@ -24,6 +25,7 @@ import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { prepareShippingMethodUpdate } from "../../utils/prepare-shipping-method"
|
||||
|
||||
/**
|
||||
* This step validates that an exchange's shipping method can be updated.
|
||||
@@ -70,7 +72,13 @@ export const updateExchangeShippingMethodWorkflow = createWorkflow(
|
||||
): WorkflowResponse<OrderPreviewDTO> {
|
||||
const orderExchange: OrderExchangeDTO = useRemoteQueryStep({
|
||||
entry_point: "order_exchange",
|
||||
fields: ["id", "status", "order_id", "canceled_at"],
|
||||
fields: [
|
||||
"id",
|
||||
"status",
|
||||
"order_id",
|
||||
"canceled_at",
|
||||
"order.currency_code",
|
||||
],
|
||||
variables: { id: input.exchange_id },
|
||||
list: false,
|
||||
throw_if_key_not_found: true,
|
||||
@@ -89,6 +97,49 @@ export const updateExchangeShippingMethodWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
const shippingOptions = when({ input }, ({ input }) => {
|
||||
return input.data?.custom_amount === null
|
||||
}).then(() => {
|
||||
const action = transform(
|
||||
{ orderChange, input, orderExchange },
|
||||
({ orderChange, input, orderExchange }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
return {
|
||||
shipping_method_id: originalAction.reference_id,
|
||||
currency_code: (orderExchange as any).order.currency_code,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
const shippingMethod = useRemoteQueryStep({
|
||||
entry_point: "order_shipping_method",
|
||||
fields: ["id", "shipping_option_id"],
|
||||
variables: {
|
||||
id: action.shipping_method_id,
|
||||
},
|
||||
list: false,
|
||||
}).config({ name: "fetch-shipping-method" })
|
||||
|
||||
return useRemoteQueryStep({
|
||||
entry_point: "shipping_option",
|
||||
fields: [
|
||||
"id",
|
||||
"name",
|
||||
"calculated_price.calculated_amount",
|
||||
"calculated_price.is_calculated_price_tax_inclusive",
|
||||
],
|
||||
variables: {
|
||||
id: shippingMethod.shipping_option_id,
|
||||
calculated_price: {
|
||||
context: { currency_code: action.currency_code },
|
||||
},
|
||||
},
|
||||
}).config({ name: "fetch-shipping-option" })
|
||||
})
|
||||
|
||||
updateExchangeShippingMethodValidationStep({
|
||||
orderExchange,
|
||||
orderChange,
|
||||
@@ -96,31 +147,8 @@ export const updateExchangeShippingMethodWorkflow = createWorkflow(
|
||||
})
|
||||
|
||||
const updateData = transform(
|
||||
{ orderChange, input },
|
||||
({ input, orderChange }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
const data = input.data
|
||||
|
||||
const action = {
|
||||
id: originalAction.id,
|
||||
amount: data.custom_price,
|
||||
internal_note: data.internal_note,
|
||||
}
|
||||
|
||||
const shippingMethod = {
|
||||
id: originalAction.reference_id,
|
||||
amount: data.custom_price,
|
||||
metadata: data.metadata,
|
||||
}
|
||||
|
||||
return {
|
||||
action,
|
||||
shippingMethod,
|
||||
}
|
||||
}
|
||||
{ orderChange, input, shippingOptions },
|
||||
prepareShippingMethodUpdate
|
||||
)
|
||||
|
||||
parallelize(
|
||||
|
||||
+5
-18
@@ -18,6 +18,7 @@ import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { prepareShippingMethod } from "../../utils/prepare-shipping-method"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
import { updateOrderTaxLinesWorkflow } from "../update-tax-lines"
|
||||
|
||||
@@ -48,7 +49,7 @@ export const createOrderEditShippingMethodWorkflow = createWorkflow(
|
||||
function (input: {
|
||||
order_id: string
|
||||
shipping_option_id: string
|
||||
custom_price?: BigNumberInput
|
||||
custom_amount?: BigNumberInput | null
|
||||
}): WorkflowResponse<OrderPreviewDTO> {
|
||||
const order: OrderDTO = useRemoteQueryStep({
|
||||
entry_point: "orders",
|
||||
@@ -89,25 +90,11 @@ export const createOrderEditShippingMethodWorkflow = createWorkflow(
|
||||
const shippingMethodInput = transform(
|
||||
{
|
||||
shippingOptions,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
(data) => {
|
||||
const option = data.shippingOptions[0]
|
||||
const orderChange = data.orderChange
|
||||
|
||||
return {
|
||||
shipping_option_id: option.id,
|
||||
amount: data.customPrice ?? option.calculated_price.calculated_amount,
|
||||
is_tax_inclusive:
|
||||
!!option.calculated_price.is_calculated_price_tax_inclusive,
|
||||
data: option.data ?? {},
|
||||
name: option.name,
|
||||
version: orderChange.version,
|
||||
order_id: data.input.order_id,
|
||||
}
|
||||
}
|
||||
prepareShippingMethod()
|
||||
)
|
||||
|
||||
const createdMethods = createOrderShippingMethods({
|
||||
@@ -130,7 +117,7 @@ export const createOrderEditShippingMethodWorkflow = createWorkflow(
|
||||
order,
|
||||
shippingOptions,
|
||||
createdMethods,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
|
||||
+56
-25
@@ -1,6 +1,7 @@
|
||||
import {
|
||||
OrderChangeActionDTO,
|
||||
OrderChangeDTO,
|
||||
OrderDTO,
|
||||
OrderPreviewDTO,
|
||||
OrderWorkflow,
|
||||
} from "@medusajs/types"
|
||||
@@ -12,6 +13,7 @@ import {
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
when,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import {
|
||||
@@ -20,6 +22,7 @@ import {
|
||||
} from "../../steps"
|
||||
import { previewOrderChangeStep } from "../../steps/preview-order-change"
|
||||
import { throwIfOrderChangeIsNotActive } from "../../utils/order-validation"
|
||||
import { prepareShippingMethodUpdate } from "../../utils/prepare-shipping-method"
|
||||
|
||||
/**
|
||||
* This step validates that an order edit's shipping method can be updated.
|
||||
@@ -61,6 +64,14 @@ export const updateOrderEditShippingMethodWorkflow = createWorkflow(
|
||||
function (
|
||||
input: WorkflowData<OrderWorkflow.UpdateOrderEditShippingMethodWorkflowInput>
|
||||
): WorkflowResponse<OrderPreviewDTO> {
|
||||
const order: OrderDTO = useRemoteQueryStep({
|
||||
entry_point: "order_claim",
|
||||
fields: ["id", "currency_code"],
|
||||
variables: { id: input.order_id },
|
||||
list: false,
|
||||
throw_if_key_not_found: true,
|
||||
})
|
||||
|
||||
const orderChange: OrderChangeDTO = useRemoteQueryStep({
|
||||
entry_point: "order_change",
|
||||
fields: ["id", "status", "version", "actions.*"],
|
||||
@@ -73,37 +84,57 @@ export const updateOrderEditShippingMethodWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
const shippingOptions = when({ input }, ({ input }) => {
|
||||
return input.data?.custom_amount === null
|
||||
}).then(() => {
|
||||
const action = transform(
|
||||
{ orderChange, input, order },
|
||||
({ orderChange, input, order }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
return {
|
||||
shipping_method_id: originalAction.reference_id,
|
||||
currency_code: order.currency_code,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
const shippingMethod = useRemoteQueryStep({
|
||||
entry_point: "order_shipping_method",
|
||||
fields: ["id", "shipping_option_id"],
|
||||
variables: {
|
||||
id: action.shipping_method_id,
|
||||
},
|
||||
list: false,
|
||||
}).config({ name: "fetch-shipping-method" })
|
||||
|
||||
return useRemoteQueryStep({
|
||||
entry_point: "shipping_option",
|
||||
fields: [
|
||||
"id",
|
||||
"name",
|
||||
"calculated_price.calculated_amount",
|
||||
"calculated_price.is_calculated_price_tax_inclusive",
|
||||
],
|
||||
variables: {
|
||||
id: shippingMethod.shipping_option_id,
|
||||
calculated_price: {
|
||||
context: { currency_code: action.currency_code },
|
||||
},
|
||||
},
|
||||
}).config({ name: "fetch-shipping-option" })
|
||||
})
|
||||
|
||||
updateOrderEditShippingMethodValidationStep({
|
||||
orderChange,
|
||||
input,
|
||||
})
|
||||
|
||||
const updateData = transform(
|
||||
{ orderChange, input },
|
||||
({ input, orderChange }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
const data = input.data
|
||||
|
||||
const action = {
|
||||
id: originalAction.id,
|
||||
amount: data.custom_price,
|
||||
internal_note: data.internal_note,
|
||||
}
|
||||
|
||||
const shippingMethod = {
|
||||
id: originalAction.reference_id,
|
||||
amount: data.custom_price,
|
||||
metadata: data.metadata,
|
||||
}
|
||||
|
||||
return {
|
||||
action,
|
||||
shippingMethod,
|
||||
}
|
||||
}
|
||||
{ orderChange, input, shippingOptions },
|
||||
prepareShippingMethodUpdate
|
||||
)
|
||||
|
||||
parallelize(
|
||||
|
||||
+14
-23
@@ -19,6 +19,7 @@ import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { prepareShippingMethod } from "../../utils/prepare-shipping-method"
|
||||
import { createOrderChangeActionsWorkflow } from "../create-order-change-actions"
|
||||
import { updateOrderTaxLinesWorkflow } from "../update-tax-lines"
|
||||
|
||||
@@ -54,11 +55,18 @@ export const createReturnShippingMethodWorkflow = createWorkflow(
|
||||
claim_id?: string
|
||||
exchange_id?: string
|
||||
shipping_option_id: string
|
||||
custom_price?: BigNumberInput
|
||||
custom_amount?: BigNumberInput | null
|
||||
}): WorkflowResponse<OrderPreviewDTO> {
|
||||
const orderReturn: ReturnDTO = useRemoteQueryStep({
|
||||
entry_point: "return",
|
||||
fields: ["id", "status", "order_id", "canceled_at"],
|
||||
fields: [
|
||||
"id",
|
||||
"status",
|
||||
"order_id",
|
||||
"claim_id",
|
||||
"exchange_id",
|
||||
"canceled_at",
|
||||
],
|
||||
variables: { id: input.return_id },
|
||||
list: false,
|
||||
throw_if_key_not_found: true,
|
||||
@@ -109,30 +117,13 @@ export const createReturnShippingMethodWorkflow = createWorkflow(
|
||||
|
||||
const shippingMethodInput = transform(
|
||||
{
|
||||
orderReturn,
|
||||
relatedEntity: orderReturn,
|
||||
shippingOptions,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
(data) => {
|
||||
const option = data.shippingOptions[0]
|
||||
const orderChange = data.orderChange
|
||||
|
||||
return {
|
||||
shipping_option_id: option.id,
|
||||
amount: data.customPrice ?? option.calculated_price.calculated_amount,
|
||||
is_tax_inclusive:
|
||||
!!option.calculated_price.is_calculated_price_tax_inclusive,
|
||||
data: option.data ?? {},
|
||||
name: option.name,
|
||||
version: orderChange.version,
|
||||
order_id: data.orderReturn.order_id,
|
||||
return_id: data.orderReturn.id,
|
||||
claim_id: data.input.claim_id,
|
||||
exchange_id: data.input.exchange_id,
|
||||
}
|
||||
}
|
||||
prepareShippingMethod("return_id")
|
||||
)
|
||||
|
||||
const createdMethods = createOrderShippingMethods({
|
||||
@@ -157,7 +148,7 @@ export const createReturnShippingMethodWorkflow = createWorkflow(
|
||||
orderReturn,
|
||||
shippingOptions,
|
||||
createdMethods,
|
||||
customPrice: input.custom_price,
|
||||
customPrice: input.custom_amount,
|
||||
orderChange,
|
||||
input,
|
||||
},
|
||||
|
||||
+54
-26
@@ -13,6 +13,7 @@ import {
|
||||
createWorkflow,
|
||||
parallelize,
|
||||
transform,
|
||||
when,
|
||||
} from "@medusajs/workflows-sdk"
|
||||
import { useRemoteQueryStep } from "../../../common"
|
||||
import {
|
||||
@@ -24,6 +25,7 @@ import {
|
||||
throwIfIsCancelled,
|
||||
throwIfOrderChangeIsNotActive,
|
||||
} from "../../utils/order-validation"
|
||||
import { prepareShippingMethodUpdate } from "../../utils/prepare-shipping-method"
|
||||
|
||||
/**
|
||||
* This step validates that a return's shipping method can be updated.
|
||||
@@ -70,7 +72,13 @@ export const updateReturnShippingMethodWorkflow = createWorkflow(
|
||||
): WorkflowResponse<OrderPreviewDTO> {
|
||||
const orderReturn: ReturnDTO = useRemoteQueryStep({
|
||||
entry_point: "return",
|
||||
fields: ["id", "status", "order_id", "canceled_at"],
|
||||
fields: [
|
||||
"id",
|
||||
"status",
|
||||
"order_id",
|
||||
"canceled_at",
|
||||
"order.currency_code",
|
||||
],
|
||||
variables: { id: input.return_id },
|
||||
list: false,
|
||||
throw_if_key_not_found: true,
|
||||
@@ -89,6 +97,49 @@ export const updateReturnShippingMethodWorkflow = createWorkflow(
|
||||
list: false,
|
||||
}).config({ name: "order-change-query" })
|
||||
|
||||
const shippingOptions = when({ input }, ({ input }) => {
|
||||
return input.data?.custom_amount === null
|
||||
}).then(() => {
|
||||
const action = transform(
|
||||
{ orderChange, input, orderReturn },
|
||||
({ orderChange, input, orderReturn }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
return {
|
||||
shipping_method_id: originalAction.reference_id,
|
||||
currency_code: (orderReturn as any).order.currency_code,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
const shippingMethod = useRemoteQueryStep({
|
||||
entry_point: "order_shipping_method",
|
||||
fields: ["id", "shipping_option_id"],
|
||||
variables: {
|
||||
id: action.shipping_method_id,
|
||||
},
|
||||
list: false,
|
||||
}).config({ name: "fetch-shipping-method" })
|
||||
|
||||
return useRemoteQueryStep({
|
||||
entry_point: "shipping_option",
|
||||
fields: [
|
||||
"id",
|
||||
"name",
|
||||
"calculated_price.calculated_amount",
|
||||
"calculated_price.is_calculated_price_tax_inclusive",
|
||||
],
|
||||
variables: {
|
||||
id: shippingMethod.shipping_option_id,
|
||||
calculated_price: {
|
||||
context: { currency_code: action.currency_code },
|
||||
},
|
||||
},
|
||||
}).config({ name: "fetch-shipping-option" })
|
||||
})
|
||||
|
||||
updateReturnShippingMethodValidationStep({
|
||||
orderReturn,
|
||||
orderChange,
|
||||
@@ -96,31 +147,8 @@ export const updateReturnShippingMethodWorkflow = createWorkflow(
|
||||
})
|
||||
|
||||
const updateData = transform(
|
||||
{ orderChange, input },
|
||||
({ input, orderChange }) => {
|
||||
const originalAction = (orderChange.actions ?? []).find(
|
||||
(a) => a.id === input.action_id
|
||||
) as OrderChangeActionDTO
|
||||
|
||||
const data = input.data
|
||||
|
||||
const action = {
|
||||
id: originalAction.id,
|
||||
amount: data.custom_price,
|
||||
internal_note: data.internal_note,
|
||||
}
|
||||
|
||||
const shippingMethod = {
|
||||
id: originalAction.reference_id,
|
||||
amount: data.custom_price,
|
||||
metadata: data.metadata,
|
||||
}
|
||||
|
||||
return {
|
||||
action,
|
||||
shippingMethod,
|
||||
}
|
||||
}
|
||||
{ orderChange, input, shippingOptions },
|
||||
prepareShippingMethodUpdate
|
||||
)
|
||||
|
||||
parallelize(
|
||||
|
||||
Reference in New Issue
Block a user