|
@@ -1,5 +1,9 @@
|
|
|
using System;
|
|
|
+using System.Linq;
|
|
|
+using System.Reflection;
|
|
|
+using System.Windows;
|
|
|
using Comal.Classes;
|
|
|
+using InABox.Clients;
|
|
|
using InABox.Core;
|
|
|
using InABox.DynamicGrid;
|
|
|
|
|
@@ -16,6 +20,10 @@ namespace PRSDesktop
|
|
|
DynamicGridOption.ExportData
|
|
|
);
|
|
|
|
|
|
+ HiddenColumns.Add(x => x.Product.ID);
|
|
|
+ HiddenColumns.Add(x => x.Style.ID);
|
|
|
+ HiddenColumns.Add(x => x.Dimensions.UnitSize);
|
|
|
+
|
|
|
HiddenColumns.Add(x => x.BillOfMaterials);
|
|
|
HiddenColumns.Add(x => x.TotalRequired);
|
|
|
HiddenColumns.Add(x => x.BalanceRequired);
|
|
@@ -28,6 +36,63 @@ namespace PRSDesktop
|
|
|
HiddenColumns.Add(x => x.Product.Image.FileName);
|
|
|
ActionColumns.Add(new DynamicImageColumn<JobMaterial>(this, x => x.Product.Image, false)
|
|
|
{ Position = DynamicActionColumnPosition.Start });
|
|
|
+
|
|
|
+ OnCellDoubleClick += JobSummaryGrid_OnCellDoubleClick;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void JobSummaryGrid_OnCellDoubleClick(object sender, DynamicGridCellClickEventArgs args)
|
|
|
+ {
|
|
|
+ if(args.Column.ColumnName == "BillOfMaterials"
|
|
|
+ || args.Column.ColumnName == "TotalRequired"
|
|
|
+ || args.Column.ColumnName == "ReservedStock"
|
|
|
+ || args.Column.ColumnName == "OnOrder"
|
|
|
+ || args.Column.ColumnName == "Issued"
|
|
|
+ || args.Column.ColumnName == "Received"
|
|
|
+ || args.Column.ColumnName == "FreeStock")
|
|
|
+ {
|
|
|
+ if(DatabaseSchema.Property(typeof(JobMaterial), args.Column.ColumnName) is StandardProperty property)
|
|
|
+ {
|
|
|
+ var aggregate = property.Property.GetCustomAttribute<AggregateAttribute>();
|
|
|
+ if(aggregate is not null)
|
|
|
+ {
|
|
|
+ var entityType = aggregate.Source;
|
|
|
+ var filter = Filter.Create(entityType).All();
|
|
|
+
|
|
|
+ var aggFilter = aggregate.Filter;
|
|
|
+ if (aggFilter is not null)
|
|
|
+ filter.And(aggFilter);
|
|
|
+
|
|
|
+ var links = aggregate.Links;
|
|
|
+
|
|
|
+ foreach (var (pLeft, pJobMaterial) in aggregate.Links)
|
|
|
+ {
|
|
|
+ var value = pJobMaterial == "Job.ID"
|
|
|
+ ? JobID
|
|
|
+ : args.Row[pJobMaterial];
|
|
|
+
|
|
|
+ filter.And(pLeft).IsEqualTo(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ var grid = (Activator.CreateInstance(typeof(DynamicDataGrid<>).MakeGenericType(entityType)) as IDynamicGrid)!;
|
|
|
+ //DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), entityType);
|
|
|
+ grid.Options.Clear();
|
|
|
+ grid.OnDefineFilter += (o, type) =>
|
|
|
+ {
|
|
|
+ return filter;
|
|
|
+ };
|
|
|
+
|
|
|
+ var window = DynamicGridUtils.CreateGridWindow($"Viewing {CoreUtils.Neatify(args.Column.ColumnName)} Calculation", (grid as BaseDynamicGrid)!);
|
|
|
+ window.ShowDialog();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(args.Column.ColumnName == "BalanceRequired")
|
|
|
+ {
|
|
|
+ var totalRequired = (double)(args.Row["TotalRequired"] ?? 0.0);
|
|
|
+ var issued = (double)(args.Row["Issued"] ?? 0.0);
|
|
|
+ var balance = (double)(args.Row["BalanceRequired"] ?? 0.0);
|
|
|
+ MessageBox.Show($"BalanceRequired\n = TotalRequired - Issued\n = {totalRequired:F2} - {issued:F2} = {balance:F2}");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public event DataModelUpdateEvent OnUpdateDataModel;
|