public new void Update(ExamCore editedExam) { var questionsToRemove = getQuestionsToRemove(editedExam).ToList(); var questionsToEdit = getQuestionsToEdit(editedExam).ToList(); var questionsToAdd = getQuestionsToAdd(editedExam).ToList(); _context.Questions.RemoveRange(questionsToRemove); foreach (var questionToAdd in questionsToAdd) { AddQuestionToExam(editedExam, questionToAdd); } foreach (var questionToEdit in questionsToEdit) { var answersToRemove = getAnswersToRemove(questionToEdit).ToList(); var answersToEdit = getAnswersToEdit(questionToEdit).ToList(); var answersToAdd = getAnswersToAdd(questionToEdit).ToList(); _context.Answer.RemoveRange(answersToRemove); foreach (var answerToAdd in answersToAdd) { _questionService.AddAnswerToQuestion(questionToEdit, answerToAdd); } foreach (var answerToEdit in answersToEdit) { _answerService.Update(answerToEdit); } _questionService.Update(questionToEdit); } _context.Exams.AddOrUpdate(editedExam); _context.SaveChanges(); }
public ActionResult SaveAsyncQuestion(string examID, string questionID, AsyncEditedDataViewModel questionData, List <AsyncEditedDataViewModel> answersData) { if (int.TryParse(questionID, out int questionIntID)) { var editedQuestion = _questionService.GetByID(questionIntID); if (questionData != null && questionData.oldValue != null && questionData.newValue != null) { editedQuestion.QuestionText = questionData.newValue; } if (questionData != null && questionData.secondNewValue != null && questionData.secondNewValue == "true") { _questionService.Delete(editedQuestion); return(Json( new { success = true, responseText = "Question has been successfuly deleted!", deleted = true }, JsonRequestBehavior.AllowGet)); } var editedAnswers = new List <Answer>(); var addedAnswers = new List <Answer>(); if (answersData != null && answersData.Any()) { foreach (var answerData in answersData) { var editedAnswer = editedQuestion.Answers.Where(x => x.TextAnswer == answerData.oldValue).FirstOrDefault(); if (editedAnswer != null) { editedAnswer.TextAnswer = answerData.newValue; editedAnswer.IfCorrect = answerData.secondNewValue == "true" ? true : false; editedAnswers.Add(editedAnswer); } else { var addedAnswer = new Answer() { IfCorrect = answerData.secondNewValue == "true" ? true : false, TextAnswer = answerData.newValue }; _questionService.AddAnswerToQuestion(questionIntID, addedAnswer); addedAnswers.Add(addedAnswer); } } var allAnswers = _questionService.GetByID(questionIntID).Answers.ToList(); var deletedAnswers = allAnswers.Except(editedAnswers).ToList(); deletedAnswers = deletedAnswers.Except(addedAnswers).ToList(); foreach (var deletedAnswerr in deletedAnswers) { _answerService.Delete(deletedAnswerr.Id); } _questionService.Update(editedQuestion); } var returnedAnswers = editedAnswers.ToList(); if (addedAnswers.Any()) { returnedAnswers = returnedAnswers.Concat(addedAnswers.ToList()).ToList(); } return(Json( new { success = true, responseText = "Questions have been successfuly updated!", data = returnedAnswers.Select(x => new { TextAnswer = x.TextAnswer, IfCorrect = x.IfCorrect }).ToList(), newQuestionID = editedQuestion.Id }, JsonRequestBehavior.AllowGet)); } else { if (int.TryParse(examID, out int examIntID)) { var editedQuestion = new Question(); if (questionData != null && questionData.newValue != null) { editedQuestion.QuestionText = questionData.newValue; _examCoreService.AddQuestionToExam(examIntID, editedQuestion); } if (answersData != null && answersData.Any()) { foreach (var answerData in answersData) { var addedAnswer = new Answer() { IfCorrect = answerData.secondNewValue == "true" ? true : false, TextAnswer = answerData.newValue }; _questionService.AddAnswerToQuestion(editedQuestion.Id, addedAnswer); } } return(Json( new { success = true, responseText = "Questions have been successfuly updated!", data = _questionService.GetByID(editedQuestion.Id).Answers.Select(x => new { TextAnswer = x.TextAnswer, IfCorrect = x.IfCorrect }).ToList(), newQuestionID = editedQuestion.Id }, JsonRequestBehavior.AllowGet)); } } return(Json(new { success = false, responseText = "Error during updating questions." }, JsonRequestBehavior.AllowGet)); }