public void Validates_Between_Floats()
        {
            var vm = ComparisonTypeViewModel.Locate(Between);

            Assert.IsTrue(vm.Validate("1.5", min: "0.3", max: "2.3"));
            Assert.IsFalse(vm.Validate("0.1", min: "0.75", max: "0.8"));
            Assert.IsTrue(vm.Validate("0.1", min: "0", max: "0.11"));
        }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ReadingInputViewModel"/> class.
 /// </summary>
 public ReadingInputViewModel(ReadingInput todaysData, ItemModel item, AsyncCommand save, AsyncCommand cancel)
     : this(save, cancel)
 {
     this.item           = item;
     this.ComparisonType = ComparisonTypeViewModel.Locate(this.item.Specification.ComparisonType);
     this.todaysData     = todaysData;
     this.ShowInput      = this.todaysData != null;
 }
        public void Validates_Less_Than_Or_Equal_Ints()
        {
            var vm = ComparisonTypeViewModel.Locate(LessThanOrEqual);

            Assert.IsTrue(vm.Validate("0", "1"));
            Assert.IsTrue(vm.Validate("1", "1"));
            Assert.IsFalse(vm.Validate("1", "0"));
        }
        public void Validates_Between_Ints()
        {
            var vm = ComparisonTypeViewModel.Locate(Between);

            Assert.IsTrue(vm.Validate("1", min: "0", max: "2"));
            Assert.IsFalse(vm.Validate("0", min: "1", max: "0"));
            Assert.IsTrue(vm.Validate("0", min: "0", max: "1"));
        }
        public void Validates_Less_Than_Or_Equal_Floats()
        {
            var vm = ComparisonTypeViewModel.Locate(LessThanOrEqual);

            Assert.IsTrue(vm.Validate("0.2", "0.7"));
            Assert.IsTrue(vm.Validate("0.5", "0.5"));
            Assert.IsTrue(vm.Validate(".5", "0.5"));
            Assert.IsFalse(vm.Validate("1.2", "0.5"));
        }
        public void Validates_Either_Or()
        {
            var vm = ComparisonTypeViewModel.Locate(Either);

            //Assert.IsTrue(vm.Validate("true", min: "True", max: "False"));
            //Assert.IsTrue(vm.Validate("false", min: "True", max: "False"));
            Assert.IsFalse(vm.Validate("derp", min: "True", max: "False"));

            //Assert.IsTrue(vm.Validate("0.1", min: "0.1", max: "0.8"));
            //Assert.IsTrue(vm.Validate("0.8", min: "0.1", max: "0.8"));
            //Assert.IsFalse(vm.Validate("0.8", min: "0.2", max: "0.3"));
        }
        private async void SaveInput(ReadingInputViewModel newData)
        {
            if (this.input.ItemId == Guid.Empty)
            {
                return;
            }
            var io = ServiceResolver.Resolve <IFileHandler>();

            var existingReading = ReadingManager.Find(newData.ItemId);
            //reading already exists or was just created, so just update the values.
            var item = this.station.Items.FirstOrDefault(i => i.Id == newData.ItemId);

            if (newData.IsBooleanInput)
            {
                existingReading.Value = newData.BooleanValue.ToString();
            }
            else
            {
                existingReading.Value = newData.StringValue;
            }
            existingReading.Comments  = newData.Comments;
            existingReading.TimeTaken = DateTime.UtcNow;

            // Now validate the users input
            var validator = ComparisonTypeViewModel.Locate(newData.InputType);

            if (validator.UsesOneInput)
            {
                existingReading.IsOutOfSpec = validator.Validate(
                    value: existingReading.Value,
                    max: item.Specification.UpperBound) == false;
            }
            else
            {
                existingReading.IsOutOfSpec = validator.Validate(
                    value: existingReading.Value,
                    min: item.Specification.LowerBound,
                    max: item.Specification.UpperBound) == false;
            }
            //finally, write out the result to file so that way it doesn't get lost.
            item.CurrentReading = existingReading;

            this.ListModel.SetSelectedAsVisited();

            await ReadingManager.SaveReadingsToDiskAsync();

            //place binding for completed items here. probably.
        }
