public ActionResult OpenExistingQuestionnaire(int quoteId)
        {
            QuoteContext.Instance.ExistingQuote(quoteId);
            RenderedPageForDisplayDTO page = QuoteContext.Instance.Pages.FirstOrDefault();

            return(RedirectToAction("Quote", new { schemeCode = QuoteContext.Instance.Scheme.Code, pageName = page.PageName }));
        }
Пример #2
0
        /// <summary>
        /// Runs server side copy of question validation, returns a list of failed validation rules
        /// </summary>
        /// <param name="validationErrorDTOs"></param>
        /// <returns></returns>
        public bool ValidationPassed(out List <ValidationErrorDTO> validationErrorDTOs)
        {
            bool result = true;
            RenderedPageForDisplayDTO currentPage = GetCurrentPageFromRoute();

            //run the validation
            result = Validation.Instance.ValidationPassed(currentPage.Questions, Quote.Answers, Quote.VisbilitySettings, out validationErrorDTOs);
            return(result);
        }
Пример #3
0
        public List <PageQuestionVisibilityDTO> GetPageQuestionVisbilitiesForPage(RenderedPageForDisplayDTO pageDTO, List <QuoteQuestionAnswerDTO> answerDTOs)
        {
            List <PageQuestionVisibilityDTO> result = new List <PageQuestionVisibilityDTO>();

            foreach (PageQuestionForDisplayDTO pageQuestionDTO in pageDTO.Questions)
            {
                result.Add(SetPageQuestionVisbility(pageQuestionDTO, pageDTO, answerDTOs));
            }
            return(result);
        }
        public ActionResult NextPage(string schemeCode, string pageName)
        {
            RenderedPageForDisplayDTO nextPage = QuoteContext.Instance.NextPage(null);

            if (nextPage != null)
            {
                return(RedirectToAction("Quote", new { schemeCode = QuoteContext.Instance.Scheme.Code, pageName = nextPage.PageName }));
            }
            else
            {
                return(RedirectToAction("QuoteSummary", new { schemeCode = QuoteContext.Instance.Scheme.Code }));
            }
        }
Пример #5
0
        private RenderedPageForDisplayDTO GetCurrentPageFromRoute()
        {
            RenderedPageForDisplayDTO result = null;
            RouteData routeData = HttpContext.Current.Request.RequestContext.RouteData;

            string pageName = routeData.Values["pageName"].ToString();

            if (!String.IsNullOrWhiteSpace(pageName))
            {
                result = Pages.Where(p => p.PageName.ToLower() == pageName.ToLower()).FirstOrDefault();
            }

            return(result);
        }
        public ActionResult PreviousPage(string schemeCode, string pageName)
        {
            RenderedPageForDisplayDTO previousPage = QuoteContext.Instance.PreviousPage();

            if (previousPage != null)
            {
                return(RedirectToAction("Quote", new { schemeCode = QuoteContext.Instance.Scheme.Code, pageName = previousPage.PageName }));
            }
            else
            {
                QuoteContext.Instance.Clear();
                return(RedirectToAction("ExistingQuotes", "Quotes"));
            }
        }
Пример #7
0
        /// <summary>
        /// Updates the list of in memory answer for the quote
        /// Also updates the list of "removed" anwsers
        /// </summary>
        /// <param name="form">form submitted by the user</param>
        public void UpdateAnswers(FormCollection form)
        {
            RenderedPageForDisplayDTO currentPage = GetCurrentPageFromRoute();
            //parse the answers from the form
            List <AnswerDTO> parsedAnswerDTOs = AnswerParser.Instance.GetAnswersFromForm(form);

            //convert parsed answers into quote question answer dto's
            Quote.Answers = AnswerParser.Instance.ParseAnswers(Quote.QuoteID, parsedAnswerDTOs, Quote.Answers, currentPage.Questions);
            //get list of question visibility
            Quote.VisbilitySettings = ConditionalDisplay.Instance.GetPageQuestionVisbilitiesForPage(currentPage, Quote.Answers);
            //update the list of removed answers
            Quote.RemovedAnswers = AnswerParser.Instance.FindRemovedAnswers(Quote.Answers, currentPage.Questions, Quote.VisbilitySettings);
            //update the answers list to exclude the removed answers
            Quote.RemovedAnswers.ForEach(a => Quote.Answers.Remove(a));
        }
