Procházet zdrojové kódy

Merge remote-tracking branch 'origin/frank' into kenric

# Conflicts:
#	prs.classes/Entities/Job/JobForm.cs
Kenric Nugteren před 1 rokem
rodič
revize
13988ee914

+ 13 - 5
prs.classes/Entities/Job/Job.cs

@@ -23,24 +23,32 @@ namespace Comal.Classes
         [TextBoxEditor]
         [EditorSequence(1)]
         public string Name { get; set; }
+        
+        [EditorSequence(2)]
+        [DateEditor]
+        public DateTime Date { get; set; }
 
         [SecondaryIndex]
         [EnumLookupEditor(typeof(JobType))]
-        [EditorSequence(2)]
+        [EditorSequence(3)]
         public JobType JobType { get; set; } = JobType.Project;
 
-        [EditorSequence(3)]
+        [EditorSequence(4)]
         public CustomerLink Customer { get; set; }
         
-        [EditorSequence(4)]
+        [EditorSequence(5)]
         public Address SiteAddress { get; set; }
         
-        [EditorSequence(5)]
+        [EditorSequence(6)]
         public ContactLink Contact { get; set; }
         
-        [EditorSequence(6)]
+        [EditorSequence(7)]
         [Caption("Bill To")]
         public AccountLink Account { get; set; }
+        
+        [EditorSequence(8)]
+        [TextBoxEditor]
+        public String ClientReference { get; set; }
 
         #endregion
 

+ 5 - 0
prs.classes/Entities/Job/JobForm.cs

