public ActionResult Create(PizzaCreateEditVM vm) { try { if (ModelState.IsValid) { Pizza pizza = vm.Pizza; pizza.Id = FakeDBPizza.Instance.ListePizzas.Count() == 0 ? 1 : FakeDBPizza.Instance.ListePizzas.Max(p => p.Id) + 1; pizza.Pate = FakeDBPizza.Instance.ListePates.FirstOrDefault(p => p.Id == vm.IdPate); foreach (var idIngredient in vm.IdIngredients) { pizza.Ingredients.Add( FakeDBPizza.Instance.ListeIngredients.FirstOrDefault(i => i.Id == idIngredient)); } FakeDBPizza.Instance.ListePizzas.Add(pizza); return(RedirectToAction("Index")); } else { return(View(this.getPatesIngredients(vm))); } } catch { return(View(this.getPatesIngredients(vm))); } }
public ActionResult Edit(PizzaCreateEditVM pizzaCreateEditVM) { try { if (!CheckRules(pizzaCreateEditVM)) { throw new Exception("Une ou plusieurs rêgles métiers ne sont pas respectées sur une modification de pizza"); } var pizza = pizzas.FirstOrDefault(p => p.Id == pizzaCreateEditVM.Pizza.Id); pizza.Nom = pizzaCreateEditVM.Pizza.Nom; pizza.Ingredients = ingredientsDisponibles.Where(i => pizzaCreateEditVM.IdSelectedIngredients.Contains(i.Id)).ToList(); if (pizzaCreateEditVM.IdSelectedPate != 0) { pizza.Pate = patesDisponibles.FirstOrDefault(p => p.Id == pizzaCreateEditVM.IdSelectedPate); } return(RedirectToAction("Index")); } catch (Exception ex) { Debug.WriteLine(ex.Message); return(View(GetPizzaCreateEditVM(pizzaCreateEditVM.Pizza.Id))); } }
public ActionResult Edit(int id, PizzaCreateEditVM vm) { { try { if (ModelState.IsValid) { Pizza modifiedPizza = FakeDBPizza.Instance.ListePizzas.FirstOrDefault(p => p.Id == vm.Pizza.Id); // nom modifiedPizza.Nom = vm.Pizza.Nom; //pate Pate pate = FakeDBPizza.Instance.ListePates.FirstOrDefault(p => p.Id == vm.IdPate); modifiedPizza.Pate = pate; //ingrédients modifiedPizza.Ingredients = FakeDBPizza.Instance.ListeIngredients .Where(i => vm.IdIngredients.Contains(i.Id)).ToList(); return(RedirectToAction("Index")); } else { getPatesIngredients(vm); return(View(vm)); } } catch { getPatesIngredients(vm); return(View(vm)); } } }
// GET: Pizza/Delete/5 public ActionResult Delete(int id) { PizzaCreateEditVM vm = new PizzaCreateEditVM(); vm.Pizza = FakeDBPizza.Instance.ListePizzas.FirstOrDefault(p => p.Id == id); return(View(vm)); }
/// <summary> /// Renvoi un Viewmodel construit pour la modification d'une pizza /// </summary> /// <param name="id">l'id de la pizza à modifier</param> /// <returns></returns> private PizzaCreateEditVM GetPizzaCreateEditVM(int id) { // Nous avons beoin d'un viewModel pour porter l'objet pizza à modifier, plus la liste de tous les ingrédients et la liste des pâtes disponibles var vm = new PizzaCreateEditVM(); // On récupère la pizza portant l'Id désiré dans la lsite des pizzas porté par le controller vm.Pizza = pizzas.FirstOrDefault(p => p.Id == id); // On créé directement l'objet attendu par la méthode ListBoxFor du HtmlHelper, qui nous permettra de choisir plusieurs ingrédients vm.Ingredients = ingredientsDisponibles.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }).ToList(); // On créer directement l'objet attendu par la méthode DropDownListFor du HtmlHelper, qui nous permettra de choisir une pâte vm.Pates = patesDisponibles.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }).ToList(); // Si la pizza avait déja une pâte, elle sera selectionnée sur la vue if (vm.Pizza.Pate != null) { vm.IdSelectedPate = vm.Pizza.Pate.Id; } // Si la pizza avait déja des ingrédients, ils seront pré selectionnés sur la vue de modification if (vm.Pizza.Ingredients.Any()) { vm.IdSelectedIngredients = vm.Pizza.Ingredients.Select(i => i.Id).ToList(); } return(vm); }
public ActionResult Create(PizzaCreateEditVM pizzaCreateEditVM) { try { var pizza = pizzaCreateEditVM.Pizza; // On récupère les objets ingrédients de la liste ingredientsDisponibles du controller à partir des ids choisis portés par le ViewModel, puis on les affecte à notre objet pizza pizza.Ingredients = ingredientsDisponibles.Where(i => pizzaCreateEditVM.IdSelectedIngredients.Contains(i.Id)).ToList(); // On récupère l'objet pâte de la liste patesDisponibles du controller à partir de l'id porté par le ViewModel, puis on l'affecte à notre objet pizza pizza.Pate = patesDisponibles.FirstOrDefault(p => p.Id == pizzaCreateEditVM.IdSelectedPate); // on affecte l'Id à partir de l'id max de notre liste de pizzas plus un. // si notre lsite est vide, on affecte la valeur 1. pizza.Id = pizzas.Any() ? pizzas.Max(p => p.Id) + 1 : 1; // On ajoute la nouvelle pizza à notre liste statique pizzas.Add(pizza); return(RedirectToAction("Index")); } catch (Exception ex) { Debug.WriteLine(ex.Message); // Si nous avons rencontré une erreur, il faut recharger la page de création, de ce fait il nous faut réalimenter le Viewmodel avant de le passer à la vue pizzaCreateEditVM.Ingredients = ingredientsDisponibles.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }).ToList(); pizzaCreateEditVM.Pates = patesDisponibles.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }).ToList(); return(View(pizzaCreateEditVM)); } }
// GET: Pizza/Create public ActionResult Create() { PizzaCreateEditVM vm = new PizzaCreateEditVM(); vm.Pates = Pizza.PatesDisponibles; vm.Ingredients = Pizza.IngredientsDisponibles; return(View(vm)); }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { PizzaCreateEditVM vm = (PizzaCreateEditVM)validationContext.ObjectInstance; if (_min > vm.IdIngredients.Count || vm.IdIngredients.Count > _max) { return(new ValidationResult($"Vous devez choisir entre {_min} et {_max} ingrédients")); } return(ValidationResult.Success); }
private bool CheckRules(PizzaCreateEditVM vm) { var brokenRules = 0; if (vm.Pizza.Nom.Length > 20 || vm.Pizza.Nom.Length < 5) { ModelState.AddModelError("", "Le nom d'une pizza doit avoir entre 5 et 20 caractères"); brokenRules++; } if (vm.IdSelectedPate == 0) { ModelState.AddModelError("", "Une pizza doit avoir une pâte"); brokenRules++; } if (pizzas.Any(p => p.Nom.ToUpper() == vm.Pizza.Nom.ToUpper() && p.Id != vm.Pizza.Id)) { ModelState.AddModelError("", "Il existe déjà une pizza portant ce nom"); brokenRules++; } if (vm.IdSelectedIngredients.Count < 2 || vm.IdSelectedIngredients.Count > 5) { ModelState.AddModelError("", "Une pizza doit avoir entre 2 et 5 ingrédients"); brokenRules++; } var pizzasSameNumberIngredient = pizzas.Where(p => p.Ingredients.Count == vm.IdSelectedIngredients.Count && vm.Pizza.Id != p.Id); foreach (var pizza in pizzasSameNumberIngredient) { var sameIngredients = true; for (int i = 0; i < pizza.Ingredients.Count; i++) { if (!vm.IdSelectedIngredients.Contains(pizza.Ingredients[i].Id)) { sameIngredients = false; break; } } if (sameIngredients) { ModelState.AddModelError("", "Il existe déjà une pizza avec ces ingrédients"); brokenRules++; break; } } return(brokenRules == 0); }
// GET: Pizza/Create public ActionResult Create() { var vm = new PizzaCreateEditVM(); vm.Ingredients = ingredientsDisponibles.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }).ToList(); vm.Pates = patesDisponibles.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }).ToList(); return(View(vm)); }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { PizzaCreateEditVM vm = (PizzaCreateEditVM)validationContext.ObjectInstance; if (FakeDBPizza.Instance.ListePizzas.Any(x => x.Nom.ToUpper() == vm.Pizza.Nom.ToUpper() && x.Id != vm.Pizza.Id)) { return(new ValidationResult($"{vm.Pizza.Nom} : ce nom de pizza existe déjà")); } return(ValidationResult.Success); }
// GET: Pizza/Create public ActionResult Create() { PizzaCreateEditVM pvm = new PizzaCreateEditVM(); pvm.Pate = FakeDbPizza.Instance.PatesAvailable.Select(p => new SelectListItem { Text = p.Nom, Value = p.Id.ToString() }); pvm.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }); return(View(pvm)); }
// GET: Pizza/Edit/5 public ActionResult Edit(int id) { var pizza = Pizzas.FirstOrDefault(p => p.Id == id); if (pizza == null) { return(RedirectToAction("Index")); } PizzaCreateEditVM vm = new PizzaCreateEditVM(); vm.Pates = Pizza.PatesDisponibles; vm.Ingredients = Pizza.IngredientsDisponibles; vm.Pizza = pizza; return(View(vm)); }
private PizzaCreateEditVM getPatesIngredients(PizzaCreateEditVM vm) { vm.Pate = FakeDBPizza.Instance.ListePates.Select(p => new SelectListItem() { Text = p.Nom, Value = p.Id.ToString() }) .ToList(); vm.Ingredients = FakeDBPizza.Instance.ListeIngredients.Select(i => new SelectListItem() { Text = i.Nom, Value = i.Id.ToString() }) .ToList(); return(vm); }
// GET: Pizza/Details/5 public ActionResult Details(int id) { Pizza pizza = FakeDBPizza.Instance.ListePizzas.FirstOrDefault(x => x.Id == id); if (pizza != null) { PizzaCreateEditVM vm = new PizzaCreateEditVM(); vm.Pizza = pizza; return(View(vm)); } else { return(RedirectToAction("Index")); } }
public ActionResult Edit(PizzaCreateEditVM pizzaCreateEditVM) { try { var pizza = pizzas.FirstOrDefault(p => p.Id == pizzaCreateEditVM.Pizza.Id); pizza.Nom = pizzaCreateEditVM.Pizza.Nom; pizza.Ingredients = ingredientsDisponibles.Where(i => pizzaCreateEditVM.IdSelectedIngredients.Contains(i.Id)).ToList(); pizza.Pate = patesDisponibles.FirstOrDefault(p => p.Id == pizzaCreateEditVM.IdSelectedPate); return(RedirectToAction("Index")); } catch (Exception ex) { Debug.WriteLine(ex.Message); return(View(GetPizzaCreateEditVM(pizzaCreateEditVM.Pizza.Id))); } }
public ActionResult Create(PizzaCreateEditVM pvm) { try { if (ModelState.IsValid && listIngredientsIsDifferent(pvm)) { Pizza pizza = pvm.Pizza; //gestion de l'id de la pizza a créer pizza.Id = FakeDbPizza.Instance.ListPizza.Count == 0 ? 1 : FakeDbPizza.Instance.ListPizza.Max(p => p.Id) + 1; //on récupère la pate et ingrédients selon les ids retournés pizza.Pate = FakeDbPizza.Instance.PatesAvailable.FirstOrDefault(p => p.Id == pvm.idSelectedPate); if (pvm.idSelectedIngredients != null) { pizza.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Where(i => pvm.idSelectedIngredients.Contains(i.Id)).ToList(); } FakeDbPizza.Instance.ListPizza.Add(pizza); return(RedirectToAction("Index")); } else { pvm.Pate = FakeDbPizza.Instance.PatesAvailable.Select(p => new SelectListItem { Text = p.Nom, Value = p.Id.ToString() }); pvm.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }); return(View(pvm)); } } catch { pvm.Pate = FakeDbPizza.Instance.PatesAvailable.Select(p => new SelectListItem { Text = p.Nom, Value = p.Id.ToString() }); pvm.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }); return(View(pvm)); } }
public ActionResult Create(PizzaCreateEditVM vm) { try { vm.Pates = Pizza.PatesDisponibles; vm.Ingredients = Pizza.IngredientsDisponibles; if (ModelState.IsValid) { if (Pizzas.Any(p => p.Nom.ToUpper() == vm.Pizza.Nom.ToUpper())) { ModelState.AddModelError("", "il existe déjà une pizza avec ce nom !"); return(View(vm)); } if (Pizza.PatesDisponibles.FirstOrDefault(x => x.Id == vm.IdSelectedPate) == default) { ModelState.AddModelError("", "Il faut obligatoirement une pate !"); return(View(vm)); } if (vm.IdSelectedIngredients.Count() > 5 || vm.IdSelectedIngredients.Count() < 2) { ModelState.AddModelError("", "Une pizza doit avoir entre 2 et 5 ingredients !"); return(View(vm)); } vm.Pizza.Pate = Pizza.PatesDisponibles.FirstOrDefault(x => x.Id == vm.IdSelectedPate); var ingredients = new List <Ingredient> { }; foreach (var item in vm.IdSelectedIngredients) { ingredients.Add(Pizza.IngredientsDisponibles.FirstOrDefault(x => x.Id == item)); } vm.Pizza.Ingredients = ingredients; Pizzas.Add(vm.Pizza); return(RedirectToAction("Index")); } else { return(View(vm)); } } catch { return(View(vm)); } }
// GET: Pizza/Edit/5 public ActionResult Edit(int id) { PizzaCreateEditVM pvm = new PizzaCreateEditVM(); pvm.Pizza = FakeDbPizza.Instance.ListPizza.FirstOrDefault(p => p.Id == id); //récupération de la pate et ingredients de la pizza à editer pvm.idSelectedPate = pvm.Pizza.Pate.Id; pvm.idSelectedIngredients = pvm.Pizza.Ingredients.Select(p => p.Id).ToList(); pvm.Pate = FakeDbPizza.Instance.PatesAvailable.Select(p => new SelectListItem { Text = p.Nom, Value = p.Id.ToString() }); pvm.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }); return(View(pvm)); }
public ActionResult Edit(PizzaCreateEditVM pvm) { try { if (ModelState.IsValid && listIngredientsIsDifferent(pvm)) { Pizza pizzaToEdit = FakeDbPizza.Instance.ListPizza.FirstOrDefault(p => p.Id == pvm.Pizza.Id); pizzaToEdit.Nom = pvm.Pizza.Nom; Pate pate = FakeDbPizza.Instance.PatesAvailable.FirstOrDefault(p => p.Id == pvm.idSelectedPate); pizzaToEdit.Pate = pate; pizzaToEdit.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Where(i => pvm.idSelectedIngredients.Contains(i.Id)).ToList(); return(RedirectToAction("Index")); } else { pvm.Pate = FakeDbPizza.Instance.PatesAvailable.Select(p => new SelectListItem { Text = p.Nom, Value = p.Id.ToString() }); pvm.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }); return(View(pvm)); } } catch { pvm.Pate = FakeDbPizza.Instance.PatesAvailable.Select(p => new SelectListItem { Text = p.Nom, Value = p.Id.ToString() }); pvm.Ingredients = FakeDbPizza.Instance.IngredientsAvailable.Select(i => new SelectListItem { Text = i.Nom, Value = i.Id.ToString() }); return(View(pvm)); } }
//vérifier que deux pizzas n'ont pas la même liste d ingrédients public bool listIngredientsIsDifferent(PizzaCreateEditVM pvm) { bool isDifferent = true; Pizza pizzaToCreateOrEdit = pvm.Pizza; var listIngredientsId = pvm.idSelectedIngredients.OrderBy(i => i); //comparer si la liste d'ingrédients de la pizza créée ou éditée est la même que celle d'une pizza existante foreach (var pizza in FakeDbPizza.Instance.ListPizza) { //comparer si le nb d'ingrédients est différent if (listIngredientsId.Count() != pizza.Ingredients.Count()) { return(isDifferent); } else { if (listIngredientsId.SequenceEqual(pizza.Ingredients.Select(i => i.Id).OrderBy(i => i))) { //on vérifie qu'il ne s'agit pas de la pizza en cours d'edition if (pizzaToCreateOrEdit.Id == pizza.Id) { isDifferent = true; } else { isDifferent = false; break; } } } } if (!isDifferent) { ModelState.AddModelError("", "Deux pizzas ne peuvent pas avoir la même liste d'ingrédients."); } return(isDifferent); }
// GET: Pizza/Edit/5 public ActionResult Edit(int id) { PizzaCreateEditVM vm = new PizzaCreateEditVM(); foreach (Pate pate in FakeDBPizza.Instance.ListePates) { } Pizza pizza = FakeDBPizza.Instance.ListePizzas.FirstOrDefault(x => x.Id == id); if (pizza != null) { vm.Pizza = pizza; vm.IdIngredients = vm.Pizza.Ingredients.Select(i => i.Id).ToList(); vm.IdPate = vm.Pizza.Pate.Id; getPatesIngredients(vm); return(View(vm)); } else { return(RedirectToAction("Index")); } }
protected override ValidationResult IsValid(object value, ValidationContext validationContext) { PizzaCreateEditVM vm = (PizzaCreateEditVM)validationContext.ObjectInstance; bool result = true; foreach (var pizza in FakeDBPizza.Instance.ListePizzas) { if (vm.IdIngredients.Count == pizza.Ingredients.Count) { bool isDifferent = false; List <Ingredient> pizzaDb = pizza.Ingredients.OrderBy(x => x.Id).ToList(); vm.IdIngredients = vm.IdIngredients.OrderBy(x => x).ToList(); for (int i = 0; i < vm.IdIngredients.Count; i++) { if (vm.IdIngredients.ElementAt(i) != pizzaDb.ElementAt(i).Id) { isDifferent = true; break; } } if (!isDifferent) { if (vm.Pizza.Id != pizza.Id) { result = false; } } } } return(result ? ValidationResult.Success : new ValidationResult("Ces ingrédients sont dans une autre pizza")); }
// GET: Pizza/Create public ActionResult Create() { PizzaCreateEditVM vm = new PizzaCreateEditVM(); return(View(this.getPatesIngredients(vm))); }