Browse Source

Added breakout grids to Progress Claims

Kenric Nugteren 10 months ago
parent
commit
8e95c74636

+ 6 - 5
prs.classes/Entities/Job/JobScopes/JobScope.cs

@@ -140,11 +140,12 @@ namespace Comal.Classes
         private class UninvoicedMaterial : ComplexFormulaGenerator<JobScope, double>
         private class UninvoicedMaterial : ComplexFormulaGenerator<JobScope, double>
         {
         {
             public override IComplexFormulaNode<JobScope, double> GetFormula() =>
             public override IComplexFormulaNode<JobScope, double> GetFormula() =>
-                Aggregate<StockMovement>(AggregateCalculation.Sum, x => x.Formula(FormulaOperator.Subtract, x.Constant(0.0), x.Property(x => x.Value)))
-                    .WithFilter(
-                        new Filter<StockMovement>(x => x.Invoice.ID).IsEqualTo(Guid.Empty)
-                            .And(x => x.Type).IsEqualTo(StockMovementType.Issue))
-                    .WithLink(x => x.JobScope.ID, x => x.ID);
+                Formula(FormulaOperator.Subtract,
+                    Aggregate<StockMovement>(AggregateCalculation.Sum, x => x.Property(x => x.Value))
+                        .WithFilter(
+                            new Filter<StockMovement>(x => x.Invoice.ID).IsEqualTo(Guid.Empty)
+                                .And(x => x.Type).IsEqualTo(StockMovementType.Issue))
+                        .WithLink(x => x.JobScope.ID, x => x.ID));
         }
         }
         [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden, Summary = Summary.Sum)]
         [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden, Summary = Summary.Sum)]
         [ComplexFormula(typeof(UninvoicedMaterial))]
         [ComplexFormula(typeof(UninvoicedMaterial))]

+ 1 - 1
prs.desktop/Panels/Invoices/InvoiceStockMovementGrid.cs

@@ -12,7 +12,7 @@ using InABox.WPF;
 
 
 namespace PRSDesktop;
 namespace PRSDesktop;
 
 
-public class InvoiceStockMovementGrid : DynamicDataGrid<StockMovement>
+public class InvoiceStockMovementGrid : DynamicDataGrid<StockMovement>, ISpecificGrid
 {
 {
     private readonly BitmapImage chargeable_excluded = PRSDesktop.Resources.tick.Fade(0.8F).AsGrayScale().AsBitmapImage();
     private readonly BitmapImage chargeable_excluded = PRSDesktop.Resources.tick.Fade(0.8F).AsGrayScale().AsBitmapImage();
     private readonly BitmapImage chargeable_included = PRSDesktop.Resources.tick.AsBitmapImage();
     private readonly BitmapImage chargeable_included = PRSDesktop.Resources.tick.AsBitmapImage();

+ 52 - 0
prs.desktop/Panels/Invoices/ProgressClaimGrid.cs

@@ -327,6 +327,58 @@ public class ProgressClaimGrid : DynamicItemsListGrid<ProgressClaim>
         ColumnsComponent.LoadColumnsMenu(menu);
         ColumnsComponent.LoadColumnsMenu(menu);
     }
     }
 
 
+    protected override void DoDoubleClick(object sender, DynamicGridCellClickEventArgs args)
+    {
+        if (args.Row is null) return;
+
+        if(args.Column is DynamicGridColumn gridColumn)
+        {
+            var claim = LoadItem(args.Row);
+            if(new Column<ProgressClaim>(x => x.Materials).IsEqualTo(gridColumn.ColumnName))
+            {
+                var grid = (DynamicGridUtils.CreateDynamicGrid<StockMovement>(typeof(DynamicDataGrid<>)) as DynamicDataGrid<StockMovement>)!;
+                grid.ColumnsTag = $"{nameof(ProgressClaim)}.Materials";
+                grid.Reconfigure(options =>
+                {
+                    options.Clear();
+                    options.FilterRows = true;
+                    options.SelectColumns = true;
+                });
+
+                grid.OnDefineFilter += t =>
+                {
+                    return new Filter<StockMovement>(x => x.Type).IsEqualTo(StockMovementType.Issue)
+                        .And(x => x.Invoice.ID).IsEqualTo(Guid.Empty)
+                        .And(x => x.JobScope.ID).IsEqualTo(claim.JobScope.ID);
+                };
+
+                var window = DynamicGridUtils.CreateGridWindow($"Materials", grid);
+                window.ShowDialog();
+            }
+            else if(new Column<ProgressClaim>(x => x.Labour).IsEqualTo(gridColumn.ColumnName))
+            {
+                var grid = (DynamicGridUtils.CreateDynamicGrid<Assignment>(typeof(DynamicDataGrid<>)) as DynamicDataGrid<Assignment>)!;
+                grid.ColumnsTag = $"{nameof(ProgressClaim)}.Labour";
+                grid.Reconfigure(options =>
+                {
+                    options.Clear();
+                    options.FilterRows = true;
+                    options.SelectColumns = true;
+                });
+
+                grid.OnDefineFilter += t =>
+                {
+                    return new Filter<Assignment>(x => x.JobLink.ID).IsEqualTo(JobID)
+                        .And(x => x.Invoice.ID).IsEqualTo(Guid.Empty)
+                        .And(x => x.JobScope.ID).IsEqualTo(claim.JobScope.ID);
+                };
+
+                var window = DynamicGridUtils.CreateGridWindow($"Labour", grid);
+                window.ShowDialog();
+            }
+        }
+    }
+
     public override DynamicGridColumns GenerateColumns()
     public override DynamicGridColumns GenerateColumns()
     {
     {
         var columns = new DynamicGridColumns();
         var columns = new DynamicGridColumns();

+ 2 - 0
prs.desktop/Panels/Jobs/Summary/JobSummaryGrid.cs

@@ -330,6 +330,8 @@ internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IMasterDetailContr
         grid.OnReload += (object sender, Filters<StockMovement> criteria, Columns<StockMovement> columns, ref SortOrder<StockMovement>? sortby) =>
         grid.OnReload += (object sender, Filters<StockMovement> criteria, Columns<StockMovement> columns, ref SortOrder<StockMovement>? sortby) =>
         {
         {
             var filter = criteria.Combine();
             var filter = criteria.Combine();
+
+            // We want to show entire transactions.
             criteria.Clear();
             criteria.Clear();
             criteria.Add(new Filter<StockMovement>(x => x.Transaction).InQuery(filter, x => x.Transaction));
             criteria.Add(new Filter<StockMovement>(x => x.Transaction).InQuery(filter, x => x.Transaction));
         };
         };