Jelajahi Sumber

Tweaked Stock Summary Screen and Server Grid Columns

Frank van den Bos 2 tahun lalu
induk
melakukan
e174163a86

+ 41 - 19
prs.classes/Entities/Stock/StockSummary.cs

@@ -25,6 +25,7 @@ namespace Comal.Classes
         public override Filter<JobBillOfMaterialsItem> Filter =>
             new Filter<JobBillOfMaterialsItem>(x => x.BillOfMaterials.Approved).IsNotEqualTo(DateTime.MinValue);
     }
+    
     public class StockSummaryIssuedAggregate : CoreAggregate<StockSummary, StockMovement, double>
     {
         public override Expression<Func<StockMovement, double>> Aggregate => x => x.Issued;
@@ -42,6 +43,37 @@ namespace Comal.Classes
                 { StockMovement => StockMovement.Dimensions.UnitSize, summary => summary.Dimensions.UnitSize }
             };
     }
+    
+    public class StockSummaryTotalRequiredFormula : IFormula<StockSummary, double>
+    {
+        public Expression<Func<StockSummary, double>> Value => x => x.Product.MinimumStockLevel;
+
+        public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[]
+        {
+            x => x.BillOfMaterials
+        };
+
+        public FormulaOperator Operator => FormulaOperator.Add;
+
+        public FormulaType Type => FormulaType.Virtual;
+    }
+    
+    public class StockSummaryNettRequiredFormula : IFormula<StockSummary, double>
+    {
+        public Expression<Func<StockSummary, double>> Value => x => x.TotalRequired;
+
+        public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[]
+        {
+            x => x.Issued
+        };
+
+        public FormulaOperator Operator => FormulaOperator.Subtract;
+
+        public FormulaType Type => FormulaType.Virtual;
+    }
+
+
+    
     public class StockSummaryAllStockAggregate : CoreAggregate<StockSummary, StockMovement, double>
     {
         public override Expression<Func<StockMovement, double>> Aggregate => x => x.Units;
@@ -76,20 +108,6 @@ namespace Comal.Classes
         public override Filter<PurchaseOrderItem> Filter => new Filter<PurchaseOrderItem>(x => x.ReceivedDate).IsEqualTo(DateTime.MinValue);
     }
 
-    public class StockSummaryTotalRequiredFormula : IFormula<StockSummary, double>
-    {
-        public Expression<Func<StockSummary, double>> Value => x => x.Product.MinimumStockLevel;
-
-        public Expression<Func<StockSummary, double>>[] Modifiers => new Expression<Func<StockSummary, double>>[]
-        {
-            x => x.BillOfMaterials
-        };
-
-        public FormulaOperator Operator => FormulaOperator.Add;
-
-        public FormulaType Type => FormulaType.Virtual;
-    }
-
     public class StockSummaryTotalStockFormula : IFormula<StockSummary, double>
     {
         public Expression<Func<StockSummary, double>> Value => x => x.Issued;
@@ -179,11 +197,19 @@ namespace Comal.Classes
         [DoubleEditor]
         [Aggregate(typeof(StockSummaryBOMAggregate))]
         public double BillOfMaterials { get; set; }
+        
+        [NullEditor]
+        [Formula(typeof(StockSummaryTotalRequiredFormula))]
+        public double TotalRequired { get; set; }
 
         [EditorSequence(5)]
         [Aggregate(typeof(StockSummaryIssuedAggregate))]
         [DoubleEditor(Editable = Editable.Hidden)]
         public double Issued { get; set; }
+        
+        [NullEditor]
+        [Formula(typeof(StockSummaryNettRequiredFormula))]
+        public double NettRequired { get; set; }
 
         [EditorSequence(6)]
         [Aggregate(typeof(StockSummaryAllStockAggregate))]
@@ -194,11 +220,7 @@ namespace Comal.Classes
         [DoubleEditor]
         [Aggregate(typeof(StockSummaryOrderAggregate))]
         public double OnOrder { get; set; }
-
-        [NullEditor]
-        [Formula(typeof(StockSummaryTotalRequiredFormula))]
-        public double TotalRequired { get; set; }
-
+        
         [NullEditor]
         [Formula(typeof(StockSummaryTotalStockFormula))]
         public double TotalStock { get; set; }

+ 2 - 2
prs.desktop/Dashboards/HumanResources/CompletedAssignmentDashboard.cs

@@ -90,9 +90,9 @@ namespace PRSDesktop.Dashboards
             base.Reload(criteria, columns, ref sort, action);
         }
 
