Feat(admin-next, core-flows, link-modules, medusa, types): Inventory end to end flows (#7020)
* add reservation endpoints * add changeset * initial * add reservations table * add edit-item modal * udpate inventory item attributes * manage locations skeleton * add combi batch endpoint * cleanup * fix manage locations * add adjust inventory * prep for pr * update versions * fix for pr * fix for pr * cleanup * Update packages/core-flows/src/inventory/workflows/bulk-create-delete-levels.ts Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com> * Update packages/core-flows/src/inventory/steps/delete-levels-by-item-and-location.ts Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com> * rm wack import * fix build --------- Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
This commit is contained in:
co-authored by
Carlos R. L. Rodrigues
parent
276278cbe7
commit
ab7ff64c4a
@@ -1,7 +1,4 @@
|
||||
import {
|
||||
CreateInventoryLevelInput,
|
||||
IInventoryServiceNext,
|
||||
} from "@medusajs/types"
|
||||
import { IInventoryServiceNext, InventoryNext } from "@medusajs/types"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
@@ -9,7 +6,7 @@ import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||
export const createInventoryLevelsStepId = "create-inventory-levels"
|
||||
export const createInventoryLevelsStep = createStep(
|
||||
createInventoryLevelsStepId,
|
||||
async (data: CreateInventoryLevelInput[], { container }) => {
|
||||
async (data: InventoryNext.CreateInventoryLevelInput[], { container }) => {
|
||||
const service = container.resolve<IInventoryServiceNext>(
|
||||
ModuleRegistrationName.INVENTORY
|
||||
)
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
import {
|
||||
DeleteEntityInput,
|
||||
ModuleRegistrationName,
|
||||
Modules,
|
||||
} from "@medusajs/modules-sdk"
|
||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
import { IInventoryServiceNext } from "@medusajs/types"
|
||||
import { MedusaError } from "@medusajs/utils"
|
||||
|
||||
export const deleteInventoryLevelsFromItemAndLocationsStepId =
|
||||
"delete-inventory-levels-from-item-and-location-step"
|
||||
export const deleteInventoryLevelsFromItemAndLocationsStep = createStep(
|
||||
deleteInventoryLevelsFromItemAndLocationsStepId,
|
||||
async (
|
||||
input: { inventory_item_id: string; location_id: string }[],
|
||||
{ container }
|
||||
) => {
|
||||
if (!input.length) {
|
||||
return new StepResponse(void 0, [])
|
||||
}
|
||||
|
||||
const service = container.resolve<IInventoryServiceNext>(
|
||||
ModuleRegistrationName.INVENTORY
|
||||
)
|
||||
|
||||
const items = await service.listInventoryLevels({ $or: input }, {})
|
||||
|
||||
if (items.some((i) => i.reserved_quantity > 0)) {
|
||||
const invalidDeletes = items.filter((i) => i.reserved_quantity > 0)
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.NOT_ALLOWED,
|
||||
`Cannot remove Inventory Levels for ${invalidDeletes
|
||||
.map((i) => `Inventory Level ${i.id} at Location ${i.location_id}`)
|
||||
.join(
|
||||
", "
|
||||
)} because there are reserved quantities for items at locations`
|
||||
)
|
||||
}
|
||||
|
||||
const deletedIds = items.map((i) => i.id)
|
||||
const deleted = await service.softDeleteInventoryLevels(deletedIds)
|
||||
|
||||
return new StepResponse(
|
||||
{
|
||||
[Modules.INVENTORY]: deleted,
|
||||
} as DeleteEntityInput,
|
||||
deletedIds
|
||||
)
|
||||
},
|
||||
async (prevLevelIds, { container }) => {
|
||||
if (!prevLevelIds?.length) {
|
||||
return
|
||||
}
|
||||
|
||||
const service = container.resolve<IInventoryServiceNext>(
|
||||
ModuleRegistrationName.INVENTORY
|
||||
)
|
||||
|
||||
await service.restoreInventoryLevels(prevLevelIds)
|
||||
}
|
||||
)
|
||||
@@ -7,3 +7,4 @@ export * from "./validate-inventory-locations"
|
||||
export * from "./update-inventory-items"
|
||||
export * from "./delete-inventory-levels"
|
||||
export * from "./update-inventory-levels"
|
||||
export * from "./delete-levels-by-item-and-location"
|
||||
|
||||
@@ -5,13 +5,13 @@ import {
|
||||
remoteQueryObjectFromString,
|
||||
} from "@medusajs/utils"
|
||||
|
||||
import { CreateInventoryLevelInput } from "@medusajs/types"
|
||||
import { InventoryNext } from "@medusajs/types"
|
||||
import { createStep } from "@medusajs/workflows-sdk"
|
||||
|
||||
export const validateInventoryLocationsStepId = "validate-inventory-levels-step"
|
||||
export const validateInventoryLocationsStep = createStep(
|
||||
validateInventoryLocationsStepId,
|
||||
async (data: CreateInventoryLevelInput[], { container }) => {
|
||||
async (data: InventoryNext.CreateInventoryLevelInput[], { container }) => {
|
||||
const remoteQuery = container.resolve(
|
||||
ContainerRegistrationKeys.REMOTE_QUERY
|
||||
)
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import { InventoryLevelDTO, InventoryNext } from "@medusajs/types"
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import {
|
||||
createInventoryLevelsStep,
|
||||
deleteInventoryLevelsFromItemAndLocationsStep,
|
||||
} from "../steps"
|
||||
|
||||
import { removeRemoteLinkStep } from "../../common"
|
||||
|
||||
interface WorkflowInput {
|
||||
creates: InventoryNext.CreateInventoryLevelInput[]
|
||||
deletes: { inventory_item_id: string; location_id: string }[]
|
||||
}
|
||||
|
||||
export const bulkCreateDeleteLevelsWorkflowId =
|
||||
"bulk-create-delete-levels-workflow"
|
||||
export const bulkCreateDeleteLevelsWorkflow = createWorkflow(
|
||||
bulkCreateDeleteLevelsWorkflowId,
|
||||
(input: WorkflowData<WorkflowInput>): WorkflowData<InventoryLevelDTO[]> => {
|
||||
const deleted = deleteInventoryLevelsFromItemAndLocationsStep(input.deletes)
|
||||
|
||||
removeRemoteLinkStep(deleted)
|
||||
|
||||
return createInventoryLevelsStep(input.creates)
|
||||
}
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
import { CreateInventoryLevelInput, InventoryLevelDTO } from "@medusajs/types"
|
||||
import { InventoryLevelDTO, InventoryNext } from "@medusajs/types"
|
||||
import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk"
|
||||
import {
|
||||
createInventoryLevelsStep,
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
} from "../steps"
|
||||
|
||||
interface WorkflowInput {
|
||||
inventory_levels: CreateInventoryLevelInput[]
|
||||
inventory_levels: InventoryNext.CreateInventoryLevelInput[]
|
||||
}
|
||||
export const createInventoryLevelsWorkflowId =
|
||||
"create-inventory-levels-workflow"
|
||||
|
||||
@@ -4,3 +4,4 @@ export * from "./create-inventory-levels"
|
||||
export * from "./update-inventory-items"
|
||||
export * from "./delete-inventory-levels"
|
||||
export * from "./update-inventory-levels"
|
||||
export * from "./bulk-create-delete-levels"
|
||||
|
||||
Reference in New Issue
Block a user