in src/Feature/Catalog/code/Pipelines/Prices/GetProductBulkPrices.cs [55:119]
public override void Process(Commerce.Pipelines.ServicePipelineArgs args)
{
Assert.ArgumentNotNull(args, "args");
Assert.ArgumentNotNull(args.Request, "args.request");
Assert.ArgumentCondition(args.Request is GetProductBulkPricesRequest, "args.Request", "args.Request is GetProductBulkPricesRequest");
Assert.ArgumentCondition(args.Result is Sitecore.Commerce.Services.Prices.GetProductBulkPricesResult, "args.Result", "args.Result is GetProductBulkPricesResult");
GetProductBulkPricesRequest request = (GetProductBulkPricesRequest)args.Request;
Sitecore.Commerce.Services.Prices.GetProductBulkPricesResult result = (Sitecore.Commerce.Services.Prices.GetProductBulkPricesResult)args.Result;
Assert.ArgumentNotNull(request.ProductCatalogName, "request.ProductCatalogName");
Assert.ArgumentNotNull(request.ProductIds, "request.ProductIds");
Assert.ArgumentNotNull(request.PriceType, "request.PriceType");
ICatalogRepository catalogRepository = ContextTypeLoader.CreateInstance<ICatalogRepository>();
bool isList = request.PriceTypeIds.FirstOrDefault(x => x.Equals(PriceTypes.List, StringComparison.OrdinalIgnoreCase)) != null;
bool isAdjusted = request.PriceTypeIds.FirstOrDefault(x => x.Equals(PriceTypes.Adjusted, StringComparison.OrdinalIgnoreCase)) != null;
bool isLowestPriceVariantSpecified = request.PriceTypeIds.FirstOrDefault(x => x.Equals(PriceTypes.LowestPricedVariant, StringComparison.OrdinalIgnoreCase)) != null;
bool isLowestPriceVariantListPriceSpecified = request.PriceTypeIds.FirstOrDefault(x => x.Equals(PriceTypes.LowestPricedVariantListPrice, StringComparison.OrdinalIgnoreCase)) != null;
bool isHighestPriceVariantSpecified = request.PriceTypeIds.FirstOrDefault(x => x.Equals(PriceTypes.HighestPricedVariant, StringComparison.OrdinalIgnoreCase)) != null;
var uniqueIds = request.ProductIds.ToList().Distinct();
foreach (var requestedProductId in uniqueIds)
{
try
{
var product = catalogRepository.GetProductReadOnly(request.ProductCatalogName, requestedProductId);
ExtendedCommercePrice extendedPrice = this.EntityFactory.Create<ExtendedCommercePrice>("Price");
// BasePrice is a List price and ListPrice is Adjusted price
if (isList)
{
if (product.HasProperty("BasePrice") && product["BasePrice"] != null)
{
extendedPrice.Amount = (product["BasePrice"] as decimal?).Value;
}
else
{
// No base price is defined, the List price is set to the actual ListPrice define in the catalog
extendedPrice.Amount = product.ListPrice;
}
}
if (isAdjusted && !product.IsListPriceNull())
{
extendedPrice.ListPrice = product.ListPrice;
}
if ((isLowestPriceVariantSpecified || isLowestPriceVariantListPriceSpecified || isHighestPriceVariantSpecified) && product is ProductFamily)
{
this.SetVariantPrices(product as ProductFamily, extendedPrice, isLowestPriceVariantSpecified, isLowestPriceVariantListPriceSpecified, isHighestPriceVariantSpecified);
}
result.Prices.Add(requestedProductId, extendedPrice);
}
catch (EntityDoesNotExistException e)
{
result.Success = false;
result.SystemMessages.Add(new SystemMessage { Message = e.Message });
continue;
}
}
}