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); }
public ComparableTableViewSource(ComparableTableView tableView, ComparableModel comparable, UIViewController controller) { _controller = controller; _comparable = comparable; _tableView = tableView; TextFields = new List <UITextField>(); }
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(); }
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); }
/// <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); }
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; }
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); }
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(); }
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()); })); }
public void AddComparable(ComparableModel comparable) { _comparableToAdd = comparable; }
public static double GetPricePerBaseUnit(this ComparableModel comparable, int baseUnitId) { return(CalculatePrice(comparable.Price, comparable.Quantity, comparable.UnitId, baseUnitId)); }
public void UpdateCheapestComparable(ComparableModel comparable) { Comparison.CheapestComparableId = comparable == null ? (int?)null : comparable.Id; DataService.UpdateComparison(Comparison); OnNewCheaper.Fire(this, EventArgs.Empty); }
public ComparableViewController(ComparableModel comparable) { Comparable = comparable; Initialize(comparable.ComparisonId); }