public void BuildDosViewModel_WithConfiguredDx_RemapsDxCode() { Mapper.Initialize(m => m.AddProfile <FromOutcomeViewModelToDosViewModel>()); var model = new OutcomeViewModel { Id = "Dx01121", SymptomDiscriminatorCode = "1", UserInfo = new UserInfo { Demography = new AgeGenderViewModel { Gender = "Male" } } }; ConfigurationManager.AppSettings["ValidationDxRemap"] = "Dx01121:Dx333"; var dosModel = _dosBuilder.BuildDosViewModel(model, null); Assert.AreEqual(11333, dosModel.Disposition); //ConfigurationManager.AppSettings["Cat3And4DxCodes"] = ""; ConfigurationManager.AppSettings["ValidationDxRemap"] = "Dx01121:Dx334"; dosModel = _dosBuilder.BuildDosViewModel(model, null); Assert.AreEqual(11334, dosModel.Disposition); }
public ActionResult Join(long id) { var viewModel = new JoinBetViewModel(); using (var myWork = _factory.GetUOF()) { var myBet = myWork.Bet.Get(id); foreach (var outcomes in myBet.Outcomes) { var ovm = new OutcomeViewModel() { Id = outcomes.OutcomeId, Name = outcomes.Name }; viewModel.Outcomes.Add(ovm); } viewModel.Title = myBet.Name; viewModel.Description = myBet.Description; viewModel.MoneyPool = myBet.BuyIn; viewModel.Id = id; return(View("Join", viewModel)); } }
public async Task <OutcomeViewModel> PathwaySelectionJumpBuilder(OutcomeViewModel model) { model.DispositionTime = DateTime.Now; model.SurveyLink = await _surveyLinkViewModelBuilder.SurveyLinkBuilder(model); return(model); }
public async Task <ITKConfirmationViewModel> ItkResponseBuilder(OutcomeViewModel model) { var itkRequestData = CreateItkDispatchRequest(model); _auditLogger.LogItkRequest(model, itkRequestData); var response = await SendItkMessage(itkRequestData); _auditLogger.LogItkResponse(model, response); var itkResponseModel = _mappingEngine.Mapper.Map <OutcomeViewModel, ITKConfirmationViewModel>(model); itkResponseModel.ItkDuplicate = IsDuplicateResponse(response); itkResponseModel.ItkSendSuccess = response.IsSuccessful; if (response.IsSuccessful || IsDuplicateResponse(response)) { itkResponseModel.PatientReference = itkRequestData.CaseDetails.ExternalReference; } else { itkResponseModel.ItkSendSuccess = false; Log4Net.Error("Error sending ITK message : Status Code -" + response.StatusCode + " Content -" + itkRequestData.CaseDetails.ExternalReference); } return(itkResponseModel); }
public async Task <OutcomeViewModel> PrimaryCareBuilder(OutcomeViewModel model, string reason = "") { model.SurveyLink = await _surveyLinkViewModelBuilder.SurveyLinkBuilder(model); _surveyLinkViewModelBuilder.AddDispositionReason(reason, model.SurveyLink); return(model); }
public async Task <ActionResult> Confirmation(OutcomeViewModel model, [FromUri] bool?overrideFilterServices) { if (!ModelState.IsValid) { //populate address picker fields model = await PopulateAddressPickerFields(model); return(View("PersonalDetails", model)); } var availableServices = await GetServiceAvailability(model, DateTime.Now, overrideFilterServices.HasValue?overrideFilterServices.Value : model.FilterServices); _auditLogger.LogDosResponse(model); if (SelectedServiceExits(model.SelectedService.Id, availableServices)) { model = await _outcomeViewModelBuilder.ItkResponseBuilder(model); if (model.ItkSendSuccess.HasValue && model.ItkSendSuccess.Value) { return(View(model)); } return(model.ItkDuplicate.HasValue && model.ItkDuplicate.Value ? View("DuplicateBookingFailure", model) : View("ServiceBookingFailure", model)); } model.UnavailableSelectedService = model.SelectedService; model.DosCheckCapacitySummaryResult = availableServices; model.DosCheckCapacitySummaryResult.ServicesUnavailable = availableServices.ResultListEmpty; model.UserInfo.CurrentAddress.IsInPilotArea = _postCodeAllowedValidator.IsAllowedPostcode(model.UserInfo.CurrentAddress.Postcode); return(View("ServiceBookingUnavailable", model)); }
private bool NeedToRequeryDos(OutcomeViewModel model) { return((!model.HasAcceptedCallbackOffer.HasValue || !model.HasAcceptedCallbackOffer.Value) && (model.OutcomeGroup.Equals(OutcomeGroup.AccidentAndEmergency) || model.OutcomeGroup.Equals(OutcomeGroup.MentalHealth) || model.OutcomeGroup.Equals(OutcomeGroup.ServiceFirst)) && FromOutcomeViewModelToDosViewModel.DispositionResolver.IsDOSRetry(model.Id) && !model.DosCheckCapacitySummaryResult.HasITKServices); }
private void AddEmbeddedDataInformation(OutcomeViewModel model, SurveyLinkViewModel surveyLinkViewModel) { var embeddedData = Mapper.Map <EmbeddedData>(model); embeddedData.QURL = string.Format("{0}API/v3/surveys/{1}/responses", _configuration.QualtricsApiBaseUrl, _configuration.QualtricsRecommendedServiceSurveyId); surveyLinkViewModel.EmbeddedData = embeddedData; }
public async Task <ActionResult> ServiceDetails(OutcomeViewModel model, [FromUri] bool?overrideFilterServices) { if (!ModelState.IsValidField("UserInfo.CurrentAddress.Postcode")) { return(View(Path.GetFileNameWithoutExtension(model.CurrentView), model)); } if (!_postCodeAllowedValidator.IsAllowedPostcode(model.UserInfo.CurrentAddress.Postcode)) { ModelState.AddModelError("UserInfo.CurrentAddress.Postcode", "Sorry, this service is not currently available in your area. Please call NHS 111 for advice now"); return(View(Path.GetFileNameWithoutExtension(model.CurrentView), model)); } var dosCase = Mapper.Map <DosViewModel>(model); await _auditLogger.LogDosRequest(model, dosCase); model.DosCheckCapacitySummaryResult = await _dosBuilder.FillCheckCapacitySummaryResult(dosCase, overrideFilterServices.HasValue?overrideFilterServices.Value : model.FilterServices); await _auditLogger.LogDosResponse(model); if (model.DosCheckCapacitySummaryResult.Error == null) { return(View("ServiceDetails", model)); } return(View(Path.GetFileNameWithoutExtension(model.CurrentView), model)); }
protected override async void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); OutcomeViewModel viewModel = new OutcomeViewModel(navigator, domainFacade); OutcomeParameter parameter = e.Parameter as OutcomeParameter; if (parameter != null) { if (parameter.Amount != null) { viewModel.Amount = (float)parameter.Amount.Value; } if (parameter.Description != null) { viewModel.Description = parameter.Description; } if (!parameter.CategoryKey.IsEmpty) { viewModel.SelectedCategories.Add(parameter.CategoryKey); } } IEnumerable <CategoryModel> categories = await queryDispatcher.QueryAsync(new ListAllCategory()); viewModel.Categories.AddRange(categories); DataContext = viewModel; }
private async Task <DosCheckCapacitySummaryResult> GetServiceAvailability(OutcomeViewModel model, DateTime?overrideDate, bool filterServices, DosEndpoint?endpoint) { var dosViewModel = _dosBuilder.BuildDosViewModel(model, overrideDate); _auditLogger.LogDosRequest(model, dosViewModel); return(await _dosBuilder.FillCheckCapacitySummaryResult(dosViewModel, filterServices, endpoint).ConfigureAwait(false)); }
public async Task <OutcomeViewModel> GetOversightViewModel(Guid applicationId, Guid?outcomeKey) { var applicationDetailsTask = _applyApiClient.GetApplicationDetails(applicationId); var oversightReviewTask = _applyApiClient.GetOversightReview(applicationId); await Task.WhenAll(applicationDetailsTask, oversightReviewTask); var applicationDetails = _applyApiClient.GetApplicationDetails(applicationId).Result; var oversightReview = _applyApiClient.GetOversightReview(applicationId).Result; var onRegister = false; if (applicationDetails?.Ukprn != null) { var registerStatus = await _registerApiClient.GetOrganisationRegisterStatus(new GetOrganisationRegisterStatusRequest { UKPRN = applicationDetails.Ukprn }); onRegister = registerStatus.UkprnOnRegister; } var viewModel = new OutcomeViewModel { IsNew = oversightReview == null, ApplicationSummary = CreateApplicationSummaryViewModel(applicationDetails), GatewayOutcome = CreateGatewayOutcomeViewModel(applicationDetails, oversightReview), FinancialHealthOutcome = CreateFinancialHealthOutcomeViewModel(applicationDetails), ModerationOutcome = CreateModerationOutcomeViewModel(applicationDetails, oversightReview), InProgressDetails = CreateInProgressDetailsViewModel(oversightReview), OverallOutcome = CreateOverallOutcomeViewModel(oversightReview), ShowInProgressDetails = oversightReview?.InProgressDate != null, OversightStatus = oversightReview?.Status ?? OversightReviewStatus.None, ApproveGateway = GetStringValueForApprovalStatusBoolean(oversightReview?.GatewayApproved), ApproveModeration = GetStringValueForApprovalStatusBoolean(oversightReview?.ModerationApproved), IsGatewayRemoved = applicationDetails.ApplicationStatus == ApplicationStatus.Removed, IsGatewayFail = applicationDetails.GatewayReviewStatus == GatewayReviewStatus.Fail, HasFinalOutcome = oversightReview != null && oversightReview.Status != OversightReviewStatus.None && oversightReview.Status != OversightReviewStatus.InProgress, OnRegister = onRegister }; if (oversightReview == null || oversightReview.Status == OversightReviewStatus.InProgress) { var cachedItem = await _cacheStorageService.RetrieveFromCache <OutcomePostRequest>(outcomeKey.ToString()); if (cachedItem == null) { return(viewModel); } viewModel.OversightStatus = cachedItem.OversightStatus; viewModel.ApproveGateway = cachedItem.ApproveGateway; viewModel.ApproveModeration = cachedItem.ApproveModeration; viewModel.SuccessfulText = cachedItem.SuccessfulText; viewModel.SuccessfulAlreadyActiveText = cachedItem.SuccessfulAlreadyActiveText; viewModel.SuccessfulFitnessForFundingText = cachedItem.SuccessfulFitnessForFundingText; viewModel.UnsuccessfulText = cachedItem.UnsuccessfulText; viewModel.UnsuccessfulExternalText = cachedItem.UnsuccessfulExternalText; viewModel.InProgressInternalText = cachedItem.InProgressInternalText; viewModel.InProgressExternalText = cachedItem.InProgressExternalText; } return(viewModel); }
public async Task <DosViewModel> DosResultsBuilder(OutcomeViewModel outcomeViewModel) { var model = _mappingEngine.Map <DosViewModel>(outcomeViewModel); var surgery = await GetSelectedSurgery(model); var capacitySummaryRequest = await BuildCheckCapacitySummaryRequest(outcomeViewModel, surgery); var request = new HttpRequestMessage { Content = new StringContent(JsonConvert.SerializeObject(capacitySummaryRequest), Encoding.UTF8, "application/json") }; var response = await _restfulHelper.PostAsync(_configuration.BusinessDosCheckCapacitySummaryUrl, request); if (response.StatusCode == HttpStatusCode.OK) { var val = await response.Content.ReadAsStringAsync(); model.CheckCapacitySummaryResultListJson = HttpUtility.HtmlDecode(val); var jObj = (JObject)JsonConvert.DeserializeObject(val); var result = jObj["CheckCapacitySummaryResult"]; model.CheckCapacitySummaryResultList = result.ToObject <CheckCapacitySummaryResult[]>(); } else { model.CheckCapacitySummaryResultList = new CheckCapacitySummaryResult[0]; } return(model); }
public void Map_OutcomeViewModel_To_DosCase() { var viewModel = new OutcomeViewModel() { UserInfo = new UserInfo() { Age = 22, HomeAddress = new AddressInfo() { AddressLine1 = "1 Test lane", City = "TestTown" }, Gender = "Female" }, Id = "Dx02", SymptomGroup = "1056", SymptomDiscriminator = "2222" }; var result = Mapper.Map <OutcomeViewModel, DosCase>(viewModel); Assert.AreEqual("22", result.Age); Assert.AreEqual(1056, result.SymptomGroup); Assert.AreEqual(1002, result.Disposition); Assert.AreEqual(GenderType.F, result.Gender); Assert.IsTrue(result.SymptomDiscriminatorList.Contains(2222)); }
public async Task <ActionResult> TempDosResults(OutcomeViewModel model) //TODO remove as soon as postcode autosuggest is in place { model.UserInfo.CurrentAddress.PostCode = model.AddressSearchViewModel.PostCode; var viewModel = await _dosBuilder.DosResultsBuilder(model); return(View("../DOS/DosResults", viewModel)); }
private ITKDispatchRequest CreateItkDispatchRequest(OutcomeViewModel model) { var itkRequestData = _mappingEngine.Mapper.Map <OutcomeViewModel, ITKDispatchRequest>(model); itkRequestData.Authentication = getItkAuthentication(); return(itkRequestData); }
public AddressSearchViewModel Build(OutcomeViewModel model) { return(new AddressSearchViewModel { PostcodeApiAddress = _configuration.PostcodeSearchByIdApiUrl, PostcodeApiSubscriptionKey = _configuration.PostcodeSubscriptionKey }); }
public void LogPrimaryCareReason(OutcomeViewModel model, string reason) { if (string.IsNullOrEmpty(reason)) { return; } var audit = model.ToAuditEntry(); switch (reason) { case "cannot-get-appt": audit.EventData = "Patient cannot get a GP appointment"; break; case "away-from-home": audit.EventData = "Patient is away from home"; break; case "no-gp": audit.EventData = "Patient has no GP"; break; } Log(audit); }
//[Route("question/revisit/{questionNo}/")] public async Task <ActionResult> Revisit(OutcomeViewModel model, [ModelBinder(typeof(IntArrayModelBinder))] int[] answers, bool filterServices, string selectedAnswer) { if (selectedAnswer.ToLower() == "no") { model = await _outcomeViewModelBuilder.DispositionBuilder(model).ConfigureAwait(false); if (model.DosCheckCapacitySummaryResult.HasITKServices) { throw new NotImplementedException(); //no trigger question journeys currently offer callback } var viewRouter = _viewRouter.Build(model, ControllerContext); return(View(viewRouter.ViewName, model)); } var result = await DirectInternal(model.PathwayId, model.UserInfo.Demography.Age, model.PathwayTitle, model.CurrentPostcode, answers, filterServices, false) .ConfigureAwait(false); var journeyViewModel = (JourneyViewModel)((ViewResult)result).Model; journeyViewModel.TriggerQuestionNo = model.TriggerQuestionNo; journeyViewModel.TriggerQuestionAnswer = model.TriggerQuestionAnswer; journeyViewModel.JourneyId = model.JourneyId; journeyViewModel.SessionId = model.SessionId; ModelState.Clear(); return(result); }
public async Task <ActionResult> DispositionWithServices(OutcomeViewModel model, string submitAction, DosEndpoint?endpoint = null) { var postcodeValidatorResponse = _postCodeAllowedValidator.IsAllowedPostcode(model.CurrentPostcode); model.UserInfo.CurrentAddress.IsInPilotArea = postcodeValidatorResponse == PostcodeValidatorResponse.InPathwaysArea; if (postcodeValidatorResponse == PostcodeValidatorResponse.InvalidSyntax) { ModelState.AddModelError("CurrentPostcode", "Enter a valid postcode."); return(View("ChangePostcode", model)); } if (postcodeValidatorResponse == PostcodeValidatorResponse.PostcodeNotFound) { ModelState.AddModelError("CurrentPostcode", "We can't find any services in '" + model.CurrentPostcode + "'. Check the postcode is correct."); return(View("ChangePostcode", model)); } model.UserInfo.CurrentAddress.IsInPilotArea = _postCodeAllowedValidator.IsAllowedPostcode(model.CurrentPostcode) == PostcodeValidatorResponse.InPathwaysArea; var viewName = "ChangePostcode"; if (submitAction == "manualpostcode") { return(View(viewName, model)); } if (!model.UserInfo.CurrentAddress.IsInPilotArea) { return(View("OutOfArea", model)); } var outcomeModel = await _outcomeViewModelBuilder.PopulateGroupedDosResults(model, null, null, endpoint); viewName = _viewRouter.GetViewName(model, ControllerContext); return(View(viewName, outcomeModel)); }
public async Task <ActionResult> ChangePostcode(OutcomeViewModel model) { ModelState.Clear(); await _auditLogger.LogEventData(model, "User elected to change postcode."); return(View(model));; }
public void Setup() { _mappingEngine = new Mock <IMappingEngine>(); _mockCareAdviceBuilder = new Mock <ICareAdviceBuilder>(); _mockRestClient = new Mock <ILoggingRestClient>(); _mockRestPostcodeApiClient = new Mock <ILoggingRestClient>(); _mockRestClientItkDispatcherApi = new Mock <ILoggingRestClient>(); _resetClientCaseDataCaptureApi = new Mock <ILoggingRestClient>(); _mockConfiguration = new Mock <Presentation.Configuration.IConfiguration>(); _mockJourneyHistoryWrangler = new Mock <IJourneyHistoryWrangler>(); _mockKeywordCollector = new Mock <IKeywordCollector>(); _mockSurveyLinkViewModelBuilder = new Mock <ISurveyLinkViewModelBuilder>(); _mockAuditLogger = new Mock <IAuditLogger>(); _mockDosBuilder = new Mock <IDOSBuilder>(); _mockRecommendedServiceBuilder = new Mock <IRecommendedServiceBuilder>(); SetupMockFillCareAdviceBuilder(); SetupMockConfiguration(); _outcomeViewModelBuilder = new OutcomeViewModelBuilder(_mockCareAdviceBuilder.Object, _mockRestClient.Object, _mockRestPostcodeApiClient.Object, _mockRestClientItkDispatcherApi.Object, _resetClientCaseDataCaptureApi.Object, _mockConfiguration.Object, _mappingEngine.Object, _mockKeywordCollector.Object, _mockJourneyHistoryWrangler.Object, _mockSurveyLinkViewModelBuilder.Object, _mockAuditLogger.Object, _mockDosBuilder.Object, _mockRecommendedServiceBuilder.Object); _sentDispositions = new List <int>(); _mockDosBuilder.Setup(d => d.BuildDosViewModel(It.IsAny <OutcomeViewModel>(), It.IsAny <DateTime?>())) .Returns(new DosViewModel { Disposition = 1111 }); _mockDosBuilder.Setup(d => d.FillCheckCapacitySummaryResult(It.IsAny <DosViewModel>(), It.IsAny <bool>(), It.IsAny <DosEndpoint?>())) .Callback <DosViewModel, bool, DosEndpoint?>((m, f, e) => _sentDispositions.Add(m.Disposition)) .Returns(Task.FromResult(new DosCheckCapacitySummaryResult())); ConfigurationManager.AppSettings["ValidationDxRemap"] = "Dx02:Dx333"; ConfigurationManager.AppSettings["ValidationDxRetry"] = "Dx02"; _model = new OutcomeViewModel { Id = "Dx02", SymptomDiscriminatorCode = "1", UserInfo = new UserInfo { Demography = new AgeGenderViewModel { Gender = "Male" } }, OutcomeGroup = OutcomeGroup.AccidentAndEmergency }; }
public void LogItkRequest(OutcomeViewModel model, ITKDispatchRequest itkRequest) { var audit = model.ToAuditEntry(); var auditedItkRequest = Mapper.Map <AuditedItkRequest>(itkRequest); audit.ItkRequest = JsonConvert.SerializeObject(auditedItkRequest); Log(audit); }
public void LogDosResponse(OutcomeViewModel model, DosCheckCapacitySummaryResult result) { var audit = model.ToAuditEntry(); var auditedDosResponse = Mapper.Map <AuditedDosResponse>(result); audit.DosResponse = JsonConvert.SerializeObject(auditedDosResponse); Log(audit); }
public void LogDosRequest(OutcomeViewModel model, DosViewModel dosViewModel) { var audit = model.ToAuditEntry(); var auditedDosViewModel = Mapper.Map <AuditedDosRequest>(dosViewModel); audit.DosRequest = JsonConvert.SerializeObject(auditedDosViewModel); Log(audit); }
public void LogItkResponse(OutcomeViewModel model, IRestResponse response) { var audit = model.ToAuditEntry(); var auditedItkResponse = Mapper.Map <AuditedItkResponse>(response); audit.ItkResponse = JsonConvert.SerializeObject(auditedItkResponse); Log(audit); }
public async Task LogItkResponse(OutcomeViewModel model, HttpResponseMessage response) { var audit = model.ToAuditEntry(new HttpSessionStateWrapper(HttpContext.Current.Session)); var auditedItkResponse = Mapper.Map <AuditedItkResponse>(response); audit.ItkResponse = JsonConvert.SerializeObject(auditedItkResponse); await Log(audit); }
public async Task LogItkRequest(OutcomeViewModel model, ITKDispatchRequest itkRequest) { var audit = model.ToAuditEntry(new HttpSessionStateWrapper(HttpContext.Current.Session)); var auditedItkRequest = Mapper.Map <AuditedItkRequest>(itkRequest); audit.ItkRequest = JsonConvert.SerializeObject(auditedItkRequest); await Log(audit); }
public async Task LogDosResponse(OutcomeViewModel model) { var audit = model.ToAuditEntry(new HttpSessionStateWrapper(HttpContext.Current.Session)); var auditedDosResponse = Mapper.Map <AuditedDosResponse>(model.DosCheckCapacitySummaryResult); audit.DosResponse = JsonConvert.SerializeObject(auditedDosResponse); await Log(audit); }
public async Task LogDosRequest(OutcomeViewModel model, DosViewModel dosViewModel) { var audit = model.ToAuditEntry(new HttpSessionStateWrapper(HttpContext.Current.Session)); var auditedDosViewModel = Mapper.Map <AuditedDosRequest>(dosViewModel); audit.DosRequest = JsonConvert.SerializeObject(auditedDosViewModel); await Log(audit); }