JobRequisitionItemSummaryGrid.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using Comal.Classes;
  2. using InABox.Configuration;
  3. using InABox.Core;
  4. using InABox.DynamicGrid;
  5. using InABox.WPF;
  6. using Syncfusion.Data;
  7. using Syncfusion.UI.Xaml.Grid;
  8. using System;
  9. using System.Collections;
  10. using System.Collections.Generic;
  11. using System.ComponentModel;
  12. using System.Data;
  13. using System.Linq;
  14. using System.Linq.Expressions;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using System.Windows.Media;
  18. namespace PRSDesktop.Panels.Jobs.Summary;
  19. public class JobRequisitionItemSummaryGrid : DynamicDataGrid<JobRequisitionItem>, ISpecificGrid
  20. {
  21. public int DueDateAlert { get; set; }
  22. public int DueDateWarning { get; set; }
  23. private class UIComponent : DynamicGridGridUIComponent<JobRequisitionItem>
  24. {
  25. private JobRequisitionItemSummaryGrid Grid;
  26. public UIComponent(JobRequisitionItemSummaryGrid grid)
  27. {
  28. Grid = grid;
  29. Parent = grid;
  30. }
  31. protected override Brush? GetCellBackground(CoreRow row, DynamicColumnBase column)
  32. {
  33. if (column is DynamicGridColumn col)
  34. {
  35. if (String.Equals(col.ColumnName,
  36. CoreUtils.GetFullPropertyName<JobRequisitionItem, DateTime>(x => x.Requisition.DueDate, ".")))
  37. {
  38. var due = row.Get<JobRequisitionItem, DateTime>(x => x.Requisition.DueDate);
  39. if (!due.IsEmpty())
  40. {
  41. var background = DateTime.Today > due.Date
  42. ? Colors.LightSalmon
  43. : DateTime.Today.AddDays(Grid.DueDateWarning) >= due.Date
  44. ? Colors.Orange
  45. : DateTime.Today.AddDays(Grid.DueDateAlert) >= due.Date
  46. ? Colors.LightYellow
  47. : Colors.LightGreen;
  48. return new SolidColorBrush(background) { Opacity = 0.5 };
  49. }
  50. }
  51. }
  52. else if(column is DynamicActionColumn dac)
  53. {
  54. if (dac == Grid.InStockColumn
  55. || dac == Grid.OnOrderColumn)
  56. {
  57. return Colors.LightBlue.ToBrush(0.5);
  58. }
  59. else if (dac == Grid.TreatmentRequiredColumn
  60. || dac == Grid.TreatmentOnOrderColumn)
  61. {
  62. return Colors.Plum.ToBrush(0.5);
  63. }
  64. }
  65. var qty = row.Get<JobRequisitionItem, double>(x => x.Qty);
  66. if(row.Get<JobRequisitionItem, double>(x => x.Issued) >= qty)
  67. {
  68. return Colors.Silver.ToBrush(0.5);
  69. }
  70. else if(row.Get<JobRequisitionItem, double>(x => x.Allocated) + row.Get<JobRequisitionItem, double>(x => x.Issued) >= qty)
  71. {
  72. return Colors.LightGreen.ToBrush(0.5);
  73. }
  74. else if(row.Get<JobRequisitionItem, double>(x => x.InStock) + row.Get<JobRequisitionItem, double>(x => x.Issued) >= qty)
  75. {
  76. return Colors.Orange.ToBrush(0.5);
  77. }
  78. else
  79. {
  80. return Colors.LightSalmon.ToBrush(0.5);
  81. }
  82. }
  83. }
  84. private DynamicActionColumn InStockColumn;
  85. private DynamicActionColumn OnOrderColumn;
  86. private DynamicActionColumn TreatmentRequiredColumn;
  87. private DynamicActionColumn TreatmentOnOrderColumn;
  88. private DynamicActionColumn AllocatedColumn;
  89. private DynamicActionColumn IssuedColumn;
  90. public JobRequisitionItemSummaryGrid()
  91. {
  92. HiddenColumns.Add(x => x.Qty);
  93. HiddenColumns.Add(x => x.InStock);
  94. HiddenColumns.Add(x => x.OnOrder);
  95. HiddenColumns.Add(x => x.TreatmentOnOrder);
  96. HiddenColumns.Add(x => x.TreatmentRequired);
  97. HiddenColumns.Add(x => x.Allocated);
  98. HiddenColumns.Add(x => x.Issued);
  99. var qtyColumn = AddDoubleColumn(x => x.Qty, "Qty.");
  100. qtyColumn.GetSummary = () =>
  101. {
  102. return new DynamicGridCustomSummary(Qty_Aggregate, "F2");
  103. };
  104. InStockColumn = AddDoubleColumn(x => x.InStock, "Stk.");
  105. OnOrderColumn = AddDoubleColumn(x => x.OnOrder, "Ord.");
  106. TreatmentRequiredColumn = AddDoubleColumn(x => x.TreatmentRequired, "Req.");
  107. TreatmentOnOrderColumn = AddDoubleColumn(x => x.TreatmentOnOrder, "Ord.");
  108. AllocatedColumn = AddDoubleColumn(x => x.Allocated, "Stk.");
  109. IssuedColumn = AddDoubleColumn(x => x.Issued, "Iss.");
  110. ColumnsTag = "JobRequisitionReview";
  111. }
  112. private object Qty_Aggregate(IEnumerable<CoreRow> rows)
  113. {
  114. return rows.Sum(x => x.Get<JobRequisitionItem, double>(x => x.Qty));
  115. }
  116. private DynamicActionColumn AddDoubleColumn(Expression<Func<JobRequisitionItem, object>> property, string header)
  117. {
  118. var col = new DynamicTextColumn<JobRequisitionItem>(property) { Format = "F2", HeaderText = header, Width = 50 };
  119. ActionColumns.Add(col);
  120. return col;
  121. }
  122. protected override IDynamicGridUIComponent<JobRequisitionItem> CreateUIComponent()
  123. {
  124. return new UIComponent(this);
  125. }
  126. protected override void DoReconfigure(DynamicGridOptions options)
  127. {
  128. base.DoReconfigure(options);
  129. options.Clear();
  130. options.FilterRows = true;
  131. options.SelectColumns = true;
  132. options.RecordCount = true;
  133. }
  134. public override DynamicGridColumns GenerateColumns()
  135. {
  136. var columns = new DynamicGridColumns();
  137. columns.Add<JobRequisitionItem>(x => x.Requisition.DueDate, 80, "Due", "", Alignment.MiddleCenter);
  138. columns.Add<JobRequisitionItem>(x => x.Requisition.Job.JobNumber, 70, "Job", "", Alignment.MiddleCenter);
  139. columns.Add<JobRequisitionItem>(x => x.Requisition.Number, 50, "Requi", "", Alignment.MiddleCenter);
  140. columns.Add<JobRequisitionItem>(x => x.Product.Code, 100, "Product Code", "", Alignment.MiddleLeft);
  141. columns.Add<JobRequisitionItem>(x => x.Product.Name, 0, "Product Name", "", Alignment.MiddleLeft);
  142. columns.Add<JobRequisitionItem>(x => x.Style.Code, 100, "Style", "", Alignment.MiddleLeft);
  143. columns.Add<JobRequisitionItem>(x => x.Dimensions.UnitSize, 70, "Size", "", Alignment.MiddleLeft);
  144. return columns;
  145. }
  146. protected override void ConfigureColumnGroups()
  147. {
  148. GetColumnGrouping()
  149. .AddGroup("Stock", InStockColumn, OnOrderColumn)
  150. .AddGroup("Treatment", TreatmentRequiredColumn, TreatmentOnOrderColumn)
  151. .AddGroup("Allocated", AllocatedColumn, IssuedColumn);
  152. }
  153. }