Exemple #1
0
        public ActionResult Recettes(RecipesViewModels submitted)
        {
            model = DisplaySearchResult(submitted);
            var IngInList = db.Ingredients.ToList();
            List <SelectListItem> items = new List <SelectListItem>();

            foreach (var Ing in IngInList)
            {
                var item = new SelectListItem
                {
                    Value = Ing.id.ToString(),
                    Text  = Ing.name
                };
                items.Add(item);
            }
            MultiSelectList IngList = new MultiSelectList(items.OrderBy(i => i.Text), "Value", "Text");

            model.SelectIng = IngList;
            EditionLastAndNewRecipes.MeilleuresRecettes(model.NewAndBest.lastRecipes);
            EditionLastAndNewRecipes.DernieresRecettes(model.NewAndBest.bestRecipes);

            return(View(model));
        }
Exemple #2
0
        public RecipesViewModels DisplaySearchResult(RecipesViewModels submitted, int limit = 4)
        {
            List <Recettes> RecipesByIng = new List <Recettes>();

            submitted.Result = new List <Recettes>();
            if (submitted.IngIDs != null || submitted.Name != null || (submitted.CalorieMin >= 0 && submitted.CalorieMax != 0))
            {
                if (submitted.IngIDs != null)
                {
                    //ajoute a la liste les recettes contenants les ingrédients sélectionnés
                    foreach (var item in submitted.IngIDs)
                    {
                        RecipesByIng.AddRange(db.Recettes.Where(n => n.Ingredients.Any(m => m.id.Contains(item))));
                    }
                    if (submitted.IngIDs.Count() > 1)
                    {
                        // cette requête permet de repérer les Id de recettes dupliqués ( donc l'id des recettes correspondant à notre recherche)
                        var duplicatedID = from r in RecipesByIng
                                           group r by r.id into g
                                           where g.Count() > 1
                                           select g.Key;
                        //requête nous renvoyant la liste des recettes en doublons
                        var duplicated = RecipesByIng.FindAll(p => duplicatedID.Contains(p.id));
                        //supression des doublons dans la listes
                        submitted.Result = duplicated.Distinct(new DistinctItemComparer()).ToList();
                    }
                    else
                    {
                        submitted.Result = RecipesByIng;
                    }
                }
                //Recherche par nom de recette
                if (submitted.Name != String.Empty)
                {
                    if (submitted.Result == null)
                    {
                        submitted.Result.RemoveAll(m => !m.name.ToLower().Contains(submitted.Name.ToLower()));
                    }

                    else
                    {
                        submitted.Result.AddRange(db.Recettes.Where(m => m.name.ToLower().Contains(submitted.Name.ToLower())).ToList());
                    }
                }

                //Recherche par Calorie
                if (submitted.CalorieMin >= 0 && submitted.CalorieMax != 0)
                {
                    if (submitted.CalorieMin < submitted.CalorieMax)
                    {
                        if (submitted.Result == null)
                        {
                            submitted.Result.RemoveAll(m => m.calories >= submitted.CalorieMax);
                            submitted.Result.RemoveAll(m => m.calories <= submitted.CalorieMin);
                        }
                        else
                        {
                            submitted.Result.AddRange(db.Recettes.Where(m => m.calories <= submitted.CalorieMax).ToList());
                            submitted.Result.RemoveAll(m => m.calories <= submitted.CalorieMin);
                        }
                    }

                    else
                    {
                        submitted.Result = null;
                    }
                }
            }
            else
            {
                submitted.Result = db.Recettes.OrderBy(n => n.name).ToList();
            }

            return(submitted);
        }