@@ -4,6 +4,10 @@ namespace Comal.Classes
 {
     public class JobForm : EntityForm<Job, JobLink, JobForm>, IDigitalForm<Job>, ILicense<ProjectManagementLicense>
     {
+        [EditorSequence(998)]
+        [EntityRelationship(DeleteAction.Cascade)]
+        public override  JobLink Parent { get; set; }
+        
         private class JobScopeLookup : LookupDefinitionGenerator<JobScope, JobForm>
         {
             public override Filter<JobScope> DefineFilter(JobForm[] items)
@@ -18,6 +22,7 @@ namespace Comal.Classes
                 => new Columns<JobForm>(x => x.Parent.ID);
         }
         [LookupDefinition(typeof(JobScopeLookup))]
+        [EditorSequence(999)]
         public JobScopeLink JobScope { get; set; }
 
         public override string AutoIncrementPrefix() => "JF";

+ 10 - 4
prs.classes/Entities/Job/JobLink.cs

@@ -15,14 +15,20 @@ namespace Comal.Classes
 
         [CodeEditor(Visible = Visible.Default)]
         public string JobNumber { get; set; }
-
-        //[Obsolete("Replaced by JobNumber", true)]
-        //[IntegerEditor(Editable = Editable.Hidden)]
-        //public int Number { get; set; }
+        
+        [DateEditor(Editable=Editable.Disabled)]
+        public DateTime Date { get; set; }
 
         [ColorEditor(Editable = Editable.Hidden)]
         public string Color { get; set; }
         
+        public CustomerLink Customer { get; set; }
+        
+        public AccountLink Account { get; set; }
+        
+        [TextBoxEditor(Editable = Editable.Disabled)]
+        public String ClientReference { get; set; }
+        
         public Address SiteAddress { get; set; }
         
         public ContactLink Contact { get; set; }

+ 1 - 1
prs.classes/Entities/Job/Requisitions/JobRequisitionItemLink.cs

@@ -38,7 +38,7 @@ namespace Comal.Classes
         [EnumLookupEditor(typeof(JobRequisitionItemStatus))]
         public JobRequisitionItemStatus Status { get; set; } = JobRequisitionItemStatus.NotChecked;
 
-        [IntegerEditor(Visible = Visible.Default, Editable = Editable.Disabled)]
+        [NullEditor]
         [Obsolete("Replaced with JobRequisitionItemPurchaseOrderItem")]
         public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
     }

+ 10 - 2
prs.classes/Entities/Requisition/RequisitionItem.cs

@@ -25,7 +25,7 @@ namespace Comal.Classes
         [EntityRelationship(DeleteAction.Cascade)]
         [NullEditor]
         public JobLink JobLink { get; set; }
-
+        
         [EditorSequence(1)]
         [RequiredColumn]
         public override ProductLink Product { get; set; }
@@ -76,11 +76,19 @@ namespace Comal.Classes
         [EditorSequence(9)]
         [RequiredColumn]
         public StockLocationLink Location { get; set; }
-
+        
         [EditorSequence(10)]
+        [RequiredColumn]
+        public JobRequisitionItemLink JobRequisitionItem { get; set; }
+
+        [EditorSequence(11)]
         [TimestampEditor]
         public DateTime Picked { get; set; }
         
+        [EditorSequence("Image",1)]
+        [DataModelTableName("Image")]
+        public ImageDocumentLink Image { get; set; }
+        
         [NullEditor]
         public string BarCode { get; set; }
         

+ 16 - 16
prs.desktop/Panels/Products/Locations/StockHoldingGrid.cs

@@ -159,12 +159,12 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
                     && x.Job.ID == first.Job.ID
                     && x.Style.ID == first.Style.ID
                     && x.Dimensions.Unit.ID == first.Dimensions.Unit.ID
-                    && x.Dimensions.Length.EqualsWithTolerance(first.Dimensions.Length)
-                    && x.Dimensions.Width.EqualsWithTolerance(first.Dimensions.Width)
-                    && x.Dimensions.Height.EqualsWithTolerance(first.Dimensions.Height)
-                    && x.Dimensions.Quantity.EqualsWithTolerance(first.Dimensions.Quantity)
-                    && x.Dimensions.Weight.EqualsWithTolerance(first.Dimensions.Weight)
-                    && x.Dimensions.Value.EqualsWithTolerance(first.Dimensions.Value)
+                    && x.Dimensions.Length.IsEffectivelyEqual(first.Dimensions.Length)
+                    && x.Dimensions.Width.IsEffectivelyEqual(first.Dimensions.Width)
+                    && x.Dimensions.Height.IsEffectivelyEqual(first.Dimensions.Height)
+                    && x.Dimensions.Quantity.IsEffectivelyEqual(first.Dimensions.Quantity)
+                    && x.Dimensions.Weight.IsEffectivelyEqual(first.Dimensions.Weight)
+                    && x.Dimensions.Value.IsEffectivelyEqual(first.Dimensions.Value)
                     && String.Equals(x.Dimensions.UnitSize, first.Dimensions.UnitSize)
                 );
                 var units = selected.Aggregate(0.0d, (t, s) => t += s.Units);
@@ -175,12 +175,12 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
                     && x.Job.ID == first.Job.ID
                     && x.Style.ID == first.Style.ID
                     && x.Dimensions.Unit.ID == first.Dimensions.Unit.ID
-                    && x.Dimensions.Length.EqualsWithTolerance(first.Dimensions.Length)
-                    && x.Dimensions.Width.EqualsWithTolerance(first.Dimensions.Width)
-                    && x.Dimensions.Height.EqualsWithTolerance(first.Dimensions.Height)
-                    && x.Dimensions.Quantity.EqualsWithTolerance(first.Dimensions.Quantity)
-                    && x.Dimensions.Weight.EqualsWithTolerance(first.Dimensions.Weight)
-                    && x.Dimensions.Length.EqualsWithTolerance(first.Dimensions.Length)
+                    && x.Dimensions.Length.IsEffectivelyEqual(first.Dimensions.Length)
+                    && x.Dimensions.Width.IsEffectivelyEqual(first.Dimensions.Width)
+                    && x.Dimensions.Height.IsEffectivelyEqual(first.Dimensions.Height)
+                    && x.Dimensions.Quantity.IsEffectivelyEqual(first.Dimensions.Quantity)
+                    && x.Dimensions.Weight.IsEffectivelyEqual(first.Dimensions.Weight)
+                    && x.Dimensions.Length.IsEffectivelyEqual(first.Dimensions.Length)
                     && String.Equals(x.Dimensions.UnitSize, first.Dimensions.UnitSize)
                 );
                 if (holding == null)
