//==========================================================



        //==========================================================
        public ActionResult RemoveProductFromCart(int id)
        {
            ShoppingCart cart = ShoppingCartCreateOrLoad();

            if (cart != null && cart.ShoppingCartsProducts.Count > 0)
            {
                ShoppingCartsProduct removeProduct = db.ShoppingCartsProducts.Find(id);
                db.ShoppingCartsProducts.Remove(removeProduct);
                db.SaveChanges();
            }
            return(new EmptyResult());
        }
        //==========================================================



        //==========================================================
        public ActionResult EditProductInCart(int?id, int?quant)
        {
            if (id != null && quant != null && quant > 0)
            {
                ShoppingCart cart = ShoppingCartCreateOrLoad();
                // проверка корзины есть ли в ней товар
                ShoppingCartsProduct existProductInCart = cart.ShoppingCartsProducts.Where(p => p.Id == id).SingleOrDefault();
                if (existProductInCart != null)
                {
                    // если продукт в корзине есть - редактируем
                    existProductInCart.Quantity  = quant.Value;
                    existProductInCart.DateAdded = DateTime.Now;

                    db.Entry(existProductInCart).State = EntityState.Modified;
                    db.SaveChanges();
                }
            }
            //return new EmptyResult();
            return(RedirectToAction("Index"));
        }
        //==========================================================



        //==========================================================
        public ActionResult AddToCard(int?id, int?quant)
        {
            if (id != null && quant != null && quant > 0)
            {
                ShoppingCart cart    = ShoppingCartCreateOrLoad();
                ShopProduct  product = db.ShopProducts.Find(id);
                if (product != null)
                {
                    // проверка корзины - нет ли в ней этого товара добавленного ранее
                    ShoppingCartsProduct existProductInCart = cart.ShoppingCartsProducts.Where(p => p.ShopProduct.Id == product.Id).SingleOrDefault();
                    if (existProductInCart == null)
                    {
                        // если продукта в корзине нет - добавляем
                        ShoppingCartsProduct addingProduct = new ShoppingCartsProduct
                        {
                            ShopProduct  = product,
                            Quantity     = quant.Value,
                            ShoppingCart = cart,
                            DateAdded    = DateTime.Now
                        };

                        cart.ShoppingCartsProducts.Add(addingProduct);
                        db.Entry(cart).State = EntityState.Modified;
                        db.SaveChanges();
                    }
                    else
                    {
                        // если продукта в корзине есть - редактируем
                        existProductInCart.Quantity  = existProductInCart.Quantity + quant.Value;
                        existProductInCart.DateAdded = DateTime.Now;

                        db.Entry(existProductInCart).State = EntityState.Modified;
                        db.SaveChanges();
                    }
                }
            }

            return(RedirectToAction("_ShoppingCart"));
        }
        //==========================================================



        //==========================================================
        private ShoppingCart ShoppingCartCreateOrLoad()
        {
            if (HttpContext.User.Identity.IsAuthenticated)
            {
                string currentUserId = HttpContext.User.Identity.GetUserId();
                ApplicationUserManager userManager = new ApplicationUserManager(new UserStore <ApplicationUser>(db));
                ApplicationUser        currentUser = userManager.FindById(currentUserId);

                ShoppingCart cardUser = ShoppingCartFindByUserId(currentUser.Id);
                if (cardUser == null)
                {
                    // создаем корзину для пользователя
                    cardUser = ShoppingCartCreateForUser(currentUser.Id);
                    cardUser.ShoppingCartsProducts = new List <ShoppingCartsProduct>();
                    // проверяем наличие анонимной корзины
                    if (HttpContext.Request.Cookies["ShoppingCartKeyId"] != null)
                    {
                        ShoppingCart cardAnonym = ShoppingCartFind(HttpContext.Request.Cookies["ShoppingCartKeyId"].Value);
                        if (cardAnonym != null && cardAnonym.ShoppingCartsProducts != null && cardAnonym.ShoppingCartsProducts.Count > 0)
                        {
                            // переносим товары из анонимной корзины в корзину пользователя
                            foreach (var item in cardAnonym.ShoppingCartsProducts)
                            {
                                cardUser.ShoppingCartsProducts.Add(item);
                            }
                            db.Entry(cardUser).State = EntityState.Modified;
                            // удаляем анонимную корзину
                            db.ShoppingCartsProducts.RemoveRange(cardAnonym.ShoppingCartsProducts);
                            db.ShoppingCarts.Remove(cardAnonym);

                            DeleteCookie();

                            db.SaveChanges();
                        }
                    }
                    return(cardUser);
                }
                else
                {
                    // проверяем наличие анонимной корзины
                    if (HttpContext.Request.Cookies["ShoppingCartKeyId"] != null)
                    {
                        ShoppingCart cardAnonym = ShoppingCartFind(HttpContext.Request.Cookies["ShoppingCartKeyId"].Value);
                        if (cardAnonym != null && cardAnonym.ShoppingCartsProducts != null && cardAnonym.ShoppingCartsProducts.Count > 0)
                        {
                            // если пользовательская корзина пуста а анонимная имеет товары, тогда
                            if (cardUser.ShoppingCartsProducts == null || cardUser.ShoppingCartsProducts.Count == 0)
                            {
                                // переносим товары из анонимной корзины в корзину пользователя
                                cardUser.ShoppingCartsProducts = new List <ShoppingCartsProduct>();
                                foreach (var item in cardAnonym.ShoppingCartsProducts)
                                {
                                    cardUser.ShoppingCartsProducts.Add(item);
                                }
                                db.Entry(cardUser).State = EntityState.Modified;
                                // удаляем анонимную корзину
                                db.ShoppingCartsProducts.RemoveRange(cardAnonym.ShoppingCartsProducts);
                                db.ShoppingCarts.Remove(cardAnonym);
                                db.SaveChanges();

                                DeleteCookie();

                                return(cardUser);
                            }
                            else
                            {
                                // если обе корзины не пустые
                                foreach (var item in cardAnonym.ShoppingCartsProducts)
                                {
                                    ShoppingCartsProduct exist = cardUser.ShoppingCartsProducts
                                                                 .Where(p => p.ShopProduct.Id == item.ShopProduct.Id)
                                                                 .SingleOrDefault();

                                    if (exist != null)
                                    {
                                        exist.Quantity  = exist.Quantity + item.Quantity;
                                        exist.DateAdded = DateTime.Now;
                                    }
                                    else
                                    {
                                        cardUser.ShoppingCartsProducts.Add(item);
                                    }
                                }
                                db.Entry(cardUser).State = EntityState.Modified;
                                // удаляем анонимную корзину
                                db.ShoppingCartsProducts.RemoveRange(cardAnonym.ShoppingCartsProducts);
                                db.ShoppingCarts.Remove(cardAnonym);
                                db.SaveChanges();

                                DeleteCookie();

                                return(cardUser);
                            }
                        }
                    }
                }
                return(cardUser);
            }
            else
            {
                if (HttpContext.Request.Cookies["ShoppingCartKeyId"] != null)
                {
                    return(ShoppingCartFind(HttpContext.Request.Cookies["ShoppingCartKeyId"].Value));
                }
                else
                {
                    return(ShoppingCartCreate());
                }
            }
            //return null;
        }