-        protected override DynamicGridStyle GetStyle(CoreRow row, DynamicGridStyle style)
+        protected override DynamicGridStyle GetRowStyle(CoreRow row, DynamicGridStyle style)
         {
-            var result = base.GetStyle(row, style);
+            var result = base.GetRowStyle(row, style);
             var completed = row.Get<Assignment, DateTime>(c => c.Completed);
             if (completed < DateTime.Today.AddDays(-2))
                 result.Background = new SolidColorBrush(Colors.LightSalmon);

+ 2 - 2
prs.desktop/Dashboards/Projects/JobsRequiringBookingsWidget.cs

@@ -65,9 +65,9 @@ namespace PRSDesktop
             base.Reload(criteria, columns, ref sort, action);
         }
 
-        protected override DynamicGridStyle GetStyle(CoreRow row, DynamicGridStyle style)
+        protected override DynamicGridStyle GetRowStyle(CoreRow row, DynamicGridStyle style)
         {
-            return base.GetStyle(row, style);
+            return base.GetRowStyle(row, style);
         }
     }
 }

+ 2 - 2
prs.desktop/Dashboards/Quotes/OpenQuotesDashboard.cs

@@ -61,9 +61,9 @@ namespace PRSDesktop.Dashboards
             base.Reload(criteria, columns, ref sort, action);
         }
 
-        protected override DynamicGridStyle GetStyle(CoreRow row, DynamicGridStyle style)
+        protected override DynamicGridStyle GetRowStyle(CoreRow row, DynamicGridStyle style)
         {
-            var result = base.GetStyle(row, style);
+            var result = base.GetRowStyle(row, style);
             result.Background = new SolidColorBrush(Colors.Firebrick);
             result.Foreground = new SolidColorBrush(Colors.Yellow);
             return result;

+ 5 - 5
prs.desktop/Forms/DeliveryBuilder.xaml.cs

@@ -45,7 +45,7 @@ namespace PRSDesktop
 
         public List<IMotorolaBarcodeScanner> Scanners = new();
 
-        private NewDynamicGridStyle style;
+        private DynamicGridRowStyle _rowStyle;
 
         public DeliveryBuilder(Guid deliveryid, Guid orderid)
         {
@@ -61,14 +61,14 @@ namespace PRSDesktop
             _deliveryid = deliveryid;
             _orderid = orderid;
             Items.OnChanged += ItemsChanged;
-            Items.OnGetStyle += Items_GetStyle;
+            Items.OnGetRowStyle += Items_GetStyle;
         }
 
         private DynamicGridStyle Items_GetStyle(CoreRow row, DynamicGridStyle defaultstyle)
         {
-            if (style == null)
-                style = new NewDynamicGridStyle(defaultstyle) { Background = new SolidColorBrush(Colors.LightYellow) };
-            return style;
+            if (_rowStyle == null)
+                _rowStyle = new DynamicGridRowStyle(defaultstyle) { Background = new SolidColorBrush(Colors.LightYellow) };
+            return _rowStyle;
         }
 
         private void ItemsChanged(IDynamicGrid sender)

+ 3 - 3
prs.desktop/Panels/Products/Locations/StockMovementGrid.cs

@@ -192,9 +192,9 @@ namespace PRSDesktop
         }
 
         //int typecolumn = -1;