@@ -200,12 +200,12 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
                     holding.Dimensions.UnitSize = first.Dimensions.UnitSize;
                 }
                 holding.Units = units;
-                holding.AverageValue = units.EqualsWithTolerance(0.0F) ? 0.0d : cost / units;
+                holding.AverageValue = units.IsEffectivelyEqual(0.0F) ? 0.0d : cost / units;
 
                 if (holdings.Contains(holding))
                     holdings.Remove(holding);
 
-                if (holding.IsChanged() && !holding.Units.EqualsWithTolerance(0.0f))
+                if (holding.IsChanged() && !holding.Units.IsEffectivelyEqual(0.0f))
                 {
                     AddMessage(holding.ID != Guid.Empty ? "updated" : "added");
                     updates.Add(holding);
@@ -276,7 +276,7 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
                 .Add(x => x.Requisition.Description)
                 .Add(x => x.Qty))
             .ToObjects<JobRequisitionItem>();
-        if (!holding.Available.EqualsWithTolerance(0.0F))
+        if (!holding.Available.IsEffectivelyEqual(0.0F))
             items = CoreUtils.One(new JobRequisitionItem() { Qty = holding.Available }).Concat(items);
         return items;
     }
@@ -286,7 +286,7 @@ public class StockHoldingGrid : DynamicDataGrid<StockHolding>
         if (row is null) return;
         var holding = row.ToObject<StockHolding>();
 
-        if (holding.Available.EqualsWithTolerance(holding.Units))
+        if (holding.Available.IsEffectivelyEqual(holding.Units))
             column.AddItem("(No Requisitions in this Holding", null, null).IsEnabled = false;
         else
             column.AddItem("View Requisition Items", null, ViewRequisitions_Click);

+ 214 - 63
prs.desktop/Panels/Products/Locations/StockHoldingRelocationWindow.xaml

@@ -7,84 +7,205 @@
         xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
         xmlns:WPF="clr-namespace:InABox.WPF;assembly=InABox.Wpf"
         mc:Ignorable="d"
-        Title="Relocate Items" Height="300" Width="600"
+        Title="Relocate Items" Height="500" Width="750"
+        WindowStartupLocation="CenterOwner"
         x:Name="Window">
     <Window.Resources>
         <WPF:BooleanToVisibilityConverter x:Key="boolToVisibilityConverter" TrueValue="Visible" FalseValue="Collapsed"/>
     </Window.Resources>
-    <Grid DataContext="{Binding ElementName=Window}">
+    <Grid DataContext="{Binding ElementName=Window}" Margin="5">
         <Grid.RowDefinitions>
             <RowDefinition Height="Auto"/>
             <RowDefinition Height="*"/>
             <RowDefinition Height="Auto"/>
         </Grid.RowDefinitions>