Exemplo n.º 8
0
        public override async Task <Reading> InsertAsync(Reading toCreate)
        {
            toCreate.Id = Guid.NewGuid();

            //validate the item is within spec.
            var item = Items.GetSingle(toCreate.ItemId);

            //used to get the validator object.
            var validator = ComparisonTypeViewModel.Locate(item.Specification.ComparisonType.Name);

            toCreate.IsOutOfSpec = validator.Validate(toCreate.Value,
                                                      min: item.Specification.LowerBoundValue,
                                                      max: item.Specification.UpperBoundValue) == false;

            var tracked = Database.Readings.Add(toCreate);

            if (await SaveAsync())
            {
                return(tracked);
            }
            return(null);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ReadingInputScreenViewModel"/> class.
        /// Represents the full view model for the page.
        /// </summary>
        public ReadingInputScreenViewModel(RegionModelSource region, StationModel station)
        {
            var regionNav = new AsyncCommand((obj) =>
            {
                Navigator.Navigate(Shared.Navigation.NavigationType.StationSelect);
            });

            this.Save = new AsyncCommand((obj) => this.SaveInput(this.input), this.CanSave);

            this.station = station;
            this.Crumbs.Add(new BreadcrumbItemModel("Areas", region.NavigateRoot));
            this.Crumbs.Add(new BreadcrumbItemModel(region.Name, region.Navigate));
            this.Crumbs.Add(new BreadcrumbItemModel(station.Name, station.Navigate));
            this.Input     = new ReadingInputViewModel(this.Save, null);
            this.ListModel = new ReadingInputListViewModel(this);
            foreach (var item in station.Items)
            {
                if (item.StationId == station.Id)
                {
                    var newMeter = new Meter(item.Meter, item)
                    {
                        Id        = item.Id,
                        Name      = item.Name,
                        MeterName = item.Meter
                    };

                    var currentReading = ReadingManager.Find(item.Id);

                    newMeter.LastReading      = new ReadingInput();
                    newMeter.TwoReadingsAgo   = new ReadingInput();
                    newMeter.ThreeReadingsAgo = new ReadingInput();
                    newMeter.FourReadingsAgo  = new ReadingInput();
                    newMeter.ComparisonType   = ComparisonTypeViewModel.Locate(item.Specification.ComparisonType);
                    newMeter.TodaysReading    = new ReadingInput()
                    {
                        MinimumValue     = item.Specification.LowerBound,
                        MaximumValue     = item.Specification.UpperBound,
                        UnitAbbreviation = item.Specification.UnitOfMeasure.Abbreviation,
                        ValueBounds      = newMeter.ComparisonType.AsEnum(),
                        IsWithinSpec     = false,
                    };

                    if (!string.IsNullOrEmpty(currentReading.Value))
                    {
                        bool boolVal = false;
                        if (bool.TryParse(currentReading.Value, out boolVal))
                        {
                            newMeter.TodaysReading.BooleanValue = boolVal;
                        }
                        else
                        {
                            //just a string value.
                            newMeter.TodaysReading.StringValue = currentReading.Value;
                        }
                        newMeter.TodaysReading.IsWithinSpec = !currentReading.IsOutOfSpec;
                        newMeter.IsComplete = true;
                    }

                    var count = item.PastFourReadings.Count();

                    if (count > 0)
                    {
                        newMeter.LastReading.StringValue  = item.PastFourReadings.ElementAt(0).Value;
                        newMeter.LastReading.IsWithinSpec = !item.PastFourReadings.ElementAt(0).IsOutOfSpec;
                        newMeter.LastReading.Notes        = item.PastFourReadings.ElementAt(0).Comments;
                    }

                    if (count > 1)
                    {
                        newMeter.TwoReadingsAgo.StringValue  = item.PastFourReadings.ElementAt(1).Value;
                        newMeter.TwoReadingsAgo.IsWithinSpec = !item.PastFourReadings.ElementAt(1).IsOutOfSpec;
                    }

                    if (count > 2)
                    {
                        newMeter.ThreeReadingsAgo.StringValue  = item.PastFourReadings.ElementAt(2).Value;
                        newMeter.ThreeReadingsAgo.IsWithinSpec = !item.PastFourReadings.ElementAt(2).IsOutOfSpec;
                    }

                    if (count > 3)
                    {
                        newMeter.FourReadingsAgo.StringValue  = item.PastFourReadings.ElementAt(3).Value;
                        newMeter.FourReadingsAgo.IsWithinSpec = !item.PastFourReadings.ElementAt(3).IsOutOfSpec;
                    }

                    this.ListModel.Meters.Add(newMeter);
                }
            }
        }
        public void Validate_Cannot_Compare_String_And_Float_LT()
        {
            var vm = ComparisonTypeViewModel.Locate(LessThan);

            vm.Validate("abc", "0.5");
        }
        public void Validate_Cannot_Compare_String_And_Float_LTE()
        {
            var vm = ComparisonTypeViewModel.Locate(GreaterThanOrEqual);

            vm.Validate("abc", "0.5");
        }