示例#1
0
        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,
            });
        }
示例#3
0
        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,
     }));
 }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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));
        }