Browse Source

Made JRI.Status a NullEditor and removed it from default column lists

Kenric Nugteren 6 days ago
parent
commit
ca0a995d2f

+ 87 - 130
prs.classes/Entities/Job/Requisitions/JobRequisitionItem.cs

@@ -63,112 +63,7 @@ namespace Comal.Classes
         /// </summary>
         Issued
     }
-    public class JobRequisitionItemTotalQtyFormula : IFormula<JobRequisitionItem, double>
-    {
-        public Expression<Func<JobRequisitionItem, double>> Value => x => x.Qty;
-        public Expression<Func<JobRequisitionItem, double>>[] Modifiers => new Expression<Func<JobRequisitionItem, double>>[] { x => x.Dimensions.Value };
-        public FormulaOperator Operator => FormulaOperator.Multiply;
-        public FormulaType Type => FormulaType.Virtual;
-    }
-
-    public class JobRequisitionItemInStockAggregate : CoreAggregate<JobRequisitionItem, StockMovement, double>
-    {
-        public override Expression<Func<StockMovement, double>> Aggregate => x => x.Units;
-
-        public override Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<JobRequisitionItem, object?>>> Links => new Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<JobRequisitionItem, object?>>>
-        {
-            { x => x.JobRequisitionItem.ID, x => x.ID }
-        };
-
-        public override AggregateCalculation Calculation => AggregateCalculation.Sum;
-    }
-    public class JobRequisitionItemOrdersAggregate : CoreAggregate<JobRequisitionItem, JobRequisitionItemPurchaseOrderItem, double>
-    {
-        public override Expression<Func<JobRequisitionItemPurchaseOrderItem, double>> Aggregate => x => x.PurchaseOrderItem.Qty;
-
-        public override Dictionary<Expression<Func<JobRequisitionItemPurchaseOrderItem, object?>>, Expression<Func<JobRequisitionItem, object?>>> Links => new Dictionary<Expression<Func<JobRequisitionItemPurchaseOrderItem, object?>>, Expression<Func<JobRequisitionItem, object?>>>
-        {
-            { x => x.JobRequisitionItem.ID, x => x.ID },
-        };
-
-        public override AggregateCalculation Calculation => AggregateCalculation.Sum;
-
-        public override Filter<JobRequisitionItemPurchaseOrderItem>? Filter =>
-            new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.ReceivedDate).IsEqualTo(null);
-    }
-
-    public class JobRequisitionItemOnOrderAggregate : CoreAggregate<JobRequisitionItem, JobRequisitionItemPurchaseOrderItem, double>
-    {
-        public override Expression<Func<JobRequisitionItemPurchaseOrderItem, double>> Aggregate => x => x.PurchaseOrderItem.Qty;
-
-        public override Dictionary<Expression<Func<JobRequisitionItemPurchaseOrderItem, object?>>, Expression<Func<JobRequisitionItem, object?>>> Links => new Dictionary<Expression<Func<JobRequisitionItemPurchaseOrderItem, object?>>, Expression<Func<JobRequisitionItem, object?>>>
-        {
-            { x => x.JobRequisitionItem.ID, x => x.ID },
-            { x => x.PurchaseOrderItem.Product.ID, x => x.Product.ID },
-        };
-
-        public override AggregateCalculation Calculation => AggregateCalculation.Sum;
-
-        public override Filter<JobRequisitionItemPurchaseOrderItem>? Filter =>
-            new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.ReceivedDate).IsEqualTo(null);
-    }
-
-    public class JobRequisitionItemAllocatedAggregate : CoreAggregate<JobRequisitionItem, StockMovement, double>
-    {
-        public override Expression<Func<StockMovement, double>> Aggregate => x => x.Units;
-
-        public override Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<JobRequisitionItem, object?>>> Links => new Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<JobRequisitionItem, object?>>>
-        {
-            { x => x.JobRequisitionItem.ID, x => x.ID },
-            { x => x.Style.ID, x => x.Style.ID },
-        };
-
-        public override AggregateCalculation Calculation => AggregateCalculation.Sum;
-    }
-    public class JobRequisitionItemTreatmentOnOrderFormula : IFormula<JobRequisitionItem, double>
-    {
-        public Expression<Func<JobRequisitionItem, double>> Value => x => x.TotalOrders;
-        public Expression<Func<JobRequisitionItem, double>>[] Modifiers => new Expression<Func<JobRequisitionItem, double>>[] { x => x.OnOrder };
-        public FormulaOperator Operator => FormulaOperator.Subtract;
-        public FormulaType Type => FormulaType.Virtual;
-    }
-    public class JobRequisitionItemTreatmentRequiredFormula : IFormula<JobRequisitionItem, double>
-    {
-        public Expression<Func<JobRequisitionItem, double>> Value => x => x.InStock;
-        public Expression<Func<JobRequisitionItem, double>>[] Modifiers => new Expression<Func<JobRequisitionItem, double>>[] { x => x.Allocated };
-        public FormulaOperator Operator => FormulaOperator.Subtract;
-        public FormulaType Type => FormulaType.Virtual;
-    }
-    
-    public class JobRequisitionItemPickRequestedAggregate : CoreAggregate<JobRequisitionItem, RequisitionItem, double>
-    {
-        public override Expression<Func<RequisitionItem, double>> Aggregate => x => x.Quantity;
-
-        public override Dictionary<Expression<Func<RequisitionItem, object?>>, Expression<Func<JobRequisitionItem, object?>>> Links => 
-            new Dictionary<Expression<Func<RequisitionItem, object?>>, Expression<Func<JobRequisitionItem, object?>>>
-            {
-                { x => x.SourceJRI.ID, x => x.ID },
-            };
-        
-        public override Filter<RequisitionItem>? Filter => new Filter<RequisitionItem>(x => x.RequisitionLink.StockUpdated).IsEqualTo(DateTime.MinValue);
-        
-        public override AggregateCalculation Calculation => AggregateCalculation.Sum;
-    }
-    
-    public class JobRequisitionItemIssuedAggregate : CoreAggregate<JobRequisitionItem, StockMovement, double>
-    {
-        public override Expression<Func<StockMovement, double>> Aggregate => x => x.Issued;
-
-        public override Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<JobRequisitionItem, object?>>> Links => new Dictionary<Expression<Func<StockMovement, object?>>, Expression<Func<JobRequisitionItem, object?>>>
-        {
-            { x => x.JobRequisitionItem.ID, x => x.ID },
-            { x => x.Style.ID, x => x.Style.ID },
-        };
-
-        public override Filter<StockMovement>? Filter => new Filter<StockMovement>(x => x.Type).IsEqualTo(StockMovementType.Issue);
 
-        public override AggregateCalculation Calculation => AggregateCalculation.Sum;
-    }
     
     public interface IJobRequisitionItem : IEntity
     {
@@ -211,8 +106,13 @@ namespace Comal.Classes
         [RequiredColumn]
         public double Qty { get; set; }        
         
+        private class TotalQtyFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Formula(FormulaOperator.Multiply, Property(x => x.Qty), Property(x => x.Dimensions.Value));
+        }
         [DoubleEditor(Editable = Editable.Hidden)]
