/// <summary> /// Returns list of available products /// </summary> public async Task <IHttpActionResult> Get() { List <ProductItemDTO> productDTOs = await _productService.FindAllProducts(); CartDTO cart = new CartDTO() { CartItems = new List <CartItemDTO>(), Total = 0 }; ProductSelectionViewModel result = new ProductSelectionViewModel() { Products = productDTOs.Select(x => new ProductViewModel() { Code = x.Code, Description = x.Description, Price = x.Price, AmountInCart = 0, Available = x.AmountInStock > 0 } ).ToList(), Total = cart.Total, Discounts = new List <DiscountViewModel>(), Cart = new CartDTO() { CartItems = new List <CartItemDTO>(), Total = 0 } }; return(Json(result)); }
/// <summary> /// Adds a new product item to cart /// </summary> public async Task <IHttpActionResult> Post(string id, List <CartItemDTO> existingCartItems) { if (string.IsNullOrEmpty(id)) { throw new ArgumentException("Product code is mandatory"); } if (existingCartItems == null) { existingCartItems = new List <CartItemDTO>(); } if (existingCartItems.Where(x => x == null).Any()) { throw new ArgumentException("Cart Item cannot be null"); } CartDTO cart = await _productService.AddProductToCart(id, existingCartItems); List <ProductItemDTO> productDTOs = await _productService.FindAllProducts(); List <DiscountViewModel> listOfDiscounts = CalculateDiscounts(productDTOs, cart); ProductSelectionViewModel res = new ProductSelectionViewModel() { Products = productDTOs.Select(x => new ProductViewModel() { Code = x.Code, Description = x.Description, Price = x.Price, AmountInCart = (cart.CartItems.Where(c => c.Product.Code == x.Code).FirstOrDefault() != null ? cart.CartItems.Where(c => c.Product.Code == x.Code).FirstOrDefault().Quantity : 0) }).ToList(), Total = cart.Total, Discounts = listOfDiscounts, Cart = cart }; foreach (ProductViewModel product in res.Products) { CartItemDTO cartItem = cart.CartItems.Where(x => x.Product.Code == product.Code).FirstOrDefault(); if (cartItem != null) { product.Available = product.AmountInCart < cartItem.Product.AmountInStock; } else { product.Available = productDTOs.Where(x => x.Code == product.Code).FirstOrDefault().AmountInStock > 0; } } return(Json(res)); }
public async Task <IActionResult> Index(int lastStepId, string errorMessage = null) { var products = await _vendingService.AvailableProducts(); var balance = await _vendingService.GetBalance(lastStepId); var productViewModel = _mapper.Map <IEnumerable <ProductViewModel> >(products); var productSelectionViewModel = new ProductSelectionViewModel { Products = productViewModel, WorkflowStepId = lastStepId, Balance = balance, ErrorMessage = errorMessage }; return(View(productSelectionViewModel)); }