123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using Comal.Classes;
- using InABox.Configuration;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- using Syncfusion.Data;
- using Syncfusion.UI.Xaml.Grid;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Linq;
- using System.Linq.Expressions;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Media;
- namespace PRSDesktop.Panels.Jobs.Summary;
- public class JobRequisitionItemSummaryGrid : DynamicDataGrid<JobRequisitionItem>, ISpecificGrid
- {
- public int DueDateAlert { get; set; }
- public int DueDateWarning { get; set; }
- protected override bool ShowSequenceButtons => false;
- private class UIComponent : DynamicGridGridUIComponent<JobRequisitionItem>
- {
- private JobRequisitionItemSummaryGrid Grid;
- public UIComponent(JobRequisitionItemSummaryGrid grid)
- {
- Grid = grid;
- Parent = grid;
- }
- protected override Brush? GetCellBackground(CoreRow row, DynamicColumnBase column)
- {
- if (column is DynamicGridColumn col)
- {
- if (String.Equals(col.ColumnName,
- CoreUtils.GetFullPropertyName<JobRequisitionItem, DateTime>(x => x.Requisition.DueDate, ".")))
- {
- var due = row.Get<JobRequisitionItem, DateTime>(x => x.Requisition.DueDate);
- if (!due.IsEmpty())
- {
- var background = DateTime.Today > due.Date
- ? Colors.LightSalmon
- : DateTime.Today.AddDays(Grid.DueDateWarning) >= due.Date
- ? Colors.Orange
- : DateTime.Today.AddDays(Grid.DueDateAlert) >= due.Date
- ? Colors.LightYellow
- : Colors.LightGreen;
- return new SolidColorBrush(background) { Opacity = 0.5 };
- }
- }
- }
- else if(column is DynamicActionColumn dac)
- {
- if (dac == Grid.InStockColumn
- || dac == Grid.OnOrderColumn)
- {
- return Colors.LightBlue.ToBrush(0.5);
- }
- else if (dac == Grid.TreatmentRequiredColumn
- || dac == Grid.TreatmentOnOrderColumn)
- {
- return Colors.Plum.ToBrush(0.5);
- }
- }
- var qty = row.Get<JobRequisitionItem, double>(x => x.Qty);
- if(row.Get<JobRequisitionItem, double>(x => x.Issued) >= qty)
- {
- return Colors.Silver.ToBrush(0.5);
- }
- else if(row.Get<JobRequisitionItem, double>(x => x.Allocated) + row.Get<JobRequisitionItem, double>(x => x.Issued) >= qty)
- {
- return Colors.LightGreen.ToBrush(0.5);
- }
- else if(row.Get<JobRequisitionItem, double>(x => x.InStock) + row.Get<JobRequisitionItem, double>(x => x.Issued) >= qty)
- {
- return Colors.Orange.ToBrush(0.5);
- }
- else
- {
- return Colors.LightSalmon.ToBrush(0.5);
- }
- }
- }
- private DynamicActionColumn InStockColumn;
- private DynamicActionColumn OnOrderColumn;
- private DynamicActionColumn TreatmentRequiredColumn;
- private DynamicActionColumn TreatmentOnOrderColumn;
- private DynamicActionColumn AllocatedColumn;
- private DynamicActionColumn IssuedColumn;
- public JobRequisitionItemSummaryGrid()
- {
- HiddenColumns.Add(x => x.Qty);
- HiddenColumns.Add(x => x.InStock);
- HiddenColumns.Add(x => x.OnOrder);
- HiddenColumns.Add(x => x.TreatmentOnOrder);
- HiddenColumns.Add(x => x.TreatmentRequired);
- HiddenColumns.Add(x => x.Allocated);
- HiddenColumns.Add(x => x.Issued);
- var qtyColumn = AddDoubleColumn(x => x.Qty, "Qty.");
- qtyColumn.GetSummary = () =>
- {
- return new GridSummaryColumn
- {
- Name = "Qty",
- Format = "{Sum:F2}",
- MappingName = "Qty",
- SummaryType = Syncfusion.Data.SummaryType.Custom,
- CustomAggregate = new QtyAggregate()
- };
- };
- InStockColumn = AddDoubleColumn(x => x.InStock, "Stk.");
- OnOrderColumn = AddDoubleColumn(x => x.OnOrder, "Ord.");
- TreatmentRequiredColumn = AddDoubleColumn(x => x.TreatmentRequired, "Req.");
- TreatmentOnOrderColumn = AddDoubleColumn(x => x.TreatmentOnOrder, "Ord.");
- AllocatedColumn = AddDoubleColumn(x => x.Allocated, "Stk.");
- IssuedColumn = AddDoubleColumn(x => x.Issued, "Iss.");
- ColumnsTag = "JobRequisitionReview";
- }
- private class QtyAggregate : ISummaryAggregate
- {
- public double Sum { get; private set; }
- public Action<IEnumerable, string, PropertyDescriptor> CalculateAggregateFunc()
- {
- return AggregateFunc;
- }
- private void AggregateFunc(IEnumerable items, string property, PropertyDescriptor args)
- {
- if (items is IEnumerable<DataRowView> rows)
- {
- Sum = 0;
- foreach (var dataRow in rows)
- {
- Sum += (double)dataRow["Qty"];
- }
- }
- else
- {
- Logger.Send(LogType.Error, "", $"Attempting to calculate aggregate on invalid data type '{items.GetType()}'.");
- }
- }
- }
- private DynamicActionColumn AddDoubleColumn(Expression<Func<JobRequisitionItem, object>> property, string header)
- {
- var col = new DynamicTextColumn<JobRequisitionItem>(property) { Format = "F2", HeaderText = header, Width = 50 };
- ActionColumns.Add(col);
- return col;
- }
- protected override IDynamicGridUIComponent<JobRequisitionItem> CreateUIComponent()
- {
- return new UIComponent(this);
- }
- protected override void DoReconfigure(DynamicGridOptions options)
- {
- base.DoReconfigure(options);
- options.Clear();
- options.FilterRows = true;
- options.SelectColumns = true;
- options.RecordCount = true;
- }
- public override DynamicGridColumns GenerateColumns()
- {
- var columns = new DynamicGridColumns();
- columns.Add<JobRequisitionItem, DateTime>(x => x.Requisition.DueDate, 80, "Due", "", Alignment.MiddleCenter);
- columns.Add<JobRequisitionItem, string>(x => x.Requisition.Job.JobNumber, 70, "Job", "", Alignment.MiddleCenter);
- columns.Add<JobRequisitionItem, int>(x => x.Requisition.Number, 50, "Requi", "", Alignment.MiddleCenter);
- columns.Add<JobRequisitionItem, string>(x => x.Product.Code, 100, "Product Code", "", Alignment.MiddleLeft);
- columns.Add<JobRequisitionItem, string>(x => x.Product.Name, 0, "Product Name", "", Alignment.MiddleLeft);
- columns.Add<JobRequisitionItem, string>(x => x.Style.Code, 100, "Style", "", Alignment.MiddleLeft);
- columns.Add<JobRequisitionItem, string>(x => x.Dimensions.UnitSize, 70, "Size", "", Alignment.MiddleLeft);
- return columns;
- }
- protected override void ConfigureColumnGroups()
- {
- GetColumnGrouping()
- .AddGroup("Stock", InStockColumn, OnOrderColumn)
- .AddGroup("Treatment", TreatmentRequiredColumn, TreatmentOnOrderColumn)
- .AddGroup("Allocated", AllocatedColumn, IssuedColumn);
- }
- }
|