Browse Source

Created "Add" button on Substitution Screen

frankvandenbos 10 months ago
parent
commit
ecab477bd7

+ 16 - 2
prs.desktop/Panels/Reservation Management/Substitution/ReservationManagementSubstitutionGrid.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 using System.Threading;
 using System.Windows.Controls;
 using Comal.Classes;
@@ -97,8 +98,9 @@ public class ReservationManagementSubstitutionGrid : DynamicDataGrid<StockHoldin
         if (jri != null)
         {
             criteria.Add(new Filter<StockHolding>(x => x.Product.ID).IsEqualTo(jri.Product.ID)
+                .And(x=>x.Available).IsNotEqualTo(0.0)
                 .And(
-                    new Filter<StockHolding>(x => x.Style.ID).IsNotEqualTo(jri.Style.ID)
+                    new Filter<StockHolding>(x =>x.Style.ID).IsNotEqualTo(jri.Style.ID)
                         .Or(x => x.Dimensions.Unit.ID).IsNotEqualTo(jri.Dimensions.Unit.ID)
                         .Or(x => x.Dimensions.Height).IsNotEqualTo(jri.Dimensions.Height)
                         .Or(x => x.Dimensions.Width).IsNotEqualTo(jri.Dimensions.Width)
@@ -112,7 +114,19 @@ public class ReservationManagementSubstitutionGrid : DynamicDataGrid<StockHoldin
         }
         else
             criteria.Add(new Filter<StockHolding>().None());
-        base.Reload(criteria, columns, ref sort, token, action);
+        base.Reload(criteria, columns, ref sort, token, 
+            (o,e) =>
+            {
+                // var deletes = o?.Rows.Where(r =>
+                //     r.Get<StockHolding, Guid>(x => x.Style.ID) != (jri?.Style.ID ?? Guid.Empty)).ToArray();
+                // if (deletes?.Any() == true)
+                // {
+                //     foreach (var delete in deletes)
+                //         o.Rows.Remove(delete);
+                // }
+                action?.Invoke(o,e);
+            }
+        );
     }
     
 }

+ 14 - 5
prs.desktop/Panels/Reservation Management/Substitution/ReservationManagementSubstitutionWindow.xaml

@@ -19,6 +19,7 @@
         </Grid.RowDefinitions>
         
         <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="80"/>
             <ColumnDefinition Width="*"/>
             <ColumnDefinition Width="80"/>
             <ColumnDefinition Width="80"/>
@@ -26,13 +27,21 @@
         
         <local:ReservationManagementSubstitutionGrid 
             x:Name="substitutions" 
-            Grid.ColumnSpan="3" 
+            Grid.ColumnSpan="4" 
             OnSelectItem="Substitutions_OnOnSelectItem"/>
         
-        <DockPanel
+        <Button 
+            x:Name="add"
             Grid.Row="1"
             Grid.Column="0"
-            Margin="0,5,0,0">
+            Margin="0,5,0,0"
+            Content="Add"
+            Click="Add_Click"/>
+        
+        <DockPanel
+            Grid.Row="1"
+            Grid.Column="1"
+            Margin="5,5,0,0">
             <CheckBox
                 x:Name="SubstitutionFreeStock" 
                 DockPanel.Dock="Left" 
@@ -53,7 +62,7 @@
         <Button 
             x:Name="ok"
             Grid.Row="1"
-            Grid.Column="1"
+            Grid.Column="2"
             Margin="5,5,0,0"
             Content="OK"
             IsEnabled="False"
@@ -62,7 +71,7 @@
         <Button 
             x:Name="cancel"
             Grid.Row="1"
-            Grid.Column="2"
+            Grid.Column="3"
             Margin="5,5,0,0"
             Content="Cancel"
             Click="Cancel_Click"/>

+ 90 - 4
prs.desktop/Panels/Reservation Management/Substitution/ReservationManagementSubstitutionWindow.xaml.cs

@@ -4,8 +4,11 @@ using System.Windows;
 using Comal.Classes;
 using InABox.Clients;
 using InABox.Configuration;
+using InABox.Core;
 using InABox.DynamicGrid;
+using InABox.Wpf;
 using InABox.WPF;
+using NPOI.Util;
 
 namespace PRSDesktop;
 
@@ -34,6 +37,14 @@ public partial class ReservationManagementSubstitutionWindow : Window
         var _holding = substitutions.SelectedRows?.FirstOrDefault()?.ToObject<StockHolding>();
         if (_holding == null || substitutions.JRI == null)
             return;
