public static async Task <CaseValidation> CheckForAbandonedSession(CaseValidation currentlyActiveValidation) { var container = ((PrismApplication)(App.Current)).Container; var databaseService = container.Resolve <IDatabaseService>(); var settingsService = container.Resolve <ISettingsService>(); if (settingsService.Setting <bool>("ActiveSession.Abandon.Enabled")) { // have we gone over Abandon.TimeoutMinutes var currentDuration = DateTime.Now - currentlyActiveValidation.StartDateTime; int timeoutMinutes = settingsService.Setting <int>("ActiveSession.Abandon.TimeoutMinutes"); if (currentDuration > TimeSpan.FromMinutes(timeoutMinutes)) { // abandon this session currentlyActiveValidation.Duration = currentDuration; currentlyActiveValidation.State = CaseValidationState.AbandonedAwaitingSendToServer; // we don't have a current session anymore var applicationState = container.Resolve <IApplicationState>(); applicationState.SetSessionInProgress(null); await databaseService.WriteCaseValidation(currentlyActiveValidation); return(currentlyActiveValidation); } } return(null); }
async Task StartSessionCommandCommand(CaseValidation caseValidation) { NavigationParameters navigationParameters = new NavigationParameters(); navigationParameters.Add("CaseValidation", caseValidation); await _navigationService.NavigateAsync("ConfirmSessionStartPage", navigationParameters); }
public CompleteSessionWizardController(CaseValidation sessionInProgress, INavigationService navigationService, IDataUpdateService dataUpdateService, IDatabaseService databaseService, ISessionUpdateService sessionUpdateService, IApplicationState applicationState) { _navigationService = navigationService; _dataUpdateService = dataUpdateService; _databaseService = databaseService; _sessionUpdateService = sessionUpdateService; _applicationState = applicationState; _sessionInProgress = sessionInProgress; }
public async Task WriteCaseValidation(CaseValidation caseValidation) { // write to the database if (caseValidation.CaseValidationID == 0) { await _connection.InsertAsync(caseValidation); } else { await _connection.UpdateAsync(caseValidation); } }
/// <summary> /// Sets the session in progress. /// </summary> /// <param name="sessionInProgress">The session in progress.</param> public void SetSessionInProgress(CaseValidation sessionInProgress) { SessionInProgress = sessionInProgress; if (sessionInProgress == null) { _notificationService.RemoveNotification(); } else { _notificationService.Notify("Applied ABC Provider", $"A session with {SessionInProgress.Case.Patient.PatientFirstName} {SessionInProgress.Case.Patient.PatientLastName.Substring(0, 1)} is in progress"); } }
public async Task WriteSignature(CaseValidation sessionInProgress, SignatureType signatureType, byte[] signatureBytes) { var currentSignature = (await _connection.QueryAsync <CaseValidationSignature>("select * from CaseValidationSignatures where CaseValidationID=? and SignatureType=?", sessionInProgress.CaseValidationID, (int)signatureType)).FirstOrDefault(); // if the signature exists for this case if (currentSignature == null) { // update it, await _connection.InsertAsync(new CaseValidationSignature { CaseValidationID = sessionInProgress.CaseValidationID, SignatureType = signatureType, Signature = signatureBytes }); } else { // otherwise overwrite it currentSignature.Signature = signatureBytes; await _connection.UpdateAsync(currentSignature); } }
CaseValidation GenerateCaseValidationRequest(string userName) { // call the server to validate this time var duration = _entryBaseInfoPageModel.EndTime - _entryBaseInfoPageModel.StartTime; var caseValidation = new CaseValidation { CaseID = _entryBaseInfoPageModel.Case.ID, UserName = userName, DateOfService = _entryBaseInfoPageModel.DateOfService, StartTime = _entryBaseInfoPageModel.StartTime, Duration = duration, ServiceID = _entryBaseInfoPageModel.SelectedService.ID, ServiceDescription = _entryBaseInfoPageModel.SelectedService.Description, LocationID = _entryBaseInfoPageModel.SelectedLocation.ID, LocationDescription = _entryBaseInfoPageModel.SelectedLocation.Description, SsgCaseIds = _entryBaseInfoPageModel.SelectedService.IsSsg ? String.Join(", ", _selectedCaseIds) : null, }; return(caseValidation); }
public async Task NextPage(int thisPageNumber) { Page thisPage = (Page)thisPageNumber; Page nextPage; ValidationResponse validationResponse = null; CaseValidation caseValidation = null; // handle any events and move to the next page if (thisPage == Page.Initial) { // this is the initial page nextPage = Page.EntryBaseInfoPage; } else if (thisPage == Page.EntryBaseInfoPage && _entryBaseInfoPageModel.SelectedService.IsSsg) { // this requires ssg information nextPage = Page.SsgSelectionPage; } else if (thisPage != Page.Complete) { // validate the request caseValidation = GenerateCaseValidationRequest(_applicationState.CurrentUser.Username); validationResponse = await _dataUpdateService.ValidateRequest(caseValidation); if (validationResponse.Errors == null || !validationResponse.Errors.Any()) { // the request has been validated caseValidation.State = CaseValidationState.Valid; caseValidation.ServerValidatedSessionID = validationResponse.ServerValidatedSessionID; caseValidation.Case = _applicationState.SelectedCase; await _databaseService.WriteCaseValidation(caseValidation); // save the questions await _databaseService.WriteCaseValidationQuestions(caseValidation.CaseValidationID, validationResponse.NoteQuestions); // and go to the final screen nextPage = Page.Complete; } else { // go to the error page nextPage = Page.BaseInfoResultsPage; } } else { // this shouldn't occur throw new InvalidOperationException("Unknown page state"); } NavigationParameters parameters = new NavigationParameters(); if (nextPage != Page.Complete) { parameters.Add("PageNumber", nextPage); parameters.Add("IWizardController", this); } switch (nextPage) { case Page.EntryBaseInfoPage: parameters.Add("EntryBaseInfoPageModel", _entryBaseInfoPageModel); await _navigationService.NavigateAsync("EntryBaseInfoPage", parameters); break; case Page.SsgSelectionPage: parameters.Add("SelectedCase", _entryBaseInfoPageModel.Case); parameters.Add("SelectedCaseIds", _selectedCaseIds); await _navigationService.NavigateAsync("SsgSelectionPage", parameters); break; case Page.BaseInfoResultsPage: parameters.Add("CaseValidation", caseValidation); parameters.Add("ValidationResponse", validationResponse); await _navigationService.NavigateAsync("BaseInfoResultsPage", parameters); break; case Page.Complete: parameters.Add("DisplayButtons", false); parameters.Add("Message", "Your session has been booked"); parameters.Add("CaseValidation", caseValidation); parameters.Add("ValidationResponse", validationResponse); parameters.Add("SelectedPage", "Cases"); parameters.Add("SubPage", "SelectedCasePage/BaseInfoResultsPage"); await _navigationService.NavigateAsync("file:///TabbedNavigationPage", parameters, animated : false); break; } }
public async Task NextPage(int pageNumber) { Page thisPage = (Page)pageNumber; Page nextPage; // handle any events and move to the next page if (thisPage == Page.Initial) { // this is the initial page nextPage = Page.EntryBaseInfoPage; } else if (thisPage == Page.EntryBaseInfoPage && _entryBaseInfoPageModel.SelectedService.IsSsg) { // this requires ssg information nextPage = Page.SsgSelectionPage; } else if (thisPage == Page.SsgSelectionPage || (thisPage == Page.EntryBaseInfoPage && !_entryBaseInfoPageModel.SelectedService.IsSsg)) { // validate the request _caseValidation = GenerateCaseValidationRequest(_applicationState.CurrentUser.Username); _validationResponse = await _dataUpdateService.ValidateRequest(_caseValidation, false); if (_validationResponse.Errors == null || !_validationResponse.Errors.Any()) { // the request has been validated _caseValidation.State = CaseValidationState.Valid; _caseValidation.ServerValidatedSessionID = _validationResponse.ServerValidatedSessionID; } // go to the display error/warning page nextPage = Page.BaseInfoResultsPage; } else if (thisPage == Page.BaseInfoResultsPage) { // we've just displayed the errors if (_caseValidation.State == CaseValidationState.Valid) { // we're valid, so go to the next page DisplayQuestionAnswers = new List <DisplayQuestionAnswer>(); var caseValidationQuestions = _validationResponse.NoteQuestions.Select(nq => new CaseValidationQuestion { Question = nq.Question }).ToList(); foreach (var caseValidationQuestion in caseValidationQuestions) { DisplayQuestionAnswers.Add(new DisplayQuestionAnswer { CaseValidationQuestion = caseValidationQuestion, Answer = String.Empty }); } // and go to the next page nextPage = Page.NoteEntryPage; } else { // not valid, so back to the start nextPage = Page.EntryBaseInfoPage; } } else if (thisPage == Page.NoteEntryPage) { // save the data to the database await _databaseService.WriteCaseValidation(_caseValidation); // save the questions await _databaseService.WriteCaseValidationQuestions(_caseValidation.CaseValidationID, _validationResponse.NoteQuestions); var caseValidationQuestions = await _databaseService.GetCaseValidationQuestions(_caseValidation.CaseValidationID); int index = 0; foreach (var displayQuestionAnswer in DisplayQuestionAnswers) { // update the question id displayQuestionAnswer.CaseValidationQuestion.CaseValidationQuestionID = caseValidationQuestions[index].CaseValidationQuestionID; // save the answer await _databaseService.SaveAnswer(displayQuestionAnswer.CaseValidationQuestion, displayQuestionAnswer.Answer); index++; } _caseValidation.State = CaseValidationState.CompletedAwaitingSendToServer; await _databaseService.WriteCaseValidation(_caseValidation); // start updating the data, but don't wait for a response as this is done in the background _sessionUpdateService.SendDataToServer().IgnoreResult(); // go back to the main screen nextPage = Page.Complete; } else { // this shouldn't occur throw new InvalidOperationException("Unknown page state"); } NavigationParameters parameters = new NavigationParameters(); parameters.Add("PageNumber", nextPage); parameters.Add("IWizardController", this); switch (nextPage) { case Page.EntryBaseInfoPage: parameters.Add("EntryBaseInfoPageModel", _entryBaseInfoPageModel); await _navigationService.NavigateAsync("EntryBaseInfoPage", parameters); break; case Page.SsgSelectionPage: parameters.Add("SelectedCase", _entryBaseInfoPageModel.Case); parameters.Add("SelectedCaseIds", _selectedCaseIds); await _navigationService.NavigateAsync("SsgSelectionPage", parameters); break; case Page.BaseInfoResultsPage: parameters.Add("DisplayButtons", true); parameters.Add("Message", "Your session is valid"); parameters.Add("CaseValidation", _caseValidation); parameters.Add("ValidationResponse", _validationResponse); await _navigationService.NavigateAsync("BaseInfoResultsPage", parameters); break; case Page.NoteEntryPage: parameters.Add("DisplayQuestionAnswer", DisplayQuestionAnswers); parameters.Add("AnswerValidationRequired", true); await _navigationService.NavigateAsync("NoteEntryPage", parameters); break; case Page.Complete: parameters.Add("SelectedPage", "Cases"); parameters.Add("SubPage", "SelectedCasePage/SessionCompletePage"); await _navigationService.NavigateAsync("file:///TabbedNavigationPage", parameters, animated : false); break; } }