Ejemplo n.º 1
0
        public async Task <IActionResult> AddToCart(string productId, int?quantity)
        {
            string cartId        = GetCart(_services);
            var    returnMessage = new ReturnMessage();
            var    product       = await _productRepository.All.FirstOrDefaultAsync(d => d.Id == productId);

            if (product == null)
            {
                returnMessage.SetErrorMessage("Không tìm thấy trong danh sách sản phẩm.");
                return(Json(returnMessage));
            }
            _shoppingCart.AddToCartSession(product, cartId, quantity.GetValueOrDefault());
            //var dto = new ProductViewModel();
            //PropertyCopy.Copy(product, dto);
            var session = HttpContext.Session.Get <List <CartProductViewModel> >("AddProducts");

            if (session != null)
            {
                //Check exist with item product id
                if (session.Any(x => x.Id == productId))
                {
                    foreach (var item in session)
                    {
                        //Update quantity for product if match product id
                        if (item.Id == productId)
                        {
                            //if (quantity != null) item.Quantity += (int)quantity;
                            //item.Price = product.Price.GetValueOrDefault();
                            //hasChanged = true;
                            if (quantity != null && quantity > 0)
                            {
                                item.Quantity = quantity.GetValueOrDefault();
                                returnMessage.setMessage("Sản phẩm đã có sẵn trong giỏ, bạn có muốn tăng thêm không?", item.Quantity);
                            }
                            HttpContext.Session.Set("AddProducts", session);
                            return(Json(returnMessage));
                        }
                    }
                }
                else
                {
                    if (quantity != null)
                    {
                        session.Add(new CartProductViewModel()
                        {
                            Id       = product.Id,
                            Product  = _productRepository.GetProductViewModelById(product.Id),
                            Price    = (long)product.PriceAfter.GetValueOrDefault(),
                            Quantity = quantity.Value
                        });
                    }
                    //hasChanged = true;
                    returnMessage.SetSuccessMessage("Sản phẩm đã được thêm thành công.");
                    HttpContext.Session.Set("AddProducts", session);
                    return(Json(returnMessage));
                }

                //Update back to cart
                //if (hasChanged)
                //{
                //    HttpContext.Session.Set("AddProducts", session);
                //}
            }
            else
            {
                //Add new cart
                if (quantity != null)
                {
                    {
                        var cart = new List <CartProductViewModel>
                        {
                            new CartProductViewModel()
                            {
                                Id       = product.Id,
                                Product  = _productRepository.GetProductViewModelById(product.Id),
                                Price    = (long)product.PriceAfter.GetValueOrDefault(),
                                Quantity = quantity.Value
                            }
                        };
                        HttpContext.Session.Set("AddProducts", cart);
                        returnMessage.SetSuccessMessage("Sản phẩm đã được thêm thành công.");
                        return(Json(returnMessage));
                    }
                }
                else
                {
                    returnMessage.setMessageFirst("Kiểm tra số lượng");
                    return(Json(returnMessage));
                }
            }
            return(Json(returnMessage));
        }