The examples in this topic show how to get, save, and delete prices with the Episerver Commerce API.
Episerver Commerce provides two interfaces related to prices:
- IPriceService. Used for read-only prices.
- PriceDetailService. Used for editing prices.
Listing prices
Use IPriceDetailService.List() in the following examples to get price details for a catalog entry. If it is a variant or package, this method returns its own price. If it is a product or a bundle, this method will return prices for its child variants. There are overloads of List() which support filter and paging as examplified below.
Listing all prices
Use IPriceDetailService.List(ContentReference) to get the price details for an entry.
C#
public IList<IPriceDetailValue> ListAllPriceDetailValue(ContentReference catalogContentReference)
{
var priceDetailService = ServiceLocator.Current.GetInstance<IPriceDetailService>();
return priceDetailService.List(catalogContentReference);
}
Listing price with paging
Use IPriceDetailService.List(ContentReference, int, int , int) to get the price details for an entry with paging.
C#
public IList<IPriceDetailValue> ListPriceDetailValueWithPaging(ContentReference catalogContentReference, int offset, int numberOfItems, out int totalCount)
{
var priceDetailService = ServiceLocator.Current.GetInstance<IPriceDetailService>();
return priceDetailService.List(catalogContentReference, offset, numberOfItems, out totalCount);
}
Listing price with PriceFilter
Use IPriceDetailService.List(ContentReference, MarketId, PriceFilter, int, int , int) to get the price details for an entry with filter and paging.
C#
public IList<IPriceDetailValue> ListPriceDetailWithPriceFilter(ContentReference catalogContentReference, int offset, int numberOfItems, out int totalCount)
{
var priceDetailService = ServiceLocator.Current.GetInstance<IPriceDetailService>();
MarketId marketId = new MarketId("ER");
PriceFilter filter = new PriceFilter();
filter.Currencies = new List<Currency> { Currency.EUR, Currency.GBP };
return priceDetailService.List(catalogContentReference, marketId, filter, offset, numberOfItems, out totalCount);
}
Saving prices
Use IPriceDetailService.Save(IEnumerable<IPriceDetailService>) to add/edit price details. Commerce also provides an extension for IPriceDetailService.Save(IPriceDetailService) to add/edit only one price.
C#
public IPriceDetailValue SavePriceDetailValue(Entry catalogEntry)
{
var priceDetailService = ServiceLocator.Current.GetInstance<IPriceDetailService>();
var priceDetailValue = new PriceDetailValue
{
CatalogKey = new CatalogKey(catalogEntry),
MarketId = new MarketId("US"),
CustomerPricing = CustomerPricing.AllCustomers,
ValidFrom = DateTime.UtcNow.AddDays(-7),
ValidUntil = DateTime.UtcNow.AddDays(7),
MinQuantity = 0m,
UnitPrice = new Money(100m, Currency.USD)
};
return priceDetailService.Save(priceDetailValue);
}
Deleting prices
Use IPriceDetailService.Delete(IEnumerable<long>) to delete price details. You also can use the IPriceDetailService.Delete(long) extension to delete a specific price detail.
The example below illustrates how to delete all prices for an entry.
C#
public void DeletePriceDetailValue(ContentReference catalogContentReference)
{
var priceDetailService = ServiceLocator.Current.GetInstance<IPriceDetailService>();
var priceList = priceDetailService.List(catalogContentReference);
IEnumerable<long> priceValueIds = priceList.Select(p => p.PriceValueId).ToList();
priceDetailService.Delete(priceValueIds);
}
Related topics