Esempio n. 1
0
        public StartUpViewModel(IScreen screen) : base(screen)
        {
            IsDbAvailable = App.Features.InAppDatabase == Infrastructure.Features.FeatureAvailability.Available &&
                            App.Features.MultiUserEnabled == Infrastructure.Features.FeatureAvailability.Available;
            Identifier = new TestIndentifier {
                ImpulseRate = _minimumImpulseRate, Correction = false
            };

            NavigateCommand      = ReactiveCommand.Create(StartTest);
            NavigateToturialMode = ReactiveCommand.Create(StartTurotial);
            Quantums             = QuantumTypeLookup.Load();
            Counts          = TestCountTypeLookup.Load();
            SelectedQuantum = Quantums.FirstOrDefault(x => x.Item == Quantum.TwoHalf);
            SelectedCount   = Counts.FirstOrDefault(x => x.Item == TestCount.Sixty);
            Representations = RepresentationTypeLookup.Load();

            SelectedRepresentation = Representations.FirstOrDefault(x => x.Item == RepresentationType.UI);
            SelectedUser           = UserManager.GetDefaultUser();
            SuggestedUsers         = new ObservableCollection <User>();
            this.WhenActivated(disposables =>
            {
                this
                .WhenAnyValue(x => x.SelectedRepresentation)
                .WhereNotNull()
                .Subscribe(x => Identifier.RepresentationType = x.Item)
                .DisposeWith(disposables);

                this.WhenAnyValue(x => x.SearchTerm)
                .WhereNotNull()
                .Subscribe(term => Search(term.Trim()));
            });
        }
Esempio n. 2
0
 public static void Load(this TestIndentifier identifier)
 {
     sheet = identifier;
     identifier.Answers       = new List <TestAnswer>();
     identifier.TestFragments = new List <TestFragment>();
     Load(identifier.TestCount);
 }
Esempio n. 3
0
        private void StartTest()
        {
            var Identifier = new TestIndentifier {
                ImpulseRate = 200, Correction = true, Quantum = 3000, TestCount = 10, RepresentationType = RepresentationType.UI
            };

            HostScreen.Router.Navigate.Execute(new ValidationViewModel(HostScreen, Identifier, null));
        }
Esempio n. 4
0
 public TestViewModel(IScreen screen, TestIndentifier identifier, User selectedUser) : base(screen)
 {
     User             = selectedUser;
     ActiveIdentifier = identifier;
     identifier.Load();
     FirstButtonCommand  = ReactiveCommand.Create(FirstButtonAction);
     SecondButtonCommand = ReactiveCommand.Create(SecondButtonAction);
     ThirdButtonCommand  = ReactiveCommand.Create(ThirdButtonAction);
     FourthButtonCommand = ReactiveCommand.Create(FourthButtonAction);
     IsInformational     = false;
 }
Esempio n. 5
0
        public static async Task InsetTest(TestIndentifier test)
        {
            if (App.Features.InAppDatabase == Infrastructure.Features.FeatureAvailability.Available)
            {
                var identifierRepo = GenericRepository.Of <TestIndentifier>();

                await identifierRepo.AddAsync(test);

                ReactiveFactory.ChangeUser(new User {
                    Id = test.UserId
                });
            }
        }
Esempio n. 6
0
        public static async Task <TestIndentifier> EagerLoad(TestIndentifier test)
        {
            var fragmentRepo = GenericRepository.Of <TestFragment>();
            var answerRepo   = GenericRepository.Of <TestAnswer>();
            var userRepo     = GenericRepository.Of <User>();

            test.Answers       = (await answerRepo.FindAllAsync(x => x.IndentifierId == test.Id)).ToList();
            test.TestFragments = (await fragmentRepo.FindAllAsync(x => x.IndentifierId == test.Id)).ToList();
            foreach (var item in test.Answers)
            {
                item.TestFragment = test.TestFragments.FirstOrDefault(x => x.Id == item.TestFragmentId);
                item.PreFragment  = test.TestFragments.FirstOrDefault(x => x.Id == item.PreFragmentId);
            }
            test.User = await userRepo.GetAsync(test.UserId);

            return(test);
        }
