FactoryComponentsGrid.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  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 FactoryComponentsGrid : DynamicDataGrid<ManufacturingPacketComponent>
  12. {
  13. private ManufacturingPacket? _currentPacket;
  14. public ManufacturingPacket? CurrentPacket
  15. {
  16. get => _currentPacket;
  17. set
  18. {
  19. _currentPacket = value;
  20. Refresh(false,true);
  21. }
  22. }
  23. protected override void Init()
  24. {
  25. base.Init();
  26. HiddenColumns.Add(x=>x.Consumed);
  27. ActionColumns.Add(
  28. new DynamicTickColumn<ManufacturingPacketComponent,int>(
  29. x=>x.Consumed,
  30. PRSDesktop.Resources.tick.AsBitmapImage(),
  31. PRSDesktop.Resources.tick.AsBitmapImage(),
  32. null,
  33. ConsumeItem)
  34. {
  35. Position = DynamicActionColumnPosition.Start
  36. });
  37. }
  38. private bool ConsumeItem(CoreRow? row)
  39. {
  40. var rows = row == null ? Data.Rows : [row];
  41. Dictionary<ManufacturingPacketComponent,CoreRow> map = new Dictionary<ManufacturingPacketComponent, CoreRow>(
  42. rows.Select(r => new KeyValuePair<ManufacturingPacketComponent, CoreRow>(r.ToObject<ManufacturingPacketComponent>(), r)));
  43. if (map.Keys.Any(x => x.Consumed == 0))
  44. foreach (var packet in map.Keys)
  45. packet.Consumed = packet.Quantity;
  46. else
  47. foreach (var packet in map.Keys)
  48. packet.Consumed = 0;
  49. foreach (var key in map.Keys.Where(x => x.IsChanged()))
  50. {
  51. map[key].Set<ManufacturingPacketComponent, int>(x => x.Consumed, key.Consumed);
  52. InvalidateRow(map[key]);
  53. }
  54. Client.Save(map.Keys.Where(x => x.IsChanged()), "Updated from Factory Floor Screen", (o, e) => { });
  55. return false;
  56. }
  57. public override DynamicGridColumns GenerateColumns()
  58. {
  59. var result = new DynamicGridColumns();
  60. result.Add<ManufacturingPacketComponent>(x=>x.Product.Code, 100);
  61. result.Add<ManufacturingPacketComponent>(x => x.Product.Name, 0);
  62. result.Add<ManufacturingPacketComponent>(x => x.Dimensions.UnitSize, 70);
  63. result.Add<ManufacturingPacketComponent>(x => x.Quantity, 60);
  64. return result;
  65. }
  66. protected override void DoReconfigure(DynamicGridOptions options)
  67. {
  68. base.DoReconfigure(options);
  69. options.Clear();
  70. options.SelectColumns = true;
  71. options.FilterRows = true;
  72. options.HideDatabaseFilters = true;
  73. }
  74. protected override void Reload(Filters<ManufacturingPacketComponent> criteria, Columns<ManufacturingPacketComponent> columns, ref SortOrder<ManufacturingPacketComponent>? sort, CancellationToken token, Action<CoreTable?, Exception?> action)
  75. {
  76. var filter = _currentPacket == null
  77. ? new Filter<ManufacturingPacketComponent>().None()
  78. : new Filter<ManufacturingPacketComponent>(x => x.Packet.ID).IsEqualTo(_currentPacket.ID);
  79. criteria.Add(filter);
  80. base.Reload(criteria, columns, ref sort, token, action);
  81. }
  82. }