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); }
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); }