Selaa lähdekoodia

Added "IsApproved" aggregate to bills

Kenric Nugteren 6 kuukautta sitten
vanhempi
commit
a34b0c5bd4

+ 19 - 5
prs.classes/Entities/Bill/Bill.cs

@@ -47,14 +47,25 @@ namespace Comal.Classes
         [Security(typeof(CanCheckBills), Editable = Editable.Disabled)]
         public DateTime Checked { get; set; }
 
-        [EditorSequence("Additional",3)]
-        [TimestampEditor]
-        [Security(typeof(CanApproveBills), Editable = Editable.Disabled)]
-        public DateTime Approved { get; set; }
-
         [EditorSequence("Additional", 4)]
         [Editable(Editable.Disabled)]
         public BillApprovalSetLink ApprovalSet { get; set; }
+
+        private class IsApprovedFormula : ComplexFormulaGenerator<Bill, bool>
+        {
+            public override IComplexFormulaNode<Bill, bool> GetFormula() =>
+                If<int>(x => x.Count<BillApproval, Guid>(
+                        x => x.Property(x => x.ID),
+                        filter: new Filter<BillApproval>(x => x.Approved).IsEqualTo(DateTime.MinValue))
+                    .WithLink(x => x.Bill.ID, x => x.ID),
+                    Condition.Equals,
+                    x => x.Constant(0))
+                .Then(Constant(true))
+                .Else(Constant(false));
+        }
+        [Editable(Editable.Hidden)]
+        [ComplexFormula(typeof(IsApprovedFormula))]
+        public bool IsApproved { get; set; }
         
         private class ExTaxFormula : ComplexFormulaGenerator<Bill, double>
         {
@@ -199,5 +210,8 @@ namespace Comal.Classes
         
         [EditorSequence("Issues", 1)]
         public ManagedProblem Problem { get; set; }
+
+        [Obsolete("Replaced with IsApproved aggregate")]
+        public DateTime Approved { get; set; }
     }
 }

+ 1 - 1
prs.desktop/Panels/Suppliers/Bills/SupplierBillPanel.xaml.cs

@@ -536,7 +536,7 @@ public partial class SupplierBillPanel : UserControl, IPanel<Bill>, IPropertiesP
 
     private void Bill_OnFormCustomiseEditor(IDynamicEditorForm sender, object items, DynamicGridColumn column, BaseEditor editor)
     {
-        if(column.ColumnName == "Approved")
+        if(column.ColumnName == "Approved" || ApprovalSetID.IsEqualTo(column.ColumnName))
         {
             editor.Editable = Editable.Hidden;
         }

+ 5 - 5
prs.desktop/Panels/Suppliers/Bills/SupplierBills.cs

@@ -27,7 +27,7 @@ public class SupplierBills : DynamicDataGrid<Bill>
         
         _settings = new GlobalConfiguration<SupplierBillPanelProperties>().Load();
 
-        HiddenColumns.Add(x => x.Approved);
+        HiddenColumns.Add(x => x.IsApproved);
         HiddenColumns.Add(x => x.DataEntered);
         HiddenColumns.Add(x => x.Checked);
         HiddenColumns.Add(x => x.ApprovalSet.ID);
@@ -166,21 +166,21 @@ public class SupplierBills : DynamicDataGrid<Bill>
     private FrameworkElement? Approved_ToolTip(DynamicActionColumn column, CoreRow? row)
     {
         return row is null ? column.TextToolTip("Has this bill been approved?")
-            : row.Get<Bill, DateTime>(x => x.Approved).IsEmpty() ? column.TextToolTip("Not yet approved")
+            : !row.Get<Bill, bool>(x => x.IsApproved) ? column.TextToolTip("Not yet approved")
             : column.TextToolTip("Approved");
     }
 
     private FrameworkElement? Checked_ToolTip(DynamicActionColumn column, CoreRow? row)
     {
         return row is null ? column.TextToolTip("Has this bill been checked?")
-            : row.Get<Bill, DateTime>(x => x.Approved).IsEmpty() ? column.TextToolTip("Not yet checked")
+            : row.Get<Bill, DateTime>(x => x.Checked).IsEmpty() ? column.TextToolTip("Not yet checked")
             : column.TextToolTip("Checked");
     }
 
     private FrameworkElement? DataEntered_ToolTip(DynamicActionColumn column, CoreRow? row)
     {
         return row is null ? column.TextToolTip("Has this bill been entered via Data Entry?")
-            : row.Get<Bill, DateTime>(x => x.Approved).IsEmpty() ? column.TextToolTip("Data not entered.")
+            : row.Get<Bill, DateTime>(x => x.DataEntered).IsEmpty() ? column.TextToolTip("Data not entered.")
             : column.TextToolTip("Data Entered");
     }
 
@@ -211,7 +211,7 @@ public class SupplierBills : DynamicDataGrid<Bill>
 
     private BitmapImage? Approved_Image(CoreRow? row)
     {
-        return (row != null) && row.Get<Bill, DateTime>(x => x.Approved).IsEmpty()
+        return (row != null) && !row.Get<Bill, bool>(x => x.IsApproved)
             ? null
             : tick;
     }

+ 2 - 2
prs.shared/Posters/MYOB/BillMYOBPoster.cs

@@ -92,7 +92,7 @@ public class BillMYOBPoster : IMYOBPoster<Bill, BillMYOBPosterSettings>
     {
         return Columns.None<Bill>()
             .Add(x => x.ID)
-            .Add(x => x.Approved)
+            .Add(x => x.IsApproved)
             .Add(x => x.PostedReference)
             .Add(x => x.Number)
             .Add(x => x.AccountingDate)
@@ -128,7 +128,7 @@ public class BillMYOBPoster : IMYOBPoster<Bill, BillMYOBPosterSettings>
         var service = new ServiceBillService(ConnectionData.Configuration, null, ConnectionData.AuthKey);
 
         var bills = model.GetTable<Bill>().ToArray<Bill>();
-        if(bills.Any(x => x.Approved.IsEmpty()))
+        if(bills.Any(x => !x.IsApproved))
         {
             throw new PostFailedMessageException("We can't process unapproved bills; please approve all bills before processing.");
         }

+ 2 - 2
prs.shared/Posters/Timberline/BillTimberlinePoster.cs

@@ -306,7 +306,7 @@ public class BillTimberlinePoster : ITimberlinePoster<Bill, BillTimberlineSettin
             .Add(x => x.BillDate)
             .Add(x => x.AccountingDate)
             .Add(x => x.PaymentDate)
-            .Add(x => x.Approved));
+            .Add(x => x.IsApproved));
 
         model.SetColumns(Columns.None<BillLine>().Add(x => x.ID)
             .Add(x => x.BillLink.ID)
@@ -381,7 +381,7 @@ public class BillTimberlinePoster : ITimberlinePoster<Bill, BillTimberlineSettin
             .ToDictionary(x => x.Key, x => x.ToList());
 
         var bills = model.GetTable<Bill>().ToObjects<Bill>();
-        if(bills.Any(x => x.Approved.IsEmpty()))
+        if(bills.Any(x => !x.IsApproved))
         {
             throw new PostFailedMessageException("We can't process unapproved bills; please approve all bills before processing.");
         }