// GET: /Administration/Recipes/Edit/5
        //[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id)
        {
            //ViewData["RecipeItemID"] = Request.Form["recipeItems.index"];
            Recipe recipeForEdit = db.Recipes.GetById(id);

            this.editRecipeVM = ParseRecipeModelToRecipeVM(recipeForEdit);
            return(View(this.editRecipeVM));
        }
        public ActionResult Edit(AdminRecipeViewModel recipeEditModel)
        {
            //if (ModelState.IsValid)
            //{

            //}
            #region Delete old RecipeItems
            var recipe = this.db.Recipes.All()
                         .Include(r => r.Categories)
                         .Include(r => r.RecipeItems)
                         .FirstOrDefault(r => r.RecipeID == recipeEditModel.RecipeID);
            var recipeItems = recipe.RecipeItems;
            foreach (var recipeItem in recipeItems.ToList())
            {
                foreach (var step in recipeItem.Steps.ToList())
                {
                    this.db.Steps.Delete(step);
                }
                foreach (var ingredient in recipeItem.RecipeItems_Ingredients.ToList())
                {
                    this.db.RecipeItems_Ingredients.Delete(ingredient);
                }
                this.db.RecipeItems.Delete(recipeItem);
            }

            db.SaveChanges();
            #endregion
            Recipe recipeForEdit = this.db.Recipes.GetById(recipeEditModel.RecipeID);
            recipeForEdit = ParseRecipeVMToRecipeModel_Update(recipeForEdit, recipeEditModel);

            this.db.Recipes.Update(recipeForEdit);
            int result = this.db.SaveChanges();



            if (result != 0)
            {
                return(RedirectToAction("Details", "Recipes", new { recipeID = recipeEditModel.RecipeID, title = recipeEditModel.Title.Replace(' ', '-'), area = "" }));
            }

            //ViewData["RecipeItemID"] = Request.Form["recipeItems.index"];
            recipeEditModel.ParentCategories   = db.Categories.AllParentCategories();
            recipeEditModel.ChildrenCategories = db.Categories.AllChildrenCategories();
            recipeEditModel.PrepTimeHours      = this.hours;
            recipeEditModel.PrepTimeMinutes    = this.minutes;
            recipeEditModel.CookTimeHours      = this.hours;
            recipeEditModel.CookTimeMinutes    = this.minutes;
            recipeEditModel.Serves             = this.servesArray;
            recipeEditModel.Rating             = this.rating;
            recipeEditModel.Sources            = this.db.Sources.All();
            recipeEditModel.Recommendation     = this.recommendationArray;
            return(View(recipeEditModel));
        }
Пример #3
0
        public async Task EditByAdminShouldChangeRecipe()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()).Options;

            AutoMapperConfig.RegisterMappings(Assembly.Load("CookingBook.Web.ViewModels"));
            var dbContext             = new ApplicationDbContext(options);
            var recipeRepo            = new EfDeletableEntityRepository <Recipe>(dbContext);
            var nutritionRepo         = new EfDeletableEntityRepository <NutritionValue>(dbContext);
            var productRepo           = new EfDeletableEntityRepository <Product>(dbContext);
            var userRepo              = new EfDeletableEntityRepository <ApplicationUser>(dbContext);
            var service               = new RecipesService(recipeRepo, nutritionRepo, productRepo, userRepo);
            var category              = new Category();
            var nutrValue             = new NutritionValue();
            var user                  = new ApplicationUser();
            var prod                  = new Collection <RecipeByIdProductsViewModel>();
            var recipeCreateViewModel = new RecipeCreateViewModel
            {
                CategoryId     = 1,
                CookProcedure  = "cookProc",
                Photo          = "photo",
                Serving        = 1,
                Title          = "addNew",
                CookTime       = 2,
                NutritionValue = new RecipeCreateNutritionValuesViewModel
                {
                    Calories = 1, Carbohydrates = 1, Fats = 1, Fiber = 1, Protein = 1, Salt = 1, Sugar = 1
                },
                Products = new List <RecipeCreateProductsViewModel>(),
            };
            string       userId       = "trayan";
            StringValues sv           = new StringValues("one");
            StringValues sk           = new StringValues("1");
            var          recipeResult = await service.CreateAsync(recipeCreateViewModel, userId, sv, sk);

            var model = new AdminRecipeViewModel
            {
                Id            = recipeResult,
                CategoryId    = 5,
                CookProcedure = "five",
                CookTime      = 5,
                Photo         = "fifthPhoto",
                Serving       = 5,
                Title         = "fifthEdit",
            };

            await service.EditByAdmin(model);

            Assert.Equal(5, dbContext.Recipes.FirstOrDefault(x => x.Id == recipeResult).CategoryId);
        }
