Exemplo n.º 1
0
        public async Task <LogRequestResponse> LogRequestAsync(RequestHelpRequestStageViewModel requestStage, RequestHelpDetailStageViewModel detailStage, int referringGroupID, string source, int userId, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Logging Request");

            var selectedTask = requestStage.Tasks.Where(x => x.IsSelected).First();
            var selectedTime = requestStage.Timeframes.Where(x => x.IsSelected).FirstOrDefault();

            bool heathCritical          = false;
            var  healthCriticalQuestion = requestStage.Questions.Questions.Where(a => a.ID == (int)Questions.IsHealthCritical).FirstOrDefault();

            if (healthCriticalQuestion != null && healthCriticalQuestion.Model == "true")
            {
                heathCritical = true;
            }

            RequestPersonalDetails            recipient = null;
            RequestPersonalDetails            requestor = null;
            IEnumerable <RequestHelpQuestion> questions = requestStage.Questions.Questions;

            if (detailStage != null)
            {
                recipient = _requestHelpBuilder.MapRecipient(detailStage);
                if (detailStage.ShowRequestorFields)
                {
                    requestor = detailStage.Type == RequestorType.Myself ? recipient : _requestHelpBuilder.MapRequestor(detailStage);
                }
                questions = questions.Union(detailStage.Questions.Questions);
            }

            var request = new PostNewRequestForHelpRequest
            {
                HelpRequest = new HelpRequest
                {
                    Guid              = requestStage.RequestGuid,
                    AcceptedTerms     = requestStage.AgreeToPrivacyAndTerms,
                    ConsentForContact = requestStage.AgreeToPrivacyAndTerms,
                    OrganisationName  = detailStage?.Organisation ?? "",
                    RequestorType     = detailStage?.Type ?? RequestorType.Organisation,
                    ReadPrivacyNotice = requestStage.AgreeToPrivacyAndTerms,
                    CreatedByUserId   = userId,
                    Recipient         = recipient,
                    Requestor         = requestor,
                    ReferringGroupId  = referringGroupID,
                    Source            = source
                },
                NewJobsRequest = new NewJobsRequest
                {
                    Jobs = new List <Job>
                    {
                        new Job
                        {
                            DueDateType     = selectedTime.DueDateType,
                            DueDays         = selectedTime.DueDateType == DueDateType.On ? Convert.ToInt32((selectedTime.Date.Date - DateTime.Now.Date).TotalDays) : selectedTime.Days,
                            StartDate       = selectedTime.DueDateType.HasStartTime() ? selectedTime.StartTime.ToUTCFromUKTime() : (DateTime?)null,
                            EndDate         = selectedTime.DueDateType.HasEndTime() ? selectedTime.EndTime.ToUTCFromUKTime() : (DateTime?)null,
                            HealthCritical  = heathCritical,
                            SupportActivity = selectedTask.SupportActivity,
                            Questions       = questions.Where(x => x.InputType != QuestionType.LabelOnly).Select(x => new Question {
                                Id             = x.ID,
                                Answer         = GetAnswerToQuestion(x),
                                Name           = x.Label,
                                Required       = x.Required,
                                AddtitonalData = x.AdditionalData,
                                Type           = x.InputType
                            }).ToList()
                        }
                    }
                }
            };


            var response = await _requestHelpRepository.PostNewRequestForHelpAsync(request);

            if (response != null && userId != 0)
            {
                TriggerCacheRefresh(userId, cancellationToken);
            }

            return(response);
        }
Exemplo n.º 2
0
        private async Task <RequestHelpRequestStageViewModel> BindRequestStage(ModelBindingContext bindingContext, RequestHelpFormVariant requestHelpFormVariant, int groupId)
        {
            RequestHelpRequestStageViewModel model = JsonConvert.DeserializeObject <RequestHelpRequestStageViewModel>(bindingContext.ValueProvider.GetValue("RequestStep").FirstValue);

            int selectedTaskId, selectedRequestorId, selectedTimeId = -1;

            int.TryParse(bindingContext.ValueProvider.GetValue("currentStep.SelectedTask.Id").FirstValue, out selectedTaskId);
            int.TryParse(bindingContext.ValueProvider.GetValue("currentStep.SelectedRequestor.Id").FirstValue, out selectedRequestorId);
            int.TryParse(bindingContext.ValueProvider.GetValue("currentStep.SelectedTimeFrame.Id").FirstValue, out selectedTimeId);

            model.Requestors.ForEach(x => x.IsSelected = false);
            var requestor = model.Requestors.Where(x => x.ID == selectedRequestorId).FirstOrDefault();

            if (requestor != null)
            {
                requestor.IsSelected = true;
            }

            model.Tasks.ForEach(x => x.IsSelected = false);
            var task = model.Tasks.Where(x => (int)x.SupportActivity == selectedTaskId).FirstOrDefault();

            if (task != null)
            {
                task.IsSelected = true;
            }

            model.Timeframes.ForEach(x => x.IsSelected = false);
            var time = model.Timeframes.Where(x => x.ID == selectedTimeId).FirstOrDefault();

            if (time != null)
            {
                time.IsSelected = true;
                if (time.AllowCustom)
                {
                    int selectedDays = -1;
                    int.TryParse(bindingContext.ValueProvider.GetValue("currentStep.SelectedTimeFrame.CustomDays").FirstValue, out selectedDays);
                    time.Days = selectedDays;
                }
                if (time.DueDateType.HasDate())
                {
                    DateTime.TryParseExact(bindingContext.ValueProvider.GetValue("currentStep.SelectedTimeFrame.Date").ToString(), DatePickerHelpers.DATE_PICKER_DATE_FORMAT, new CultureInfo("en-GB"), DateTimeStyles.None, out DateTime date);
                    time.Date = date;
                    if (time.DueDateType.HasStartTime())
                    {
                        time.StartTime = ParseTime(time.Date, bindingContext.ValueProvider.GetValue("currentStep.SelectedTimeFrame.StartTime").ToString());
                    }
                    if (time.DueDateType.HasEndTime())
                    {
                        time.EndTime = ParseTime(time.Date, bindingContext.ValueProvider.GetValue("currentStep.SelectedTimeFrame.EndTime").ToString());
                        if (time.StartTime >= time.EndTime)
                        {
                            time.EndTime = time.EndTime.AddDays(1);
                        }
                    }
                }
            }

            model.Questions = new QuestionsViewModel()
            {
                Questions = await _requestHelpBuilder.GetQuestionsForTask(requestHelpFormVariant, RequestHelpFormStage.Request, task.SupportActivity, groupId)
            };

            foreach (RequestHelpQuestion question in model.Questions.Questions)
            {
                question.Model = bindingContext.ValueProvider.GetValue($"currentStep.Questions.[{question.ID}].Model").FirstValue;
            }

            bool AgreeToPrivacyAndTerms = false;

            bool.TryParse(bindingContext.ValueProvider.GetValue("currentStep." + nameof(model.AgreeToPrivacyAndTerms)).FirstValue, out AgreeToPrivacyAndTerms);
            model.AgreeToPrivacyAndTerms = AgreeToPrivacyAndTerms;

            return(model);
        }