+        
+        Substitute(_holding, Guid.NewGuid());
+        
+        DialogResult = true;
+    }
+
+    private void Substitute(StockHolding _holding, Guid transaction)
+    {
         Progress.ShowModal("Substitution Item", progress =>
         {
             substitutions.JRI.Dimensions.CopyFrom(_holding.Dimensions, true);
@@ -44,7 +55,7 @@ public partial class ReservationManagementSubstitutionWindow : Window
             var _xferout = _holding.CreateMovement();
             _xferout.Issued = Math.Min(_holding.Available, substitutions.JRI.Qty);
             _xferout.Notes = "Substituted by Requisition Management Screen";
-            _xferout.Transaction = Guid.NewGuid();
+            _xferout.Transaction = transaction;
             _xferout.Type = StockMovementType.TransferOut;
             _xferout.Employee.ID = App.EmployeeID;
             _xferout.Cost = _holding.AverageValue;
@@ -54,15 +65,13 @@ public partial class ReservationManagementSubstitutionWindow : Window
             _xferin.Job.CopyFrom(substitutions.JRI.Job);
             _xferin.Received = Math.Min(_holding.Available, substitutions.JRI.Qty);
             _xferin.Notes = "Substituted by Requisition Management Screen";
-            _xferin.Transaction = _xferout.Transaction;
+            _xferin.Transaction = transaction;
             _xferin.Type = StockMovementType.TransferIn;
             _xferin.Employee.ID = App.EmployeeID;
             _xferin.Cost = _holding.AverageValue;
         
             Client.Save(new[] { _xferout, _xferin}, "Substituted by Requisition Management Screen");
         });
-        
-        DialogResult = true;
     }
 
     private void Cancel_Click(object sender, RoutedEventArgs e)
@@ -89,4 +98,81 @@ public partial class ReservationManagementSubstitutionWindow : Window
             new UserConfiguration<ReservationManagementUserSettings>().Save(settings);
         }
     }
+
+    private void Add_Click(object sender, RoutedEventArgs e)
+    {
+        if (substitutions?.JRI == null)
+        {
+            MessageWindow.ShowMessage("No JRI Set!","Error");
+            return;
+        }
+        var movement = new StockMovement();
+        movement.Date = DateTime.Now;
+        movement.Product.CopyFrom(substitutions.JRI.Product);
+        movement.Style.CopyFrom(substitutions.JRI.Style);
+        movement.Dimensions.CopyFrom(substitutions.JRI.Dimensions);
+        movement.Received = substitutions.JRI.Qty;
+        movement.Employee.ID = App.EmployeeID;
+        movement.Cost = 0.0;
+        movement.Type = StockMovementType.StockTake;
+        movement.Notes = "Ad Hoc holding created by Requisition Management Substitution Screen";
+        movement.Transaction = Guid.NewGuid();
+        movement.System = true;
+        var grid = new StockMovementGrid();
+        grid.OnCustomiseEditor += (form, items, column, editor) =>
+        {
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.Product.ID,".")))
+                editor.Editable = Editable.Disabled;
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.JobRequisitionItem.ID,".")))
+                editor.Editable = Editable.Hidden;
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.JobScope.ID,".")))
+                editor.Editable = Editable.Hidden;
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,Guid>(x=>x.Job.ID,".")))
+                editor.Editable = Editable.Hidden;
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,StockMovementType>(x=>x.Type,".")))
+                editor.Editable = Editable.Hidden;
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,double>(x=>x.Received,".")))
+                editor.Caption = "On Hand Qty";
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,double>(x=>x.Issued,".")))
+                editor.Editable = Editable.Hidden;
+            if (string.Equals(column.ColumnName, CoreUtils.GetFullPropertyName<StockMovement,double>(x=>x.Balance,".")))
+                editor.Editable = Editable.Hidden;
+            if (column.ColumnName.StartsWith( CoreUtils.GetFullPropertyName<StockMovement,ActualCharge>(x=>x.Charge,".")+"."))
+                editor.Editable = Editable.Hidden;
+            
+        };
+        grid.OnValidate += (dynamicGrid, items, errors) =>
+        {
+            if (movement.Location.ID == Guid.Empty)
+                errors.Add("Location may not be empty!");
+        };
+        if (grid.EditItems([movement]))
+        {
+
+            var holding = new Client<StockHolding>().Query(
+                new Filter<StockHolding>(x => x.Location.ID).IsEqualTo(movement.Location.ID)
+                    .And(x => x.Product.ID).IsEqualTo(movement.Product.ID)
+                    .And(x => x.Style.ID).IsEqualTo(movement.Style.ID)
+                    .And(x => x.Dimensions).DimensionEquals(movement.Dimensions)
+                    .And(x=>x.Job.ID).IsEqualTo(movement.Job.ID),
+                Columns.Required<StockHolding>()
+                    .Add(x=>x.Product.ID)
+                    .Add(x=>x.Location.ID)
+                    .Add(x=>x.Style.ID)
+                    .AddDimensionsColumns(x=>x.Dimensions)
+                    .Add(x=>x.Available)
+                    .Add(x=>x.AverageValue)
+            ).Rows.FirstOrDefault()?.ToObject<StockHolding>();
+            if (holding != null)
+            {
+                Substitute(holding, movement.Transaction);
+                DialogResult = true;
+            }
+            else
+            {
+                MessageWindow.ShowMessage("Unable to locate new holding!", "Error");
+            }
+
+        }
+    }
 }