Chore/order claims 2 (#8312)
This commit is contained in:
@@ -0,0 +1,528 @@
|
|||||||
|
import {
|
||||||
|
ClaimReason,
|
||||||
|
ClaimType,
|
||||||
|
ContainerRegistrationKeys,
|
||||||
|
ModuleRegistrationName,
|
||||||
|
Modules,
|
||||||
|
RuleOperator,
|
||||||
|
} from "@medusajs/utils"
|
||||||
|
import { medusaIntegrationTestRunner } from "medusa-test-utils"
|
||||||
|
import {
|
||||||
|
adminHeaders,
|
||||||
|
createAdminUser,
|
||||||
|
} from "../../../helpers/create-admin-user"
|
||||||
|
|
||||||
|
jest.setTimeout(30000)
|
||||||
|
|
||||||
|
medusaIntegrationTestRunner({
|
||||||
|
testSuite: ({ dbConnection, getContainer, api }) => {
|
||||||
|
let order, order2
|
||||||
|
let returnShippingOption
|
||||||
|
let shippingProfile
|
||||||
|
let fulfillmentSet
|
||||||
|
let returnReason
|
||||||
|
let inventoryItem
|
||||||
|
let inventoryItemExtra
|
||||||
|
let location
|
||||||
|
let productExtra
|
||||||
|
const shippingProviderId = "manual_test-provider"
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const container = getContainer()
|
||||||
|
await createAdminUser(dbConnection, adminHeaders, container)
|
||||||
|
|
||||||
|
const region = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/regions",
|
||||||
|
{
|
||||||
|
name: "test-region",
|
||||||
|
currency_code: "usd",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.region
|
||||||
|
|
||||||
|
const customer = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/customers",
|
||||||
|
{
|
||||||
|
first_name: "joe",
|
||||||
|
email: "joe@admin.com",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.customer
|
||||||
|
|
||||||
|
const salesChannel = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/sales-channels",
|
||||||
|
{
|
||||||
|
name: "Test channel",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.sales_channel
|
||||||
|
|
||||||
|
const product = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/products",
|
||||||
|
{
|
||||||
|
title: "Test product",
|
||||||
|
variants: [
|
||||||
|
{
|
||||||
|
title: "Test variant",
|
||||||
|
sku: "test-variant",
|
||||||
|
prices: [
|
||||||
|
{
|
||||||
|
currency_code: "usd",
|
||||||
|
amount: 10,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.product
|
||||||
|
|
||||||
|
productExtra = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/products",
|
||||||
|
{
|
||||||
|
title: "Extra product",
|
||||||
|
variants: [
|
||||||
|
{
|
||||||
|
title: "my variant",
|
||||||
|
sku: "variant-sku",
|
||||||
|
prices: [
|
||||||
|
{
|
||||||
|
currency_code: "usd",
|
||||||
|
amount: 123456.1234657890123456789,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.product
|
||||||
|
|
||||||
|
returnReason = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/return-reasons",
|
||||||
|
{
|
||||||
|
value: "return-reason-test",
|
||||||
|
label: "Test return reason",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.return_reason
|
||||||
|
|
||||||
|
const orderModule = container.resolve(ModuleRegistrationName.ORDER)
|
||||||
|
|
||||||
|
order = await orderModule.createOrders({
|
||||||
|
region_id: region.id,
|
||||||
|
email: "foo@bar.com",
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
title: "Custom Item 2",
|
||||||
|
variant_id: product.variants[0].id,
|
||||||
|
quantity: 2,
|
||||||
|
unit_price: 25,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sales_channel_id: salesChannel.id,
|
||||||
|
shipping_address: {
|
||||||
|
first_name: "Test",
|
||||||
|
last_name: "Test",
|
||||||
|
address_1: "Test",
|
||||||
|
city: "Test",
|
||||||
|
country_code: "US",
|
||||||
|
postal_code: "12345",
|
||||||
|
phone: "12345",
|
||||||
|
},
|
||||||
|
billing_address: {
|
||||||
|
first_name: "Test",
|
||||||
|
last_name: "Test",
|
||||||
|
address_1: "Test",
|
||||||
|
city: "Test",
|
||||||
|
country_code: "US",
|
||||||
|
postal_code: "12345",
|
||||||
|
},
|
||||||
|
shipping_methods: [
|
||||||
|
{
|
||||||
|
name: "Test shipping method",
|
||||||
|
amount: 10,
|
||||||
|
data: {},
|
||||||
|
tax_lines: [
|
||||||
|
{
|
||||||
|
description: "shipping Tax 1",
|
||||||
|
tax_rate_id: "tax_usa_shipping",
|
||||||
|
code: "code",
|
||||||
|
rate: 10,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
currency_code: "usd",
|
||||||
|
customer_id: customer.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
order2 = await orderModule.createOrders({
|
||||||
|
region_id: region.id,
|
||||||
|
email: "foo@bar2.com",
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
title: "Custom Iasdasd2",
|
||||||
|
quantity: 1,
|
||||||
|
unit_price: 20,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sales_channel_id: salesChannel.id,
|
||||||
|
shipping_address: {
|
||||||
|
first_name: "Test",
|
||||||
|
last_name: "Test",
|
||||||
|
address_1: "Test",
|
||||||
|
city: "Test",
|
||||||
|
country_code: "US",
|
||||||
|
postal_code: "12345",
|
||||||
|
phone: "12345",
|
||||||
|
},
|
||||||
|
billing_address: {
|
||||||
|
first_name: "Test",
|
||||||
|
last_name: "Test",
|
||||||
|
address_1: "Test",
|
||||||
|
city: "Test",
|
||||||
|
country_code: "US",
|
||||||
|
postal_code: "12345",
|
||||||
|
},
|
||||||
|
currency_code: "usd",
|
||||||
|
customer_id: customer.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
shippingProfile = (
|
||||||
|
await api.post(
|
||||||
|
`/admin/shipping-profiles`,
|
||||||
|
{
|
||||||
|
name: "Test",
|
||||||
|
type: "default",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.shipping_profile
|
||||||
|
|
||||||
|
location = (
|
||||||
|
await api.post(
|
||||||
|
`/admin/stock-locations`,
|
||||||
|
{
|
||||||
|
name: "Test location",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.stock_location
|
||||||
|
|
||||||
|
location = (
|
||||||
|
await api.post(
|
||||||
|
`/admin/stock-locations/${location.id}/fulfillment-sets?fields=*fulfillment_sets`,
|
||||||
|
{
|
||||||
|
name: "Test",
|
||||||
|
type: "test-type",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.stock_location
|
||||||
|
|
||||||
|
fulfillmentSet = (
|
||||||
|
await api.post(
|
||||||
|
`/admin/fulfillment-sets/${location.fulfillment_sets[0].id}/service-zones`,
|
||||||
|
{
|
||||||
|
name: "Test",
|
||||||
|
geo_zones: [{ type: "country", country_code: "us" }],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.fulfillment_set
|
||||||
|
|
||||||
|
inventoryItem = (
|
||||||
|
await api.post(
|
||||||
|
`/admin/inventory-items`,
|
||||||
|
{ sku: "inv-1234" },
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.inventory_item
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/inventory-items/${inventoryItem.id}/location-levels`,
|
||||||
|
{
|
||||||
|
location_id: location.id,
|
||||||
|
stocked_quantity: 2,
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
inventoryItemExtra = (
|
||||||
|
await api.get(`/admin/inventory-items?sku=variant-sku`, adminHeaders)
|
||||||
|
).data.inventory_items[0]
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/inventory-items/${inventoryItemExtra.id}/location-levels`,
|
||||||
|
{
|
||||||
|
location_id: location.id,
|
||||||
|
stocked_quantity: 4,
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
const remoteLink = container.resolve(
|
||||||
|
ContainerRegistrationKeys.REMOTE_LINK
|
||||||
|
)
|
||||||
|
|
||||||
|
await remoteLink.create([
|
||||||
|
{
|
||||||
|
[Modules.STOCK_LOCATION]: {
|
||||||
|
stock_location_id: location.id,
|
||||||
|
},
|
||||||
|
[Modules.FULFILLMENT]: {
|
||||||
|
fulfillment_provider_id: shippingProviderId,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[Modules.STOCK_LOCATION]: {
|
||||||
|
stock_location_id: location.id,
|
||||||
|
},
|
||||||
|
[Modules.FULFILLMENT]: {
|
||||||
|
fulfillment_set_id: fulfillmentSet.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[Modules.SALES_CHANNEL]: {
|
||||||
|
sales_channel_id: salesChannel.id,
|
||||||
|
},
|
||||||
|
[Modules.STOCK_LOCATION]: {
|
||||||
|
stock_location_id: location.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[Modules.PRODUCT]: {
|
||||||
|
variant_id: product.variants[0].id,
|
||||||
|
},
|
||||||
|
[Modules.INVENTORY]: {
|
||||||
|
inventory_item_id: inventoryItem.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[Modules.PRODUCT]: {
|
||||||
|
variant_id: productExtra.variants[0].id,
|
||||||
|
},
|
||||||
|
[Modules.INVENTORY]: {
|
||||||
|
inventory_item_id: inventoryItemExtra.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
const shippingOptionPayload = {
|
||||||
|
name: "Return shipping",
|
||||||
|
service_zone_id: fulfillmentSet.service_zones[0].id,
|
||||||
|
shipping_profile_id: shippingProfile.id,
|
||||||
|
provider_id: shippingProviderId,
|
||||||
|
price_type: "flat",
|
||||||
|
type: {
|
||||||
|
label: "Test type",
|
||||||
|
description: "Test description",
|
||||||
|
code: "test-code",
|
||||||
|
},
|
||||||
|
prices: [
|
||||||
|
{
|
||||||
|
currency_code: "usd",
|
||||||
|
amount: 1000,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
operator: RuleOperator.EQ,
|
||||||
|
attribute: "is_return",
|
||||||
|
value: "true",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
returnShippingOption = (
|
||||||
|
await api.post(
|
||||||
|
"/admin/shipping-options",
|
||||||
|
shippingOptionPayload,
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.shipping_option
|
||||||
|
|
||||||
|
const item = order.items[0]
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/orders/${order.id}/fulfillments`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: item.id,
|
||||||
|
quantity: 2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/orders/${order2.id}/fulfillments`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: order2.items[0].id,
|
||||||
|
quantity: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("Returns lifecycle", () => {
|
||||||
|
it.only("Full flow with 2 orders", async () => {
|
||||||
|
let result = await api.post(
|
||||||
|
"/admin/claims",
|
||||||
|
{
|
||||||
|
order_id: order.id,
|
||||||
|
type: ClaimType.REPLACE,
|
||||||
|
description: "Test",
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
let r2 = await api.post(
|
||||||
|
"/admin/claims",
|
||||||
|
{
|
||||||
|
order_id: order2.id,
|
||||||
|
type: ClaimType.REFUND,
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
const claimId2 = r2.data.claim.id
|
||||||
|
const item2 = order2.items[0]
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/claims/${claimId2}/inbound/items`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: item2.id,
|
||||||
|
quantity: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/claims/${claimId2}/inbound/shipping-method`,
|
||||||
|
{
|
||||||
|
shipping_option_id: returnShippingOption.id,
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
await api.post(`/admin/claims/${claimId2}/request`, {}, adminHeaders)
|
||||||
|
|
||||||
|
const claimId = result.data.claim.id
|
||||||
|
|
||||||
|
const item = order.items[0]
|
||||||
|
|
||||||
|
result = await api.post(
|
||||||
|
`/admin/claims/${claimId}/inbound/items`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: item.id,
|
||||||
|
reason_id: returnReason.id,
|
||||||
|
quantity: 2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/claims/${claimId}/inbound/shipping-method`,
|
||||||
|
{
|
||||||
|
shipping_option_id: returnShippingOption.id,
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
// updated the requested quantity
|
||||||
|
const updateReturnItemActionId =
|
||||||
|
result.data.order_preview.items[0].actions[0].id
|
||||||
|
|
||||||
|
result = await api.post(
|
||||||
|
`/admin/claims/${claimId}/inbound/items/${updateReturnItemActionId}`,
|
||||||
|
{
|
||||||
|
quantity: 1,
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
// New Items
|
||||||
|
await api.post(
|
||||||
|
`/admin/claims/${claimId}/outbound/items`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
variant_id: productExtra.variants[0].id,
|
||||||
|
quantity: 2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
// Claim Items
|
||||||
|
await api.post(
|
||||||
|
`/admin/claims/${claimId}/claim-items`,
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
id: item.id,
|
||||||
|
reason: ClaimReason.PRODUCTION_FAILURE,
|
||||||
|
quantity: 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
result = await api.post(
|
||||||
|
`/admin/claims/${claimId}/request`,
|
||||||
|
{},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
result = (
|
||||||
|
await api.get(
|
||||||
|
`/admin/claims?fields=*claim_items,*additional_items`,
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.claims
|
||||||
|
expect(result).toHaveLength(2)
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
JSON.stringify(
|
||||||
|
(
|
||||||
|
await api.get(
|
||||||
|
`/admin/orders?fields=*items,total,summary`,
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
).data.orders[0],
|
||||||
|
null,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -140,6 +140,12 @@ medusaIntegrationTestRunner({
|
|||||||
},
|
},
|
||||||
currency_code: "usd",
|
currency_code: "usd",
|
||||||
customer_id: "joe",
|
customer_id: "joe",
|
||||||
|
transactions: [
|
||||||
|
{
|
||||||
|
amount: 20,
|
||||||
|
currency_code: "usd",
|
||||||
|
},
|
||||||
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
shippingProfile = (
|
shippingProfile = (
|
||||||
@@ -328,6 +334,7 @@ medusaIntegrationTestRunner({
|
|||||||
},
|
},
|
||||||
adminHeaders
|
adminHeaders
|
||||||
)
|
)
|
||||||
|
|
||||||
await api.post(
|
await api.post(
|
||||||
`/admin/returns/${returnId2}/shipping-method`,
|
`/admin/returns/${returnId2}/shipping-method`,
|
||||||
{
|
{
|
||||||
@@ -335,6 +342,7 @@ medusaIntegrationTestRunner({
|
|||||||
},
|
},
|
||||||
adminHeaders
|
adminHeaders
|
||||||
)
|
)
|
||||||
|
|
||||||
await api.post(`/admin/returns/${returnId2}/request`, {}, adminHeaders)
|
await api.post(`/admin/returns/${returnId2}/request`, {}, adminHeaders)
|
||||||
|
|
||||||
const returnId = result.data.return.id
|
const returnId = result.data.return.id
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
import { IOrderModuleService, OrderChangeActionDTO } from "@medusajs/types"
|
||||||
|
import { ChangeActionType, ModuleRegistrationName } from "@medusajs/utils"
|
||||||
|
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||||
|
|
||||||
|
type CreateOrderClaimItemsInput = {
|
||||||
|
changes: OrderChangeActionDTO[]
|
||||||
|
claimId: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createOrderClaimItemsStep = createStep(
|
||||||
|
"create-claim-items",
|
||||||
|
async (input: CreateOrderClaimItemsInput, { container }) => {
|
||||||
|
const orderModuleService = container.resolve<IOrderModuleService>(
|
||||||
|
ModuleRegistrationName.ORDER
|
||||||
|
)
|
||||||
|
|
||||||
|
const claimItems = input.changes.map((item) => {
|
||||||
|
let additionalFields
|
||||||
|
if (item.action === ChangeActionType.ITEM_ADD) {
|
||||||
|
additionalFields = {
|
||||||
|
is_additional_item: true,
|
||||||
|
}
|
||||||
|
} else if (item.action === ChangeActionType.WRITE_OFF_ITEM) {
|
||||||
|
additionalFields = {
|
||||||
|
reason: item.details?.reason,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
claim_id: input.claimId,
|
||||||
|
item_id: item.details?.reference_id! as string,
|
||||||
|
quantity: item.details?.quantity as number,
|
||||||
|
note: item.internal_note,
|
||||||
|
metadata: (item.details?.metadata as Record<string, unknown>) ?? {},
|
||||||
|
...additionalFields,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const createdClaimItems = await orderModuleService.createOrderClaimItems(
|
||||||
|
claimItems
|
||||||
|
)
|
||||||
|
|
||||||
|
return new StepResponse(
|
||||||
|
createdClaimItems,
|
||||||
|
createdClaimItems.map((i) => i.id)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
async (ids, { container }) => {
|
||||||
|
if (!ids) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const orderModuleService = container.resolve<IOrderModuleService>(
|
||||||
|
ModuleRegistrationName.ORDER
|
||||||
|
)
|
||||||
|
|
||||||
|
await orderModuleService.deleteOrderClaimItems(ids)
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -28,6 +28,7 @@ export const createReturnItemsStep = createStep(
|
|||||||
metadata: (item.details?.metadata as Record<string, unknown>) ?? {},
|
metadata: (item.details?.metadata as Record<string, unknown>) ?? {},
|
||||||
} as CreateOrderReturnItemDTO
|
} as CreateOrderReturnItemDTO
|
||||||
})
|
})
|
||||||
|
|
||||||
const createdReturnItems = await orderModuleService.createReturnItems(
|
const createdReturnItems = await orderModuleService.createReturnItems(
|
||||||
returnItems
|
returnItems
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export * from "./cancel-order-change"
|
|||||||
export * from "./cancel-orders"
|
export * from "./cancel-orders"
|
||||||
export * from "./cancel-return"
|
export * from "./cancel-return"
|
||||||
export * from "./complete-orders"
|
export * from "./complete-orders"
|
||||||
|
export * from "./create-claim-items"
|
||||||
export * from "./create-claims"
|
export * from "./create-claims"
|
||||||
export * from "./create-complete-return"
|
export * from "./create-complete-return"
|
||||||
export * from "./create-exchanges"
|
export * from "./create-exchanges"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export const cancelBeginOrderClaimWorkflow = createWorkflow(
|
|||||||
cancelBeginOrderClaimWorkflowId,
|
cancelBeginOrderClaimWorkflowId,
|
||||||
function (input: WorkflowInput): WorkflowData<void> {
|
function (input: WorkflowInput): WorkflowData<void> {
|
||||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
entry_point: "claim",
|
entry_point: "order_claim",
|
||||||
fields: ["id", "status", "order_id", "return_id", "canceled_at"],
|
fields: ["id", "status", "order_id", "return_id", "canceled_at"],
|
||||||
variables: { id: input.claim_id },
|
variables: { id: input.claim_id },
|
||||||
list: false,
|
list: false,
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ export const orderClaimAddNewItemWorkflow = createWorkflow(
|
|||||||
details: {
|
details: {
|
||||||
reference_id: lineItems[index].id,
|
reference_id: lineItems[index].id,
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
unit_price: item.unit_price,
|
unit_price: item.unit_price ?? lineItems[index].unit_price,
|
||||||
metadata: item.metadata,
|
metadata: item.metadata,
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ export const orderClaimItemWorkflow = createWorkflow(
|
|||||||
reference_id: orderClaim.id,
|
reference_id: orderClaim.id,
|
||||||
details: {
|
details: {
|
||||||
reference_id: item.id,
|
reference_id: item.id,
|
||||||
|
reason: item.reason,
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ export const orderClaimRequestItemReturnWorkflow = createWorkflow(
|
|||||||
details: {
|
details: {
|
||||||
reference_id: item.id,
|
reference_id: item.id,
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
|
reason_id: item.reason_id,
|
||||||
metadata: item.metadata,
|
metadata: item.metadata,
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -0,0 +1,361 @@
|
|||||||
|
import {
|
||||||
|
FulfillmentWorkflow,
|
||||||
|
OrderChangeActionDTO,
|
||||||
|
OrderChangeDTO,
|
||||||
|
OrderClaimDTO,
|
||||||
|
OrderDTO,
|
||||||
|
} from "@medusajs/types"
|
||||||
|
import { ChangeActionType, Modules, OrderChangeStatus } from "@medusajs/utils"
|
||||||
|
import {
|
||||||
|
WorkflowData,
|
||||||
|
createStep,
|
||||||
|
createWorkflow,
|
||||||
|
parallelize,
|
||||||
|
transform,
|
||||||
|
when,
|
||||||
|
} from "@medusajs/workflows-sdk"
|
||||||
|
import { createRemoteLinkStep, useRemoteQueryStep } from "../../../common"
|
||||||
|
import { createFulfillmentWorkflow } from "../../../fulfillment/workflows/create-fulfillment"
|
||||||
|
import { createReturnFulfillmentWorkflow } from "../../../fulfillment/workflows/create-return-fulfillment"
|
||||||
|
import { previewOrderChangeStep } from "../../steps"
|
||||||
|
import { confirmOrderChanges } from "../../steps/confirm-order-changes"
|
||||||
|
import { createOrderClaimItemsStep } from "../../steps/create-claim-items"
|
||||||
|
import { createReturnItemsStep } from "../../steps/create-return-items"
|
||||||
|
import {
|
||||||
|
throwIfIsCancelled,
|
||||||
|
throwIfOrderChangeIsNotActive,
|
||||||
|
} from "../../utils/order-validation"
|
||||||
|
|
||||||
|
type WorkflowInput = {
|
||||||
|
claim_id: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const validationStep = createStep(
|
||||||
|
"validate-confirm-claim-request",
|
||||||
|
async function ({
|
||||||
|
order,
|
||||||
|
orderChange,
|
||||||
|
orderClaim,
|
||||||
|
}: {
|
||||||
|
order: OrderDTO
|
||||||
|
orderClaim: OrderClaimDTO
|
||||||
|
orderChange: OrderChangeDTO
|
||||||
|
}) {
|
||||||
|
throwIfIsCancelled(order, "Order")
|
||||||
|
throwIfIsCancelled(orderClaim, "Claim")
|
||||||
|
throwIfOrderChangeIsNotActive({ orderChange })
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
function prepareFulfillmentData({
|
||||||
|
order,
|
||||||
|
items,
|
||||||
|
shippingOption,
|
||||||
|
deliveryAddress,
|
||||||
|
}: {
|
||||||
|
order: OrderDTO
|
||||||
|
items: any[]
|
||||||
|
shippingOption: {
|
||||||
|
id: string
|
||||||
|
provider_id: string
|
||||||
|
service_zone: {
|
||||||
|
fulfillment_set: {
|
||||||
|
location?: {
|
||||||
|
id: string
|
||||||
|
address: Record<string, any>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deliveryAddress?: Record<string, any>
|
||||||
|
}) {
|
||||||
|
const orderItemsMap = new Map<string, Required<OrderDTO>["items"][0]>(
|
||||||
|
order.items!.map((i) => [i.id, i])
|
||||||
|
)
|
||||||
|
const fulfillmentItems = items.map((i) => {
|
||||||
|
const orderItem = orderItemsMap.get(i.item_id)!
|
||||||
|
return {
|
||||||
|
line_item_id: i.item_id,
|
||||||
|
quantity: i.quantity,
|
||||||
|
return_quantity: i.quantity,
|
||||||
|
title: orderItem.variant_title ?? orderItem.title,
|
||||||
|
sku: orderItem.variant_sku || "",
|
||||||
|
barcode: orderItem.variant_barcode || "",
|
||||||
|
} as FulfillmentWorkflow.CreateFulfillmentItemWorkflowDTO
|
||||||
|
})
|
||||||
|
|
||||||
|
const locationId = shippingOption.service_zone.fulfillment_set.location?.id!
|
||||||
|
|
||||||
|
// delivery address is the stock location address
|
||||||
|
const address =
|
||||||
|
deliveryAddress ??
|
||||||
|
shippingOption.service_zone.fulfillment_set.location?.address ??
|
||||||
|
{}
|
||||||
|
|
||||||
|
delete address.id
|
||||||
|
|
||||||
|
return {
|
||||||
|
input: {
|
||||||
|
location_id: locationId,
|
||||||
|
provider_id: shippingOption.provider_id,
|
||||||
|
shipping_option_id: shippingOption.id,
|
||||||
|
items: fulfillmentItems,
|
||||||
|
delivery_address: address,
|
||||||
|
order: order,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function transformActionsToItems({ orderChange }) {
|
||||||
|
const claimItems: OrderChangeActionDTO[] = []
|
||||||
|
const returnItems: OrderChangeActionDTO[] = []
|
||||||
|
|
||||||
|
const actions = orderChange.actions ?? []
|
||||||
|
actions.forEach((item) => {
|
||||||
|
if (item.action === ChangeActionType.RETURN_ITEM) {
|
||||||
|
returnItems.push(item)
|
||||||
|
} else if (
|
||||||
|
item.action === ChangeActionType.ITEM_ADD ||
|
||||||
|
item.action === ChangeActionType.WRITE_OFF_ITEM
|
||||||
|
) {
|
||||||
|
claimItems.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
claimItems: {
|
||||||
|
changes: claimItems,
|
||||||
|
claimId: claimItems?.[0]?.claim_id!,
|
||||||
|
},
|
||||||
|
returnItems: {
|
||||||
|
changes: returnItems,
|
||||||
|
returnId: returnItems?.[0]?.return_id!,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function extractShippingOption({ orderPreview, orderClaim, returnId }) {
|
||||||
|
if (!orderPreview.shipping_methods?.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let returnShippingMethod
|
||||||
|
let claimShippingMethod
|
||||||
|
for (const shippingMethod of orderPreview.shipping_methods) {
|
||||||
|
const modifiedShippingMethod_ = shippingMethod as any
|
||||||
|
if (!modifiedShippingMethod_.actions) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const action of modifiedShippingMethod_.actions) {
|
||||||
|
if (action.action === ChangeActionType.SHIPPING_ADD) {
|
||||||
|
if (action.return_id === returnId) {
|
||||||
|
returnShippingMethod = shippingMethod
|
||||||
|
} else if (action.claim_id === orderClaim.id) {
|
||||||
|
claimShippingMethod = shippingMethod
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
returnShippingMethod,
|
||||||
|
claimShippingMethod,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const confirmClaimRequestWorkflowId = "confirm-claim-request"
|
||||||
|
export const confirmClaimRequestWorkflow = createWorkflow(
|
||||||
|
confirmClaimRequestWorkflowId,
|
||||||
|
function (input: WorkflowInput): WorkflowData<OrderDTO> {
|
||||||
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
|
entry_point: "order_claim",
|
||||||
|
fields: ["id", "status", "order_id", "canceled_at"],
|
||||||
|
variables: { id: input.claim_id },
|
||||||
|
list: false,
|
||||||
|
throw_if_key_not_found: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
const order: OrderDTO = useRemoteQueryStep({
|
||||||
|
entry_point: "orders",
|
||||||
|
fields: [
|
||||||
|
"id",
|
||||||
|
"version",
|
||||||
|
"canceled_at",
|
||||||
|
"items.id",
|
||||||
|
"items.title",
|
||||||
|
"items.variant_title",
|
||||||
|
"items.variant_sku",
|
||||||
|
"items.variant_barcode",
|
||||||
|
"shipping_address.*",
|
||||||
|
],
|
||||||
|
variables: { id: orderClaim.order_id },
|
||||||
|
list: false,
|
||||||
|
throw_if_key_not_found: true,
|
||||||
|
}).config({ name: "order-query" })
|
||||||
|
|
||||||
|
const orderChange: OrderChangeDTO = useRemoteQueryStep({
|
||||||
|
entry_point: "order_change",
|
||||||
|
fields: [
|
||||||
|
"id",
|
||||||
|
"actions.id",
|
||||||
|
"actions.claim_id",
|
||||||
|
"actions.return_id",
|
||||||
|
"actions.action",
|
||||||
|
"actions.details",
|
||||||
|
"actions.reference",
|
||||||
|
"actions.reference_id",
|
||||||
|
"actions.internal_note",
|
||||||
|
],
|
||||||
|
variables: {
|
||||||
|
filters: {
|
||||||
|
order_id: orderClaim.order_id,
|
||||||
|
claim_id: orderClaim.id,
|
||||||
|
status: [OrderChangeStatus.PENDING, OrderChangeStatus.REQUESTED],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
list: false,
|
||||||
|
}).config({ name: "order-change-query" })
|
||||||
|
|
||||||
|
validationStep({ order, orderClaim, orderChange })
|
||||||
|
|
||||||
|
const { claimItems, returnItems } = transform(
|
||||||
|
{ orderChange },
|
||||||
|
transformActionsToItems
|
||||||
|
)
|
||||||
|
|
||||||
|
const orderPreview = previewOrderChangeStep(order.id)
|
||||||
|
|
||||||
|
const [createClaimItems, createdReturnItems] = parallelize(
|
||||||
|
createOrderClaimItemsStep(claimItems),
|
||||||
|
createReturnItemsStep(returnItems),
|
||||||
|
confirmOrderChanges({ changes: [orderChange], orderId: order.id })
|
||||||
|
)
|
||||||
|
|
||||||
|
const returnId = transform(
|
||||||
|
{ createdReturnItems },
|
||||||
|
({ createdReturnItems }) => {
|
||||||
|
return createdReturnItems?.[0]?.return_id
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const claimId = transform({ createClaimItems }, ({ createClaimItems }) => {
|
||||||
|
return createClaimItems?.[0]?.claim_id
|
||||||
|
})
|
||||||
|
|
||||||
|
const { returnShippingMethod, claimShippingMethod } = transform(
|
||||||
|
{ orderPreview, orderClaim, returnId },
|
||||||
|
extractShippingOption
|
||||||
|
)
|
||||||
|
|
||||||
|
when({ claimShippingMethod }, ({ claimShippingMethod }) => {
|
||||||
|
return !!claimShippingMethod
|
||||||
|
}).then(() => {
|
||||||
|
const claim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
|
entry_point: "order_claim",
|
||||||
|
fields: [
|
||||||
|
"id",
|
||||||
|
"version",
|
||||||
|
"canceled_at",
|
||||||
|
"additional_items.id",
|
||||||
|
"additional_items.title",
|
||||||
|
"additional_items.variant_title",
|
||||||
|
"additional_items.variant_sku",
|
||||||
|
"additional_items.variant_barcode",
|
||||||
|
],
|
||||||
|
variables: { id: claimId },
|
||||||
|
list: false,
|
||||||
|
throw_if_key_not_found: true,
|
||||||
|
}).config({ name: "claim-query" })
|
||||||
|
|
||||||
|
const claimShippingOption = useRemoteQueryStep({
|
||||||
|
entry_point: "shipping_options",
|
||||||
|
fields: [
|
||||||
|
"id",
|
||||||
|
"provider_id",
|
||||||
|
"service_zone.fulfillment_set.location.id",
|
||||||
|
"service_zone.fulfillment_set.location.address.*",
|
||||||
|
],
|
||||||
|
variables: {
|
||||||
|
id: claimShippingMethod.shipping_option_id,
|
||||||
|
},
|
||||||
|
list: false,
|
||||||
|
throw_if_key_not_found: true,
|
||||||
|
}).config({ name: "claim-shipping-option" })
|
||||||
|
|
||||||
|
const fulfillmentData = transform(
|
||||||
|
{
|
||||||
|
order,
|
||||||
|
items: claim.additional_items! ?? [],
|
||||||
|
shippingOption: claimShippingOption,
|
||||||
|
deliveryAddress: order.shipping_address,
|
||||||
|
},
|
||||||
|
prepareFulfillmentData
|
||||||
|
)
|
||||||
|
|
||||||
|
const fulfillment = createFulfillmentWorkflow.runAsStep(fulfillmentData)
|
||||||
|
|
||||||
|
const link = transform({ fulfillment, order }, (data) => {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
[Modules.ORDER]: { order_id: data.order.id },
|
||||||
|
[Modules.FULFILLMENT]: { fulfillment_id: data.fulfillment.id },
|
||||||
|
},
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
createRemoteLinkStep(link).config({
|
||||||
|
name: "claim-shipping-fulfillment-link",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
when({ returnShippingMethod }, ({ returnShippingMethod }) => {
|
||||||
|
return !!returnShippingMethod
|
||||||
|
}).then(() => {
|
||||||
|
const returnShippingOption = useRemoteQueryStep({
|
||||||
|
entry_point: "shipping_options",
|
||||||
|
fields: [
|
||||||
|
"id",
|
||||||
|
"provider_id",
|
||||||
|
"service_zone.fulfillment_set.location.id",
|
||||||
|
"service_zone.fulfillment_set.location.address.*",
|
||||||
|
],
|
||||||
|
variables: {
|
||||||
|
id: returnShippingMethod.shipping_option_id,
|
||||||
|
},
|
||||||
|
list: false,
|
||||||
|
throw_if_key_not_found: true,
|
||||||
|
}).config({ name: "claim-return-shipping-option" })
|
||||||
|
|
||||||
|
const fulfillmentData = transform(
|
||||||
|
{
|
||||||
|
order,
|
||||||
|
items: order.items!,
|
||||||
|
shippingOption: returnShippingOption,
|
||||||
|
},
|
||||||
|
prepareFulfillmentData
|
||||||
|
)
|
||||||
|
|
||||||
|
const returnFulfillment =
|
||||||
|
createReturnFulfillmentWorkflow.runAsStep(fulfillmentData)
|
||||||
|
|
||||||
|
const returnLink = transform(
|
||||||
|
{ returnId, fulfillment: returnFulfillment },
|
||||||
|
(data) => {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
[Modules.ORDER]: { return_id: data.returnId },
|
||||||
|
[Modules.FULFILLMENT]: { fulfillment_id: data.fulfillment.id },
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
createRemoteLinkStep(returnLink).config({
|
||||||
|
name: "claim-return-shipping-fulfillment-link",
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return orderPreview
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -48,7 +48,7 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
|||||||
custom_price?: BigNumberInput
|
custom_price?: BigNumberInput
|
||||||
}): WorkflowData<OrderDTO> {
|
}): WorkflowData<OrderDTO> {
|
||||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
entry_point: "claim",
|
entry_point: "order_claim",
|
||||||
fields: ["id", "status", "order_id", "canceled_at"],
|
fields: ["id", "status", "order_id", "canceled_at"],
|
||||||
variables: { id: input.claim_id },
|
variables: { id: input.claim_id },
|
||||||
list: false,
|
list: false,
|
||||||
@@ -115,8 +115,8 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
|||||||
name: option.name,
|
name: option.name,
|
||||||
version: orderChange.version,
|
version: orderChange.version,
|
||||||
order_id: data.orderClaim.order_id,
|
order_id: data.orderClaim.order_id,
|
||||||
return_id: data.orderClaim.id,
|
return_id: input.return_id,
|
||||||
claim_id: data.input.claim_id,
|
claim_id: data.orderClaim.id,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -156,8 +156,8 @@ export const createClaimShippingMethodWorkflow = createWorkflow(
|
|||||||
reference_id: createdMethod.id,
|
reference_id: createdMethod.id,
|
||||||
amount: methodPrice,
|
amount: methodPrice,
|
||||||
order_id: order.id,
|
order_id: order.id,
|
||||||
return_id: orderClaim.id,
|
return_id: input.return_id,
|
||||||
claim_id: input.claim_id,
|
claim_id: orderClaim.id,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export const removeItemClaimActionWorkflow = createWorkflow(
|
|||||||
input: WorkflowData<OrderWorkflow.DeleteOrderClaimItemActionWorkflowInput>
|
input: WorkflowData<OrderWorkflow.DeleteOrderClaimItemActionWorkflowInput>
|
||||||
): WorkflowData<OrderDTO> {
|
): WorkflowData<OrderDTO> {
|
||||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
entry_point: "claim",
|
entry_point: "order_claim",
|
||||||
fields: ["id", "status", "order_id", "canceled_at"],
|
fields: ["id", "status", "order_id", "canceled_at"],
|
||||||
variables: { id: input.claim_id },
|
variables: { id: input.claim_id },
|
||||||
list: false,
|
list: false,
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ export const removeClaimShippingMethodWorkflow = createWorkflow(
|
|||||||
input: WorkflowData<OrderWorkflow.DeleteClaimShippingMethodWorkflowInput>
|
input: WorkflowData<OrderWorkflow.DeleteClaimShippingMethodWorkflowInput>
|
||||||
): WorkflowData {
|
): WorkflowData {
|
||||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
entry_point: "claim",
|
entry_point: "order_claim",
|
||||||
fields: ["id", "status", "order_id", "canceled_at"],
|
fields: ["id", "status", "order_id", "canceled_at"],
|
||||||
variables: { id: input.claim_id },
|
variables: { id: input.claim_id },
|
||||||
list: false,
|
list: false,
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export const updateClaimAddItemWorkflow = createWorkflow(
|
|||||||
input: WorkflowData<OrderWorkflow.UpdateClaimAddNewItemWorkflowInput>
|
input: WorkflowData<OrderWorkflow.UpdateClaimAddNewItemWorkflowInput>
|
||||||
): WorkflowData<OrderDTO> {
|
): WorkflowData<OrderDTO> {
|
||||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
entry_point: "claim",
|
entry_point: "order_claim",
|
||||||
fields: ["id", "status", "order_id", "canceled_at"],
|
fields: ["id", "status", "order_id", "canceled_at"],
|
||||||
variables: { id: input.claim_id },
|
variables: { id: input.claim_id },
|
||||||
list: false,
|
list: false,
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ export const updateClaimItemWorkflow = createWorkflow(
|
|||||||
input: WorkflowData<OrderWorkflow.UpdateClaimItemWorkflowInput>
|
input: WorkflowData<OrderWorkflow.UpdateClaimItemWorkflowInput>
|
||||||
): WorkflowData<OrderDTO> {
|
): WorkflowData<OrderDTO> {
|
||||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
entry_point: "claim",
|
entry_point: "order_claim",
|
||||||
fields: ["id", "status", "order_id", "canceled_at"],
|
fields: ["id", "status", "order_id", "canceled_at"],
|
||||||
variables: { id: input.claim_id },
|
variables: { id: input.claim_id },
|
||||||
list: false,
|
list: false,
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ export const updateClaimShippingMethodWorkflow = createWorkflow(
|
|||||||
input: WorkflowData<OrderWorkflow.UpdateClaimShippingMethodWorkflowInput>
|
input: WorkflowData<OrderWorkflow.UpdateClaimShippingMethodWorkflowInput>
|
||||||
): WorkflowData {
|
): WorkflowData {
|
||||||
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
const orderClaim: OrderClaimDTO = useRemoteQueryStep({
|
||||||
entry_point: "claim",
|
entry_point: "order_claim",
|
||||||
fields: ["id", "status", "order_id", "canceled_at"],
|
fields: ["id", "status", "order_id", "canceled_at"],
|
||||||
variables: { id: input.claim_id },
|
variables: { id: input.claim_id },
|
||||||
list: false,
|
list: false,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export * from "./claim/cancel-begin-order-claim"
|
|||||||
export * from "./claim/claim-add-new-item"
|
export * from "./claim/claim-add-new-item"
|
||||||
export * from "./claim/claim-item"
|
export * from "./claim/claim-item"
|
||||||
export * from "./claim/claim-request-item-return"
|
export * from "./claim/claim-request-item-return"
|
||||||
|
export * from "./claim/confirm-claim-request"
|
||||||
export * from "./claim/create-claim-shipping-method"
|
export * from "./claim/create-claim-shipping-method"
|
||||||
export * from "./claim/remove-claim-item-action"
|
export * from "./claim/remove-claim-item-action"
|
||||||
export * from "./claim/remove-claim-shipping-method"
|
export * from "./claim/remove-claim-shipping-method"
|
||||||
|
|||||||
@@ -4,12 +4,7 @@ import {
|
|||||||
OrderDTO,
|
OrderDTO,
|
||||||
ReturnDTO,
|
ReturnDTO,
|
||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
import {
|
import { ChangeActionType, Modules, OrderChangeStatus } from "@medusajs/utils"
|
||||||
ChangeActionType,
|
|
||||||
MedusaError,
|
|
||||||
Modules,
|
|
||||||
OrderChangeStatus,
|
|
||||||
} from "@medusajs/utils"
|
|
||||||
import {
|
import {
|
||||||
WorkflowData,
|
WorkflowData,
|
||||||
createStep,
|
createStep,
|
||||||
@@ -84,7 +79,7 @@ function prepareFulfillmentData({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const locationId =
|
const locationId =
|
||||||
returnShippingOption.service_zone.fulfillment_set.location?.id
|
returnShippingOption.service_zone.fulfillment_set.location?.id!
|
||||||
|
|
||||||
// delivery address is the stock location address
|
// delivery address is the stock location address
|
||||||
const address =
|
const address =
|
||||||
@@ -92,13 +87,6 @@ function prepareFulfillmentData({
|
|||||||
|
|
||||||
delete address.id
|
delete address.id
|
||||||
|
|
||||||
if (!locationId) {
|
|
||||||
throw new MedusaError(
|
|
||||||
MedusaError.Types.INVALID_DATA,
|
|
||||||
`Cannot create return without stock location, either provide a location or you should link the shipping option ${returnShippingOption.id} to a stock location.`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
input: {
|
input: {
|
||||||
location_id: locationId,
|
location_id: locationId,
|
||||||
@@ -111,6 +99,31 @@ function prepareFulfillmentData({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function extractReturnShippingOptionId({ orderPreview, orderReturn }) {
|
||||||
|
if (!orderPreview.shipping_methods?.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let returnShippingMethod
|
||||||
|
for (const shippingMethod of orderPreview.shipping_methods) {
|
||||||
|
const modifiedShippingMethod_ = shippingMethod as any
|
||||||
|
if (!modifiedShippingMethod_.actions) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const action of modifiedShippingMethod_.actions) {
|
||||||
|
if (
|
||||||
|
action.action === ChangeActionType.SHIPPING_ADD &&
|
||||||
|
action.return_id === orderReturn.id
|
||||||
|
) {
|
||||||
|
returnShippingMethod = shippingMethod
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returnShippingMethod.shipping_option_id
|
||||||
|
}
|
||||||
|
|
||||||
export const confirmReturnRequestWorkflowId = "confirm-return-request"
|
export const confirmReturnRequestWorkflowId = "confirm-return-request"
|
||||||
export const confirmReturnRequestWorkflow = createWorkflow(
|
export const confirmReturnRequestWorkflow = createWorkflow(
|
||||||
confirmReturnRequestWorkflowId,
|
confirmReturnRequestWorkflowId,
|
||||||
@@ -169,36 +182,16 @@ export const confirmReturnRequestWorkflow = createWorkflow(
|
|||||||
|
|
||||||
validationStep({ order, orderReturn, orderChange })
|
validationStep({ order, orderReturn, orderChange })
|
||||||
|
|
||||||
|
const orderPreview = previewOrderChangeStep(order.id)
|
||||||
|
|
||||||
const createdReturnItems = createReturnItemsStep({
|
const createdReturnItems = createReturnItemsStep({
|
||||||
returnId: orderReturn.id,
|
returnId: orderReturn.id,
|
||||||
changes: returnItemActions,
|
changes: returnItemActions,
|
||||||
})
|
})
|
||||||
|
|
||||||
confirmOrderChanges({ changes: [orderChange], orderId: order.id })
|
|
||||||
|
|
||||||
const returnModified = useRemoteQueryStep({
|
|
||||||
entry_point: "return",
|
|
||||||
fields: [
|
|
||||||
"id",
|
|
||||||
"status",
|
|
||||||
"order_id",
|
|
||||||
"canceled_at",
|
|
||||||
"shipping_methods.shipping_option_id",
|
|
||||||
],
|
|
||||||
variables: { id: input.return_id },
|
|
||||||
list: false,
|
|
||||||
throw_if_key_not_found: true,
|
|
||||||
}).config({ name: "return-query" })
|
|
||||||
|
|
||||||
const returnShippingOptionId = transform(
|
const returnShippingOptionId = transform(
|
||||||
{ returnModified },
|
{ orderPreview, orderReturn },
|
||||||
({ returnModified }) => {
|
extractReturnShippingOptionId
|
||||||
if (!returnModified.shipping_methods?.length) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnModified.shipping_methods[0].shipping_option_id
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
when({ returnShippingOptionId }, ({ returnShippingOptionId }) => {
|
when({ returnShippingOptionId }, ({ returnShippingOptionId }) => {
|
||||||
@@ -242,6 +235,8 @@ export const confirmReturnRequestWorkflow = createWorkflow(
|
|||||||
createRemoteLinkStep(link)
|
createRemoteLinkStep(link)
|
||||||
})
|
})
|
||||||
|
|
||||||
return previewOrderChangeStep(order.id)
|
confirmOrderChanges({ changes: [orderChange], orderId: order.id })
|
||||||
|
|
||||||
|
return orderPreview
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ export const updateRequestItemReturnWorkflow = createWorkflow(
|
|||||||
variables: {
|
variables: {
|
||||||
filters: {
|
filters: {
|
||||||
order_id: orderReturn.order_id,
|
order_id: orderReturn.order_id,
|
||||||
return_id: orderReturn.id,
|
claim_id: input.claim_id,
|
||||||
status: [OrderChangeStatus.PENDING, OrderChangeStatus.REQUESTED],
|
status: [OrderChangeStatus.PENDING, OrderChangeStatus.REQUESTED],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { OperatorMap } from "../dal/utils"
|
|||||||
import { FulfillmentDTO } from "../fulfillment"
|
import { FulfillmentDTO } from "../fulfillment"
|
||||||
import { PaymentCollectionDTO } from "../payment"
|
import { PaymentCollectionDTO } from "../payment"
|
||||||
import { BigNumberInput, BigNumberRawValue, BigNumberValue } from "../totals"
|
import { BigNumberInput, BigNumberRawValue, BigNumberValue } from "../totals"
|
||||||
|
import { ClaimReason } from "./mutations"
|
||||||
|
|
||||||
export type ChangeActionType =
|
export type ChangeActionType =
|
||||||
| "CANCEL"
|
| "CANCEL"
|
||||||
@@ -1156,6 +1157,40 @@ export interface OrderReturnItemDTO {
|
|||||||
updated_at?: Date | string
|
updated_at?: Date | string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface OrderClaimItemDTO {
|
||||||
|
id: string
|
||||||
|
claim_id: string
|
||||||
|
order_id: string
|
||||||
|
item_id: string
|
||||||
|
quantity: number
|
||||||
|
reason: ClaimReason
|
||||||
|
raw_quantity: BigNumberRawValue
|
||||||
|
metadata?: Record<string, unknown> | null
|
||||||
|
created_at?: Date | string
|
||||||
|
updated_at?: Date | string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OrderClaimItemImageDTO {
|
||||||
|
id: string
|
||||||
|
claim_item_id: string
|
||||||
|
url: string
|
||||||
|
metadata?: Record<string, unknown> | null
|
||||||
|
created_at?: Date | string
|
||||||
|
updated_at?: Date | string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OrderExchangeItemDTO {
|
||||||
|
id: string
|
||||||
|
exchange_id: string
|
||||||
|
order_id: string
|
||||||
|
item_id: string
|
||||||
|
quantity: number
|
||||||
|
raw_quantity: BigNumberRawValue
|
||||||
|
metadata?: Record<string, unknown> | null
|
||||||
|
created_at?: Date | string
|
||||||
|
updated_at?: Date | string
|
||||||
|
}
|
||||||
|
|
||||||
export interface OrderClaimDTO
|
export interface OrderClaimDTO
|
||||||
extends Omit<OrderDTO, "status" | "version" | "items"> {
|
extends Omit<OrderDTO, "status" | "version" | "items"> {
|
||||||
order_id: string
|
order_id: string
|
||||||
@@ -1341,6 +1376,9 @@ export interface OrderChangeActionDTO {
|
|||||||
* The ID of the associated order
|
* The ID of the associated order
|
||||||
*/
|
*/
|
||||||
order_id: string | null
|
order_id: string | null
|
||||||
|
return_id: string | null
|
||||||
|
claim_id: string | null
|
||||||
|
exchange_id: string | null
|
||||||
/**
|
/**
|
||||||
* The associated order
|
* The associated order
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -482,6 +482,32 @@ export interface CreateOrderReturnItemDTO {
|
|||||||
metadata?: Record<string, unknown> | null
|
metadata?: Record<string, unknown> | null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface CreateOrderClaimItemDTO {
|
||||||
|
claim_id: string
|
||||||
|
item_id: string
|
||||||
|
reason?: ClaimReason
|
||||||
|
is_additional_item?: boolean
|
||||||
|
quantity?: BigNumberInput
|
||||||
|
note?: string
|
||||||
|
metadata?: Record<string, unknown> | null
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateOrderExchangeItemDTO {
|
||||||
|
exchange_id: string
|
||||||
|
item_id: string
|
||||||
|
quantity?: BigNumberInput
|
||||||
|
note?: string
|
||||||
|
metadata?: Record<string, unknown> | null
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CreateOrderExchangeItemDTO {
|
||||||
|
exchange_id: string
|
||||||
|
item_id: string
|
||||||
|
quantity?: BigNumberInput
|
||||||
|
note?: string
|
||||||
|
metadata?: Record<string, unknown> | null
|
||||||
|
}
|
||||||
|
|
||||||
export interface UpdateOrderReturnWithSelectorDTO {
|
export interface UpdateOrderReturnWithSelectorDTO {
|
||||||
selector: Partial<ReturnDTO>
|
selector: Partial<ReturnDTO>
|
||||||
data: Partial<UpdateReturnDTO>
|
data: Partial<UpdateReturnDTO>
|
||||||
@@ -510,7 +536,7 @@ export type ClaimReason =
|
|||||||
export interface CreateOrderClaimDTO extends BaseOrderBundledActionsDTO {
|
export interface CreateOrderClaimDTO extends BaseOrderBundledActionsDTO {
|
||||||
type: OrderClaimType
|
type: OrderClaimType
|
||||||
claim_items?: (BaseOrderBundledItemActionsDTO & {
|
claim_items?: (BaseOrderBundledItemActionsDTO & {
|
||||||
reason: ClaimReason
|
reason?: ClaimReason
|
||||||
images?: {
|
images?: {
|
||||||
url: string
|
url: string
|
||||||
metadata?: Record<string, unknown> | null
|
metadata?: Record<string, unknown> | null
|
||||||
|
|||||||
@@ -22,8 +22,10 @@ import {
|
|||||||
OrderChangeDTO,
|
OrderChangeDTO,
|
||||||
OrderChangeReturn,
|
OrderChangeReturn,
|
||||||
OrderClaimDTO,
|
OrderClaimDTO,
|
||||||
|
OrderClaimItemDTO,
|
||||||
OrderDTO,
|
OrderDTO,
|
||||||
OrderExchangeDTO,
|
OrderExchangeDTO,
|
||||||
|
OrderExchangeItemDTO,
|
||||||
OrderItemDTO,
|
OrderItemDTO,
|
||||||
OrderLineItemAdjustmentDTO,
|
OrderLineItemAdjustmentDTO,
|
||||||
OrderLineItemDTO,
|
OrderLineItemDTO,
|
||||||
@@ -48,8 +50,10 @@ import {
|
|||||||
CreateOrderChangeActionDTO,
|
CreateOrderChangeActionDTO,
|
||||||
CreateOrderChangeDTO,
|
CreateOrderChangeDTO,
|
||||||
CreateOrderClaimDTO,
|
CreateOrderClaimDTO,
|
||||||
|
CreateOrderClaimItemDTO,
|
||||||
CreateOrderDTO,
|
CreateOrderDTO,
|
||||||
CreateOrderExchangeDTO,
|
CreateOrderExchangeDTO,
|
||||||
|
CreateOrderExchangeItemDTO,
|
||||||
CreateOrderLineItemDTO,
|
CreateOrderLineItemDTO,
|
||||||
CreateOrderLineItemTaxLineDTO,
|
CreateOrderLineItemTaxLineDTO,
|
||||||
CreateOrderReturnDTO,
|
CreateOrderReturnDTO,
|
||||||
@@ -1889,6 +1893,26 @@ export interface IOrderModuleService extends IModuleService {
|
|||||||
sharedContext?: Context
|
sharedContext?: Context
|
||||||
): Promise<OrderReturnItemDTO[]>
|
): Promise<OrderReturnItemDTO[]>
|
||||||
|
|
||||||
|
createOrderClaimItems(
|
||||||
|
data: CreateOrderClaimItemDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<OrderClaimItemDTO>
|
||||||
|
|
||||||
|
createOrderClaimItems(
|
||||||
|
data: CreateOrderClaimItemDTO[],
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<OrderClaimItemDTO[]>
|
||||||
|
|
||||||
|
createOrderExchangeItems(
|
||||||
|
data: CreateOrderExchangeItemDTO,
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<OrderExchangeItemDTO>
|
||||||
|
|
||||||
|
createOrderExchangeItems(
|
||||||
|
data: CreateOrderExchangeItemDTO[],
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<OrderExchangeItemDTO[]>
|
||||||
|
|
||||||
createReturns(
|
createReturns(
|
||||||
data: CreateOrderReturnDTO,
|
data: CreateOrderReturnDTO,
|
||||||
sharedContext?: Context
|
sharedContext?: Context
|
||||||
@@ -1959,6 +1983,13 @@ export interface IOrderModuleService extends IModuleService {
|
|||||||
|
|
||||||
deleteOrderClaims(ids: string[], sharedContext?: Context): Promise<void>
|
deleteOrderClaims(ids: string[], sharedContext?: Context): Promise<void>
|
||||||
|
|
||||||
|
deleteOrderClaimItems(ids: string[], sharedContext?: Context): Promise<void>
|
||||||
|
|
||||||
|
deleteOrderClaimItemImages(
|
||||||
|
ids: string[],
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<void>
|
||||||
|
|
||||||
softDeleteOrderClaims<TReturnableLinkableKeys extends string = string>(
|
softDeleteOrderClaims<TReturnableLinkableKeys extends string = string>(
|
||||||
ids: string[],
|
ids: string[],
|
||||||
config?: SoftDeleteReturn<TReturnableLinkableKeys>,
|
config?: SoftDeleteReturn<TReturnableLinkableKeys>,
|
||||||
@@ -1999,6 +2030,11 @@ export interface IOrderModuleService extends IModuleService {
|
|||||||
|
|
||||||
deleteOrderExchanges(ids: string[], sharedContext?: Context): Promise<void>
|
deleteOrderExchanges(ids: string[], sharedContext?: Context): Promise<void>
|
||||||
|
|
||||||
|
deleteOrderExchangeItems(
|
||||||
|
ids: string[],
|
||||||
|
sharedContext?: Context
|
||||||
|
): Promise<void>
|
||||||
|
|
||||||
softDeleteOrderExchanges<TReturnableLinkableKeys extends string = string>(
|
softDeleteOrderExchanges<TReturnableLinkableKeys extends string = string>(
|
||||||
ids: string[],
|
ids: string[],
|
||||||
config?: SoftDeleteReturn<TReturnableLinkableKeys>,
|
config?: SoftDeleteReturn<TReturnableLinkableKeys>,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { ClaimReason } from "../../order/mutations"
|
||||||
import { BigNumberInput } from "../../totals"
|
import { BigNumberInput } from "../../totals"
|
||||||
|
|
||||||
interface NewItem {
|
interface NewItem {
|
||||||
@@ -63,7 +64,7 @@ export interface UpdateExchangeAddItemWorkflowInput {
|
|||||||
|
|
||||||
export interface OrderClaimItemWorkflowInput {
|
export interface OrderClaimItemWorkflowInput {
|
||||||
claim_id: string
|
claim_id: string
|
||||||
items: ExistingItem[]
|
items: (ExistingItem & { reason?: ClaimReason })[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface UpdateClaimItemWorkflowInput {
|
export interface UpdateClaimItemWorkflowInput {
|
||||||
@@ -71,6 +72,7 @@ export interface UpdateClaimItemWorkflowInput {
|
|||||||
action_id: string
|
action_id: string
|
||||||
data: {
|
data: {
|
||||||
quantity?: BigNumberInput
|
quantity?: BigNumberInput
|
||||||
|
reason_id?: ClaimReason
|
||||||
internal_note?: string | null
|
internal_note?: string | null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
@@ -65,7 +65,7 @@ export const DELETE = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {
|
|||||||
AuthenticatedMedusaRequest,
|
AuthenticatedMedusaRequest,
|
||||||
MedusaResponse,
|
MedusaResponse,
|
||||||
} from "../../../../../../../types/routing"
|
} from "../../../../../../../types/routing"
|
||||||
|
import { defaultAdminDetailsReturnFields } from "../../../../../returns/query-config"
|
||||||
import { AdminPostReturnsRequestItemsActionReqSchemaType } from "../../../../../returns/validators"
|
import { AdminPostReturnsRequestItemsActionReqSchemaType } from "../../../../../returns/validators"
|
||||||
|
|
||||||
export const POST = async (
|
export const POST = async (
|
||||||
@@ -22,7 +23,7 @@ export const POST = async (
|
|||||||
|
|
||||||
const [claim] = await remoteQuery(
|
const [claim] = await remoteQuery(
|
||||||
remoteQueryObjectFromString({
|
remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
},
|
},
|
||||||
@@ -38,6 +39,7 @@ export const POST = async (
|
|||||||
input: {
|
input: {
|
||||||
data: { ...req.validatedBody },
|
data: { ...req.validatedBody },
|
||||||
return_id: claim.return_id,
|
return_id: claim.return_id,
|
||||||
|
claim_id: claim.id,
|
||||||
action_id,
|
action_id,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -45,12 +47,9 @@ export const POST = async (
|
|||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "return",
|
entryPoint: "return",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id: claim.return_id,
|
||||||
filters: {
|
|
||||||
...req.filterableFields,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fields: req.remoteQueryConfig.fields,
|
fields: defaultAdminDetailsReturnFields,
|
||||||
})
|
})
|
||||||
|
|
||||||
const [orderReturn] = await remoteQuery(queryObject)
|
const [orderReturn] = await remoteQuery(queryObject)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import {
|
|||||||
AuthenticatedMedusaRequest,
|
AuthenticatedMedusaRequest,
|
||||||
MedusaResponse,
|
MedusaResponse,
|
||||||
} from "../../../../../../types/routing"
|
} from "../../../../../../types/routing"
|
||||||
|
import { defaultAdminDetailsReturnFields } from "../../../../returns/query-config"
|
||||||
import { AdminPostReturnsRequestItemsReqSchemaType } from "../../../../returns/validators"
|
import { AdminPostReturnsRequestItemsReqSchemaType } from "../../../../returns/validators"
|
||||||
|
|
||||||
export const POST = async (
|
export const POST = async (
|
||||||
@@ -20,7 +21,7 @@ export const POST = async (
|
|||||||
|
|
||||||
const [claim] = await remoteQuery(
|
const [claim] = await remoteQuery(
|
||||||
remoteQueryObjectFromString({
|
remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
},
|
},
|
||||||
@@ -33,18 +34,19 @@ export const POST = async (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const { result } = await orderClaimRequestItemReturnWorkflow(req.scope).run({
|
const { result } = await orderClaimRequestItemReturnWorkflow(req.scope).run({
|
||||||
input: { ...req.validatedBody, return_id: claim.return_id, claim_id: id },
|
input: {
|
||||||
|
...req.validatedBody,
|
||||||
|
return_id: claim.return_id,
|
||||||
|
claim_id: id,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "return",
|
entryPoint: "return",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id: claim.return_id,
|
||||||
filters: {
|
|
||||||
...req.filterableFields,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fields: req.remoteQueryConfig.fields,
|
fields: defaultAdminDetailsReturnFields,
|
||||||
})
|
})
|
||||||
|
|
||||||
const [orderReturn] = await remoteQuery(queryObject)
|
const [orderReturn] = await remoteQuery(queryObject)
|
||||||
|
|||||||
+10
-11
@@ -10,6 +10,7 @@ import {
|
|||||||
AuthenticatedMedusaRequest,
|
AuthenticatedMedusaRequest,
|
||||||
MedusaResponse,
|
MedusaResponse,
|
||||||
} from "../../../../../../../types/routing"
|
} from "../../../../../../../types/routing"
|
||||||
|
import { defaultAdminDetailsReturnFields } from "../../../../../returns/query-config"
|
||||||
import { AdminPostClaimsShippingActionReqSchemaType } from "../../../../validators"
|
import { AdminPostClaimsShippingActionReqSchemaType } from "../../../../validators"
|
||||||
|
|
||||||
export const POST = async (
|
export const POST = async (
|
||||||
@@ -22,7 +23,7 @@ export const POST = async (
|
|||||||
|
|
||||||
const [claim] = await remoteQuery(
|
const [claim] = await remoteQuery(
|
||||||
remoteQueryObjectFromString({
|
remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
},
|
},
|
||||||
@@ -43,7 +44,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
@@ -71,7 +72,7 @@ export const DELETE = async (
|
|||||||
|
|
||||||
const [claim] = await remoteQuery(
|
const [claim] = await remoteQuery(
|
||||||
remoteQueryObjectFromString({
|
remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
},
|
},
|
||||||
@@ -93,19 +94,17 @@ export const DELETE = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "return",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id: claim.return_id,
|
||||||
filters: {
|
|
||||||
...req.filterableFields,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fields: req.remoteQueryConfig.fields,
|
fields: defaultAdminDetailsReturnFields,
|
||||||
})
|
})
|
||||||
const [orderClaim] = await remoteQuery(queryObject)
|
|
||||||
|
const [orderReturn] = await remoteQuery(queryObject)
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
order_preview: orderPreview,
|
order_preview: orderPreview,
|
||||||
claim: orderClaim,
|
return: orderReturn,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import {
|
|||||||
AuthenticatedMedusaRequest,
|
AuthenticatedMedusaRequest,
|
||||||
MedusaResponse,
|
MedusaResponse,
|
||||||
} from "../../../../../../types/routing"
|
} from "../../../../../../types/routing"
|
||||||
|
import { defaultAdminDetailsReturnFields } from "../../../../returns/query-config"
|
||||||
import { AdminPostReturnsShippingReqSchemaType } from "../../../../returns/validators"
|
import { AdminPostReturnsShippingReqSchemaType } from "../../../../returns/validators"
|
||||||
|
|
||||||
export const POST = async (
|
export const POST = async (
|
||||||
@@ -20,7 +21,7 @@ export const POST = async (
|
|||||||
|
|
||||||
const [claim] = await remoteQuery(
|
const [claim] = await remoteQuery(
|
||||||
remoteQueryObjectFromString({
|
remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
},
|
},
|
||||||
@@ -33,24 +34,25 @@ export const POST = async (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const { result } = await createClaimShippingMethodWorkflow(req.scope).run({
|
const { result } = await createClaimShippingMethodWorkflow(req.scope).run({
|
||||||
input: { ...req.validatedBody, return_id: claim.return_id, claim_id: id },
|
input: {
|
||||||
|
...req.validatedBody,
|
||||||
|
return_id: claim.return_id,
|
||||||
|
claim_id: id,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "return",
|
entryPoint: "return",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id: claim.return_id,
|
||||||
filters: {
|
|
||||||
...req.filterableFields,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
fields: req.remoteQueryConfig.fields,
|
fields: defaultAdminDetailsReturnFields,
|
||||||
})
|
})
|
||||||
|
|
||||||
const [orderClaim] = await remoteQuery(queryObject)
|
const [orderReturn] = await remoteQuery(queryObject)
|
||||||
|
|
||||||
res.json({
|
res.json({
|
||||||
order_preview: result,
|
order_preview: result,
|
||||||
return: orderClaim,
|
return: orderReturn,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
@@ -65,7 +65,7 @@ export const DELETE = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
|
|||||||
+2
-2
@@ -29,7 +29,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
@@ -65,7 +65,7 @@ export const DELETE = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id,
|
id,
|
||||||
filters: {
|
filters: {
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import { confirmClaimRequestWorkflow } from "@medusajs/core-flows"
|
||||||
|
import {
|
||||||
|
ContainerRegistrationKeys,
|
||||||
|
remoteQueryObjectFromString,
|
||||||
|
} from "@medusajs/utils"
|
||||||
|
import {
|
||||||
|
AuthenticatedMedusaRequest,
|
||||||
|
MedusaResponse,
|
||||||
|
} from "../../../../../types/routing"
|
||||||
|
|
||||||
|
export const POST = async (
|
||||||
|
req: AuthenticatedMedusaRequest,
|
||||||
|
res: MedusaResponse
|
||||||
|
) => {
|
||||||
|
const { id } = req.params
|
||||||
|
|
||||||
|
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
|
||||||
|
|
||||||
|
const { result } = await confirmClaimRequestWorkflow(req.scope).run({
|
||||||
|
input: { claim_id: id },
|
||||||
|
})
|
||||||
|
|
||||||
|
const queryObject = remoteQueryObjectFromString({
|
||||||
|
entryPoint: "order_claim",
|
||||||
|
variables: {
|
||||||
|
id,
|
||||||
|
filters: {
|
||||||
|
...req.filterableFields,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
fields: req.remoteQueryConfig.fields,
|
||||||
|
})
|
||||||
|
|
||||||
|
const [orderClaim] = await remoteQuery(queryObject)
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
order_preview: result,
|
||||||
|
claim: orderClaim,
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -5,8 +5,8 @@ import * as QueryConfig from "./query-config"
|
|||||||
import {
|
import {
|
||||||
AdminGetOrdersOrderParams,
|
AdminGetOrdersOrderParams,
|
||||||
AdminGetOrdersParams,
|
AdminGetOrdersParams,
|
||||||
|
AdminPostClaimItemsReqSchema,
|
||||||
AdminPostClaimsAddItemsReqSchema,
|
AdminPostClaimsAddItemsReqSchema,
|
||||||
AdminPostClaimsConfirmRequestReqSchema,
|
|
||||||
AdminPostClaimsRequestItemsActionReqSchema,
|
AdminPostClaimsRequestItemsActionReqSchema,
|
||||||
AdminPostClaimsRequestReturnItemsReqSchema,
|
AdminPostClaimsRequestReturnItemsReqSchema,
|
||||||
AdminPostClaimsShippingActionReqSchema,
|
AdminPostClaimsShippingActionReqSchema,
|
||||||
@@ -51,7 +51,7 @@ export const adminClaimRoutesMiddlewares: MiddlewareRoute[] = [
|
|||||||
method: ["POST"],
|
method: ["POST"],
|
||||||
matcher: "/admin/claims/:id/claim-items",
|
matcher: "/admin/claims/:id/claim-items",
|
||||||
middlewares: [
|
middlewares: [
|
||||||
validateAndTransformBody(AdminPostClaimsRequestReturnItemsReqSchema),
|
validateAndTransformBody(AdminPostClaimItemsReqSchema),
|
||||||
validateAndTransformQuery(
|
validateAndTransformQuery(
|
||||||
AdminGetOrdersOrderParams,
|
AdminGetOrdersOrderParams,
|
||||||
QueryConfig.retrieveTransformQueryConfig
|
QueryConfig.retrieveTransformQueryConfig
|
||||||
@@ -214,7 +214,6 @@ export const adminClaimRoutesMiddlewares: MiddlewareRoute[] = [
|
|||||||
method: ["POST"],
|
method: ["POST"],
|
||||||
matcher: "/admin/claims/:id/request",
|
matcher: "/admin/claims/:id/request",
|
||||||
middlewares: [
|
middlewares: [
|
||||||
validateAndTransformBody(AdminPostClaimsConfirmRequestReqSchema),
|
|
||||||
validateAndTransformQuery(
|
validateAndTransformQuery(
|
||||||
AdminGetOrdersOrderParams,
|
AdminGetOrdersOrderParams,
|
||||||
QueryConfig.retrieveTransformQueryConfig
|
QueryConfig.retrieveTransformQueryConfig
|
||||||
@@ -223,7 +222,17 @@ export const adminClaimRoutesMiddlewares: MiddlewareRoute[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
method: ["DELETE"],
|
method: ["DELETE"],
|
||||||
matcher: "/admin/claims/:id/request",
|
matcher: "/admin/claims/:id",
|
||||||
middlewares: [],
|
middlewares: [],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
method: ["POST"],
|
||||||
|
matcher: "/admin/claims/:id/cancel",
|
||||||
|
middlewares: [
|
||||||
|
validateAndTransformQuery(
|
||||||
|
AdminGetOrdersOrderParams,
|
||||||
|
QueryConfig.retrieveTransformQueryConfig
|
||||||
|
),
|
||||||
|
],
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,12 +2,10 @@ export const defaultAdminClaimFields = [
|
|||||||
"id",
|
"id",
|
||||||
"type",
|
"type",
|
||||||
"order_id",
|
"order_id",
|
||||||
"exchange_id",
|
"return_id",
|
||||||
"claim_id",
|
|
||||||
"display_id",
|
"display_id",
|
||||||
"location_id",
|
"location_id",
|
||||||
"order_version",
|
"order_version",
|
||||||
"status",
|
|
||||||
"refund_amount",
|
"refund_amount",
|
||||||
"created_at",
|
"created_at",
|
||||||
"updated_at",
|
"updated_at",
|
||||||
@@ -15,8 +13,9 @@ export const defaultAdminClaimFields = [
|
|||||||
|
|
||||||
export const defaultAdminDetailsClaimFields = [
|
export const defaultAdminDetailsClaimFields = [
|
||||||
...defaultAdminClaimFields,
|
...defaultAdminClaimFields,
|
||||||
"items.*",
|
"additional_items.*",
|
||||||
"items.reason.*",
|
"claim_items.*",
|
||||||
|
"claim_items.reason.*",
|
||||||
]
|
]
|
||||||
|
|
||||||
export const retrieveTransformQueryConfig = {
|
export const retrieveTransformQueryConfig = {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export const GET = async (
|
|||||||
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
|
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claims",
|
entryPoint: "order_claims",
|
||||||
variables: {
|
variables: {
|
||||||
filters: {
|
filters: {
|
||||||
...req.filterableFields,
|
...req.filterableFields,
|
||||||
@@ -52,7 +52,7 @@ export const POST = async (
|
|||||||
})
|
})
|
||||||
|
|
||||||
const queryObject = remoteQueryObjectFromString({
|
const queryObject = remoteQueryObjectFromString({
|
||||||
entryPoint: "claim",
|
entryPoint: "order_claim",
|
||||||
variables: {
|
variables: {
|
||||||
id: result.claim_id,
|
id: result.claim_id,
|
||||||
filters: {
|
filters: {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { ClaimType } from "@medusajs/utils"
|
import { ClaimReason, ClaimType } from "@medusajs/utils"
|
||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
import {
|
import {
|
||||||
createFindParams,
|
createFindParams,
|
||||||
@@ -150,9 +150,9 @@ export const AdminPostClaimItemsReqSchema = z.object({
|
|||||||
z.object({
|
z.object({
|
||||||
id: z.string(),
|
id: z.string(),
|
||||||
quantity: z.number(),
|
quantity: z.number(),
|
||||||
|
reason: z.nativeEnum(ClaimReason).optional(),
|
||||||
description: z.string().optional(),
|
description: z.string().optional(),
|
||||||
internal_note: z.string().optional(),
|
internal_note: z.string().optional(),
|
||||||
metadata: z.record(z.unknown()).optional(),
|
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
@@ -174,6 +174,7 @@ export type AdminPostClaimsRequestItemsActionReqSchemaType = z.infer<
|
|||||||
|
|
||||||
export const AdminPostClaimsItemsActionReqSchema = z.object({
|
export const AdminPostClaimsItemsActionReqSchema = z.object({
|
||||||
quantity: z.number().optional(),
|
quantity: z.number().optional(),
|
||||||
|
reason: z.nativeEnum(ClaimReason).nullish().optional(),
|
||||||
internal_note: z.string().nullish().optional(),
|
internal_note: z.string().nullish().optional(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { defineMiddlewares } from "../utils/define-middlewares"
|
import { defineMiddlewares } from "../utils/define-middlewares"
|
||||||
import { adminApiKeyRoutesMiddlewares } from "./admin/api-keys/middlewares"
|
import { adminApiKeyRoutesMiddlewares } from "./admin/api-keys/middlewares"
|
||||||
import { adminCampaignRoutesMiddlewares } from "./admin/campaigns/middlewares"
|
import { adminCampaignRoutesMiddlewares } from "./admin/campaigns/middlewares"
|
||||||
|
import { adminClaimRoutesMiddlewares } from "./admin/claims/middlewares"
|
||||||
import { adminCollectionRoutesMiddlewares } from "./admin/collections/middlewares"
|
import { adminCollectionRoutesMiddlewares } from "./admin/collections/middlewares"
|
||||||
import { adminCurrencyRoutesMiddlewares } from "./admin/currencies/middlewares"
|
import { adminCurrencyRoutesMiddlewares } from "./admin/currencies/middlewares"
|
||||||
import { adminCustomerGroupRoutesMiddlewares } from "./admin/customer-groups/middlewares"
|
import { adminCustomerGroupRoutesMiddlewares } from "./admin/customer-groups/middlewares"
|
||||||
@@ -17,13 +18,14 @@ import { adminPaymentRoutesMiddlewares } from "./admin/payments/middlewares"
|
|||||||
import { adminPriceListsRoutesMiddlewares } from "./admin/price-lists/middlewares"
|
import { adminPriceListsRoutesMiddlewares } from "./admin/price-lists/middlewares"
|
||||||
import { adminPricePreferencesRoutesMiddlewares } from "./admin/price-preferences/middlewares"
|
import { adminPricePreferencesRoutesMiddlewares } from "./admin/price-preferences/middlewares"
|
||||||
import { adminProductCategoryRoutesMiddlewares } from "./admin/product-categories/middlewares"
|
import { adminProductCategoryRoutesMiddlewares } from "./admin/product-categories/middlewares"
|
||||||
import { adminProductTypeRoutesMiddlewares } from "./admin/product-types/middlewares"
|
|
||||||
import { adminProductTagRoutesMiddlewares } from "./admin/product-tags/middlewares"
|
import { adminProductTagRoutesMiddlewares } from "./admin/product-tags/middlewares"
|
||||||
|
import { adminProductTypeRoutesMiddlewares } from "./admin/product-types/middlewares"
|
||||||
import { adminProductRoutesMiddlewares } from "./admin/products/middlewares"
|
import { adminProductRoutesMiddlewares } from "./admin/products/middlewares"
|
||||||
import { adminPromotionRoutesMiddlewares } from "./admin/promotions/middlewares"
|
import { adminPromotionRoutesMiddlewares } from "./admin/promotions/middlewares"
|
||||||
import { adminRegionRoutesMiddlewares } from "./admin/regions/middlewares"
|
import { adminRegionRoutesMiddlewares } from "./admin/regions/middlewares"
|
||||||
import { adminReservationRoutesMiddlewares } from "./admin/reservations/middlewares"
|
import { adminReservationRoutesMiddlewares } from "./admin/reservations/middlewares"
|
||||||
import { adminReturnReasonRoutesMiddlewares } from "./admin/return-reasons/middlewares"
|
import { adminReturnReasonRoutesMiddlewares } from "./admin/return-reasons/middlewares"
|
||||||
|
import { adminReturnRoutesMiddlewares } from "./admin/returns/middlewares"
|
||||||
import { adminSalesChannelRoutesMiddlewares } from "./admin/sales-channels/middlewares"
|
import { adminSalesChannelRoutesMiddlewares } from "./admin/sales-channels/middlewares"
|
||||||
import { adminShippingOptionRoutesMiddlewares } from "./admin/shipping-options/middlewares"
|
import { adminShippingOptionRoutesMiddlewares } from "./admin/shipping-options/middlewares"
|
||||||
import { adminShippingProfilesMiddlewares } from "./admin/shipping-profiles/middlewares"
|
import { adminShippingProfilesMiddlewares } from "./admin/shipping-profiles/middlewares"
|
||||||
@@ -35,6 +37,7 @@ import { adminUploadRoutesMiddlewares } from "./admin/uploads/middlewares"
|
|||||||
import { adminUserRoutesMiddlewares } from "./admin/users/middlewares"
|
import { adminUserRoutesMiddlewares } from "./admin/users/middlewares"
|
||||||
import { adminWorkflowsExecutionsMiddlewares } from "./admin/workflows-executions/middlewares"
|
import { adminWorkflowsExecutionsMiddlewares } from "./admin/workflows-executions/middlewares"
|
||||||
import { authRoutesMiddlewares } from "./auth/middlewares"
|
import { authRoutesMiddlewares } from "./auth/middlewares"
|
||||||
|
|
||||||
import { hooksRoutesMiddlewares } from "./hooks/middlewares"
|
import { hooksRoutesMiddlewares } from "./hooks/middlewares"
|
||||||
import { storeCartRoutesMiddlewares } from "./store/carts/middlewares"
|
import { storeCartRoutesMiddlewares } from "./store/carts/middlewares"
|
||||||
import { storeCollectionRoutesMiddlewares } from "./store/collections/middlewares"
|
import { storeCollectionRoutesMiddlewares } from "./store/collections/middlewares"
|
||||||
@@ -48,7 +51,6 @@ import { storeProductRoutesMiddlewares } from "./store/products/middlewares"
|
|||||||
import { storeRegionRoutesMiddlewares } from "./store/regions/middlewares"
|
import { storeRegionRoutesMiddlewares } from "./store/regions/middlewares"
|
||||||
import { storeReturnReasonRoutesMiddlewares } from "./store/return-reasons/middlewares"
|
import { storeReturnReasonRoutesMiddlewares } from "./store/return-reasons/middlewares"
|
||||||
import { storeShippingOptionRoutesMiddlewares } from "./store/shipping-options/middlewares"
|
import { storeShippingOptionRoutesMiddlewares } from "./store/shipping-options/middlewares"
|
||||||
import { adminReturnRoutesMiddlewares } from "./admin/returns/middlewares"
|
|
||||||
|
|
||||||
export default defineMiddlewares([
|
export default defineMiddlewares([
|
||||||
...adminCustomerGroupRoutesMiddlewares,
|
...adminCustomerGroupRoutesMiddlewares,
|
||||||
@@ -103,4 +105,5 @@ export default defineMiddlewares([
|
|||||||
...storeProductRoutesMiddlewares,
|
...storeProductRoutesMiddlewares,
|
||||||
...storeReturnReasonRoutesMiddlewares,
|
...storeReturnReasonRoutesMiddlewares,
|
||||||
...adminReturnReasonRoutesMiddlewares,
|
...adminReturnReasonRoutesMiddlewares,
|
||||||
|
...adminClaimRoutesMiddlewares,
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { moduleIntegrationTestRunner } from "medusa-test-utils"
|
|
||||||
import { IOrderModuleService } from "@medusajs/types"
|
import { IOrderModuleService } from "@medusajs/types"
|
||||||
import { Module, Modules } from "@medusajs/utils"
|
import { Module, Modules } from "@medusajs/utils"
|
||||||
import { OrderModuleService } from "@services"
|
import { OrderModuleService } from "@services"
|
||||||
|
import { moduleIntegrationTestRunner } from "medusa-test-utils"
|
||||||
|
|
||||||
moduleIntegrationTestRunner<IOrderModuleService>({
|
moduleIntegrationTestRunner<IOrderModuleService>({
|
||||||
moduleName: Modules.ORDER,
|
moduleName: Modules.ORDER,
|
||||||
@@ -31,7 +31,10 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
"return",
|
"return",
|
||||||
"returnItem",
|
"returnItem",
|
||||||
"orderClaim",
|
"orderClaim",
|
||||||
|
"orderClaimItem",
|
||||||
|
"orderClaimItemImage",
|
||||||
"orderExchange",
|
"orderExchange",
|
||||||
|
"orderExchangeItem",
|
||||||
])
|
])
|
||||||
|
|
||||||
Object.keys(linkable).forEach((key) => {
|
Object.keys(linkable).forEach((key) => {
|
||||||
@@ -183,6 +186,22 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
field: "orderClaim",
|
field: "orderClaim",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
orderClaimItem: {
|
||||||
|
id: {
|
||||||
|
field: "orderClaimItem",
|
||||||
|
linkable: "order_claim_item_id",
|
||||||
|
primaryKey: "id",
|
||||||
|
serviceName: "order",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
orderClaimItemImage: {
|
||||||
|
id: {
|
||||||
|
field: "orderClaimItemImage",
|
||||||
|
linkable: "order_claim_item_image_id",
|
||||||
|
primaryKey: "id",
|
||||||
|
serviceName: "order",
|
||||||
|
},
|
||||||
|
},
|
||||||
orderExchange: {
|
orderExchange: {
|
||||||
id: {
|
id: {
|
||||||
linkable: "order_exchange_id",
|
linkable: "order_exchange_id",
|
||||||
@@ -191,6 +210,14 @@ moduleIntegrationTestRunner<IOrderModuleService>({
|
|||||||
field: "orderExchange",
|
field: "orderExchange",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
orderExchangeItem: {
|
||||||
|
id: {
|
||||||
|
field: "orderExchangeItem",
|
||||||
|
linkable: "order_exchange_item_id",
|
||||||
|
primaryKey: "id",
|
||||||
|
serviceName: "order",
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ const ClaimItemIdIndex = createPsqlIndexStatementHelper({
|
|||||||
|
|
||||||
@Entity({ tableName: "order_claim_item_image" })
|
@Entity({ tableName: "order_claim_item_image" })
|
||||||
@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions)
|
@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions)
|
||||||
export default class ClaimItemImage {
|
export default class OrderClaimItemImage {
|
||||||
[OptionalProps]?: OptionalClaimItemImageProps
|
[OptionalProps]?: OptionalClaimItemImageProps
|
||||||
|
|
||||||
@PrimaryKey({ columnType: "text" })
|
@PrimaryKey({ columnType: "text" })
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import {
|
|||||||
Rel,
|
Rel,
|
||||||
} from "@mikro-orm/core"
|
} from "@mikro-orm/core"
|
||||||
import Claim from "./claim"
|
import Claim from "./claim"
|
||||||
import ClaimItemImage from "./claim-item-image"
|
import OrderClaimItemImage from "./claim-item-image"
|
||||||
import LineItem from "./line-item"
|
import LineItem from "./line-item"
|
||||||
|
|
||||||
type OptionalLineItemProps = DAL.ModelDateColumns
|
type OptionalLineItemProps = DAL.ModelDateColumns
|
||||||
@@ -50,10 +50,10 @@ export default class OrderClaimItem {
|
|||||||
@PrimaryKey({ columnType: "text" })
|
@PrimaryKey({ columnType: "text" })
|
||||||
id: string
|
id: string
|
||||||
|
|
||||||
@OneToMany(() => ClaimItemImage, (ci) => ci.item, {
|
@OneToMany(() => OrderClaimItemImage, (ci) => ci.item, {
|
||||||
cascade: [Cascade.PERSIST, Cascade.REMOVE],
|
cascade: [Cascade.PERSIST, Cascade.REMOVE],
|
||||||
})
|
})
|
||||||
images = new Collection<Rel<ClaimItemImage>>(this)
|
images = new Collection<Rel<OrderClaimItemImage>>(this)
|
||||||
|
|
||||||
@Enum({ items: () => ClaimReason, nullable: true })
|
@Enum({ items: () => ClaimReason, nullable: true })
|
||||||
reason: Rel<ClaimReason> | null = null
|
reason: Rel<ClaimReason> | null = null
|
||||||
@@ -123,7 +123,7 @@ export default class OrderClaimItem {
|
|||||||
@BeforeCreate()
|
@BeforeCreate()
|
||||||
onCreate() {
|
onCreate() {
|
||||||
this.id = generateEntityId(this.id, "claitem")
|
this.id = generateEntityId(this.id, "claitem")
|
||||||
this.claim_id = this.claim?.id
|
this.claim_id ??= this.claim?.id
|
||||||
}
|
}
|
||||||
|
|
||||||
@OnInit()
|
@OnInit()
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import {
|
|||||||
Property,
|
Property,
|
||||||
Rel,
|
Rel,
|
||||||
} from "@mikro-orm/core"
|
} from "@mikro-orm/core"
|
||||||
import { ExchangeItem, Transaction } from "@models"
|
import { OrderExchangeItem, Transaction } from "@models"
|
||||||
import Order from "./order"
|
import Order from "./order"
|
||||||
import OrderShippingMethod from "./order-shipping-method"
|
import OrderShippingMethod from "./order-shipping-method"
|
||||||
import Return from "./return"
|
import Return from "./return"
|
||||||
@@ -107,10 +107,10 @@ export default class OrderExchange {
|
|||||||
@Property({ columnType: "boolean", default: false })
|
@Property({ columnType: "boolean", default: false })
|
||||||
allow_backorder: boolean = false
|
allow_backorder: boolean = false
|
||||||
|
|
||||||
@OneToMany(() => ExchangeItem, (item) => item.exchange, {
|
@OneToMany(() => OrderExchangeItem, (item) => item.exchange, {
|
||||||
cascade: [Cascade.PERSIST],
|
cascade: [Cascade.PERSIST],
|
||||||
})
|
})
|
||||||
additional_items = new Collection<Rel<ExchangeItem>>(this)
|
additional_items = new Collection<Rel<OrderExchangeItem>>(this)
|
||||||
|
|
||||||
@OneToMany(
|
@OneToMany(
|
||||||
() => OrderShippingMethod,
|
() => OrderShippingMethod,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
export { default as Address } from "./address"
|
export { default as Address } from "./address"
|
||||||
export { default as OrderClaim } from "./claim"
|
export { default as OrderClaim } from "./claim"
|
||||||
export { default as ClaimItem } from "./claim-item"
|
export { default as OrderClaimItem } from "./claim-item"
|
||||||
export { default as ClaimItemImage } from "./claim-item-image"
|
export { default as OrderClaimItemImage } from "./claim-item-image"
|
||||||
export { default as OrderExchange } from "./exchange"
|
export { default as OrderExchange } from "./exchange"
|
||||||
export { default as ExchangeItem } from "./exchange-item"
|
export { default as OrderExchangeItem } from "./exchange-item"
|
||||||
export { default as LineItem } from "./line-item"
|
export { default as LineItem } from "./line-item"
|
||||||
export { default as LineItemAdjustment } from "./line-item-adjustment"
|
export { default as LineItemAdjustment } from "./line-item-adjustment"
|
||||||
export { default as LineItemTaxLine } from "./line-item-tax-line"
|
export { default as LineItemTaxLine } from "./line-item-tax-line"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import {
|
|||||||
isString,
|
isString,
|
||||||
promiseAll,
|
promiseAll,
|
||||||
} from "@medusajs/utils"
|
} from "@medusajs/utils"
|
||||||
import { ClaimItem, OrderClaim, Return, ReturnItem } from "@models"
|
import { OrderClaim, OrderClaimItem, Return, ReturnItem } from "@models"
|
||||||
|
|
||||||
function createClaimAndReturnEntities(em, data, order) {
|
function createClaimAndReturnEntities(em, data, order) {
|
||||||
const claimReference = em.create(OrderClaim, {
|
const claimReference = em.create(OrderClaim, {
|
||||||
@@ -89,7 +89,7 @@ function createClaimAndReturnItems(
|
|||||||
: undefined
|
: undefined
|
||||||
)
|
)
|
||||||
|
|
||||||
return em.create(ClaimItem, {
|
return em.create(OrderClaimItem, {
|
||||||
item_id: item.id,
|
item_id: item.id,
|
||||||
reason: item.reason,
|
reason: item.reason,
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
@@ -111,8 +111,8 @@ async function processAdditionalItems(
|
|||||||
sharedContext
|
sharedContext
|
||||||
) {
|
) {
|
||||||
const itemsToAdd: any[] = []
|
const itemsToAdd: any[] = []
|
||||||
const additionalNewItems: ClaimItem[] = []
|
const additionalNewItems: OrderClaimItem[] = []
|
||||||
const additionalItems: ClaimItem[] = []
|
const additionalItems: OrderClaimItem[] = []
|
||||||
data.additional_items?.forEach((item) => {
|
data.additional_items?.forEach((item) => {
|
||||||
const hasItem = item.id
|
const hasItem = item.id
|
||||||
? order.items.find((o) => o.item.id === item.id)
|
? order.items.find((o) => o.item.id === item.id)
|
||||||
@@ -134,7 +134,7 @@ async function processAdditionalItems(
|
|||||||
})
|
})
|
||||||
|
|
||||||
additionalItems.push(
|
additionalItems.push(
|
||||||
em.create(ClaimItem, {
|
em.create(OrderClaimItem, {
|
||||||
item_id: item.id,
|
item_id: item.id,
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
note: item.note,
|
note: item.note,
|
||||||
@@ -146,7 +146,7 @@ async function processAdditionalItems(
|
|||||||
itemsToAdd.push(item)
|
itemsToAdd.push(item)
|
||||||
|
|
||||||
additionalNewItems.push(
|
additionalNewItems.push(
|
||||||
em.create(ClaimItem, {
|
em.create(OrderClaimItem, {
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
note: item.note,
|
note: item.note,
|
||||||
metadata: item.metadata,
|
metadata: item.metadata,
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
isString,
|
isString,
|
||||||
promiseAll,
|
promiseAll,
|
||||||
} from "@medusajs/utils"
|
} from "@medusajs/utils"
|
||||||
import { ExchangeItem, OrderExchange, Return, ReturnItem } from "@models"
|
import { OrderExchange, OrderExchangeItem, Return, ReturnItem } from "@models"
|
||||||
|
|
||||||
function createExchangeAndReturnEntities(em, data, order) {
|
function createExchangeAndReturnEntities(em, data, order) {
|
||||||
const exchangeReference = em.create(OrderExchange, {
|
const exchangeReference = em.create(OrderExchange, {
|
||||||
@@ -77,8 +77,8 @@ async function processAdditionalItems(
|
|||||||
sharedContext
|
sharedContext
|
||||||
) {
|
) {
|
||||||
const itemsToAdd: any[] = []
|
const itemsToAdd: any[] = []
|
||||||
const additionalNewItems: ExchangeItem[] = []
|
const additionalNewItems: OrderExchangeItem[] = []
|
||||||
const additionalItems: ExchangeItem[] = []
|
const additionalItems: OrderExchangeItem[] = []
|
||||||
data.additional_items?.forEach((item) => {
|
data.additional_items?.forEach((item) => {
|
||||||
const hasItem = item.id
|
const hasItem = item.id
|
||||||
? order.items.find((o) => o.item.id === item.id)
|
? order.items.find((o) => o.item.id === item.id)
|
||||||
@@ -100,7 +100,7 @@ async function processAdditionalItems(
|
|||||||
})
|
})
|
||||||
|
|
||||||
additionalItems.push(
|
additionalItems.push(
|
||||||
em.create(ExchangeItem, {
|
em.create(OrderExchangeItem, {
|
||||||
item_id: item.id,
|
item_id: item.id,
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
note: item.note,
|
note: item.note,
|
||||||
@@ -112,7 +112,7 @@ async function processAdditionalItems(
|
|||||||
itemsToAdd.push(item)
|
itemsToAdd.push(item)
|
||||||
|
|
||||||
additionalNewItems.push(
|
additionalNewItems.push(
|
||||||
em.create(ExchangeItem, {
|
em.create(OrderExchangeItem, {
|
||||||
quantity: item.quantity,
|
quantity: item.quantity,
|
||||||
note: item.note,
|
note: item.note,
|
||||||
metadata: item.metadata,
|
metadata: item.metadata,
|
||||||
|
|||||||
@@ -41,7 +41,10 @@ import {
|
|||||||
OrderChange,
|
OrderChange,
|
||||||
OrderChangeAction,
|
OrderChangeAction,
|
||||||
OrderClaim,
|
OrderClaim,
|
||||||
|
OrderClaimItem,
|
||||||
|
OrderClaimItemImage,
|
||||||
OrderExchange,
|
OrderExchange,
|
||||||
|
OrderExchangeItem,
|
||||||
OrderItem,
|
OrderItem,
|
||||||
OrderShippingMethod,
|
OrderShippingMethod,
|
||||||
OrderSummary,
|
OrderSummary,
|
||||||
@@ -116,7 +119,10 @@ const generateMethodForModels = {
|
|||||||
Return,
|
Return,
|
||||||
ReturnItem,
|
ReturnItem,
|
||||||
OrderClaim,
|
OrderClaim,
|
||||||
|
OrderClaimItem,
|
||||||
|
OrderClaimItemImage,
|
||||||
OrderExchange,
|
OrderExchange,
|
||||||
|
OrderExchangeItem,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: rm template args here, keep it for later to not collide with carlos work at least as little as possible
|
// TODO: rm template args here, keep it for later to not collide with carlos work at least as little as possible
|
||||||
@@ -139,7 +145,10 @@ export default class OrderModuleService<
|
|||||||
TReturn extends Return = Return,
|
TReturn extends Return = Return,
|
||||||
TReturnItem extends ReturnItem = ReturnItem,
|
TReturnItem extends ReturnItem = ReturnItem,
|
||||||
TClaim extends OrderClaim = OrderClaim,
|
TClaim extends OrderClaim = OrderClaim,
|
||||||
TExchange extends OrderExchange = OrderExchange
|
TClaimItem extends OrderClaimItem = OrderClaimItem,
|
||||||
|
TClaimItemImage extends OrderClaimItemImage = OrderClaimItemImage,
|
||||||
|
TExchange extends OrderExchange = OrderExchange,
|
||||||
|
TExchangeItem extends OrderExchangeItem = OrderExchangeItem
|
||||||
>
|
>
|
||||||
extends ModulesSdkUtils.MedusaService<{
|
extends ModulesSdkUtils.MedusaService<{
|
||||||
Order: { dto: OrderTypes.OrderDTO }
|
Order: { dto: OrderTypes.OrderDTO }
|
||||||
@@ -159,10 +168,13 @@ export default class OrderModuleService<
|
|||||||
ReturnReason: { dto: OrderTypes.OrderReturnReasonDTO }
|
ReturnReason: { dto: OrderTypes.OrderReturnReasonDTO }
|
||||||
OrderSummary: { dto: OrderTypes.OrderSummaryDTO }
|
OrderSummary: { dto: OrderTypes.OrderSummaryDTO }
|
||||||
Transaction: { dto: OrderTypes.OrderTransactionDTO }
|
Transaction: { dto: OrderTypes.OrderTransactionDTO }
|
||||||
Return: { dto: any } // TODO: Add return dto
|
Return: { dto: OrderTypes.ReturnDTO }
|
||||||
ReturnItem: { dto: any } // TODO: Add return item dto
|
ReturnItem: { dto: OrderTypes.OrderReturnItemDTO }
|
||||||
OrderClaim: { dto: any } // TODO: Add claim dto
|
OrderClaim: { dto: OrderTypes.OrderClaimDTO }
|
||||||
OrderExchange: { dto: any } // TODO: Add exchange dto
|
OrderClaimItem: { dto: OrderTypes.OrderClaimItemDTO }
|
||||||
|
OrderClaimItemImage: { dto: OrderTypes.OrderClaimItemImageDTO }
|
||||||
|
OrderExchange: { dto: OrderTypes.OrderExchangeDTO }
|
||||||
|
OrderExchangeItem: { dto: OrderTypes.OrderExchangeItemDTO }
|
||||||
}>(generateMethodForModels)
|
}>(generateMethodForModels)
|
||||||
implements IOrderModuleService
|
implements IOrderModuleService
|
||||||
{
|
{
|
||||||
@@ -185,7 +197,10 @@ export default class OrderModuleService<
|
|||||||
protected returnService_: ModulesSdkTypes.IMedusaInternalService<TReturn>
|
protected returnService_: ModulesSdkTypes.IMedusaInternalService<TReturn>
|
||||||
protected returnItemService_: ModulesSdkTypes.IMedusaInternalService<TReturnItem>
|
protected returnItemService_: ModulesSdkTypes.IMedusaInternalService<TReturnItem>
|
||||||
protected orderClaimService_: ModulesSdkTypes.IMedusaInternalService<TClaim>
|
protected orderClaimService_: ModulesSdkTypes.IMedusaInternalService<TClaim>
|
||||||
|
protected orderClaimItemService_: ModulesSdkTypes.IMedusaInternalService<TClaimItem>
|
||||||
|
protected orderClaimItemImageService_: ModulesSdkTypes.IMedusaInternalService<TClaimItemImage>
|
||||||
protected orderExchangeService_: ModulesSdkTypes.IMedusaInternalService<TExchange>
|
protected orderExchangeService_: ModulesSdkTypes.IMedusaInternalService<TExchange>
|
||||||
|
protected orderExchangeItemService_: ModulesSdkTypes.IMedusaInternalService<TExchangeItem>
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user