public JsonResult UpdateCart(CartViewModel.ProductCart model)
        {
            IList <CartViewModel.ProductCart> productCarts = new List <CartViewModel.ProductCart>();

            #region cart
            CookieHelper cookieHelper = new CookieHelper("Cart");

            if (cookieHelper.GetCookie() != null)
            {
                string json = HttpUtility.UrlDecode(cookieHelper.GetCookie().Values["Cart"]);
                productCarts = JsonConvert.DeserializeObject <List <CartViewModel.ProductCart> >(json);
            }

            foreach (var p in productCarts)
            {
                if (p.Barcode.Equals(model.Barcode))
                {
                    p.Quantity = model.Quantity == 0 ? 1 : model.Quantity;
                    break;
                }
            }
            string jsonString = JsonConvert.SerializeObject(productCarts);
            cookieHelper.SetCartCookie(jsonString);
            #endregion


            return(Json(new { }, JsonRequestBehavior.AllowGet));
        }
        public JsonResult AddToCart(CartViewModel.ProductCart model)
        {
            IList <CartViewModel.ProductCart> productCarts = new List <CartViewModel.ProductCart>();

            #region cart
            CookieHelper cookieHelper = new CookieHelper("Cart");

            if (cookieHelper.GetCookie() != null)
            {
                string json = HttpUtility.UrlDecode(cookieHelper.GetCookie().Values["Cart"]);
                productCarts = JsonConvert.DeserializeObject <List <CartViewModel.ProductCart> >(json);
            }
            //neu trung id va ma vach thi cong thêm số lượng, ngược lại thì mới add cookie
            bool exist = productCarts.Any(o => o.ProductId == model.ProductId && o.Barcode.Equals(model.Barcode));
            if (exist)
            {
                foreach (var p in productCarts)
                {
                    if (p.ProductId == model.ProductId && p.Barcode.Equals(model.Barcode))
                    {
                        p.Quantity += model.Quantity;
                        break;
                    }
                }
            }
            else
            {
                productCarts.Add(model);
            }
            string jsonString = JsonConvert.SerializeObject(productCarts);
            cookieHelper.SetCartCookie(jsonString);
            #endregion

            int gia = 0;
            IList <ProductFrontPageMapping.ProductShowCart> productShowCarts =
                _menuRepository.GetProductShowCartByBarcode(productCarts.Select(o => o.Barcode).ToList());
            IList <PromotionMapping.PromotionCheckProduct> promotions = _promotionRepository.GetActives();
            IList <CartViewModel.CartItem> cartItems = new List <CartViewModel.CartItem>();
            if (productCarts.Any())
            {
                foreach (var o in productCarts)
                {
                    var item = productShowCarts.FirstOrDefault(p => p.Barcode.Equals(o.Barcode));
                    #region ghép combo < 80K
                    if (item.Price < 80000 && o.Quantity >= 2)
                    {
                        //nếu số lượng > 2  và giá < 80000 bắt đầu tính giá combo
                        int giatru = (item.Price * 10) / 100;
                        gia = item.Price - giatru;
                    }
                    else
                    {
                        gia = item.Price;
                    }
                    #endregion
                    var cartItem = new CartViewModel.CartItem()
                    {
                        ProductId      = o.ProductId,
                        Name           = item.NameProduct,
                        Image          = item.Img,
                        Price          = item.Price,
                        PricePromotion = gia,
                        Barcode        = o.Barcode,
                        Quantity       = o.Quantity <= 0 ? 1 : o.Quantity,
                        AttributeImg   = item.AttributeImg,
                        AttributeName  = item.AttributeName,
                        AttributeFlag  = item.AttributeFlag,
                        Link           = item.Link
                    };

                    #region check promotion
                    if (promotions.Any())
                    {
                        foreach (var pr in promotions)
                        {
                            var promotionDetail = pr.PromotionDetails.FirstOrDefault(dt => dt.ProductId == cartItem.ProductId);
                            if (promotionDetail != null)
                            {
                                cartItem.HasPromotion   = true;
                                cartItem.PricePromotion = (int)promotionDetail.PriceDiscount;
                                cartItem.Discount       = (short)promotionDetail.Percent;
                                break;
                            }
                        }
                    }

                    #endregion
                    cartItems.Add(cartItem);
                }
            }

            CartViewModel.CartModel cartModel = new CartViewModel.CartModel()
            {
                CartItems = cartItems,
                Total     = cartItems.Sum(o => o.Quantity * o.PricePromotion)
            };

            string html = RenderPartialViewToString("ViewRender", cartModel);

            return(Json(new { html = html, countCart = cartModel.CartItems.Count() }, JsonRequestBehavior.AllowGet));
        }