StockLocationGrid.cs 3.5 KB

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