Exemplo n.º 1
0
        Task IModelBinder.BindModelAsync(ModelBindingContext bindingContext)
        {
            RequestHelpViewModel model = JsonConvert.DeserializeObject <RequestHelpViewModel>(bindingContext.ValueProvider.GetValue("requestHelp").FirstValue, new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Objects
            });

            model.Action = bindingContext.ValueProvider.GetValue("formAction").FirstValue;
            var type = Type.GetType(model.ToString());

            bindingContext.ModelMetadata = _provider.GetMetadataForType(type);
            bindingContext.Result        = ModelBindingResult.Success(model);
            return(Task.CompletedTask);
        }
Exemplo n.º 2
0
        public async Task <IActionResult> RequestHelp(
            [ModelBinder(BinderType = typeof(RequestHelpModelBinder))] RequestHelpViewModel requestHelp,
            [ModelBinder(BinderType = typeof(RequestHelpStepsViewModelBinder))] IRequestHelpStageViewModel step,
            CancellationToken cancellationToken)
        {
            try
            {
                requestHelp.Errors = new List <string>();
                requestHelp.Steps[requestHelp.CurrentStepIndex] = step;
                if (requestHelp.Action == "EditRequest")
                {
                    requestHelp.CurrentStepIndex = 0;
                    return(View(requestHelp));
                }
                if (requestHelp.Action == "EditDetails")
                {
                    requestHelp.CurrentStepIndex = 1;
                    return(View(requestHelp));
                }
                if (requestHelp.Action == "back")
                {
                    requestHelp.CurrentStepIndex--;
                    return(View(requestHelp));
                }

                if (!ModelState.IsValid)
                {
                    throw new ValidationException("Model Validation failed");
                }


                if (requestHelp.Action == "next")
                {
                    requestHelp.CurrentStepIndex++;
                    if (step is RequestHelpRequestStageViewModel)
                    {
                        var requestStep = (RequestHelpRequestStageViewModel)step;
                        var detailStage = (RequestHelpDetailStageViewModel)requestHelp.Steps.Where(x => x is RequestHelpDetailStageViewModel).FirstOrDefault();
                        var reviewStage = (RequestHelpReviewStageViewModel)requestHelp.Steps.Where(x => x is RequestHelpReviewStageViewModel).First();

                        if (detailStage != null)
                        {
                            detailStage.Type      = requestStep.Requestors.Where(x => x.IsSelected).First().Type;
                            detailStage.Questions = await UpdateQuestionsViewModel(detailStage.Questions, requestHelp.RequestHelpFormVariant, RequestHelpFormStage.Detail, (SupportActivities)requestHelp.SelectedSupportActivity(), requestHelp.ReferringGroupID);

                            detailStage.NeedBothNames = requestStep.Tasks.Where(x => x.IsSelected).Any(x => x.SupportActivity == SupportActivities.CollectingPrescriptions);

                            var loggedInUser = await _authService.GetCurrentUser(HttpContext, cancellationToken);

                            if (loggedInUser != null)
                            {
                                switch (detailStage.Type)
                                {
                                case RequestorType.Myself:
                                    if (detailStage.Recipient == null)
                                    {
                                        detailStage.Recipient = new RecipientDetails
                                        {
                                            Firstname            = loggedInUser.UserPersonalDetails.FirstName,
                                            Lastname             = loggedInUser.UserPersonalDetails.LastName,
                                            AddressLine1         = loggedInUser.UserPersonalDetails.Address.AddressLine1,
                                            AddressLine2         = loggedInUser.UserPersonalDetails.Address.AddressLine2,
                                            AlternatePhoneNumber = loggedInUser.UserPersonalDetails.OtherPhone,
                                            MobileNumber         = loggedInUser.UserPersonalDetails.MobilePhone,
                                            Email    = loggedInUser.UserPersonalDetails.EmailAddress,
                                            Postcode = loggedInUser.UserPersonalDetails.Address.Postcode,
                                            Town     = loggedInUser.UserPersonalDetails.Address.Locality
                                        };
                                    }
                                    break;

                                case RequestorType.Organisation:
                                case RequestorType.OnBehalf:
                                    if (detailStage.Requestor == null)
                                    {
                                        detailStage.Requestor = new RequestorDetails
                                        {
                                            Firstname            = loggedInUser.UserPersonalDetails.FirstName,
                                            Lastname             = loggedInUser.UserPersonalDetails.LastName,
                                            AlternatePhoneNumber = loggedInUser.UserPersonalDetails.OtherPhone,
                                            MobileNumber         = loggedInUser.UserPersonalDetails.MobilePhone,
                                            Email    = loggedInUser.UserPersonalDetails.EmailAddress,
                                            Postcode = loggedInUser.UserPersonalDetails.Address.Postcode,
                                        };
                                    }
                                    break;
                                }
                            }
                        }

                        reviewStage.Task                  = requestStep.Tasks.Where(x => x.IsSelected).FirstOrDefault();
                        reviewStage.TimeRequested         = requestStep.Timeframes.Where(X => X.IsSelected).FirstOrDefault();
                        reviewStage.RequestedFor          = requestStep.Requestors.Where(x => x.IsSelected).FirstOrDefault();
                        reviewStage.RequestStageQuestions = requestStep.Questions.Questions;
                    }
                    if (step is RequestHelpDetailStageViewModel)
                    {
                        var requestStage = (RequestHelpRequestStageViewModel)requestHelp.Steps.Where(x => x is RequestHelpRequestStageViewModel).First();
                        var detailStage  = (RequestHelpDetailStageViewModel)step;
                        var reviewStage  = (RequestHelpReviewStageViewModel)requestHelp.Steps.Where(x => x is RequestHelpReviewStageViewModel).First();
                        reviewStage.Recipient             = detailStage.Recipient;
                        reviewStage.Requestor             = detailStage.Requestor;
                        reviewStage.OrganisationName      = detailStage.Organisation;
                        reviewStage.DetailsStageQuestions = detailStage.Questions.Questions;
                        reviewStage.ShowRequestor         = detailStage.ShowRequestorFields && (reviewStage.RequestedFor.Type != RequestorType.Myself);
                    }
                }
                if (requestHelp.Action == "finish")
                {
                    var requestStage = (RequestHelpRequestStageViewModel)requestHelp.Steps.Where(x => x is RequestHelpRequestStageViewModel).First();
                    var detailStage  = (RequestHelpDetailStageViewModel)requestHelp.Steps.Where(x => x is RequestHelpDetailStageViewModel).FirstOrDefault();
                    var user         = await _authService.GetCurrentUser(HttpContext, cancellationToken);

                    var response = await _requestService.LogRequestAsync(requestStage, detailStage, requestHelp.ReferringGroupID, requestHelp.Source, user?.ID ?? 0, cancellationToken);

                    if (response != null && response.Fulfillable.Equals(Fulfillable.Accepted_ManualReferral))
                    {
                        return(RedirectToRoute("request-help/success", new
                        {
                            fulfillable = response.Fulfillable,
                            requestHelpFormVariant = requestHelp.RequestHelpFormVariant,
                            referringGroup = Base64Utils.Base64Encode(requestHelp.ReferringGroupID),
                            source = requestHelp.Source
                        }));
                    }
                    else
                    {
                        throw new Exception($"Bad response from PostNewRequestForHelpRequest: {response?.Fulfillable}");
                    }
                }
            }
            catch (ValidationException vex)
            {
                _logger.LogError(vex, "a validation error occured in request help form action");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "an error occured in request help form action");
                requestHelp.Errors.Add("Oops! An error occured submitting your request; please try again later.");
            }


            return(View(requestHelp));
        }
