public async Task <IHttpActionResult> createMenu(MenuRecipe item) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } double?Price = db.Ingredients.Where(x => item.ChildIngredients.Contains(x.Id)).Sum(x => x.Price); Ingredient IntermediateIngredient = new Ingredient() { Name = item.Name, Price = Price }; db.Ingredients.Add(IntermediateIngredient); await db.SaveChangesAsync(); var Ingredient = db.Ingredients.First(x => x.Name == item.Name); foreach (var IngredientId in item.ChildIngredients) { db.IngredientRecipes.Add(new IngredientRecipe() { ChildIngredientId = IngredientId, ParentIngredientId = Ingredient.Id }); } await db.SaveChangesAsync(); return(Ok(item)); }
public async Task <IHttpActionResult> GetMenu(int id) { //var param = new SqlParameter("@Id", id); //I know of SQL injection yet there was some weired issue causing the parameter not pass correctly var Menu = db.Menu.SqlQuery($"exec GetMenuItems @Id={id}").First(); if (Menu == null) { return(NotFound()); } var ChildIngredientIds = db.IngredientRecipes .Where(x => x.ParentIngredientId == Menu.Id) .Select(x => x.ChildIngredientId).ToList(); var MenuRecipe = new MenuRecipe() { Id = Menu.Id, Name = Menu.MenuItem, Price = Menu.Price, ChildIngredients = ChildIngredientIds }; return(Ok(MenuRecipe)); }
protected void NewMenu() { MyBuyList.Shared.Entities.Menu menu = new MyBuyList.Shared.Entities.Menu(); Dictionary <int, Recipe> selectedRecipes = Utils.SelectedRecipes; if (selectedRecipes != null && selectedRecipes.Count != 0) { foreach (KeyValuePair <int, Recipe> r in selectedRecipes) { MenuRecipe recipe = new MenuRecipe(); recipe.RecipeId = r.Key; recipe.Recipe = r.Value; recipe.Menu = this.CurrentMenu; menu.MenuRecipes.Add(recipe); } } menu.MenuId = 0; menu.MenuTypeId = 1; this.CurrentMenu = menu; this.RebindMenuRecipes(); this.rbnCategoryOneMeal.Checked = true; this.rbnCategoryWeekly.Checked = false; this.TablesTitleImg.ImageUrl = "Images/SubHeader_MeatDetails.png"; this.divNumDiners.Visible = true; this.RebindMealsDetails(); this.BindMenuCategories(); }
public async Task <IHttpActionResult> GetInterIngredient(int id) { //var param = new SqlParameter("@Id", id); //I know of SQL Injection yet I have to use this approach due to some problems. var Menu = db.Menu.SqlQuery($"exec GetIntermediateIngredints @id={id}").First(); if (Menu == null) { return(NotFound()); } var ChildIngredientIds = db.IngredientRecipes .Where(x => x.ParentIngredientId == Menu.Id) .Select(x => x.ChildIngredientId).ToList(); var InterIngredientRecipe = new MenuRecipe() { Id = Menu.Id, Name = Menu.MenuItem, Price = Menu.Price, ChildIngredients = ChildIngredientIds }; return(Ok(InterIngredientRecipe)); }
protected void Page_Load(object sender, EventArgs e) { try { if (!IsPostBack) { MyBuyList.Shared.Entities.Menu menu = new MyBuyList.Shared.Entities.Menu(); Meal theMeal = new Meal(); theMeal.MealTypeId = 4; theMeal.CourseTypeId = 0; theMeal.CreatedDate = DateTime.Now; theMeal.ModifiedDate = DateTime.Now; Dictionary <int, Recipe> selectedRecipes = Utils.SelectedRecipes; Dictionary <int, int> selectedRecipesServings = Utils.SelectedRecipesServings; menu.MenuName = string.Format("רשימת קניות מהירה מתאריך {0}, {1}", DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString()); menu.MenuTypeId = (int)MenuTypeEnum.QuickMenu; menu.UserId = ((BasePage)this.Page).UserId; menu.IsPublic = false; menu.Description = string.Format("רשימת קניות מהירה שהופקה בתאריך {0}, בשעה {1}. כוללת {2} מתכונים", DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString(), (selectedRecipes != null) ? selectedRecipes.Count.ToString() : "0"); if (selectedRecipes != null && selectedRecipes.Count != 0) { foreach (KeyValuePair <int, Recipe> r in selectedRecipes) { MenuRecipe recipe = new MenuRecipe(); recipe.RecipeId = r.Key; menu.MenuRecipes.Add(recipe); MealRecipe mealRecipe = new MealRecipe(); mealRecipe.RecipeId = r.Key; //mealRecipe.Servings = r.Value.ExpectedServings; mealRecipe.ExpectedServings = r.Value.ExpectedServings; mealRecipe.Servings = selectedRecipesServings.Keys.Contains(recipe.RecipeId) ? selectedRecipesServings[recipe.RecipeId] : r.Value.Servings; theMeal.MealRecipes.Add(mealRecipe); } } menu.Meals.Add(theMeal); int newMenuId; BusinessFacade.Instance.CreateOrUpdateMenu(menu, out newMenuId); if (newMenuId != 0) { Utils.SelectedRecipes = null; Utils.SelectedRecipesServings = null; string url = string.Format("~/ShoppingList.aspx?menuId={0}", newMenuId); this.Response.Redirect(url); } } } catch (Exception) { } }
public void AddMenuItem(int menuId, int recipeId, string user) { MenuRecipe dbMRecipe = new MenuRecipe() { MenuId = _mRepo.GetMenuById(menuId).First().Id, RecipeId = _rRepo.GetById(recipeId, user).First().Id }; _mrRepo.AddMenuItem(dbMRecipe); }
public void AddMenuItem(MenuRecipe item) { if ((from mr in _db.MenuRecipes where mr.MenuId == item.MenuId && mr.RecipeId == item.RecipeId select mr).FirstOrDefault() == null) { _db.MenuRecipes.Add(item); _db.SaveChanges(); } }
public async Task <MenuRecipeResponse> UnassingMenuRecipeAsync(int menuId, int recipeId) { try { MenuRecipe menuRecipe = await _menuRecipeRepository.FindByMenuIdAndRecipeId(menuId, recipeId); _menuRecipeRepository.Remove(menuRecipe); return(new MenuRecipeResponse(menuRecipe)); } catch (Exception ex) { return(new MenuRecipeResponse($"An error ocurred while assigning Recipe to Menu: {ex.Message}")); } }
protected void ChangeServings(object sender, CommandEventArgs e) { int recipeId = Convert.ToInt32(e.CommandArgument); MyBuyList.Shared.Entities.Menu menu = CurrentMenu; //Recipe recipe1 = BusinessFacade.Instance.GetRecipe(recipeId); MenuRecipe menuRecipe = menu.MenuRecipes.SingleOrDefault(x => x.RecipeId == recipeId); if (menuRecipe != null) { MealRecipe mealRecipe = (from p in menu.Meals join p1 in menuRecipe.Recipe.MealRecipes on p.MealId equals p1.MealId where p.MenuId == menu.MenuId && p1.RecipeId == recipeId && p1.Meal != null select new MealRecipe { RecipeId = recipeId, Servings = p1.Servings, Recipe = menuRecipe.Recipe, MealId = p.MealId }).SingleOrDefault(); if (mealRecipe != null) { switch (e.CommandName) { case "Increase": mealRecipe.Servings += menuRecipe.Recipe.Servings; break; case "Decrease": if (mealRecipe.Servings > menuRecipe.Recipe.Servings) { mealRecipe.Servings -= menuRecipe.Recipe.Servings; } break; } MealRecipe recipe = menuRecipe.Recipe.MealRecipes.SingleOrDefault(x => x.MealId == mealRecipe.MealId && x.Meal != null); if (recipe != null) { recipe.Servings = mealRecipe.Servings; } } } }
public async Task <IHttpActionResult> PutRecipe(MenuRecipe item) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (item.Id == 0) { return(BadRequest()); } if (!IngredientRecipeExists(item.Id)) { return(NotFound()); } var PreviousRecipe = db.IngredientRecipes.Where(x => x.ParentIngredientId == item.Id).ToList(); foreach (var recipe in PreviousRecipe) { db.IngredientRecipes.Remove(recipe); db.SaveChanges(); } foreach (var IngredientId in item.ChildIngredients) { db.IngredientRecipes.Add(new IngredientRecipe() { ChildIngredientId = IngredientId, ParentIngredientId = item.Id }); } await db.SaveChangesAsync(); double?Price = db.Ingredients.Where(x => item.ChildIngredients.Contains(x.Id)).Sum(x => x.Price); var Recipe = db.Ingredients.Where(x => x.Id == item.Id).First(); Recipe.Price = Price; db.Entry(Recipe).State = EntityState.Modified; await db.SaveChangesAsync(); return(Ok(item)); }
private async void OnAddToMenuClicked(object sender, EventArgs e) { RcpToMenu = new AddEditGetMenu() { RecipeId = Convert.ToInt32(App.RecipeViewModel.CurrentRcp.RecipeID), MenuServings = App.RecipeViewModel.CurrentRcp.RecipeServings, UserId = Data.CABEServices.UserDetails.ID, }; if (App.CurrentMenu == null) { var tempMenuId = 0; var tempMenuName = ""; // Establish CurrentMenu var menuList = await App.cabeMgr.GetSavedMenusAsync(CurrentUserID); if (menuList.Count > 0) { foreach (Menu menu in menuList) { if (menu.CurrentMenu == true) { tempMenuId = menu.Id; tempMenuName = menu.MenuName; } } } RcpToMenu.MenuId = tempMenuId; RcpToMenu.MenuName = tempMenuName; if (tempMenuId != 0) { var tempCurrentMenu = new MenuRecipe(); tempCurrentMenu.MenuId = tempMenuId; tempCurrentMenu.MenuName = tempMenuName; App.CurrentMenu = tempCurrentMenu; } await App.cabeMgr.AddEditGetMenuAsync(RcpToMenu); } else { RcpToMenu.MenuName = App.CurrentMenu.MenuName; RcpToMenu.MenuId = App.CurrentMenu.MenuId; await App.cabeMgr.AddEditGetMenuAsync(RcpToMenu); } await Navigation.PushAsync(new Pages.CurrentMenuPage()); }
public static MenuRecipeViewModel SearchMenuRecipe(string MenuItemCode) { using (CFMMCDEntities db = new CFMMCDEntities()) { List <INVRIRP0> MRRowList = new List <INVRIRP0>(); MenuRecipeViewModel MRViewModel = new MenuRecipeViewModel(); if (db.INVRIRP0.Where(o => o.RIRMIC.ToString().Equals(MenuItemCode)).Any()) { MRRowList = db.INVRIRP0.Where(o => o.RIRMIC.ToString().Equals(MenuItemCode)).ToList(); } MRViewModel.RIRMIC = MenuItemCode; MRViewModel.MIMDSC = db.CSHMIMP0.Single(o => o.MIMMIC.ToString().Equals(MenuItemCode)).MIMDSC; MRViewModel.MIMLON = db.CSHMIMP0.Single(o => o.MIMMIC.ToString().Equals(MenuItemCode)).MIMLON; if (MRRowList.Count() > 0 && MRRowList.FirstOrDefault().Group != null) { MRViewModel.Group = (int)MRRowList.FirstOrDefault().Group; } else { MRViewModel.Group = 0; } MRViewModel.MenuRecipeList = new List <MenuRecipe>(); foreach (var v in MRRowList) { MenuRecipe mr = new MenuRecipe(); mr.RIRRID = v.RIRRID; mr.RIRRIC = v.RIRRIC.ToString(); mr.RIMRID = db.INVRIMP0.Single(o => o.RIMRIC.ToString().Equals(mr.RIRRIC)).RIMRID; // Get price by getting primary vendor id first int primVenId = (int)db.INVRIMP0.Single(o => o.RIMRIC == v.RIRRIC).RIMPVN; // Look up Raw item and Vendor if (db.RIM_VEM_Lookup.Where(o => o.RIM_VEM_ID.Equals(v.RIRRIC.ToString() + primVenId.ToString())).Any()) { mr.RIMCPR = db.RIM_VEM_Lookup.Single(o => o.RIM_VEM_ID.Equals(v.RIRRIC.ToString() + primVenId.ToString())).RIMCPR.ToString(); } mr.RIRSFQ = v.RIRSFQ.ToString(); mr.RIRCWC = v.RIRCWC; mr.RIRSTA = v.RIRSTA; mr.STOATT = db.INVRIMP0.Single(o => o.RIMRIC == v.RIRRIC).Store_Attrib; MRViewModel.MenuRecipeList.Add(mr); } return(MRViewModel); } }
protected void lnkRemove_Click(object sender, EventArgs e) { MyBuyList.Shared.Entities.Menu menu = this.CurrentMenu; LinkButton lnkBtn = sender as LinkButton; int recipeId; if (lnkBtn != null && int.TryParse(lnkBtn.Attributes["recipeId"], out recipeId)) { foreach (Meal meal in menu.Meals) { MealRecipe mealRecipeToRemove = meal.MealRecipes.SingleOrDefault(mr => mr.RecipeId == recipeId); if (mealRecipeToRemove != null) { meal.MealRecipes.Remove(mealRecipeToRemove); } } MenuRecipe menuRecipeToRemove = menu.MenuRecipes.SingleOrDefault(mr => mr.RecipeId == recipeId); if (menuRecipeToRemove != null) { menu.MenuRecipes.Remove(menuRecipeToRemove); } Dictionary <int, Recipe> selectedRecipes = Utils.SelectedRecipes; selectedRecipes.Remove(recipeId); } CurrentMenu = menu; ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "setDirty", "setDirty();", true); RebindMenuRecipes(); RebindMealsDetails(); upSelectedRecipes.Update(); upMealsDetails.Update(); }
public IActionResult Create([FromBody] AddEditGetMenuVM menuInput) { if (ModelState.IsValid) { var addMenu = false; if (menuInput.MenuId == 0) { addMenu = true; } // Validate UserId, MenuId & RecipeId before writing to database if (_context.Users.FirstOrDefault(m => m.Id == menuInput.UserId) == null || _context.Recipes.FirstOrDefault(r => r.Id == menuInput.RecipeId) == null) { return(BadRequest()); } if (addMenu == false && _context.Menus.FirstOrDefault(m => m.Id == menuInput.MenuId) == null) { return(BadRequest()); } // end check for valid UserId, MenuId and RecipeId input // Clear current menu bit for user var clearCurrent = new Menu(); clearCurrent = _context.Menus.FirstOrDefault(m => m.UserId == menuInput.UserId && m.CurrentMenu == true); if (clearCurrent != null) { clearCurrent.CurrentMenu = false; _context.Menus.Update(clearCurrent); _context.SaveChanges(); } // If new menu add to Menus table & get MenuId var newMenu = new Menu(); if (addMenu == true) { newMenu.UserId = menuInput.UserId; newMenu.MenuName = menuInput.MenuName; newMenu.CurrentMenu = true; _context.Menus.Add(newMenu); _context.SaveChanges(); } else { var editMenu = new Menu(); editMenu = _context.Menus.FirstOrDefault(m => m.Id == menuInput.MenuId); editMenu.CurrentMenu = true; _context.Menus.Update(editMenu); _context.SaveChanges(); } // Store recipe in MenuRecipe table var newMenuRecipe = new MenuRecipe(); if (addMenu == true) { newMenuRecipe.MenuId = newMenu.Id; } else { newMenuRecipe.MenuId = menuInput.MenuId; } newMenuRecipe.RecipeId = menuInput.RecipeId; newMenuRecipe.MenuServings = menuInput.MenuServings; _context.MenuRecipe.Add(newMenuRecipe); _context.SaveChanges(); return(CreatedAtRoute("", new { id = newMenuRecipe.MenuId }, menuInput)); } else { return(BadRequest()); } }
protected void EditMenu(int menuId) { try { titleImg.ImageUrl = "~/Images/Header_EditMenu.png"; MyBuyList.Shared.Entities.Menu menu = BusinessFacade.Instance.GetMenuEx(menuId); if (menu != null) { if ((((BasePage)Page).UserType != 1) && (menu.UserId != ((BasePage)Page).UserId) && !(menu.IsPublic) || menu.IsDeleted) { AppEnv.MoveToDefaultPage(); } Dictionary <int, Recipe> selectedRecipes = Utils.SelectedRecipes; foreach (MenuRecipe mr in menu.MenuRecipes) { selectedRecipes.Add(mr.RecipeId, mr.Recipe); } if (selectedRecipes != null && selectedRecipes.Count != 0) { foreach (KeyValuePair <int, Recipe> r in selectedRecipes) { MenuRecipe menuRecipe = new MenuRecipe { RecipeId = r.Key, Recipe = r.Value, Menu = CurrentMenu }; bool containsRecipe = false; foreach (MenuRecipe mr in menu.MenuRecipes) { if (mr.RecipeId == r.Key) { containsRecipe = true; r.Value.Servings = mr.Recipe.Servings; MealRecipe mealRecipe = (from p in menu.Meals join p1 in mr.Recipe.MealRecipes on p.MealId equals p1.MealId where p.MenuId == menu.MenuId && p1.RecipeId == r.Key select new MealRecipe { RecipeId = r.Key, Servings = p1.Servings, Recipe = r.Value, MealId = p.MealId }).SingleOrDefault(); if (mealRecipe != null) { r.Value.ExpectedServings = mealRecipe.Servings; mr.Recipe.ExpectedServings = mealRecipe.Servings; } } } if (!containsRecipe) { menu.MenuRecipes.Add(menuRecipe); } } } bool isOneMeal = (menu.MenuTypeId == (int)MenuTypeEnum.OneMeal || menu.MenuTypeId == (int)MenuTypeEnum.QuickMenu); rbnCategoryOneMeal.Enabled = isOneMeal; rbnCategoryWeekly.Enabled = !isOneMeal; CurrentMenu = menu; RebindMenuRecipes(); RebindMenuDetails(); BindMenuCategories(); } else { AppEnv.MoveToDefaultPage(); } } catch (Exception) { } }
public static void AddToMenu_DnD(int recipeId, string mealSignature) { MyBuyList.Shared.Entities.Menu menu = HttpContext.Current.Session["currentMenu"] as MyBuyList.Shared.Entities.Menu; Meal meal = null; int[] mealIdentifiers = GetMealIdentifiers(mealSignature); int dayIndex = mealIdentifiers[0]; int mealTypeId = mealIdentifiers[1]; int courseTypeId = mealIdentifiers[2]; if (mealIdentifiers != null && mealIdentifiers.Length == 3) { if (menu.MenuTypeId == (int)MenuTypeEnum.QuickMenu) //only one meal in the menu { meal = menu.Meals.SingleOrDefault(me => me.MealTypeId == mealTypeId); } else if (menu.MenuTypeId == (int)MenuTypeEnum.OneMeal) { meal = menu.Meals.SingleOrDefault(me => me.CourseTypeId == courseTypeId); } else { meal = menu.Meals.SingleOrDefault(me => me.DayIndex == dayIndex && me.MealTypeId == mealTypeId); } if (meal == null) { meal = new Meal(); meal.MealId = 0; meal.CourseTypeId = courseTypeId; meal.DayIndex = dayIndex; meal.MealTypeId = mealTypeId; meal.CreatedDate = DateTime.Now; meal.ModifiedDate = DateTime.Now; menu.Meals.Add(meal); } //Page page = HttpContext.Current.Handler as Page; } MealRecipe mealRecipe = new MealRecipe(); MenuRecipe menuRec = menu.MenuRecipes.SingleOrDefault(mr => mr.RecipeId == recipeId); if (menuRec != null) { mealRecipe.Recipe = menuRec.Recipe; mealRecipe.Servings = menuRec.Recipe.Servings; mealRecipe.ExpectedServings = menuRec.Recipe.ExpectedServings; } MealRecipe sameMealRecipe = meal.MealRecipes.SingleOrDefault(smr => smr.RecipeId == mealRecipe.RecipeId); if (sameMealRecipe == null) { meal.MealRecipes.Add(mealRecipe); } HttpContext.Current.Session["currentMenu"] = menu; }
//note: the "detour" on the way to this method (through a JS function that clicks a hidden button) is neccessary because if this method //is called directly from within the "poping" panel, it forces "full" postback for some reason. In this way it is avoided, and selection //flow seems "smoother". protected void btnTmpOK_Click(object sender, EventArgs e) { MyBuyList.Shared.Entities.Menu menu = CurrentMenu; //get relevant meal, or create it if it doesn't exist. Meal meal; int? dayIndex = null, courseTypeId = null; int mealTypeId; switch ((MenuTypeEnum)menu.MenuTypeId) { case MenuTypeEnum.QuickMenu: mealTypeId = 4; courseTypeId = 0; meal = menu.Meals.SingleOrDefault(me => me.MealTypeId == mealTypeId); break; case MenuTypeEnum.OneMeal: courseTypeId = int.Parse(ddlChooseCourse.SelectedItem.Value); if (courseTypeId == -1) { return; } mealTypeId = 4; meal = menu.Meals.SingleOrDefault(me => me.CourseTypeId == courseTypeId); break; default: dayIndex = int.Parse(ddlChooseDay.SelectedItem.Value); mealTypeId = int.Parse(ddlChooseMeal.SelectedItem.Value); if (dayIndex == 0 || mealTypeId == 0) { return; } meal = menu.Meals.SingleOrDefault(me => me.DayIndex == dayIndex && me.MealTypeId == mealTypeId); break; } if (meal == null) { meal = new Meal { MealId = 0, CourseTypeId = courseTypeId, DayIndex = dayIndex, MealTypeId = mealTypeId, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; menu.Meals.Add(meal); } //get recipe id, create MealRecipe, and add to MealRecipes of the current / new meal. int recipeId; int servingsNum; bool succeeded = int.TryParse(hfRecipeId.Value, out recipeId); if (succeeded) { MealRecipe mealRecipe = new MealRecipe(); MenuRecipe menuRec = menu.MenuRecipes.SingleOrDefault(mr => mr.RecipeId == recipeId); if (menuRec != null) { mealRecipe.Recipe = menuRec.Recipe; int expectedServings; bool tryParse = int.TryParse(hfExpectedServings.Value, out expectedServings); if (tryParse) { mealRecipe.ExpectedServings = expectedServings; menuRec.Recipe.ExpectedServings = expectedServings; } } MealRecipe sameMealRecipe = meal.MealRecipes.SingleOrDefault(smr => smr.RecipeId == mealRecipe.RecipeId); if (sameMealRecipe == null) { meal.MealRecipes.Add(mealRecipe); } } //save menu changes and display changed menu CurrentMenu = menu; RebindMealsDetails(); upMealsDetails.Update(); RebindMenuRecipes(); upSelectedRecipes.Update(); }
public IActionResult Create([FromBody] AddEditRecipeVM recipeInput) //public IActionResult Post([FromBody] Object jsonRecipeInput) { //var jsonString = jsonRecipeInput.ToString(); //AddEditRecipeVM recipeInput = JsonConvert.DeserializeObject<AddEditRecipeVM>(jsonString); if (ModelState.IsValid) { // Validate data here before writing to database if (_context.Users.FirstOrDefault(u => u.Id == recipeInput.userRecipeFavorite.UserId) == null || _context.Users.FirstOrDefault(u => u.Id == recipeInput.recipe.OwnerId) == null) { return(NotFound()); } var editRecipe = false; List <MenuRecipe> menuRecipeEdits = new List <MenuRecipe>(); List <UserRecipeFavorite> userRecipeFavEdits = new List <UserRecipeFavorite>(); if (recipeInput.recipe.RecipeId != 0) { editRecipe = true; // Save list of MenuRecipe entries var tempMenuRecipes = from recipePtr in _context.MenuRecipe where recipePtr.RecipeId == recipeInput.recipe.RecipeId select recipePtr; menuRecipeEdits = tempMenuRecipes.ToList(); // Delete MenuRecipe entries _context.MenuRecipe.RemoveRange(_context.MenuRecipe.Where(m => m.RecipeId == recipeInput.recipe.RecipeId)); _context.SaveChanges(); // Delete StepIngredients entries var tempSteps = from stepPtr in _context.Steps where stepPtr.RecipeId == recipeInput.recipe.RecipeId select stepPtr; var delStepList = tempSteps.ToList(); foreach (Step delStepPtr in delStepList) { _context.StepIngredient.RemoveRange(_context.StepIngredient.Where(s => s.StepId == delStepPtr.Id)); } _context.SaveChanges(); // Delete RecipeKeyword entries _context.RecipeKeyword.RemoveRange(_context.RecipeKeyword.Where(r => r.RecipeId == recipeInput.recipe.RecipeId)); _context.SaveChanges(); // Save list of UserRecipeFavorite entries if recipe is shared var curRecipe = new Recipe(); curRecipe = _context.Recipes.FirstOrDefault(r => r.Id == recipeInput.recipe.RecipeId); var curRecipeShared = false; if (curRecipe != null) { curRecipeShared = curRecipe.Shared; } if (recipeInput.recipe.Shared == true && curRecipeShared == true) { var tempUserRecFav = from userRecipePtr in _context.UserRecipeFavorite where userRecipePtr.RecipeId == recipeInput.recipe.RecipeId && userRecipePtr.UserId != recipeInput.recipe.OwnerId select userRecipePtr; userRecipeFavEdits = tempUserRecFav.ToList(); } // Delete UserRecipeFavorite entries _context.UserRecipeFavorite.RemoveRange(_context.UserRecipeFavorite.Where(u => u.RecipeId == recipeInput.recipe.RecipeId)); _context.SaveChanges(); // Delete Steps entries foreach (Step delStepPtr in delStepList) { _context.Steps.RemoveRange(_context.Steps.Where(s => s.RecipeId == delStepPtr.RecipeId)); } _context.SaveChanges(); // Delete Recipes entry _context.Recipes.RemoveRange(_context.Recipes.Where(r => r.Id == recipeInput.recipe.RecipeId)); _context.SaveChanges(); } // Add Recipe table entry var tempRecipe = new Recipe(); tempRecipe.RecipeName = recipeInput.recipe.RecipeName; tempRecipe.Description = recipeInput.recipe.Description; tempRecipe.OwnerId = recipeInput.recipe.OwnerId; tempRecipe.Shared = recipeInput.recipe.Shared; tempRecipe.Notes = recipeInput.recipe.Notes; tempRecipe.MyRating = recipeInput.recipe.MyRating; tempRecipe.ShareRating = recipeInput.recipe.ShareRating; tempRecipe.NumShareRatings = recipeInput.recipe.NumShareRatings; tempRecipe.RecipePic = recipeInput.recipe.RecipePic; tempRecipe.PrepTime = recipeInput.recipe.PrepTime; tempRecipe.CookTime = recipeInput.recipe.CookTime; tempRecipe.RecipeServings = recipeInput.recipe.RecipeServings; tempRecipe.ServingSize = recipeInput.recipe.ServingSize; _context.Recipes.Add(tempRecipe); _context.SaveChanges(); // Add entry to UserRecipeFavorite join table var tempUserRecipeFavorite = new UserRecipeFavorite(); tempUserRecipeFavorite.UserId = recipeInput.userRecipeFavorite.UserId; tempUserRecipeFavorite.RecipeId = tempRecipe.Id; tempUserRecipeFavorite.Favorite = recipeInput.userRecipeFavorite.Favorite; _context.UserRecipeFavorite.Add(tempUserRecipeFavorite); _context.SaveChanges(); // Add steps to Steps table List <RecipeStepIngredientVM> tempRecipeStepIngredient = new List <RecipeStepIngredientVM>(); tempRecipeStepIngredient = recipeInput.RecipeStepIngredients; // Add each step to Steps table foreach (RecipeStepIngredientVM stepItem in tempRecipeStepIngredient) { var tempStepItem = new Step(); tempStepItem.RecipeId = tempRecipe.Id; tempStepItem.StepNumber = stepItem.StepNumber; tempStepItem.Instruction = stepItem.Instruction; _context.Steps.Add(tempStepItem); _context.SaveChanges(); // Add each ingredient to Ingredient and StepIngredient tables List <IngredientListVM> tempIngredList = new List <IngredientListVM>(); tempIngredList = stepItem.IngredientList; foreach (IngredientListVM ingredItem in tempIngredList) { var tempIngredId = 0; var tempIngred = new Ingredient(); tempIngred = _context.Ingredients.FirstOrDefault(i => i.IngredName.ToLower() == ingredItem.IngredName.ToLower()); if (tempIngred == null) { var newIngred = new Ingredient(); newIngred.IngredName = ingredItem.IngredName; _context.Ingredients.Add(newIngred); _context.SaveChanges(); tempIngredId = newIngred.Id; } else { tempIngredId = tempIngred.Id; } // end add ingredient name var tempStepIngred = new StepIngredient(); tempStepIngred.StepId = tempStepItem.Id; tempStepIngred.IngredientId = tempIngredId; tempStepIngred.IngredQty = ingredItem.IngredQty; tempStepIngred.IngredUnit = ingredItem.IngredUnit; _context.StepIngredient.Add(tempStepIngred); _context.SaveChanges(); } // end add ingredItem loop } // end add stepItem loop // Add searchwords to Keywords table List <Keyword> keywordList = new List <Keyword>(); keywordList = recipeInput.Keywords; if (keywordList != null) { foreach (Keyword tempKeyword in keywordList) { var tempKeywordId = 0; var tempSearchWord = new Keyword(); tempSearchWord = _context.Keywords.FirstOrDefault(k => k.SearchWord.ToLower() == tempKeyword.SearchWord.ToLower()); if (tempSearchWord == null) { var newKeyword = new Keyword(); newKeyword.SearchWord = tempKeyword.SearchWord; _context.Keywords.Add(newKeyword); _context.SaveChanges(); tempKeywordId = newKeyword.Id; } else { tempKeywordId = tempSearchWord.Id; } // Add entry to RecipeKeyword join table var tempRecipeKeyword = new RecipeKeyword(); tempRecipeKeyword.RecipeId = tempRecipe.Id; tempRecipeKeyword.KeywordId = tempKeywordId; _context.RecipeKeyword.Add(tempRecipeKeyword); _context.SaveChanges(); } } if (editRecipe == true) { // Re-enter MenuRecipe entries with new RecipeId foreach (MenuRecipe recipePtr in menuRecipeEdits) { var tempMenuRecipe = new MenuRecipe(); tempMenuRecipe.MenuId = recipePtr.MenuId; tempMenuRecipe.RecipeId = tempRecipe.Id; tempMenuRecipe.MenuServings = recipePtr.MenuServings; _context.MenuRecipe.Add(tempMenuRecipe); } _context.SaveChanges(); // Re-enter UserRecipeFavorites entries with new RecipeId for shared recipes foreach (UserRecipeFavorite userRecipePtr in userRecipeFavEdits) { var tempUserRecipe = new UserRecipeFavorite(); tempUserRecipe.UserId = userRecipePtr.UserId; tempUserRecipe.RecipeId = tempRecipe.Id; tempUserRecipe.Favorite = userRecipePtr.Favorite; _context.UserRecipeFavorite.Add(tempUserRecipe); } _context.SaveChanges(); } return(CreatedAtRoute("", new { id = tempRecipe.Id }, recipeInput)); } return(BadRequest()); }