-        [Formula(typeof(JobRequisitionItemTotalQtyFormula))]
+        [ComplexFormula(typeof(TotalQtyFormula))]
         public double TotalQty { get; set; }
         
         [EditorSequence(5)]
@@ -229,51 +129,112 @@ namespace Comal.Classes
         [EditorSequence(8)]
         public SupplierLink Supplier { get; set; }
 
-        [EnumLookupEditor(typeof(JobRequisitionItemStatus), Editable = Editable.Disabled)]
+        [NullEditor]
         [EditorSequence(9)]
         [LoggableProperty]
         [RequiredColumn]
         public JobRequisitionItemStatus Status { get; set; } = JobRequisitionItemStatus.NotChecked;
 
+        private class InStockFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Aggregate<StockMovement>(AggregateCalculation.Sum, x => x.Property(x => x.Units))
+                    .WithLink(x => x.JobRequisitionItem.ID, x => x.ID);
+        }
+        [ComplexFormula(typeof(InStockFormula))]
+        [DoubleEditor(Editable = Editable.Disabled)]
+        [EditorSequence(10)]
         /// <summary>
         /// The amount of this requisition item that is currently in stock, which is an aggregate of the <see cref="StockMovement.Units"/> property.
         /// </summary>
-        [Aggregate(typeof(JobRequisitionItemInStockAggregate))]
-        [DoubleEditor(Editable = Editable.Disabled)]
-        [EditorSequence(10)]
         public double InStock { get; set; }
 
