JobAssignmentGrid.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. using InABox.DynamicGrid;
  7. using InABox.Wpf;
  8. namespace PRSDesktop;
  9. public class JobAssignmentGrid : DynamicDataGrid<Assignment>, IMasterDetailControl<Job,Assignment>, IDataModelSource
  10. {
  11. public Job? Master { get; set; }
  12. public Filter<Assignment> MasterDetailFilter => (Master?.ID ?? Guid.Empty) != Guid.Empty
  13. ? new Filter<Assignment>(x => x.JobLink.ID).IsEqualTo(Master.ID)
  14. : new Filter<Assignment>().None();
  15. public JobAssignmentGrid()
  16. {
  17. RowHeight = 30;
  18. }
  19. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  20. {
  21. base.DoReconfigure(options);
  22. options.AddRange(
  23. DynamicGridOption.SelectColumns,
  24. DynamicGridOption.FilterRows,
  25. DynamicGridOption.ExportData
  26. );
  27. }
  28. protected override bool CanCreateItems()
  29. {
  30. return base.CanCreateItems() && (Master?.ID ?? Guid.Empty) != Guid.Empty;
  31. }
  32. public override Assignment CreateItem()
  33. {
  34. var result = base.CreateItem();
  35. result.JobLink.ID = Master?.ID ?? Guid.Empty;
  36. result.JobLink.Synchronise(Master ?? new Job());
  37. return result;
  38. }
  39. protected override void Reload(Filters<Assignment> criteria, Columns<Assignment> columns, ref SortOrder<Assignment>? sort, Action<CoreTable?, Exception?> action)
  40. {
  41. criteria.Add(MasterDetailFilter);
  42. base.Reload(criteria, columns, ref sort, action);
  43. }
  44. public string SectionName => "Job Assignments";
  45. public event DataModelUpdateEvent? OnUpdateDataModel;
  46. public DataModel DataModel(Selection selection)
  47. {
  48. return new AutoDataModel<Assignment>(MasterDetailFilter);
  49. }
  50. }