public async Task <SubmissionResponse> Handle(Graph <Key, FormNode> graph, string referenceNumber, InFlightPage consentPage) { var taskGroupAnswers = _summaryService.GetFormSummary(graph, FormType); var recipientEmail = graph.Nodes .FindByKey(Key.ForTaskItemPage("personal-details-task", "contact-email", new[] { 0 })) .AssertType <TaskQuestionPageFormNode>().Questions.First(x => x.Id == "question1"); await _emailService.SendAFCSEmail(new AfcsEmailContent { ReferenceNumber = referenceNumber, PersonalDetails = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["personal-details-task"]), ServiceDetails = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["service-details-task"]), ClaimDetails = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["claims-details-task"]), OtherCompensation = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["other-compensation-task"]), OtherBenefits = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["about-benefits-task"]), PaymentDetails = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["payment-details-task"]), NominateRepresentative = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["nominate-representative-task"]), WelfareAgentDetails = TaskGroupingExtensions.BuildFormString(taskGroupAnswers["declarations-task"]), ConsentDeclaration = consentPage.Questions.First(x => x.Id == "question1").Answer.AnswerAsString }); await _emailService.SendAFCSUserEmail(recipientEmail.Answer.AnswerAsString, new UserEmailContent { ReferenceNumber = referenceNumber }); return(new SubmissionResponse { Reference = referenceNumber }); }
public async Task <SubmissionResponse> Handle(Graph <Key, FormNode> graph, string referenceNumber, InFlightPage consentPage) { var taskGroup = _summaryService.GetFormSummary(graph, FormType); var userEmailAddress = graph.Nodes .First(x => x.IsTaskQuestionPageNode(out var taskQuestionPageFormNode) && taskQuestionPageFormNode.PageId == "contact-email").AssertType <TaskQuestionPageFormNode>() .Questions.First(x => x.Id == "question1").Answer.AnswerAsString; await _emailService.SendAFIPEmail(new AfipEmailContent { ReferenceNumber = referenceNumber, FormContent = TaskGroupingExtensions.BuildFormString(taskGroup["afip-form"]), ConsentCorrespondEmail = consentPage.Questions.First(x => x.Id == "question1").Answer.AnswerAsString, ConsentDwpBenefits = consentPage.Questions.First(x => x.Id == "question2").Answer.AnswerAsString }); await _emailService.SendAFIPUserEmail(userEmailAddress, new UserEmailContent { ReferenceNumber = referenceNumber }); return(new SubmissionResponse { Reference = referenceNumber, }); }
public async Task <IActionResult> Save(string currentNodeId, InFlightPage model) { var formId = GetFormId(); var formType = GetFormTypeFromFormId(); var(isValid, errors) = await _formService.ValidateQuestionPage(formType, formId, model); if (!isValid) { var viewNode = await _formService.GetFormNode(formId, model.NodeId); var currentAnswers = model.Questions.ToDictionary(x => x.Id, x => x.Answer); return(await HandlePhysicalViewNode(viewNode, model.ReturnToSummary, currentAnswers, errors)); } await _formService.SavePage(formId, model); await _effectHandlerStrategy.Handle(formType, formId, model.NodeId); var node = await _formService.GetFormNode(formId, model.NodeId); if (model.ReturnToSummary) { var nodeAsQuestionPage = (TaskQuestionPageFormNode)node.Value; return(RedirectToAction("Node", new { nodeId = Key.ForTaskSummary(nodeAsQuestionPage.TaskId, nodeAsQuestionPage.RepeatIndices.First()).Value })); } var nextNode = node.Neighbors.First(); return(RedirectToAction("Node", new { nodeId = nextNode.Key.Value })); }
public Task <SubmissionResponse> Handle(Graph <Key, FormNode> graph, string referenceNumber, InFlightPage consentPage) { return(Task.FromResult(new SubmissionResponse { Reference = referenceNumber, })); }
public async Task SavePage(string formKey, InFlightPage page) { var form = await _formRepository.GetForm(formKey); var node = (TaskQuestionPageFormNode)form.Nodes.FindByKey(new Key(page.NodeId)).Value; node.Questions = page.Questions; node.PageStatus = PageStatus.Answered; await _formRepository.SaveForm(formKey, form); }
public async Task <(bool isValid, IDictionary <string, string> errors)> ValidateQuestionPage(FormType formType, string formKey, InFlightPage inFlightPage) { var form = await _formRepository.GetForm(formKey); var node = form.Nodes.FindByKey(new Key(inFlightPage.NodeId)); var questions = node.Value switch { TaskQuestionPageFormNode questionPageFormNode => ((TaskQuestionPage)_staticFormProvider.GetPage( formType, StaticKey.ForTaskQuestionPage(questionPageFormNode.TaskId, questionPageFormNode.PageId))).Questions, PostTaskFormNode postTaskFormNode => ((ConsentPage)_staticFormProvider.GetPage( formType, StaticKey.ForPostTaskPage(postTaskFormNode.TaskId))).Questions, _ => throw new UnexpectedNodeTypeException <TaskQuestionPageFormNode, PostTaskFormNode>(node.Value) }; var errors = new Dictionary <string, string>(); foreach (var question in questions) { var answer = inFlightPage.Questions[questions.IndexOf(question)]; var result = question.Validator?.Validate(answer); if (result is null || result.IsValid) { continue; } errors.Add(question.Id, result.Errors.First().ErrorMessage); } return(isValid : !errors.Any(), errors : errors); }
public async Task <SubmissionResponse> Handle(FormType formType, string formKey, InFlightPage consentPage) { var handler = _handlers.First(x => x.FormType == formType); var form = await _formRepository.GetForm(formKey); var uniqueReferenceId = _referenceNumberService.GenerateReferenceNumber(formKey); return(await handler.Handle(form, uniqueReferenceId, consentPage)); }