-        [Aggregate(typeof(JobRequisitionItemOrdersAggregate))]
+        private class TotalOrdersFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Aggregate<JobRequisitionItemPurchaseOrderItem>(
+                    AggregateCalculation.Sum,
+                    x => x.Property(x => x.PurchaseOrderItem.Qty),
+                    new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.ReceivedDate).IsEqualTo(null))
+                .WithLink(x => x.JobRequisitionItem.ID, x => x.ID);
+        }
+        [ComplexFormula(typeof(TotalOrdersFormula))]
         [DoubleEditor(Editable = Editable.Disabled, Visible = Visible.Optional)]
         [EditorSequence(11)]
         public double TotalOrders { get; set; }
 
-        [Aggregate(typeof(JobRequisitionItemOnOrderAggregate))]
+        private class OnOrderFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Aggregate<JobRequisitionItemPurchaseOrderItem>(
+                    AggregateCalculation.Sum,
+                    x => x.Property(x => x.PurchaseOrderItem.Qty),
+                    new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.ReceivedDate).IsEqualTo(null))
+                .WithLink(x => x.JobRequisitionItem.ID, x => x.ID)
+                .WithLink(x => x.PurchaseOrderItem.Product.ID, x => x.Product.ID);
+        }
+        [ComplexFormula(typeof(OnOrderFormula))]
         [DoubleEditor(Editable = Editable.Disabled)]
         [EditorSequence(12)]
         public double OnOrder { get; set; }
 
-        [Formula(typeof(JobRequisitionItemTreatmentRequiredFormula))]
+        private class TreatmentRequiredFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Formula(FormulaOperator.Subtract, Property(x => x.InStock), Property(x => x.Allocated));
+        }
+        [ComplexFormula(typeof(TreatmentRequiredFormula))]
         [DoubleEditor(Editable = Editable.Disabled)]
         [EditorSequence(13)]
         public double TreatmentRequired { get; set; }
 
-        [Formula(typeof(JobRequisitionItemTreatmentOnOrderFormula))]
+        private class TreatmentOnOrderFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Formula(FormulaOperator.Subtract, Property(x => x.TotalOrders), Property(x => x.OnOrder));
+        }
+        [ComplexFormula(typeof(TreatmentOnOrderFormula))]
         [DoubleEditor(Editable = Editable.Disabled)]
         [EditorSequence(14)]
         public double TreatmentOnOrder { get; set; }
 
-        [Aggregate(typeof(JobRequisitionItemAllocatedAggregate))]
+        private class AllocatedFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Aggregate<StockMovement>(
+                    AggregateCalculation.Sum,
+                    x => x.Property(x => x.Units))
+                .WithLink(x => x.JobRequisitionItem.ID, x => x.ID)
+                .WithLink(x => x.Style.ID, x => x.Style.ID);
+        }
+        [ComplexFormula(typeof(AllocatedFormula))]
         [DoubleEditor(Editable = Editable.Disabled)]
         [EditorSequence(15)]
         public double Allocated { get; set; }
         
-        [Aggregate(typeof(JobRequisitionItemPickRequestedAggregate))]
+        private class PickRequestedFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Aggregate<RequisitionItem>(AggregateCalculation.Sum, x => x.Property(x => x.Quantity), new Filter<RequisitionItem>(x => x.RequisitionLink.StockUpdated).IsEqualTo(DateTime.MinValue))
+                .WithLink(x => x.SourceJRI.ID, x => x.ID);
+        }
+        [ComplexFormula(typeof(PickRequestedFormula))]
         [DoubleEditor(Editable = Editable.Disabled)]
         [EditorSequence(16)]
         public double PickRequested { get; set; }
 
-        [Aggregate(typeof(JobRequisitionItemIssuedAggregate))]
+    
+        private class IssuedFormula : ComplexFormulaGenerator<JobRequisitionItem, double>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, double> GetFormula() =>
+                Aggregate<StockMovement>(
+                    AggregateCalculation.Sum,
+                    x => x.Property(x => x.Issued),
+                    new Filter<StockMovement>(x => x.Type).IsEqualTo(StockMovementType.Issue))
+                .WithLink(x => x.JobRequisitionItem.ID, x => x.ID)
+                .WithLink(x => x.Style.ID, x => x.Style.ID);
+        }
+        [ComplexFormula(typeof(IssuedFormula))]
         [DoubleEditor(Editable = Editable.Disabled)]
         [EditorSequence(17)]
         public double Issued { get; set; }
