public ActionResult RemoveGiftardCode(int giftCardId) { var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var model = new ShoppingCartModel(); var gc = _giftCardService.GetGiftCardById(giftCardId); if (gc != null) { _workContext.CurrentCustomer.RemoveGiftCardCouponCode(gc.GiftCardCouponCode); _customerService.UpdateCustomer(_workContext.CurrentCustomer); } PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult UpdateCartItem(FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart)) return RedirectToRoute("HomePage"); //get shopping cart item identifier int sciId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("updatecartitem-", StringComparison.InvariantCultureIgnoreCase)) sciId = Convert.ToInt32(formValue.Substring("updatecartitem-".Length)); //get shopping cart item var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var sci = cart.Where(x => x.Id == sciId).FirstOrDefault(); if (sci == null) { return RedirectToRoute("ShoppingCart"); } //update the cart item var warnings = new List<string>(); foreach (string formKey in form.AllKeys) if (formKey.Equals(string.Format("itemquantity{0}", sci.Id), StringComparison.InvariantCultureIgnoreCase)) { int newQuantity = sci.Quantity; if (int.TryParse(form[formKey], out newQuantity)) { warnings.AddRange(_shoppingCartService.UpdateShoppingCartItem(_workContext.CurrentCustomer, sci.Id, newQuantity, true)); } break; } //updated cart cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart); //update current warnings //find model var sciModel = model.Items.Where(x => x.Id == sciId).FirstOrDefault(); if (sciModel != null) foreach (var w in warnings) if (!sciModel.Warnings.Contains(w)) sciModel.Warnings.Add(w); return View(model); }
public ActionResult GetEstimateShipping(EstimateShippingModel shippingModel, FormCollection form) { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); //parse and save checkout attributes ParseAndSaveCheckoutAttributes(cart, form); var model = new ShoppingCartModel(); model.EstimateShipping.CountryId = shippingModel.CountryId; model.EstimateShipping.StateProvinceId = shippingModel.StateProvinceId; model.EstimateShipping.ZipPostalCode = shippingModel.ZipPostalCode; PrepareShoppingCartModel(model, cart,setEstimateShippingDefaultAddress: false); if (cart.RequiresShipping()) { var address = new Address() { CountryId = shippingModel.CountryId, Country = shippingModel.CountryId.HasValue ? _countryService.GetCountryById(shippingModel.CountryId.Value) : null, StateProvinceId = shippingModel.StateProvinceId, StateProvince = shippingModel.StateProvinceId.HasValue ? _stateProvinceService.GetStateProvinceById(shippingModel.StateProvinceId.Value) : null, ZipPostalCode = shippingModel.ZipPostalCode, }; GetShippingOptionResponse getShippingOptionResponse = _shippingService .GetShippingOptions(cart, address, "", _storeContext.CurrentStore.Id); if (!getShippingOptionResponse.Success) { foreach (var error in getShippingOptionResponse.Errors) model.EstimateShipping.Warnings.Add(error); } else { if (getShippingOptionResponse.ShippingOptions.Count > 0) { foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new EstimateShippingModel.ShippingOptionModel() { Name = shippingOption.Name, Description = shippingOption.Description, }; //calculate discounted and taxed rate Discount appliedDiscount = null; decimal shippingTotal = _orderTotalCalculationService.AdjustShippingRate(shippingOption.Rate, cart, out appliedDiscount); decimal rateBase = _taxService.GetShippingPrice(shippingTotal, _workContext.CurrentCustomer); decimal rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Price = _priceFormatter.FormatShippingPrice(rate, true); model.EstimateShipping.ShippingOptions.Add(soModel); } //pickup in store? if (_shippingSettings.AllowPickUpInStore) { var soModel = new EstimateShippingModel.ShippingOptionModel() { Name = _localizationService.GetResource("Checkout.PickUpInStore"), Description = _localizationService.GetResource("Checkout.PickUpInStore.Description"), Price = _priceFormatter.FormatShippingPrice(decimal.Zero, true) }; model.EstimateShipping.ShippingOptions.Add(soModel); } } else { model.EstimateShipping.Warnings.Add(_localizationService.GetResource("Checkout.ShippingIsNotAllowed")); } } } return View(model); }
public ActionResult UpdateCartForRemove(FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart)) return RedirectToRoute("HomePage"); var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var allIdsToRemove = form["removeProduct"] != null ? form["removeProduct"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => int.Parse(x)).ToList() : new List<int>(); //current warnings <cart item identifier, warnings> var innerWarnings = new Dictionary<int, IList<string>>(); foreach (var sci in cart) { bool remove = allIdsToRemove.Contains(sci.Id); if (remove) _shoppingCartService.DeleteShoppingCartItem(sci, ensureOnlyActiveCheckoutAttributes: true); } //updated cart cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart); //update current warnings foreach (var kvp in innerWarnings) { //kvp = <cart item identifier, warnings> var sciId = kvp.Key; var warnings = kvp.Value; //find model var sciModel = model.Items.FirstOrDefault(x => x.Id == sciId); if (sciModel != null) foreach (var w in warnings) if (!sciModel.Warnings.Contains(w)) sciModel.Warnings.Add(w); } return View(model); }
protected virtual void PrepareShoppingCartModel(ShoppingCartModel model, IList<ShoppingCartItem> cart, bool isEditable = true, bool validateCheckoutAttributes = false, bool prepareEstimateShippingIfEnabled = true, bool setEstimateShippingDefaultAddress = true, bool prepareAndDisplayOrderReviewData = false) { if (cart == null) throw new ArgumentNullException("cart"); if (model == null) throw new ArgumentNullException("model"); if (cart.Count == 0) return; #region Simple properties model.IsEditable = isEditable; model.ShowProductImages = _shoppingCartSettings.ShowProductImagesOnShoppingCart; model.ShowSku = _catalogSettings.ShowProductSku; var checkoutAttributesXml = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService, _storeContext.CurrentStore.Id); model.CheckoutAttributeInfo = _checkoutAttributeFormatter.FormatAttributes(checkoutAttributesXml, _workContext.CurrentCustomer); bool minOrderSubtotalAmountOk = _orderProcessingService.ValidateMinOrderSubtotalAmount(cart); if (!minOrderSubtotalAmountOk) { decimal minOrderSubtotalAmount = _currencyService.ConvertFromPrimaryStoreCurrency(_orderSettings.MinOrderSubtotalAmount, _workContext.WorkingCurrency); model.MinOrderSubtotalWarning = string.Format(_localizationService.GetResource("Checkout.MinOrderSubtotalAmount"), _priceFormatter.FormatPrice(minOrderSubtotalAmount, true, false)); } model.TermsOfServiceOnShoppingCartPage = _orderSettings.TermsOfServiceOnShoppingCartPage; model.TermsOfServiceOnOrderConfirmPage = _orderSettings.TermsOfServiceOnOrderConfirmPage; model.OnePageCheckoutEnabled = _orderSettings.OnePageCheckoutEnabled; //gift card and gift card boxes model.DiscountBox.Display= _shoppingCartSettings.ShowDiscountBox; var discountCouponCode = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.DiscountCouponCode); var discount = _discountService.GetDiscountByCouponCode(discountCouponCode); if (discount != null && discount.RequiresCouponCode && _discountService.IsDiscountValid(discount, _workContext.CurrentCustomer)) model.DiscountBox.CurrentCode = discount.CouponCode; model.GiftCardBox.Display = _shoppingCartSettings.ShowGiftCardBox; //cart warnings var cartWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, checkoutAttributesXml, validateCheckoutAttributes); foreach (var warning in cartWarnings) model.Warnings.Add(warning); #endregion #region Checkout attributes var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes(_storeContext.CurrentStore.Id, !cart.RequiresShipping()); foreach (var attribute in checkoutAttributes) { var caModel = new ShoppingCartModel.CheckoutAttributeModel() { Id = attribute.Id, Name = attribute.GetLocalized(x => x.Name), TextPrompt = attribute.GetLocalized(x => x.TextPrompt), IsRequired = attribute.IsRequired, AttributeControlType = attribute.AttributeControlType, DefaultValue = attribute.DefaultValue }; if (!String.IsNullOrEmpty(attribute.ValidationFileAllowedExtensions)) { caModel.AllowedFileExtensions = attribute.ValidationFileAllowedExtensions .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .ToList(); } if (attribute.ShouldHaveValues()) { //values var caValues = _checkoutAttributeService.GetCheckoutAttributeValues(attribute.Id); foreach (var caValue in caValues) { var pvaValueModel = new ShoppingCartModel.CheckoutAttributeValueModel() { Id = caValue.Id, Name = caValue.GetLocalized(x => x.Name), ColorSquaresRgb = caValue.ColorSquaresRgb, IsPreSelected = caValue.IsPreSelected, }; caModel.Values.Add(pvaValueModel); //display price if allowed if (_permissionService.Authorize(StandardPermissionProvider.DisplayPrices)) { decimal priceAdjustmentBase = _taxService.GetCheckoutAttributePrice(caValue); decimal priceAdjustment = _currencyService.ConvertFromPrimaryStoreCurrency(priceAdjustmentBase, _workContext.WorkingCurrency); if (priceAdjustmentBase > decimal.Zero) pvaValueModel.PriceAdjustment = "+" + _priceFormatter.FormatPrice(priceAdjustment); else if (priceAdjustmentBase < decimal.Zero) pvaValueModel.PriceAdjustment = "-" + _priceFormatter.FormatPrice(-priceAdjustment); } } } //set already selected attributes string selectedCheckoutAttributes = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService, _storeContext.CurrentStore.Id); switch (attribute.AttributeControlType) { case AttributeControlType.DropdownList: case AttributeControlType.RadioList: case AttributeControlType.Checkboxes: case AttributeControlType.ColorSquares: { if (!String.IsNullOrEmpty(selectedCheckoutAttributes)) { //clear default selection foreach (var item in caModel.Values) item.IsPreSelected = false; //select new values var selectedCaValues = _checkoutAttributeParser.ParseCheckoutAttributeValues(selectedCheckoutAttributes); foreach (var caValue in selectedCaValues) foreach (var item in caModel.Values) if (caValue.Id == item.Id) item.IsPreSelected = true; } } break; case AttributeControlType.ReadonlyCheckboxes: { //do nothing //values are already pre-set } break; case AttributeControlType.TextBox: case AttributeControlType.MultilineTextbox: { if (!String.IsNullOrEmpty(selectedCheckoutAttributes)) { var enteredText = _checkoutAttributeParser.ParseValues(selectedCheckoutAttributes, attribute.Id); if (enteredText.Count > 0) caModel.DefaultValue = enteredText[0]; } } break; case AttributeControlType.Datepicker: { //keep in mind my that the code below works only in the current culture var selectedDateStr = _checkoutAttributeParser.ParseValues(selectedCheckoutAttributes, attribute.Id); if (selectedDateStr.Count > 0) { DateTime selectedDate; if (DateTime.TryParseExact(selectedDateStr[0], "D", CultureInfo.CurrentCulture, DateTimeStyles.None, out selectedDate)) { //successfully parsed caModel.SelectedDay = selectedDate.Day; caModel.SelectedMonth = selectedDate.Month; caModel.SelectedYear = selectedDate.Year; } } } break; default: break; } model.CheckoutAttributes.Add(caModel); } #endregion #region Estimate shipping if (prepareEstimateShippingIfEnabled) { model.EstimateShipping.Enabled = cart.Count > 0 && cart.RequiresShipping() && _shippingSettings.EstimateShippingEnabled; if (model.EstimateShipping.Enabled) { //countries int? defaultEstimateCountryId = (setEstimateShippingDefaultAddress && _workContext.CurrentCustomer.ShippingAddress != null) ? _workContext.CurrentCustomer.ShippingAddress.CountryId : model.EstimateShipping.CountryId; model.EstimateShipping.AvailableCountries.Add(new SelectListItem() { Text = _localizationService.GetResource("Address.SelectCountry"), Value = "0" }); foreach (var c in _countryService.GetAllCountriesForShipping()) model.EstimateShipping.AvailableCountries.Add(new SelectListItem() { Text = c.GetLocalized(x => x.Name), Value = c.Id.ToString(), Selected = c.Id == defaultEstimateCountryId }); //states int? defaultEstimateStateId = (setEstimateShippingDefaultAddress && _workContext.CurrentCustomer.ShippingAddress != null) ? _workContext.CurrentCustomer.ShippingAddress.StateProvinceId : model.EstimateShipping.StateProvinceId; var states = defaultEstimateCountryId.HasValue ? _stateProvinceService.GetStateProvincesByCountryId(defaultEstimateCountryId.Value).ToList() : new List<StateProvince>(); if (states.Count > 0) foreach (var s in states) model.EstimateShipping.AvailableStates.Add(new SelectListItem() { Text = s.GetLocalized(x => x.Name), Value = s.Id.ToString(), Selected = s.Id == defaultEstimateStateId }); else model.EstimateShipping.AvailableStates.Add(new SelectListItem() { Text = _localizationService.GetResource("Address.OtherNonUS"), Value = "0" }); if (setEstimateShippingDefaultAddress && _workContext.CurrentCustomer.ShippingAddress != null) model.EstimateShipping.ZipPostalCode = _workContext.CurrentCustomer.ShippingAddress.ZipPostalCode; } } #endregion #region Cart items foreach (var sci in cart) { var cartItemModel = new ShoppingCartModel.ShoppingCartItemModel() { Id = sci.Id, Sku = sci.Product.FormatSku(sci.AttributesXml, _productAttributeParser), 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), }; //allow editing? //1. setting enabled? //2. simple product? //3. has attribute or gift card? //4. visible individually? cartItemModel.AllowItemEditing = _shoppingCartSettings.AllowCartItemEditing && sci.Product.ProductType == ProductType.SimpleProduct && (!String.IsNullOrEmpty(cartItemModel.AttributeInfo) || sci.Product.IsGiftCard) && sci.Product.VisibleIndividually; //allowed quantities var allowedQuantities = sci.Product.ParseAllowedQuatities(); foreach (var qty in allowedQuantities) { cartItemModel.AllowedQuantities.Add(new SelectListItem() { Text = qty.ToString(), Value = qty.ToString(), Selected = sci.Quantity == qty }); } //recurring info if (sci.Product.IsRecurring) cartItemModel.RecurringInfo = string.Format(_localizationService.GetResource("ShoppingCart.RecurringPeriod"), sci.Product.RecurringCycleLength, sci.Product.RecurringCyclePeriod.GetLocalizedEnum(_localizationService, _workContext)); //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); } //subtotal, discount if (sci.Product.CallForPrice) { cartItemModel.SubTotal = _localizationService.GetResource("Products.CallForPrice"); } else { //sub total decimal taxRate = decimal.Zero; decimal shoppingCartItemSubTotalWithDiscountBase = _taxService.GetProductPrice(sci.Product, _priceCalculationService.GetSubTotal(sci, true), out taxRate); decimal shoppingCartItemSubTotalWithDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartItemSubTotalWithDiscountBase, _workContext.WorkingCurrency); cartItemModel.SubTotal = _priceFormatter.FormatPrice(shoppingCartItemSubTotalWithDiscount); //display an applied discount amount decimal shoppingCartItemSubTotalWithoutDiscountBase = _taxService.GetProductPrice(sci.Product, _priceCalculationService.GetSubTotal(sci, false), out taxRate); decimal shoppingCartItemDiscountBase = shoppingCartItemSubTotalWithoutDiscountBase - shoppingCartItemSubTotalWithDiscountBase; if (shoppingCartItemDiscountBase > decimal.Zero) { decimal shoppingCartItemDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartItemDiscountBase, _workContext.WorkingCurrency); cartItemModel.Discount = _priceFormatter.FormatPrice(shoppingCartItemDiscount); } } //picture if (_shoppingCartSettings.ShowProductImagesOnShoppingCart) { cartItemModel.Picture = PrepareCartItemPictureModel(sci, _mediaSettings.CartThumbPictureSize, true, cartItemModel.ProductName); } //item warnings var itemWarnings = _shoppingCartService.GetShoppingCartItemWarnings( _workContext.CurrentCustomer, sci.ShoppingCartType, sci.Product, sci.StoreId, sci.AttributesXml, sci.CustomerEnteredPrice, sci.Quantity, false); foreach (var warning in itemWarnings) cartItemModel.Warnings.Add(warning); model.Items.Add(cartItemModel); } #endregion #region Button payment methods var boundPaymentMethods = _paymentService .LoadActivePaymentMethods(_workContext.CurrentCustomer.Id, _storeContext.CurrentStore.Id) .Where(pm => pm.PaymentMethodType == PaymentMethodType.Button) .ToList(); foreach (var pm in boundPaymentMethods) { if (cart.IsRecurring() && pm.RecurringPaymentType == RecurringPaymentType.NotSupported) continue; string actionName; string controllerName; RouteValueDictionary routeValues; pm.GetPaymentInfoRoute(out actionName, out controllerName, out routeValues); model.ButtonPaymentMethodActionNames.Add(actionName); model.ButtonPaymentMethodControllerNames.Add(controllerName); model.ButtonPaymentMethodRouteValues.Add(routeValues); } #endregion #region Order review data if (prepareAndDisplayOrderReviewData) { model.OrderReviewData.Display = true; //billing info var billingAddress = _workContext.CurrentCustomer.BillingAddress; if (billingAddress != null) model.OrderReviewData.BillingAddress.PrepareModel(billingAddress, false, _addressSettings); //shipping info if (cart.RequiresShipping()) { model.OrderReviewData.IsShippable = true; if (_shippingSettings.AllowPickUpInStore) { model.OrderReviewData.SelectedPickUpInStore = _workContext.CurrentCustomer.GetAttribute<bool>(SystemCustomerAttributeNames.SelectedPickUpInStore, _storeContext.CurrentStore.Id); } if (!model.OrderReviewData.SelectedPickUpInStore) { var shippingAddress = _workContext.CurrentCustomer.ShippingAddress; if (shippingAddress != null) { model.OrderReviewData.ShippingAddress.PrepareModel(shippingAddress, false, _addressSettings); } } //selected shipping method var shippingOption = _workContext.CurrentCustomer.GetAttribute<ShippingOption>(SystemCustomerAttributeNames.SelectedShippingOption, _storeContext.CurrentStore.Id); if (shippingOption != null) model.OrderReviewData.ShippingMethod = shippingOption.Name; } //payment info var selectedPaymentMethodSystemName = _workContext.CurrentCustomer.GetAttribute<string>( SystemCustomerAttributeNames.SelectedPaymentMethod, _storeContext.CurrentStore.Id); var paymentMethod = _paymentService.LoadPaymentMethodBySystemName(selectedPaymentMethodSystemName); model.OrderReviewData.PaymentMethod = paymentMethod != null ? paymentMethod.GetLocalizedFriendlyName(_localizationService, _workContext.WorkingLanguage.Id) : ""; } #endregion }
public ActionResult ApplyGiftCard(string giftcardcouponcode, FormCollection form) { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); //parse and save checkout attributes ParseAndSaveCheckoutAttributes(cart, form); var model = new ShoppingCartModel(); if (!cart.IsRecurring()) { if (!String.IsNullOrWhiteSpace(giftcardcouponcode)) { var giftCard = _giftCardService.GetAllGiftCards(giftCardCouponCode: giftcardcouponcode).FirstOrDefault(); bool isGiftCardValid = giftCard != null && giftCard.IsGiftCardValid(); if (isGiftCardValid) { _workContext.CurrentCustomer.ApplyGiftCardCouponCode(giftcardcouponcode); _customerService.UpdateCustomer(_workContext.CurrentCustomer); model.GiftCardBox.Message = _localizationService.GetResource("ShoppingCart.GiftCardCouponCode.Applied"); } else model.GiftCardBox.Message = _localizationService.GetResource("ShoppingCart.GiftCardCouponCode.WrongGiftCard"); } else model.GiftCardBox.Message = _localizationService.GetResource("ShoppingCart.GiftCardCouponCode.WrongGiftCard"); } else model.GiftCardBox.Message = _localizationService.GetResource("ShoppingCart.GiftCardCouponCode.DontWorkWithAutoshipProducts"); PrepareShoppingCartModel(model, cart); return View(model); }
protected ShoppingCartModel PrepareShoppingCartModel(ShoppingCartModel model, IList<ShoppingCartItem> cart, bool isEditable, bool setEstimateShippingDefaultAddress = true) { if (cart == null) throw new ArgumentNullException("cart"); if (model == null) throw new ArgumentNullException("model"); if (cart.Count == 0) return model; #region Simple properties model.IsEditable = isEditable; model.ShowProductImages = _shoppingCartSettings.ShowProductImagesOnShoppingCart; model.ShowSku = _catalogSettings.ShowProductSku; model.CheckoutAttributeInfo = _checkoutAttributeFormatter.FormatAttributes(_workContext.CurrentCustomer.CheckoutAttributes, _workContext.CurrentCustomer); bool minOrderSubtotalAmountOk = _orderProcessingService.ValidateMinOrderSubtotalAmount(cart); if (!minOrderSubtotalAmountOk) { decimal minOrderSubtotalAmount = _currencyService.ConvertFromPrimaryStoreCurrency(_orderSettings.MinOrderSubtotalAmount, _workContext.WorkingCurrency); model.MinOrderSubtotalWarning = string.Format(_localizationService.GetResource("Checkout.MinOrderSubtotalAmount"), _priceFormatter.FormatPrice(minOrderSubtotalAmount, true, false)); } model.TermsOfServiceEnabled = _orderSettings.TermsOfServiceEnabled; //gift card and gift card boxes model.ShowDiscountBox = _shoppingCartSettings.ShowDiscountBox; var currentDiscountWithCode = _discountService.GetDiscountByCouponCode(_workContext.CurrentCustomer.DiscountCouponCode); model.CurrentDiscountCode = currentDiscountWithCode != null && currentDiscountWithCode.RequiresCouponCode ? currentDiscountWithCode.CouponCode : null; model.ShowGiftCardBox = _shoppingCartSettings.ShowGiftCardBox; //cart warnings var cartWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, "", false); foreach (var warning in cartWarnings) model.Warnings.Add(warning); #endregion #region Checkout attributes var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes(!cart.RequiresShipping()); foreach (var attribute in checkoutAttributes) { var caModel = new ShoppingCartModel.CheckoutAttributeModel() { Id = attribute.Id, Name = attribute.GetLocalized(x => x.Name), TextPrompt = attribute.TextPrompt, IsRequired = attribute.IsRequired, AttributeControlType = attribute.AttributeControlType }; if (attribute.ShouldHaveValues()) { //values var caValues = _checkoutAttributeService.GetCheckoutAttributeValues(attribute.Id); foreach (var caValue in caValues) { var pvaValueModel = new ShoppingCartModel.CheckoutAttributeValueModel() { Id = caValue.Id, Name = caValue.GetLocalized(x => x.Name), IsPreSelected = caValue.IsPreSelected }; caModel.Values.Add(pvaValueModel); //display price if allowed if (_permissionService.Authorize(StandardPermissionProvider.DisplayPrices)) { decimal priceAdjustmentBase = _taxService.GetCheckoutAttributePrice(caValue); decimal priceAdjustment = _currencyService.ConvertFromPrimaryStoreCurrency(priceAdjustmentBase, _workContext.WorkingCurrency); if (priceAdjustmentBase > decimal.Zero) pvaValueModel.PriceAdjustment = "+" + _priceFormatter.FormatPrice(priceAdjustment); else if (priceAdjustmentBase < decimal.Zero) pvaValueModel.PriceAdjustment = "-" + _priceFormatter.FormatPrice(-priceAdjustment); } } } //set already selected attributes string selectedCheckoutAttributes = _workContext.CurrentCustomer.CheckoutAttributes; switch (attribute.AttributeControlType) { case AttributeControlType.DropdownList: case AttributeControlType.RadioList: case AttributeControlType.Checkboxes: { if (!String.IsNullOrEmpty(selectedCheckoutAttributes)) { //clear default selection foreach (var item in caModel.Values) item.IsPreSelected = false; //select new values var selectedCaValues = _checkoutAttributeParser.ParseCheckoutAttributeValues(selectedCheckoutAttributes); foreach (var caValue in selectedCaValues) foreach (var item in caModel.Values) if (caValue.Id == item.Id) item.IsPreSelected = true; } } break; case AttributeControlType.TextBox: case AttributeControlType.MultilineTextbox: { if (!String.IsNullOrEmpty(selectedCheckoutAttributes)) { var enteredText = _checkoutAttributeParser.ParseValues(selectedCheckoutAttributes, attribute.Id); if (enteredText.Count > 0) caModel.DefaultValue = enteredText[0]; } } break; default: break; } model.CheckoutAttributes.Add(caModel); } #endregion #region Estimate shipping model.EstimateShipping.Enabled = cart.Count > 0 && cart.RequiresShipping() && _shippingSettings.EstimateShippingEnabled; if (model.EstimateShipping.Enabled) { //countries int? defaultEstimateCountryId = (setEstimateShippingDefaultAddress && _workContext.CurrentCustomer.ShippingAddress != null) ? _workContext.CurrentCustomer.ShippingAddress.CountryId : model.EstimateShipping.CountryId; model.EstimateShipping.AvailableCountries.Add(new SelectListItem() { Text = _localizationService.GetResource("Address.SelectCountry"), Value = "0" }); foreach (var c in _countryService.GetAllCountries()) model.EstimateShipping.AvailableCountries.Add(new SelectListItem() { Text = c.GetLocalized(x => x.Name), Value = c.Id.ToString(), Selected = c.Id == defaultEstimateCountryId }); //states int? defaultEstimateStateId = (setEstimateShippingDefaultAddress && _workContext.CurrentCustomer.ShippingAddress != null) ? _workContext.CurrentCustomer.ShippingAddress.StateProvinceId : model.EstimateShipping.StateProvinceId; var states = defaultEstimateCountryId.HasValue ? _stateProvinceService.GetStateProvincesByCountryId(defaultEstimateCountryId.Value).ToList() : new List<StateProvince>(); if (states.Count > 0) foreach (var s in states) model.EstimateShipping.AvailableStates.Add(new SelectListItem() { Text = s.GetLocalized(x => x.Name), Value = s.Id.ToString(), Selected = s.Id == defaultEstimateStateId }); else model.EstimateShipping.AvailableStates.Add(new SelectListItem() { Text = _localizationService.GetResource("Address.OtherNonUS"), Value = "0" }); if (setEstimateShippingDefaultAddress && _workContext.CurrentCustomer.ShippingAddress != null) model.EstimateShipping.ZipPostalCode = _workContext.CurrentCustomer.ShippingAddress.ZipPostalCode; } #endregion #region Cart items foreach (var sci in cart) { var cartItemModel = new ShoppingCartModel.ShoppingCartItemModel() { Id = sci.Id, Sku = sci.ProductVariant.Sku, ProductId = sci.ProductVariant.ProductId, ProductSeName = sci.ProductVariant.Product.GetSeName(), Quantity = sci.Quantity, AttributeInfo = _productAttributeFormatter.FormatAttributes(sci.ProductVariant, sci.AttributesXml), }; //recurring info if (sci.ProductVariant.IsRecurring) cartItemModel.RecurringInfo = string.Format(_localizationService.GetResource("ShoppingCart.RecurringPeriod"), sci.ProductVariant.RecurringCycleLength, sci.ProductVariant.RecurringCyclePeriod.GetLocalizedEnum(_localizationService, _workContext)); //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); } //subtotal, discount if (sci.ProductVariant.CallForPrice) { cartItemModel.SubTotal = _localizationService.GetResource("Products.CallForPrice"); } else { //sub total decimal taxRate = decimal.Zero; decimal shoppingCartItemSubTotalWithDiscountBase = _taxService.GetProductPrice(sci.ProductVariant, _priceCalculationService.GetSubTotal(sci, true), out taxRate); decimal shoppingCartItemSubTotalWithDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartItemSubTotalWithDiscountBase, _workContext.WorkingCurrency); cartItemModel.SubTotal = _priceFormatter.FormatPrice(shoppingCartItemSubTotalWithDiscount); //display an applied discount amount decimal shoppingCartItemSubTotalWithoutDiscountBase = _taxService.GetProductPrice(sci.ProductVariant, _priceCalculationService.GetSubTotal(sci, false), out taxRate); decimal shoppingCartItemDiscountBase = shoppingCartItemSubTotalWithoutDiscountBase - shoppingCartItemSubTotalWithDiscountBase; if (shoppingCartItemDiscountBase > decimal.Zero) { decimal shoppingCartItemDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartItemDiscountBase, _workContext.WorkingCurrency); cartItemModel.Discount = _priceFormatter.FormatPrice(shoppingCartItemDiscount); } } //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); //picture if (_shoppingCartSettings.ShowProductImagesOnShoppingCart) { var picture = _pictureService.GetPictureById(sci.ProductVariant.PictureId); if (picture == null) { picture = _pictureService.GetPicturesByProductId(sci.ProductVariant.Product.Id, 1).FirstOrDefault(); } cartItemModel.Picture = new PictureModel() { ImageUrl = _pictureService.GetPictureUrl(picture, _mediaSetting.CartThumbPictureSize, true), Title = string.Format(_localizationService.GetResource("Media.Product.ImageLinkTitleFormat"), cartItemModel.ProductName), AlternateText = string.Format(_localizationService.GetResource("Media.Product.ImageAlternateTextFormat"), cartItemModel.ProductName), }; } //item warnings var itemWarnings = _shoppingCartService.GetShoppingCartItemWarnings( _workContext.CurrentCustomer, sci.ShoppingCartType, sci.ProductVariant, sci.AttributesXml, sci.CustomerEnteredPrice, sci.Quantity, false); foreach (var warning in itemWarnings) cartItemModel.Warnings.Add(warning); model.Items.Add(cartItemModel); } #endregion #region Button payment methods var boundPaymentMethods = _paymentService .LoadActivePaymentMethods(_workContext.CurrentCustomer.Id) .Where(pm => pm.PaymentMethodType == PaymentMethodType.Button) .ToList(); foreach (var pm in boundPaymentMethods) { if (cart.IsRecurring() && pm.RecurringPaymentType == RecurringPaymentType.NotSupported) continue; string actionName; string controllerName; RouteValueDictionary routeValues; pm.GetPaymentInfoRoute(out actionName, out controllerName, out routeValues); model.ButtonPaymentMethodActionNames.Add(actionName); model.ButtonPaymentMethodControllerNames.Add(controllerName); model.ButtonPaymentMethodRouteValues.Add(routeValues); } #endregion return model; }
public ActionResult StartCheckout(FormCollection form) { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); //parse and save checkout attributes ParseAndSaveCheckoutAttributes(cart, form); //validate attributes string checkoutAttributes = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.CheckoutAttributes, _genericAttributeService, _storeContext.CurrentStore.Id); var checkoutAttributeWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, checkoutAttributes, true); if (checkoutAttributeWarnings.Count > 0) { //something wrong, redisplay the page with warnings var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart, validateCheckoutAttributes: true); return View(model); } //everything is OK if (_workContext.CurrentCustomer.IsGuest()) { if (_orderSettings.AnonymousCheckoutAllowed) { return RedirectToRoute("LoginCheckoutAsGuest", new {returnUrl = Url.RouteUrl("ShoppingCart")}); } else { return new HttpUnauthorizedResult(); } } else { return RedirectToRoute("Checkout"); } }
protected override void PrepareShoppingCartModel(ShoppingCartModel model, IList<ShoppingCartItem> cart, bool isEditable = true, bool validateCheckoutAttributes = false, bool prepareEstimateShippingIfEnabled = true, bool setEstimateShippingDefaultAddress = true, bool prepareAndDisplayOrderReviewData = false) { if (_promoSettings.Enabled) { List<string> cartWarnings = _promoService.ProcessShoppingCart(); // refresh the cart, in case any changes were made cart = (from cartItem in _workContext.CurrentCustomer.ShoppingCartItems where cartItem.ShoppingCartType.Equals(ShoppingCartType.ShoppingCart) select cartItem).ToList(); foreach (string cartWarning in cartWarnings) { model.Warnings.Add(cartWarning); } } // Get the base to do most of the work... base.PrepareShoppingCartModel(model, cart, isEditable, validateCheckoutAttributes, prepareEstimateShippingIfEnabled, setEstimateShippingDefaultAddress, prepareAndDisplayOrderReviewData); if (_promoSettings.Enabled) { var basketResponse = _promoUtilities.GetBasketResponse(); if (basketResponse.IsValid()) { if (basketResponse.TotalDiscount != decimal.Zero) { cart.Where(sci => !sci.Product.CallForPrice) .ToList() .ForEach(sci => { var cartItemModel = model.Items.Where(mi => mi.Id == sci.Id).FirstOrDefault(); //sub total Discount scDiscount; decimal shoppingCartItemDiscountBase; decimal taxRate; decimal tempSubTotal = _promosPriceCalculationService.GetSubTotal(sci, true, out shoppingCartItemDiscountBase, out scDiscount); decimal shoppingCartItemSubTotalWithDiscountBase = _taxService.GetProductPrice(sci.Product, tempSubTotal, out taxRate); decimal shoppingCartItemSubTotalWithDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartItemSubTotalWithDiscountBase, _workContext.WorkingCurrency); cartItemModel.SubTotal = _priceFormatter.FormatPrice(shoppingCartItemSubTotalWithDiscount); //display an applied discount amount if (scDiscount != null) { shoppingCartItemDiscountBase = _taxService.GetProductPrice(sci.Product, shoppingCartItemDiscountBase, out taxRate); if (shoppingCartItemDiscountBase > decimal.Zero) { decimal shoppingCartItemDiscount = _currencyService.ConvertFromPrimaryStoreCurrency(shoppingCartItemDiscountBase, _workContext.WorkingCurrency); cartItemModel.Discount = _priceFormatter.FormatPrice(shoppingCartItemDiscount); } } }); } model.DiscountBox.Message = string.Empty; model.DiscountBox.CurrentCode = _workContext.CurrentCustomer.GetAttribute<string>(SystemCustomerAttributeNames.DiscountCouponCode); if (!string.IsNullOrEmpty(model.DiscountBox.CurrentCode)) { if (basketResponse.CouponIsValid(model.DiscountBox.CurrentCode)) { model.DiscountBox.IsApplied = true; model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.Applied"); } else { model.DiscountBox.IsApplied = false; model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.WrongDiscount"); } } } } }
public ActionResult ApplyDiscountCoupon(string discountcouponcode, FormCollection form) { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); //parse and save checkout attributes ParseAndSaveCheckoutAttributes(cart, form); var model = new ShoppingCartModel(); if (!String.IsNullOrWhiteSpace(discountcouponcode)) { //we find even hidden records here. this way we can display a user-friendly message if it's expired var discount = _discountService.GetDiscountByCouponCode(discountcouponcode, true); if (discount != null && discount.RequiresCouponCode) { var validationResult = _discountService.ValidateDiscount(discount, _workContext.CurrentCustomer, discountcouponcode); if (validationResult.IsValid) { //valid _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.DiscountCouponCode, discountcouponcode); model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.Applied"); model.DiscountBox.IsApplied = true; } else { if (!String.IsNullOrEmpty(validationResult.UserError)) { //some user error model.DiscountBox.Message = validationResult.UserError; model.DiscountBox.IsApplied = false; } else { //general error text model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.WrongDiscount"); model.DiscountBox.IsApplied = false; } } } else { //discount cannot be found model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.WrongDiscount"); model.DiscountBox.IsApplied = false; } } else { //empty coupon code model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.WrongDiscount"); model.DiscountBox.IsApplied = false; } PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult StartAlbionCheckout(FormCollection form) { var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); //apply checkout attributes string selectedAttributes = ""; var checkoutAttributes = _checkoutAttributeService.GetAllCheckoutAttributes(!cart.RequiresShipping()); foreach (var attribute in checkoutAttributes) { string controlId = string.Format("checkout_attribute_{0}", attribute.Id); switch (attribute.AttributeControlType) { case AttributeControlType.DropdownList: { var ddlAttributes = form[controlId]; if (!String.IsNullOrEmpty(ddlAttributes)) { int selectedAttributeId = int.Parse(ddlAttributes); if (selectedAttributeId > 0) selectedAttributes = _checkoutAttributeParser.AddCheckoutAttribute(selectedAttributes, attribute, selectedAttributeId.ToString()); } } break; case AttributeControlType.RadioList: { var rblAttributes = form[controlId]; if (!String.IsNullOrEmpty(rblAttributes)) { int selectedAttributeId = int.Parse(rblAttributes); if (selectedAttributeId > 0) selectedAttributes = _checkoutAttributeParser.AddCheckoutAttribute(selectedAttributes, attribute, selectedAttributeId.ToString()); } } break; case AttributeControlType.Checkboxes: { var cblAttributes = form[controlId]; if (!String.IsNullOrEmpty(cblAttributes)) { foreach (var item in cblAttributes.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { int selectedAttributeId = int.Parse(item); if (selectedAttributeId > 0) selectedAttributes = _checkoutAttributeParser.AddCheckoutAttribute(selectedAttributes, attribute, selectedAttributeId.ToString()); } } } break; case AttributeControlType.TextBox: { var txtAttribute = form[controlId]; if (!String.IsNullOrEmpty(txtAttribute)) { string enteredText = txtAttribute.Trim(); selectedAttributes = _checkoutAttributeParser.AddCheckoutAttribute(selectedAttributes, attribute, enteredText); } } break; case AttributeControlType.MultilineTextbox: { var txtAttribute = form[controlId]; if (!String.IsNullOrEmpty(txtAttribute)) { string enteredText = txtAttribute.Trim(); selectedAttributes = _checkoutAttributeParser.AddCheckoutAttribute(selectedAttributes, attribute, enteredText); } } break; case AttributeControlType.Datepicker: { var date = form[controlId + "_day"]; var month = form[controlId + "_month"]; var year = form[controlId + "_year"]; DateTime? selectedDate = null; try { selectedDate = new DateTime(Int32.Parse(year), Int32.Parse(month), Int32.Parse(date)); } catch { } if (selectedDate.HasValue) { selectedAttributes = _checkoutAttributeParser.AddCheckoutAttribute(selectedAttributes, attribute, selectedDate.Value.ToString("D")); } } break; case AttributeControlType.FileUpload: { var httpPostedFile = this.Request.Files[controlId]; if ((httpPostedFile != null) && (!String.IsNullOrEmpty(httpPostedFile.FileName))) { int fileMaxSize = _catalogSettings.FileUploadMaximumSizeBytes; if (httpPostedFile.ContentLength > fileMaxSize) { //TODO display warning //warnings.Add(string.Format(_localizationService.GetResource("ShoppingCart.MaximumUploadedFileSize"), (int)(fileMaxSize / 1024))); } else { //save an uploaded file var download = new Download() { DownloadGuid = Guid.NewGuid(), UseDownloadUrl = false, DownloadUrl = "", DownloadBinary = httpPostedFile.GetDownloadBits(), ContentType = httpPostedFile.ContentType, Filename = System.IO.Path.GetFileNameWithoutExtension(httpPostedFile.FileName), Extension = System.IO.Path.GetExtension(httpPostedFile.FileName), IsNew = true }; _downloadService.InsertDownload(download); //save attribute selectedAttributes = _checkoutAttributeParser.AddCheckoutAttribute(selectedAttributes, attribute, download.DownloadGuid.ToString()); } } } break; default: break; } } //save checkout attributes _workContext.CurrentCustomer.CheckoutAttributes = selectedAttributes; _customerService.UpdateCustomer(_workContext.CurrentCustomer); //validate attributes var checkoutAttributeWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, _workContext.CurrentCustomer.CheckoutAttributes, true); if (checkoutAttributeWarnings.Count > 0) { //something wrong, redisplay the page with warnings var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart, validateCheckoutAttributes: true); return View(model); } return RedirectToRoute("Checkout"); }
public ActionResult Cart(int productid = 0) { if (!_permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart)) return RedirectToRoute("HomePage"); IList<ShoppingCartItem> cart = new List<ShoppingCartItem>(); //check if cart contains gift card, if so then only show gift card in cart for checkout first var gcCount = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart && sci.Product.AdminComment == "Gift Card") .LimitPerStore(_storeContext.CurrentStore.Id) .Count(); var regularCount = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart && sci.Product.AdminComment != "Gift Card") .LimitPerStore(_storeContext.CurrentStore.Id) .Count(); if (gcCount != 0) { cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart && sci.Product.AdminComment == "Gift Card") .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); } else { cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); } //if (productid != 0) //{ // cart = _workContext.CurrentCustomer.ShoppingCartItems // .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart && sci.ProductId == productid) // .LimitPerStore(_storeContext.CurrentStore.Id) // .ToList(); // //cart[0].Quantity = 1; //} //else //{ // cart = _workContext.CurrentCustomer.ShoppingCartItems // .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) // .LimitPerStore(_storeContext.CurrentStore.Id) // .ToList(); //} var model = new ShoppingCartModel(); if (gcCount != 0 && regularCount !=0) { model.ItemsInCartId = 3; } if (gcCount != 0 && regularCount == 0) { model.ItemsInCartId = 2; } if (gcCount == 0 && regularCount != 0) { model.ItemsInCartId = 1; } var customer = cart.GetCustomer(); string gcCode = _giftCardService.GetCustomerGiftCard(customer); // string gcCode = ""; if (gcCode.Length > 0) customer.ApplyGiftCardCouponCode(gcCode); PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult OrderSummary(bool? prepareAndDisplayOrderReviewData) { IList<ShoppingCartItem> cart = new List<ShoppingCartItem>(); //check if cart contains gift card, if so then only show gift card in cart for checkout first var gcCount = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart && sci.Product.AdminComment == "Gift Card") .LimitPerStore(_storeContext.CurrentStore.Id) .Count(); var regularCount = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart && sci.Product.AdminComment != "Gift Card") .LimitPerStore(_storeContext.CurrentStore.Id) .Count(); if (gcCount != 0) { cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart && sci.Product.AdminComment == "Gift Card") .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); } else { cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); } var model = new ShoppingCartModel(); if (gcCount != 0 && regularCount != 0) { model.ItemsInCartId = 3; } if (gcCount != 0 && regularCount == 0) { model.ItemsInCartId = 2; } if (gcCount == 0 && regularCount != 0) { model.ItemsInCartId = 1; } //var cart = _workContext.CurrentCustomer.ShoppingCartItems // .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) // .LimitPerStore(_storeContext.CurrentStore.Id) // .ToList(); //var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart, isEditable: false, prepareEstimateShippingIfEnabled: false, prepareAndDisplayOrderReviewData: prepareAndDisplayOrderReviewData.GetValueOrDefault()); return PartialView(model); }
public ActionResult RemoveDiscountCoupon() { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var model = new ShoppingCartModel(); _genericAttributeService.SaveAttribute<string>(_workContext.CurrentCustomer, SystemCustomerAttributeNames.DiscountCouponCode, null); PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult ApplyDiscountCoupon(string discountcouponcode) { var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var model = new ShoppingCartModel(); if (!String.IsNullOrWhiteSpace(discountcouponcode)) { var discount = _discountService.GetDiscountByCouponCode(discountcouponcode); bool isDiscountValid = discount != null && discount.RequiresCouponCode; if (isDiscountValid) { _workContext.CurrentCustomer.DiscountCouponCode = discountcouponcode; _customerService.UpdateCustomer(_workContext.CurrentCustomer); model.DiscountMessage = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.Applied"); } else { model.DiscountMessage = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.WrongDiscount"); } } model = PrepareShoppingCartModel(model, cart, true); return View(model); }
public ActionResult RemoveGiftardCode(FormCollection form) { var model = new ShoppingCartModel(); //get gift card identifier int giftCardId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("removegiftcard-", StringComparison.InvariantCultureIgnoreCase)) giftCardId = Convert.ToInt32(formValue.Substring("removegiftcard-".Length)); var gc = _giftCardService.GetGiftCardById(giftCardId); if (gc != null) { _workContext.CurrentCustomer.RemoveGiftCardCouponCode(gc.GiftCardCouponCode); _customerService.UpdateCustomer(_workContext.CurrentCustomer); } var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult ApplyGiftCard(string giftcardcouponcode) { var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var model = new ShoppingCartModel(); if (!cart.IsRecurring()) { if (!String.IsNullOrWhiteSpace(giftcardcouponcode)) { var giftCard = _giftCardService.GetAllGiftCards(null, null, null, null, giftcardcouponcode).FirstOrDefault(); bool isGiftCardValid = giftCard != null && giftCard.IsGiftCardValid(); if (isGiftCardValid) { _workContext.CurrentCustomer.ApplyGiftCardCouponCode(giftcardcouponcode); _customerService.UpdateCustomer(_workContext.CurrentCustomer); model.GiftCardMessage = _localizationService.GetResource("ShoppingCart.GiftCardCouponCode.Applied"); } else model.GiftCardMessage = _localizationService.GetResource("ShoppingCart.GiftCardCouponCode.WrongGiftCard"); } } else model.GiftCardMessage = _localizationService.GetResource("ShoppingCart.GiftCardCouponCode.DontWorkWithAutoshipProducts"); model = PrepareShoppingCartModel(model, cart, true); return View(model); }
public ActionResult UpdateCart(FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart)) return RedirectToRoute("HomePage"); var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var allIdsToRemove = form["removefromcart"] != null ? form["removefromcart"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => int.Parse(x)).ToList() : new List<int>(); //current warnings <cart item identifier, warnings> var innerWarnings = new Dictionary<int, IList<string>>(); foreach (var sci in cart) { bool remove = allIdsToRemove.Contains(sci.Id); if (remove) _shoppingCartService.DeleteShoppingCartItem(sci, ensureOnlyActiveCheckoutAttributes: true); else { foreach (string formKey in form.AllKeys) if (formKey.Equals(string.Format("itemquantity{0}", sci.Id), StringComparison.InvariantCultureIgnoreCase)) { int newQuantity = sci.Quantity; if (int.TryParse(form[formKey], out newQuantity)) { var currSciWarnings = _shoppingCartService.UpdateShoppingCartItem(_workContext.CurrentCustomer, sci.Id, sci.AttributesXml, sci.CustomerEnteredPrice, newQuantity, true); innerWarnings.Add(sci.Id, currSciWarnings); } break; } } } //updated cart cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart); //update current warnings foreach (var kvp in innerWarnings) { //kvp = <cart item identifier, warnings> var sciId = kvp.Key; var warnings = kvp.Value; //find model var sciModel = model.Items.FirstOrDefault(x => x.Id == sciId); if (sciModel != null) foreach (var w in warnings) if (!sciModel.Warnings.Contains(w)) sciModel.Warnings.Add(w); } return View(model); }
public ActionResult GetLineDiscountName(ShoppingCartModel.ShoppingCartItemModel shoppingCartItemModel) { if (!_promoSettings.Enabled) return new EmptyResult(); BasketResponse basketResponse = _promoUtilities.GetBasketResponse(); if (basketResponse == null || !basketResponse.IsValid()) return new EmptyResult(); ShoppingCartItem shoppingCartItem = (from c in _workContext.CurrentCustomer.ShoppingCartItems where c.Id == shoppingCartItemModel.Id select c).FirstOrDefault(); if (shoppingCartItem == null) return new EmptyResult(); var promoNames = basketResponse.LineDiscountNames(shoppingCartItem); if (promoNames != null && promoNames.Count > 0) return Content(string.Join("<br />", promoNames.Select(n => _localizationService.GetValidatedResource(n)).ToArray())); else return new EmptyResult(); }
public ActionResult ApplyDiscountCoupon(string discountcouponcode, FormCollection form) { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); //parse and save checkout attributes ParseAndSaveCheckoutAttributes(cart, form); var model = new ShoppingCartModel(); if (!String.IsNullOrWhiteSpace(discountcouponcode)) { var discount = _discountService.GetDiscountByCouponCode(discountcouponcode); bool isDiscountValid = discount != null && discount.RequiresCouponCode && _discountService.IsDiscountValid(discount, _workContext.CurrentCustomer, discountcouponcode); if (isDiscountValid) { _genericAttributeService.SaveAttribute(_workContext.CurrentCustomer, SystemCustomerAttributeNames.DiscountCouponCode, discountcouponcode); model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.Applied"); } else { model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.WrongDiscount"); } } else model.DiscountBox.Message = _localizationService.GetResource("ShoppingCart.DiscountCouponCode.WrongDiscount"); PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult RemoveCartItem(FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart)) return RedirectToRoute("HomePage"); //get shopping cart item identifier int sciId = 0; foreach (var formValue in form.AllKeys) if (formValue.StartsWith("removefromcart-", StringComparison.InvariantCultureIgnoreCase)) sciId = Convert.ToInt32(formValue.Substring("removefromcart-".Length)); //get shopping cart item var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var sci = cart.Where(x => x.Id == sciId).FirstOrDefault(); if (sci == null) { return RedirectToRoute("ShoppingCart"); } //remove the cart item _shoppingCartService.DeleteShoppingCartItem(sci, ensureOnlyActiveCheckoutAttributes: true); //updated cart cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult Cart() { if (!_permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart)) return RedirectToRoute("HomePage"); var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult RemoveDiscountCoupon() { var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var model = new ShoppingCartModel(); _workContext.CurrentCustomer.DiscountCouponCode = ""; _customerService.UpdateCustomer(_workContext.CurrentCustomer); PrepareShoppingCartModel(model, cart); return View(model); }
public ActionResult OrderSummary(bool? prepareAndDisplayOrderReviewData) { var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var model = new ShoppingCartModel(); PrepareShoppingCartModel(model, cart, isEditable: false, prepareEstimateShippingIfEnabled: false, prepareAndDisplayOrderReviewData: prepareAndDisplayOrderReviewData.HasValue ? prepareAndDisplayOrderReviewData.Value : false); return PartialView(model); }
public ActionResult GetEstimateShipping(EstimateShippingModel shippingModel) { var cart = _workContext.CurrentCustomer.ShoppingCartItems.Where(sci => sci.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); var model = new ShoppingCartModel(); model.EstimateShipping.CountryId = shippingModel.CountryId; model.EstimateShipping.StateProvinceId = shippingModel.StateProvinceId; model.EstimateShipping.ZipPostalCode = shippingModel.ZipPostalCode; model = PrepareShoppingCartModel(model, cart, true, false); if (cart.RequiresShipping()) { var address = new Address() { CountryId = shippingModel.CountryId, Country = shippingModel.CountryId.HasValue ? _countryService.GetCountryById(shippingModel.CountryId.Value) : null, StateProvinceId = shippingModel.StateProvinceId, StateProvince = shippingModel.StateProvinceId.HasValue ? _stateProvinceService.GetStateProvinceById(shippingModel.StateProvinceId.Value) : null, ZipPostalCode = shippingModel.ZipPostalCode, }; GetShippingOptionResponse getShippingOptionResponse = _shippingService.GetShippingOptions(cart, address); if (!getShippingOptionResponse.Success) { foreach (var error in getShippingOptionResponse.Errors) model.EstimateShipping.Warnings.Add(error); } else { if (getShippingOptionResponse.ShippingOptions.Count > 0) { foreach (var shippingOption in getShippingOptionResponse.ShippingOptions) { var soModel = new EstimateShippingModel.ShippingOptionModel() { Name = shippingOption.Name, Description = shippingOption.Description, }; //calculate discounted and taxed rate Discount appliedDiscount = null; decimal shippingTotalWithoutDiscount = shippingOption.Rate; decimal discountAmount = _orderTotalCalculationService.GetShippingDiscount(_workContext.CurrentCustomer, shippingTotalWithoutDiscount, out appliedDiscount); decimal shippingTotalWithDiscount = shippingTotalWithoutDiscount - discountAmount; if (shippingTotalWithDiscount < decimal.Zero) shippingTotalWithDiscount = decimal.Zero; shippingTotalWithDiscount = Math.Round(shippingTotalWithDiscount, 2); decimal rateBase = _taxService.GetShippingPrice(shippingTotalWithDiscount, _workContext.CurrentCustomer); decimal rate = _currencyService.ConvertFromPrimaryStoreCurrency(rateBase, _workContext.WorkingCurrency); soModel.Price = _priceFormatter.FormatShippingPrice(rate, true); model.EstimateShipping.ShippingOptions.Add(soModel); } } else { model.EstimateShipping.Warnings.Add(_localizationService.GetResource("Checkout.ShippingIsNotAllowed")); } } } return View(model); }