Пример #4
0
        public async Task EditByAdmin(AdminRecipeViewModel model)
        {
            var recipe = await this.recipeRepository.All().FirstOrDefaultAsync(x => x.Id == model.Id);

            recipe.CategoryId    = model.CategoryId;
            recipe.CookProcedure = model.SanitizedCookProcedure;
            recipe.Title         = model.Title;
            recipe.CookTime      = model.CookTime;
            recipe.Photo         = model.Photo;
            recipe.Serving       = model.Serving;
            recipe.ModifiedOn    = DateTime.UtcNow;
            this.recipeRepository.Update(recipe);

            await this.recipeRepository.SaveChangesAsync();
        }
 public ActionResult AddSection(AdminRecipeViewModel recipeModel)
 {
     if (Request.IsAjaxRequest())
     {
         RecipeItem recipeItem = new RecipeItem();
         recipeItem.Steps = new List <Step>();
         //recipeItem.Steps.Add(new Step() { Description = "bbb" });
         newRecipeVM.RecipeItems.Add(recipeItem);
         return(PartialView("_RecipeItemEditor", recipeItem));
     }
     else
     {
         //return RedirectToAction("Create");
         //return PartialView("_StepPartial", newStep);
         return(View(@"~/Areas/Administration/Views/AdminRecipes/Create.cshtml", this.newRecipeVM));
     }
 }
        public ActionResult Create(AdminRecipeViewModel recipeModel)
        {
            //HttpPostedFileBase img = recipeModel.Image;
            //UploadRecipeImage(recipeModel.Image,recipeModel.Title);
            if (ModelState.IsValid)
            {
                Recipe newRecipe = ParseRecipeVMToRecipeModel(recipeModel);

                this.db.Recipes.Add(newRecipe);
                int result = this.db.SaveChanges();

                if (result != 0)
                {
                    return(RedirectToAction("Index"));
                }
            }
            this.newRecipeVM.RecipeItems = recipeModel.RecipeItems;
            return(View(this.newRecipeVM));
        }
        public AdminRecipesController()
        {
            this.hours = new int[]
            {
                0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
            };
            this.minutes = new int[]
            {
                0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55
            };
            this.servesArray = new int[]
            {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
            };
            this.rating = new int[]
            {
                1, 2, 3, 4, 5
            };

            this.recommendationArray = new string[]
            {
                "Да", "Не"
            };

            this.newRecipeVM = new AdminRecipeViewModel();
            //newRecipeVM.Recipe = new Recipe();
            //List<Step> stepsList = new List<Step>();
            //stepsList.Add(new Step());
            //List<RecipeItems_Ingredients> ingredientsList = new List<RecipeItems_Ingredients>();
            //ingredientsList.Add(new RecipeItems_Ingredients());
            //newRecipeVM.Recipe.RecipeItems.Add(new RecipeItem() { Steps = stepsList, RecipeItems_Ingredients = ingredientsList });
            //newRecipeVM.Recipe.Date = DateTime.Now;
            //newRecipeVM.Title = "";
            newRecipeVM.ImageURL                = @"http://res.cloudinary.com/hqz5ohs1v/image/upload/v1413825708/null_image.png";
            newRecipeVM.ParentCategories        = db.Categories.AllParentCategories();
            newRecipeVM.ChildrenCategories      = db.Categories.AllChildrenCategories();
            newRecipeVM.PrepTimeHours           = this.hours;
            newRecipeVM.SelectedPrepTimeHours   = -1;
            newRecipeVM.PrepTimeMinutes         = this.minutes;
            newRecipeVM.SelectedPrepTimeMinutes = -1;
            newRecipeVM.CookTimeHours           = this.hours;
            newRecipeVM.SelectedCookTimeHours   = -1;
            newRecipeVM.CookTimeMinutes         = this.minutes;
            newRecipeVM.SelectedCookTimeMinutes = -1;
            newRecipeVM.Serves                 = this.servesArray;
            newRecipeVM.SelectedServes         = 0;
            newRecipeVM.Rating                 = this.rating;
            newRecipeVM.SelectedRating         = 0;
            newRecipeVM.Sources                = this.db.Sources.All();
            newRecipeVM.SelectedSource         = 0;
            newRecipeVM.Recommendation         = this.recommendationArray.ToList();
            newRecipeVM.SelectedRecommendation = "--- избери дали да е препоръчана ---";
            newRecipeVM.PublishedDate          = DateTime.Now;


            ViewBag.UnitsList       = this.db.Units.All().ToList();
            ViewBag.IngredientsList = this.db.Ingredients.All().ToList();

            RecipeItem recipeItem = new RecipeItem();

            recipeItem.Steps = new List <Step>();
            recipeItem.RecipeItems_Ingredients = new List <RecipeItems_Ingredients>();
            newRecipeVM.RecipeItems.Add(recipeItem);
        }
        //For POST Edit Action
        private Recipe ParseRecipeVMToRecipeModel_Update(Recipe recipeModel, AdminRecipeViewModel recipeVM)
        {
            Recipe            recipeForEdit         = recipeModel;
            ImageUploadResult recipeImgUploadResult = new ImageUploadResult();
            //var recipeForEdit = this.db.Recipes.All()
            //            .Include(r => r.Categories)
            //            .Include(r => r.RecipeItems)
            //            .FirstOrDefault(r => r.RecipeID == recipeVM.RecipeID);
            HMLToRTFConverter converter = new HMLToRTFConverter();

            recipeForEdit.Title = recipeVM.Title;

            //recipeForEdit.ImageURL = "null_image.png";
            Category newRecipeParentCategory = this.db.Categories.GetById(recipeVM.SelectedParentCategory);

            recipeForEdit.Categories.Clear();
            recipeForEdit.Categories.Add(newRecipeParentCategory);
            Category newRecipeChildrenCategory = null;

            if (recipeVM.SelectedChildrenCategory != null)
            {
                newRecipeChildrenCategory = this.db.Categories.GetById((int)(recipeVM.SelectedChildrenCategory));
                recipeForEdit.Categories.Add(newRecipeChildrenCategory);
            }
            if (recipeVM.Image != null && (recipeVM.Image.FileName != "null_image.png" || recipeVM.Image.FileName != "null_image"))
            {
                if (newRecipeChildrenCategory == null)
                {
                    DeleteRecipeImage(recipeVM.ImageURL);
                    recipeImgUploadResult = UploadRecipeImage(recipeVM.Image, recipeVM.Title, newRecipeParentCategory.Name, null);
                }
                else
                {
                    DeleteRecipeImage(recipeVM.ImageURL);
                    recipeImgUploadResult = UploadRecipeImage(recipeVM.Image, recipeVM.Title, newRecipeParentCategory.Name, newRecipeChildrenCategory.Name);
                }
                recipeForEdit.ImageVersion = "v" + recipeImgUploadResult.Version;
                recipeForEdit.ImageURL     = "http://res.cloudinary.com" + recipeImgUploadResult.Uri.AbsolutePath;
                //newRecipe.ImageURL = recipeVM.Title.Replace(" ", "-") + ".jpg";
            }
            else
            {
                RenameResult renameResult = null;
                if (newRecipeChildrenCategory != null)
                {
                    renameResult = RenameRecipeImage(recipeVM.ImageURL, newRecipeParentCategory.Name, newRecipeChildrenCategory.Name);
                }
                else
                {
                    renameResult = RenameRecipeImage(recipeVM.ImageURL, newRecipeParentCategory.Name);
                }
                if (renameResult != null)
                {
                    recipeForEdit.ImageURL = HttpUtility.UrlDecode(renameResult.Url);
                }
            }
            recipeForEdit.PreparationTime = recipeVM.SelectedPrepTimeHours * 60 + recipeVM.SelectedPrepTimeMinutes;
            recipeForEdit.CookingTime     = recipeVM.SelectedCookTimeHours * 60 + recipeVM.SelectedCookTimeMinutes;
            recipeForEdit.Serves          = recipeVM.SelectedServes;
            recipeForEdit.Rating          = recipeVM.SelectedRating;
            recipeForEdit.Source          = this.db.Sources.GetById(recipeVM.SelectedSource);
            if (recipeVM.SelectedRecommendation == "Да")
            {
                recipeForEdit.Recommended = (bool?)true;
            }
            //if (recipeVM.SelectedRecommendation == "Не")
            else
            {
                recipeForEdit.Recommended = (bool?)false;
            }
            recipeForEdit.Date        = recipeVM.PublishedDate;
            recipeForEdit.Description = converter.ConvertHTMLToRTF(recipeVM.Description);
            //recipeForEdit.RecipeItems = recipeVM.RecipeItems;
            foreach (var recipeItem in recipeVM.RecipeItems)
            {
                RecipeItem newRecipeItem = new RecipeItem();
                newRecipeItem.RecipeItemName = recipeItem.RecipeItemName;
                foreach (var recipeItem_ingredient in recipeItem.RecipeItems_Ingredients)
                {
                    RecipeItems_Ingredients newRecipeItem_ingredient = new RecipeItems_Ingredients();
                    Unit       newUnit       = this.db.Units.GetById(recipeItem_ingredient.Unit.UnitID);
                    Ingredient newIngredient = this.db.Ingredients.GetById(recipeItem_ingredient.Ingredient.IngredientID);
                    newRecipeItem_ingredient.Quantity   = recipeItem_ingredient.Quantity;
                    newRecipeItem_ingredient.Unit       = newUnit;
                    newRecipeItem_ingredient.Ingredient = newIngredient;
                    newRecipeItem.RecipeItems_Ingredients.Add(newRecipeItem_ingredient);
                }
                foreach (var step in recipeItem.Steps)
                {
                    newRecipeItem.Steps.Add(step);
                }

                recipeForEdit.RecipeItems.Add(newRecipeItem);
            }

            //newRecipe.RecipeItems = recipeVM.RecipeItems;

            return(recipeForEdit);
        }
        //For GET Edit Action
        private AdminRecipeViewModel ParseRecipeModelToRecipeVM(Recipe recipeForEdit)
        {
            AdminRecipeViewModel editRecipeVM = new AdminRecipeViewModel();

            RTFToHTMLConverter converter = new RTFToHTMLConverter();

            editRecipeVM.RecipeID                 = recipeForEdit.RecipeID;
            editRecipeVM.Title                    = recipeForEdit.Title;
            editRecipeVM.ImageURL                 = recipeForEdit.ImageURL;
            editRecipeVM.ParentCategories         = db.Categories.AllParentCategories();
            editRecipeVM.SelectedParentCategory   = recipeForEdit.Categories.Where(cat => cat.ParentCategoryID == null).Select(cat => cat.CategoryID).FirstOrDefault();
            editRecipeVM.ChildrenCategories       = db.Categories.AllChildrenCategories();
            editRecipeVM.SelectedChildrenCategory = recipeForEdit.Categories.Where(cat => cat.ParentCategoryID != null).Select(cat => cat.CategoryID).FirstOrDefault();
            editRecipeVM.PrepTimeHours            = this.hours.ToList();
            editRecipeVM.SelectedPrepTimeHours    = (int)recipeForEdit.PreparationTime / 60;
            editRecipeVM.PrepTimeMinutes          = this.minutes;
            editRecipeVM.SelectedPrepTimeMinutes  = (int)recipeForEdit.PreparationTime % 60;
            editRecipeVM.CookTimeHours            = this.hours;
            editRecipeVM.SelectedCookTimeHours    = (int)recipeForEdit.CookingTime / 60;
            editRecipeVM.CookTimeMinutes          = this.minutes;
            editRecipeVM.SelectedCookTimeMinutes  = (int)recipeForEdit.CookingTime % 60;
            editRecipeVM.Serves                   = this.servesArray;
            editRecipeVM.SelectedServes           = (int)recipeForEdit.Serves;
            editRecipeVM.Rating                   = this.rating;
            editRecipeVM.SelectedRating           = (int)recipeForEdit.Rating;
            editRecipeVM.Sources                  = this.db.Sources.All();
            editRecipeVM.SelectedSource           = recipeForEdit.Source.SourceID;
            editRecipeVM.Recommendation           = this.recommendationArray;
            //editRecipeVM.SelectedRecommendation = recipeForEdit.Recommended;
            if (recipeForEdit.Recommended == true)
            {
                editRecipeVM.SelectedRecommendation = "Да";
            }
            else
            {
                editRecipeVM.SelectedRecommendation = "Не";
            }
            editRecipeVM.PublishedDate = (DateTime)recipeForEdit.Date;
            editRecipeVM.Description   = RtfHelper.PlainText(recipeForEdit.Description);
            //editRecipeVM.RecipeItems = recipeForEdit.RecipeItems.ToList();

            foreach (var recipeItem in recipeForEdit.RecipeItems)
            {
                RecipeItem newRecipeItem = new RecipeItem();
                newRecipeItem.RecipeItemName = recipeItem.RecipeItemName;
                foreach (var recipeItem_ingredient in recipeItem.RecipeItems_Ingredients)
                {
                    RecipeItems_Ingredients newRecipeItem_ingredient = new RecipeItems_Ingredients();
                    Unit       newUnit       = this.db.Units.GetById(recipeItem_ingredient.Unit.UnitID);
                    Ingredient newIngredient = this.db.Ingredients.GetById(recipeItem_ingredient.Ingredient.IngredientID);
                    newRecipeItem_ingredient.Quantity   = recipeItem_ingredient.Quantity;
                    newRecipeItem_ingredient.Unit       = newUnit;
                    newRecipeItem_ingredient.Ingredient = newIngredient;
                    newRecipeItem.RecipeItems_Ingredients.Add(newRecipeItem_ingredient);
                }
                foreach (var step in recipeItem.Steps)
                {
                    newRecipeItem.Steps.Add(step);
                }

                editRecipeVM.RecipeItems.Add(newRecipeItem);
            }

            return(editRecipeVM);
        }
