Пример #1
0
        public static int SaveComparable(ComparableModel comparable)
        {
            if (comparable.Id != 0)
            {
                throw new ArgumentException("Comparable with non-zero id cannot be saved.");
            }

            comparable.ModifiedOn = DateTime.Now;
            var commandText = "insert into Comparable (ComparisonId, UnitId, Store, Product, Price, Quantity, ModifiedOn) values (@ComparisonId, @UnitId, @Store, @Product, @Price, @Quantity, @ModifiedOn);";

            commandText += "select last_insert_rowid();";
            var parameters = new Dictionary <string, object>();

            parameters.Add("@ComparisonId", comparable.ComparisonId);
            parameters.Add("@UnitId", comparable.UnitId);
            parameters.Add("@Store", comparable.Store);
            parameters.Add("@Product", comparable.Product);
            parameters.Add("@Price", comparable.Price);
            parameters.Add("@Quantity", comparable.Quantity);
            parameters.Add("@ModifiedOn", comparable.ModifiedOn);

            int newId = 0;

            SqlConnection.ReaderWithCommand(commandText, parameters, (reader) => {
                newId = reader.Read() ? reader.GetInt32(0) : 0;
            });
            return(newId);
        }
Пример #2
0
 public ComparableTableViewSource(ComparableTableView tableView, ComparableModel comparable, UIViewController controller)
 {
     _controller = controller;
     _comparable = comparable;
     _tableView  = tableView;
     TextFields  = new List <UITextField>();
 }
Пример #3
0
        public override void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);
            if (_reloadOnAppeared)
            {
                _reloadOnAppeared = false;

                // fade table out, reload data and fade back in
                _tableView.Reset(_comparison);
                UIView.Animate(0.2, () => { _tableView.Alpha = 1; }, () => { _tableView.Opaque = true; });
            }
            else if (_comparableToAdd != null)
            {
                _tableView.AddComparable(_comparableToAdd);
                _comparableToAdd = null;
            }

            if (_comparableIdToReposition.HasValue)
            {
                _tableView.RepositionRowForComparable(_comparableIdToReposition.Value);
                _comparableIdToReposition = null;
            }

            _tableView.DeselectSelectedRow();
        }
Пример #4
0
        public void Test_ObservableValidator_ValidateProperty()
        {
            var model  = new ComparableModel();
            var events = new List <DataErrorsChangedEventArgs>();

            model.ErrorsChanged += (s, e) => events.Add(e);

            // Set a correct value for both properties, first A then B
            model.A = 42;
            model.B = 30;

            Assert.AreEqual(events.Count, 0);
            Assert.IsFalse(model.HasErrors);

            // Make B greater than A, hence invalidating A
            model.B = 50;

            Assert.AreEqual(events.Count, 1);
            Assert.AreEqual(events.Last().PropertyName, nameof(ComparableModel.A));
            Assert.IsTrue(model.HasErrors);

            events.Clear();

            // Make A greater than B, hence making it valid again
            model.A = 51;

            Assert.AreEqual(events.Count, 1);
            Assert.AreEqual(events.Last().PropertyName, nameof(ComparableModel.A));
            Assert.AreEqual(model.GetErrors(nameof(ComparableModel.A)).Count(), 0);
            Assert.IsFalse(model.HasErrors);

            events.Clear();

            // Make A smaller than B, hence invalidating it
            model.A = 49;

            Assert.AreEqual(events.Count, 1);
            Assert.AreEqual(events.Last().PropertyName, nameof(ComparableModel.A));
            Assert.AreEqual(model.GetErrors(nameof(ComparableModel.A)).Count(), 1);
            Assert.IsTrue(model.HasErrors);

            events.Clear();

            // Lower B, hence making A valid again
            model.B = 20;

            Assert.AreEqual(events.Count, 1);
            Assert.AreEqual(events.Last().PropertyName, nameof(ComparableModel.A));
            Assert.AreEqual(model.GetErrors(nameof(ComparableModel.A)).Count(), 0);
            Assert.IsFalse(model.HasErrors);
        }
Пример #5
0
        /// <summary>
        /// Updates all properties of a comparable except for the ComparisonId.
        /// </summary>
        /// <param name="comparable">
        /// A <see cref="ComparableModel"/>
        /// </param>
        /// <returns>
        /// True if rows were updated.
        /// </returns>
        public static bool UpdateComparable(ComparableModel comparable)
        {
            comparable.ModifiedOn = DateTime.Now;
            var commandText = "update Comparable set UnitId=@UnitId, Store=@Store, Product=@Product, Price=@Price, Quantity=@Quantity, ModifiedOn=@ModifiedOn where Id=@Id;";
            var parameters  = new Dictionary <string, object>();

            parameters.Add("@Id", comparable.Id);
            parameters.Add("@UnitId", comparable.UnitId);
            parameters.Add("@Store", comparable.Store);
            parameters.Add("@Product", comparable.Product);
            parameters.Add("@Price", comparable.Price);
            parameters.Add("@Quantity", comparable.Quantity);
            parameters.Add("@ModifiedOn", comparable.ModifiedOn);
            return(SqlConnection.ExecuteNonQuery(commandText, parameters) > 0);
        }