-        <DockPanel Grid.Row="0" LastChildFill="False" Height="35">
-            <Border DockPanel.Dock="Left" Margin="5,0,0,0">
-                <TextBlock VerticalAlignment="Center" Text="Location: " FontWeight="Bold"/>
-            </Border>
-            <TextBox IsEnabled="False" Text="{Binding From.Location.Code}" Width="100"
-                     VerticalAlignment="Stretch"
-                     DockPanel.Dock="Left" Margin="5" VerticalContentAlignment="Center"/>
-            <TextBox IsEnabled="False" Text="{Binding To.Description}" Width="150"
-                     Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
-                     VerticalAlignment="Stretch"
-                     DockPanel.Dock="Right" Margin="5" VerticalContentAlignment="Center"/>
-            <Button x:Name="ToButton" Click="ToButton_Click"
-                    VerticalAlignment="Stretch"
-                    Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
-                    Content="..." VerticalContentAlignment="Center"
-                    Padding="5,0"
-                    Margin="5,5,0,5" DockPanel.Dock="Right"/>
-            <TextBox x:Name="ToBox" Text="{Binding To.Code}" Width="100"
-                     VerticalAlignment="Stretch"
-                     Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
-                     Background="LightYellow"
-                     LostFocus="ToBox_LostFocus"
-                     DockPanel.Dock="Right" Margin="5,5,0,5"
-                     VerticalContentAlignment="Center"/>
-            <Border DockPanel.Dock="Right">
-                <TextBlock VerticalAlignment="Center" FontWeight="Bold" Text="To:"
-                           Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"/>
-            </Border>
+        
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="*"/>
+        </Grid.ColumnDefinitions>
+        
+        <DockPanel 
+            Grid.Row="0" 
+            Margin="5">
+            
+            <Label 
+                DockPanel.Dock="Left"
+                VerticalAlignment="Center" 
+                Content="From:" 
+                FontWeight="Bold"/>
+            
+            <TextBox 
+                DockPanel.Dock="Left"
+                Margin="5,0,0,0"
+                Width="100"
+                IsEnabled="False" 
+                Text="{Binding From.Location.Code}" 
+                VerticalContentAlignment="Center"
+                Background="WhiteSmoke"/>
+            
+            <Label 
+                DockPanel.Dock="Left"
+                Margin="5,0,0,0"
+                VerticalAlignment="Center" 
+                FontWeight="Bold" 
+                Content="To:"
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"/>
+            
+            <TextBox 
+                DockPanel.Dock="Left"
+                Margin="5,0,0,0"
+                Width="100"
+                x:Name="ToBox" 
+                Text="{Binding To.Code}" 
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                Background="LightYellow"
+                LostFocus="ToBox_LostFocus"
+                KeyUp="ToBox_OnKeyUp"
+                VerticalContentAlignment="Center"
+                BorderThickness="0.75,0.75,0,0.75"/>
+
+            <Button 
+                DockPanel.Dock="Left"
+                Width="35"
+                x:Name="ToButton" 
+                Click="ToButton_Click"
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                Content="..." VerticalContentAlignment="Center"
+                BorderBrush="Silver"/>
+            
+            <TextBox 
+                DockPanel.Dock="Left"
+                Margin="5,0,0,0"
+                IsEnabled="False" 
+                Text="{Binding To.Description}" 
+                Visibility="{Binding IsTargetEditable,Converter={StaticResource boolToVisibilityConverter}}"
+                VerticalContentAlignment="Center"
+                Background="WhiteSmoke"/>
+            
         </DockPanel>
-        <Border Grid.Row="1"
-                Margin="2" BorderBrush="LightGray" BorderThickness="1" Padding="2">
+        
+        <Border 
+            Grid.Row="1"
+            Margin="5,0,5,5" 
+            BorderBrush="Silver" 
+            BorderThickness="0.75" >
+            
             <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden">
+                
                 <Grid>
                     <Grid.RowDefinitions>
-                        <RowDefinition Height="Auto"/>
-                        <RowDefinition Height="Auto"/>
+                        <RowDefinition Height="40"/>
+                        <RowDefinition Height="*"/>
+                        <RowDefinition Height="40"/>
                     </Grid.RowDefinitions>
