protected MiniShoppingCartModel PrepareMiniShoppingCartModel() { var model = new MiniShoppingCartModel() { ShowProductImages = _shoppingCartSettings.ShowProductImagesInMiniShoppingCart, //let's always display it DisplayShoppingCartButton = true, CurrentCustomerIsGuest = _workContext.CurrentCustomer.IsGuest(), AnonymousCheckoutAllowed = _orderSettings.AnonymousCheckoutAllowed, }; var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); model.TotalProducts = cart.GetTotalProducts(); if (cart.Count > 0) { //subtotal decimal subtotalBase = decimal.Zero; decimal orderSubTotalDiscountAmountBase = decimal.Zero; Discount orderSubTotalAppliedDiscount = null; decimal subTotalWithoutDiscountBase = decimal.Zero; decimal subTotalWithDiscountBase = decimal.Zero; _orderTotalCalculationService.GetShoppingCartSubTotal(cart, out orderSubTotalDiscountAmountBase, out orderSubTotalAppliedDiscount, out subTotalWithoutDiscountBase, out subTotalWithDiscountBase); subtotalBase = subTotalWithoutDiscountBase; decimal subtotal = _currencyService.ConvertFromPrimaryStoreCurrency(subtotalBase, _workContext.WorkingCurrency); model.SubTotal = _priceFormatter.FormatPrice(subtotal); //a customer should visit the shopping cart page before going to checkout if: //1. "terms of services" are enabled //2. we have at least one checkout attribute //3. min order sub-total is OK var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes(); if (!cart.RequiresShipping()) { //remove attributes which require shippable products checkoutAttributes = checkoutAttributes.RemoveShippableAttributes(); } bool minOrderSubtotalAmountOk = _orderProcessingService.ValidateMinOrderSubtotalAmount(cart); model.DisplayCheckoutButton = !_orderSettings.TermsOfServiceEnabled && checkoutAttributes.Count == 0 && minOrderSubtotalAmountOk; //products. sort descending (recently added products) foreach (var sci in cart .OrderByDescending(x => x.Id) .Take(_shoppingCartSettings.MiniShoppingCartProductNumber) .ToList()) { var cartItemModel = new MiniShoppingCartModel.ShoppingCartItemModel() { Id = sci.Id, ProductId = sci.ProductVariant.ProductId, ProductSeName = sci.ProductVariant.Product.GetSeName(), Quantity = sci.Quantity, AttributeInfo = _productAttributeFormatter.FormatAttributes(sci.ProductVariant, sci.AttributesXml) }; //product name if (!String.IsNullOrEmpty(sci.ProductVariant.GetLocalized(x => x.Name))) cartItemModel.ProductName = string.Format("{0} ({1})", sci.ProductVariant.Product.GetLocalized(x => x.Name), sci.ProductVariant.GetLocalized(x => x.Name)); else cartItemModel.ProductName = sci.ProductVariant.Product.GetLocalized(x => x.Name); //unit prices if (sci.ProductVariant.CallForPrice) { cartItemModel.UnitPrice = _localizationService.GetResource("Products.CallForPrice"); } else { decimal taxRate = decimal.Zero; decimal shoppingCartUnitPriceWithDiscountBase = _taxService.GetProductPrice(sci.ProductVariant, _priceCalculationService.GetUnitPrice(sci, true), out taxRate); decimal shoppingCartUnitPriceWithDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartUnitPriceWithDiscountBase, _workContext.WorkingCurrency); cartItemModel.UnitPrice = _priceFormatter.FormatPrice(shoppingCartUnitPriceWithDiscount); } //picture if (_shoppingCartSettings.ShowProductImagesInMiniShoppingCart) { cartItemModel.Picture = PrepareCartItemPictureModel(sci.ProductVariant, _mediaSettings.MiniCartThumbPictureSize, true, cartItemModel.ProductName); } model.Items.Add(cartItemModel); } } return model; }
protected virtual MiniShoppingCartModel PrepareMiniShoppingCartModel() { var model = new MiniShoppingCartModel() { ShowProductImages = _shoppingCartSettings.ShowProductImagesInMiniShoppingCart, //let's always display it DisplayShoppingCartButton = true, CurrentCustomerIsGuest = _workContext.CurrentCustomer.IsGuest(), AnonymousCheckoutAllowed = _orderSettings.AnonymousCheckoutAllowed, }; //performance optimization (use "HasShoppingCartItems" property) if (_workContext.CurrentCustomer.HasShoppingCartItems) { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); model.TotalProducts = cart.GetTotalProducts(); if (cart.Count > 0) { //subtotal decimal subtotalBase = decimal.Zero; decimal orderSubTotalDiscountAmountBase = decimal.Zero; Discount orderSubTotalAppliedDiscount = null; decimal subTotalWithoutDiscountBase = decimal.Zero; decimal subTotalWithDiscountBase = decimal.Zero; var subTotalIncludingTax = _workContext.TaxDisplayType == TaxDisplayType.IncludingTax && !_taxSettings.ForceTaxExclusionFromOrderSubtotal; _orderTotalCalculationService.GetShoppingCartSubTotal(cart, subTotalIncludingTax, out orderSubTotalDiscountAmountBase, out orderSubTotalAppliedDiscount, out subTotalWithoutDiscountBase, out subTotalWithDiscountBase); subtotalBase = subTotalWithoutDiscountBase; decimal subtotal = _currencyService.ConvertFromPrimaryStoreCurrency(subtotalBase, _workContext.WorkingCurrency); model.SubTotal = _priceFormatter.FormatPrice(subtotal, false, _workContext.WorkingCurrency, _workContext.WorkingLanguage, subTotalIncludingTax); var requiresShipping = cart.RequiresShipping(); //a customer should visit the shopping cart page (hide checkout button) before going to checkout if: //1. "terms of service" are enabled //2. min order sub-total is OK //3. we have at least one checkout attribute var checkoutAttributesExistCacheKey = string.Format(ModelCacheEventConsumer.CHECKOUTATTRIBUTES_EXIST_KEY, _storeContext.CurrentStore.Id, requiresShipping); var checkoutAttributesExist = _cacheManager.Get(checkoutAttributesExistCacheKey, () => { var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes(_storeContext.CurrentStore.Id, !requiresShipping); return checkoutAttributes.Count > 0; }); bool minOrderSubtotalAmountOk = _orderProcessingService.ValidateMinOrderSubtotalAmount(cart); model.DisplayCheckoutButton = !_orderSettings.TermsOfServiceOnShoppingCartPage && minOrderSubtotalAmountOk && !checkoutAttributesExist; //products. sort descending (recently added products) foreach (var sci in cart .OrderByDescending(x => x.Id) .Take(_shoppingCartSettings.MiniShoppingCartProductNumber) .ToList()) { var cartItemModel = new MiniShoppingCartModel.ShoppingCartItemModel() { Id = sci.Id, ProductId = sci.Product.Id, ProductName = sci.Product.GetLocalized(x => x.Name), ProductSeName = sci.Product.GetSeName(), Quantity = sci.Quantity, AttributeInfo = _productAttributeFormatter.FormatAttributes(sci.Product, sci.AttributesXml) }; //unit prices if (sci.Product.CallForPrice) { cartItemModel.UnitPrice = _localizationService.GetResource("Products.CallForPrice"); } else { decimal taxRate = decimal.Zero; decimal shoppingCartUnitPriceWithDiscountBase = _taxService.GetProductPrice(sci.Product, _priceCalculationService.GetUnitPrice(sci, true), out taxRate); decimal shoppingCartUnitPriceWithDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartUnitPriceWithDiscountBase, _workContext.WorkingCurrency); cartItemModel.UnitPrice = _priceFormatter.FormatPrice(shoppingCartUnitPriceWithDiscount); } //picture if (_shoppingCartSettings.ShowProductImagesInMiniShoppingCart) { cartItemModel.Picture = PrepareCartItemPictureModel(sci, _mediaSettings.MiniCartThumbPictureSize, true, cartItemModel.ProductName); } model.Items.Add(cartItemModel); } } } return model; }
public ActionResult MiniShoppingCart() { if (!_shoppingCartSettings.MiniShoppingCartEnabled) return Content(""); if (!_permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart)) return Content(""); var model = new MiniShoppingCartModel() { DisplayProducts = _shoppingCartSettings.MiniShoppingCartDisplayProducts }; var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); model.TotalProducts = cart.GetTotalProducts(); if (cart.Count > 0) { //subtotal decimal subtotalBase = decimal.Zero; decimal orderSubTotalDiscountAmountBase = decimal.Zero; Discount orderSubTotalAppliedDiscount = null; decimal subTotalWithoutDiscountBase = decimal.Zero; decimal subTotalWithDiscountBase = decimal.Zero; _orderTotalCalculationService.GetShoppingCartSubTotal(cart, out orderSubTotalDiscountAmountBase, out orderSubTotalAppliedDiscount, out subTotalWithoutDiscountBase, out subTotalWithDiscountBase); subtotalBase = subTotalWithoutDiscountBase; decimal subtotal = _currencyService.ConvertFromPrimaryStoreCurrency(subtotalBase, _workContext.WorkingCurrency); model.SubTotal = _priceFormatter.FormatPrice(subtotal); } if (_shoppingCartSettings.MiniShoppingCartDisplayProducts) { foreach (var sci in cart) { var cartItemModel = new MiniShoppingCartModel.ShoppingCartItemModel() { Id = sci.Id, ProductId = sci.ProductVariant.ProductId, ProductSeName = sci.ProductVariant.Product.GetSeName(), Quantity = sci.Quantity, }; //product name if (!String.IsNullOrEmpty(sci.ProductVariant.GetLocalized(x => x.Name))) cartItemModel.ProductName = string.Format("{0} ({1})", sci.ProductVariant.Product.GetLocalized(x => x.Name), sci.ProductVariant.GetLocalized(x => x.Name)); else cartItemModel.ProductName = sci.ProductVariant.Product.GetLocalized(x => x.Name); model.Items.Add(cartItemModel); } } return PartialView(model); }