StockLocationGrid.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using Comal.Classes;
  8. using InABox.Core;
  9. using InABox.DynamicGrid;
  10. using InABox.WPF;
  11. using NPOI.SS.Formula.Functions;
  12. namespace PRSDesktop;
  13. public class StockLocationGrid : DynamicDataGrid<StockLocation>
  14. {
  15. private bool bShowAll;
  16. public Button ShowAllBtn;
  17. public Button StockTakeBtn;
  18. protected override void Init()
  19. {
  20. base.Init();
  21. ShowAllBtn = AddButton("Show All", PRSDesktop.Resources.parcel.AsBitmapImage(Color.White), ToggleHiddenJobs);
  22. if (Security.CanEdit<StockMovement>())
  23. StockTakeBtn = AddButton("Stock Take", PRSDesktop.Resources.rack.AsBitmapImage(Color.White), DoStockTake);
  24. HiddenColumns.Add(x => x.Job.ID);
  25. //HiddenColumns.Add(x => x.Movements);
  26. OnCustomiseEditor += CustomiseEditor;
  27. }
  28. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  29. {
  30. base.DoReconfigure(options);
  31. options.AddRange(
  32. DynamicGridOption.MultiSelect,
  33. DynamicGridOption.FilterRows,
  34. DynamicGridOption.SelectColumns
  35. );
  36. }
  37. private bool DoStockTake(Button sender, CoreRow[] rows)
  38. {
  39. if (!rows.Any())
  40. {
  41. MessageBox.Show("Please select at least one row for Stocktake!");
  42. return false;
  43. }
  44. var page = new StockTakeWindow(rows);
  45. page.Show();
  46. return true;
  47. }
  48. private bool ToggleHiddenJobs(Button sender, CoreRow[] rows)
  49. {
  50. bShowAll = !bShowAll;
  51. UpdateButton(sender, PRSDesktop.Resources.parcel.AsBitmapImage(Color.White), bShowAll ? "Active Only" : "Show All");
  52. return true;
  53. }
  54. protected override void Reload(Filters<StockLocation> criteria, Columns<StockLocation> columns, ref SortOrder<StockLocation>? sort, Action<CoreTable?, Exception?> action)
  55. {
  56. if (!bShowAll)
  57. criteria.Add(new Filter<StockLocation>(x => x.Active).IsEqualTo(true));
  58. base.Reload(criteria, columns, ref sort, action);
  59. }
  60. protected override void DoValidate(StockLocation[] items, List<string> errors)
  61. {
  62. base.DoValidate(items, errors);
  63. var bHoldings = false;
  64. var bDefault = false;
  65. var bTransient = false;
  66. foreach (var item in items)
  67. {
  68. bHoldings = bHoldings;
  69. bDefault = bDefault || (item.Default && !item.Active);
  70. bTransient = bTransient || (item.Default && item.Type.Equals(StockLocationType.Transient));
  71. }
  72. if (bHoldings)
  73. errors.Add("Non-Empty locations must always be [Active]!");
  74. if (bDefault)
  75. errors.Add("Default locations must always be [Active]!");
  76. if (bTransient)
  77. errors.Add("Default locations must always be [Permanent]!");
  78. }
  79. private void CustomiseEditor(IDynamicEditorForm sender, StockLocation[]? items, DynamicGridColumn column, BaseEditor editor)
  80. {
  81. if (string.Equals(column.ColumnName, "Active"))
  82. {
  83. //var bHasHoldings = items.FirstOrDefault().Holdings != 0;
  84. //editor.Editable = bHasHoldings ? Editable.Disabled : Editable.Enabled;
  85. //if (bHasHoldings)
  86. var item = items?.FirstOrDefault();
  87. if (item is not null)
  88. item.Active = true;
  89. }
  90. }
  91. }