Prechádzať zdrojové kódy

Fixing enabled statues for stock relocation window

Kenric Nugteren 1 rok pred
rodič
commit
1f19a14ef5

+ 14 - 10
prs.desktop/Panels/Products/Locations/StockHoldingGrid.cs

@@ -71,8 +71,10 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
         HiddenColumns.Add(x => x.Product.ID);
         HiddenColumns.Add(x => x.Job.ID);
         HiddenColumns.Add(x => x.Job.JobNumber);
+        HiddenColumns.Add(x => x.Job.Name);
         HiddenColumns.Add(x => x.Location.ID);
         HiddenColumns.Add(x => x.Location.Code);
+        HiddenColumns.Add(x => x.Location.Description);
         HiddenColumns.Add(x => x.Style.ID);
         HiddenColumns.Add(x => x.Style.Code);
         HiddenColumns.Add(x => x.Qty);
@@ -338,10 +340,18 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
         var win = new StockHoldingRelocationWindow(holding, requiitems)
         {
             IsJobEditable = true,
-            Job = new Job
+            RequireChangeTarget = true,
+            OriginalTarget = new StockLocation
+            {
+                ID = holding.Location.ID,
+                Code = holding.Location.Code,
+                Description = holding.Location.Description,
+            },
+            OriginalJob = new Job
             {
                 ID = holding.Job.ID,
-                JobNumber = holding.Job.JobNumber
+                JobNumber = holding.Job.JobNumber,
+                Name = holding.Job.Name
             },
             ShowFrom = false
         };
@@ -356,7 +366,7 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
                 if (!quantities.TryGetValue(requiitem.ID, out var qty)) continue;
 
                 var mout = holding.CreateMovement();
-                mout.Issued = Math.Min(requiitem.Qty, qty);
+                mout.Issued = qty;
                 mout.Cost = holding.AverageValue;
                 mout.JobRequisitionItem.ID = requiitem.ID;
                 mout.Type = StockMovementType.TransferOut;
@@ -515,7 +525,7 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
         {
             IsTargetEditable = false,
             IsJobEditable = true,
-            Job = new Job
+            OriginalJob = new Job
             {
                 ID = holding.Job.ID,
                 JobNumber = holding.Job.JobNumber
@@ -555,12 +565,6 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
         var holding = SelectedRows.FirstOrDefault()?.ToObject<StockHolding>();
         if (holding is null) return;
 
-        var requiitems = holding.LoadRequisitionItems(true).AsArray();
-        if(requiitems.Length > 1)
-        {
-            return;
-        }
-
         var movement = CreateMovementFromHolding(holding);
         movement.Received = holding.Available;
         movement.Type = StockMovementType.TransferIn;

+ 27 - 26
prs.desktop/Panels/Products/Locations/StockHoldingRelocationWindow.xaml

@@ -36,7 +36,7 @@
                         <Style TargetType="ColumnDefinition">
                             <Setter Property="Width" Value="0"/>
                             <Style.Triggers>
-                                <DataTrigger Binding="{Binding IsJobEditable}" Value="True">
+                                <DataTrigger Binding="{Binding IsTargetEditable}" Value="True">
                                     <Setter Property="Width" Value="*"/>
                                 </DataTrigger>
                             </Style.Triggers>
@@ -51,7 +51,7 @@
                         <Style TargetType="ColumnDefinition">
                             <Setter Property="Width" Value="0"/>
                             <Style.Triggers>
-                                <DataTrigger Binding="{Binding IsTargetEditable}" Value="True">
+                                <DataTrigger Binding="{Binding IsJobEditable}" Value="True">
                                     <Setter Property="Width" Value="*"/>
                                 </DataTrigger>
                             </Style.Triggers>
@@ -81,28 +81,28 @@
                 Margin="5,0,0,0"
                 VerticalAlignment="Center" 
                 FontWeight="Bold" 
-                Content="Job:"
-                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"/>
+                Content="Location:"
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"/>
             
             <TextBox 
                 Grid.Column="3"
                 Margin="5,0,0,0"
                 Width="100"
-                x:Name="JobBox" 
-                Text="{Binding Job.JobNumber}" 
-                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                x:Name="ToBox" 
+                Text="{Binding To.Code}" 
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
                 Background="LightYellow"
-                LostFocus="JobBox_LostFocus"
-                KeyUp="JobBox_OnKeyUp"
+                LostFocus="ToBox_LostFocus"
+                KeyUp="ToBox_OnKeyUp"
                 VerticalContentAlignment="Center"
                 BorderThickness="0.75,0.75,0,0.75"/>
 
             <Button 
                 Grid.Column="4"
                 Width="35"
-                x:Name="JobButton" 
-                Click="JobButton_Click"
-                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                x:Name="ToButton" 
+                Click="ToButton_Click"
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
                 Content="..." VerticalContentAlignment="Center"
                 BorderBrush="Silver"/>
             
@@ -110,8 +110,8 @@
                 Grid.Column="5"
                 Margin="5,0,0,0"
                 IsEnabled="False" 
-                Text="{Binding Job.Name}" 
-                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                Text="{Binding To.Description}" 
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
                 VerticalContentAlignment="Center"
                 Background="WhiteSmoke"/>
             
@@ -120,28 +120,28 @@
                 Margin="5,0,0,0"
                 VerticalAlignment="Center" 
                 FontWeight="Bold" 
-                Content="Location:"
-                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"/>
+                Content="Job:"
+                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"/>
             
             <TextBox 
                 Grid.Column="7"
                 Margin="5,0,0,0"
                 Width="100"
-                x:Name="ToBox" 
-                Text="{Binding To.Code}" 
-                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                x:Name="JobBox" 
+                Text="{Binding Job.JobNumber}" 
+                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"
                 Background="LightYellow"
-                LostFocus="ToBox_LostFocus"
-                KeyUp="ToBox_OnKeyUp"
+                LostFocus="JobBox_LostFocus"
+                KeyUp="JobBox_OnKeyUp"
                 VerticalContentAlignment="Center"
                 BorderThickness="0.75,0.75,0,0.75"/>
 
             <Button 
                 Grid.Column="8"
                 Width="35"
-                x:Name="ToButton" 
-                Click="ToButton_Click"
-                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                x:Name="JobButton" 
+                Click="JobButton_Click"
+                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"
                 Content="..." VerticalContentAlignment="Center"
                 BorderBrush="Silver"/>
             
@@ -149,10 +149,11 @@
                 Grid.Column="9"
                 Margin="5,0,0,0"
                 IsEnabled="False" 
-                Text="{Binding To.Description}" 
-                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                Text="{Binding Job.Name}" 
+                Visibility="{Binding IsJobEditable,Converter={StaticResource boolToVisibilityConverter}}"
                 VerticalContentAlignment="Center"
                 Background="WhiteSmoke"/>
+            
         </Grid>
 
         <local:StockHoldingRelocationGrid x:Name="Grid" Grid.Row="1"

+ 66 - 1
prs.desktop/Panels/Products/Locations/StockHoldingRelocationWindow.xaml.cs

@@ -2,6 +2,7 @@
 using InABox.Clients;
 using InABox.Core;
 using InABox.DynamicGrid;
+using Microsoft.CodeAnalysis.VisualBasic.Syntax;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
@@ -67,6 +68,28 @@ public partial class StockHoldingRelocationWindow : Window, INotifyPropertyChang
         }
     }
 
