Skip to main content

StockLocationStrategy

StockLocationStrategy​

The StockLocationStrategy is responsible for determining which StockLocations should be used to fulfill an OrderLine and how much stock should be allocated from each location. It is also used to determine the available stock for a given

ProductVariant.
info

This is configured via the catalogOptions.stockLocationStrategy property of your VendureConfig.

Signature
interface StockLocationStrategy extends InjectableStrategy {
getAvailableStock(
ctx: RequestContext,
productVariantId: ID,
stockLevels: StockLevel[],
): AvailableStock | Promise<AvailableStock>;
forAllocation(
ctx: RequestContext,
stockLocations: StockLocation[],
orderLine: OrderLine,
quantity: number,
): LocationWithQuantity[] | Promise<LocationWithQuantity[]>;
forRelease(
ctx: RequestContext,
stockLocations: StockLocation[],
orderLine: OrderLine,
quantity: number,
): LocationWithQuantity[] | Promise<LocationWithQuantity[]>;
forSale(
ctx: RequestContext,
stockLocations: StockLocation[],
orderLine: OrderLine,
quantity: number,
): LocationWithQuantity[] | Promise<LocationWithQuantity[]>;
forCancellation(
ctx: RequestContext,
stockLocations: StockLocation[],
orderLine: OrderLine,
quantity: number,
): LocationWithQuantity[] | Promise<LocationWithQuantity[]>;
}

getAvailableStock​

method
(ctx: RequestContext, productVariantId: ID, stockLevels: StockLevel[]) => AvailableStock | Promise<AvailableStock>

Returns the available stock for the given ProductVariant, taking into account the stock levels at each StockLocation.

forAllocation​

method
(ctx: RequestContext, stockLocations: StockLocation[], orderLine: OrderLine, quantity: number) => LocationWithQuantity[] | Promise<LocationWithQuantity[]>

Determines which StockLocations should be used to when allocating stock when and Order is placed.

forRelease​

method
(ctx: RequestContext, stockLocations: StockLocation[], orderLine: OrderLine, quantity: number) => LocationWithQuantity[] | Promise<LocationWithQuantity[]>

Determines which StockLocations should be used to when releasing allocated stock when an OrderLine is cancelled before being fulfilled.

forSale​

method
(ctx: RequestContext, stockLocations: StockLocation[], orderLine: OrderLine, quantity: number) => LocationWithQuantity[] | Promise<LocationWithQuantity[]>

Determines which StockLocations should be used to when creating a Sale and reducing the stockOnHand upon fulfillment.

forCancellation​

method
(ctx: RequestContext, stockLocations: StockLocation[], orderLine: OrderLine, quantity: number) => LocationWithQuantity[] | Promise<LocationWithQuantity[]>

Determines which StockLocations should be used to when creating a Cancellation of an OrderLine which has already been fulfilled.

AvailableStock​

The overall available stock for a ProductVariant as determined by the logic of the

StockLocationStrategy's `getAvailableStock` method.
Signature
interface AvailableStock {
stockOnHand: number;
stockAllocated: number;
}

stockOnHand​

property
number

stockAllocated​

property
number

LocationWithQuantity​

Returned by the StockLocationStrategy methods to indicate how much stock from each location should be used in the allocation/sale/release/cancellation of an OrderLine.

Signature
interface LocationWithQuantity {
location: StockLocation;
quantity: number;
}

location​

quantity​

property
number