فهرست منبع

Added option to reduce values to zero when releasing stock from Projects

frogsoftware 1 سال پیش
والد
کامیت
90c5613460

+ 46 - 14
prs.desktop/Panels/Jobs/ProjectsPanel.cs

@@ -11,15 +11,24 @@ using PRSDesktop.Panels.Jobs;
 
 namespace PRSDesktop;
 
+public enum StockReleaseWriteDownMethod
+{
+    AverageCost,
+    Zero
+}
+
 public class ProjectsPanelSettings : BaseObject, IUserConfigurationSettings, IMasterDetailSettings
 {
     [NullEditor] public DynamicSplitPanelView ViewType { get; set; } = DynamicSplitPanelView.Combined;
-    
-    [NullEditor]
-    public double AnchorWidth { get; set; } = 300;
-    
-    [NullEditor]
-    public Guid MasterID { get; set; }
+
+    [NullEditor] public double AnchorWidth { get; set; } = 300;
+
+    [NullEditor] public Guid MasterID { get; set; }
+
+}
+
+public class ProjectsSettings : BaseObject, IGlobalConfigurationSettings
+{
 
     private class VisiblePanelsGenerator : LookupGenerator<object>
     {
@@ -56,10 +65,15 @@ public class ProjectsPanelSettings : BaseObject, IUserConfigurationSettings, IMa
         }
     }
     
-    [CheckListEditor(typeof(VisiblePanelsGenerator))]
+    [CheckListEditor(typeof(VisiblePanelsGenerator), ColumnWidth = 200, Width = 600)]
+    [EditorSequence(2)]
     public Dictionary<string, bool> VisiblePanels { get; set; }
 
-    public ProjectsPanelSettings()
+    [EnumLookupEditor(typeof(StockReleaseWriteDownMethod))]
+    [EditorSequence(2)]
+    public StockReleaseWriteDownMethod StockRelease { get; set; }
+    
+    public ProjectsSettings()
     {
         VisiblePanels = new Dictionary<string, bool>();
     }
@@ -75,11 +89,18 @@ public class ProjectsPanel : MasterDetailPanel<Job,ProjectsGrid,ProjectsPanelSet
     protected override string MasterColumnsTag => "Projects";
 
 
+    private ProjectsSettings _settings;
+
+    public ProjectsPanel() : base()
+    {
+        _settings = new GlobalConfiguration<ProjectsSettings>().Load();
+    }
+    
     private void SetPageVisible(Type type, IMasterDetailPage? page)
     {
         if (page is null)
             return;
-        var isvisible = Settings.VisiblePanels.TryGetValue(type.EntityName().Split('.').Last(), out bool visible)
+        var isvisible = _settings.VisiblePanels.TryGetValue(type.EntityName().Split('.').Last(), out bool visible)
                 ? visible
                 : true;
         page.Tab.Visibility = isvisible
@@ -87,6 +108,17 @@ public class ProjectsPanel : MasterDetailPanel<Job,ProjectsGrid,ProjectsPanelSet
             : Visibility.Collapsed;
     }
 
+    private void SetStockRelease()
+    {
+        if (_pages.TryGetValue(typeof(JobSummaryPanel), out IMasterDetailPage? p) 
+            && p is IMasterDetailPanelPage panel 
+            && panel.Panel is JobSummaryPanel summary)
+            summary.StockRelease = _settings.StockRelease;
+        if (_pages.TryGetValue(typeof(JobStockGrid), out IMasterDetailPage? g) 
+            && g is JobStockGrid grid)
+            grid.StockRelease = _settings.StockRelease;
+    }
+
     private void SetPagesVisible()
     {
         foreach (var page in _pages.Where(x=>x.Value is not null))
@@ -139,6 +171,7 @@ public class ProjectsPanel : MasterDetailPanel<Job,ProjectsGrid,ProjectsPanelSet
         DoCreatePanel<JobSummaryPanel>(Security.CanView<JobMaterial>, "Summary");
         
         SetPagesVisible();
+        SetStockRelease();
     }
 
     protected override void AfterLoadSettings(ProjectsPanelSettings settings)
