public ActionResult ProductTierPrices(int productId) { if (!_services.Permissions.Authorize(StandardPermissionProvider.DisplayPrices)) { return(Content("")); } var product = _productService.GetProductById(productId); if (product == null) { throw new ArgumentException(T("Products.NotFound", productId)); } if (!product.HasTierPrices) { // No tier prices return(Content("")); } var model = product.TierPrices .OrderBy(x => x.Quantity) .FilterByStore(_services.StoreContext.CurrentStore.Id) .FilterForCustomer(_services.WorkContext.CurrentCustomer) .ToList() .RemoveDuplicatedQuantities() .Select(tierPrice => { var m = new ProductDetailsModel.TierPriceModel { Quantity = tierPrice.Quantity, }; decimal taxRate = decimal.Zero; decimal priceBase = _taxService.GetProductPrice(product, _priceCalculationService.GetFinalPrice(product, _services.WorkContext.CurrentCustomer, decimal.Zero, _catalogSettings.DisplayTierPricesWithDiscounts, tierPrice.Quantity), out taxRate); decimal price = _currencyService.ConvertFromPrimaryStoreCurrency(priceBase, _services.WorkContext.WorkingCurrency); m.Price = _priceFormatter.FormatPrice(price, true, false); return(m); }) .ToList(); return(PartialView("Product.TierPrices", model)); }
public async Task <List <ProductDetailsModel.TierPriceModel> > CreateTierPriceModelAsync(Product product, decimal adjustment = decimal.Zero) { var model = await product.TierPrices .OrderBy(x => x.Quantity) .FilterByStore(_services.StoreContext.CurrentStore.Id) .FilterForCustomer(_services.WorkContext.CurrentCustomer) .ToList() .RemoveDuplicatedQuantities() .SelectAsync(async(tierPrice) => { var m = new ProductDetailsModel.TierPriceModel { Quantity = tierPrice.Quantity, }; if (adjustment != 0 && tierPrice.CalculationMethod == TierPriceCalculationMethod.Percental && _catalogSettings.ApplyTierPricePercentageToAttributePriceAdjustments) { adjustment -= (adjustment / 100 * tierPrice.Price); } else { adjustment = decimal.Zero; } var adjustmentAmount = adjustment == 0 ? (Money?)null : new Money(adjustment, _currencyService.PrimaryCurrency); var priceBase = default(Money); var taxRate = decimal.Zero; var finalPriceBase = await _priceCalculationService.GetFinalPriceAsync(product, adjustmentAmount, _services.WorkContext.CurrentCustomer, _catalogSettings.DisplayTierPricesWithDiscounts, tierPrice.Quantity, null, null, true); (priceBase, taxRate) = await _taxService.GetProductPriceAsync(product, finalPriceBase); m.Price = _currencyService.ConvertToWorkingCurrency(priceBase); return(m); }) .AsyncToList(); return(model); }