Exemplo n.º 1
0
        public List <DisplayProduct> GetProductsMenusByAllergen(string allergenName, bool contains)
        {
            List <DisplayProduct> list = new List <DisplayProduct>();

            if (contains == true)
            {
                var productQuery = restaurant.GetProductsByAllergen(allergenName);
                foreach (var product in productQuery)
                {
                    list.Add(new DisplayProduct
                    {
                        CategoryName = product.CategoryName,
                        Price        = product.Price,
                        Name         = product.Name,
                        Quantity     = product.Quantity
                    });
                }

                var menuQuery = restaurant.GetMenusByAllergen(allergenName);
                foreach (var menu in menuQuery)
                {
                    list.Add(new DisplayProduct
                    {
                        CategoryName = menu.Category,
                        Price        = (double)menu.Price,
                        Name         = menu.Name,
                        Quantity     = (int)menu.Quantity
                    });
                }
                return(list);
            }
            else
            {
                var productQuery = (from product in restaurant.Products
                                    select new DisplayProduct
                {
                    CategoryName = product.Category.Name,
                    Price = product.Price,
                    Quantity = product.Quantity,
                    Name = product.Name
                }).ToList();
                List <DisplayProduct> products = new List <DisplayProduct>();
                foreach (var product in productQuery)
                {
                    product.Allergens = restaurant.GetAllergensFromProduct(product.Name).ToList();
                    bool exist = false;
                    foreach (var allergen in product.Allergens)
                    {
                        if (allergen.ToLower().Contains(allergenName.ToLower()))
                        {
                            exist = true;
                            break;
                        }
                    }
                    if (exist == false)
                    {
                        products.Add(product);
                    }
                }

                var menuQuery = (from menu in restaurant.Menus
                                 select new DisplayProduct
                {
                    CategoryName = menu.Category.Name,
                    Quantity = (int)(from menu_product in restaurant.Menu_Product
                                     where menu.Menu_ID.Equals(menu_product.Menu_ID)
                                     select menu_product.Quantity).Sum(),
                    Price = (from product in restaurant.Products
                             join menu_product in restaurant.Menu_Product
                             on product.Product_ID equals menu_product.Product_ID
                             where menu.Menu_ID.Equals(menu_product.Menu_ID)
                             select product.Price).Sum(),
                    Name = menu.Name
                }).ToList();
                List <DisplayProduct> menus = new List <DisplayProduct>();
                foreach (var menu in menuQuery)
                {
                    menu.Allergens = restaurant.GetAllergensFromProduct(menu.Name).ToList();
                    bool exist = false;
                    foreach (var allergen in menu.Allergens)
                    {
                        if (allergen.ToLower().Contains(allergenName.ToLower()))
                        {
                            exist = true;
                            break;
                        }
                    }
                    if (exist == false)
                    {
                        menus.Add(menu);
                    }
                }
                products.AddRange(menus);
                return(products);
            }
        }