Beispiel #1
0
        // GET: ShoppingCart
        /// <summary>
        /// Display page of shopping cart of user
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            try
            {
                //get cart
                var userEmail = CookieManager.GetEmailFromUserCookie();

                var cartViewModel = new CartViewModel
                {
                    QuantitiesList = new Dictionary <int, SelectList>()
                };

                cartViewModel.CartItemDTOs   = services.CartService.GetUserCartItems(userEmail, Constants.DATABASE_TABLE_PRODUCTS).Select(cartItem => CartManager.GetNewCartItemViewModel(cartItem));
                cartViewModel.CartItemsCount = cartViewModel.CartItemDTOs.Sum(cartItemDto => cartItemDto.Quantity);
                cartViewModel.SubTotal       = cartViewModel.CartItemDTOs.Sum(cartItemDto => cartItemDto.Price * cartItemDto.Quantity);

                foreach (var cartItemDto in cartViewModel.CartItemDTOs)
                {
                    //create quantity drop down for each cart item and pre-select cart item quantity stored in database
                    cartViewModel.QuantitiesList[cartItemDto.CartItemID] = new SelectList(Enumerable.Range(1, 50), cartItemDto.Quantity);
                }
                return(View(cartViewModel));
            }
            catch (Exception ex)
            {
                ExceptionManager.LogException(ex, Path.GetFileName(Request.PhysicalPath));
                return(RedirectToAction(Constants.CONTROLLER_ACTION_INDEX, Constants.CONTROLLER_ERROR));
            }
        }
Beispiel #2
0
        public ActionResult UpdateCartItemQuantity(int productId, int quantity)
        {
            try
            {
                var userEmail = CookieManager.GetEmailFromUserCookie();
                var cartItem  = services.CartService.GetCartItem(userEmail, productId);

                //update quantity of of cart item to quantity parameter value
                cartItem.Quantity = quantity;
                services.CartService.UpdateCartItem(cartItem);

                //Get cart items of user with cart item quantity updated
                var userCartItems  = services.CartService.GetUserCartItems(userEmail, Constants.DATABASE_TABLE_PRODUCTS);
                var cartItemsCount = userCartItems.Sum(ci => ci.Quantity);
                var subTotal       = userCartItems.Sum(ci => ci.Product.Price * ci.Quantity);

                //create viewmodel for associated view and pass into view
                UpdateCartItemQuantityViewModel updateCartItemQuantityViewModel = new UpdateCartItemQuantityViewModel();
                updateCartItemQuantityViewModel.CartItemsCount = cartItemsCount.ToString();
                updateCartItemQuantityViewModel.SubTotal       = string.Format("{0:C}", subTotal);
                updateCartItemQuantityViewModel.SubTotalLabel  = string.Format("({0} {1})", cartItemsCount, cartItemsCount == 1 ? "item": "items");
                updateCartItemQuantityViewModel.CartLabel      = string.Format("Cart ({0})", cartItemsCount);

                return(Json(updateCartItemQuantityViewModel));
            }
            catch (Exception ex)
            {
                ExceptionManager.LogException(ex, Path.GetFileName(Request.PhysicalPath));
                return(RedirectToAction(Constants.CONTROLLER_ACTION_INDEX, Constants.CONTROLLER_ERROR));
            }
        }
Beispiel #3
0
        public ActionResult UpdateShippingOption(int shippingOptionId)
        {
            try
            {
                var userEmail = CookieManager.GetEmailFromUserCookie();

                //Get cart items of user with cart item quantity updated
                var userCartItems  = services.CartService.GetUserCartItems(userEmail, Constants.DATABASE_TABLE_PRODUCTS);
                var shippingOption = services.ShippingService.GetShippingOption(shippingOptionId);

                //create viewmodel for associated view and pass into view
                UpdateShippingOptionDTO updateShippingOptionDto = new UpdateShippingOptionDTO();

                decimal subTotal = userCartItems.Sum(ci => ci.Product.Price * ci.Quantity);
                decimal?shippingOptionPrice;
                decimal?salesTax;
                decimal total;

                if (shippingOption.Price.HasValue)
                {
                    shippingOptionPrice = shippingOption.Price;
                    salesTax            = (subTotal + shippingOptionPrice) * (decimal).07;
                    total = subTotal + salesTax.Value + shippingOptionPrice.Value;
                    updateShippingOptionDto.ShippingPrice = string.Format("{0:C}", shippingOptionPrice);
                }
                else
                {
                    shippingOptionPrice = null;
                    salesTax            = subTotal * (decimal).07;
                    total = subTotal + salesTax.Value;
                    updateShippingOptionDto.ShippingPrice = "FREE";
                }

                updateShippingOptionDto.SubTotal      = string.Format("{0:C}", subTotal);
                updateShippingOptionDto.SalesTax      = string.Format("{0:C}", salesTax);
                updateShippingOptionDto.Total         = string.Format("{0:C}", total);
                updateShippingOptionDto.ShippingPrice = string.Format("{0:C}", shippingOptionPrice);

                return(Json(updateShippingOptionDto));
            }
            catch (Exception ex)
            {
                ExceptionManager.LogException(ex, Path.GetFileName(Request.PhysicalPath));
                return(RedirectToAction(Constants.CONTROLLER_ACTION_INDEX, Constants.CONTROLLER_ERROR));
            }
        }
