using System; using System.Linq; using System.Threading; using System.Windows; using System.Windows.Media.Imaging; using Comal.Classes; using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; namespace PRSDesktop; public class CustomerContactGrid : DynamicDataGrid, ICustomerGrid { private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage(); public CustomerContactGrid() { HiddenColumns.Add(x=>x.Customer.DefaultContact.ID); HiddenColumns.Add(x=>x.Contact.ID); HiddenColumns.Add(x=>x.Customer.ID); ActionColumns.Add(new DynamicImageColumn(IsDefaultImage, SelectDefaultAction) { Position = DynamicActionColumnPosition.Start }); } protected override void DoReconfigure(DynamicGridOptions options) { base.DoReconfigure(options); options.AddRows = true; options.EditRows = true; options.SelectColumns = true; options.DeleteRows = true; } private BitmapImage? IsDefaultImage(CoreRow? row) { return row == null ? tick : row.Get(x => x.Customer.DefaultContact.ID) == row.Get(x => x.Contact.ID) ? tick : null; } private bool SelectDefaultAction(CoreRow? row) { if ((row == null) ||row.Get(x => x.Customer.DefaultContact.ID) == row.Get(x => x.Contact.ID)) return false; using (new WaitCursor()) { var customer = new Client().Query( new Filter(x => x.ID).IsEqualTo(row.Get(x => x.Customer.ID)), Columns.Required().Add(x => x.ID).Add(x => x.DefaultContact.ID) ).Rows.FirstOrDefault()?.ToObject(); if (customer != null) { customer.DefaultContact.ID = row.Get(x => x.Contact.ID); new Client().Save(customer, "Updated Default Contact"); return true; } } return false; } public Customer Customer { get; set; } = new(); protected override void Reload( Filters criteria, Columns columns, ref SortOrder? sort, CancellationToken token, Action action) { criteria.Add(new Filter(x => x.Customer).LinkValid(Customer.ID)); base.Reload(criteria, columns, ref sort, token, action); } public override CustomerContact CreateItem() { var result = base.CreateItem(); result.Customer.ID = Customer.ID; result.Customer.Synchronise(Customer); return result; } protected override BaseEditor? GetEditor(object item, DynamicGridColumn column) { if (column.ColumnName.Equals("Customer.ID")) return new NullEditor(); return base.GetEditor(item, column); } protected override void DoAdd(bool OpenEditorOnDirectEdit = false) { if (Customer.ID == Guid.Empty) MessageBox.Show("Please select a Customer first!"); else base.DoAdd(); } }