예제 #1
0
        public virtual ActionResult Update(CartUpdate info)
        {
            var cartId = _EnsureCart();

            _CartService.UpdateLineItemQty(cartId, info.Updates);
            return(RedirectToAction(MVC.Store.Cart.Index()));
        }
예제 #2
0
        public static void Initialize(TestContext context)
        {
            var config = new TestConfig
            {
                ResetHttpContext = true
            };

            var cartAdd         = new BaseIntegrationTest <CartAdd, CartResponse>(config);
            var cartAddRequest  = RequestBuilder.GetCartAddRequestForShoes();
            var cartAddResponse = (Response <CartResponse>)cartAdd.TestObject.Execute(cartAddRequest);

            cartAdd         = new BaseIntegrationTest <CartAdd, CartResponse>();
            cartAddRequest  = RequestBuilder.GetCartAddRequestForGiftCard();
            cartAddResponse = (Response <CartResponse>)cartAdd.TestObject.Execute(cartAddRequest);

            cartAdd         = new BaseIntegrationTest <CartAdd, CartResponse>();
            cartAddRequest  = RequestBuilder.GetCartAddRequestForAccessories();
            cartAddResponse = (Response <CartResponse>)cartAdd.TestObject.Execute(cartAddRequest);

            var cartDetail         = new BaseIntegrationTest <CartDetail, CartResponse>();
            var cartDetailRequest  = new EmptyRequest();
            var cartDetailResponse = (Response <CartResponse>)cartDetail.TestObject.Execute(cartDetailRequest);

            _itemCountBefore = cartDetailResponse.resultset.Cart.CartItemCount;

            var cartUpdate        = new BaseIntegrationTest <CartUpdate, CartResponse>();
            var cartUpdateRequest = RequestBuilder.GetCartUpdateRequest(cartDetailResponse.resultset.Cart.CartItems);

            _result = (Response <CartResponse>)cartUpdate.TestObject.Execute(cartUpdateRequest);

            _itemCountAfter = _result.resultset.Cart.CartItemCount;
            _testObject     = cartUpdate.TestObject;
        }
        public ShoppingCart Put([FromBody] CartUpdate item)
        {
            var userId = HttpContext.GetUserId();

            if (!userId.HasValue)
            {
                throw new Exception("Please login first");
            }
            return(shoppingCartService.UpdateItem(item.ShoppingCartItemId, item.Quantity, userId.Value));
        }
        public async Task <(bool status, Cart cart)> ReplaceCartContentsAsync(CartUpdate cartUpdateRequest)
        {
            var response = await _httpClient.PostAsync <Cart>(_endpoints.Cart(_cartId), cartUpdateRequest);

            if (!response.Success)
            {
                return(false, null);
            }

            _cartId = response.Model.Id;
            return(true, response.Model);
        }
예제 #5
0
 public ActionResult <CartUpdate> Post([FromBody] CartUpdate cartUpdate)
 {
     if (cartUpdate.Email.Equals(""))
     {
         return(NotFound());
     }
     try
     {
         SQL_Interface.Instance.AddProductToCart(cartUpdate.Email, cartUpdate.productUpdate);
         return(CreatedAtAction(nameof(Get), new { email = cartUpdate.Email }, cartUpdate));
     }
     catch (Exception)
     {
         return(NotFound());
     }
 }
예제 #6
0
        public CartDto Update(Guid userId, [FromBody] CartUpdate data)
        {
            var cart    = _context.Cart.Include(x => x.CartItems).ThenInclude(x => x.Product).FirstOrDefault(x => x.UserId == userId);
            var product = cart.CartItems.FirstOrDefault(x => x.ProductId == data.ProductId);

            if (product == null)
            {
                _context.CartItems.Add(new CartItem {
                    CartId = cart.Id, ProductId = data.ProductId, Quantity = data.Quantity
                });
            }
            else
            {
                product.Quantity = data.Quantity;
                if (data.Quantity == 0)
                {
                    _context.CartItems.Remove(product);
                }
            }
            _context.SaveChanges();
            return(new CartDto(_context.Cart.Include(x => x.CartItems).ThenInclude(x => x.Product).FirstOrDefault(x => x.UserId == userId)));
        }