Beispiel #4
0
        public ActionResult RemoveFromCart(int productId)
        {
            try
            {
                var userEmail = CookieManager.GetEmailFromUserCookie();
                var cartItem  = services.CartService.GetCartItem(userEmail, productId);

                RemoveCartItemViewModel removeCartItemViewModel = new RemoveCartItemViewModel();
                removeCartItemViewModel.ProductID = productId;

                //NOTE: cartItem.Product becomes null once cartItem is removed from storeDB.CartItems ("storeDB.CartItems.Remove(cartItem)" is executed)
                //Therefore, any property using cartItem.Product MUST be set before "storeDB.CartItems.Remove(cartItem)" is executed
                services.CartService.DeleteCartItem(cartItem);

                //Get cart items of user after cart item is removed
                var userCartItems = services.CartService.GetUserCartItems(userEmail, Constants.DATABASE_TABLE_PRODUCTS);

                //set viewmodel properties based on remaining count of items after product is removed from cart
                if (userCartItems.Any())
                {
                    removeCartItemViewModel.CartItemsCount = 0;
                    removeCartItemViewModel.SubTotal       = string.Format("{0:C}", 0);
                    removeCartItemViewModel.SubTotalLabel  = string.Format("Subtotal ({0} {1})", 0, "items");
                    removeCartItemViewModel.CartLabel      = string.Format("Cart ({0})", 0);
                }
                else
                {
                    int cartItemsCount = userCartItems.Sum(ci => ci.Quantity);

                    removeCartItemViewModel.CartItemsCount = cartItemsCount;
                    removeCartItemViewModel.SubTotal       = string.Format("{0:C}", userCartItems.Sum(ci => ci.Product.Price * ci.Quantity));
                    removeCartItemViewModel.SubTotalLabel  = string.Format("Subtotal ({0} {1})", cartItemsCount, cartItemsCount == 1 ? "item" : "items");
                    removeCartItemViewModel.CartLabel      = string.Format("Cart ({0})", cartItemsCount);
                }

                //return JSON object to be used for AJAX
                return(Json(removeCartItemViewModel));
            }
            catch (Exception ex)
            {
                ExceptionManager.LogException(ex, Path.GetFileName(Request.PhysicalPath));
                return(RedirectToAction(Constants.CONTROLLER_ACTION_INDEX, Constants.CONTROLLER_ERROR));
            }
        }
Beispiel #5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    //email stored in cookie
                    var userEmail = CookieManager.GetEmailFromUserCookie();

                    //get cart items of user
                    var cartItems = services.CartService.GetUserCartItems(userEmail, Constants.DATABASE_TABLE_PRODUCTS);

                    if (cartItems.Any())
                    {
                        var cartItemsWebFormDtos = cartItems.Select(cartItem => CartManager.GetNewCartItemWebFormDTO(cartItem));

                        //count of cart items (sum of quantities of all cart items)
                        var cartItemsCount = cartItemsWebFormDtos.Sum(cartItem => cartItem.Quantity);

                        rptCartItems.DataSource = cartItemsWebFormDtos;
                        rptCartItems.DataBind();

                        var subTotal = cartItemsWebFormDtos.Sum(cartItem => cartItem.Price * cartItem.Quantity);

                        //set subtotal info
                        subTotalTd.InnerText  = string.Format("{0:C}", subTotal);
                        lblCartItemCount.Text = string.Format("({0} {1})", cartItemsCount, cartItemsCount == 1 ? "item" : "items");
                    }
                    else
                    {
                        subTotalTd.InnerText  = string.Format("{0:C}", 0);
                        lblCartItemCount.Text = string.Format("({0} {1})", 0, "items");
                        btnCheckout.Visible   = false;
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.LogException(ex, Path.GetFileName(Request.PhysicalPath));
                Server.Transfer(Constants.PAGE_GENERIC_ERROR);
            }
        }
