Esempio n. 1
0
        // GET: Tests/Edit/5
        public ActionResult Edit(int id)
        {
            Test test = _testService.GetTest(id);
            var existingCategoriesWithCount =
                _testService.GetQuestionCategoriesWithCounts(id);
            //Test test = _testRepository.GetTestByID(id); - repo
            //var existingCategoriesWithCount = _questionCategoryRepository.GetQuestionCategoryWithQuestionCount(id); - repo

            TestWithQuestionCategoryCountsVm vm = new TestWithQuestionCategoryCountsVm();
            vm.ID = test.ID;
            vm.TestName = test.TestName;
            vm.TestDescription = test.TestDescription;
            vm.QuestionCategoriesWithCounts = new List<QuestionCategoryWithCountVm>();

            existingCategoriesWithCount.Where(i=>i.QuestionCategory != null).ForEach(x=>vm.QuestionCategoriesWithCounts.Add(new QuestionCategoryWithCountVm
            {
                CategoryName = x.QuestionCategory.CategoryName,
                TestID = x.QuestionCategory.TestID,
                ID = x.QuestionCategory.ID,
                Count = x.Count
            }));

            var node = SiteMaps.Current.CurrentNode;
            if (node != null)
            {
                node.ParentNode.Title = vm.TestName;
            }

            if (vm.ID == 0)
            {
                return HttpNotFound();
            }
            return View(vm);
        }
Esempio n. 2
0
        public ActionResult EditPost(int id, string testName, string testDescription, IEnumerable<QuestionCategoryWithCountVm> questionCategoriesWithCounts)
        {
            //var testToUpdate = db.Tests.Include(q => q.QuestionCategories).SingleOrDefault(x => x.ID == id);
            //var testToUpdate = _testRepository.GetTestByID(id);
            var testToUpdate = _testService.GetTest(id);
            testToUpdate.TestName = testName;
            testToUpdate.TestDescription = testDescription;
            _testService.Update(testToUpdate);
            //_testRepository.UpdateTest(testToUpdate);
            //db.Entry(testToUpdate).State = EntityState.Modified;

            var existingCategories = testToUpdate.QuestionCategories;

            var vm = new TestWithQuestionCategoryCountsVm();
            vm.ID = id;
            vm.QuestionCategoriesWithCounts = questionCategoriesWithCounts != null ? questionCategoriesWithCounts.ToList() : new List<QuestionCategoryWithCountVm>();

            var node = SiteMaps.Current.CurrentNode;
            if (node != null)
            {
                node.ParentNode.Title = vm.TestName;
            }

            if (ModelState.IsValid)
            {
                if (TryUpdateModel(vm, "", new string[] { "TestName", "TestDescription", "QuestionCategoriesWithCounts" }))
                {

                    List<QuestionCategory> updatedCategories = new List<QuestionCategory>();
                    questionCategoriesWithCounts.ForEach(x => updatedCategories.Add(new QuestionCategory { ID = x.ID, TestID = x.TestID, CategoryName = x.CategoryName }));

                    bool errors = false;

                    var deletedCategories = questionCategoriesWithCounts != null ? existingCategories.ExceptComparison(updatedCategories, cat => cat.ID) : existingCategories;

                    foreach (QuestionCategory deletedCat in deletedCategories.ToList())
                    {
                        var catForDeletion = new QuestionCategoryWithCountVm
                        {
                            CategoryName = deletedCat.CategoryName,
                            ID = deletedCat.ID,
                            TestID = deletedCat.TestID
                        };
                        try
                        {
                            _testService.DeleteQuestionCateogry(deletedCat.ID);
                            //_questionCategoryRepository.DeleteQuestionCategory(deletedCat.ID);
                            //db.Entry(deletedCat).State = EntityState.Deleted;
                            //db.SaveChanges();
                        }
                        catch (DataException)
                        {
                            vm.QuestionCategoriesWithCounts.Add(catForDeletion);
                            errors = true;
                            ModelState.AddModelError(deletedCat.CategoryName,
                                "Questions exist with this category, you must update them to use a different category before you can delete it.");
                        }
                    }

                    var addeddCategories = updatedCategories.ExceptComparison(existingCategories, e => e.ID);
                    var modifiedCategories = updatedCategories.ExceptComparison(addeddCategories, f => f.ID);

                    foreach (QuestionCategory category in modifiedCategories)
                    {
                        var existingCat = _testService.GetQuestionCategory(id);
                        //var existingCat = _questionCategoryRepository.GetQuestionCategoryByID(category.ID);
                        if (existingCat != null)
                        {
                            if (!String.IsNullOrEmpty(category.CategoryName))
                            {
                                existingCat.CategoryName = category.CategoryName;
                                _testService.UpdateQuestionCategory(existingCat);
                                //_questionCategoryRepository.UpdateQuestionCategory(existingCat);
                                //var catEntry = db.Entry(existingCat);
                                //catEntry.CurrentValues.SetValues(category);
                            }
                            else
                            {
                                errors = true;
                                ModelState.AddModelError("cat-"+category.ID,
                                    "You must specify a category name.");
                            }
                        }
                    }

                    foreach (QuestionCategory category in addeddCategories)
                    {
                        if (!String.IsNullOrEmpty(category.CategoryName))
                        {
                            _testService.CreateQuestionCategory(category);
                            //_questionCategoryRepository.InsertQuestionCategory(category);
                            //db.Entry(category).State = EntityState.Added;
                        }
                        else
                        {
                            errors = true;
                            ModelState.AddModelError("AddedCategoryError",
                                    "You must specify a category name.");
                        }
                    }

                    try
                    {
                        //_questionCategoryRepository.Save();
                        //_testRepository.Save();
                    }
                    catch (DataException dex)
                    {
                        errors = true;
                        ModelState.AddModelError(dex.Message, "Unable to save changes. Try again.");
                    }

                    if (errors)
                    {
                        return View(vm);
                    }
                    else
                    {
                        return RedirectToAction("Index");
                    }

                }
            }
            vm.TestDescription = testDescription;
            vm.TestName = testName;
            return View(vm);
        }
Esempio n. 3
0
        // GET: Tests/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            var existingCategoriesWithCount = (from test in db.Tests
                                               select test into t
                                               from questionCategory in t.QuestionCategories.DefaultIfEmpty()
                                               let summedCount = (from question in db.Questions
                                                                  where (question.QuestionCategory.ID == questionCategory.ID)
                                                                  select question.ID).Count()
                                               where t.ID == id
                                               select new { t, questionCategory, summedCount }).ToList();

            TestWithQuestionCategoryCountsVm vm = new TestWithQuestionCategoryCountsVm();
            vm.ID = existingCategoriesWithCount.First().t.ID;
            vm.TestName = existingCategoriesWithCount.First().t.TestName;
            vm.TestDescription = existingCategoriesWithCount.First().t.TestDescription;
            vm.QuestionCategoriesWithCounts = new List<QuestionCategoryWithCountVm>();

            existingCategoriesWithCount.Where(i=>i.questionCategory!=null).ForEach(x=>vm.QuestionCategoriesWithCounts.Add(new QuestionCategoryWithCountVm
            {
                CategoryName = x.questionCategory.CategoryName,
                TestID = x.questionCategory.TestID,
                ID = x.questionCategory.ID,
                Count = x.summedCount
            }));

            var node = SiteMaps.Current.CurrentNode;
            if (node != null)
            {
                node.ParentNode.Title = vm.TestName;
            }

            if (vm.ID == 0)
            {
                return HttpNotFound();
            }
            return View(vm);
        }