public async Task <IActionResult> FollowTheRecipe(Guid id) { Recipe recipe = await recipeRepository.FindAsync(r => r.Id == id); User user = await _signInManager.UserManager.GetUserAsync(User); IEnumerable <Fridge> productsInFridge = await fridgeRepository.GetUserProducts(user); List <Guid> productsInFridgeToRemove = new List <Guid>(); Dictionary <Guid, int> productsInFridgeToChange = new Dictionary <Guid, int>(); foreach (var fridge in productsInFridge) { if (recipe.Ingredients.Any(ingredient => ingredient.Product.Id == fridge.Product.Id)) { var subtraction = fridge.Quantity - recipe.Ingredients.Where(i => i.Product.Id == fridge.Product.Id).First().Quantity; if (subtraction == 0) { productsInFridgeToRemove.Add(fridge.Product.Id); } else { productsInFridgeToChange.Add(fridge.Product.Id, subtraction); } } } foreach (var item in productsInFridgeToRemove) { fridgeRepository.Remove(productsInFridge.Where(p => p.Product.Id == item).First()); } foreach (var item in productsInFridgeToChange) { Fridge fridge = productsInFridge.Where(p => p.Product.Id == item.Key).First(); fridge.Quantity = item.Value; fridgeRepository.Update(fridge); } productsInFridge = await fridgeRepository.GetUserProducts(user); return(PartialView("_RecipeDetails", new RecipeDetailsViewModel { Recipe = recipe, DidUserRate = recipe.Ratings.Any(rating => rating.User == user), IsInUserFavourites = false, HasIngredients = recipe.Ingredients.All(i => productsInFridge.Any(p => (p.Product.Id == i.Product.Id && (p.Quantity >= i.Quantity)))) })); }
public async Task <IActionResult> AddToFridge(FridgeViewModel fridge) { User user = await _signInManager.UserManager.GetUserAsync(User); var products = await productRepository.Products(); products = products.OrderBy(p => p.Name); if (!ModelState.IsValid) { if (ModelState["Id"].Errors.Count != 0) { ModelState.Remove("Id"); ModelState.SetModelValue("Id", new ValueProviderResult("Należy wybrać produkt", CultureInfo.InvariantCulture)); ModelState.AddModelError("Id", "Należy wybrać produkt"); } fridge.Products = products; fridge.Fridges = await fridgeRepository.GetUserProducts(user); return(View("Fridge", fridge)); } Fridge productInFridge = await fridgeRepository.FindAsync(f => f.Product.Id == fridge.Id && f.User.Id == user.Id); if (productInFridge != null) { productInFridge.Quantity = (int)fridge.Quantity; fridgeRepository.Update(productInFridge); } else { Product product = await productRepository.FindAsync(p => p.Id == fridge.Id); fridgeRepository.Add(new Fridge { Product = product, User = user, Quantity = (int)fridge.Quantity }); } return(RedirectToAction("Fridge")); }