Esempio n. 7
0
        public static ValidationContext LoadValidation(this TestIndentifier identifier)
        {
            var context = new ValidationContext();

            var possibleAnswers = new List <VirtualKey> {
                VirtualKey.Up, VirtualKey.Down, VirtualKey.Left, VirtualKey.Right
            };

            possibleAnswers.Add(possibleAnswers.PickRandom());
            possibleAnswers.Add(possibleAnswers.PickRandom());
            context.Items = possibleAnswers.Randomize().Select(x => new ValidationItem {
                Key = x
            }).ToList();



            return(context);
        }
Esempio n. 8
0
        public ValidationViewModel(IScreen screen, TestIndentifier identifier, Models.User selectedUser, bool proceedOnInvalid = false) : base(screen)
        {
            User             = selectedUser;
            Context          = identifier.LoadValidation();
            ActiveIdentifier = identifier;
            _proceed         = proceedOnInvalid;

            FirstButtonCommand  = ReactiveCommand.Create(FirstButtonAction);
            SecondButtonCommand = ReactiveCommand.Create(SecondButtonAction);
            ThirdButtonCommand  = ReactiveCommand.Create(ThirdButtonAction);
            FourthButtonCommand = ReactiveCommand.Create(FourthButtonAction);

            this.WhenAnyValue(x => x.InfoText)
            .Subscribe(y =>
            {
                IsInformational = y.HasValue();
                IsButtonShown   = y.IsEmpty();
            });
        }
Esempio n. 9
0
        public ResultsViewModel(IScreen screen, TestIndentifier sheet, bool canTest = false) : base(screen)
        {
            Validation         = sheet.ValidationContext;
            CanTest            = canTest;
            ActiveSheet        = sheet;
            FilteredData       = new ObservableCollection <TestAnswer>();
            HasTrue            = sheet.Answers.Any(x => x.Status == CorrectionStatus.True);
            HasFalse           = sheet.Answers.Any(x => x.Status == CorrectionStatus.False);
            HasNotAnswered     = sheet.Answers.Any(x => x.Status == CorrectionStatus.NoEntry);
            Mode               = GraphResultShowModeLookup.Load(HasTrue, HasFalse);
            SelectedMode       = Mode.FirstOrDefault();
            ExportExcelCommand = ReactiveCommand.Create(Export);
            if (canTest)
            {
                NavigateTest = ReactiveCommand.Create(GoToStartUp);
            }

            if (HasNotAnswered)
            {
                Idle = getSustain(CorrectionStatus.NoEntry);
            }

            if (HasTrue)
            {
                _trueReaction = (int)sheet.Answers.Where(x => x.Status == CorrectionStatus.True).Select(x => x.InputSpeed).Average().Value;
                Sustain       = getSustain(CorrectionStatus.True);
            }


            if (HasFalse)
            {
                _falseReaction = (int)sheet.Answers.Where(x => x.Status == CorrectionStatus.False).Select(x => x.InputSpeed).Average().Value;
                Fatigue        = getSustain(CorrectionStatus.False);
            }

            if (HasMixed)
            {
                _mixReaction = (int)sheet.Answers.Where(x => x.Status != CorrectionStatus.NoEntry).Select(x => x.InputSpeed).Average().Value;
            }

            if (true)
            {
            }


            var trueCount  = ActiveSheet.Answers.Count(x => x.Status == CorrectionStatus.True);
            var falseCount = ActiveSheet.Answers.Count(x => x.Status == CorrectionStatus.False);
            var all        = ActiveSheet.Answers.Count;

            Grade      = $"{ trueCount - falseCount} / {all}";
            Percentage = $"{((trueCount - falseCount) * 100) / all}%";


            this.WhenActivated(disposables =>
            {
                this
                .WhenAnyValue(x => x.SelectedMode)
                .WhereNotNull()
                .Subscribe(x =>
                {
                    System.Diagnostics.Debug.WriteLine("Chart Update Requested");
                    FilteredData.Clear();
                    switch (x.Item)
                    {
                    case GraphResultShowMode.Mixed:
                        FilteredData.AddRange(GetMixedList());
                        ReactionTime = _mixReaction.Value;
                        break;

                    case GraphResultShowMode.True:
                        FilteredData.AddRange(GetTrueList());
                        ReactionTime = _trueReaction.Value;
                        break;

                    case GraphResultShowMode.False:
                        FilteredData.AddRange(GetFalseList());
                        ReactionTime = _falseReaction.Value;
                        break;

                    default:
                        break;
                    }
                    MinWindow = FilteredData.Count * 25;
                })
                .DisposeWith(disposables);
            });
            DataFix();
        }