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 })); }
/// <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); }
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 })); } }
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")); } }
/// <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)); }
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"); } }
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"); } }
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); }