feat(core-flows): custom price flag for order line items and shipping methods (#8969)

CLOSES: CC-402
This commit is contained in:
Carlos R. L. Rodrigues
2024-09-04 17:30:59 -03:00
committed by GitHub
parent 0fe1201435
commit 2a055b71ef
28 changed files with 1991 additions and 1783 deletions
@@ -594,13 +594,17 @@ medusaIntegrationTestRunner({
adminHeaders
)
// shipping Options w/ custom price
const {
data: {
order_preview: { shipping_methods: outboundShippingMethods },
},
} = await api.post(
`/admin/claims/${claimId}/outbound/shipping-method`,
{ shipping_option_id: outboundShippingOption.id },
{
shipping_option_id: outboundShippingOption.id,
custom_amount: 12.5,
},
adminHeaders
)
@@ -608,9 +612,32 @@ medusaIntegrationTestRunner({
(m) => m.shipping_option_id == outboundShippingOption.id
)
expect(outboundShippingMethod.subtotal).toBe(12.5)
expect(outboundShippingMethod.is_custom_amount).toBe(true)
// Reset shipping custom price
const {
data: {
order_preview: { shipping_methods: outboundShippingMethods2 },
},
} = await api.post(
`/admin/claims/${claimId}/outbound/shipping-method/${outboundShippingMethod.actions[0].id}`,
{
custom_amount: null,
},
adminHeaders
)
const outboundShippingMethodReset = outboundShippingMethods2.find(
(m) => m.shipping_option_id == outboundShippingOption.id
)
expect(outboundShippingMethodReset.subtotal).toBe(20)
expect(outboundShippingMethodReset.is_custom_amount).toBe(false)
// Delete & recreate again to ensure it works for both delete and create
await api.delete(
`/admin/claims/${claimId}/outbound/shipping-method/${outboundShippingMethod.actions[0].id}`,
`/admin/claims/${claimId}/outbound/shipping-method/${outboundShippingMethodReset.actions[0].id}`,
adminHeaders
)
@@ -665,7 +665,7 @@ medusaIntegrationTestRunner({
result = await api.post(
`/admin/returns/${returnId}/shipping-method/${updateShippingActionId}`,
{
custom_price: 1002,
custom_amount: 1002,
internal_note: "cx agent note",
},
adminHeaders
@@ -203,6 +203,7 @@ medusaIntegrationTestRunner({
value: "50",
precision: 20,
},
is_custom_price: false,
metadata: null,
created_at: expect.any(String),
updated_at: expect.any(String),
@@ -95,7 +95,7 @@ medusaIntegrationTestRunner({
input: {
return_id: returnOrder.id,
shipping_option_id: shippingOptionId,
custom_price: 20,
custom_amount: 20,
},
})
@@ -845,7 +845,7 @@ export const ClaimCreateForm = ({
updateInboundShipping(
{
actionId,
custom_price: customPrice,
custom_amount: customPrice,
},
{
onError: (error) => {
@@ -916,7 +916,7 @@ export const ClaimCreateForm = ({
updateOutboundShipping(
{
actionId,
custom_price: customPrice,
custom_amount: customPrice,
},
{
onError: (error) => {
@@ -364,7 +364,7 @@ export const ExchangeCreateForm = ({
updateInboundShipping(
{
actionId,
custom_price: customPrice,
custom_amount: customPrice,
},
{
onError: (error) => {
@@ -435,7 +435,7 @@ export const ExchangeCreateForm = ({
updateOutboundShipping(
{
actionId,
custom_price: customPrice,
custom_amount: customPrice,
},
{
onError: (error) => {
@@ -646,7 +646,7 @@ export const ReturnCreateForm = ({
if (actionId) {
updateReturnShipping({
actionId,
custom_price:
custom_amount:
typeof customShippingAmount === "string"
? null
: customShippingAmount,
@@ -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
@@ -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(
@@ -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,
},
@@ -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(
@@ -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,
},
@@ -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(
@@ -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,
},
@@ -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(
@@ -24,14 +24,14 @@ interface AdminClaimUpdateItem {
interface AdminClaimAddShippingMethod {
shipping_option_id: string
custom_price?: number
custom_amount?: number
description?: string
internal_note?: string
metadata?: Record<string, unknown> | null
}
interface AdminClaimUpdateShippingMethod {
custom_price?: number | null
custom_amount?: number | null
internal_note?: string
metadata?: Record<string, unknown> | null
}
@@ -24,14 +24,14 @@ interface AdminExchangeUpdateItem {
interface AdminExchangeAddShippingMethod {
shipping_option_id: string
custom_price?: number
custom_amount?: number
description?: string
internal_note?: string
metadata?: Record<string, unknown> | null
}
interface AdminExchangeUpdateShippingMethod {
custom_price?: number | null
custom_amount?: number | null
internal_note?: string
metadata?: Record<string, unknown> | null
}
@@ -27,14 +27,14 @@ export interface AdminUpdateReturnItems {
export interface AdminAddReturnShipping {
shipping_option_id: string
custom_price?: number
custom_amount?: number
description?: string
internal_note?: string
metadata?: Record<string, unknown>
}
export interface AdminUpdateReturnShipping {
custom_price?: number
custom_amount?: number
internal_note?: string
metadata?: Record<string, unknown>
}
@@ -79,4 +79,4 @@ export interface AdminUpdateDismissItems {
internal_note?: string
reason_id?: string
metadata?: Record<string, unknown>
}
}
@@ -4,7 +4,7 @@ export interface UpdateReturnShippingMethodWorkflowInput {
return_id: string
action_id: string
data: {
custom_price?: BigNumberInput
custom_amount?: BigNumberInput | null
internal_note?: string | null
metadata?: Record<string, any> | null
}
@@ -19,7 +19,7 @@ export interface UpdateClaimShippingMethodWorkflowInput {
claim_id: string
action_id: string
data: {
custom_price?: BigNumberInput
custom_amount?: BigNumberInput | null
internal_note?: string | null
metadata?: Record<string, any> | null
}
@@ -34,7 +34,7 @@ export interface UpdateExchangeShippingMethodWorkflowInput {
exchange_id: string
action_id: string
data: {
custom_price?: BigNumberInput
custom_amount?: BigNumberInput | null
internal_note?: string | null
metadata?: Record<string, any> | null
}
@@ -44,7 +44,7 @@ export interface UpdateOrderEditShippingMethodWorkflowInput {
order_id: string
action_id: string
data: {
custom_price?: BigNumberInput
custom_amount?: BigNumberInput | null
internal_note?: string | null
metadata?: Record<string, any> | null
}
@@ -91,7 +91,7 @@ export type AdminPostCancelClaimReqSchemaType = z.infer<
export const AdminPostClaimsShippingReqSchema = z.object({
shipping_option_id: z.string(),
custom_price: z.number().optional(),
custom_amount: z.number().optional(),
description: z.string().optional(),
internal_note: z.string().optional(),
metadata: z.record(z.unknown()).optional(),
@@ -102,7 +102,7 @@ export type AdminPostClaimsShippingReqSchemaType = z.infer<
>
export const AdminPostClaimsShippingActionReqSchema = z.object({
custom_price: z.number().optional(),
custom_amount: z.number().nullish().optional(),
internal_note: z.string().nullish().optional(),
metadata: z.record(z.unknown()).nullish().optional(),
})
@@ -89,7 +89,7 @@ export type AdminPostExchangesRequestItemsReturnActionReqSchemaType = z.infer<
export const AdminPostExchangesShippingReqSchema = z.object({
shipping_option_id: z.string(),
custom_price: z.number().optional(),
custom_amount: z.number().optional(),
description: z.string().optional(),
internal_note: z.string().optional(),
metadata: z.record(z.unknown()).optional(),
@@ -100,7 +100,7 @@ export type AdminPostExchangesShippingReqSchemaType = z.infer<
>
export const AdminPostExchangesShippingActionReqSchema = z.object({
custom_price: z.number().optional(),
custom_amount: z.number().nullish().optional(),
internal_note: z.string().nullish().optional(),
metadata: z.record(z.unknown()).nullish().optional(),
})
@@ -12,7 +12,7 @@ export type AdminPostOrderEditsReqSchemaType = z.infer<
export const AdminPostOrderEditsShippingReqSchema = z.object({
shipping_option_id: z.string(),
custom_price: z.number().optional(),
custom_amount: z.number().optional(),
description: z.string().optional(),
internal_note: z.string().optional(),
metadata: z.record(z.unknown()).optional(),
@@ -23,7 +23,7 @@ export type AdminPostOrderEditsShippingReqSchemaType = z.infer<
>
export const AdminPostOrderEditsShippingActionReqSchema = z.object({
custom_price: z.number().optional(),
custom_amount: z.number().nullish().optional(),
internal_note: z.string().nullish().optional(),
metadata: z.record(z.unknown()).nullish().optional(),
})
@@ -100,7 +100,7 @@ export type AdminPostCancelReturnReqSchemaType = z.infer<
export const AdminPostReturnsShippingReqSchema = z.object({
shipping_option_id: z.string(),
custom_price: z.number().optional(),
custom_amount: z.number().optional(),
description: z.string().optional(),
internal_note: z.string().optional(),
metadata: z.record(z.unknown()).optional(),
@@ -111,7 +111,7 @@ export type AdminPostReturnsShippingReqSchemaType = z.infer<
>
export const AdminPostReturnsShippingActionReqSchema = z.object({
custom_price: z.number().optional(),
custom_amount: z.number().nullish().optional(),
internal_note: z.string().nullish().optional(),
metadata: z.record(z.unknown()).nullish().optional(),
})
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,17 @@
import { Migration } from '@mikro-orm/migrations';
export class Migration20240902195921 extends Migration {
async up(): Promise<void> {
this.addSql('alter table if exists "order_line_item" add column if not exists "is_custom_price" boolean not null default false;');
this.addSql('alter table if exists "order_shipping_method" add column if not exists "is_custom_amount" boolean not null default false;');
}
async down(): Promise<void> {
this.addSql('alter table if exists "order_line_item" drop column if exists "is_custom_price";');
this.addSql('alter table if exists "order_shipping_method" drop column if exists "is_custom_amount";');
}
}
@@ -128,6 +128,9 @@ export default class OrderLineItem {
@Property({ columnType: "jsonb" })
raw_unit_price: BigNumberRawValue
@Property({ columnType: "boolean", default: false })
is_custom_price: boolean = false
@OneToMany(() => OrderLineItemTaxLine, (taxLine) => taxLine.item, {
cascade: [Cascade.PERSIST, "soft-remove" as Cascade],
})
@@ -54,6 +54,9 @@ export default class OrderShippingMethod {
@Property({ columnType: "boolean" })
is_tax_inclusive: boolean = false
@Property({ columnType: "boolean", default: false })
is_custom_amount: boolean = false
@Property({
columnType: "text",
nullable: true,