public bool AddOrder(List <Guid> shoppingCartItems, string email) { //makes a new Order Order order = new Order(); order.UserEmail = email; order.DatePlaced = DateTime.Now; Guid orderId = _ordersRepository.AddOrder(order); //Makes a list with unique Guids from shoppinCartItems list List <Guid> filteredShoppingCartItems = new List <Guid>(); foreach (var item in shoppingCartItems) { if (!filteredShoppingCartItems.Any(x => x == item)) { filteredShoppingCartItems.Add(item); } } List <OrderDetails> listOfOrderDetails = new List <OrderDetails>(); //Fills the OrderDetailsList with OrderDetails foreach (var item in filteredShoppingCartItems) { int quantity = shoppingCartItems.Count(x => x == item); Guid ProductFk = item; Guid OrderFk = orderId; double price = _productsRepository.GetProduct(item).Price *quantity; OrderDetails orderDetails = new OrderDetails(); orderDetails.Quantity = quantity; orderDetails.ProductFK = ProductFk; orderDetails.OrderFK = OrderFk; orderDetails.Price = price; listOfOrderDetails.Add(orderDetails); } //Checks for stock before adding OrderDetails if (CheckStock(listOfOrderDetails)) { _orderDetailsRepository.AddOrderDetailsList(listOfOrderDetails); return(true); } else { //Removes the previously created Order that doesnt have OrderDetails, because of the failed stock check _ordersRepository.RemoveOrder(order); return(false); } }