Beispiel #6
0
        protected void btnAddToCart_Click(object sender, EventArgs e)
        {
            try
            {
                var productId = int.Parse(Request.QueryString["ProductID"]);

                var userEmail = CookieManager.GetEmailFromUserCookie();

                // Get the matching cart and product instances
                var cartItem = services.CartService.GetCartItem(userEmail, productId);

                if (cartItem == null)
                {
                    // Create a new cart item if no cart item exists
                    cartItem = new CartItem
                    {
                        ProductID   = productId,
                        Email       = userEmail,
                        Quantity    = int.Parse(ddlQuantity.Text),
                        DateCreated = DateTime.Now,
                    };

                    services.CartService.AddCartItem(cartItem);
                }
                else
                {
                    // If the item does exist in the cart,
                    // then increase cart item quantity by selected quantity of drop down
                    cartItem.Quantity += int.Parse(ddlQuantity.SelectedValue);
                    services.CartService.UpdateCartItem(cartItem);
                }

                PageManager.RedirectToAddToCartPage(Request.QueryString["ProductID"]);
            }
            catch (Exception ex)
            {
                ExceptionManager.LogException(ex, Path.GetFileName(Request.PhysicalPath));
                Server.Transfer(Constants.PAGE_GENERIC_ERROR);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Adds product to cart
        /// </summary>
        /// <returns></returns>
        public ActionResult AddToCart(ProductDetailsViewModel model)
        {
            try
            {
                var userEmail = CookieManager.GetEmailFromUserCookie();

                AddToCartDTO addToCartDto;

                //This would mean that the user has logged in from the AddToCart page (using login link on top right of page).
                //Therefore, the ProductViewModel parameter quantity value will be zero in this exceptional case.
                //Just create AddToCartViewModel object and return View passing in AddToCartViewModel object without modify cart of user logging in
                if (model.SelectedQuantity == 0)
                {
                    var userCartItems = services.CartService.GetUserCartItems(userEmail);

                    //create associated viewmodel and pass into view
                    addToCartDto                = new AddToCartDTO();
                    addToCartDto.ProductID      = model.ProductID;
                    addToCartDto.ProductName    = model.ProductName;
                    addToCartDto.CartItemsCount = userCartItems.Count();
                    addToCartDto.SubTotal       = userCartItems.Sum(ci => ci.Product.Price * ci.Quantity);
                    return(View(addToCartDto));
                }

                // Get the matching cart and product instances
                var cartItem = services.CartService.GetCartItem(userEmail, model.ProductID);

                if (cartItem == null)
                {
                    // Create a new cart item if no cart item exists
                    cartItem = new CartItem
                    {
                        ProductID   = model.ProductID,
                        Email       = userEmail,
                        Quantity    = model.SelectedQuantity,
                        DateCreated = DateTime.Now,
                    };

                    services.CartService.AddCartItem(cartItem);
                }
                else
                {
                    // If the item does exist in the cart,
                    // then increase cart item quantity by quantity parameter amount
                    cartItem.Quantity += model.SelectedQuantity;
                    services.CartService.UpdateCartItem(cartItem);
                }

                var cartItems = services.CartService.GetUserCartItems(userEmail, Constants.DATABASE_TABLE_PRODUCTS);

                //create associated viewmodel and pass into view
                addToCartDto                = new AddToCartDTO();
                addToCartDto.ProductID      = cartItem.ProductID;
                addToCartDto.ProductName    = cartItem.Product.Name;
                addToCartDto.CartItemsCount = cartItems.Count();
                addToCartDto.SubTotal       = cartItems.Sum(ci => ci.Product.Price * ci.Quantity);

                return(View(addToCartDto));
            }
            catch (Exception ex)
            {
                ExceptionManager.LogException(ex, Path.GetFileName(Request.PhysicalPath));
                return(RedirectToAction(Constants.CONTROLLER_ACTION_INDEX, Constants.CONTROLLER_ERROR));
            }
        }