コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }
コード例 #6
0
 private static string GetQaAdvisorFromOldQaSignedOffFormat(QuestionAnswerViewModel questionAnswerViewModel)
 {
     return questionAnswerViewModel.Answer.QaSignedOffBy.Split('_')[0];
 }
コード例 #7
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());
        }
コード例 #8
0
        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;
        }
コード例 #9
0
        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);

        }
コード例 #10
0
        //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);
        }
コード例 #11
0
        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));
        }
コード例 #12
0
        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;
        }
コード例 #13
0
        /// <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;
        }
コード例 #14
0
 private static DateTime? GetSignOffDateFromOldQaSignedOffFormat(QuestionAnswerViewModel questionAnswerViewModel)
 {
     DateTime signOffDate;
     if (DateTime.TryParse(questionAnswerViewModel.Answer.QaSignedOffBy.Split('_')[1], out signOffDate))
     {
         return signOffDate;
     }
     else
     {
         return null;
     }
 }
コード例 #15
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;
                }
            }
            
            return employeeName;
        }
コード例 #16
0
        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;
        }
コード例 #17
0
        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;
        }
コード例 #18
0
 private static bool AssignedToHasValue(QuestionAnswerViewModel questionAnswerViewModel)
 {
     return (questionAnswerViewModel.Answer.AssignedTo != null) &&
            (questionAnswerViewModel.Answer.AssignedTo.Id.HasValue) &&
            (questionAnswerViewModel.Answer.AssignedTo.Id.Value != Guid.Empty);
 }