private static string GetAreaOfNonCompliance(QuestionAnswerViewModel question, QuestionResponseViewModel selectedResponse) { if (string.IsNullOrEmpty(question.Answer.AreaOfNonCompliance)){ return !string.IsNullOrEmpty(selectedResponse.ReportLetterStatement) ? selectedResponse.ReportLetterStatement : question.Question.Text; } return question.Answer.AreaOfNonCompliance; }
private static QuestionResponseViewModel GetSelectedResponse(QuestionAnswerViewModel question) { QuestionResponseViewModel response = null; if (question.Answer != null && question.Answer.SelectedResponseId != null) { response = question.Question.PossibleResponses.FirstOrDefault(x => x.Id == question.Answer.SelectedResponseId); } return response; }
private ComplianceReviewItemStatus? ComplianceReviewItemStatus(QuestionAnswerViewModel questionAnswer) { var response = GetSelectedResponse(questionAnswer); return ComplianceReviewItemStatus(response); }
private bool IsQuestionAnswered( QuestionAnswerViewModel model) { return !(model.Answer == null || GetSelectedResponse(model) == null); }
/// <summary> /// create a question with 3 responses /// </summary> /// <param name="ResponseType">the selected answer</param> /// <returns></returns> private static QuestionAnswerViewModel CreateQuestionAnswerViewModel( int ResponseType ) { QuestionAnswerViewModel qaViewModel = new QuestionAnswerViewModel(); Guid categoryId = new Guid(); qaViewModel.Question = new QuestionViewModel() { Id = Guid.NewGuid(), Text = "QuestionText", PossibleResponses = new List<QuestionResponseViewModel>(), Mandatory = false, SpecificToClientId = (long)1234, Category = new CategoryViewModel() { Id = categoryId, Title = "TestCategory" }, CategoryId = categoryId }; QuestionResponseViewModel qrAcceptableViewModel = new QuestionResponseViewModel() { Id = Guid.NewGuid(), Title = "Acceptable", SupportingEvidence = "Acceptable supporting evidence", ActionRequired = "Acceptable action required", ResponseType = "Positive", GuidanceNotes = "Acceptable guidance notes",ReportLetterStatement = "acceptable letter statement" }; QuestionResponseViewModel qrUnacceptableViewModel = new QuestionResponseViewModel() { Id = Guid.NewGuid(), Title = "Unacceptable", SupportingEvidence = "Unacceptable supporting evidence", ActionRequired = "Unacceptable action required", ResponseType = "Negative", GuidanceNotes = "Unacceptable guidance notes",ReportLetterStatement = "unacceptable letter statement" }; QuestionResponseViewModel qrImprovementRequiredViewModel = new QuestionResponseViewModel() { Id = Guid.NewGuid(), Title = "Improvement Required", SupportingEvidence = "Improvement Required supporting evidence", ActionRequired = "Improvement Required action required", ResponseType = "Neutral", GuidanceNotes = "Improvement Required guidance notes" }; QuestionResponseViewModel qrNotApplicableRequiredViewModel = new QuestionResponseViewModel() { Id = Guid.NewGuid(), Title = "Not Applicable", SupportingEvidence = "Not Applicable supporting evidence", ActionRequired = "Not Applicable Required action required", ResponseType = "Neutral", GuidanceNotes = "Not Applicable guidance notes", ReportLetterStatement = "not applicable letter statement" }; qaViewModel.Question.PossibleResponses.Add(qrAcceptableViewModel); qaViewModel.Question.PossibleResponses.Add(qrUnacceptableViewModel); qaViewModel.Question.PossibleResponses.Add(qrImprovementRequiredViewModel); qaViewModel.Question.PossibleResponses.Add(qrNotApplicableRequiredViewModel); qaViewModel.Answer = new AnswerViewModel() { SupportingEvidence = "Answer supporting evidence", ActionRequired = "Answer action required", GuidanceNotes = "Answer guidance notes", Timescale = new TimescaleViewModel() { Id = 1234, Name = "This Week" }, AssignedTo = new AssignedToViewModel() { Id = Guid.NewGuid(), NonEmployeeName = "Bob Roberts" }, QuestionId = Guid.NewGuid() }; switch( ResponseType ) { case ACCEPTABLE_RESPONSE: qaViewModel.Answer.SelectedResponseId = qrAcceptableViewModel.Id; break; case UNACCEPTABLE_RESPONSE: qaViewModel.Answer.SelectedResponseId = qrUnacceptableViewModel.Id; break; case IMPROVEMENT_REQUIRED_RESPONSE: qaViewModel.Answer.SelectedResponseId = qrImprovementRequiredViewModel.Id; break; case NOT_APPLICABLE_RESPONSE: qaViewModel.Answer.SelectedResponseId = qrNotApplicableRequiredViewModel.Id; break; } return qaViewModel; }
private static string GetQaAdvisorFromOldQaSignedOffFormat(QuestionAnswerViewModel questionAnswerViewModel) { return questionAnswerViewModel.Answer.QaSignedOffBy.Split('_')[0]; }
private string GetAssignedToEmployeeName( QuestionAnswerViewModel qaViewModel ) { string employeeName = String.Empty; if (qaViewModel.Answer.AssignedTo != null && qaViewModel.Answer.AssignedTo.Id.HasValue) { Employee assignedToEmployee = _employeeRepository.GetById( qaViewModel.Answer.AssignedTo.Id.GetValueOrDefault() ); if (assignedToEmployee == null) { employeeName = qaViewModel.Answer.AssignedTo.NonEmployeeName; } else { employeeName = assignedToEmployee.FullName; } } TextInfo myTI = new CultureInfo("en-US",false).TextInfo; return myTI.ToTitleCase(employeeName.ToLower()); }
private ChecklistViewModel GetChecklistViewModelFromQuestions(List<Question> questions) { var checklistViewModel = new ChecklistViewModel(); checklistViewModel.ClientId = 213; //Reconstruct the list of questions as it woul be posted to API. foreach (var question in questions) { var questionAnswer = new QuestionAnswerViewModel(); questionAnswer.Question = new QuestionViewModel(); questionAnswer.Question.Id = question.Id; questionAnswer.Question.Text = question.Title; questionAnswer.Question.PossibleResponses = new List<QuestionResponseViewModel>(); foreach (var possibleResponse in question.PossibleResponses) { questionAnswer.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = possibleResponse.Id, Title = possibleResponse.Title, GuidanceNotes = possibleResponse.GuidanceNotes, ActionRequired = possibleResponse.ActionRequired, ResponseType = possibleResponse.ResponseType, SupportingEvidence = possibleResponse.SupportingEvidence }); } questionAnswer.Question.Category = new CategoryViewModel(); questionAnswer.Question.CategoryId = question.Category.Id; questionAnswer.Question.Category.Id = question.Category.Id; questionAnswer.Question.Category.Title = question.Category.Title; checklistViewModel.Questions.Add(questionAnswer); //questionAnswer.Answer = new AnswerViewModel(); //questionAnswer.Answer.QuestionId = questionAnswer1.Question.Id; } return checklistViewModel; }
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); }
//TODO: finish public void Given_a_valid_view_model_is_supplied_When_PostChecklist_is_called_Then_the_checklist_is_created() { var category1 = new CategoryViewModel(); category1.Id = Guid.NewGuid(); category1.Title = "Category 1"; var category2 = new CategoryViewModel(); category2.Id = Guid.NewGuid(); category2.Title = "Category 2"; var checklistViewModel = new ChecklistViewModel() { Id = Guid.NewGuid(), ClientId = 21323, SiteId = 2313 }; var questionAnswer1 = new QuestionAnswerViewModel(); questionAnswer1.Question = new QuestionViewModel(); questionAnswer1.Question.Id = Guid.NewGuid(); questionAnswer1.Question.Text = "Question 1"; questionAnswer1.Question.PossibleResponses = new List<QuestionResponseViewModel>(); questionAnswer1.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer1.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer1.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer1.Question.Category = category1; questionAnswer1.Question.CategoryId = category1.Id; questionAnswer1.Answer = new AnswerViewModel(); questionAnswer1.Answer.QuestionId = questionAnswer1.Question.Id; var questionAnswer2 = new QuestionAnswerViewModel(); questionAnswer2.Question = new QuestionViewModel(); questionAnswer2.Question.Id = Guid.NewGuid(); questionAnswer2.Question.Text = "Question 2"; questionAnswer2.Question.PossibleResponses = new List<QuestionResponseViewModel>(); questionAnswer2.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer2.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer2.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer2.Question.Category = category2; questionAnswer2.Question.CategoryId = category2.Id; questionAnswer2.Answer = new AnswerViewModel(); questionAnswer2.Answer.QuestionId = questionAnswer2.Question.Id; var controller = GetTarget(); var response = controller.PostChecklist(checklistViewModel.Id, checklistViewModel); }
public void Given_a_Valid_ActionPlan_Exists_Then_Create_Actions_For_ActionPlan() { _timescaleRepositories.Setup(x => x.GetById(It.IsAny<long>())) .Returns(new Timescale() {Id = 1, Name = "One Month"}); var category1 = new CategoryViewModel(); category1.Id = Guid.NewGuid(); category1.Title = "Category 1"; var category2 = new CategoryViewModel(); category2.Id = Guid.NewGuid(); category2.Title = "Category 2"; //Get view model var questions = GetListOfQuestions(); var checklistViewModel = GetChecklistViewModelFromQuestions(questions); checklistViewModel.SiteId = 234234; checklistViewModel.ClientId = 11; checklistViewModel.CoveringLetterContent = "Letter content"; checklistViewModel.Categories = new List<CategoryQuestionAnswerViewModel>(); checklistViewModel.Questions = new List<QuestionAnswerViewModel>(); checklistViewModel.CreatedOn = DateTime.Now; checklistViewModel.CreatedBy = "user"; checklistViewModel.SiteId = 1; checklistViewModel.Id = Guid.NewGuid(); checklistViewModel.Site = new SiteViewModel { Id = checklistViewModel.SiteId.Value, Address1 = "1 Green Lane", Postcode = "M1 1AA" }; checklistViewModel.SiteVisit = new SiteVisitViewModel { VisitDate = "14/02/2000" }; checklistViewModel.Submit = true; var responseId = Guid.NewGuid(); var questionAnswer1 = new QuestionAnswerViewModel(); questionAnswer1.Question = new QuestionViewModel(); questionAnswer1.Question.Id = Guid.NewGuid(); questionAnswer1.Question.Text = "Question 1"; questionAnswer1.Question.PossibleResponses = new List<QuestionResponseViewModel>(); questionAnswer1.Question.PossibleResponses.Add(item: new QuestionResponseViewModel { Id = responseId, ResponseType = ResponseType.ImprovementRequired.ToString(), Title = "Improvement Required" }); questionAnswer1.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer1.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer1.Question.Category = category1; questionAnswer1.Question.CategoryId = category1.Id; questionAnswer1.Answer = new AnswerViewModel(); questionAnswer1.Answer.QuestionId = questionAnswer1.Question.Id; questionAnswer1.Answer.ActionRequired = "ActionRequired 1"; questionAnswer1.Answer.GuidanceNotes = "GuidanceNotes 1.1"; questionAnswer1.Answer.Timescale = new TimescaleViewModel() { Id = 1, Name = "One Month" }; questionAnswer1.Answer.AssignedTo = new AssignedToViewModel() { Id = Guid.NewGuid(), NonEmployeeName = "Name 1" }; questionAnswer1.Answer.SelectedResponseId = responseId; var questions1 = new List<QuestionAnswerViewModel>(); questions1.Add(questionAnswer1); var responseId2 = Guid.NewGuid(); var questionAnswer2 = new QuestionAnswerViewModel(); questionAnswer2.Question = new QuestionViewModel(); questionAnswer2.Question.Id = Guid.NewGuid(); questionAnswer2.Question.Text = "Question 2"; questionAnswer2.Question.PossibleResponses = new List<QuestionResponseViewModel>(); questionAnswer2.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = responseId2, ResponseType = ResponseType.ImprovementRequired.ToString(), Title = "Improvement Required" }); questionAnswer2.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer2.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); questionAnswer2.Question.Category = category2; questionAnswer2.Question.CategoryId = category2.Id; questionAnswer2.Answer = new AnswerViewModel(); questionAnswer2.Answer.QuestionId = questionAnswer2.Question.Id; questionAnswer2.Answer.ActionRequired = "ActionRequired 2"; questionAnswer2.Answer.GuidanceNotes = "GuidanceNotes 2.2"; questionAnswer2.Answer.Timescale = new TimescaleViewModel() { Id = 1, Name = "One Month" }; questionAnswer2.Answer.AssignedTo = new AssignedToViewModel() { Id = Guid.NewGuid(), NonEmployeeName = "Name 2" }; questionAnswer2.Answer.SelectedResponseId = responseId2; checklistViewModel.Questions.Add(questionAnswer1); checklistViewModel.Questions.Add(questionAnswer2); Checklist savedChecklist = null; _checklistRepository.Setup(x => x.SaveOrUpdate(It.IsAny<Checklist>())) .Callback( delegate(Checklist x) { savedChecklist = x; } ); _categoryRepository .Setup(x => x.GetById(It.IsAny<Guid>())) .Returns(new Category()); var controller = GetTarget(); var response = controller.PostChecklist(checklistViewModel.Id, checklistViewModel); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(savedChecklist.ActionPlan.Actions, Is.Not.Null); Assert.That(savedChecklist.ActionPlan.Title, Is.EqualTo("Visit Report - 1 Green Lane - M1 1AA - 14/02/2000")); Assert.That(savedChecklist.ActionPlan.Actions.Count(), Is.EqualTo(2)); }
private QuestionAnswerViewModel GetQuestionAnswerViewModel() { var newQuestionAnswer = new QuestionAnswerViewModel(); newQuestionAnswer.Question = new QuestionViewModel(); newQuestionAnswer.Question.Id = Guid.NewGuid(); newQuestionAnswer.Question.Text = "New Question"; newQuestionAnswer.Question.SpecificToClientId = 8325L; newQuestionAnswer.Question.PossibleResponses = new List<QuestionResponseViewModel>(); newQuestionAnswer.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); newQuestionAnswer.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); newQuestionAnswer.Question.PossibleResponses.Add(new QuestionResponseViewModel { Id = Guid.NewGuid() }); newQuestionAnswer.Question.Category = new CategoryViewModel(); newQuestionAnswer.Question.CategoryId = _categories[1].Id; newQuestionAnswer.Question.Category.Id = _categories[1].Id; newQuestionAnswer.Question.Category.Title = _categories[1].Title; return newQuestionAnswer; }
/// <summary> /// the old version of Qa Signed off was in the format David Brierley_06/12/2013 00:00:00_09/12/2013 00:00:00_09/12/2013 00:00:00_09/12/2013 00:00:00 /// the new version is David Brierley /// </summary> /// <param name="questionAnswerViewModel"></param> /// <returns></returns> private static bool IsOldQaSignedOffFormat(QuestionAnswerViewModel questionAnswerViewModel) { var qa = questionAnswerViewModel.Answer.QaSignedOffBy.Split('_'); return qa.Length > 1; }
private static DateTime? GetSignOffDateFromOldQaSignedOffFormat(QuestionAnswerViewModel questionAnswerViewModel) { DateTime signOffDate; if (DateTime.TryParse(questionAnswerViewModel.Answer.QaSignedOffBy.Split('_')[1], out signOffDate)) { return signOffDate; } else { return null; } }
private string GetAssignedToEmployeeName( QuestionAnswerViewModel qaViewModel ) { string employeeName = String.Empty; if (qaViewModel.Answer.AssignedTo != null && qaViewModel.Answer.AssignedTo.Id.HasValue) { Employee assignedToEmployee = _employeeRepository.GetById( qaViewModel.Answer.AssignedTo.Id.GetValueOrDefault() ); if (assignedToEmployee == null) { employeeName = qaViewModel.Answer.AssignedTo.NonEmployeeName; } else { employeeName = assignedToEmployee.FullName; } } return employeeName; }
private ActionPlanItem CreateActionPlanItem(QuestionAnswerViewModel question, ResponseType responseType) { var selectedResponse = GetSelectedResponse(question); ActionPlanItem actionPlanItem = new ActionPlanItem() { AreaOfNonCompliance = GetAreaOfNonCompliance(question, selectedResponse), ActionRequired = question.Answer.ActionRequired, GuidanceNumber = question.Answer.GuidanceNotes, TargetTimescale = question.Answer.Timescale == null ? String.Empty : question.Answer.Timescale.Name, AllocatedTo = GetAssignedToEmployeeName(question), QuestionNumber = question.QuestionNumber, CategoryNumber = question.CategoryNumber, SupportingEvidence = question.Answer.SupportingEvidence, Status = ComplianceReviewItemStatus(question), TimescalePriroity = GetTimescalePriority(question.Answer.Timescale, responseType) }; return actionPlanItem; }
private ActionPlanItem CreateActionPlanItem(QuestionAnswerViewModel question, int index) { var selectedResponse = GetSelectedResponse(question); ActionPlanItem actionPlanItem = new ActionPlanItem() { AreaOfNonCompliance = !string.IsNullOrEmpty(selectedResponse.ReportLetterStatement) ? selectedResponse.ReportLetterStatement : question.Question.Text , ActionRequired = question.Answer.ActionRequired, GuidanceNumber = question.Answer.GuidanceNotes, TargetTimescale = question.Answer.Timescale == null ? String.Empty : question.Answer.Timescale.Name, AllocatedTo = GetAssignedToEmployeeName(question), QuestionNumber = question.QuestionNumber, CategoryNumber = question.CategoryNumber }; return actionPlanItem; }
private static bool AssignedToHasValue(QuestionAnswerViewModel questionAnswerViewModel) { return (questionAnswerViewModel.Answer.AssignedTo != null) && (questionAnswerViewModel.Answer.AssignedTo.Id.HasValue) && (questionAnswerViewModel.Answer.AssignedTo.Id.Value != Guid.Empty); }