StockTreatmentGrid.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Media.Imaging;
  5. using Comal.Classes;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.WPF;
  9. namespace PRSDesktop
  10. {
  11. public class StockTreatmentGrid : DynamicDataGrid<StockHolding>
  12. {
  13. private readonly List<Guid> _selected = new();
  14. private readonly BitmapImage tick = PRSDesktop.Resources.tick.AsBitmapImage();
  15. public StockTreatmentGrid()
  16. {
  17. ActionColumns.Add(new DynamicImageColumn(SelectedImage, SelectedAction) { Position = DynamicActionColumnPosition.End });
  18. }
  19. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  20. {
  21. base.DoReconfigure(options);
  22. options.Clear();
  23. }
  24. public Guid Location { get; set; }
  25. public IEnumerable<Guid> Selected => _selected;
  26. protected override DynamicGridColumns LoadColumns()
  27. {
  28. //return base.LoadColumns();
  29. var result = new DynamicGridColumns();
  30. result.Add<StockHolding, double>(x => x.Units, 50, "Qty", "F0", Alignment.MiddleCenter);
  31. result.Add<StockHolding, string>(x => x.Product.Code, 120, "Code", "", Alignment.MiddleLeft);
  32. result.Add<StockHolding, string>(x => x.Product.Name, 0, "Name", "", Alignment.MiddleLeft);
  33. result.Add<StockHolding, string>(x => x.Dimensions.UnitSize, 100, "Size", "", Alignment.MiddleCenter);
  34. result.Add<StockHolding, string>(x => x.Job.JobNumber, 70, "Job #", "", Alignment.MiddleCenter);
  35. return result;
  36. }
  37. private BitmapImage SelectedImage(CoreRow arg)
  38. {
  39. return arg == null
  40. ? tick
  41. : _selected.Contains(arg.Get<StockHolding, Guid>(x => x.ID))
  42. ? tick
  43. : null;
  44. }
  45. private bool SelectedAction(CoreRow arg)
  46. {
  47. if (arg == null)
  48. {
  49. if (_selected.Any())
  50. _selected.Clear();
  51. else
  52. _selected.AddRange(Data.ExtractValues<StockHolding, Guid>(x => x.ID));
  53. }
  54. else
  55. {
  56. var id = arg.Get<StockHolding, Guid>(x => x.ID);
  57. if (_selected.Contains(id))
  58. _selected.Remove(id);
  59. else
  60. _selected.Add(id);
  61. }
  62. return true;
  63. }
  64. protected override void Reload(Filters<StockHolding> criteria, Columns<StockHolding> columns, ref SortOrder<StockHolding>? sort, Action<CoreTable?, Exception?> action)
  65. {
  66. criteria.Add(new Filter<StockHolding>(x => x.Location.ID).IsEqualTo(Location));
  67. base.Reload(criteria, columns, ref sort, action);
  68. }
  69. }
  70. }