예제 #7
0
        public IActionResult UpdateCart([FromBody] CartUpdate cu)
        {
            int   cartCount;
            float subTotal;
            float total = 0;

            try
            {
                int productId; int qty;
                productId = cu.ProductId; qty = cu.Qty;
                Debug.WriteLine($"Prod ID:{productId}, Qty: {qty}");
                if (qty <= 0)
                {
                    return(Json(new
                    {
                        success = false
                    }));
                }

                // if user is not logged in, update cart data in Session State as a Jsonified dict
                if (!User.Identity.IsAuthenticated)
                {
                    var cartList = HttpContext.Session.GetJson <CartListViewModel>("cart");

                    // check if "cart" exists in Session data
                    if (cartList != null)
                    {
                        // update cart item qty if cart item exists, otherwise add new cart item
                        cartList.UpdateCart(new Cart {
                            ProductId = productId, Qty = qty
                        });
                    }
                    // create new cratList Dict if there isn't one in session
                    else
                    {
                        cartList = new CartListViewModel();
                        cartList.UpdateCart(new Cart {
                            ProductId = productId, Qty = qty
                        });
                    }

                    // update "cart" Session data
                    HttpContext.Session.SetJson("cart", cartList);

                    // get latest "cartCount" and set to Session data
                    cartCount = cartList.CartCount;
                    HttpContext.Session.SetInt32("cartCount", cartCount);

                    // for debugging, to delete
                    foreach (Cart c in cartList.List)
                    {
                        Debug.WriteLine($"Prod: {c.ProductId} - {c.Qty}");
                    }
                    Debug.WriteLine("Cart count: " + cartCount);

                    var prod = db.Products.FirstOrDefault(p => p.Id == productId);

                    subTotal = (prod.UnitPrice * qty) * (1 - prod.Discount);

                    foreach (Cart c in cartList.List)
                    {
                        var currProd  = db.Products.FirstOrDefault(p => p.Id == c.ProductId);
                        var unitPrice = currProd.UnitPrice;
                        var discount  = currProd.Discount;
                        total += unitPrice * c.Qty * (1 - discount);
                    }
                }
                // else user is logged in, update cart data in SQL db Cart table
                else
                {
                    string userId = User.FindFirst("userId").Value;
                    var    cart   = db.Carts.FirstOrDefault(c => c.ProductId == productId && c.UserId == userId);

                    // update cart item's qty if exists, otherwise add new Cart object
                    if (cart != null)
                    {
                        cart.Qty = qty;
                    }
                    else
                    {
                        cart = new Cart()
                        {
                            UserId = userId, ProductId = productId, Qty = qty
                        };
                        db.Carts.Add(cart);
                    }
                    db.SaveChanges();

                    // get latest "cartCount" and set to Session data
                    cartCount = db.Users.FirstOrDefault(u => u.Id == userId).Carts.Sum(c => c.Qty);
                    HttpContext.Session.SetInt32("cartCount", cartCount);

                    // for debugging, to delete
                    //foreach (Cart c in db.Users.FirstOrDefault(u => u.Id == userId).Carts)
                    //{
                    //    Debug.WriteLine($"Prod: {c.ProductId} - {c.Qty}");
                    //}
                    //Debug.WriteLine("Cart count: " + cartCount);

                    subTotal = cart.Product.UnitPrice * qty * (1 - cart.Product.Discount);

                    foreach (Cart c in db.Users.FirstOrDefault(u => u.Id == userId).Carts)
                    {
                        total += c.Product.UnitPrice * c.Qty * (1 - c.Product.Discount);
                    }
                }

                HttpContext.Session.SetInt32("cartCount", cartCount);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                _logger.LogError(ex, $"Error updating cart for {cu}");
                return(Json(new
                {
                    success = false
                }));
            }

            return(Json(new
            {
                success = true,
                cartCount = cartCount,
                subTotal = subTotal.ToString("S$ 0.00"),
                total = total.ToString("S$ 0.00")
            }));
        }