Exemple #1
0
        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);
        }
Exemple #2
0
        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;
        }
Exemple #4
0
 public async Task WriteCaseValidation(CaseValidation caseValidation)
 {
     // write to the database
     if (caseValidation.CaseValidationID == 0)
     {
         await _connection.InsertAsync(caseValidation);
     }
     else
     {
         await _connection.UpdateAsync(caseValidation);
     }
 }
Exemple #5
0
        /// <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");
            }
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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;
            }
        }
Exemple #9
0
        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;
            }
        }