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