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.
This is configured via the catalogOptions.stockLocationStrategy
property of
your VendureConfig.
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[]>;
}
- Extends:
InjectableStrategy
getAvailableStock
(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
(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
(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
(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
(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.
interface AvailableStock {
stockOnHand: number;
stockAllocated: 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.
interface LocationWithQuantity {
location: StockLocation;
quantity: number;
}