本文整理汇总了C#中Nop.Core.Domain.Catalog.Product.GetSpecialPrice方法的典型用法代码示例。如果您正苦于以下问题:C# Product.GetSpecialPrice方法的具体用法?C# Product.GetSpecialPrice怎么用?C# Product.GetSpecialPrice使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Nop.Core.Domain.Catalog.Product
的用法示例。
在下文中一共展示了Product.GetSpecialPrice方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetFinalPrice
/// <summary>
/// Gets the final price
/// </summary>
/// <param name="product">Product</param>
/// <param name="customer">The customer</param>
/// <param name="overriddenProductPrice">Overridden product price. If specified, then it'll be used instead of a product price. For example, used with product attribute combinations</param>
/// <param name="additionalCharge">Additional charge</param>
/// <param name="includeDiscounts">A value indicating whether include discounts or not for final price computation</param>
/// <param name="quantity">Shopping cart item quantity</param>
/// <param name="rentalStartDate">Rental period start date (for rental products)</param>
/// <param name="rentalEndDate">Rental period end date (for rental products)</param>
/// <param name="discountAmount">Applied discount amount</param>
/// <param name="appliedDiscounts">Applied discounts</param>
/// <returns>Final price</returns>
public virtual decimal GetFinalPrice(Product product,
Customer customer,
decimal? overriddenProductPrice,
decimal additionalCharge,
bool includeDiscounts,
int quantity,
DateTime? rentalStartDate,
DateTime? rentalEndDate,
out decimal discountAmount,
out List<Discount> appliedDiscounts)
{
if (product == null)
throw new ArgumentNullException("product");
discountAmount = decimal.Zero;
appliedDiscounts = new List<Discount>();
var cacheKey = string.Format(PriceCacheEventConsumer.PRODUCT_PRICE_MODEL_KEY,
product.Id,
overriddenProductPrice.HasValue ? overriddenProductPrice.Value.ToString(CultureInfo.InvariantCulture) : null,
additionalCharge.ToString(CultureInfo.InvariantCulture),
includeDiscounts,
quantity,
string.Join(",", customer.GetCustomerRoleIds()),
_storeContext.CurrentStore.Id);
var cacheTime = _catalogSettings.CacheProductPrices ? 60 : 0;
//we do not cache price for rental products
//otherwise, it can cause memory leaks (to store all possible date period combinations)
if (product.IsRental)
cacheTime = 0;
var cachedPrice = _cacheManager.Get(cacheKey, cacheTime, () =>
{
var result = new ProductPriceForCaching();
//initial price
decimal price = overriddenProductPrice.HasValue ? overriddenProductPrice.Value : product.Price;
//special price
var specialPrice = product.GetSpecialPrice();
if (specialPrice.HasValue)
price = specialPrice.Value;
//tier prices
if (product.HasTierPrices)
{
decimal? tierPrice = GetMinimumTierPrice(product, customer, quantity);
if (tierPrice.HasValue)
price = Math.Min(price, tierPrice.Value);
}
//additional charge
price = price + additionalCharge;
//rental products
if (product.IsRental)
if (rentalStartDate.HasValue && rentalEndDate.HasValue)
price = price * product.GetRentalPeriods(rentalStartDate.Value, rentalEndDate.Value);
if (includeDiscounts)
{
//discount
List<Discount> tmpAppliedDiscounts;
decimal tmpDiscountAmount = GetDiscountAmount(product, customer, price, out tmpAppliedDiscounts);
price = price - tmpDiscountAmount;
if (tmpAppliedDiscounts != null)
{
result.AppliedDiscountIds = tmpAppliedDiscounts.Select(x=>x.Id).ToList();
result.AppliedDiscountAmount = tmpDiscountAmount;
}
}
if (price < decimal.Zero)
price = decimal.Zero;
result.Price = price;
return result;
});
if (includeDiscounts)
{
//Discount instance cannnot be cached between requests (when "catalogSettings.CacheProductPrices" is "true)
//This is limitation of Entity Framework
//That's why we load it here after working with cache
foreach (var appliedDiscountId in cachedPrice.AppliedDiscountIds)
{
//.........这里部分代码省略.........