@@ -160,13 +193,12 @@ public class ProjectsPanel : MasterDetailPanel<Job,ProjectsGrid,ProjectsPanelSet
             Image = PRSDesktop.Resources.specifications, 
             OnExecute = action =>
             {
-                var settings = new UserConfiguration<ProjectsPanelSettings>().Load();
-
-                var grid = new DynamicItemsListGrid<ProjectsPanelSettings>();
-                if (grid.EditItems(new ProjectsPanelSettings[] { Settings }))
+                var grid = new DynamicItemsListGrid<ProjectsSettings>();
+                if (grid.EditItems(new ProjectsSettings[] { _settings }))
                 {
-                    SaveSettings();
+                    new GlobalConfiguration<ProjectsSettings>().Save(_settings);
                     SetPagesVisible();
+                    SetStockRelease();
                 }
             } 
         });

+ 8 - 2
prs.desktop/Panels/Jobs/Stock Holdings/JobStockGrid.cs

@@ -25,6 +25,8 @@ public class JobStockGrid : DynamicDataGrid<StockHolding>, IMasterDetailControl<
             _releaseStock.IsEnabled = value?.JobStatus.Active == false && SelectedRows?.Any() == true;
         }
     }
+    
+    public StockReleaseWriteDownMethod StockRelease { get; set; }
 
     private Button _releaseStock;
     private Job? _master;
@@ -99,13 +101,17 @@ public class JobStockGrid : DynamicDataGrid<StockHolding>, IMasterDetailControl<
                 var from = holding.CreateMovement();
                 from.OrderItem.ID = group.Key.OrderItem;
                 from.JobRequisitionItem.ID = group.Key.JobRequisitionItem;
-                from.Cost = group.Key.Cost;
+                from.Cost = StockRelease == StockReleaseWriteDownMethod.AverageCost
+                    ? group.Key.Cost
+                    : 0.0;
                 from.Type = StockMovementType.TransferOut;
                 from.Job.ID = Master.ID;
                 from.Issued = group.Units;
 
                 var to = holding.CreateMovement();
-                to.Cost = group.Key.Cost;
+                to.Cost = StockRelease == StockReleaseWriteDownMethod.AverageCost
+                    ? group.Key.Cost
+                    : 0.0;
                 to.OrderItem.ID = group.Key.OrderItem;
                 to.JobRequisitionItem.ID = group.Key.JobRequisitionItem;
                 to.Type = StockMovementType.TransferIn;

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

@@ -104,13 +104,17 @@ internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IMasterDetailContr
                     var from = holding.CreateMovement();
                     //from.OrderItem.ID = group.Key.OrderItem;
                     from.JobRequisitionItem.ID = item.ID;
-                    from.Cost = holding.AverageValue;
+                    from.Cost = StockRelease == StockReleaseWriteDownMethod.AverageCost
+                        ? holding.AverageValue
+                        : 0.0;
                     from.Type = StockMovementType.TransferOut;
                     from.Job.ID = Master.ID;
                     from.Issued = item.Qty;
 
                     var to = holding.CreateMovement();
-                    to.Cost = holding.AverageValue;
+                    to.Cost = StockRelease == StockReleaseWriteDownMethod.AverageCost
+                        ? holding.AverageValue
+                        : 0.0;
                     //to.OrderItem.ID = group.Key.OrderItem;
                     //to.JobRequisitionItem.ID = item.ID;
                     to.Job.ID = Guid.Empty;
@@ -570,6 +574,8 @@ internal class JobSummaryGrid : DynamicDataGrid<JobMaterial>, IMasterDetailContr
     public event DataModelUpdateEvent? OnUpdateDataModel;
 
     public string SectionName => "Job Summary";
+    
+    public StockReleaseWriteDownMethod StockRelease { get; set; }
 
     public DataModel DataModel(Selection selection)
     {

+ 6 - 0
prs.desktop/Panels/Jobs/Summary/JobSummaryPanel.xaml.cs

@@ -22,6 +22,12 @@ namespace PRSDesktop
             get => Summary.Master;
             set => Summary.Master = value;
         }
+
+        public StockReleaseWriteDownMethod StockRelease
+        {
+            get => Summary.StockRelease;
+            set => Summary.StockRelease = value;
+        }
         
         public bool IsReady { get; set; }