-                    <ItemsControl ItemsSource="{Binding Items}"
-                                  Grid.Row="0">
+                    
+                    <Grid Grid.Row="0" Background="Silver">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="30"/>
+                            <ColumnDefinition Width="*"/>
+                            <ColumnDefinition Width="60"/>
+                            <ColumnDefinition Width="50"/>
+                            <ColumnDefinition Width="30"/>
+                            <ColumnDefinition Width="60"/>
+                            <ColumnDefinition Width="30"/>
+                            <ColumnDefinition Width="50"/>
+                        </Grid.ColumnDefinitions>
+                        <Label Grid.Column="0" Content="#" HorizontalContentAlignment="Center" FontWeight="Bold" VerticalContentAlignment="Center" />
+                        <Label Grid.Column="1" Content="Description" HorizontalContentAlignment="Center" FontWeight="Bold" VerticalContentAlignment="Center" />
+                        <Label Grid.Column="2" Content="Total" HorizontalContentAlignment="Center" FontWeight="Bold" VerticalContentAlignment="Center" />
+                        <Label Grid.Column="5" Content="Quantity" HorizontalContentAlignment="Center" FontWeight="Bold" VerticalContentAlignment="Center" />
+                    </Grid>
+            
+                    <ItemsControl 
+                        ItemsSource="{Binding Items}"
+                        Grid.Row="1">
                         <ItemsControl.ItemTemplate>
                             <DataTemplate DataType="local:StockHoldingRelocationItem">
-                                <Border BorderBrush="LightGray" BorderThickness="0,0,0,1" Padding="2">
+                                
+                                <Border 
+                                    BorderBrush="LightGray" 
+                                    BorderThickness="0,0,0,0.75" 
+                                    Padding="5">
+                                    
                                     <Grid>
                                         <Grid.ColumnDefinitions>
+                                            <ColumnDefinition Width="30"/>
                                             <ColumnDefinition Width="*"/>
                                             <ColumnDefinition Width="60"/>
-                                            <ColumnDefinition Width="40"/>
-                                            <ColumnDefinition Width="20"/>
+                                            <ColumnDefinition Width="50"/>
+                                            <ColumnDefinition Width="30"/>
                                             <ColumnDefinition Width="60"/>
-                                            <ColumnDefinition Width="20"/>
-                                            <ColumnDefinition Width="40"/>
+                                            <ColumnDefinition Width="30"/>
+                                            <ColumnDefinition Width="50"/>
                                         </Grid.ColumnDefinitions>
-                                        <TextBlock Grid.Column="0" VerticalAlignment="Center">
-                                            <Run Text="{Binding ItemNumber}" FontWeight="Bold"/>
-                                            <Run Text="{Binding Text}"/>
-                                        </TextBlock>
-                                        <TextBlock Grid.Column="1" Text="{Binding Quantity}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
-                                        <Button Grid.Column="2" Content="None" Tag="{Binding}" Click="None_Click"
-                                                Margin="2,0"/>
-                                        <Button Grid.Column="3" Content="-" Tag="{Binding}" Click="Minus_Click"
-                                                Margin="2,0"/>
-                                        <syncfusion:DoubleTextBox Grid.Column="4" Value="{Binding Issued}" MinValue="0" MaxValue="{Binding Quantity}"
-                                                                  HorizontalContentAlignment="Center"/>
-                                        <Button Grid.Column="5" Content="+" Tag="{Binding}" Click="Plus_Click"
-                                                Margin="2,0,0,0"/>
-                                        <Button Grid.Column="6" Content="All" Tag="{Binding}" Click="All_Click"
-                                                Margin="2,0"/>
+                                        
+                                        <Grid.RowDefinitions>
+                                            <RowDefinition Height="30" />
+                                        </Grid.RowDefinitions>
+                                        
+                                        <Label 
+                                            Grid.Column="0" 
+                                            Content="{Binding ItemNumber}" 
+                                            FontWeight="Bold"
+                                            VerticalAlignment="Center"/>
+                                        
+                                        <TextBlock
+                                            Grid.Column="1" 
+                                            VerticalAlignment="Center"
+                                            Text="{Binding Text}"
+                                            TextWrapping="NoWrap"
+                                            TextTrimming="CharacterEllipsis"
+                                            Margin="5,0,0,0"/>
+                                        
+                                        <syncfusion:DoubleTextBox 
+                                            Grid.Column="2" 
+                                            Value="{Binding Quantity}" 
+                                            IsReadOnly="True"
+                                            HorizontalContentAlignment="Center"
+                                            VerticalAlignment="Stretch"
+                                            VerticalContentAlignment="Center"
+                                            Margin="5,0,0,0"
+                                            Background="WhiteSmoke"/>
+                                        
+                                        <Button 
+                                            Grid.Column="3" 
+                                            Content="None" 
+                                            Tag="{Binding}" 
+                                            Click="None_Click"
+                                            Margin="5,0,0,0"/>
+                                        
+                                        <Button 
+                                            Grid.Column="4" 
+                                            Content="-" 
+                                            Tag="{Binding}" 
+                                            Click="Minus_Click"
+                                            Margin="5,0,0,0"/>
+                                        
+                                        <syncfusion:DoubleTextBox 
+                                            Grid.Column="5" 
+                                            Value="{Binding Issued}" 
+                                            MinValue="0" 
+                                            MaxValue="{Binding Quantity}"
+                                            HorizontalContentAlignment="Center"
+                                            VerticalAlignment="Stretch"
+                                            VerticalContentAlignment="Center"
+                                            Margin="5,0,0,0"
+                                            Background="LightYellow"/>
+                                        
+                                        <Button 
+                                            Grid.Column="6" 
+                                            Content="+" 
+                                            Tag="{Binding}" 
+                                            Click="Plus_Click"
+                                            Margin="5,0,0,0"/>
+                                        
+                                        <Button 
+                                            Grid.Column="7" 
+                                            Content="All" 
+                                            Tag="{Binding}" 
+                                            Click="All_Click"
+                                            Margin="5,0,0,0"/>
+                                        
                                     </Grid>
                                 </Border>
                             </DataTemplate>
