CustomerContactGrid.cs 3.5 KB

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