+    private StockLocation? _originalTarget;
+    public StockLocation? OriginalTarget
+    {
+        get => _originalTarget;
+        set
+        {
+            _originalTarget = value;
+            To = value;
+        }
+    }
+
+    private Job? _originalJob;
+    public Job? OriginalJob
+    {
+        get => _originalJob;
+        set
+        {
+            _originalJob = value;
+            Job = value;
+        }
+    }
+
     private Job? _job;
     public Job? Job
     {
@@ -110,7 +133,49 @@ public partial class StockHoldingRelocationWindow : Window, INotifyPropertyChang
         }
     }
 
-    public bool CanSave => (!IsTargetEditable || To is not null) && Grid.TotalIssued > 0;
+    private bool _requireChangeTarget = false;
+    public bool RequireChangeTarget
+    {
+        get => _requireChangeTarget;
+        set
+        {
+            _requireChangeTarget = value;
+            OnPropertyChanged();
+            OnPropertyChanged(nameof(CanSave));
+        }
+    }
+
+    public bool CanSave
+    {
+        get
+        {
+            if(Grid.TotalIssued <= 0)
+            {
+                return false;
+            }
+            if(IsTargetEditable && (To?.ID ?? Guid.Empty) == Guid.Empty)
+            {
+                return false;
+            }
+            if (RequireChangeTarget)
+            {
+                if(IsTargetEditable && IsJobEditable)
+                {
+                    return (To?.ID ?? Guid.Empty) != (OriginalTarget?.ID ?? Guid.Empty)
+                        || (Job?.ID ?? Guid.Empty) != (OriginalJob?.ID ?? Guid.Empty);
+                }
+                else if (IsTargetEditable)
+                {
+                    return (To?.ID ?? Guid.Empty) != (OriginalTarget?.ID ?? Guid.Empty);
+                }
+                else if (IsJobEditable)
+                {
+                    return (Job?.ID ?? Guid.Empty) != (OriginalJob?.ID ?? Guid.Empty);
+                }
+            }
+            return true;
+        }
+    }
 
     public StockHoldingRelocationWindow(StockHolding from, IEnumerable<JobRequisitionItem> items)
     {