@@ -95,20 +216,50 @@
                             </ItemsPanelTemplate>
                         </ItemsControl.ItemsPanel>
                     </ItemsControl>
-                    <Border Padding="2" Grid.Row="1">
+                    
+                    <Border Grid.Row="2" BorderBrush="Silver" BorderThickness="0,0.75,0,0" Background="WhiteSmoke">
                         <Grid>
                             <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="30"/>
                                 <ColumnDefinition Width="*"/>
                                 <ColumnDefinition Width="60"/>
-                                <ColumnDefinition Width="40"/>
-                                <ColumnDefinition Width="100"/>
-                                <ColumnDefinition Width="40"/>
+                                <ColumnDefinition Width="50"/>
+                                <ColumnDefinition Width="30"/>
+                                <ColumnDefinition Width="60"/>
+                                <ColumnDefinition Width="30"/>
+                                <ColumnDefinition Width="50"/>
                             </Grid.ColumnDefinitions>
-                            <TextBlock Grid.Column="0" Text="Total to Transfer/Issue" FontWeight="Bold" VerticalAlignment="Center"/>
-                            <TextBlock Grid.Column="1" Text="{Binding TotalQuantity}" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Center"/>
-                            <TextBlock Grid.Column="3" Text="{Binding TotalIssued}" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                            
+                            <TextBlock 
+                                Grid.Column="0" 
+                                Grid.ColumnSpan="2" 
+                                Text="Total to Transfer/Issue" 
+                                FontWeight="Bold" 
+                                VerticalAlignment="Center" 
+                                Margin="5,0,0,0"/>
+                            
+                            <syncfusion:DoubleTextBox 
+                                Grid.Column="2" 
+                                Value="{Binding TotalQuantity}" 
+                                IsReadOnly="True"
+                                HorizontalContentAlignment="Center"
+                                VerticalAlignment="Stretch"
+                                VerticalContentAlignment="Center"
+                                Margin="0,5,5,5"
+                                Background="WhiteSmoke"/>
+
+                            <syncfusion:DoubleTextBox 
+                                Grid.Column="5"
+                                Value="{Binding TotalIssued}" 
+                                IsReadOnly="True"
+                                HorizontalContentAlignment="Center"
+                                VerticalAlignment="Stretch"
+                                VerticalContentAlignment="Center"
+                                Margin="0,5,5,5"
+                                Background="LightGreen"/>
                         </Grid>
                     </Border>
+                    
                 </Grid>
             </ScrollViewer>
         </Border>

