/// <summary> /// To create the order /// </summary> /// <returns>order details</returns> public async Task <OrderDetails> PlaceOrder() { if (BookCart == null || BookCart.BookCartItems.IsEmpty()) { throw new DataException("Cart is empty"); } var orderDetails = new OrderDetails() { PurchasedBooks = new List <BookCartItem>(), NotInStockBooks = new List <BookCartItem>() }; // Get available book list var availableBooks = await new BookStoreHelper().GetAllBooks(); availableBooks = availableBooks.Where(b => b.InStock > 0).ToList(); // Loop through the cart items which is having quantity greater than '0' BookCart.BookCartItems.Where(item => item.Quantity > 0).ForEach(item => { // check for the stock var availableBook = availableBooks.FirstOrDefault(b => b.ID == item.Book.ID && b.InStock > 0); if (availableBook != null) { if (availableBook.InStock < item.Quantity) { orderDetails.NotInStockBooks.Add(new BookCartItem { Book = item.Book, Quantity = item.Quantity - availableBook.InStock }); item.Quantity = availableBook.InStock; } orderDetails.PurchasedBooks.Add(item); availableBook.UpdateInStock(availableBook.InStock - item.Quantity); } else { orderDetails.NotInStockBooks.Add(item); } }); orderDetails.TotalPrice = (from item in orderDetails.PurchasedBooks select item.Quantity * item.Book.Price).Sum(); orderDetails.TotalQuantity = (from item in orderDetails.PurchasedBooks select item.Quantity).Sum(); // clear the cart BookCart.Clear(); Orders.Add(orderDetails); return(orderDetails); }
/// <summary> /// Default Constructor /// </summary> /// <param name="Id">user Id</param> public Customer(string Id) { ID = Id.SafeToUpper().SafeTrim(); BookCart = new BookCart(); Orders = new List <OrderDetails>(); }