private void AddQuestionToChecklist(Checklist checklist, QuestionAnswerViewModel questionAnswerViewModel, UserForAuditing systemUser) { var question = _questionRepository.GetById(questionAnswerViewModel.Question.Id); if (question == null) { // adding a bespoke question var category = _categoryRepository.GetById(questionAnswerViewModel.Question.CategoryId); if (category == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, String.Format("Unknown Category - Id {0}", questionAnswerViewModel. Question.CategoryId. ToString()))); } question = Question.Create( questionAnswerViewModel.Question.Id, questionAnswerViewModel.Question.Text, category, true, // is custom (bespoke) question questionAnswerViewModel.Question.SpecificToClientId, systemUser); } else if (question.CustomQuestion && question.Title != questionAnswerViewModel.Question.Text) { // update bespoke question text question.Title = questionAnswerViewModel.Question.Text; } if (questionAnswerViewModel.Question.PossibleResponses != null) { foreach (var possibleResponse in questionAnswerViewModel.Question.PossibleResponses) { var questionResponse = _questionResponseRepository.GetById(possibleResponse.Id); if (questionResponse == null) { questionResponse = new QuestionResponse { Id = possibleResponse.Id, Title = possibleResponse.Title, SupportingEvidence = possibleResponse.SupportingEvidence, ActionRequired = possibleResponse.ActionRequired, ResponseType = possibleResponse.ResponseType, GuidanceNotes = possibleResponse.GuidanceNotes, CreatedBy = systemUser, CreatedOn = DateTime.Now, LastModifiedBy = systemUser, LastModifiedOn = DateTime.Now, ReportLetterStatement = possibleResponse.ReportLetterStatement }; } else { questionResponse.ReportLetterStatement = possibleResponse.ReportLetterStatement; } question.AddQuestionResponse(questionResponse); } } ChecklistQuestion checklistQuestion = new ChecklistQuestion() { Id = Guid.NewGuid(), Checklist = checklist, Question = question, CreatedBy = systemUser, CreatedOn = DateTime.Now, CategoryNumber = questionAnswerViewModel.CategoryNumber, QuestionNumber = questionAnswerViewModel.QuestionNumber }; checklist.UpdateQuestion(checklistQuestion, systemUser); }