+ 18 - 3
prs.desktop/Panels/Products/Locations/StockHoldingRelocationWindow.xaml.cs

@@ -269,11 +269,20 @@ public partial class StockHoldingRelocationWindow : Window, INotifyPropertyChang
 
     private void ToBox_LostFocus(object sender, RoutedEventArgs e)
     {
-        if (ToBox.Text.IsNullOrWhiteSpace() || ToBox.Text == To?.Code) return;
+        DoSearch();
+    }
+
+    private void DoSearch()
+    {
+        if (ToBox.Text.IsNullOrWhiteSpace() || ToBox.Text == To?.Code)
+        {
+            To = null;
+            return;
+        }
 
         var location = Client.Query(
-            new Filter<StockLocation>(x => x.Code).IsEqualTo(ToBox.Text),
-            new Columns<StockLocation>(x => x.ID).Add(x => x.Code).Add(x => x.Description))
+                new Filter<StockLocation>(x => x.Code).IsEqualTo(ToBox.Text),
+                new Columns<StockLocation>(x => x.ID).Add(x => x.Code).Add(x => x.Description))
             .ToObjects<StockLocation>().FirstOrDefault();
         if(location is not null)
         {
@@ -287,4 +296,10 @@ public partial class StockHoldingRelocationWindow : Window, INotifyPropertyChang
             }
         }
     }
+
+    private void ToBox_OnKeyUp(object sender, KeyEventArgs e)
+    {
+        if (e.Key == Key.Enter)
+            DoSearch();
+    }
 }

+ 0 - 2
prs.desktop/Panels/Products/Master List/ProductsGrid.cs

@@ -22,8 +22,6 @@ namespace PRSDesktop
         public ProductsGrid()
         {
             HiddenColumns.Add(x => x.LastUpdate);
-            HiddenColumns.Add(x => x.Image.ID);
-            HiddenColumns.Add(x => x.Image.FileName);
             HiddenColumns.Add(x => x.Group.ID);
             HiddenColumns.Add(x=>x.UnitOfMeasure.ID);
             HiddenColumns.Add(x => x.Code);

+ 5 - 0
prs.desktop/Panels/Requisitions/RequisitionItemGrid.cs

@@ -51,6 +51,11 @@ namespace PRSDesktop
             HiddenColumns.Add(x => x.Style.ID);
             HiddenColumns.Add(x => x.Style.Code);
             HiddenColumns.Add(x => x.Picked);
+            
+            HiddenColumns.Add(x => x.Image.ID);
+            HiddenColumns.Add(x => x.Image.FileName);
+            ActionColumns.Add(new DynamicImageManagerColumn<RequisitionItem>(this, x => x.Image, true) { Position = DynamicActionColumnPosition.Start });
+            
             ActionColumns.Add(new DynamicImageColumn(Pick_Image, Pick_Click)
             {
                 ToolTip = Pick_ToolTip

+ 1 - 1
prs.desktop/prsdesktop.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Desktop"
-#define MyAppVersion "7.58"
+#define MyAppVersion "7.60"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSDesktop.exe"

+ 1 - 1
prs.licensing/PRSLicensing.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Licensing"
-#define MyAppVersion "7.58"
+#define MyAppVersion "7.60"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSLicensing.exe"

+ 1 - 1
prs.server/PRSServer.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Server"
-#define MyAppVersion "7.58"
+#define MyAppVersion "7.60"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSServer.exe"

+ 1 - 1
prs.stores/StockHoldingStore.cs

@@ -76,7 +76,7 @@ public class StockHoldingStore : BaseStore<StockHolding>
         holding.AverageValue = holding.Units != 0 ? holding.Value / holding.Units : 0.0F;
 
         // Automagically clean up empty holdings
-        if (holding.Units.EqualsWithTolerance(0.0F))
+        if (holding.Units.IsEffectivelyEqual(0.0F))
         {
             if (holding.ID != Guid.Empty)
                 DbFactory.Provider.Delete(holding, "");