CustomerContactGrid.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Media.Imaging;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. namespace PRSDesktop;
  11. public class CustomerContactGrid : DynamicDataGrid<CustomerContact>, ICustomerGrid
  12. {
  13. private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
  14. public CustomerContactGrid()
  15. {
  16. HiddenColumns.Add(x=>x.Customer.DefaultContact.ID);
  17. HiddenColumns.Add(x=>x.Contact.ID);
  18. HiddenColumns.Add(x=>x.Customer.ID);
  19. ActionColumns.Add(new DynamicImageColumn(IsDefaultImage, SelectDefaultAction) { Position = DynamicActionColumnPosition.Start });
  20. }
  21. protected override void DoReconfigure(DynamicGridOptions options)
  22. {
  23. base.DoReconfigure(options);
  24. options.AddRows = true;
  25. options.EditRows = true;
  26. options.SelectColumns = true;
  27. options.DeleteRows = true;
  28. }
  29. private BitmapImage? IsDefaultImage(CoreRow? row)
  30. {
  31. return row == null
  32. ? tick
  33. : row.Get<CustomerContact, Guid>(x => x.Customer.DefaultContact.ID) == row.Get<CustomerContact, Guid>(x => x.Contact.ID)
  34. ? tick
  35. : null;
  36. }
  37. private bool SelectDefaultAction(CoreRow? row)
  38. {
  39. if ((row == null) ||row.Get<CustomerContact, Guid>(x => x.Customer.DefaultContact.ID) == row.Get<CustomerContact, Guid>(x => x.Contact.ID))
  40. return false;
  41. using (new WaitCursor())
  42. {
  43. var customer = new Client<Customer>().Query(
  44. new Filter<Customer>(x => x.ID).IsEqualTo(row.Get<CustomerContact, Guid>(x => x.Customer.ID)),
  45. Columns.Required<Customer>().Add(x => x.ID).Add(x => x.DefaultContact.ID)
  46. ).Rows.FirstOrDefault()?.ToObject<Customer>();
  47. if (customer != null)
  48. {
  49. customer.DefaultContact.ID = row.Get<CustomerContact, Guid>(x => x.Contact.ID);
  50. new Client<Customer>().Save(customer, "Updated Default Contact");
  51. return true;
  52. }
  53. }
  54. return false;
  55. }
  56. public Customer Customer { get; set; }
  57. protected override void Reload(Filters<CustomerContact> criteria, Columns<CustomerContact> columns, ref SortOrder<CustomerContact>? sort, Action<CoreTable?, Exception?> action)
  58. {
  59. criteria.Add(new Filter<CustomerContact>(x => x.Customer).LinkValid(Customer.ID));
  60. base.Reload(criteria, columns, ref sort, action);
  61. }
  62. public override CustomerContact CreateItem()
  63. {
  64. var result = base.CreateItem();
  65. result.Customer.ID = Customer.ID;
  66. result.Customer.Synchronise(Customer);
  67. return result;
  68. }
  69. protected override BaseEditor? GetEditor(object item, DynamicGridColumn column)
  70. {
  71. if (column.ColumnName.Equals("Customer.ID"))
  72. return new NullEditor();
  73. return base.GetEditor(item, column);
  74. }
  75. protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
  76. {
  77. if (Customer.ID == Guid.Empty)
  78. MessageBox.Show("Please select a Customer first!");
  79. else
  80. base.DoAdd();
  81. }
  82. }