Пример #10
0
        //For Create Action
        private Recipe ParseRecipeVMToRecipeModel(AdminRecipeViewModel recipeVM)
        {
            Recipe            newRecipe             = new Recipe();
            HMLToRTFConverter converter             = new HMLToRTFConverter();
            ImageUploadResult recipeImgUploadResult = new ImageUploadResult();

            newRecipe.Title = recipeVM.Title;
            Category newRecipeParentCategory = this.db.Categories.GetById(recipeVM.SelectedParentCategory);

            newRecipe.Categories.Add(newRecipeParentCategory);
            Category newRecipeChildrenCategory = null;

            if (recipeVM.SelectedChildrenCategory != null)
            {
                newRecipeChildrenCategory = this.db.Categories.GetById((int)(recipeVM.SelectedChildrenCategory));
                newRecipe.Categories.Add(newRecipeChildrenCategory);
            }
            if ((recipeVM.Image != null && (recipeVM.Image.FileName != "null_image.png" || recipeVM.Image.FileName != "null_image")))
            {
                if (newRecipeChildrenCategory == null)
                {
                    recipeImgUploadResult = UploadRecipeImage(recipeVM.Image, recipeVM.Title, newRecipeParentCategory.Name, null);
                }
                else
                {
                    recipeImgUploadResult = UploadRecipeImage(recipeVM.Image, recipeVM.Title, newRecipeParentCategory.Name, newRecipeChildrenCategory.Name);
                }
                newRecipe.ImageVersion = "v" + recipeImgUploadResult.Version;
                newRecipe.ImageURL     = "http://res.cloudinary.com/" + recipeImgUploadResult.Uri.AbsolutePath;
                //newRecipe.ImageURL = recipeVM.Title.Replace(" ", "-") + ".jpg";
            }
            else
            {
                newRecipe.ImageURL = "http://res.cloudinary.com/hqz5ohs1v/image/upload/v1413825708/null_image.png";
            }
            newRecipe.PreparationTime = recipeVM.SelectedPrepTimeHours * 60 + recipeVM.SelectedPrepTimeMinutes;
            newRecipe.CookingTime     = recipeVM.SelectedCookTimeHours * 60 + recipeVM.SelectedCookTimeMinutes;
            newRecipe.Serves          = recipeVM.SelectedServes;
            newRecipe.Rating          = recipeVM.SelectedRating;
            newRecipe.Source          = this.db.Sources.GetById(recipeVM.SelectedSource);
            if (recipeVM.SelectedRecommendation == "Да")
            {
                newRecipe.Recommended = true;
            }
            //if (recipeVM.SelectedRecommendation == "Не")
            else
            {
                newRecipe.Recommended = false;
            }
            DateTime dt = recipeVM.PublishedDate;

            dt.AddHours(DateTime.Now.Hour);
            dt.AddMinutes(DateTime.Now.Minute);
            dt.AddSeconds(DateTime.Now.Second);
            newRecipe.Date = dt;
            //newRecipe.Date = recipeVM.PublishedDate;
            newRecipe.Description   = converter.ConvertHTMLToRTF(recipeVM.Description);
            newRecipe.NumberOfHits  = 1;
            newRecipe.NumberOfLikes = 1;

            foreach (var recipeItem in recipeVM.RecipeItems)
            {
                RecipeItem newRecipeItem = new RecipeItem();
                newRecipeItem.RecipeItemName = recipeItem.RecipeItemName;
                foreach (var recipeItem_ingredient in recipeItem.RecipeItems_Ingredients)
                {
                    RecipeItems_Ingredients newRecipeItem_ingredient = new RecipeItems_Ingredients();
                    Unit       newUnit       = this.db.Units.GetById(recipeItem_ingredient.Unit.UnitID);
                    Ingredient newIngredient = this.db.Ingredients.GetById(recipeItem_ingredient.Ingredient.IngredientID);
                    newRecipeItem_ingredient.Quantity   = recipeItem_ingredient.Quantity;
                    newRecipeItem_ingredient.Unit       = newUnit;
                    newRecipeItem_ingredient.Ingredient = newIngredient;
                    newRecipeItem.RecipeItems_Ingredients.Add(newRecipeItem_ingredient);
                }
                foreach (var step in recipeItem.Steps)
                {
                    newRecipeItem.Steps.Add(step);
                }

                newRecipe.RecipeItems.Add(newRecipeItem);
            }

            //newRecipe.RecipeItems = recipeVM.RecipeItems;

            return(newRecipe);
        }
Пример #11
0
        public async Task <IActionResult> EditById(AdminRecipeViewModel recipe)
        {
            await this.recipesService.EditByAdmin(recipe);

            return(this.Redirect($"/Administration/Main"));
        }