Skip to main content

ProductPriceApplicator

ProductPriceApplicator

This helper is used to apply the correct price to a ProductVariant based on the current context including active Channel, any current Order, etc. If you use the TransactionalConnection to directly query ProductVariants, you will find that the price and priceWithTax properties will always be 0 until you use the applyChannelPriceAndTax() method:

Example

export class MyCustomService {
constructor(private connection: TransactionalConnection,
private productPriceApplicator: ProductPriceApplicator) {}

getVariant(ctx: RequestContext, id: ID) {
const productVariant = await this.connection
.getRepository(ctx, ProductVariant)
.findOne(id, { relations: ['taxCategory'] });

await this.productPriceApplicator
.applyChannelPriceAndTax(productVariant, ctx);

return productVariant;
}
}
Signature
class ProductPriceApplicator {
constructor(configService: ConfigService, taxRateService: TaxRateService, zoneService: ZoneService, requestCache: RequestContextCacheService)
applyChannelPriceAndTax(variant: ProductVariant, ctx: RequestContext, order?: Order, throwIfNoPriceFound: = false) => Promise<ProductVariant>;
}

constructor

method
(configService: ConfigService, taxRateService: TaxRateService, zoneService: ZoneService, requestCache: RequestContextCacheService) => ProductPriceApplicator

applyChannelPriceAndTax

method
(variant: ProductVariant, ctx: RequestContext, order?: Order, throwIfNoPriceFound: = false) => Promise<ProductVariant>

Populates the price field with the price for the specified channel. Make sure that the ProductVariant being passed in has its taxCategory relation joined.

If the throwIfNoPriceFound option is set to true, then an error will be thrown if no price is found for the given Channel.