Пример #6
0
 public ComparableTableView(RectangleF frame, UITableViewStyle style, ComparableModel comparable, UIViewController viewController) : base(frame, style)
 {
     _tableViewSource             = new ComparableTableViewSource(this, comparable, viewController);
     _tableViewSource.OnEditUnit += (sender, args) =>
     {
         OnEditUnit.Fire(this, args);
         ResignTextFieldAsFirstResponder();
     };
     _tableViewSource.OnKeyboardDone += (sender, args) =>
     {
         OnKeyboardDone.Fire(this, EventArgs.Empty);
     };
     Source          = _tableViewSource;
     AllowsSelection = false;
 }
Пример #7
0
        public static ComparableModel GetComparable(int id)
        {
            var commandText = "select Id, ComparisonId, UnitId, Store, Product, Price, Quantity, ModifiedOn from Comparable where Id=@Id;";
            var parameters  = new Dictionary <string, object>();

            parameters.Add("@Id", id);
            ComparableModel comparable = null;

            SqlConnection.ReaderWithCommand(commandText, parameters, (reader) =>
            {
                if (reader.Read())
                {
                    comparable = CreateComparable(reader);
                }
            });

            return(comparable);
        }
Пример #8
0
 public void AddComparable(ComparableModel comparable)
 {
     if (Comparables.Count == 0)
     {
         Comparables.Add(comparable);
         UpdateCheapestComparable(comparable);
         ReloadRows(new NSIndexPath[] { NSIndexPath.FromRowSection(0, 0) }, UITableViewRowAnimation.Fade);
     }
     else
     {
         Comparables.Add(comparable);
         Comparables = Comparables.OrderBy(c => c.GetPricePerBaseUnit(Comparison.UnitId)).ToList();
         var addedAt = Comparables.IndexOf(comparable);
         if (addedAt == 0)
         {
             UpdateCheapestComparable(comparable);
         }
         BeginUpdates();
         InsertRows(new NSIndexPath[] { NSIndexPath.FromRowSection(addedAt, 0) }, UITableViewRowAnimation.Fade);
         EndUpdates();
     }
     SetScrollAndSelection();
 }
Пример #9
0
        private UIBarButtonItem GetDoneButton()
        {
            return(new UIBarButtonItem(UIBarButtonSystemItem.Save, (sender, args) =>
            {
                if (!ValidateData())
                {
                    return;
                }

                if (Comparable == null)
                {
                    Comparable = new ComparableModel()
                    {
                        ComparisonId = ComparisonId,
                        Price = Convert.ToDouble(_tableView.Price),
                        Product = _tableView.Product,
                        Quantity = Convert.ToDouble(_tableView.Quantity),
                        Store = _tableView.Store,
                        UnitId = _unitPicker.SelectedUnit.Id
                    };

                    Comparable.Id = DataService.SaveComparable(Comparable);
                }
                else
                {
                    Comparable.Store = _tableView.Store;
                    Comparable.Product = _tableView.Product;
                    Comparable.Quantity = Convert.ToDouble(_tableView.Quantity);
                    Comparable.Price = Convert.ToDouble(_tableView.Price);
                    Comparable.UnitId = _unitPicker.SelectedUnit.Id;
                    DataService.UpdateComparable(Comparable);
                }

                OnFinished.Fire(this, new EventArgs());
            }));
        }
Пример #10
0
 public void AddComparable(ComparableModel comparable)
 {
     _comparableToAdd = comparable;
 }
Пример #11
0
 public static double GetPricePerBaseUnit(this ComparableModel comparable, int baseUnitId)
 {
     return(CalculatePrice(comparable.Price, comparable.Quantity, comparable.UnitId, baseUnitId));
 }
Пример #12
0
 public void UpdateCheapestComparable(ComparableModel comparable)
 {
     Comparison.CheapestComparableId = comparable == null ? (int?)null : comparable.Id;
     DataService.UpdateComparison(Comparison);
     OnNewCheaper.Fire(this, EventArgs.Empty);
 }
Пример #13
0
 public ComparableViewController(ComparableModel comparable)
 {
     Comparable = comparable;
     Initialize(comparable.ComparisonId);
 }