Пример #8
0
        public RenderedPageForDisplayDTO PreviousPage()
        {
            RenderedPageForDisplayDTO currentPage = GetCurrentPageFromRoute();

            if (currentPage != null)
            {
                if (Pages.Any(p => p.NextPageID.HasValue && p.NextPageID == currentPage.PageID))
                {
                    return(Pages.Where(p => p.NextPageID == currentPage.PageID).FirstOrDefault());
                }
                else
                {
                    //no previous pages
                    return(null);
                }
            }
            else
            {
                throw new Exception("unable to find page");
            }
        }
Пример #9
0
        public RenderedPageForDisplayDTO NextPage(FormCollection form)
        {
            RenderedPageForDisplayDTO currentPage = GetCurrentPageFromRoute();

            if (currentPage != null)
            {
                if (currentPage.NextPageID.HasValue && Pages.Any(p => p.PageID == currentPage.NextPageID.Value))
                {
                    return(Pages.Where(p => p.PageID == currentPage.NextPageID.Value).FirstOrDefault());
                }
                else
                {
                    //no further pages
                    return(null);
                }
            }
            else
            {
                throw new Exception("unable to find page");
            }
        }
Пример #10
0
        public PageQuestionVisibilityDTO SetPageQuestionVisbility(PageQuestionForDisplayDTO pageQuestionDTO, RenderedPageForDisplayDTO pageDTO, List <QuoteQuestionAnswerDTO> answerDTOs)
        {
            PageQuestionVisibilityDTO result = new PageQuestionVisibilityDTO()
            {
                PageQuestionID = pageQuestionDTO.PageQuestionID
            };

            if (pageDTO.Questions.SelectMany(q => q.DependantQuestions).Any(dq => dq.TargetPageQuestionID == pageQuestionDTO.PageQuestionID))
            {
                //this question is dependant on another question for it's visbility

                //get a list of questions this question is dependant on for it's visbility
                List <PageQuestionForDisplayDTO> sourcePageQuestionDTOs = pageDTO.Questions.Where(q => q.HasPossibleAnswers &&
                                                                                                  q.DependantQuestions != null &&
                                                                                                  q.DependantQuestions.Count > 0 &&
                                                                                                  q.DependantQuestions.Any(dq => dq.TargetPageQuestionID == pageQuestionDTO.PageQuestionID)).ToList();
                //check if we have any answers for the question
                if (answerDTOs.Any(a => sourcePageQuestionDTOs.Select(s => s.QuestionID).Contains(a.QuestionID)))
                {
                    //we have an answer/s

                    //get the display conditions that apply to this question
                    List <PageQuestionConditionalDisplayForDisplayDTO> displayConditionDTOs = sourcePageQuestionDTOs.SelectMany(s => s.PossibleAnswers)
                                                                                              .Where(pa => answerDTOs.Select(a => a.QuestionPossibleAnswerID.GetValueOrDefault(0)).Contains(pa.QuestionPossibleAnswerID))
                                                                                              .SelectMany(a => a.DisplayConditions)
                                                                                              .Where(d => d.TargetPageQuestionID == pageQuestionDTO.PageQuestionID)
                                                                                              .ToList();
                    //are there any conditions that make this visible
                    if (displayConditionDTOs != null && displayConditionDTOs.Count > 0)
                    {
                        if (displayConditionDTOs.Any(d => !d.Hide))
                        {
                            //we've found a condition that makes the question visible
                            result.IsVisible = true;
                        }
                        else
                        {
                            //no conditions that make the question visible - so we need to hide the question
                            result.IsVisible = false;
                        }
                    }
                    else
                    {
                        //no conditions with answers - use default show condition
                        result.IsVisible = pageQuestionDTO.DefaultShow;
                    }
                }
                else
                {
                    //set the default visbility
                    result.IsVisible = pageQuestionDTO.DefaultShow;
                }
            }
            else
            {
                //not dependant on another questions for visibility - must be visible
                result.IsVisible = true;
            }
            return(result);
        }