-        protected override DynamicGridStyle GetStyle(CoreRow row, DynamicGridStyle style)
+        protected override DynamicGridStyle GetRowStyle(CoreRow row, DynamicGridStyle style)
         {
-            var result = base.GetStyle(row, style);
+            var result = base.GetRowStyle(row, style);
             if (syscolumn == -1)
             {
                 var col = row.Table.Columns.FirstOrDefault(x => x.ColumnName.Equals("System"));
@@ -203,7 +203,7 @@ namespace PRSDesktop
 
             if (row.Values[syscolumn].Equals(true)) //row.Get<StockMovement, bool>(x => x.System))
             {
-                result = new NewDynamicGridStyle
+                result = new DynamicGridRowStyle
                 {
                     Foreground = new SolidColorBrush(Colors.Gray),
                     FontStyle = FontStyles.Italic,

+ 3 - 3
prs.desktop/Panels/Quotes/QuoteCostSheetItemGrid.cs

@@ -16,7 +16,7 @@ namespace PRSDesktop
     {
         private Guid _quotecostsheetid = Guid.Empty;
 
-        private readonly DynamicGridStyle header = new NewDynamicGridStyle
+        private readonly DynamicGridStyle header = new DynamicGridRowStyle
         {
             Background = new SolidColorBrush(Colors.Gray),
             Foreground = new SolidColorBrush(Colors.White),
@@ -212,10 +212,10 @@ namespace PRSDesktop
             return result;
         }
 
-        protected override DynamicGridStyle GetStyle(CoreRow row, DynamicGridStyle style)
+        protected override DynamicGridStyle GetRowStyle(CoreRow row, DynamicGridStyle style)
         {
             var type = row.Get<QuoteCostSheetItem, QuoteCostSheetItemLineType>(x => x.Type);
-            return base.GetStyle(row, type == QuoteCostSheetItemLineType.Header ? header : style);
+            return base.GetRowStyle(row, type == QuoteCostSheetItemLineType.Header ? header : style);
         }
     }
 }

+ 1 - 1
prs.desktop/Panels/StockSummary/StockSummaryControl.xaml

@@ -16,7 +16,7 @@
         </dynamicGrid:DynamicSplitPanel.Header>
         
         <dynamicGrid:DynamicSplitPanel.Master>
-            <local:StockSummaryGrid x:Name="SummaryGrid" />
+            <local:StockSummaryGrid x:Name="SummaryGrid" BeforeRefresh="SummaryGrid_OnBeforeRefresh" AfterRefresh="SummaryGrid_OnAfterRefresh" />
         </dynamicGrid:DynamicSplitPanel.Master>
         
         <!-- <dynamicGrid:DynamicSplitPanel.DetailHeader> -->

+ 15 - 0
prs.desktop/Panels/StockSummary/StockSummaryControl.xaml.cs

@@ -3,6 +3,7 @@ using System.Windows.Controls;
 using InABox.Configuration;
 using InABox.Core;
 using InABox.DynamicGrid;
+using InABox.WPF;
 
 namespace PRSDesktop
 {
@@ -123,5 +124,19 @@ namespace PRSDesktop
             Properties.SplitPanelSettings = e;
             DoSaveSettings();
         }
+        
+        private void SummaryGrid_OnBeforeRefresh(object sender, BeforeRefreshEventArgs args)
+        {
+            //Progress.Show("Loading");
+            GroupSelector.IsEnabled = false;
+            JobSelector.IsEnabled = false;
+        }
+
+        private void SummaryGrid_OnAfterRefresh(object sender, AfterRefreshEventArgs args)
+        {
+            //Progress.Close();
+            GroupSelector.IsEnabled = true;
+            JobSelector.IsEnabled = true;
+        }
     }
 }

+ 27 - 3
prs.desktop/Panels/StockSummary/StockSummaryGrid.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Linq;
 using System.Reflection;
+using System.Windows.Media;
 using Comal.Classes;
 using InABox.Clients;
 using InABox.Core;
@@ -9,8 +10,6 @@ using Syncfusion.Data.Extensions;
 
 namespace PRSDesktop
 {
-
-    
     public class StockSummaryGrid : DynamicDataGrid<StockSummary>, IDataModelSource
     {
         
@@ -245,7 +244,32 @@ namespace PRSDesktop
                          row.Get<StockSummary, double>(x => x.OnOrder) != 0.0F;
             return result;
         }
-        
+
+        // private String _minstock = CoreUtils.GetFullPropertyName<StockSummary, double>(x => x.Product.MinimumStockLevel, ".");
+        // private String _bom = CoreUtils.GetFullPropertyName<StockSummary, double>(x => x.BillOfMaterials, ".");
+        // private String _issued = CoreUtils.GetFullPropertyName<StockSummary, double>(x => x.Issued, ".");
+        // private String _nettrequired = CoreUtils.GetFullPropertyName<StockSummary, double>(x => x.NettRequired, ".");
+        // private String _stock = CoreUtils.GetFullPropertyName<StockSummary, double>(x => x.AllStock, ".");
+        // private String _ordered = CoreUtils.GetFullPropertyName<StockSummary, double>(x => x.OnOrder, ".");
+        private String _balance = CoreUtils.GetFullPropertyName<StockSummary, double>(x => x.BalanceAvailable, ".");
+
+        protected override Brush? GetCellBackground(CoreRow row, string columnname)
+        {
+
+            // if (String.Equals(columnname, _minstock) || String.Equals(columnname, _bom) || String.Equals(columnname, _issued) || String.Equals(columnname, _nettrequired))
+            //     return Brushes.Khaki;
+            // if (String.Equals(columnname, _stock) || String.Equals(columnname, _ordered))
+            //     return Brushes.Lavender;
+            if (String.Equals(columnname, _balance))
+            {
+                var balance = row.Get<StockSummary, double>(x => x.BalanceAvailable);
+                return balance < 0.0F
+                    ? Brushes.LightSalmon
+                    : Brushes.LightGreen;
+            }
+            return null;
+        }
+
         #region IDataModelSource
         
         public event DataModelUpdateEvent OnUpdateDataModel;

+ 2 - 2
prs.server/Forms/DatabaseLicense/LicenseRenewalForm.xaml.cs

@@ -292,7 +292,7 @@ namespace PRSServer.Forms.DatabaseLicense
             Help.Content = new Image { Source = Properties.Resources.help.AsBitmapImage(Color.White) };
             Help.Click += Help_Click;
 
-            Modules.OnAfterReload += Modules_OnAfterReload;
+            Modules.AfterRefresh += ModulesRefreshed;
 
             //double months = Math.Max(0.0F,CalcMonths(CurrentExpiry.Value, NewExpiry.Value));
             //double total = 0.0F;
@@ -335,7 +335,7 @@ namespace PRSServer.Forms.DatabaseLicense
             RenewalPeriodEditor.Loaded = true;
         }
 
-        private void Modules_OnAfterReload(object sender)
+        private void ModulesRefreshed(object sender, AfterRefreshEventArgs args)
         {
             if (CurrentLicense == null) return;
 

+ 6 - 4
prs.server/Forms/ServerGrid.cs

@@ -54,14 +54,16 @@ namespace PRSServer
         public ServerGrid()
         {
             Options.AddRange(DynamicGridOption.AddRows, DynamicGridOption.EditRows, DynamicGridOption.DeleteRows, DynamicGridOption.ShowHelp);
+            
             ActionColumns.Add(new DynamicImageColumn(TypeImage) 
                 { Position = DynamicActionColumnPosition.Start, ToolTip = TypeToolTip });
+            
+            ActionColumns.Add(new DynamicImageColumn(SecureImage)
+                {  Position = DynamicActionColumnPosition.Start, ToolTip = SecureToolTip });
+            
             ActionColumns.Add(new DynamicImageColumn(StateImage, StateAction)
                 { Position = DynamicActionColumnPosition.End, ToolTip = StateToolTip });
-            ActionColumns.Add(new DynamicImageColumn(SecureImage)
-                {  Position = DynamicActionColumnPosition.End, ToolTip = SecureToolTip });
-            //ActionColumns.Add(new DynamicImageColumn(ConsoleImage, ConsoleAction)
-            //    { Position = DynamicActionColumnPosition.End, ToolTip = StateToolTip });
+
             ActionColumns.Add(new DynamicMenuColumn(CreateServerMenu,ServerMenuStatus)
                 { Position = DynamicActionColumnPosition.End, ToolTip = MenuToolTip });