StockLocationGrid.cs 3.5 KB

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