Selaa lähdekoodia

Added display of aggregate calculation for JobSummary screen

Kenric Nugteren 2 vuotta sitten
vanhempi
commit
cb986e4a6f

+ 0 - 1
prs.classes/Entities/Supplier/SupplierProductLink.cs

@@ -8,7 +8,6 @@ namespace Comal.Classes
         [LookupEditor(typeof(SupplierProduct), "SupplierLink.Code", "SupplierLink.Name")]
         public override Guid ID { get; set; }
 
-        [NullEditor]
         public SupplierLink SupplierLink { get; set; }
 
         [NullEditor]

+ 1 - 1
prs.desktop/Panels/Jobs/JobQualificationGrid.cs

@@ -104,7 +104,7 @@ public class JobQualificationGrid : DynamicManyToManyDataGrid<JobQualification,
                     }
                     else
                     {
-                        Warn(qualid, string.Format("{0} is valid", erow.Get<JobEmployee, string>(x => x.EmployeeLink.Name)));
+                        Warn(qualid, string.Format("{0} is valid", erow.Get<EmployeeQualification, string>(x => x.Employee.Name)));
                     }
                 }
 

+ 65 - 0
prs.desktop/Panels/Jobs/JobSummaryGrid.cs

@@ -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;