@@ -284,7 +245,15 @@ namespace Comal.Classes
         [NullEditor]
         public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
 
-        [Aggregate(typeof(JobRequisitionItemPurchaseOrderNumberAggregate))]
+        private class PurchaseOrderNumbersFormula : ComplexFormulaGenerator<JobRequisitionItem, string>
+        {
+            public override IComplexFormulaNode<JobRequisitionItem, string> GetFormula() =>
+                Aggregate<JobRequisitionItemPurchaseOrderItem>(
+                    AggregateCalculation.Concat,
+                    x => x.Property(x => x.PurchaseOrderItem.PurchaseOrderLink.PONumber))
+                .WithLink(x => x.JobRequisitionItem.ID, x => x.ID);
+        }
+        [ComplexFormula(typeof(PurchaseOrderNumbersFormula))]
         [TextBoxEditor(Editable = Editable.Hidden)]
         public string PurchaseOrderNumbers { get; set; }
 
@@ -433,16 +402,4 @@ namespace Comal.Classes
             }
         }
     }
-
-    public class JobRequisitionItemPurchaseOrderNumberAggregate : CoreAggregate<JobRequisitionItem, JobRequisitionItemPurchaseOrderItem, string>
-    {
-        public override Expression<Func<JobRequisitionItemPurchaseOrderItem, string>> Aggregate => x => x.PurchaseOrderItem.PurchaseOrderLink.PONumber;
-
-        public override Dictionary<Expression<Func<JobRequisitionItemPurchaseOrderItem, object?>>, Expression<Func<JobRequisitionItem, object?>>> Links { get; } = new Dictionary<Expression<Func<JobRequisitionItemPurchaseOrderItem, object?>>, Expression<Func<JobRequisitionItem, object?>>>
-        {
-            { x => x.JobRequisitionItem.ID, x => x.ID }
-        };
-
-        public override AggregateCalculation Calculation => AggregateCalculation.Concat;
-    }
 }

+ 0 - 1
prs.classes/Entities/Stock/StockHolding/StockHolding.cs

@@ -227,7 +227,6 @@ namespace Comal.Classes
                         .Add(x => x.Job.Name)
                         .Add(x => x.Requisition.Number)
                         .Add(x => x.Requisition.Description)
-                        .Add(x=>x.Status)
                         .Add(x => x.Qty))
                 .ToObjects<JobRequisitionItem>();
             if (holding.Available > 0 || alwaysshowunallocated)

+ 0 - 1
prs.desktop/Panels/Jobs/Requisitions/JobRequisitionItemGrid.cs

@@ -364,7 +364,6 @@ internal class JobRequisitionItemGrid : DynamicDataGrid<JobRequisitionItem>, IMa
         columns.Add<JobRequisitionItem, double>(x => x.Qty, 50, "Qty", "", Alignment.MiddleLeft);
         columns.Add<JobRequisitionItem, string>(x => x.Dimensions.UnitSize, 50, "Size", "", Alignment.MiddleLeft);
         columns.Add<JobRequisitionItem, string>(x => x.PurchaseOrderNumbers, 80, "PO Numbers", "", Alignment.MiddleLeft);
-        columns.Add<JobRequisitionItem, JobRequisitionItemStatus>(x => x.Status, 80, "Status", "", Alignment.MiddleLeft);
         columns.Add<JobRequisitionItem, string>(x => x.Notes, 300, "Notes", "", Alignment.MiddleLeft);
 
         columns.AddRange(base.GenerateColumns());

+ 0 - 1
prs.desktop/Panels/Jobs/Summary/JobRequisitionItemSummaryGrid.cs

@@ -188,7 +188,6 @@ public class JobRequisitionItemSummaryGrid : DynamicDataGrid<JobRequisitionItem>
         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);
-        columns.Add<JobRequisitionItem, JobRequisitionItemStatus>(x => x.Status, 90, "Status", "", Alignment.MiddleCenter);
 
         return columns;
     }

+ 0 - 1
prs.desktop/Panels/Reservation Management/ReservationManagementItemGrid.cs

@@ -407,7 +407,6 @@ public class ReservationManagementItemGrid : DynamicDataGrid<JobRequisitionItem>
         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);
-        columns.Add<JobRequisitionItem, JobRequisitionItemStatus>(x => x.Status, 90, "Status", "", Alignment.MiddleCenter);
 
         return columns;
     }