Bladeren bron

Migrated schedule aggregates to ComplexFormula; using IncludeInAggregate for Planned Maintenance screen.

Kenric Nugteren 6 maanden geleden
bovenliggende
commit
ff54f03608

+ 1 - 1
prs.classes/Entities/Customer/Customer.cs

@@ -121,7 +121,7 @@ namespace Comal.Classes
         public double Balance { get; set; }
 
         [NullEditor]
-        [Aggregate(typeof(ActiveSchedules))]
+        [ComplexFormula(typeof(ActiveSchedulesFormula<Customer>))]
         public int ActiveSchedules { get; set; }
 
         [NullEditor]

+ 1 - 1
prs.classes/Entities/Equipment/Equipment.cs

@@ -126,7 +126,7 @@ namespace Comal.Classes
         [EditorSequence("Counters", 9)]
         public DigitalKeyLink DigitalKey { get; set; }
 
-        [Aggregate(typeof(NextScheduleDue))]
+        [ComplexFormula(typeof(NextScheduleFormula<Equipment>))]
         [DateTimeEditor(Editable = Editable.Hidden)]
         public DateTime NextSchedule { get; set; }
 

+ 13 - 20
prs.classes/Schedule.cs

@@ -90,30 +90,22 @@ namespace Comal.Classes
         public ScheduleRollover Rollover { get; set; }
     }
 
-    public class NextScheduleDue : CoreAggregate<Entity, Schedule, DateTime>
+    public class ActiveSchedulesFormula<T> : ComplexFormulaGenerator<T, int>
+        where T : Entity
     {
-        public override Expression<Func<Schedule, DateTime>> Aggregate => x => x.DueDate;
-        public override AggregateCalculation Calculation => AggregateCalculation.Minimum;
-        public override Filter<Schedule> Filter => new Filter<Schedule>(x => x.IncludeInAggregate).IsEqualTo(true);
-
-        public override Dictionary<Expression<Func<Schedule, object>>, Expression<Func<Entity, object>>> Links =>
-            new Dictionary<Expression<Func<Schedule, object>>, Expression<Func<Entity, object>>>()
-            {
-                { Schedule => Schedule.DocumentID, Entity => Entity.ID }
-            };
+        public override IComplexFormulaNode<T, int> GetFormula() =>
+            Count<Schedule, Guid>(x => x.Property(x => x.ID))
+            .WithLink(x => x.DocumentID, x => x.ID);
     }
 
-    public class ActiveSchedules : CoreAggregate<Entity, Schedule, Guid>
+    public class NextScheduleFormula<T> : ComplexFormulaGenerator<T, DateTime>
+        where T : Entity
     {
-        public override Expression<Func<Schedule, Guid>> Aggregate => x => x.ID;
-
-        public override AggregateCalculation Calculation => AggregateCalculation.Count;
-
-        public override Dictionary<Expression<Func<Schedule, object>>, Expression<Func<Entity, object>>> Links =>
-            new Dictionary<Expression<Func<Schedule, object>>, Expression<Func<Entity, object>>>()
-            {
-                { Schedule => Schedule.DocumentID, Entity => Entity.ID }
-            };
+        public override IComplexFormulaNode<T, DateTime> GetFormula() =>
+            Aggregate<Schedule>(AggregateCalculation.Minimum,
+                x => x.Property(x => x.DueDate),
+                new Filter<Schedule>(x => x.IncludeInAggregate).IsEqualTo(true))
+            .WithLink(x => x.DocumentID, x => x.ID);
     }
 
     [UserTracking("Task Scheduler")]
@@ -224,6 +216,7 @@ namespace Comal.Classes
 
         [CheckBoxEditor]
         [EditorSequence(15)]
+        [Comment("Include this schedule in the '" + nameof(Equipment.NextSchedule) + "' aggregate and the Planned Maintenance screen.")]
         public bool IncludeInAggregate { get; set; } = true;
 
         #endregion

+ 2 - 1
prs.desktop/Dashboards/Equipment/EquipmentSchedulesDashboard.xaml.cs

@@ -259,7 +259,8 @@ namespace PRSDesktop.Dashboards
                         .Add(x => x.TrackerLink.Location.Longitude)
                         .Add(x => x.TrackerLink.Location.Timestamp)),
                 new KeyedQueryDef<Schedule>(
-                    new Filter<Schedule>(x => x.DocumentClass).IsEqualTo(typeof(Equipment).EntityName()),
+                    new Filter<Schedule>(x => x.DocumentClass).IsEqualTo(typeof(Equipment).EntityName())
+                        .And(x => x.IncludeInAggregate).IsEqualTo(true),
                     Columns.None<Schedule>().Add(x => x.ID)
                         .Add(x => x.Title)
                         .Add(x => x.DueDate)