示例#1
0
        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));
        }
示例#2
0
        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);
        }