Example #1
0
        /// <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));
        }
Example #3
0
        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));
        }