Exemplo n.º 3
0
        public async Task <RequestHelpViewModel> GetSteps(RequestHelpJourney requestHelpJourney, int referringGroupID, string source)
        {
            RequestHelpFormVariant requestHelpFormVariant = requestHelpJourney.RequestHelpFormVariant;

            var model = new RequestHelpViewModel
            {
                ReferringGroupID       = referringGroupID,
                Source                 = source,
                RequestHelpFormVariant = requestHelpFormVariant,
                CurrentStepIndex       = 0,
                Steps = new List <IRequestHelpStageViewModel>
                {
                    new RequestHelpRequestStageViewModel
                    {
                        PageHeading = GetHelpRequestPageTitle(requestHelpFormVariant),
                        IntoText    = GetHelpRequestPageIntroText(requestHelpFormVariant),
                        Tasks       = await GetRequestHelpTasks(requestHelpFormVariant),
                        Requestors  = new List <RequestorViewModel>
                        {
                            new RequestorViewModel
                            {
                                ID         = 1,
                                ColourCode = "orange",
                                Title      = "I am requesting help for myself",
                                Text       = "I'm the person in need of help",
                                IconDark   = "request-myself.svg",
                                IconLight  = "request-myself-white.svg",
                                Type       = RequestorType.Myself
                            },
                            new RequestorViewModel
                            {
                                ID         = 2,
                                ColourCode = "dark-blue",
                                Title      = "On behalf of someone else",
                                Text       = "I'm looking for help for a relative, neighbour or friend",
                                IconDark   = "request-behalf.svg",
                                IconLight  = "request-behalf-white.svg",
                                Type       = RequestorType.OnBehalf
                            },
                            new RequestorViewModel
                            {
                                ID         = 3,
                                ColourCode = "dark-blue",
                                Title      = "On behalf of an organisation",
                                Text       = "I'm looking for help for an organisation",
                                IconDark   = "request-organisation.svg",
                                IconLight  = "request-organisation-white.svg",
                                Type       = RequestorType.Organisation
                            }
                        },
                        Timeframes = new List <RequestHelpTimeViewModel>
                        {
                            new RequestHelpTimeViewModel {
                                ID = 1, DueDateType = DueDateType.Before, TimeDescription = "Today", Days = 0
                            },
                            new RequestHelpTimeViewModel {
                                ID = 2, DueDateType = DueDateType.Before, TimeDescription = "Within 24 Hours", Days = 1
                            },
                            new RequestHelpTimeViewModel {
                                ID = 3, DueDateType = DueDateType.Before, TimeDescription = "Within a Week", Days = 7
                            },
                            new RequestHelpTimeViewModel {
                                ID = 4, DueDateType = DueDateType.Before, TimeDescription = "When Convenient", Days = 30
                            },
                            new RequestHelpTimeViewModel {
                                ID = 5, DueDateType = DueDateType.Before, TimeDescription = "Other", AllowCustom = true
                            },
                        },
                    },
                    new RequestHelpDetailStageViewModel()
                    {
                        ShowRequestorFields          = !requestHelpJourney.RequestorDefinedByGroup,
                        FullRecipientAddressRequired = true,
                    },
                    new RequestHelpReviewStageViewModel(),
                }
            };

            if (requestHelpFormVariant == RequestHelpFormVariant.FtLOS)
            {
                ((RequestHelpRequestStageViewModel)model.Steps.First()).Timeframes.RemoveRange(0, 2);
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeUKWirral || requestHelpFormVariant == RequestHelpFormVariant.VitalsForVeterans)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Requestors.RemoveAll(x => x.Type == RequestorType.Myself);

                requestStep.Timeframes.Insert(0, new RequestHelpTimeViewModel()
                {
                    ID = 6, TimeDescription = "On a Specific Date", DueDateType = DueDateType.On
                });
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeUKSouthKentCoast_Public)
            {
                ((RequestHelpRequestStageViewModel)model.Steps.First()).Timeframes.RemoveRange(0, 2);
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeUKSouthKentCoast_RequestSubmitter)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Timeframes.Insert(0, new RequestHelpTimeViewModel()
                {
                    ID = 6, TimeDescription = "On a Specific Date", DueDateType = DueDateType.On
                });
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeUKFavershamAndSittingbourne_Public)
            {
                ((RequestHelpRequestStageViewModel)model.Steps.First()).Timeframes.RemoveRange(0, 2);
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeUKFavershamAndSittingbourne_RequestSubmitter)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Timeframes.Insert(0, new RequestHelpTimeViewModel()
                {
                    ID = 6, TimeDescription = "On a Specific Date", DueDateType = DueDateType.On
                });
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeUKNorthWestKent_Public)
            {
                ((RequestHelpRequestStageViewModel)model.Steps.First()).Timeframes.RemoveRange(0, 2);
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.MeadowsCommunityHelpers_RequestSubmitter)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Requestors.RemoveAll(x => x.Type == RequestorType.Myself);
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.MeadowsCommunityHelpers_Public)
            {
                ((RequestHelpRequestStageViewModel)model.Steps.First()).Timeframes.RemoveRange(0, 2);
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeUKNorthWestKent_RequestSubmitter)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Timeframes.Insert(0, new RequestHelpTimeViewModel()
                {
                    ID = 6, TimeDescription = "On a Specific Date", DueDateType = DueDateType.On
                });
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeConnectsCardiff_Public)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Timeframes.RemoveRange(0, 2);
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.AgeConnectsCardiff_RequestSubmitter)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Requestors.RemoveAll(x => x.Type == RequestorType.Myself);
                requestStep.Timeframes.Insert(0, new RequestHelpTimeViewModel()
                {
                    ID = 6, TimeDescription = "On a Specific Date", DueDateType = DueDateType.On
                });
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.LincolnshireVolunteers || requestHelpFormVariant == RequestHelpFormVariant.Mansfield_CVS || requestHelpFormVariant == RequestHelpFormVariant.ApexBankStaff_RequestSubmitter)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Requestors.RemoveAll(x => x.Type == RequestorType.Myself);
                requestStep.Requestors.RemoveAll(x => x.Type == RequestorType.OnBehalf);

                requestStep.Timeframes.Clear();
                requestStep.Timeframes.Insert(0, new RequestHelpTimeViewModel()
                {
                    ID = 7, TimeDescription = "On a Specific Date", DueDateType = DueDateType.SpecificStartAndEndTimes, IsSelected = true
                });

                model.Steps.Remove(model.Steps.Where(x => x is RequestHelpDetailStageViewModel).First());
            }

            if (requestHelpFormVariant == RequestHelpFormVariant.Sandbox_RequestSubmitter)
            {
                var requestStep = ((RequestHelpRequestStageViewModel)model.Steps.Where(x => x is RequestHelpRequestStageViewModel).First());
                requestStep.Timeframes.Add(new RequestHelpTimeViewModel()
                {
                    ID = 7, TimeDescription = "On a Specific Date", DueDateType = DueDateType.SpecificStartAndEndTimes
                });
            }


            return(model);
        }