private Customer GetCustomerBookingDetails(FormAnswers formAnswers, FormSchema formSchema, IElement bookingElement) { var data = new ExpandoObject() as IDictionary <string, dynamic>; formSchema.Pages.SelectMany(_ => _.ValidatableElements) .Where(x => !string.IsNullOrEmpty(x.Properties.TargetMapping) && x.Properties.TargetMapping.ToLower().StartsWith("customer.") && !x.Properties.TargetMapping.ToLower().Equals("customer.address")) .ToList() .ForEach(_ => data = RecursiveCheckAndCreate(string.IsNullOrEmpty(_.Properties.TargetMapping) ? _.Properties.QuestionId : _.Properties.TargetMapping, _, formAnswers, data)); if (!data.ContainsKey("customer")) { throw new ApplicationException($"MappingService::GetCustomerDetails, Booking request form data for form {formSchema.BaseURL} does not contain required customer object"); } var customer = JsonConvert.DeserializeObject <Customer>(JsonConvert.SerializeObject(data["customer"])); if (string.IsNullOrEmpty(bookingElement.Properties.CustomerAddressId)) { return(customer); } var addressElement = formSchema.Pages.SelectMany(_ => _.Elements) .FirstOrDefault(_ => _.Properties.QuestionId != null && _.Properties.QuestionId.Contains(bookingElement.Properties.CustomerAddressId)); customer.Address = _elementMapper.GetAnswerStringValue(addressElement, formAnswers); return(customer); }
public List <PageSummary> GenerateQuestionAndAnswersList(string guid, FormSchema formSchema) { var formAnswers = GetFormData(guid); var reducedAnswers = FormAnswersExtensions.GetReducedAnswers(formAnswers, formSchema); var formSummary = new List <PageSummary>(); foreach (var page in formSchema.Pages.ToList()) { var pageSummary = new PageSummary { PageTitle = page.Title, PageSlug = page.PageSlug }; var summaryBuilder = new SummaryDictionaryBuilder(); var formSchemaQuestions = page.ValidatableElements .Where(_ => _ != null) .ToList(); if (!formSchemaQuestions.Any() || !reducedAnswers.Where(p => p.PageSlug == page.PageSlug).Select(p => p).Any()) { continue; } formSchemaQuestions.ForEach(question => { var answer = _elementMapper.GetAnswerStringValue(question, formAnswers); summaryBuilder.Add(question.GetLabelText(), answer, question.Type); }); pageSummary.Answers = summaryBuilder.Build(); formSummary.Add(pageSummary); } return(formSummary); }