protected virtual void PrepareWishlistModel(WishlistModel model, IList<ShoppingCartItem> cart, bool isEditable = true) { if (cart == null) throw new ArgumentNullException("cart"); if (model == null) throw new ArgumentNullException("model"); //load settings for a chosen store scope var storeScope = this.GetActiveStoreScopeConfiguration(_storeService, _workContext); var AUConsignorSettings = _settings.LoadSetting<Nop.Plugin.Misc.AUConsignor.Domain.AUConsignorSettings>(storeScope); AUStoreTypeEnum storeType = (AUStoreTypeEnum)AUConsignorSettings.StoreTypeId; model.StoreType = storeType; //needed this beyond IsEditable because if don't come in with customer guid from share wishlist email you //still don;t want them to enter bids if they're a guest if (_workContext.CurrentCustomer.IsGuest()) { model.IsGuest = true; } else { model.IsGuest = false; } model.EmailWishlistEnabled = _shoppingCartSettings.EmailWishlistEnabled; model.IsEditable = isEditable; model.DisplayAddToCart = _permissionService.Authorize(StandardPermissionProvider.EnableShoppingCart); model.DisplayTaxShippingInfo = _catalogSettings.DisplayTaxShippingInfoWishlist; if (cart.Count == 0) return; #region Simple properties var customer = cart.GetCustomer(); model.CustomerGuid = customer.CustomerGuid; model.CustomerFullname = customer.GetFullName(); model.ShowProductImages = _shoppingCartSettings.ShowProductImagesOnShoppingCart; model.ShowSku = _catalogSettings.ShowProductSku; //cart warnings var cartWarnings = _shoppingCartService.GetShoppingCartWarnings(cart, "", false); foreach (var warning in cartWarnings) model.Warnings.Add(warning); #endregion #region Cart items foreach (var sci in cart) { var cartItemModel = new WishlistModel.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), LotBidEntry = _lotService.GetLotBidEntryModel(sci.Product.Id) }; //NJM: count lots as separate from products so can determine if need to show product wishlist and lot wishlist in view if (cartItemModel.LotBidEntry.ProductIsLot) { model.TotalLots += 1; } //TODO: fill in the lot bid entry model in the shopping cart only if auction site //allowed quantities var allowedQuantities = sci.Product.ParseAllowedQuantities(); 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)); //rental info if (sci.Product.IsRental) { var rentalStartDate = sci.RentalStartDateUtc.HasValue ? sci.Product.FormatRentalDate(sci.RentalStartDateUtc.Value) : ""; var rentalEndDate = sci.RentalEndDateUtc.HasValue ? sci.Product.FormatRentalDate(sci.RentalEndDateUtc.Value) : ""; cartItemModel.RentalInfo = string.Format(_localizationService.GetResource("ShoppingCart.Rental.FormattedDate"), rentalStartDate, rentalEndDate); } //unit prices if (sci.Product.CallForPrice) { cartItemModel.UnitPrice = _localizationService.GetResource("Products.CallForPrice"); } else { decimal taxRate; decimal shoppingCartUnitPriceWithDiscountBase = _taxService.GetProductPrice(sci.Product, _priceCalculationService.GetUnitPrice(sci), 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 Discount scDiscount; decimal shoppingCartItemDiscountBase; decimal taxRate; decimal shoppingCartItemSubTotalWithDiscountBase = _taxService.GetProductPrice(sci.Product, _priceCalculationService.GetSubTotal(sci, true, out shoppingCartItemDiscountBase, out scDiscount), 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); } } } //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.RentalStartDateUtc, sci.RentalEndDateUtc, sci.Quantity, false); foreach (var warning in itemWarnings) cartItemModel.Warnings.Add(warning); model.Items.Add(cartItemModel); } }
[FormValueRequired("updatecart")] //NJM: this comes from the submit button id public ActionResult UpdateWishlist(FormCollection form) { if (!_permissionService.Authorize(StandardPermissionProvider.EnableWishlist)) return RedirectToRoute("HomePage"); var cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.Wishlist) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var allIdsToRemove = form["removefromcart"] != null ? form["removefromcart"].Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(int.Parse) .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); else { foreach (string formKey in form.AllKeys) if (formKey.Equals(string.Format("itemquantity{0}", sci.Id), StringComparison.InvariantCultureIgnoreCase)) { int newQuantity; if (int.TryParse(form[formKey], out newQuantity)) { var currSciWarnings = _shoppingCartService.UpdateShoppingCartItem(_workContext.CurrentCustomer, sci.Id, sci.AttributesXml, sci.CustomerEnteredPrice, sci.RentalStartDateUtc, sci.RentalEndDateUtc, newQuantity, true); innerWarnings.Add(sci.Id, currSciWarnings); } break; } else if (formKey.Equals(string.Format("itembid{0}", sci.Id), StringComparison.InvariantCultureIgnoreCase)) { decimal newBid; if (decimal.TryParse(form[formKey], out newBid)) { //var currSciWarnings = _shoppingCartService.UpdateShoppingCartItem(_workContext.CurrentCustomer, // sci.Id, sci.AttributesXml, sci.CustomerEnteredPrice, // sci.RentalStartDateUtc, sci.RentalEndDateUtc, // newQuantity, true); var currSciWarnings = new List<string>(); var bidEnteryModel = _lotService.GetLotBidEntryModel(sci.ProductId); if (!bidEnteryModel.BiddingIsOpen) { //TODO //currSciWarnings.Add(string.Format(_localizationService.GetResource("ShoppingCart.SelectAttribute"), a2.GetLocalized(a => a.Name))); currSciWarnings.Add("Bidding is no longer open for this lot"); } else { int bidResult = _lotService.UpdateLotBid(bidEnteryModel.AUSaleID.GetValueOrDefault(), bidEnteryModel.SaleStoreID.GetValueOrDefault(), sci.ProductId, newBid, _workContext.CurrentCustomer.Id,bidEnteryModel.BiddingIncrement,bidEnteryModel.ReserveAmt, null); if (bidResult == 99) //DB update error { currSciWarnings.Add("We're sorry but your bid entry failed for technical reasons (99). Please try again"); } else { if (bidResult == 98) //bidder got underbid { currSciWarnings.Add("We're sorry but another bid was made while you were reviewing the product. Please try again"); } //else //{ // SuccessNotification("Your bid was entered!"); //} } } innerWarnings.Add(sci.Id, currSciWarnings); } break; } } } //updated wishlist cart = _workContext.CurrentCustomer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.Wishlist) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var model = new WishlistModel(); PrepareWishlistModel(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 Wishlist(Guid? customerGuid) //when accessed via the customer guid generated by "share wishlist", iseditable is set to false { if (!_permissionService.Authorize(StandardPermissionProvider.EnableWishlist)) return RedirectToRoute("HomePage"); Customer customer = customerGuid.HasValue ? _customerService.GetCustomerByGuid(customerGuid.Value) : _workContext.CurrentCustomer; if (customer == null) return RedirectToRoute("HomePage"); var cart = customer.ShoppingCartItems .Where(sci => sci.ShoppingCartType == ShoppingCartType.Wishlist) .LimitPerStore(_storeContext.CurrentStore.Id) .ToList(); var model = new WishlistModel(); PrepareWishlistModel(model, cart, !customerGuid.HasValue); return View(model); }