|
|
@@ -0,0 +1,179 @@
|
|
|
+---
|
|
|
+title: "ProductVariantService"
|
|
|
+weight: 10
|
|
|
+date: 2023-07-21T15:46:17.475Z
|
|
|
+showtoc: true
|
|
|
+generated: true
|
|
|
+---
|
|
|
+<!-- This file was generated from the Vendure source. Do not modify. Instead, re-run the "docs:build" script -->
|
|
|
+import MemberInfo from '@site/src/components/MemberInfo';
|
|
|
+import GenerationInfo from '@site/src/components/GenerationInfo';
|
|
|
+import MemberDescription from '@site/src/components/MemberDescription';
|
|
|
+
|
|
|
+
|
|
|
+## ProductVariantService
|
|
|
+
|
|
|
+<GenerationInfo sourceFile="packages/core/src/service/services/product-variant.service.ts" sourceLine="67" packageName="@vendure/core" />
|
|
|
+
|
|
|
+Contains methods relating to <a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a> entities.
|
|
|
+
|
|
|
+```ts title="Signature"
|
|
|
+class ProductVariantService {
|
|
|
+ constructor(connection: TransactionalConnection, configService: ConfigService, taxCategoryService: TaxCategoryService, facetValueService: FacetValueService, assetService: AssetService, translatableSaver: TranslatableSaver, eventBus: EventBus, listQueryBuilder: ListQueryBuilder, globalSettingsService: GlobalSettingsService, stockMovementService: StockMovementService, stockLevelService: StockLevelService, channelService: ChannelService, roleService: RoleService, customFieldRelationService: CustomFieldRelationService, requestCache: RequestContextCacheService, productPriceApplicator: ProductPriceApplicator, translator: TranslatorService)
|
|
|
+ async findAll(ctx: RequestContext, options?: ListQueryOptions<ProductVariant>) => Promise<PaginatedList<Translated<ProductVariant>>>;
|
|
|
+ findOne(ctx: RequestContext, productVariantId: ID, relations?: RelationPaths<ProductVariant>) => Promise<Translated<ProductVariant> | undefined>;
|
|
|
+ findByIds(ctx: RequestContext, ids: ID[]) => Promise<Array<Translated<ProductVariant>>>;
|
|
|
+ getVariantsByProductId(ctx: RequestContext, productId: ID, options: ListQueryOptions<ProductVariant> = {}, relations?: RelationPaths<ProductVariant>) => Promise<PaginatedList<Translated<ProductVariant>>>;
|
|
|
+ getVariantsByCollectionId(ctx: RequestContext, collectionId: ID, options: ListQueryOptions<ProductVariant>, relations: RelationPaths<ProductVariant> = []) => Promise<PaginatedList<Translated<ProductVariant>>>;
|
|
|
+ async getProductVariantChannels(ctx: RequestContext, productVariantId: ID) => Promise<Channel[]>;
|
|
|
+ async getProductVariantPrices(ctx: RequestContext, productVariantId: ID) => Promise<ProductVariantPrice[]>;
|
|
|
+ async getVariantByOrderLineId(ctx: RequestContext, orderLineId: ID) => Promise<Translated<ProductVariant>>;
|
|
|
+ getOptionsForVariant(ctx: RequestContext, variantId: ID) => Promise<Array<Translated<ProductOption>>>;
|
|
|
+ getFacetValuesForVariant(ctx: RequestContext, variantId: ID) => Promise<Array<Translated<FacetValue>>>;
|
|
|
+ async getProductForVariant(ctx: RequestContext, variant: ProductVariant) => Promise<Translated<Product>>;
|
|
|
+ async getSaleableStockLevel(ctx: RequestContext, variant: ProductVariant) => Promise<number>;
|
|
|
+ async getDisplayStockLevel(ctx: RequestContext, variant: ProductVariant) => Promise<string>;
|
|
|
+ async getFulfillableStockLevel(ctx: RequestContext, variant: ProductVariant) => Promise<number>;
|
|
|
+ async create(ctx: RequestContext, input: CreateProductVariantInput[]) => Promise<Array<Translated<ProductVariant>>>;
|
|
|
+ async update(ctx: RequestContext, input: UpdateProductVariantInput[]) => Promise<Array<Translated<ProductVariant>>>;
|
|
|
+ async createOrUpdateProductVariantPrice(ctx: RequestContext, productVariantId: ID, price: number, channelId: ID, currencyCode?: CurrencyCode) => Promise<ProductVariantPrice>;
|
|
|
+ async softDelete(ctx: RequestContext, id: ID | ID[]) => Promise<DeletionResponse>;
|
|
|
+ async hydratePriceFields(ctx: RequestContext, variant: ProductVariant, priceField: F) => Promise<ProductVariant[F]>;
|
|
|
+ async applyChannelPriceAndTax(variant: ProductVariant, ctx: RequestContext, order?: Order) => Promise<ProductVariant>;
|
|
|
+ async assignProductVariantsToChannel(ctx: RequestContext, input: AssignProductVariantsToChannelInput) => Promise<Array<Translated<ProductVariant>>>;
|
|
|
+ async removeProductVariantsFromChannel(ctx: RequestContext, input: RemoveProductVariantsFromChannelInput) => Promise<Array<Translated<ProductVariant>>>;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+<div className="members-wrapper">
|
|
|
+
|
|
|
+### constructor
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(connection: <a href='/reference/typescript-api/data-access/transactional-connection#transactionalconnection'>TransactionalConnection</a>, configService: ConfigService, taxCategoryService: <a href='/reference/typescript-api/services/tax-category-service#taxcategoryservice'>TaxCategoryService</a>, facetValueService: <a href='/reference/typescript-api/services/facet-value-service#facetvalueservice'>FacetValueService</a>, assetService: <a href='/reference/typescript-api/services/asset-service#assetservice'>AssetService</a>, translatableSaver: <a href='/reference/typescript-api/service-helpers/translatable-saver#translatablesaver'>TranslatableSaver</a>, eventBus: <a href='/reference/typescript-api/events/event-bus#eventbus'>EventBus</a>, listQueryBuilder: <a href='/reference/typescript-api/data-access/list-query-builder#listquerybuilder'>ListQueryBuilder</a>, globalSettingsService: <a href='/reference/typescript-api/services/global-settings-service#globalsettingsservice'>GlobalSettingsService</a>, stockMovementService: <a href='/reference/typescript-api/services/stock-movement-service#stockmovementservice'>StockMovementService</a>, stockLevelService: <a href='/reference/typescript-api/services/stock-level-service#stocklevelservice'>StockLevelService</a>, channelService: <a href='/reference/typescript-api/services/channel-service#channelservice'>ChannelService</a>, roleService: <a href='/reference/typescript-api/services/role-service#roleservice'>RoleService</a>, customFieldRelationService: CustomFieldRelationService, requestCache: RequestContextCacheService, productPriceApplicator: <a href='/reference/typescript-api/service-helpers/product-price-applicator#productpriceapplicator'>ProductPriceApplicator</a>, translator: TranslatorService) => ProductVariantService" />
|
|
|
+
|
|
|
+
|
|
|
+### findAll
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, options?: ListQueryOptions<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>) => Promise<<a href='/reference/typescript-api/common/paginated-list#paginatedlist'>PaginatedList</a><Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+
|
|
|
+### findOne
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, productVariantId: <a href='/reference/typescript-api/common/id#id'>ID</a>, relations?: RelationPaths<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>) => Promise<Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>> | undefined>" />
|
|
|
+
|
|
|
+
|
|
|
+### findByIds
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, ids: <a href='/reference/typescript-api/common/id#id'>ID</a>[]) => Promise<Array<Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+
|
|
|
+### getVariantsByProductId
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, productId: <a href='/reference/typescript-api/common/id#id'>ID</a>, options: ListQueryOptions<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>> = {}, relations?: RelationPaths<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>) => Promise<<a href='/reference/typescript-api/common/paginated-list#paginatedlist'>PaginatedList</a><Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+
|
|
|
+### getVariantsByCollectionId
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, collectionId: <a href='/reference/typescript-api/common/id#id'>ID</a>, options: ListQueryOptions<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>, relations: RelationPaths<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>> = []) => Promise<<a href='/reference/typescript-api/common/paginated-list#paginatedlist'>PaginatedList</a><Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+Returns a <a href='/reference/typescript-api/common/paginated-list#paginatedlist'>PaginatedList</a> of all ProductVariants associated with the given Collection.
|
|
|
+### getProductVariantChannels
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, productVariantId: <a href='/reference/typescript-api/common/id#id'>ID</a>) => Promise<<a href='/reference/typescript-api/entities/channel#channel'>Channel</a>[]>" />
|
|
|
+
|
|
|
+Returns all Channels to which the ProductVariant is assigned.
|
|
|
+### getProductVariantPrices
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, productVariantId: <a href='/reference/typescript-api/common/id#id'>ID</a>) => Promise<<a href='/reference/typescript-api/entities/product-variant-price#productvariantprice'>ProductVariantPrice</a>[]>" />
|
|
|
+
|
|
|
+
|
|
|
+### getVariantByOrderLineId
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, orderLineId: <a href='/reference/typescript-api/common/id#id'>ID</a>) => Promise<Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>" />
|
|
|
+
|
|
|
+Returns the ProductVariant associated with the given <a href='/reference/typescript-api/entities/order-line#orderline'>OrderLine</a>.
|
|
|
+### getOptionsForVariant
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, variantId: <a href='/reference/typescript-api/common/id#id'>ID</a>) => Promise<Array<Translated<<a href='/reference/typescript-api/entities/product-option#productoption'>ProductOption</a>>>>" />
|
|
|
+
|
|
|
+Returns the <a href='/reference/typescript-api/entities/product-option#productoption'>ProductOption</a>s for the given ProductVariant.
|
|
|
+### getFacetValuesForVariant
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, variantId: <a href='/reference/typescript-api/common/id#id'>ID</a>) => Promise<Array<Translated<<a href='/reference/typescript-api/entities/facet-value#facetvalue'>FacetValue</a>>>>" />
|
|
|
+
|
|
|
+
|
|
|
+### getProductForVariant
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, variant: <a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>) => Promise<Translated<<a href='/reference/typescript-api/entities/product#product'>Product</a>>>" />
|
|
|
+
|
|
|
+Returns the Product associated with the ProductVariant. Whereas the `ProductService.findOne()`
|
|
|
+method performs a large multi-table join with all the typical data needed for a "product detail"
|
|
|
+page, this method returns only the Product itself.
|
|
|
+### getSaleableStockLevel
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, variant: <a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>) => Promise<number>" />
|
|
|
+
|
|
|
+Returns the number of saleable units of the ProductVariant, i.e. how many are available
|
|
|
+for purchase by Customers. This is determined by the ProductVariant's `stockOnHand` value,
|
|
|
+as well as the local and global `outOfStockThreshold` settings.
|
|
|
+### getDisplayStockLevel
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, variant: <a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>) => Promise<string>" />
|
|
|
+
|
|
|
+Returns the stockLevel to display to the customer, as specified by the configured
|
|
|
+<a href='/reference/typescript-api/products-stock/stock-display-strategy#stockdisplaystrategy'>StockDisplayStrategy</a>.
|
|
|
+### getFulfillableStockLevel
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, variant: <a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>) => Promise<number>" />
|
|
|
+
|
|
|
+Returns the number of fulfillable units of the ProductVariant, equivalent to stockOnHand
|
|
|
+for those variants which are tracking inventory.
|
|
|
+### create
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, input: CreateProductVariantInput[]) => Promise<Array<Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+
|
|
|
+### update
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, input: UpdateProductVariantInput[]) => Promise<Array<Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+
|
|
|
+### createOrUpdateProductVariantPrice
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, productVariantId: <a href='/reference/typescript-api/common/id#id'>ID</a>, price: number, channelId: <a href='/reference/typescript-api/common/id#id'>ID</a>, currencyCode?: <a href='/reference/typescript-api/common/currency-code#currencycode'>CurrencyCode</a>) => Promise<<a href='/reference/typescript-api/entities/product-variant-price#productvariantprice'>ProductVariantPrice</a>>" />
|
|
|
+
|
|
|
+Creates a <a href='/reference/typescript-api/entities/product-variant-price#productvariantprice'>ProductVariantPrice</a> for the given ProductVariant/Channel combination.
|
|
|
+If the `currencyCode` is not specified, the default currency of the Channel will be used.
|
|
|
+### softDelete
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, id: <a href='/reference/typescript-api/common/id#id'>ID</a> | <a href='/reference/typescript-api/common/id#id'>ID</a>[]) => Promise<DeletionResponse>" />
|
|
|
+
|
|
|
+
|
|
|
+### hydratePriceFields
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, variant: <a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>, priceField: F) => Promise<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>[F]>" />
|
|
|
+
|
|
|
+This method is intended to be used by the ProductVariant GraphQL entity resolver to resolve the
|
|
|
+price-related fields which need to be populated at run-time using the `applyChannelPriceAndTax`
|
|
|
+method.
|
|
|
+
|
|
|
+Is optimized to make as few DB calls as possible using caching based on the open request.
|
|
|
+### applyChannelPriceAndTax
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(variant: <a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>, ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, order?: <a href='/reference/typescript-api/entities/order#order'>Order</a>) => Promise<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>" />
|
|
|
+
|
|
|
+Populates the `price` field with the price for the specified channel.
|
|
|
+### assignProductVariantsToChannel
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, input: AssignProductVariantsToChannelInput) => Promise<Array<Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+Assigns the specified ProductVariants to the specified Channel. In doing so, it will create a new
|
|
|
+<a href='/reference/typescript-api/entities/product-variant-price#productvariantprice'>ProductVariantPrice</a> and also assign the associated Product and any Assets to the Channel too.
|
|
|
+### removeProductVariantsFromChannel
|
|
|
+
|
|
|
+<MemberInfo kind="method" type="(ctx: <a href='/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>, input: RemoveProductVariantsFromChannelInput) => Promise<Array<Translated<<a href='/reference/typescript-api/entities/product-variant#productvariant'>ProductVariant</a>>>>" />
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+</div>
|