public ActionResult ProductDetails(ShopProductDetailsViewModel model) { if (!ModelState.IsValid) { return(View(model)); } AddToCart(new CartAddViewModel { Qty = model.Qty, ItemId = model.StockId }); return(RedirectToAction("ProductDetails", new { id = model.StockId, returnUrl = model.ReturnUrl })); }
public ActionResult ProductDetails(int?id, string returnUrl) { if (id == null) { return(View("Error")); } if (string.IsNullOrEmpty(returnUrl)) { ViewBag.ReturnUrl = "#"; } else { ViewBag.ReturnUrl = returnUrl; } var stock = db.Stocks .Include(m => m.Store) .Include(m => m.Product) .Include(m => m.Product.Category) .Include(m => m.Product.ProductImages) .Include(m => m.Product.Specifications) .Include(m => m.Product.Category.Attributes) .FirstOrDefault(m => m.Id == id); if (stock == null) { return(View("Error")); } var cart = GetCart(); var cartItms = cart.CartItems .FirstOrDefault(m => m.StockId == id && m.IsEditable); var count = (cartItms != null) ? cartItms.Qty : 0; var discountIds = db.DiscountedItems .Include(m => m.Discount) .Where(m => m.StockId == id && m.Discount.IsActive && DateTime.Compare(m.Discount.StartDate, DateTime.Now) > 0 && (!m.Discount.IsExpirable || DateTime.Compare(m.Discount.EndDate ?? m.Discount.StartDate, DateTime.Now) < 0)) .Select(m => m.DiscountId) .ToList(); var discountConstraints = db.DiscountConstraints .Include(m => m.Discount) .Include(m => m.Discount.DiscountedItems) .Include(m => m.Discount.Store) .Where(m => discountIds .Contains(m.DiscountId) && m.Discount.IsActive) .ToList(); var discountedPrice = stock.GetPrice(); var model = new ShopProductDetailsViewModel { Description = stock.Product.Category.Description, Stock = stock, StockId = stock.Id, ReturnUrl = ViewBag.ReturnUrl, AlreadyInCart = count, BundleDiscounts = new List <DiscountConstraint>(), BundleStocks = new Dictionary <DiscountConstraint, List <Stock> >(), BundleOldPrices = new Dictionary <DiscountConstraint, string>(), BundleNewPrices = new Dictionary <DiscountConstraint, string>(), MinOrderDiscounts = new List <DiscountConstraint>(), MinQtyDiscounts = new List <DiscountConstraint>(), CurrencySymbol = stock.Store.DefaultCurrencyType, NewPrice = (stock.Price != discountedPrice) ? discountedPrice : null as float? }; foreach (var constraint in discountConstraints) { //if (constraint.Type == DiscountConstraintType.Simple) //{ // if (constraint.Discount.IsPercent) // { // model.NewPrice = model.Stock.Price * // ((100 - constraint.Discount.Value)/100); // } // else // { // model.NewPrice = model.Stock.Price - // constraint.Discount.Value; // } //} //else if (constraint.Type == DiscountConstraintType.MinOrder) { model.MinOrderDiscounts.Add(constraint); } else if (constraint.Type == DiscountConstraintType.Qty) { model.MinQtyDiscounts.Add(constraint); } else { model.BundleDiscounts.Add(constraint); model.BundleStocks.Add(constraint, db.Stocks .Where(m => db.BundledItems .FirstOrDefault(b => b.StockId == m.Id && b.DiscountConstraintId == constraint.Id) != null) .ToList() ); var total = 0.0f; var curr = ""; foreach (var stk in model.BundleStocks[constraint]) { total += stk.Price; curr = stk.Store.DefaultCurrencyType; } model.BundleOldPrices.Add(constraint, curr + " " + total); if (constraint.Discount.IsPercent) { model.BundleNewPrices.Add(constraint, curr + " " + (total * ((100 - constraint.Discount.Value) / 100))); } else { model.BundleNewPrices.Add(constraint, curr + " " + (total - constraint.Discount.Value)); } } } model.MinQtyDiscounts = model.MinQtyDiscounts.OrderBy(m => m.MinQty) .ToList(); return(View(model)); }